{"version":3,"file":"index.cjs","sources":["../node_modules/.pnpm/@alcyone-labs+simple-chalk@1.0.1/node_modules/@alcyone-labs/simple-chalk/dist/esm/SimpleChalk.js","../node_modules/.pnpm/@alcyone-labs+simple-chalk@1.0.1/node_modules/@alcyone-labs/simple-chalk/dist/esm/SimpleChalkFast.js","../node_modules/.pnpm/@alcyone-labs+simple-chalk@1.0.1/node_modules/@alcyone-labs/simple-chalk/dist/esm/SimpleChalkBrowser.js","../src/config/plugins/ConfigPlugin.ts","../src/config/plugins/ConfigPluginRegistry.ts","../src/config/ConfigurationManager.ts","../src/core/types.ts","../src/dxt/DxtGenerator-testUtils.ts","../src/core/log-path-utils.ts","../src/core/dxt-path-resolver.ts","../src/dxt/DxtGenerator.ts","../src/mcp/mcp-notifications.ts","../src/mcp/mcp-prompts.ts","../src/mcp/mcp-resources.ts","../src/utils/debug-utils.ts","../src/core/FlagManager.ts","../src/core/ArgParserBase.ts","../src/mcp/mcp-utils.ts","../src/mcp/mcp-integration.ts","../src/mcp/mcp-protocol-versions.ts","../src/mcp/zod-compatibility.ts","../src/core/ArgParser.ts","../src/mcp/ArgParserMcp.ts","../src/config/plugins/TomlConfigPlugin.ts","../src/config/plugins/YamlConfigPlugin.ts","../src/testing/fuzzy-tester.ts","../node_modules/.pnpm/@alcyone-labs+modelcontextprotocol-sdk@1.16.0/node_modules/@alcyone-labs/modelcontextprotocol-sdk/dist/esm/types.js","../node_modules/.pnpm/@alcyone-labs+modelcontextprotocol-sdk@1.16.0/node_modules/@alcyone-labs/modelcontextprotocol-sdk/dist/esm/shared/protocol.js","../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/dist/es5/uri.all.js","../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/ucs2length.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/util.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/schema_obj.js","../node_modules/.pnpm/json-schema-traverse@0.4.1/node_modules/json-schema-traverse/index.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/resolve.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/error_classes.js","../node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/validate.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/index.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/cache.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/formats.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/ref.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/allOf.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/anyOf.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/comment.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/const.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/contains.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/dependencies.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/enum.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/format.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/if.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/items.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limit.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitItems.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitLength.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitProperties.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/multipleOf.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/not.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/oneOf.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/pattern.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/properties.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/propertyNames.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/required.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/uniqueItems.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/index.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/rules.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/data.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/async.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/custom.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/definition_schema.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/keyword.js","../node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/ajv.js","../node_modules/.pnpm/@alcyone-labs+modelcontextprotocol-sdk@1.16.0/node_modules/@alcyone-labs/modelcontextprotocol-sdk/dist/esm/server/index.js","../node_modules/.pnpm/@alcyone-labs+modelcontextprotocol-sdk@1.16.0/node_modules/@alcyone-labs/modelcontextprotocol-sdk/dist/esm/server/completable.js","../node_modules/.pnpm/@alcyone-labs+modelcontextprotocol-sdk@1.16.0/node_modules/@alcyone-labs/modelcontextprotocol-sdk/dist/esm/shared/uriTemplate.js","../node_modules/.pnpm/@alcyone-labs+modelcontextprotocol-sdk@1.16.0/node_modules/@alcyone-labs/modelcontextprotocol-sdk/dist/esm/server/mcp.js","../src/mcp/mcp-lifecycle.ts","../node_modules/.pnpm/@alcyone-labs+modelcontextprotocol-sdk@1.16.0/node_modules/@alcyone-labs/modelcontextprotocol-sdk/dist/esm/shared/stdio.js","../node_modules/.pnpm/@alcyone-labs+modelcontextprotocol-sdk@1.16.0/node_modules/@alcyone-labs/modelcontextprotocol-sdk/dist/esm/server/stdio.js","../node_modules/.pnpm/bytes@3.1.2/node_modules/bytes/index.js","../node_modules/.pnpm/depd@2.0.0/node_modules/depd/lib/browser/index.js","../node_modules/.pnpm/setprototypeof@1.2.0/node_modules/setprototypeof/index.js","../node_modules/.pnpm/statuses@2.0.1/node_modules/statuses/index.js","../node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits_browser.js","../node_modules/.pnpm/toidentifier@1.0.1/node_modules/toidentifier/index.js","../node_modules/.pnpm/http-errors@2.0.0/node_modules/http-errors/index.js","../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.js","../node_modules/.pnpm/safer-buffer@2.1.2/node_modules/safer-buffer/safer.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/lib/bom-handling.js","../node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js","../node_modules/.pnpm/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/internal.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf32.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf16.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf7.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-codec.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-data.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-data-generated.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/dbcs-codec.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/dbcs-data.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/index.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/lib/streams.js","../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/lib/index.js","../node_modules/.pnpm/unpipe@1.0.0/node_modules/unpipe/index.js","../node_modules/.pnpm/raw-body@3.0.0/node_modules/raw-body/index.js","../node_modules/.pnpm/content-type@1.0.5/node_modules/content-type/index.js","../node_modules/.pnpm/@alcyone-labs+modelcontextprotocol-sdk@1.16.0/node_modules/@alcyone-labs/modelcontextprotocol-sdk/dist/esm/server/sse.js","../node_modules/.pnpm/@alcyone-labs+modelcontextprotocol-sdk@1.16.0/node_modules/@alcyone-labs/modelcontextprotocol-sdk/dist/esm/server/streamableHttp.js","../node_modules/.pnpm/smol-toml@1.4.1/node_modules/smol-toml/dist/error.js","../node_modules/.pnpm/smol-toml@1.4.1/node_modules/smol-toml/dist/util.js","../node_modules/.pnpm/smol-toml@1.4.1/node_modules/smol-toml/dist/date.js","../node_modules/.pnpm/smol-toml@1.4.1/node_modules/smol-toml/dist/primitive.js","../node_modules/.pnpm/smol-toml@1.4.1/node_modules/smol-toml/dist/extract.js","../node_modules/.pnpm/smol-toml@1.4.1/node_modules/smol-toml/dist/struct.js","../node_modules/.pnpm/smol-toml@1.4.1/node_modules/smol-toml/dist/parse.js","../node_modules/.pnpm/smol-toml@1.4.1/node_modules/smol-toml/dist/stringify.js","../node_modules/.pnpm/smol-toml@1.4.1/node_modules/smol-toml/dist/index.js"],"sourcesContent":["/**\n * Simple chalk replacement for basic terminal colors\n * Provides the same API as chalk but without dynamic requires or complex dependencies\n * Perfect for bundling in autonomous builds\n */\n// ANSI color codes\nconst RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst UNDERLINE = '\\x1b[4m';\n// Colors\nconst BLACK = '\\x1b[30m';\nconst RED = '\\x1b[31m';\nconst GREEN = '\\x1b[32m';\nconst YELLOW = '\\x1b[33m';\nconst BLUE = '\\x1b[34m';\nconst MAGENTA = '\\x1b[35m';\nconst CYAN = '\\x1b[36m';\nconst WHITE = '\\x1b[37m';\nconst GRAY = '\\x1b[90m';\n// Check if colors should be enabled\nfunction supportsColor() {\n    // Browser environment detection\n    const isBrowser = typeof globalThis.window !== 'undefined' && typeof globalThis.document !== 'undefined';\n    if (isBrowser) {\n        // In browsers, enable colors by default (modern browsers support ANSI in console)\n        // But respect NO_COLOR if somehow set in browser environment\n        return !globalThis.NO_COLOR;\n    }\n    // Node.js environment\n    if (typeof process !== 'undefined') {\n        // In MCP mode or when NO_COLOR is set, disable colors\n        if (process.env['NO_COLOR'] || process.env['MCP_MODE']) {\n            return false;\n        }\n        // Enable colors if FORCE_COLOR is set\n        if (process.env['FORCE_COLOR']) {\n            return true;\n        }\n        // Check if we're in a TTY\n        if (process.stdout && process.stdout.isTTY) {\n            return true;\n        }\n    }\n    return false;\n}\nconst colorEnabled = supportsColor();\nfunction colorize(text, ...codes) {\n    if (!colorEnabled || codes.length === 0) {\n        return text;\n    }\n    return codes.join('') + text + RESET;\n}\n// Helper function to add a property to a chalk function\nfunction addChalkProperty(fn, name, code, codes) {\n    Object.defineProperty(fn, name, {\n        get: () => createColorFunction([...codes, code]),\n        configurable: true\n    });\n}\n// Create a chainable color function\nfunction createColorFunction(codes) {\n    const fn = ((text) => colorize(text, ...codes));\n    // Add modifier properties\n    addChalkProperty(fn, 'bold', BOLD, codes);\n    addChalkProperty(fn, 'dim', DIM, codes);\n    addChalkProperty(fn, 'underline', UNDERLINE, codes);\n    // Add color properties\n    addChalkProperty(fn, 'black', BLACK, codes);\n    addChalkProperty(fn, 'red', RED, codes);\n    addChalkProperty(fn, 'green', GREEN, codes);\n    addChalkProperty(fn, 'yellow', YELLOW, codes);\n    addChalkProperty(fn, 'blue', BLUE, codes);\n    addChalkProperty(fn, 'magenta', MAGENTA, codes);\n    addChalkProperty(fn, 'cyan', CYAN, codes);\n    addChalkProperty(fn, 'white', WHITE, codes);\n    addChalkProperty(fn, 'gray', GRAY, codes);\n    addChalkProperty(fn, 'grey', GRAY, codes);\n    addChalkProperty(fn, 'blueBright', CYAN, codes);\n    return fn;\n}\n// Create the main chalk object\nconst simpleChalk = createColorFunction([]);\nexport default simpleChalk;\n//# sourceMappingURL=SimpleChalk.js.map","/**\n * Fast SimpleChalk implementation - no chaining, maximum performance\n * Similar to picocolors approach\n */\n// ANSI color codes\nconst RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst UNDERLINE = '\\x1b[4m';\n// Colors\nconst BLACK = '\\x1b[30m';\nconst RED = '\\x1b[31m';\nconst GREEN = '\\x1b[32m';\nconst YELLOW = '\\x1b[33m';\nconst BLUE = '\\x1b[34m';\nconst MAGENTA = '\\x1b[35m';\nconst CYAN = '\\x1b[36m';\nconst WHITE = '\\x1b[37m';\nconst GRAY = '\\x1b[90m';\n// Check if colors should be enabled\nfunction supportsColor() {\n    // Browser environment detection\n    const isBrowser = typeof globalThis.window !== 'undefined' && typeof globalThis.document !== 'undefined';\n    if (isBrowser) {\n        // In browsers, enable colors by default (modern browsers support ANSI in console)\n        // But respect NO_COLOR if somehow set in browser environment\n        return !globalThis.NO_COLOR;\n    }\n    // Node.js environment\n    if (typeof process !== 'undefined') {\n        // In MCP mode or when NO_COLOR is set, disable colors\n        if (process.env['NO_COLOR'] || process.env['MCP_MODE']) {\n            return false;\n        }\n        // Enable colors if FORCE_COLOR is set\n        if (process.env['FORCE_COLOR']) {\n            return true;\n        }\n        // Check if we're in a TTY\n        if (process.stdout && process.stdout.isTTY) {\n            return true;\n        }\n    }\n    return false;\n}\nconst colorEnabled = supportsColor();\n// Simple formatter function\nconst format = (code) => colorEnabled\n    ? (text) => code + text + RESET\n    : (text) => text;\n// Pre-created functions - no dynamic creation\nconst simpleChalkFast = {\n    // Colors\n    black: format(BLACK),\n    red: format(RED),\n    green: format(GREEN),\n    yellow: format(YELLOW),\n    blue: format(BLUE),\n    magenta: format(MAGENTA),\n    cyan: format(CYAN),\n    white: format(WHITE),\n    gray: format(GRAY),\n    grey: format(GRAY), // alias\n    blueBright: format(CYAN), // alias\n    // Modifiers\n    bold: format(BOLD),\n    dim: format(DIM),\n    underline: format(UNDERLINE),\n    // Pre-created common combinations for some chaining support\n    redBold: format(RED + BOLD),\n    greenBold: format(GREEN + BOLD),\n    blueBold: format(BLUE + BOLD),\n    yellowBold: format(YELLOW + BOLD),\n    redUnderline: format(RED + UNDERLINE),\n    greenUnderline: format(GREEN + UNDERLINE),\n    blueUnderline: format(BLUE + UNDERLINE),\n    boldRed: format(BOLD + RED),\n    boldGreen: format(BOLD + GREEN),\n    boldBlue: format(BOLD + BLUE),\n    boldYellow: format(BOLD + YELLOW),\n};\n// Make it callable as a function\nconst callableChalk = Object.assign((text) => text, simpleChalkFast);\nexport default callableChalk;\n//# sourceMappingURL=SimpleChalkFast.js.map","/**\n * Browser-optimized SimpleChalk implementation\n * Uses CSS styling for browsers, ANSI codes for Node.js\n */\n// Check if we're in a browser environment\nconst isBrowser = typeof globalThis.window !== 'undefined' && typeof globalThis.document !== 'undefined';\n// CSS styles for browser console\nconst browserStyles = {\n    reset: '',\n    bold: 'font-weight: bold;',\n    dim: 'opacity: 0.5;',\n    underline: 'text-decoration: underline;',\n    black: 'color: #000000;',\n    red: 'color: #ff0000;',\n    green: 'color: #00ff00;',\n    yellow: 'color: #ffff00;',\n    blue: 'color: #0000ff;',\n    magenta: 'color: #ff00ff;',\n    cyan: 'color: #00ffff;',\n    white: 'color: #ffffff;',\n    gray: 'color: #808080;',\n};\n// ANSI codes for Node.js\nconst ansiCodes = {\n    reset: '\\x1b[0m',\n    bold: '\\x1b[1m',\n    dim: '\\x1b[2m',\n    underline: '\\x1b[4m',\n    black: '\\x1b[30m',\n    red: '\\x1b[31m',\n    green: '\\x1b[32m',\n    yellow: '\\x1b[33m',\n    blue: '\\x1b[34m',\n    magenta: '\\x1b[35m',\n    cyan: '\\x1b[36m',\n    white: '\\x1b[37m',\n    gray: '\\x1b[90m',\n};\n// Check if colors should be enabled (dynamic check)\nfunction supportsColor() {\n    if (isBrowser) {\n        // In browsers, enable colors by default\n        return !globalThis.NO_COLOR;\n    }\n    // Node.js environment\n    if (typeof process !== 'undefined') {\n        if (process.env['NO_COLOR'] || process.env['MCP_MODE']) {\n            return false;\n        }\n        if (process.env['FORCE_COLOR']) {\n            return true;\n        }\n        if (process.stdout && process.stdout.isTTY) {\n            return true;\n        }\n    }\n    return false;\n}\n// Browser-specific formatter using CSS\nfunction formatBrowser(styles, text) {\n    if (!supportsColor() || styles.length === 0) {\n        return [text];\n    }\n    const cssStyle = styles.join(' ');\n    return [`%c${text}`, cssStyle];\n}\n// Node.js formatter using ANSI codes\nfunction formatNode(codes, text) {\n    if (!supportsColor() || codes.length === 0) {\n        return text;\n    }\n    return codes.join('') + text + ansiCodes.reset;\n}\n// Universal formatter that works in both environments\nfunction format(styleKey) {\n    return (text) => {\n        if (isBrowser) {\n            return formatBrowser([browserStyles[styleKey]], text);\n        }\n        else {\n            return formatNode([ansiCodes[styleKey]], text);\n        }\n    };\n}\n// Create the browser-optimized chalk object\nconst simpleChalkBrowser = {\n    // Colors\n    black: format('black'),\n    red: format('red'),\n    green: format('green'),\n    yellow: format('yellow'),\n    blue: format('blue'),\n    magenta: format('magenta'),\n    cyan: format('cyan'),\n    white: format('white'),\n    gray: format('gray'),\n    grey: format('gray'), // alias\n    blueBright: format('cyan'), // alias\n    // Modifiers\n    bold: format('bold'),\n    dim: format('dim'),\n    underline: format('underline'),\n    // Browser-specific combinations (CSS can combine styles)\n    redBold: (text) => {\n        if (isBrowser) {\n            return formatBrowser([browserStyles.red, browserStyles.bold], text);\n        }\n        else {\n            return formatNode([ansiCodes.red, ansiCodes.bold], text);\n        }\n    },\n    greenBold: (text) => {\n        if (isBrowser) {\n            return formatBrowser([browserStyles.green, browserStyles.bold], text);\n        }\n        else {\n            return formatNode([ansiCodes.green, ansiCodes.bold], text);\n        }\n    },\n    blueBold: (text) => {\n        if (isBrowser) {\n            return formatBrowser([browserStyles.blue, browserStyles.bold], text);\n        }\n        else {\n            return formatNode([ansiCodes.blue, ansiCodes.bold], text);\n        }\n    },\n};\n// Make it callable as a function\nconst callableChalk = Object.assign((text) => text, simpleChalkBrowser);\nexport default callableChalk;\n//# sourceMappingURL=SimpleChalkBrowser.js.map","/**\n * Plugin interface for configuration file format support\n */\nexport interface IConfigPlugin {\n  /**\n   * File extensions this plugin supports (e.g., ['.toml', '.tml'])\n   */\n  readonly supportedExtensions: string[];\n\n  /**\n   * Plugin name for identification\n   */\n  readonly name: string;\n\n  /**\n   * Parse configuration file content\n   * @param content File content as string\n   * @returns Parsed configuration object\n   */\n  parse(content: string): Record<string, any>;\n\n  /**\n   * Generate configuration file content\n   * @param config Configuration object\n   * @param flags Flag definitions for metadata\n   * @param parsedArgs Parsed arguments for values\n   * @returns Generated file content\n   */\n  generate(config: Record<string, any>, flags: any[], parsedArgs: any): string;\n}\n\n/**\n * Base class for configuration plugins\n */\nexport abstract class ConfigPlugin implements IConfigPlugin {\n  abstract readonly supportedExtensions: string[];\n  abstract readonly name: string;\n\n  abstract parse(content: string): Record<string, any>;\n  abstract generate(\n    config: Record<string, any>,\n    flags: any[],\n    parsedArgs: any,\n  ): string;\n\n  /**\n   * Check if this plugin supports a given file extension\n   */\n  public supportsExtension(extension: string): boolean {\n    return this.supportedExtensions.includes(extension.toLowerCase());\n  }\n}\n\n/**\n * Built-in JSON configuration plugin (no external dependencies)\n */\nexport class JsonConfigPlugin extends ConfigPlugin {\n  readonly supportedExtensions = [\".json\", \".jsonc\"];\n  readonly name = \"json\";\n\n  parse(content: string): Record<string, any> {\n    try {\n      const parsed = JSON.parse(content);\n      if (typeof parsed !== \"object\" || parsed === null) {\n        throw new Error(\"JSON file must contain an object at the root level\");\n      }\n      // Remove metadata if present\n      const { _meta, ...config } = parsed;\n      return config;\n    } catch (error) {\n      throw new Error(\n        `Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  generate(\n    _config: Record<string, any>,\n    flags: any[],\n    parsedArgs: any,\n  ): string {\n    const metadata = {\n      _meta: {\n        generated: new Date().toISOString(),\n        generator: \"ArgParser\",\n        format: \"json\",\n      },\n    };\n\n    const configWithValues: Record<string, any> = {};\n\n    for (const flag of flags) {\n      if (flag.name === \"help\") continue;\n\n      const flagValue = parsedArgs[flag.name];\n      const isSet = flagValue !== undefined && flagValue !== null;\n      const isMandatory = flag.mandatory === true;\n\n      if (isSet) {\n        configWithValues[flag.name] = flagValue;\n      } else if (isMandatory) {\n        configWithValues[flag.name] =\n          flag.defaultValue !== undefined ? flag.defaultValue : null;\n      }\n    }\n\n    const result = { ...metadata, ...configWithValues };\n    return JSON.stringify(result, null, 2);\n  }\n}\n\n/**\n * Built-in ENV configuration plugin (no external dependencies)\n */\nexport class EnvConfigPlugin extends ConfigPlugin {\n  readonly supportedExtensions = [\".env\"];\n  readonly name = \"env\";\n\n  parse(content: string): Record<string, any> {\n    const config: Record<string, any> = {};\n    const lines = content.split(\"\\n\");\n\n    for (const line of lines) {\n      const trimmed = line.trim();\n      if (trimmed && !trimmed.startsWith(\"#\")) {\n        const equalIndex = trimmed.indexOf(\"=\");\n        if (equalIndex > 0) {\n          const key = trimmed.substring(0, equalIndex).trim();\n          let value = trimmed.substring(equalIndex + 1).trim();\n\n          // Remove quotes if present\n          if (\n            (value.startsWith('\"') && value.endsWith('\"')) ||\n            (value.startsWith(\"'\") && value.endsWith(\"'\"))\n          ) {\n            value = value.slice(1, -1);\n          }\n\n          config[key] = value;\n        }\n      }\n    }\n\n    return config;\n  }\n\n  generate(\n    _config: Record<string, any>,\n    flags: any[],\n    parsedArgs: any,\n  ): string {\n    const lines: string[] = [];\n    lines.push(\"# Environment configuration generated by ArgParser\");\n    lines.push(\"# Format: ENV\");\n    lines.push(\"\");\n\n    for (const flag of flags) {\n      if (flag.name === \"help\") continue;\n\n      const flagValue = parsedArgs[flag.name];\n      const isSet = flagValue !== undefined && flagValue !== null;\n      const isMandatory = flag.mandatory === true;\n\n      lines.push(`# ${flag.description || flag.name}`);\n      lines.push(`# Type: ${this.getTypeString(flag.type)}`);\n\n      if (flag.defaultValue !== undefined) {\n        lines.push(`# Default: ${flag.defaultValue}`);\n      }\n\n      if (isSet) {\n        lines.push(`${flag.name.toUpperCase()}=${flagValue}`);\n      } else if (isMandatory) {\n        const defaultVal =\n          flag.defaultValue !== undefined ? flag.defaultValue : \"\";\n        lines.push(`${flag.name.toUpperCase()}=${defaultVal}`);\n      } else {\n        lines.push(`# ${flag.name.toUpperCase()}=`);\n      }\n\n      lines.push(\"\");\n    }\n\n    return lines.join(\"\\n\");\n  }\n\n  private getTypeString(type: any): string {\n    if (typeof type === \"function\") {\n      return type.name || \"custom function\";\n    }\n    return String(type).toLowerCase();\n  }\n}\n","import type { IConfigPlugin } from \"./ConfigPlugin\";\nimport { EnvConfigPlugin, JsonConfigPlugin } from \"./ConfigPlugin\";\n\n/**\n * Registry for configuration plugins\n * Manages available config format plugins and provides plugin lookup\n */\nexport class ConfigPluginRegistry {\n  private plugins: Map<string, IConfigPlugin> = new Map();\n  private extensionMap: Map<string, IConfigPlugin> = new Map();\n\n  constructor() {\n    // Register built-in plugins (no external dependencies)\n    this.registerPlugin(new JsonConfigPlugin());\n    this.registerPlugin(new EnvConfigPlugin());\n  }\n\n  /**\n   * Register a configuration plugin\n   */\n  public registerPlugin(plugin: IConfigPlugin): void {\n    this.plugins.set(plugin.name, plugin);\n\n    // Map extensions to plugin\n    for (const ext of plugin.supportedExtensions) {\n      this.extensionMap.set(ext.toLowerCase(), plugin);\n    }\n  }\n\n  /**\n   * Get plugin by name\n   */\n  public getPlugin(name: string): IConfigPlugin | undefined {\n    return this.plugins.get(name);\n  }\n\n  /**\n   * Get plugin by file extension\n   */\n  public getPluginByExtension(extension: string): IConfigPlugin | undefined {\n    return this.extensionMap.get(extension.toLowerCase());\n  }\n\n  /**\n   * Check if a file extension is supported\n   */\n  public isExtensionSupported(extension: string): boolean {\n    return this.extensionMap.has(extension.toLowerCase());\n  }\n\n  /**\n   * Get all registered plugin names\n   */\n  public getRegisteredPlugins(): string[] {\n    return Array.from(this.plugins.keys());\n  }\n\n  /**\n   * Get all supported extensions\n   */\n  public getSupportedExtensions(): string[] {\n    return Array.from(this.extensionMap.keys());\n  }\n\n  /**\n   * Unregister a plugin\n   */\n  public unregisterPlugin(name: string): boolean {\n    const plugin = this.plugins.get(name);\n    if (!plugin) {\n      return false;\n    }\n\n    // Remove from plugins map\n    this.plugins.delete(name);\n\n    // Remove extensions from extension map\n    for (const ext of plugin.supportedExtensions) {\n      this.extensionMap.delete(ext.toLowerCase());\n    }\n\n    return true;\n  }\n\n  /**\n   * Clear all plugins (useful for testing)\n   */\n  public clear(): void {\n    this.plugins.clear();\n    this.extensionMap.clear();\n  }\n\n  /**\n   * Auto-register optional plugins if their dependencies are available\n   * This method attempts to load TOML and YAML plugins without throwing errors\n   */\n  public autoRegisterOptionalPlugins(): void {\n    // Try to register TOML plugin\n    try {\n      const { createTomlPlugin } = require(\"./TomlConfigPlugin\");\n      const tomlPlugin = createTomlPlugin();\n      if (tomlPlugin) {\n        this.registerPlugin(tomlPlugin);\n      }\n    } catch (error) {\n      // TOML plugin not available, continue without it\n    }\n\n    // Try to register YAML plugin\n    try {\n      const { createYamlPlugin } = require(\"./YamlConfigPlugin\");\n      const yamlPlugin = createYamlPlugin();\n      if (yamlPlugin) {\n        this.registerPlugin(yamlPlugin);\n      }\n    } catch (error) {\n      // YAML plugin not available, continue without it\n    }\n  }\n\n  /**\n   * Async version of auto-register optional plugins with ESM support\n   * This method attempts to load TOML and YAML plugins without throwing errors\n   */\n  public async autoRegisterOptionalPluginsAsync(): Promise<void> {\n    // Try to register TOML plugin\n    try {\n      const { createTomlPluginAsync } = await import(\"./TomlConfigPlugin\");\n      const tomlPlugin = await createTomlPluginAsync();\n      if (tomlPlugin) {\n        this.registerPlugin(tomlPlugin);\n      }\n    } catch (error) {\n      // TOML plugin not available, continue without it\n    }\n\n    // Try to register YAML plugin\n    try {\n      const { createYamlPluginAsync } = await import(\"./YamlConfigPlugin\");\n      const yamlPlugin = await createYamlPluginAsync();\n      if (yamlPlugin) {\n        this.registerPlugin(yamlPlugin);\n      }\n    } catch (error) {\n      // YAML plugin not available, continue without it\n    }\n  }\n}\n\n/**\n * Global plugin registry instance\n * This can be used throughout the application\n */\nexport const globalConfigPluginRegistry = new ConfigPluginRegistry();\n\n/**\n * Convenience function to register optional plugins\n * Call this once at application startup if you want TOML/YAML support\n */\nexport function enableOptionalConfigPlugins(): void {\n  globalConfigPluginRegistry.autoRegisterOptionalPlugins();\n}\n\n/**\n * Async convenience function to register optional plugins with ESM support\n * Call this once at application startup if you want TOML/YAML support in ESM environments\n */\nexport async function enableOptionalConfigPluginsAsync(): Promise<void> {\n  await globalConfigPluginRegistry.autoRegisterOptionalPluginsAsync();\n}\n\n/**\n * Convenience function to register only specific plugins\n */\nexport function enableConfigPlugins(pluginNames: string[]): void {\n  for (const pluginName of pluginNames) {\n    switch (pluginName.toLowerCase()) {\n      case \"toml\":\n        try {\n          const { createTomlPlugin } = require(\"./TomlConfigPlugin\");\n          const tomlPlugin = createTomlPlugin();\n          if (tomlPlugin) {\n            globalConfigPluginRegistry.registerPlugin(tomlPlugin);\n          }\n        } catch (error) {\n          console.warn(\n            `Failed to enable TOML plugin: ${error instanceof Error ? error.message : String(error)}`,\n          );\n        }\n        break;\n\n      case \"yaml\":\n        try {\n          const { createYamlPlugin } = require(\"./YamlConfigPlugin\");\n          const yamlPlugin = createYamlPlugin();\n          if (yamlPlugin) {\n            globalConfigPluginRegistry.registerPlugin(yamlPlugin);\n          }\n        } catch (error) {\n          console.warn(\n            `Failed to enable YAML plugin: ${error instanceof Error ? error.message : String(error)}`,\n          );\n        }\n        break;\n\n      default:\n        console.warn(`Unknown config plugin: ${pluginName}`);\n    }\n  }\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport chalk from \"@alcyone-labs/simple-chalk\";\nimport type { ProcessedFlag, TParsedArgs } from \"../core/types\";\nimport { globalConfigPluginRegistry } from \"./plugins/ConfigPluginRegistry\";\n\n/**\n * ConfigurationManager handles environment file operations, format conversion,\n * and configuration merging for ArgParser instances.\n */\nexport class ConfigurationManager {\n  private argParserInstance: any;\n\n  constructor(argParserInstance: any) {\n    this.argParserInstance = argParserInstance;\n\n    // Auto-register built-in plugins (JSON and ENV only by default)\n    // TOML and YAML plugins are optional and must be explicitly enabled\n  }\n\n  /**\n   * Generates a default environment file name based on app configuration\n   */\n  public generateDefaultEnvFileName(): string {\n    let baseName = \"config\";\n\n    const appCommandName = this.argParserInstance.getAppCommandName();\n    const appName = this.argParserInstance.getAppName();\n\n    if (appCommandName) {\n      baseName = appCommandName;\n    } else if (appName && appName !== \"Argument Parser\") {\n      baseName = appName;\n    }\n\n    // Convert to a safe filename format (PascalCase for .env files)\n    baseName = baseName\n      .split(/[\\s-_]+/)\n      .map(\n        (word: string) =>\n          word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(),\n      )\n      .join(\"\");\n\n    return `${baseName}.env`;\n  }\n\n  /**\n   * Handles the --s-save-to-env system flag at the final parser level\n   */\n  public handleSaveToEnvFlag(\n    processArgs: string[],\n    parserChain: any[],\n  ): boolean {\n    const saveToEnvIndex = processArgs.findIndex(\n      (arg) => arg === \"--s-save-to-env\",\n    );\n    if (saveToEnvIndex !== -1) {\n      let filePath: string;\n\n      // Check if a filename is provided\n      if (saveToEnvIndex + 1 < processArgs.length) {\n        const nextArg = processArgs[saveToEnvIndex + 1];\n        if (nextArg && !nextArg.startsWith(\"-\")) {\n          filePath = nextArg;\n        } else {\n          // No filename provided, auto-generate one\n          filePath = this.generateDefaultEnvFileName();\n        }\n      } else {\n        // No filename provided, auto-generate one\n        filePath = this.generateDefaultEnvFileName();\n      }\n\n      this.saveToEnvFile(filePath, processArgs, parserChain);\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Saves current configuration to an environment file\n   */\n  public saveToEnvFile(\n    filePath: string,\n    _processArgs: string[],\n    parserChain: any[],\n  ): void {\n    try {\n      // Parse the current arguments to get the values\n      const finalParser = parserChain[parserChain.length - 1];\n      const parsedArgs = finalParser.getLastParseResult();\n\n      if (!parsedArgs) {\n        console.log(\n          chalk.yellow(\n            \"No parsed arguments available. Run the command first to generate configuration.\",\n          ),\n        );\n        return;\n      }\n\n      // Collect all flags from the parser chain\n      const allFlags: ProcessedFlag[] = [];\n      for (const parser of parserChain) {\n        allFlags.push(...parser.flags);\n      }\n\n      // Determine file format based on extension\n      const ext = path.extname(filePath).toLowerCase();\n      let content: string;\n\n      // Try to use plugin system first\n      const plugin = globalConfigPluginRegistry.getPluginByExtension(ext);\n      if (plugin) {\n        content = plugin.generate({}, allFlags, parsedArgs);\n      } else {\n        // Fallback to legacy methods for unsupported formats\n        switch (ext) {\n          case \".yaml\":\n          case \".yml\":\n            content = this.generateYamlFormat(allFlags, parsedArgs);\n            break;\n          case \".json\":\n            content = this.generateJsonFormat(allFlags, parsedArgs);\n            break;\n          case \".toml\":\n            content = this.generateTomlFormat(allFlags, parsedArgs);\n            break;\n          case \".env\":\n          default:\n            content = this.generateEnvFormat(allFlags, parsedArgs);\n            break;\n        }\n      }\n\n      // Write the file\n      fs.writeFileSync(filePath, content, \"utf8\");\n\n      console.log(chalk.green(`✅ Configuration saved to: ${filePath}`));\n      console.log(chalk.gray(`Format: ${ext || \".env\"}`));\n      console.log(\n        chalk.gray(`Flags saved: ${Object.keys(parsedArgs.args).length}`),\n      );\n    } catch (error) {\n      console.error(\n        chalk.red(\n          `❌ Failed to save configuration: ${error instanceof Error ? error.message : String(error)}`,\n        ),\n      );\n      throw new Error(\n        `Failed to save configuration: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  /**\n   * Loads configuration from an environment file\n   */\n  public loadEnvFile(\n    filePath: string,\n    parserChain: any[],\n  ): Record<string, any> {\n    try {\n      if (!fs.existsSync(filePath)) {\n        throw new Error(`Configuration file not found: ${filePath}`);\n      }\n\n      const content = fs.readFileSync(filePath, \"utf8\");\n      const ext = path.extname(filePath).toLowerCase();\n\n      let rawConfig: Record<string, any>;\n\n      // Try to use plugin system first\n      const plugin = globalConfigPluginRegistry.getPluginByExtension(ext);\n      if (plugin) {\n        rawConfig = plugin.parse(content);\n      } else {\n        // Fallback to legacy methods for unsupported formats\n        switch (ext) {\n          case \".yaml\":\n          case \".yml\":\n            rawConfig = this.parseYamlFile(content);\n            break;\n          case \".json\":\n            rawConfig = this.parseJsonFile(content);\n            break;\n          case \".toml\":\n            rawConfig = this.parseTomlFile(content);\n            break;\n          case \".env\":\n          default:\n            rawConfig = this.parseEnvFile(content);\n            break;\n        }\n      }\n\n      // Convert the raw config to flag values\n      return this.convertConfigToFlagValues(rawConfig, parserChain);\n    } catch (error) {\n      console.warn(\n        chalk.yellow(\n          `Warning: Could not load config file ${filePath}: ${error instanceof Error ? error.message : String(error)}`,\n        ),\n      );\n      return {};\n    }\n  }\n\n  /**\n   * Parses environment file content\n   */\n  public parseEnvFile(content: string): Record<string, any> {\n    const config: Record<string, any> = {};\n    const lines = content.split(\"\\n\");\n\n    for (const line of lines) {\n      const trimmed = line.trim();\n      if (trimmed && !trimmed.startsWith(\"#\")) {\n        const equalIndex = trimmed.indexOf(\"=\");\n        if (equalIndex > 0) {\n          const key = trimmed.substring(0, equalIndex).trim();\n          let value = trimmed.substring(equalIndex + 1).trim();\n\n          // Remove quotes if present\n          if (\n            (value.startsWith('\"') && value.endsWith('\"')) ||\n            (value.startsWith(\"'\") && value.endsWith(\"'\"))\n          ) {\n            value = value.slice(1, -1);\n          }\n\n          config[key] = value;\n        }\n      }\n    }\n\n    return config;\n  }\n\n  /**\n   * Parses YAML file content (legacy method - now uses plugin system)\n   */\n  public parseYamlFile(content: string): Record<string, any> {\n    const plugin = globalConfigPluginRegistry.getPluginByExtension(\".yaml\");\n    if (plugin) {\n      return plugin.parse(content);\n    }\n\n    // Fallback: Simple YAML parsing for basic key-value pairs and arrays\n    console.warn(\n      \"YAML plugin not available, using simple parser. Install js-yaml and enable YAML plugin for full support.\",\n    );\n    const config: Record<string, any> = {};\n    const lines = content.split(\"\\n\");\n    let currentKey: string | null = null;\n    let currentArray: string[] = [];\n\n    for (let i = 0; i < lines.length; i++) {\n      const line = lines[i];\n      const trimmed = line.trim();\n\n      if (!trimmed || trimmed.startsWith(\"#\")) {\n        continue;\n      }\n\n      // Check if this is an array item\n      if (trimmed.startsWith(\"- \")) {\n        if (currentKey) {\n          const arrayValue = trimmed.substring(2).trim();\n          // Remove quotes if present\n          const cleanValue =\n            (arrayValue.startsWith('\"') && arrayValue.endsWith('\"')) ||\n            (arrayValue.startsWith(\"'\") && arrayValue.endsWith(\"'\"))\n              ? arrayValue.slice(1, -1)\n              : arrayValue;\n          currentArray.push(cleanValue);\n        }\n        continue;\n      }\n\n      // Check if this is a key-value pair\n      const colonIndex = trimmed.indexOf(\":\");\n      if (colonIndex > 0) {\n        // If we were building an array, save it\n        if (currentKey && currentArray.length > 0) {\n          config[currentKey] = currentArray;\n          currentArray = [];\n        }\n\n        const key = trimmed.substring(0, colonIndex).trim();\n        let value = trimmed.substring(colonIndex + 1).trim();\n\n        // If value is empty, this might be the start of an array\n        if (!value) {\n          currentKey = key;\n          currentArray = [];\n          continue;\n        }\n\n        // Remove quotes if present\n        if (\n          (value.startsWith('\"') && value.endsWith('\"')) ||\n          (value.startsWith(\"'\") && value.endsWith(\"'\"))\n        ) {\n          value = value.slice(1, -1);\n        }\n\n        config[key] = value;\n        currentKey = null;\n      }\n    }\n\n    // Handle any remaining array\n    if (currentKey && currentArray.length > 0) {\n      config[currentKey] = currentArray;\n    }\n\n    return config;\n  }\n\n  /**\n   * Parses JSON file content\n   */\n  public parseJsonFile(content: string): Record<string, any> {\n    try {\n      return JSON.parse(content) || {};\n    } catch (error) {\n      throw new Error(\n        `Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  /**\n   * Parses TOML file content (legacy method - now uses plugin system)\n   */\n  public parseTomlFile(content: string): Record<string, any> {\n    const plugin = globalConfigPluginRegistry.getPluginByExtension(\".toml\");\n    if (plugin) {\n      return plugin.parse(content);\n    }\n\n    // Fallback: Simple TOML parsing for basic key-value pairs\n    console.warn(\n      \"TOML plugin not available, using simple parser. Install smol-toml and enable TOML plugin for full support.\",\n    );\n    const config: Record<string, any> = {};\n    const lines = content.split(\"\\n\");\n\n    for (const line of lines) {\n      const trimmed = line.trim();\n      if (trimmed && !trimmed.startsWith(\"#\")) {\n        const equalIndex = trimmed.indexOf(\"=\");\n        if (equalIndex > 0) {\n          const key = trimmed.substring(0, equalIndex).trim();\n          let value = trimmed.substring(equalIndex + 1).trim();\n\n          // Remove quotes if present\n          if (\n            (value.startsWith('\"') && value.endsWith('\"')) ||\n            (value.startsWith(\"'\") && value.endsWith(\"'\"))\n          ) {\n            value = value.slice(1, -1);\n          }\n\n          config[key] = value;\n        }\n      }\n    }\n\n    return config;\n  }\n\n  /**\n   * Converts raw configuration to flag values with proper type conversion\n   */\n  public convertConfigToFlagValues(\n    rawConfig: Record<string, any>,\n    parserChain: any[],\n  ): Record<string, any> {\n    const flagValues: Record<string, any> = {};\n\n    // Collect all flags from the parser chain\n    const allFlags: ProcessedFlag[] = [];\n    for (const parser of parserChain) {\n      allFlags.push(...parser.flags);\n    }\n\n    // Convert each config value to the appropriate flag type\n    for (const [key, value] of Object.entries(rawConfig)) {\n      // Try exact match first, then case-insensitive match\n      let flag = allFlags.find((f) => f[\"name\"] === key);\n      if (!flag) {\n        flag = allFlags.find(\n          (f) => f[\"name\"].toLowerCase() === key.toLowerCase(),\n        );\n      }\n\n      if (flag) {\n        try {\n          // Use the actual flag name (not the config key) for consistency\n          flagValues[flag[\"name\"]] = this.convertValueToFlagType(value, flag);\n        } catch (error) {\n          console.warn(\n            chalk.yellow(\n              `Warning: Could not convert config value for flag '${key}': ${error instanceof Error ? error.message : String(error)}`,\n            ),\n          );\n        }\n      }\n    }\n\n    return flagValues;\n  }\n\n  /**\n   * Converts a value to the appropriate flag type\n   */\n  public convertValueToFlagType(value: any, flag: ProcessedFlag): any {\n    if (value === null || value === undefined) {\n      return value;\n    }\n\n    // Handle both string literal and String constructor function\n    const flagType = flag[\"type\"];\n    const isStringType = flagType === \"string\" || flagType === String;\n    const isNumberType = flagType === \"number\" || flagType === Number;\n    const isBooleanType = flagType === \"boolean\" || flagType === Boolean;\n\n    if (isStringType) {\n      // Handle allowMultiple flags that expect arrays\n      if (flag[\"allowMultiple\"]) {\n        if (Array.isArray(value)) return value;\n        if (typeof value === \"string\") {\n          try {\n            // Try to parse as JSON array\n            const parsed = JSON.parse(value);\n            if (Array.isArray(parsed)) return parsed;\n          } catch (e) {\n            // Try to split by comma\n            return value.split(\",\").map((v) => v.trim());\n          }\n        }\n        return [String(value)];\n      }\n      return String(value);\n    } else if (isNumberType) {\n      // If it's already a number, return it as-is\n      if (typeof value === \"number\") {\n        return value;\n      }\n      const num = Number(value);\n      if (isNaN(num)) {\n        throw new Error(\n          `Cannot convert '${value}' to number for flag '${flag[\"name\"]}'`,\n        );\n      }\n      return num;\n    } else if (isBooleanType) {\n      if (typeof value === \"boolean\") return value;\n      if (typeof value === \"string\") {\n        const lower = value.toLowerCase();\n        if (\n          lower === \"true\" ||\n          lower === \"1\" ||\n          lower === \"yes\" ||\n          lower === \"on\"\n        )\n          return true;\n        if (\n          lower === \"false\" ||\n          lower === \"0\" ||\n          lower === \"no\" ||\n          lower === \"off\"\n        )\n          return false;\n      }\n      throw new Error(\n        `Cannot convert '${value}' to boolean for flag '${flag[\"name\"]}'`,\n      );\n    } else if (flagType === \"table\") {\n      if (Array.isArray(value)) return value;\n      if (typeof value === \"string\") {\n        try {\n          // Try to parse as JSON array\n          const parsed = JSON.parse(value);\n          if (Array.isArray(parsed)) return parsed;\n        } catch (e) {\n          // Try to split by comma\n          return value.split(\",\").map((v) => v.trim());\n        }\n      }\n      throw new Error(\n        `Cannot convert '${value}' to table for flag '${flag[\"name\"]}'`,\n      );\n    } else {\n      // Handle custom type functions or fallback to string\n      if (typeof flagType === \"function\") {\n        try {\n          return flagType(value);\n        } catch (error) {\n          throw new Error(\n            `Custom type conversion failed for flag '${flag[\"name\"]}': ${error instanceof Error ? error.message : String(error)}`,\n          );\n        }\n      }\n      return String(value);\n    }\n  }\n\n  /**\n   * Merges environment configuration with command line arguments\n   */\n  public mergeEnvConfigWithArgs(\n    envConfig: Record<string, any>,\n    processArgs: string[],\n  ): string[] {\n    const mergedArgs = [...processArgs];\n\n    // Add environment config values as flags if they're not already present\n    for (const [key, value] of Object.entries(envConfig)) {\n      const flagPattern = new RegExp(`^--${key}(=|$)`);\n      const hasFlag = mergedArgs.some((arg) => flagPattern.test(arg));\n\n      if (!hasFlag) {\n        if (typeof value === \"boolean\") {\n          if (value) {\n            mergedArgs.push(`--${key}`);\n          }\n        } else if (Array.isArray(value)) {\n          // For table/array values, add multiple flags\n          for (const item of value) {\n            mergedArgs.push(`--${key}`, String(item));\n          }\n        } else {\n          mergedArgs.push(`--${key}`, String(value));\n        }\n      }\n    }\n\n    return mergedArgs;\n  }\n\n  /**\n   * Generates environment file format\n   */\n  public generateEnvFormat(\n    flags: ProcessedFlag[],\n    parsedArgs: TParsedArgs<any>,\n  ): string {\n    const lines: string[] = [];\n    lines.push(\"# Environment configuration file\");\n    lines.push(`# Generated on ${new Date().toISOString()}`);\n    lines.push(\"\");\n\n    for (const flag of flags) {\n      const value = parsedArgs[\"args\"][flag[\"name\"]];\n      if (value !== undefined) {\n        lines.push(`# ${flag[\"description\"] || flag[\"name\"]}`);\n        lines.push(`# Type: ${this.getTypeString(flag[\"type\"])}`);\n\n        if (Array.isArray(value)) {\n          lines.push(`${flag[\"name\"].toUpperCase()}=${JSON.stringify(value)}`);\n        } else if (typeof value === \"string\" && value.includes(\" \")) {\n          lines.push(`${flag[\"name\"].toUpperCase()}=\"${value}\"`);\n        } else {\n          lines.push(`${flag[\"name\"].toUpperCase()}=${value}`);\n        }\n        lines.push(\"\");\n      }\n    }\n\n    return lines.join(\"\\n\");\n  }\n\n  /**\n   * Generates YAML file format (legacy method - now uses plugin system)\n   */\n  public generateYamlFormat(\n    flags: ProcessedFlag[],\n    parsedArgs: TParsedArgs<any>,\n  ): string {\n    const plugin = globalConfigPluginRegistry.getPluginByExtension(\".yaml\");\n    if (plugin) {\n      return plugin.generate({}, flags, parsedArgs);\n    }\n\n    // Fallback: Simple YAML generation\n    const lines: string[] = [];\n    lines.push(\"# YAML configuration file\");\n    lines.push(`# Generated on ${new Date().toISOString()}`);\n    lines.push(\"\");\n\n    for (const flag of flags) {\n      const value = parsedArgs[\"args\"][flag[\"name\"]];\n      if (value !== undefined) {\n        lines.push(`# ${flag[\"description\"] || flag[\"name\"]}`);\n        lines.push(`# Type: ${this.getTypeString(flag[\"type\"])}`);\n\n        if (Array.isArray(value)) {\n          lines.push(`${flag[\"name\"]}:`);\n          for (const item of value) {\n            lines.push(\n              `  - ${typeof item === \"string\" && item.includes(\" \") ? `\"${item}\"` : item}`,\n            );\n          }\n        } else if (typeof value === \"string\" && value.includes(\" \")) {\n          lines.push(`${flag[\"name\"]}: \"${value}\"`);\n        } else {\n          lines.push(`${flag[\"name\"]}: ${value}`);\n        }\n        lines.push(\"\");\n      }\n    }\n\n    return lines.join(\"\\n\");\n  }\n\n  /**\n   * Generates JSON file format\n   */\n  public generateJsonFormat(\n    flags: ProcessedFlag[],\n    parsedArgs: TParsedArgs<any>,\n  ): string {\n    const config: Record<string, any> = {};\n\n    for (const flag of flags) {\n      const value = parsedArgs[\"args\"][flag[\"name\"]];\n      if (value !== undefined) {\n        config[flag[\"name\"]] = value;\n      }\n    }\n\n    return JSON.stringify(config, null, 2);\n  }\n\n  /**\n   * Generates TOML file format (legacy method - now uses plugin system)\n   */\n  public generateTomlFormat(\n    flags: ProcessedFlag[],\n    parsedArgs: TParsedArgs<any>,\n  ): string {\n    const plugin = globalConfigPluginRegistry.getPluginByExtension(\".toml\");\n    if (plugin) {\n      return plugin.generate({}, flags, parsedArgs);\n    }\n\n    // Fallback: Simple TOML generation\n    const lines: string[] = [];\n    lines.push(\"# TOML configuration file\");\n    lines.push(`# Generated on ${new Date().toISOString()}`);\n    lines.push(\"\");\n\n    for (const flag of flags) {\n      const value = parsedArgs[\"args\"][flag[\"name\"]];\n      if (value !== undefined) {\n        lines.push(`# ${flag[\"description\"] || flag[\"name\"]}`);\n        lines.push(`# Type: ${this.getTypeString(flag[\"type\"])}`);\n\n        if (Array.isArray(value)) {\n          const arrayStr = value\n            .map((item) =>\n              typeof item === \"string\" ? `\"${item}\"` : String(item),\n            )\n            .join(\", \");\n          lines.push(`${flag[\"name\"]} = [${arrayStr}]`);\n        } else if (typeof value === \"string\") {\n          lines.push(`${flag[\"name\"]} = \"${value}\"`);\n        } else {\n          lines.push(`${flag[\"name\"]} = ${value}`);\n        }\n        lines.push(\"\");\n      }\n    }\n\n    return lines.join(\"\\n\");\n  }\n\n  /**\n   * Gets a string representation of a flag type\n   */\n  private getTypeString(type: any): string {\n    if (typeof type === \"string\") {\n      return type;\n    } else if (typeof type === \"function\") {\n      return type.name || \"function\";\n    } else {\n      return \"unknown\";\n    }\n  }\n}\n","import { z, type ZodTypeAny } from \"zod\";\n\n// Forward declaration for ArgParser to avoid circular dependency in HandlerContext\n// This will be replaced or refined once ArgParser.ts is updated to use these types.\n// It represents an instance of the ArgParser class.\nexport type ArgParserInstance = any;\n\n/**\n * Zod schema for validating DXT-specific options\n */\nexport const zodDxtOptionsSchema = z\n  .object({\n    sensitive: z\n      .boolean()\n      .optional()\n      .describe(\n        \"Whether this field should be marked as sensitive in DXT user_config\",\n      ),\n    localDefault: z\n      .string()\n      .optional()\n      .describe(\"Default value specific to DXT sandbox environment\"),\n    type: z\n      .enum([\"string\", \"directory\", \"file\", \"boolean\", \"number\"])\n      .optional()\n      .describe(\"DXT input type - determines UI component in DXT clients\"),\n    multiple: z\n      .boolean()\n      .optional()\n      .describe(\"Allow multiple values (for arrays)\"),\n    min: z.number().optional().describe(\"Minimum value (for number type)\"),\n    max: z.number().optional().describe(\"Maximum value (for number type)\"),\n    default: z\n      .any()\n      .optional()\n      .describe(\n        \"DXT-specific default value (overrides localDefault if provided)\",\n      ),\n    title: z\n      .string()\n      .optional()\n      .describe(\"Custom title for the user_config field\"),\n  })\n  .strict()\n  .refine(\n    (data) => {\n      // If min or max are provided, type should be \"number\"\n      if (\n        (data.min !== undefined || data.max !== undefined) &&\n        data.type !== \"number\"\n      ) {\n        return false;\n      }\n      // If min and max are both provided, min should be <= max\n      if (\n        data.min !== undefined &&\n        data.max !== undefined &&\n        data.min > data.max\n      ) {\n        return false;\n      }\n      return true;\n    },\n    {\n      message:\n        \"Invalid dxtOptions: min/max can only be used with type 'number', and min must be <= max\",\n    },\n  );\n\nexport const zodFlagSchema = z\n  .object({\n    name: z\n      .string()\n      .min(1, \"Flag name cannot be empty\")\n      .describe(\n        \"The output property name, used as a return key `{name: value}`. Must be unique.\",\n      ),\n    allowLigature: z\n      .boolean()\n      .default(true)\n      .describe(\n        \"Enable both forms of flag input, e.g., `./script.js -f=value` and `-f value`.\",\n      ),\n    allowMultiple: z\n      .boolean()\n      .default(false)\n      .describe(\n        \"Allow passing the same flag multiple times, e.g., `-f val1 -f val2` results in an array.\",\n      ),\n    description: z\n      .union([z.string(), z.array(z.string())])\n      .optional()\n      .describe(\"Textual description for help messages.\"),\n    valueHint: z\n      .string()\n      .optional()\n      .describe(\"Hint/example value shown in help and examples.\"),\n    options: z\n      .array(z.string().min(1))\n      .min(1, \"Flag must have at least one option (e.g., ['-f', '--flag'])\")\n      .describe(\"Array of option strings, e.g., ['-f', '--flag'].\"),\n    defaultValue: z\n      .any()\n      .optional()\n      .describe(\"Default value if the flag is not provided.\"),\n    type: z\n      .union([\n        z.any().refine((val) => val === String, {\n          message: \"Must be String constructor\",\n        }),\n        z.any().refine((val) => val === Number, {\n          message: \"Must be Number constructor\",\n        }),\n        z.any().refine((val) => val === Boolean, {\n          message: \"Must be Boolean constructor\",\n        }),\n        z.any().refine((val) => val === Array, {\n          // Native Array constructor\n          message: \"Must be Array constructor\",\n        }),\n        z.any().refine((val) => val === Object, {\n          // Native Object constructor\n          message: \"Must be Object constructor\",\n        }),\n        z.custom<(value: string) => any | Promise<any>>(\n          (val) => typeof val === \"function\",\n          \"Must be a custom parser function\",\n        ), // Custom parser function (value: string) => any | Promise<any>\n        z.custom<ZodTypeAny>(\n          (val) => val && typeof val === \"object\" && (val as any)._def,\n          \"Must be a Zod schema\",\n        ), // Zod schema for structured JSON validation\n        z.string().refine(\n          // String literal types\n          (value) =>\n            [\"boolean\", \"string\", \"number\", \"array\", \"object\"].includes(\n              value.toLowerCase(),\n            ),\n          {\n            message:\n              \"Invalid type string. Must be one of 'boolean', 'string', 'number', 'array', 'object'.\",\n          },\n        ),\n      ])\n      .default(\"string\") // Default type is string if not specified\n      .describe(\n        \"Expected data type (constructor, string literal, custom parser function, or Zod schema). Defaults to 'string'.\",\n      ),\n    mandatory: z\n      .union([\n        z.boolean(),\n        z.custom<(value?: any, parsedArgs?: any) => boolean>(\n          (val) => typeof val === \"function\",\n          \"Must be a boolean or function\",\n        ),\n      ]) // `z.any()` for parsedArgs flexibility\n      .optional()\n      .describe(\n        \"Makes the flag mandatory, can be a boolean or a function conditional on other args.\",\n      ),\n    flagOnly: z\n      .boolean()\n      .default(false)\n      .describe(\n        \"If true, the flag's presence is noted (true/false), and any subsequent value is not consumed by this flag.\",\n      ),\n    validate: z // User-provided validation function\n      .custom<\n        (\n          value?: any,\n          parsedArgs?: any,\n        ) => boolean | string | void | Promise<boolean | string | void>\n      >((val) => typeof val === \"function\", \"Must be a validation function\")\n      .optional()\n      .describe(\n        \"Custom validation function for the flag's value (receives value, parsedArgs).\",\n      ),\n    enum: z // User-provided enum values\n      .array(z.any())\n      .optional()\n      .describe(\"Array of allowed values for the flag.\"),\n    env: z // Environment variables for DXT packages\n      .union([z.string(), z.array(z.string())])\n      .optional()\n      .describe(\n        \"Environment variables that should be set from this flag's value in DXT packages.\",\n      ),\n    dxtOptions: zodDxtOptionsSchema\n      .optional()\n      .describe(\n        \"DXT-specific configuration options for enhanced DXT manifest generation\",\n      ),\n    dynamicRegister: z\n      .custom<DynamicRegisterFn>((val) => typeof val === \"function\")\n      .optional()\n      .describe(\n        \"Optional callback that can register additional flags dynamically when this flag is present.\",\n      ),\n  })\n  // Allow unrecognized properties by default in Zod v4\n  .transform((obj) => {\n    // Alias handling for 'default' and 'required'\n    const newObj: { [key: string]: any } = { ...obj };\n    if (\n      \"default\" in newObj &&\n      newObj[\"default\"] !== undefined &&\n      !(\"defaultValue\" in newObj)\n    ) {\n      newObj[\"defaultValue\"] = newObj[\"default\"];\n    }\n    if (\n      \"required\" in newObj &&\n      newObj[\"required\"] !== undefined &&\n      !(\"mandatory\" in newObj)\n    ) {\n      newObj[\"mandatory\"] = newObj[\"required\"] as\n        | boolean\n        | ((parsedArgs: any) => boolean);\n    }\n    return newObj;\n  });\n\n/**\n * The raw input type for defining a flag, before Zod processing (aliases, defaults).\n */\nexport type IFlagCore = z.input<typeof zodFlagSchema>;\n\n/**\n * The type of the `type` property in a ProcessedFlagCore object.\n * This represents all valid forms the `type` property can take after Zod processing.\n */\nexport type TParsedArgsTypeFromFlagDef =\n  | StringConstructor\n  | NumberConstructor\n  | BooleanConstructor\n  | ArrayConstructor\n  | ObjectConstructor\n  | ((value: string) => any) // Sync custom parser function\n  | ((value: string) => Promise<any>) // Async custom parser function\n  | ZodTypeAny // Zod schema for structured JSON validation\n  | \"string\"\n  | \"number\"\n  | \"boolean\"\n  | \"array\"\n  | \"object\"; // String literal types\n\n/**\n * The core type of a flag after Zod processing (defaults applied, aliases resolved),\n * but before some properties are made more specific (like `type` constructor to actual type).\n * This type is output by `zodFlagSchema.parse()`.\n */\nexport type ProcessedFlagCore = Omit<z.output<typeof zodFlagSchema>, \"type\"> & {\n  type: TParsedArgsTypeFromFlagDef;\n};\n\n/**\n * DXT-specific configuration options for flags that will be included in DXT manifests.\n * These options control how the flag appears in DXT user_config and how it behaves in DXT environments.\n */\nexport interface IDxtOptions {\n  /** Whether this field should be marked as sensitive in DXT user_config (default: true for ENV-linked flags) */\n  sensitive?: boolean;\n\n  /** Default value specific to DXT sandbox environment (different from regular default) */\n  localDefault?: string;\n\n  /** DXT input type - determines UI component in DXT clients (default: inferred from IFlag.type) */\n  type?: \"string\" | \"directory\" | \"file\" | \"boolean\" | \"number\";\n\n  /** Allow multiple values (for arrays) */\n  multiple?: boolean;\n\n  /** Minimum value (for number type) */\n  min?: number;\n\n  /** Maximum value (for number type) */\n  max?: number;\n\n  /** DXT-specific default value (overrides localDefault if provided) */\n  default?: any;\n\n  /** Custom title for the user_config field (overrides auto-generated title) */\n  title?: string;\n}\n\n/**\n * The user-facing type for defining a flag. It includes aliases like `default` and `required`.\n * The `handler` property is removed as handlers are typically associated with commands/subcommands, not individual flags.\n */\nexport type IFlag = IFlagCore & {\n  /** @alias defaultValue */\n  default?: any;\n  /** @alias mandatory */\n  required?: boolean | ((parsedArgs: TParsedArgs<any>) => boolean);\n  /** Environment variables that should be set from this flag's value in DXT packages */\n  env?: string | string[];\n  /** DXT-specific configuration options for enhanced DXT manifest generation */\n  dxtOptions?: IDxtOptions;\n  /** Optional callback to dynamically register additional flags when this flag is present */\n  dynamicRegister?: DynamicRegisterFn;\n};\n\n/**\n * Context for dynamic flag registration callbacks.\n */\nexport type DynamicRegisterContext = {\n  value: any | any[];\n  argsSoFar: Record<string, any>;\n  parser: ArgParserInstance;\n  processArgs: string[];\n  forHelp?: boolean;\n  registerFlags: (flags: readonly IFlag[]) => void;\n};\n\n/**\n * Function signature for dynamic flag loader/registrar.\n */\nexport type DynamicRegisterFn = (\n  ctx: DynamicRegisterContext,\n) => Promise<readonly IFlag[] | void> | readonly IFlag[] | void;\n\n/**\n * A more refined type for a flag after it has been fully processed by ArgParser,\n * particularly its `type` property and validation/enum/mandatory functions.\n * This is the type that ArgParser would internally work with for parsing and type extraction.\n */\nexport type ProcessedFlag = Omit<\n  ProcessedFlagCore,\n  \"validate\" | \"enum\" | \"mandatory\"\n> & {\n  // `type` is already correctly typed via ProcessedFlagCore.\n  validate?: (\n    value: any,\n    parsedArgs?: TParsedArgs<ProcessedFlag[]>, // Parsed args up to this point\n  ) => boolean | string | void | Promise<boolean | string | void>;\n  enum?: any[]; // Enum values, type-checked by user or ArgParser\n  mandatory?: boolean | ((parsedArgs: TParsedArgs<ProcessedFlag[]>) => boolean);\n  env?: string | string[]; // Environment variables for DXT packages\n  dynamicRegister?: DynamicRegisterFn;\n};\n\n/**\n * Resolves the TypeScript type from a flag's `type` definition.\n */\nexport type ResolveType<T extends TParsedArgsTypeFromFlagDef> =\n  T extends StringConstructor\n    ? string\n    : T extends NumberConstructor\n      ? number\n      : T extends BooleanConstructor\n        ? boolean\n        : T extends ArrayConstructor\n          ? any[] // Default to array of any if not further specified\n          : T extends ObjectConstructor\n            ? Record<string, any> // Default to object with any properties\n            : T extends ZodTypeAny\n              ? z.infer<T> // Infer TypeScript type from Zod schema\n              : T extends \"string\"\n                ? string\n                : T extends \"number\"\n                  ? number\n                  : T extends \"boolean\"\n                    ? boolean\n                    : T extends \"array\"\n                      ? any[] // Default for string literal 'array'\n                      : T extends \"object\"\n                        ? Record<string, any> // Default for string literal 'object'\n                        : T extends (value: string) => infer R // Custom parser function\n                          ? R // The return type of the custom parser\n                          : any; // Fallback type\n\n/**\n * Extracts the final TypeScript type for a flag's value based on its definition,\n * considering `flagOnly` and `allowMultiple` properties.\n */\nexport type ExtractFlagType<TFlag extends ProcessedFlag> =\n  TFlag[\"flagOnly\"] extends true // If the flag is a \"flag-only\" (presence) type\n    ? TFlag[\"allowMultiple\"] extends true\n      ? boolean[] // Multiple presence flags result in an array of booleans\n      : boolean // Single presence flag results in a boolean\n    : TFlag[\"allowMultiple\"] extends true // If the flag can have multiple values\n      ? Array<ResolveType<TFlag[\"type\"]>> // Results in an array of the resolved type\n      : ResolveType<TFlag[\"type\"]>; // Single value of the resolved type\n\n/**\n * Represents the structured object of parsed arguments.\n * Keys are flag names, and values are their parsed and typed values.\n * `TFlags` should be the array of `ProcessedFlag` definitions for the specific command.\n */\nexport type TParsedArgs<TFlags extends readonly ProcessedFlag[]> = {\n  [K in TFlags[number][\"name\"]]: ExtractFlagType<\n    Extract<TFlags[number], { name: K }>\n  >;\n};\n\n/**\n * Generic context object passed to command handlers.\n * @template TCurrentCommandArgs Shape of `args` for the current command, derived from its flags.\n * @template TParentCommandArgs Shape of `parentArgs` from the parent command, if any.\n */\nexport type IHandlerContext<\n  TCurrentCommandArgs extends Record<string, any> = Record<string, any>,\n  TParentCommandArgs extends Record<string, any> = Record<string, any>,\n> = {\n  /** Parsed arguments specific to the current command. */\n  args: TCurrentCommandArgs;\n  /** Parsed arguments from the parent command, if this is a subcommand. */\n  parentArgs?: TParentCommandArgs;\n  /** The sequence of command names that led to this handler. */\n  commandChain: string[];\n  /** The `ArgParser` instance that invoked this handler (could be a subcommand's parser). */\n  parser: ArgParserInstance;\n  /** The parent `ArgParser` instance, if this is a subcommand handler. */\n  parentParser?: ArgParserInstance;\n  /** Optional: The root `ArgParser` instance of the CLI. */\n  // rootParser?: ArgParserInstance;\n  /** Indicates if the handler is being called from MCP mode (true) or CLI mode (false). */\n  isMcp?: boolean;\n  /**\n   * Get a flag value with proper resolution priority (CLI flag > ENV > default).\n   * Only available in MCP mode when isMcp is true.\n   */\n  getFlag?: (name: string) => any;\n};\n\n/**\n * Generic type for the collection of processed flags that an ArgParser instance manages.\n */\nexport type FlagsArray = readonly ProcessedFlag[];\n\n/**\n * Converts a flag type to a JSON Schema type string.\n * This function handles all possible flag type formats and returns a valid JSON Schema type.\n *\n * @param flagType - The flag type from IFlag or ProcessedFlag\n * @returns A JSON Schema type string: \"string\" | \"number\" | \"boolean\" | \"array\" | \"object\"\n *\n * @example\n * ```typescript\n * getJsonSchemaTypeFromFlag(String) // returns \"string\"\n * getJsonSchemaTypeFromFlag(\"number\") // returns \"number\"\n * getJsonSchemaTypeFromFlag((val) => parseInt(val)) // returns \"string\" (fallback for custom functions)\n * ```\n */\nexport function getJsonSchemaTypeFromFlag(\n  flagType: TParsedArgsTypeFromFlagDef,\n): \"string\" | \"number\" | \"boolean\" | \"array\" | \"object\" {\n  // Handle Zod schemas first\n  if (flagType && typeof flagType === \"object\" && flagType._def) {\n    // For Zod schemas, we'll return \"object\" as they represent structured data\n    // The actual JSON Schema will be generated by the MCP integration layer\n    return \"object\";\n  }\n\n  // Handle constructor functions\n  if (typeof flagType === \"function\") {\n    // Check if it's a built-in constructor\n    if (flagType === String) return \"string\";\n    if (flagType === Number) return \"number\";\n    if (flagType === Boolean) return \"boolean\";\n    if (flagType === Array) return \"array\";\n    if (flagType === Object) return \"object\";\n\n    // For custom parser functions, we can't determine the return type at compile time\n    // so we default to \"string\" as the safest fallback for JSON Schema\n    return \"string\";\n  }\n\n  // Handle string literals\n  if (typeof flagType === \"string\") {\n    const normalizedType = flagType.toLowerCase();\n    switch (normalizedType) {\n      case \"string\":\n        return \"string\";\n      case \"number\":\n        return \"number\";\n      case \"boolean\":\n        return \"boolean\";\n      case \"array\":\n        return \"array\";\n      case \"object\":\n        return \"object\";\n      default:\n        // Unknown string type, default to string\n        return \"string\";\n    }\n  }\n\n  // Fallback for any other type\n  return \"string\";\n}\n\n/**\n * Common output schema patterns for typical CLI/MCP tool responses\n */\nexport const OutputSchemaPatterns = {\n  /**\n   * Simple success/error response pattern\n   * @example { success: true, message: \"Operation completed\" }\n   */\n  successError: () =>\n    z.object({\n      success: z.boolean().describe(\"Whether the operation was successful\"),\n      message: z\n        .string()\n        .optional()\n        .describe(\"Optional message about the operation\"),\n      error: z\n        .string()\n        .optional()\n        .describe(\"Error message if operation failed\"),\n    }),\n\n  /**\n   * Success response with data payload\n   * @example { success: true, data: {...}, message: \"Data retrieved\" }\n   */\n  successWithData: (dataSchema?: z.ZodTypeAny) =>\n    z.object({\n      success: z.boolean().describe(\"Whether the operation was successful\"),\n      data: dataSchema || z.any().describe(\"The response data\"),\n      message: z\n        .string()\n        .optional()\n        .describe(\"Optional message about the operation\"),\n      error: z\n        .string()\n        .optional()\n        .describe(\"Error message if operation failed\"),\n    }),\n\n  /**\n   * List/array response pattern\n   * @example { items: [...], count: 5, hasMore: false }\n   */\n  list: (itemSchema?: z.ZodTypeAny) =>\n    z.object({\n      items: z.array(itemSchema || z.any()).describe(\"Array of items\"),\n      count: z.number().optional().describe(\"Total number of items\"),\n      hasMore: z\n        .boolean()\n        .optional()\n        .describe(\"Whether there are more items available\"),\n    }),\n\n  /**\n   * File operation response pattern\n   * @example { path: \"/path/to/file\", size: 1024, created: true }\n   */\n  fileOperation: () =>\n    z.object({\n      path: z.string().describe(\"File path\"),\n      size: z.number().optional().describe(\"File size in bytes\"),\n      created: z.boolean().optional().describe(\"Whether the file was created\"),\n      modified: z\n        .boolean()\n        .optional()\n        .describe(\"Whether the file was modified\"),\n      exists: z.boolean().optional().describe(\"Whether the file exists\"),\n    }),\n\n  /**\n   * Process execution response pattern\n   * @example { exitCode: 0, stdout: \"output\", stderr: \"\", duration: 1500 }\n   */\n  processExecution: () =>\n    z.object({\n      exitCode: z.number().describe(\"Process exit code\"),\n      stdout: z.string().optional().describe(\"Standard output\"),\n      stderr: z.string().optional().describe(\"Standard error output\"),\n      duration: z\n        .number()\n        .optional()\n        .describe(\"Execution duration in milliseconds\"),\n      command: z.string().optional().describe(\"The command that was executed\"),\n    }),\n} as const;\n\n/**\n * Type for output schema pattern names with auto-completion support\n */\nexport type OutputSchemaPatternName = keyof typeof OutputSchemaPatterns;\n\n/**\n * Type for output schema configuration - supports pattern names, Zod schemas, or schema definition objects\n */\nexport type OutputSchemaConfig =\n  | OutputSchemaPatternName\n  | z.ZodTypeAny\n  | Record<string, z.ZodTypeAny>;\n\n/**\n * Creates a Zod output schema from a pattern or custom definition\n *\n * @param pattern - Either a predefined pattern name, a Zod schema, or a schema definition object\n * @returns A Zod schema for output validation\n *\n * @example\n * ```typescript\n * // Using a predefined pattern\n * const schema1 = createOutputSchema('successError');\n *\n * // Using a custom Zod schema\n * const schema2 = createOutputSchema(z.object({ result: z.string() }));\n *\n * // Using a schema definition object\n * const schema3 = createOutputSchema({\n *   result: z.string().describe(\"The result\"),\n *   timestamp: z.string().describe(\"When the operation completed\")\n * });\n * ```\n */\nexport function createOutputSchema(pattern: OutputSchemaConfig): z.ZodTypeAny {\n  // Handle predefined patterns\n  if (typeof pattern === \"string\" && pattern in OutputSchemaPatterns) {\n    return OutputSchemaPatterns[pattern]();\n  }\n\n  // Handle Zod schema directly\n  if (pattern && typeof pattern === \"object\" && \"_def\" in pattern) {\n    return pattern as z.ZodTypeAny;\n  }\n\n  // Handle schema definition object\n  if (pattern && typeof pattern === \"object\") {\n    return z.object(pattern as Record<string, z.ZodTypeAny>);\n  }\n\n  // Fallback to a generic success pattern\n  return OutputSchemaPatterns.successError();\n}\n\n/**\n * Defines a subcommand within an ArgParser setup.\n * @template TSubCommandFlags Flags defined specifically FOR this subcommand.\n * @template TParentCommandFlags Flags defined for the PARENT of this subcommand.\n * @template THandlerReturn The expected return type of the subcommand's handler.\n */\nexport interface ISubCommand<\n  TSubCommandFlags extends FlagsArray = FlagsArray,\n  TParentCommandFlags extends FlagsArray = FlagsArray,\n  THandlerReturn = any,\n> {\n  name: string;\n  description?: string;\n  /** The ArgParser instance for this subcommand, typed with its own flags. */\n  // Ideally: parser: ArgParser<TSubCommandFlags>; (if ArgParser class is made generic)\n  parser: ArgParserInstance;\n  /** Handler function for this subcommand. */\n  handler?: (\n    ctx: IHandlerContext<\n      TParsedArgs<TSubCommandFlags>,\n      TParsedArgs<TParentCommandFlags>\n    >,\n  ) => THandlerReturn | Promise<THandlerReturn>;\n  /** Internal flag to identify MCP subcommands for proper exclusion from tool generation */\n  isMcp?: boolean;\n  /** MCP server information for DXT generation */\n  mcpServerInfo?: {\n    name: string;\n    version: string;\n    description?: string;\n  };\n  /** MCP tool generation options for DXT generation */\n  mcpToolOptions?: any;\n}\n\n/**\n * Result of parsing operations that replaces process.exit() calls.\n * Provides structured information about the parsing outcome.\n */\nexport interface ParseResult<T = any> {\n  /** Whether the parsing was successful */\n  success: boolean;\n  /** Exit code that would have been used with process.exit() */\n  exitCode: number;\n  /** The parsed data/result when successful */\n  data?: T;\n  /** Human-readable message about the result */\n  message?: string;\n  /** Whether the process should exit (for help, version, etc.) */\n  shouldExit?: boolean;\n  /** Type of result for better handling */\n  type?: \"success\" | \"error\" | \"help\" | \"version\" | \"debug\";\n}\n\n/**\n * Configuration options for ArgParser behavior\n * @deprecated Use IArgParserParams for full configuration options. This interface will be removed in v3.0.\n */\nexport interface ArgParserOptions {\n  /** Whether to automatically call process.exit() based on ParseResult (default: true for backward compatibility) */\n  autoExit?: boolean;\n  /** Whether to handle errors by exiting or throwing (default: true for backward compatibility) */\n  handleErrors?: boolean;\n}\n\n/**\n * Configuration options for ArgParser runtime behavior\n * This is a more clearly named version of ArgParserOptions\n */\nexport interface ArgParserBehaviorOptions {\n  /** Whether to automatically call process.exit() based on ParseResult (default: true for backward compatibility) */\n  autoExit?: boolean;\n  /** Whether to handle errors by exiting or throwing (default: true for backward compatibility) */\n  handleErrors?: boolean;\n}\n\n/**\n * Type for the main handler of an ArgParser instance (root command or a command defined by an ArgParser).\n * @template TParserFlags Flags defined for this ArgParser instance.\n * @template TParentParserFlags Flags of the parent parser, if this parser is used as a subcommand.\n * @template THandlerReturn The expected return type of the handler.\n */\nexport type MainHandler<\n  TParserFlags extends FlagsArray = FlagsArray,\n  TParentParserFlags extends FlagsArray = FlagsArray,\n  THandlerReturn = any,\n> = (\n  ctx: IHandlerContext<\n    TParsedArgs<TParserFlags>,\n    TParsedArgs<TParentParserFlags>\n  >,\n) => THandlerReturn | Promise<THandlerReturn>;\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ParseResult } from \"../core/types\";\n\n/**\n * Test utilities for DxtGenerator\n * Contains methods that are only used during testing\n */\nexport class DxtGeneratorTestUtils {\n  private argParserInstance: any;\n  private extractMcpServerInfo: () => any;\n  private handleExit: (\n    exitCode: number,\n    message?: string,\n    type?: ParseResult[\"type\"],\n    data?: any,\n  ) => ParseResult | never;\n\n  constructor(\n    argParserInstance: any,\n    extractMcpServerInfo: () => any,\n    handleExit: (\n      exitCode: number,\n      message?: string,\n      type?: ParseResult[\"type\"],\n      data?: any,\n    ) => ParseResult | never,\n  ) {\n    this.argParserInstance = argParserInstance;\n    this.extractMcpServerInfo = extractMcpServerInfo;\n    this.handleExit = handleExit;\n  }\n\n  /**\n   * Handles DXT generation in test mode by creating mock DXT package structure\n   * This method creates simplified mock files for testing purposes\n   */\n  public async handleTestModeDxtGeneration(\n    processArgs: string[],\n    buildDxtIndex: number,\n  ): Promise<ParseResult> {\n    try {\n      // Get output directory from arguments (test mode expects directory argument)\n      const outputDir = processArgs[buildDxtIndex + 1] || \"./dxt-packages\";\n\n      // Check if we have MCP configuration\n      const mcpTools = this.argParserInstance.toMcpTools();\n      if (mcpTools.length === 0) {\n        return this.handleExit(0, \"No MCP servers found\", \"success\");\n      }\n\n      // Extract server info from the unified MCP configuration\n      const serverInfo = this.extractMcpServerInfo();\n\n      // Create mock DXT package structure for testing\n      const folderName = `${serverInfo.name.replace(/[^a-zA-Z0-9_-]/g, \"_\")}-dxt`;\n      const buildDir = path.join(outputDir, folderName);\n\n      // Ensure build directory exists\n      if (!fs.existsSync(buildDir)) {\n        fs.mkdirSync(buildDir, { recursive: true });\n      }\n\n      // Create mock manifest.json with DXT-compliant structure\n      const manifest = {\n        dxt_version: \"0.1\",\n        name: serverInfo.name,\n        version: serverInfo.version,\n        description: serverInfo.description,\n        author: serverInfo.author,\n        server: {\n          type: \"node\",\n          entry_point: \"server/index.mjs\",\n          mcp_config: {\n            command: \"node\",\n            args: [\"${__dirname}/server/index.mjs\", \"--s-mcp-serve\"],\n            env: {},\n          },\n        },\n        tools: mcpTools.map((tool: any) => ({\n          name: tool.name,\n          description: tool.description,\n        })),\n        icon: \"logo.jpg\",\n      };\n\n      fs.writeFileSync(\n        path.join(buildDir, \"manifest.json\"),\n        JSON.stringify(manifest, null, 2),\n      );\n\n      // Create mock package.json\n      const packageJson = {\n        name: serverInfo.name,\n        version: serverInfo.version,\n        description: serverInfo.description,\n        main: \"index.mjs\",\n        type: \"module\",\n      };\n      fs.writeFileSync(\n        path.join(buildDir, \"package.json\"),\n        JSON.stringify(packageJson, null, 2),\n      );\n\n      // Create mock README.md\n      const readme = `# ${serverInfo.name}\\n\\n${serverInfo.description}\\n\\nGenerated by @alcyone-labs/arg-parser`;\n      fs.writeFileSync(path.join(buildDir, \"README.md\"), readme);\n\n      // Create mock build script\n      const buildScript = `#!/bin/bash\\necho \"Mock DXT build script for ${serverInfo.name}\"`;\n      fs.writeFileSync(\n        path.join(buildDir, \"build-dxt-package.sh\"),\n        buildScript,\n      );\n\n      return this.handleExit(0, \"DXT package generation completed\", \"success\", {\n        entryPoint: \"test-mode\",\n        outputDir: buildDir,\n      });\n    } catch (error) {\n      return this.handleExit(\n        1,\n        `Test mode DXT generation failed: ${error instanceof Error ? error.message : String(error)}`,\n        \"error\",\n      );\n    }\n  }\n\n  /**\n   * Checks if the current environment is in test mode\n   * Used to determine whether to use test utilities or production code\n   */\n  public static isTestMode(): boolean {\n    return (\n      process.env[\"NODE_ENV\"] === \"test\" ||\n      process.argv[0]?.includes(\"vitest\") ||\n      process.argv[1]?.includes(\"vitest\") ||\n      process.argv[1]?.includes(\"tinypool\")\n    );\n  }\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { DxtPathResolver } from \"./dxt-path-resolver\";\n\n/**\n * Configuration object for log path with explicit relative base\n */\nexport interface LogPathConfig {\n  /** The log file path */\n  path: string;\n  /** What the path should be relative to */\n  relativeTo?: \"entry\" | \"cwd\" | \"absolute\";\n  /** Manual base path override (used with relativeTo: 'absolute') */\n  basePath?: string;\n}\n\n/**\n * Log path can be a simple string or a configuration object\n */\nexport type LogPath = string | LogPathConfig;\n\n/**\n * Attempts to detect the entry point script using multiple methods\n * @returns The detected entry point path or null if detection fails\n */\nexport function detectEntryPoint(): string | null {\n  try {\n    // Method 1: Check process.argv[1] (most reliable for direct execution)\n    if (process.argv[1] && fs.existsSync(process.argv[1])) {\n      return process.argv[1];\n    }\n\n    // Method 2: ES modules - import.meta.url (when available)\n    // Note: This needs to be handled by the caller since import.meta is not available in all contexts\n\n    // Method 3: CommonJS - __filename (when available)\n    // Note: This also needs to be handled by the caller since __filename is not available in ES modules\n\n    // Method 4: Try to find main module from require.main (CommonJS)\n    if (\n      typeof require !== \"undefined\" &&\n      require.main &&\n      require.main.filename\n    ) {\n      return require.main.filename;\n    }\n\n    return null;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Helper to get entry point from import.meta.url when in ES module context\n * @param importMetaUrl The import.meta.url value\n * @returns The file path\n */\nexport function getEntryPointFromImportMeta(importMetaUrl: string): string {\n  // Simple URL to path conversion for file:// URLs\n  if (importMetaUrl.startsWith(\"file://\")) {\n    return decodeURIComponent(importMetaUrl.replace(\"file://\", \"\"));\n  }\n  return importMetaUrl;\n}\n\n/**\n * Helper to validate and normalize a log path string\n * @param path The path to validate\n * @returns The normalized path\n */\nfunction normalizePath(path: string): string {\n  // Remove any trailing/leading whitespace\n  return path.trim();\n}\n\n/**\n * Resolves a log path configuration to an absolute file path\n * @param logPath The log path configuration (string or object)\n * @param fallbackEntryPoint Optional fallback entry point if detection fails\n * @returns Absolute path to the log file\n */\nexport function resolveLogPath(\n  logPath: LogPath,\n  fallbackEntryPoint?: string,\n): string {\n  // Handle string inputs\n  if (typeof logPath === \"string\") {\n    // First, substitute any DXT variables in the path\n    const pathWithVariables = DxtPathResolver.substituteVariables(\n      logPath,\n      DxtPathResolver.detectContext()\n    );\n    const normalizedPath = normalizePath(pathWithVariables);\n\n    // Absolute paths - return as-is\n    if (path.isAbsolute(normalizedPath)) {\n      return normalizedPath;\n    }\n\n    // Explicit process.cwd() relative paths\n    if (normalizedPath.startsWith(\"cwd:\")) {\n      const relativePath = normalizedPath.slice(4); // Remove \"cwd:\" prefix\n      return path.resolve(process.cwd(), relativePath);\n    }\n\n    // Default behavior: relative to entry point\n    const entryPoint = detectEntryPoint() || fallbackEntryPoint;\n    if (entryPoint) {\n      return path.resolve(path.dirname(entryPoint), normalizedPath);\n    }\n\n    // Fallback to process.cwd() if entry point detection fails\n    console.warn(\n      `Warning: Could not detect entry point for log path resolution. ` +\n        `Using process.cwd() as fallback. Path: ${normalizedPath}`,\n    );\n    return path.resolve(process.cwd(), normalizedPath);\n  }\n\n  // Handle object form\n  const { path: logFilePath, relativeTo = \"entry\", basePath } = logPath;\n  // Substitute DXT variables in the path\n  const pathWithVariables = DxtPathResolver.substituteVariables(\n    logFilePath,\n    DxtPathResolver.detectContext()\n  );\n  const normalizedPath = normalizePath(pathWithVariables);\n\n  switch (relativeTo) {\n    case \"absolute\":\n      if (basePath) {\n        // Substitute DXT variables in basePath as well\n        const resolvedBasePath = DxtPathResolver.substituteVariables(\n          basePath,\n          DxtPathResolver.detectContext()\n        );\n        return path.resolve(resolvedBasePath, normalizedPath);\n      }\n      if (path.isAbsolute(normalizedPath)) {\n        return normalizedPath;\n      }\n      // If no basePath provided and path is not absolute, fall back to process.cwd()\n      console.warn(\n        `Warning: relativeTo 'absolute' specified but no basePath provided and path is not absolute. ` +\n          `Using process.cwd() as fallback. Path: ${normalizedPath}`,\n      );\n      return path.resolve(process.cwd(), normalizedPath);\n\n    case \"cwd\":\n      return path.resolve(process.cwd(), normalizedPath);\n\n    case \"entry\":\n    default:\n      const entryPoint = detectEntryPoint() || fallbackEntryPoint;\n      if (entryPoint) {\n        return path.resolve(path.dirname(entryPoint), normalizedPath);\n      }\n\n      // Fallback to process.cwd() if entry point detection fails\n      console.warn(\n        `Warning: Could not detect entry point for log path resolution. ` +\n          `Using process.cwd() as fallback. Path: ${normalizedPath}`,\n      );\n      return path.resolve(process.cwd(), normalizedPath);\n  }\n}\n\n/**\n * Creates a log path configuration for entry-point relative logging\n * @param path The relative path from the entry point\n * @returns LogPathConfig object\n */\nexport function entryRelative(path: string): LogPathConfig {\n  return {\n    path,\n    relativeTo: \"entry\",\n  };\n}\n\n/**\n * Creates a log path configuration for process.cwd() relative logging\n * @param path The relative path from process.cwd()\n * @returns LogPathConfig object\n */\nexport function cwdRelative(path: string): LogPathConfig {\n  return {\n    path,\n    relativeTo: \"cwd\",\n  };\n}\n\n/**\n * Creates a log path configuration for absolute path logging\n * @param path The absolute path or relative path\n * @param basePath Optional base path to resolve relative paths against\n * @returns LogPathConfig object\n */\nexport function absolutePath(path: string, basePath?: string): LogPathConfig {\n  return {\n    path,\n    relativeTo: \"absolute\",\n    basePath,\n  };\n}\n\n/**\n * Utility to help migrate from old relative-to-cwd behavior\n * @param path The path that was previously relative to cwd\n * @returns String with explicit cwd: prefix\n */\nexport function legacyCwdPath(path: string): string {\n  return `cwd:${path}`;\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport { detectEntryPoint } from \"./log-path-utils\";\n\n/**\n * Context information for path resolution\n */\nexport interface IPathContext {\n  /** Whether the code is running in a DXT environment */\n  isDxt: boolean;\n  /** DXT extension directory (when running in DXT) */\n  extensionDir?: string;\n  /** User's home directory */\n  userHome?: string;\n  /** Current working directory */\n  cwd?: string;\n  /** Entry point directory */\n  entryDir?: string;\n}\n\n/**\n * Configuration for DXT variable substitution\n */\nexport interface IDxtVariableConfig {\n  /** Custom variable values to override defaults */\n  customVariables?: Record<string, string>;\n  /** Whether to allow undefined variables (default: false) */\n  allowUndefined?: boolean;\n}\n\n/**\n * DXT-aware path resolver with context detection and variable substitution\n */\nexport class DxtPathResolver {\n  private static _cachedContext: IPathContext | null = null;\n\n  /**\n   * Detects the current execution context\n   * @param forceRefresh - Force refresh of cached context\n   * @returns Path context information\n   */\n  public static detectContext(forceRefresh = false): IPathContext {\n    if (!forceRefresh && this._cachedContext) {\n      return this._cachedContext;\n    }\n\n    const context: IPathContext = {\n      isDxt: this.isDxtEnvironment(),\n      userHome: typeof os.homedir === 'function' ? os.homedir() : undefined,\n      cwd: typeof process !== 'undefined' && typeof process.cwd === 'function' ? process.cwd() : undefined,\n    };\n\n    // Detect entry point directory\n    const entryPoint = detectEntryPoint();\n    if (entryPoint) {\n      context.entryDir = path.dirname(entryPoint);\n    }\n\n    // Detect DXT extension directory if in DXT environment\n    if (context.isDxt) {\n      context.extensionDir = this.detectDxtExtensionDir();\n    }\n\n    this._cachedContext = context;\n    return context;\n  }\n\n  /**\n   * Checks if the current environment is a DXT environment\n   * @returns True if running in DXT, false otherwise\n   */\n  public static isDxtEnvironment(): boolean {\n    // Check for DXT-specific environment variables\n    if (process.env['DXT_EXTENSION_DIR'] || process.env['CLAUDE_DESKTOP_DXT']) {\n      return true;\n    }\n\n    // Check for DXT-specific file patterns in the current directory\n    const dxtIndicators = [\n      \"manifest.json\", // DXT packages have manifest.json\n      \".dxt\", // DXT marker file\n    ];\n\n    for (const indicator of dxtIndicators) {\n      const indicatorPath = path.join(process.cwd(), indicator);\n      if (fs.existsSync(indicatorPath)) {\n        // Additional validation for manifest.json to ensure it's a DXT manifest\n        if (indicator === \"manifest.json\") {\n          try {\n            const manifest = JSON.parse(fs.readFileSync(indicatorPath, \"utf-8\"));\n            if (manifest.server && manifest.user_config) {\n              return true;\n            }\n          } catch {\n            // Not a valid DXT manifest, continue checking\n          }\n        } else {\n          return true;\n        }\n      }\n    }\n\n    // Check if running from a path that looks like a DXT extension\n    const cwd = process.cwd();\n    if (cwd.includes(\"claude-desktop\") || cwd.includes(\"extensions\")) {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Detects the DXT extension directory\n   * @returns DXT extension directory path or undefined\n   */\n  private static detectDxtExtensionDir(): string | undefined {\n    // Check environment variable first\n    if (process.env['DXT_EXTENSION_DIR']) {\n      return process.env['DXT_EXTENSION_DIR'];\n    }\n\n    // Try to detect from current working directory\n    const cwd = process.cwd();\n    \n    // If we're in a DXT package, the extension dir is typically the parent or current directory\n    if (fs.existsSync(path.join(cwd, \"manifest.json\"))) {\n      return cwd;\n    }\n\n    // Look for parent directories that might be the extension dir\n    let currentDir = cwd;\n    for (let i = 0; i < 3; i++) { // Check up to 3 levels up\n      const parentDir = path.dirname(currentDir);\n      if (parentDir === currentDir) break; // Reached root\n\n      if (fs.existsSync(path.join(parentDir, \"manifest.json\"))) {\n        return parentDir;\n      }\n      currentDir = parentDir;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Resolves a path with DXT variable substitution\n   * @param inputPath - Path that may contain DXT variables\n   * @param context - Optional context (will be detected if not provided)\n   * @param config - Optional configuration for variable substitution\n   * @returns Resolved absolute path\n   */\n  public static resolvePath(\n    inputPath: string,\n    context?: IPathContext,\n    config?: IDxtVariableConfig\n  ): string {\n    const ctx = context || this.detectContext();\n    const resolvedPath = this.substituteVariables(inputPath, ctx, config);\n\n    // If already absolute, return as-is\n    if (path.isAbsolute(resolvedPath)) {\n      return resolvedPath;\n    }\n\n    // Resolve relative paths based on context\n    if (ctx.isDxt && ctx.extensionDir) {\n      return path.resolve(ctx.extensionDir, resolvedPath);\n    } else if (ctx.entryDir) {\n      return path.resolve(ctx.entryDir, resolvedPath);\n    } else {\n      return path.resolve(ctx.cwd || process.cwd(), resolvedPath);\n    }\n  }\n\n  /**\n   * Substitutes DXT variables in a path string\n   * @param inputPath - Path containing variables like ${HOME}, ${__dirname}, etc.\n   * @param context - Path context\n   * @param config - Variable substitution configuration\n   * @returns Path with variables substituted\n   */\n  public static substituteVariables(\n    inputPath: string,\n    context: IPathContext,\n    config?: IDxtVariableConfig\n  ): string {\n    const safeHomedir = () => typeof os.homedir === 'function' ? os.homedir() : '/tmp';\n    const homeDir = context.userHome || safeHomedir();\n\n    const variables: Record<string, string> = {\n      // Standard DXT variables\n      HOME: homeDir,\n      DOCUMENTS: path.join(homeDir, \"Documents\"),\n      DOWNLOADS: path.join(homeDir, \"Downloads\"),\n      DESKTOP: path.join(homeDir, \"Desktop\"),\n      pathSeparator: path.sep,\n      \n      // Context-specific variables\n      __dirname: context.isDxt && context.extensionDir \n        ? context.extensionDir \n        : context.entryDir || context.cwd || process.cwd(),\n      \n      // DXT-specific variables\n      ...(context.isDxt && context.extensionDir && {\n        DXT_DIR: context.extensionDir,\n        EXTENSION_DIR: context.extensionDir,\n      }),\n\n      // Custom variables override defaults\n      ...config?.customVariables,\n    };\n\n    // Replace variables in the format ${VARIABLE_NAME}\n    return inputPath.replace(/\\$\\{([^}]*)\\}/g, (match, variableName) => {\n      // Handle empty variable names\n      if (!variableName.trim()) {\n        if (config?.allowUndefined) {\n          return match;\n        }\n        throw new Error(\n          `Undefined DXT variable: ${variableName}. Available variables: ${Object.keys(variables).join(\", \")}`\n        );\n      }\n\n      const value = variables[variableName];\n\n      if (value !== undefined) {\n        return value;\n      }\n\n      if (config?.allowUndefined) {\n        return match; // Keep the original variable if undefined is allowed\n      }\n\n      throw new Error(\n        `Undefined DXT variable: ${variableName}. Available variables: ${Object.keys(variables).join(\", \")}`\n      );\n    });\n  }\n\n  /**\n   * Creates a path for user data storage\n   * @param filename - Name of the file or subdirectory\n   * @param context - Optional context (will be detected if not provided)\n   * @returns Absolute path for user data\n   */\n  public static createUserDataPath(filename: string, context?: IPathContext): string {\n    const ctx = context || this.detectContext();\n    \n    if (ctx.isDxt && ctx.extensionDir) {\n      // In DXT environment, store in extension directory\n      return path.join(ctx.extensionDir, \"data\", filename);\n    } else {\n      // In development, store in user's data directory\n      const safeHomedir = () => typeof os.homedir === 'function' ? os.homedir() : '/tmp';\n      const userDataDir = process.env['XDG_DATA_HOME'] ||\n        path.join(ctx.userHome || safeHomedir(), \".local\", \"share\");\n      const appName = this.getAppName(ctx);\n      return path.join(userDataDir, appName, filename);\n    }\n  }\n\n  /**\n   * Creates a path for temporary files\n   * @param filename - Name of the temporary file\n   * @param context - Optional context (will be detected if not provided)\n   * @returns Absolute path for temporary file\n   */\n  public static createTempPath(filename: string, context?: IPathContext): string {\n    const ctx = context || this.detectContext();\n    \n    if (ctx.isDxt && ctx.extensionDir) {\n      // In DXT environment, use extension temp directory\n      return path.join(ctx.extensionDir, \"temp\", filename);\n    } else {\n      // In development, use system temp directory\n      const safeTmpdir = () => typeof os.tmpdir === 'function' ? os.tmpdir() : '/tmp';\n      const appName = this.getAppName(ctx);\n      return path.join(safeTmpdir(), appName, filename);\n    }\n  }\n\n  /**\n   * Creates a path for configuration files\n   * @param filename - Name of the configuration file\n   * @param context - Optional context (will be detected if not provided)\n   * @returns Absolute path for configuration file\n   */\n  public static createConfigPath(filename: string, context?: IPathContext): string {\n    const ctx = context || this.detectContext();\n    \n    if (ctx.isDxt && ctx.extensionDir) {\n      // In DXT environment, store in extension directory\n      return path.join(ctx.extensionDir, \"config\", filename);\n    } else {\n      // In development, store in user's config directory\n      const safeHomedir = () => typeof os.homedir === 'function' ? os.homedir() : '/tmp';\n      const configDir = process.env['XDG_CONFIG_HOME'] ||\n        path.join(ctx.userHome || safeHomedir(), \".config\");\n      const appName = this.getAppName(ctx);\n      return path.join(configDir, appName, filename);\n    }\n  }\n\n  /**\n   * Gets the application name for directory creation\n   * @param context - Path context\n   * @returns Application name or default\n   */\n  private static getAppName(context: IPathContext): string {\n    // Try to get app name from package.json\n    try {\n      const packageJsonPath = path.join(context.entryDir || context.cwd || process.cwd(), \"package.json\");\n      if (fs.existsSync(packageJsonPath)) {\n        const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n        return packageJson.name || \"argparser-app\";\n      }\n    } catch {\n      // Ignore errors\n    }\n\n    return \"argparser-app\";\n  }\n\n  /**\n   * Ensures a directory exists, creating it if necessary\n   * @param dirPath - Directory path to ensure\n   * @returns True if directory exists or was created successfully\n   */\n  public static ensureDirectory(dirPath: string): boolean {\n    try {\n      if (!fs.existsSync(dirPath)) {\n        fs.mkdirSync(dirPath, { recursive: true });\n      }\n      return true;\n    } catch (error) {\n      console.warn(`Failed to create directory: ${dirPath}`, error);\n      return false;\n    }\n  }\n\n  /**\n   * Clears the cached context (useful for testing)\n   */\n  public static clearCache(): void {\n    this._cachedContext = null;\n  }\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { createPathsMatcher, getTsconfig } from \"get-tsconfig\";\nimport { type Options } from \"tsdown\";\nimport chalk from \"@alcyone-labs/simple-chalk\";\nimport type { ParseResult } from \"../core/types\";\nimport { getJsonSchemaTypeFromFlag } from \"../core/types\";\nimport { DxtGeneratorTestUtils } from \"./DxtGenerator-testUtils\";\nimport { DxtPathResolver } from \"../core/dxt-path-resolver\";\n\n/**\n * DxtGenerator handles the generation of DXT (Desktop Extension) packages\n * for MCP servers created from ArgParser instances.\n */\nexport class DxtGenerator {\n  private argParserInstance: any;\n\n  constructor(argParserInstance: any) {\n    this.argParserInstance = argParserInstance;\n  }\n\n  /**\n   * Helper method to handle exit logic based on autoExit setting\n   */\n  private _handleExit(\n    exitCode: number,\n    message?: string,\n    type?: ParseResult[\"type\"],\n    data?: any,\n  ): ParseResult | never {\n    const result: ParseResult = {\n      success: exitCode === 0,\n      exitCode,\n      message,\n      type: type || (exitCode === 0 ? \"success\" : \"error\"),\n      shouldExit: true,\n      data,\n    };\n\n    if (\n      this.argParserInstance.getAutoExit() &&\n      typeof process === \"object\" &&\n      typeof process.exit === \"function\"\n    ) {\n      process.exit(exitCode as never);\n    }\n\n    return result;\n  }\n\n  /**\n   * Handles the --s-build-dxt system flag to generate DXT packages for MCP servers\n   */\n  public async handleBuildDxtFlag(\n    processArgs: string[],\n    buildDxtIndex: number,\n  ): Promise<boolean | ParseResult> {\n    try {\n      // Check if we're in test mode (vitest/jest environment)\n      if (DxtGeneratorTestUtils.isTestMode()) {\n        // In test mode, generate a mock DXT package structure\n        const testUtils = new DxtGeneratorTestUtils(\n          this.argParserInstance,\n          () => this.extractMcpServerInfo(),\n          (exitCode, message, type, data) =>\n            this._handleExit(exitCode, message, type, data),\n        );\n        return await testUtils.handleTestModeDxtGeneration(\n          processArgs,\n          buildDxtIndex,\n        );\n      }\n\n      // Check for --s-with-node-modules flag\n      const withNodeModules = processArgs.includes(\"--s-with-node-modules\");\n      if (withNodeModules) {\n        console.log(\n          chalk.yellow(\n            \"🗂️  --s-with-node-modules detected: will include node_modules in bundle\",\n          ),\n        );\n\n        // Validate that node_modules exists and looks properly set up\n        const nodeModulesPath = path.resolve(\"./node_modules\");\n        if (!fs.existsSync(nodeModulesPath)) {\n          console.error(\n            chalk.red(\n              \"❌ Error: node_modules directory not found. Please run the installation command first.\",\n            ),\n          );\n          console.log(\n            chalk.cyan(\n              \"💡 Required command: pnpm install --prod --node-linker=hoisted\",\n            ),\n          );\n          return this._handleExit(\n            1,\n            \"node_modules directory not found\",\n            \"error\",\n          );\n        }\n\n        // Check if node_modules looks properly hoisted (no nested node_modules in immediate subdirs)\n        try {\n          const nodeModulesContents = fs.readdirSync(nodeModulesPath);\n          const hasNestedNodeModules = nodeModulesContents\n            .filter((item) => !item.startsWith(\".\") && !item.startsWith(\"@\"))\n            .some((item) => {\n              const itemPath = path.join(nodeModulesPath, item);\n              try {\n                return (\n                  fs.statSync(itemPath).isDirectory() &&\n                  fs.existsSync(path.join(itemPath, \"node_modules\"))\n                );\n              } catch {\n                return false;\n              }\n            });\n\n          if (hasNestedNodeModules) {\n            console.warn(\n              chalk.yellow(\n                \"⚠️  Warning: Detected nested node_modules. For best results, ensure hoisted installation:\",\n              ),\n            );\n            console.log(\n              chalk.cyan(\n                \"   rm -rf node_modules && pnpm install --prod --node-linker=hoisted\",\n              ),\n            );\n          } else {\n            console.log(\n              chalk.green(\n                \"✅ node_modules appears properly hoisted and ready for bundling\",\n              ),\n            );\n          }\n        } catch (error) {\n          console.warn(\n            chalk.yellow(\n              `⚠️  Could not validate node_modules structure: ${error instanceof Error ? error.message : String(error)}`,\n            ),\n          );\n        }\n\n        console.log(\n          chalk.gray(\n            \"💡 This will create a fully autonomous DXT with all native dependencies included\",\n          ),\n        );\n      }\n\n      // The entry point is the script that called this flag (process.argv[1])\n      const entryPointFile = process.argv[1];\n\n      if (!entryPointFile || !fs.existsSync(entryPointFile)) {\n        console.error(\n          chalk.red(`Error: Entry point file not found: ${entryPointFile}`),\n        );\n        return this._handleExit(1, \"Entry point file not found\", \"error\");\n      }\n\n      // Get the output directory from arguments (defaults to './dxt')\n      let outputDir = processArgs[buildDxtIndex + 1] || \"./dxt\";\n      // If the output folder was not specified but other system flags were.\n      if (outputDir.startsWith(\"--s-\")) outputDir = \"./dxt\";\n\n      console.log(\n        chalk.cyan(\n          `\\n🔧 Building DXT package for entry point: ${entryPointFile}`,\n        ),\n      );\n      console.log(chalk.gray(`Output directory: ${outputDir}`));\n      console.log(chalk.gray(`Entrypoint file: ${entryPointFile}`));\n\n      // Build the DXT package using TSDown\n      await this.buildDxtWithTsdown(entryPointFile, outputDir, withNodeModules);\n\n      console.log(chalk.green(`\\n✅ DXT package generation completed!`));\n\n      return this._handleExit(\n        0,\n        \"DXT package generation completed\",\n        \"success\",\n        { entryPoint: entryPointFile, outputDir },\n      );\n    } catch (error) {\n      console.error(\n        chalk.red(\n          `Error generating DXT package: ${error instanceof Error ? error.message : String(error)}`,\n        ),\n      );\n      return this._handleExit(\n        1,\n        `Error generating DXT package: ${error instanceof Error ? error.message : String(error)}`,\n        \"error\",\n      );\n    }\n  }\n\n  /**\n   * Extracts server information from MCP configuration\n   * Now supports both withMcp() configuration and legacy addMcpSubCommand()\n   */\n  private extractMcpServerInfo(mcpSubCommand?: any): any {\n    // First, try to get server info from withMcp() configuration\n    if ((this.argParserInstance as any).getMcpServerConfig) {\n      const mcpConfig = (this.argParserInstance as any).getMcpServerConfig();\n      if (mcpConfig?.serverInfo) {\n        return mcpConfig.serverInfo;\n      }\n    }\n\n    // Fallback: Use the stored server info from addMcpSubCommand if available\n    if (mcpSubCommand?.mcpServerInfo) {\n      return mcpSubCommand.mcpServerInfo;\n    }\n\n    // Final fallback: Generate default info from ArgParser instance\n    const appName = this.argParserInstance.getAppName();\n    const appCommandName = this.argParserInstance.getAppCommandName();\n    const description =\n      (this.argParserInstance as any).getDescription?.() ||\n      \"MCP server generated from ArgParser\";\n\n    const defaultInfo = {\n      name:\n        appCommandName ||\n        appName?.toLowerCase().replace(/[^a-zA-Z0-9_-]/g, \"_\") ||\n        \"mcp-server\",\n      version: \"1.0.0\",\n      description: description,\n    };\n\n    return defaultInfo;\n  }\n\n  // Additional methods will be added in subsequent edits...\n\n  private generateMcpToolsForDxt(\n    mcpSubCommand?: any,\n  ): Array<{ name: string; description?: string }> {\n    try {\n      // Check if this is an ArgParser instance with MCP capabilities\n      if (typeof (this.argParserInstance as any).toMcpTools === \"function\") {\n        // Get tool options from withMcp() configuration or fallback to subcommand\n        let toolOptions = mcpSubCommand?.mcpToolOptions;\n\n        // Try to get tool options from withMcp() configuration\n        if ((this.argParserInstance as any).getMcpServerConfig) {\n          const mcpConfig = (\n            this.argParserInstance as any\n          ).getMcpServerConfig();\n          if (mcpConfig?.toolOptions) {\n            toolOptions = mcpConfig.toolOptions;\n          }\n        }\n\n        // Use the unified MCP tool generation (includes both CLI-generated and manual tools)\n        const mcpTools = (this.argParserInstance as any).toMcpTools(\n          toolOptions,\n        );\n\n        return mcpTools.map((tool: any) => ({\n          name: tool.name,\n          description: tool.description,\n        }));\n      }\n\n      // Fallback: create simplified tool list based on parser structure (DXT-compliant)\n      const tools: Array<{ name: string; description?: string }> = [];\n\n      // Add main command tool if there's a handler\n      if (\n        this.argParserInstance.getHandler &&\n        this.argParserInstance.getHandler()\n      ) {\n        const appName = this.argParserInstance.getAppName() || \"main\";\n        const commandName =\n          this.argParserInstance.getAppCommandName() ||\n          appName.toLowerCase().replace(/[^a-zA-Z0-9_-]/g, \"_\");\n\n        tools.push({\n          name: commandName,\n          description:\n            this.argParserInstance.getDescription() ||\n            `Execute ${appName} command`,\n        });\n      }\n\n      // Add subcommand tools (excluding MCP subcommands to avoid recursion)\n      for (const [name, subCmd] of this.argParserInstance.getSubCommands()) {\n        if (!(subCmd as any).isMcp) {\n          const commandName =\n            this.argParserInstance.getAppCommandName() ||\n            this.argParserInstance\n              .getAppName()\n              ?.toLowerCase()\n              .replace(/[^a-zA-Z0-9_-]/g, \"_\") ||\n            \"main\";\n          tools.push({\n            name: `${commandName}_${name}`,\n            description:\n              (subCmd as any).description || `Execute ${name} subcommand`,\n          });\n        }\n      }\n\n      return tools.length > 0\n        ? tools\n        : [\n            {\n              name: \"main\",\n              description: \"Main command tool\",\n            },\n          ];\n    } catch (error) {\n      console.warn(\n        chalk.yellow(\n          `Warning: Could not generate detailed tool list: ${error instanceof Error ? error.message : String(error)}`,\n        ),\n      );\n      return [\n        {\n          name: \"main\",\n          description: \"Main command tool\",\n        },\n      ];\n    }\n  }\n\n  /**\n   * Maps ArgParser flag types to DXT user config types\n   */\n  /**\n   * Adds the logo to the build folder if available\n   * @returns The filename of the logo that was added, or undefined if no logo was added\n   */\n  private async addLogoToFolder(\n    buildDir: string,\n    serverInfo?: any,\n    entryPointFile?: string,\n  ): Promise<string | undefined> {\n    try {\n      let logoBuffer: Buffer | null = null;\n      let logoFilename = \"logo.jpg\";\n\n      // First, try to use custom logo from serverInfo\n      if (serverInfo?.logo) {\n        const customLogo = serverInfo.logo;\n\n        if (\n          customLogo.startsWith(\"http://\") ||\n          customLogo.startsWith(\"https://\")\n        ) {\n          // Download logo from URL\n          try {\n            console.log(`📥 Downloading logo from: ${customLogo}`);\n            const response = await fetch(customLogo);\n            if (response.ok) {\n              logoBuffer = Buffer.from(await response.arrayBuffer());\n              // Extract extension from URL and normalize to logo.ext format\n              const urlPath = new URL(customLogo).pathname;\n              const urlFilename = path.basename(urlPath);\n              if (urlFilename && urlFilename.includes(\".\")) {\n                const ext = path.extname(urlFilename);\n                logoFilename = `logo${ext}`;\n              } else {\n                logoFilename = \"logo.jpg\"; // fallback if no extension detected\n              }\n              console.log(\"✓ Downloaded logo from URL\");\n            } else {\n              console.warn(\n                `⚠ Failed to download logo: HTTP ${response.status}`,\n              );\n            }\n          } catch (error) {\n            console.warn(\n              \"⚠ Failed to download logo from URL:\",\n              error instanceof Error ? error.message : String(error),\n            );\n          }\n        } else {\n          // Try to read logo from local file path\n          // If entryPointFile is provided and customLogo is relative, resolve relative to entry point\n          let logoPath: string;\n          if (entryPointFile && !path.isAbsolute(customLogo)) {\n            // Resolve relative to the directory containing the entry point file\n            const entryDir = path.dirname(entryPointFile);\n            logoPath = path.resolve(entryDir, customLogo);\n            console.log(\n              `📍 Resolving logo path relative to entry point: ${logoPath}`,\n            );\n          } else {\n            // Absolute path or no entry point provided - resolve relative to cwd\n            logoPath = path.resolve(customLogo);\n          }\n\n          if (fs.existsSync(logoPath)) {\n            logoBuffer = fs.readFileSync(logoPath);\n            const ext = path.extname(logoPath);\n            logoFilename = `logo${ext}`;\n            console.log(\"✓ Added custom logo from local file\");\n          } else {\n            console.warn(`⚠ Custom logo file not found: ${logoPath}`);\n          }\n        }\n      }\n\n      // Fallback to default logo if no custom logo was loaded\n      if (!logoBuffer) {\n        // Get current directory equivalent for ES modules\n        const currentDir = path.dirname(new URL(import.meta.url).pathname);\n\n        // Try to find the default logo in the dist/assets folder (built version)\n        let logoPath = path.join(currentDir, \"assets\", \"logo_1_small.jpg\");\n\n        // If not found, try the source location (development)\n        if (!fs.existsSync(logoPath)) {\n          logoPath = path.join(\n            currentDir,\n            \"..\",\n            \"docs\",\n            \"MCP\",\n            \"icons\",\n            \"logo_1_small.jpg\",\n          );\n        }\n\n        // If still not found, try relative to process.cwd()\n        if (!fs.existsSync(logoPath)) {\n          const currentDir = typeof process !== 'undefined' ? process.cwd() : \"/test\";\n          logoPath = path.join(\n            currentDir,\n            \"docs\",\n            \"MCP\",\n            \"icons\",\n            \"logo_1_small.jpg\",\n          );\n        }\n\n        // If still not found, try node_modules (when package is installed)\n        if (!fs.existsSync(logoPath)) {\n          const currentDir = typeof process !== 'undefined' ? process.cwd() : \"/test\";\n          logoPath = path.join(\n            currentDir,\n            \"node_modules\",\n            \"@alcyone-labs\",\n            \"arg-parser\",\n            \"dist\",\n            \"assets\",\n            \"logo_1_small.jpg\",\n          );\n        }\n\n        // If still not found, try package root dist/assets (for local build)\n        if (!fs.existsSync(logoPath)) {\n          const currentDir = typeof process !== 'undefined' ? process.cwd() : \"/test\";\n          logoPath = path.join(\n            currentDir,\n            \"dist\",\n            \"assets\",\n            \"logo_1_small.jpg\",\n          );\n        }\n\n        if (fs.existsSync(logoPath)) {\n          logoBuffer = fs.readFileSync(logoPath);\n          const ext = path.extname(logoPath);\n          logoFilename = `logo${ext}`;\n          console.log(\"✓ Added default logo to build folder\");\n        } else {\n          console.warn(\n            \"⚠ No logo found (custom or default), build folder will be created without icon\",\n          );\n          return undefined;\n        }\n      }\n\n      // Write logo to build folder\n      if (logoBuffer) {\n        fs.writeFileSync(path.join(buildDir, logoFilename), logoBuffer);\n        return logoFilename;\n      }\n\n      return undefined;\n    } catch (error) {\n      console.warn(\n        \"⚠ Failed to add logo to build folder:\",\n        error instanceof Error ? error.message : String(error),\n      );\n      return undefined;\n    }\n  }\n\n  /**\n   * Builds a complete DXT package using TSDown CLI for autonomous execution\n   */\n  private async buildDxtWithTsdown(\n    entryPointFile: string,\n    outputDir: string = \"./dxt\",\n    withNodeModules: boolean = false,\n  ): Promise<void> {\n    try {\n      console.log(chalk.cyan(\"🔧 Building DXT package with TSDown...\"));\n\n      // Find project root and calculate relative entry path\n      const projectRoot = this.findProjectRoot(entryPointFile);\n      const absoluteEntryPath = path.resolve(entryPointFile);\n      const relativeEntryPath = path.relative(projectRoot, absoluteEntryPath);\n\n      console.log(chalk.gray(`Entry point: ${entryPointFile}`));\n      console.log(chalk.gray(`Project root: ${projectRoot}`));\n      console.log(chalk.gray(`Relative entry path: ${relativeEntryPath}`));\n\n      // Copy .dxtignore template\n      const dxtIgnorePath = this.getDxtIgnoreTemplatePath();\n      if (fs.existsSync(dxtIgnorePath)) {\n        fs.copyFileSync(dxtIgnorePath, path.join(projectRoot, \".dxtignore\"));\n      }\n\n      // Handle logo copying/downloading to working directory\n      const serverInfo = this.extractMcpServerInfo();\n      const logoFilename = await this.addLogoToFolder(\n        projectRoot,\n        serverInfo,\n        entryPointFile,\n      );\n      console.log(\n        logoFilename\n          ? chalk.gray(`✓ Logo prepared: ${logoFilename}`)\n          : chalk.gray(\"⚠ No logo available\"),\n      );\n\n      // Run TSDown build from the project root directory\n      const originalCwd = typeof process !== 'undefined' ? process.cwd() : \"/test\";\n      try {\n        // process.chdir(projectRoot);\n\n        // Dynamic import TSDown to handle optional dependency\n        const { build } = await import(\"tsdown\");\n\n        console.log(chalk.gray(`Building with TSDown: ${relativeEntryPath}`));\n        console.log(\n          chalk.green(\n            `${withNodeModules ? \"with node_modules\" : \"without node_modules\"}`,\n          ),\n        );\n\n        // Extract MCP config for use in copy function\n        const mcpConfig = (\n          this.argParserInstance as any\n        ).getMcpServerConfig?.();\n\n        // Preserve directory structure by including the entry directory in outDir\n        const entryDir = path.dirname(relativeEntryPath);\n        const preservedOutDir = entryDir !== \".\" && entryDir !== \"\"\n          ? path.resolve(originalCwd, outputDir, entryDir)\n          : path.resolve(originalCwd, outputDir);\n\n        const buildConfig: Options = {\n          entry: [relativeEntryPath],\n          outDir: preservedOutDir,\n          format: [\"es\"],\n          target: \"node22\",\n          define: {\n            // Define any compile-time constants\n            NODE_ENV: \"production\",\n          },\n          dts: true,\n          minify: false,\n          sourcemap: false,\n          // Remove all output folders and artefacts\n          clean: [outputDir, \"./.dxtignore\", `${outputDir}.dxt`],\n          silent: process.env[\"NO_SILENCE\"] !== \"1\",\n          unbundle: true,\n          external: (id, importer) => {\n            try {\n              const external = this.shouldModuleBeExternal(\n                id,\n                importer,\n                withNodeModules,\n              );\n\n              if (Boolean(process.env[\"DEBUG\"]))\n                console.log(\n                  `[${chalk.blue(\"External\")}] ${chalk.yellow(external ? \"true\" : \"false\")} for module: (${chalk.green(id)}), path: '${chalk.grey(importer ?? \"\")}'`,\n                );\n\n              return Boolean(external);\n            } catch (error) {\n              console.warn(`Warning: Error in external function for ${id}:`, error);\n              return true; // Default to external on error\n            }\n          },\n          noExternal: (id, importer) => {\n            try {\n              const external = this.shouldModuleBeExternal(\n                id,\n                importer,\n                withNodeModules,\n              );\n\n              if (Boolean(process.env[\"DEBUG\"]))\n                console.log(\n                  `[${chalk.yellow(\"noExternal\")}] ${chalk.yellow(external === false ? \"true\" : \"false\")} for module: (${chalk.green(id)}), path: '${chalk.grey(importer ?? \"\")}'`,\n                );\n\n              return Boolean(external === false);\n            } catch (error) {\n              console.warn(`Warning: Error in noExternal function for ${id}:`, error);\n              return false; // Default to not noExternal on error\n            }\n          },\n          copy: async (\n            options,\n          ): Promise<Array<string | { from: string; to: string }>> => {\n            try {\n              const outputPaths: Array<string | { from: string; to: string }> = [\n                \"package.json\",\n              ];\n\n            // Only include node_modules if --s-with-node-modules flag is set\n            if (withNodeModules) {\n              console.log(\n                chalk.gray(\n                  \"📦 Including node_modules in bundle (may take longer)...\",\n                ),\n              );\n              outputPaths.push(\"node_modules\");\n            }\n\n            // Calculate the DXT package root (parent of outDir when preserving structure)\n            const dxtPackageRoot = entryDir !== \".\" && entryDir !== \"\"\n              ? path.dirname(options.outDir)\n              : options.outDir;\n\n            // Add logo if it was successfully prepared\n            if (logoFilename) {\n              const currentDir = typeof process !== 'undefined' ? process.cwd() : \"/test\";\n              const logoPath = path.join(currentDir, logoFilename);\n              if (fs.existsSync(logoPath)) {\n                console.log(chalk.gray(`Adding logo from: ${logoPath}`));\n                outputPaths.push({\n                  from: logoPath,\n                  to: path.join(dxtPackageRoot, logoFilename),\n                });\n              }\n            }\n\n            // Add user-specified include files from DXT configuration\n            if (mcpConfig?.dxt?.include) {\n              console.log(\n                chalk.gray(\n                  \"📁 Including additional files from DXT configuration...\",\n                ),\n              );\n\n              for (const includeItem of mcpConfig.dxt.include) {\n                if (typeof includeItem === \"string\") {\n                  // Simple string path - copy to same relative location in DXT package root\n                  // First substitute any DXT variables in the path\n                  const resolvedIncludePath = DxtPathResolver.substituteVariables(\n                    includeItem,\n                    DxtPathResolver.detectContext(),\n                    { allowUndefined: true } // Allow undefined variables for flexibility\n                  );\n                  const sourcePath = path.resolve(projectRoot, resolvedIncludePath);\n                  if (fs.existsSync(sourcePath)) {\n                    console.log(chalk.gray(`  • ${resolvedIncludePath}`));\n                    outputPaths.push({\n                      from: sourcePath,\n                      to: path.join(dxtPackageRoot, resolvedIncludePath),\n                    });\n                  } else {\n                    console.warn(\n                      chalk.yellow(\n                        `  ⚠ File not found: ${resolvedIncludePath} (resolved to ${sourcePath})`,\n                      ),\n                    );\n                  }\n                } else {\n                  // Object with from/to mapping - copy to specified location in DXT package root\n                  // Substitute DXT variables in both from and to paths\n                  const resolvedFromPath = DxtPathResolver.substituteVariables(\n                    includeItem.from,\n                    DxtPathResolver.detectContext(),\n                    { allowUndefined: true }\n                  );\n                  const resolvedToPath = DxtPathResolver.substituteVariables(\n                    includeItem.to,\n                    DxtPathResolver.detectContext(),\n                    { allowUndefined: true }\n                  );\n                  const sourcePath = path.resolve(projectRoot, resolvedFromPath);\n                  if (fs.existsSync(sourcePath)) {\n                    console.log(\n                      chalk.gray(`  • ${resolvedFromPath} → ${resolvedToPath}`),\n                    );\n                    outputPaths.push({\n                      from: sourcePath,\n                      to: path.join(dxtPackageRoot, resolvedToPath),\n                    });\n                  } else {\n                    console.warn(\n                      chalk.yellow(\n                        `  ⚠ File not found: ${resolvedFromPath} (resolved to ${sourcePath})`,\n                      ),\n                    );\n                  }\n                }\n              }\n            }\n\n              return outputPaths;\n            } catch (error) {\n              console.warn(`Warning: Error in copy function:`, error);\n              return [\"package.json\"]; // Return minimal copy list on error\n            }\n          },\n          platform: \"node\" as const,\n          plugins: [],\n        };\n\n        // Debug output and config file generation\n        if (process.env[\"DEBUG\"] === \"1\") {\n          console.log(chalk.cyan(\"🐛 DEBUG: TSDown build configuration:\"));\n          console.log(JSON.stringify(buildConfig, null, 2));\n\n          // Create dxt directory if it doesn't exist\n          if (!fs.existsSync(\"dxt\")) {\n            fs.mkdirSync(\"dxt\", { recursive: true });\n          }\n\n          // Write config to file for debugging\n          const configContent = `// TSDown configuration used for DXT build\n// Generated on ${new Date().toISOString()}\nimport { build } from 'tsdown';\n\nexport default ${JSON.stringify(buildConfig, null, 2)};\n\n// To run manually:\n// npx tsdown -c tsdown.config.dxt.ts\n`;\n          fs.writeFileSync(\n            path.join(\"dxt\", \"tsdown.config.dxt.ts\"),\n            configContent,\n          );\n          console.log(\n            chalk.gray(\"📝 Debug config written to dxt/tsdown.config.dxt.ts\"),\n          );\n        }\n\n        try {\n          await build(buildConfig as any);\n          console.log(chalk.green(\"✅ TSDown bundling completed\"));\n        } catch (buildError) {\n          console.error(chalk.red(\"❌ TSDown build failed with error:\"));\n          console.error(buildError);\n          if (buildError instanceof Error) {\n            console.error(chalk.red(\"Error message:\"), buildError.message);\n            console.error(chalk.red(\"Error stack:\"), buildError.stack);\n          }\n          throw new Error(`TSDown DXT build failed: ${buildError instanceof Error ? buildError.message : String(buildError)}`);\n        }\n\n        // Determine the actual output filename from TSDown\n        const detectedOutputFile = this.detectTsdownOutputFile(\n          outputDir,\n          relativeEntryPath.replace(/\\.ts$/, \".js\"),\n        );\n\n        // Copy manifest and logo to the output directory\n        await this.setupDxtPackageFiles(\n          entryPointFile,\n          outputDir,\n          detectedOutputFile ?? undefined,\n          logoFilename ?? \"logo.jpg\",\n        );\n\n        // Run dxt pack (temporarily disabled due to dynamic import issues)\n        console.log(chalk.cyan(\"📦 DXT package ready for packing\"));\n        console.log(\n          chalk.gray(\n            `To complete the process, run: npx @anthropic-ai/dxt pack ${outputDir}/`,\n          ),\n        );\n        // await this.packDxtPackage();\n      } finally {\n        process.chdir(originalCwd);\n      }\n    } catch (error) {\n      throw new Error(\n        `TSDown DXT build failed: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n\n\n  /**\n   * Checks if a module ID is a Node.js built-in\n   */\n  public isNodeBuiltin(id: string): boolean {\n    const nodeBuiltins = [\n      \"stream\",\n      \"fs\",\n      \"path\",\n      \"url\",\n      \"util\",\n      \"events\",\n      \"child_process\",\n      \"os\",\n      \"tty\",\n      \"process\",\n      \"crypto\",\n      \"http\",\n      \"https\",\n      \"net\",\n      \"zlib\",\n      \"fs/promises\",\n      \"timers\",\n      \"timers/promises\",\n      \"perf_hooks\",\n      \"async_hooks\",\n      \"inspector\",\n      \"v8\",\n      \"vm\",\n      \"assert\",\n      \"constants\",\n      \"module\",\n      \"repl\",\n      \"string_decoder\",\n      \"punycode\",\n      \"domain\",\n      \"querystring\",\n      \"readline\",\n      \"worker_threads\",\n      \"cluster\",\n      \"dgram\",\n      \"dns\",\n      \"buffer\",\n    ];\n\n    return nodeBuiltins.includes(id) || id.startsWith(\"node:\");\n  }\n\n  /**\n   * Determines if a module should be treated as external based on bundling configuration.\n   * This logic is shared between external and noExternal configurations.\n   *\n   * @param id - The module identifier (e.g., 'lodash', '@types/node', './utils')\n   * @param importer - The file path that is importing this module (undefined for entry points)\n   * @param withNodeModules - Whether to include node_modules in the bundle\n   * @returns true if the module should be external (not bundled), false if it should be bundled\n   *\n   * Logic flow:\n   * 1. Node built-ins (fs, path, etc.) are always external\n   * 2. If no importer (entry point), always bundle\n   * 3. If withNodeModules is false, bundle everything except Node built-ins\n   * 4. If withNodeModules is true:\n   *    - If importer is from node_modules, make external\n   *    - If module resolves to a project file (via TS paths or regular paths), bundle it\n   *    - Otherwise, make external (likely npm package)\n   *\n   * @example\n   * // Node built-in - always external\n   * shouldModuleBeExternal('fs', './src/main.ts', true) // returns true\n   *\n   * // Project file via TS paths or regular paths - bundle it\n   * shouldModuleBeExternal('@/utils', './src/main.ts', true) // returns false\n   *\n   * // NPM package - external when withNodeModules=true\n   * shouldModuleBeExternal('lodash', './src/main.ts', true) // returns true\n   */\n  private shouldModuleBeExternal(\n    id: string,\n    importer: string | undefined,\n    withNodeModules: boolean,\n  ): boolean {\n    if (this.isNodeBuiltin(id)) {\n      // Node built-ins are always external\n      return true;\n    }\n\n    if (importer) {\n      if (withNodeModules) {\n        if (importer.includes(\"node_modules\")) {\n          return true;\n        } else {\n          const resolvedPath = this.resolveModulePath(id, importer);\n          // If the path was resolved (via TS paths or regular file resolution)\n          // We consider it to be a project file, so we bundle it\n          if (resolvedPath) {\n            return false;\n          } else {\n            return true;\n          }\n        }\n      } else {\n        // We bundle everything\n        return false;\n      }\n    } else {\n      // If no importer, it's the entrypoint\n      return false;\n    }\n  }\n\n  /**\n   * Checks if a package ID exists in the local node_modules folder.\n   * Only checks the folder or parent folder that contains the nearest package.json file.\n   * Returns false if no package.json file is found after 3 parent directory traversals.\n   *\n   * Alternative approach using require.resolve():\n   * ```ts\n   * public isNodeModulesPackageWithResolve(packageId: string): boolean {\n   *   try {\n   *     require.resolve(packageId);\n   *     return true;\n   *   } catch {\n   *     return false;\n   *   }\n   * }\n   * ```\n   *\n   * Filesystem approach is preferred for bundler context because:\n   * - Faster (no module resolution overhead)\n   * - No side effects during build\n   * - Predictable behavior in build vs runtime contexts\n   */\n  public isNodeModulesPackage(packageId: string): boolean {\n    try {\n      const currentDir = typeof process !== 'undefined' ? process.cwd() : \"/test\";\n      let searchDir = currentDir;\n      let attempts = 0;\n      const maxAttempts = 3;\n\n      while (attempts < maxAttempts) {\n        const packageJsonPath = path.join(searchDir, \"package.json\");\n        if (fs.existsSync(packageJsonPath)) {\n          const nodeModulesPath = path.join(searchDir, \"node_modules\");\n          if (!fs.existsSync(nodeModulesPath)) {\n            return false;\n          }\n\n          const packagePath = path.join(nodeModulesPath, packageId);\n          if (fs.existsSync(packagePath)) {\n            const packagePackageJsonPath = path.join(\n              packagePath,\n              \"package.json\",\n            );\n            return fs.existsSync(packagePackageJsonPath);\n          }\n\n          return false;\n        }\n\n        const parentDir = path.dirname(searchDir);\n        if (parentDir === searchDir) {\n          break;\n        }\n        searchDir = parentDir;\n        attempts++;\n      }\n\n      return false;\n    } catch (error) {\n      return false;\n    }\n  }\n\n  /**\n   * Get the path to the .dxtignore template file\n   */\n  private getDxtIgnoreTemplatePath(): string {\n    // Try multiple locations for the .dxtignore template\n    const possiblePaths = [\n      // 1. From the built library assets (when installed via npm)\n      path.join(\n        path.dirname(new URL(import.meta.url).pathname),\n        \"..\",\n        \"assets\",\n        \".dxtignore.template\",\n      ),\n\n      // 2. From node_modules/@alcyone-labs/arg-parser/dist/assets (when installed via npm)\n      path.join(\n        typeof process !== 'undefined' ? process.cwd() : \"/test\",\n        \"node_modules\",\n        \"@alcyone-labs\",\n        \"arg-parser\",\n        \"dist\",\n        \"assets\",\n        \".dxtignore.template\",\n      ),\n\n      // 3. From the root directory (development/local build)\n      path.join(typeof process !== 'undefined' ? process.cwd() : \"/test\", \".dxtignore.template\"),\n\n      // 4. From the library root (when using local file dependency)\n      path.join(typeof process !== 'undefined' ? process.cwd() : \"/test\", \"..\", \"..\", \"..\", \".dxtignore.template\"),\n    ];\n\n    for (const ignorePath of possiblePaths) {\n      if (fs.existsSync(ignorePath)) {\n        console.log(chalk.gray(`Found .dxtignore template at: ${ignorePath}`));\n        return ignorePath;\n      }\n    }\n\n    // Return empty string if not found - we'll skip copying the template\n    console.log(chalk.yellow(\"⚠ .dxtignore template not found, skipping\"));\n    return \"\";\n  }\n\n  /**\n   * Sets up DXT package files (manifest.json) in the output directory\n   */\n  private async setupDxtPackageFiles(\n    entryPointFile: string,\n    outputDir: string = \"./dxt\",\n    actualOutputFilename?: string,\n    logoFilename: string = \"logo.jpg\",\n  ): Promise<void> {\n    const currentDir = typeof process !== 'undefined' ? process.cwd() : \"/test\";\n    const dxtDir = path.resolve(currentDir, outputDir);\n    if (!fs.existsSync(dxtDir)) {\n      throw new Error(`TSDown output directory (${outputDir}) not found`);\n    }\n\n    // Read package.json for project information\n    const packageJsonPath = path.join(currentDir, \"package.json\");\n    let packageInfo: any = {};\n    if (fs.existsSync(packageJsonPath)) {\n      try {\n        packageInfo = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\"));\n      } catch (error) {\n        console.warn(chalk.yellow(\"Warning: Could not read package.json\"));\n      }\n    }\n\n    // Generate tools using the unified approach (DXT-compliant: only name and description)\n    let tools: Array<{ name: string; description?: string }> = [];\n\n    try {\n      // Use the unified tool generation that includes both CLI and manual tools\n      const mcpTools = this.generateMcpToolsForDxt();\n      tools = mcpTools.map((tool: any) => ({\n        name: tool.name,\n        description: tool.description,\n      }));\n    } catch (error) {\n      console.warn(\n        chalk.yellow(\n          `Warning: Could not generate unified tool list: ${error instanceof Error ? error.message : String(error)}`,\n        ),\n      );\n\n      // Fallback: Generate tools from main parser flags\n      const mainFlags = this.argParserInstance.flags;\n      const properties: Record<string, any> = {};\n      const required: string[] = [];\n\n      for (const flag of mainFlags) {\n        // Skip help flag and system flags\n        if (flag.name === \"help\" || flag.name.startsWith(\"s-\")) continue;\n\n        properties[flag.name] = {\n          type: getJsonSchemaTypeFromFlag(flag.type as any),\n          description: flag.description || `${flag.name} parameter`,\n        };\n\n        if (flag.enum) {\n          properties[flag.name].enum = flag.enum;\n        }\n\n        if (flag.defaultValue !== undefined && typeof flag.defaultValue !== 'function') {\n          properties[flag.name].default = flag.defaultValue;\n        }\n\n        if (flag.mandatory) {\n          required.push(flag.name);\n        }\n      }\n\n      // Create fallback tool from the parser's configuration (DXT-compliant)\n      const commandName = this.argParserInstance.getAppCommandName();\n      tools = [\n        {\n          name: commandName || packageInfo.name || \"cli-tool\",\n          description:\n            packageInfo.description ||\n            this.argParserInstance.getDescription() ||\n            \"CLI tool\",\n        },\n      ];\n    }\n\n    // Extract environment variables and user config from the ArgParser instance\n    const { envVars, userConfig } = this.generateEnvAndUserConfig();\n\n    // Get server info from withMcp() configuration or fallback to package.json\n    const serverInfo = this.extractMcpServerInfo();\n\n    // Create DXT manifest using server info and package.json data\n    let entryFileName: string;\n    if (actualOutputFilename) {\n      entryFileName = actualOutputFilename;\n    } else {\n      // Find project root and calculate relative path\n      const projectRoot = this.findProjectRoot(entryPointFile);\n      const absoluteEntryPath = path.resolve(entryPointFile);\n      const relativeEntryPath = path.relative(projectRoot, absoluteEntryPath);\n      entryFileName = relativeEntryPath.replace(/\\.ts$/, \".js\");\n    }\n\n    // Use server info if available, otherwise fallback to package.json (DXT-compliant)\n    const manifest = {\n      dxt_version: \"0.1\",\n      name: serverInfo.name || packageInfo.name || \"mcp-server\",\n      version: serverInfo.version || packageInfo.version || \"1.0.0\",\n      description:\n        serverInfo.description ||\n        packageInfo.description ||\n        \"MCP server generated by @alcyone-labs/arg-parser\",\n      author: serverInfo.author || {\n        name:\n          packageInfo.author?.name ||\n          packageInfo.author ||\n          \"@alcyone-labs/arg-parser\",\n        ...(packageInfo.author?.email && { email: packageInfo.author.email }),\n        url:\n          packageInfo.author?.url ||\n          packageInfo.homepage ||\n          packageInfo.repository?.url ||\n          \"https://github.com/alcyone-labs/arg-parser\",\n      },\n      server: {\n        type: \"node\",\n        entry_point: entryFileName,\n        mcp_config: {\n          command: \"node\",\n          args: [\n            `\\${__dirname}/${entryFileName}`,\n            \"--s-mcp-serve\",\n            // Overwrite the CLI config to only use stdio to avoid conflicts\n            \"--s-mcp-transport\",\n            \"stdio\",\n          ],\n          env: envVars,\n        },\n      },\n      tools: tools,\n      icon: logoFilename,\n      ...(Object.keys(userConfig).length > 0 && { user_config: userConfig }),\n      repository: packageInfo.repository?.url\n        ? {\n            type: \"git\",\n            url: packageInfo.repository?.url,\n          }\n        : undefined,\n      license: packageInfo.license || \"MIT\",\n    };\n\n    fs.writeFileSync(\n      path.join(dxtDir, \"manifest.json\"),\n      JSON.stringify(manifest, null, 2),\n    );\n\n    console.log(chalk.gray(\"✅ DXT package files set up\"));\n  }\n\n  /**\n   * Detects the actual output filename generated by TSDown\n   */\n  private detectTsdownOutputFile(\n    outputDir: string,\n    expectedBaseName: string,\n  ): string | null {\n    try {\n      const currentDir = typeof process !== 'undefined' ? process.cwd() : \"/test\";\n      const dxtDir = path.resolve(currentDir, outputDir);\n      if (!fs.existsSync(dxtDir)) {\n        console.warn(\n          chalk.yellow(`⚠ Output directory (${outputDir}) not found`),\n        );\n        return null;\n      }\n\n      // List all .js and .mjs files in the output directory (including subdirectories)\n      const files: string[] = [];\n\n      function findJsFiles(dir: string, relativePath: string = \"\"): void {\n        const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n        for (const entry of entries) {\n          const fullPath = path.join(dir, entry.name);\n          const relativeFilePath = path.join(relativePath, entry.name);\n\n          if (entry.isDirectory()) {\n            // Skip node_modules and other non-source directories\n            if (entry.name === \"node_modules\" || entry.name.startsWith(\".\")) {\n              continue;\n            }\n            // Recursively search subdirectories\n            findJsFiles(fullPath, relativeFilePath);\n          } else if (\n            (entry.name.endsWith(\".js\") || entry.name.endsWith(\".mjs\")) &&\n            !entry.name.includes(\"chunk-\") &&\n            !entry.name.includes(\"dist-\") &&\n            !entry.name.startsWith(\".\")\n          ) {\n            files.push(relativeFilePath);\n          }\n        }\n      }\n\n      findJsFiles(dxtDir);\n\n      // First, try to find exact match based on the expected filename\n      // expectedBaseName might be \"src/cli.js\" so we need to handle the full path\n      const expectedJsFile = expectedBaseName.endsWith(\".js\")\n        ? expectedBaseName\n        : expectedBaseName.replace(/\\.ts$/, \".js\");\n      const expectedMjsFile = expectedBaseName.endsWith(\".mjs\")\n        ? expectedBaseName\n        : expectedBaseName.replace(/\\.ts$/, \".mjs\");\n\n      // Look for exact matches first (including directory structure)\n      if (files.includes(expectedJsFile)) {\n        console.log(chalk.gray(`✓ Detected TSDown output: ${expectedJsFile}`));\n        return expectedJsFile;\n      }\n\n      if (files.includes(expectedMjsFile)) {\n        console.log(chalk.gray(`✓ Detected TSDown output: ${expectedMjsFile}`));\n        return expectedMjsFile;\n      }\n\n      // Fallback: try to match just the basename for backward compatibility\n      const baseNameWithoutExt = path.parse(expectedBaseName).name;\n      for (const ext of [\".js\", \".mjs\"]) {\n        const exactMatch = `${baseNameWithoutExt}${ext}`;\n        if (files.includes(exactMatch)) {\n          console.log(chalk.gray(`✓ Detected TSDown output: ${exactMatch}`));\n          return exactMatch;\n        }\n      }\n\n      // If no exact match, look for the largest non-chunk file (likely the main entry)\n      const mainFiles = files.filter(\n        (file) =>\n          !file.includes(\"chunk\") &&\n          !file.includes(\"dist\") &&\n          file !== \"logo.jpg\" &&\n          file !== \"manifest.json\",\n      );\n\n      if (mainFiles.length === 1) {\n        console.log(chalk.gray(`✓ Detected TSDown output: ${mainFiles[0]}`));\n        return mainFiles[0];\n      }\n\n      // If multiple candidates, pick the one with the most similar name or largest size\n      if (mainFiles.length > 1) {\n        let bestMatch = mainFiles[0];\n        let bestScore = 0;\n\n        for (const file of mainFiles) {\n          const filePath = path.join(dxtDir, file);\n          const stats = fs.statSync(filePath);\n\n          // Score based on name similarity and file size\n          const nameScore = file.includes(baseNameWithoutExt) ? 100 : 0;\n          const sizeScore = Math.min(stats.size / 1000, 50); // Cap at 50KB for scoring\n          const totalScore = nameScore + sizeScore;\n\n          if (totalScore > bestScore) {\n            bestScore = totalScore;\n            bestMatch = file;\n          }\n        }\n\n        console.log(\n          chalk.gray(\n            `✓ Detected TSDown output: ${bestMatch} (best match from ${mainFiles.length} candidates)`,\n          ),\n        );\n        return bestMatch;\n      }\n\n      console.warn(\n        chalk.yellow(`⚠ Could not detect TSDown output file in ${outputDir}`),\n      );\n      return null;\n    } catch (error) {\n      console.warn(\n        chalk.yellow(\n          `⚠ Error detecting TSDown output: ${error instanceof Error ? error.message : String(error)}`,\n        ),\n      );\n      return null;\n    }\n  }\n\n  private findProjectRoot(entryPointFile: string): string {\n    let currentDir = path.dirname(path.resolve(entryPointFile));\n    let attempts = 0;\n    const maxAttempts = 5;\n\n    while (attempts < maxAttempts) {\n      const packageJsonPath = path.join(currentDir, \"package.json\");\n      if (fs.existsSync(packageJsonPath)) {\n        return currentDir;\n      }\n\n      const parentDir = path.dirname(currentDir);\n      if (parentDir === currentDir) {\n        break;\n      }\n      currentDir = parentDir;\n      attempts++;\n    }\n\n    throw new Error(\n      `Could not find package.json within ${maxAttempts} directories up from ${entryPointFile}. ` +\n        `Please ensure your entry point is within a project that has a package.json file.`,\n    );\n  }\n\n  /**\n   * Validate dxtOptions for common mistakes and security issues\n   * @param flag The flag with dxtOptions to validate\n   * @param envVar The environment variable name for context\n   */\n  private validateDxtOptions(flag: any, envVar: string): void {\n    const dxtOptions = flag.dxtOptions;\n    if (!dxtOptions) return;\n\n    // Critical validations (throw errors)\n    if (dxtOptions.min !== undefined && dxtOptions.max !== undefined) {\n      if (dxtOptions.min > dxtOptions.max) {\n        throw new Error(\n          `Invalid dxtOptions for ${envVar}: min (${dxtOptions.min}) cannot be greater than max (${dxtOptions.max})`\n        );\n      }\n    }\n\n    if (dxtOptions.type !== undefined) {\n      const validTypes = [\"string\", \"directory\", \"file\", \"boolean\", \"number\"];\n      if (!validTypes.includes(dxtOptions.type)) {\n        throw new Error(\n          `Invalid dxtOptions.type for ${envVar}: \"${dxtOptions.type}\". Must be one of: ${validTypes.join(\", \")}`\n        );\n      }\n    }\n\n    // Type consistency check for default values\n    if (dxtOptions.default !== undefined && dxtOptions.type !== undefined) {\n      const defaultType = typeof dxtOptions.default;\n      if (dxtOptions.type === \"number\" && defaultType !== \"number\") {\n        throw new Error(\n          `Invalid dxtOptions.default for ${envVar}: expected number, got ${defaultType}`\n        );\n      }\n      if (dxtOptions.type === \"boolean\" && defaultType !== \"boolean\") {\n        throw new Error(\n          `Invalid dxtOptions.default for ${envVar}: expected boolean, got ${defaultType}`\n        );\n      }\n    }\n\n    // Security warnings (log but continue)\n    const sensitiveKeywords = [\"key\", \"token\", \"password\", \"secret\", \"auth\"];\n    const envLower = envVar.toLowerCase();\n    const hasSensitiveKeyword = sensitiveKeywords.some(keyword => envLower.includes(keyword));\n\n    if (hasSensitiveKeyword && dxtOptions.sensitive === false) {\n      console.warn(\n        `⚠️  Security Warning: ${envVar} contains sensitive keyword but dxtOptions.sensitive is false`\n      );\n    }\n\n    if (flag.mandatory === true && dxtOptions.sensitive !== false) {\n      console.warn(\n        `⚠️  Security Warning: ${envVar} is required and sensitive - consider providing a secure default or making it optional`\n      );\n    }\n  }\n\n  /**\n   * Generate environment variables and user configuration from ArgParser flags\n   * @returns Object containing envVars and userConfig\n   */\n  public generateEnvAndUserConfig(): {\n    envVars: Record<string, string>;\n    userConfig: Record<string, any>;\n  } {\n    const envVars: Record<string, string> = {};\n    const userConfig: Record<string, any> = {};\n\n    // Helper function to determine if a flag should be required in user_config\n    const shouldBeRequired = (flag: any): boolean => {\n      // If the flag has mandatory property, respect it\n      if (typeof flag.mandatory === \"boolean\") {\n        return flag.mandatory;\n      }\n      // If the flag has a mandatory function, we can't evaluate it here, so default to false\n      if (typeof flag.mandatory === \"function\") {\n        return false;\n      }\n      // Default to false for top-level flags (non-sensitive, non-mandatory by default)\n      return false;\n    };\n\n    // Helper function to determine if a flag should be sensitive\n    const shouldBeSensitive = (flag: any): boolean => {\n      // Check if dxtOptions explicitly sets sensitivity\n      if (flag.dxtOptions?.sensitive !== undefined) {\n        return flag.dxtOptions.sensitive;\n      }\n      // Default: If a flag is tied to an ENV, it should be sensitive\n      const envVar = (flag as any).env || (flag as any).envVar;\n      return !!envVar;\n    };\n\n    // Helper function to determine DXT type from flag\n    const getDxtType = (flag: any): string => {\n      // Check if dxtOptions explicitly sets type\n      if (flag.dxtOptions?.type) {\n        return flag.dxtOptions.type;\n      }\n      // Try to infer from IFlag.type\n      if (typeof flag.type === \"string\") {\n        const lowerType = flag.type.toLowerCase();\n        if ([\"string\", \"boolean\", \"number\"].includes(lowerType)) {\n          return lowerType;\n        }\n      } else if (flag.type === String) {\n        return \"string\";\n      } else if (flag.type === Boolean) {\n        return \"boolean\";\n      } else if (flag.type === Number) {\n        return \"number\";\n      }\n      // Default to string\n      return \"string\";\n    };\n\n    // Helper function to get title for user_config\n    const getDxtTitle = (flag: any, envVar: string): string => {\n      // Check if dxtOptions explicitly sets title\n      if (flag.dxtOptions?.title) {\n        return flag.dxtOptions.title;\n      }\n      // Default: Convert env var to title case (first letter of each word capitalized)\n      return envVar\n        .replace(/_/g, \" \")\n        .toLowerCase()\n        .replace(/\\b\\w/g, (l: string) => l.toUpperCase());\n    };\n\n    // Helper function to get description with default value\n    const getDxtDescription = (flag: any, envVar: string): string => {\n      let baseDescription = flag.description || `${envVar} environment variable`;\n\n      // Add default value to description if available\n      const defaultValue = flag.dxtOptions?.default ?? flag.dxtOptions?.localDefault ?? flag.defaultValue;\n      if (defaultValue !== undefined && typeof defaultValue !== 'function') {\n        baseDescription += ` (default: ${defaultValue})`;\n      }\n\n      return baseDescription;\n    };\n\n    // Get all flags from the main ArgParser to find environment variables\n    const mainFlags = this.argParserInstance.flags;\n\n    for (const flag of mainFlags) {\n      const envVar = (flag as any).env || (flag as any).envVar;\n      if (envVar) {\n        // Validate dxtOptions before processing\n        this.validateDxtOptions(flag, envVar);\n\n        // Add to server env - use the original env var name so process.env.CANNY_API_KEY works\n        envVars[envVar] = `\\${user_config.${envVar}}`;\n\n        // Add to user_config - use the original env var name to maintain compatibility\n        const userConfigEntry: any = {\n          type: getDxtType(flag),\n          title: getDxtTitle(flag, envVar),\n          description: getDxtDescription(flag, envVar),\n          required: shouldBeRequired(flag), // Respect the flag's mandatory setting\n          sensitive: shouldBeSensitive(flag), // Use dxtOptions or default logic\n        };\n\n        // Add DXT-specific properties if available\n        if (flag.dxtOptions?.multiple !== undefined) {\n          userConfigEntry.multiple = flag.dxtOptions.multiple;\n        }\n        if (flag.dxtOptions?.min !== undefined) {\n          userConfigEntry.min = flag.dxtOptions.min;\n        }\n        if (flag.dxtOptions?.max !== undefined) {\n          userConfigEntry.max = flag.dxtOptions.max;\n        }\n        if (flag.dxtOptions?.default !== undefined && typeof flag.dxtOptions.default !== 'function') {\n          userConfigEntry.default = flag.dxtOptions.default;\n        } else if (flag.dxtOptions?.localDefault !== undefined && typeof flag.dxtOptions.localDefault !== 'function') {\n          userConfigEntry.default = flag.dxtOptions.localDefault;\n        }\n\n        userConfig[envVar] = userConfigEntry;\n      }\n    }\n\n    // Also check unified tools for environment variables\n    if (typeof (this.argParserInstance as any).getTools === \"function\") {\n      const tools = (this.argParserInstance as any).getTools();\n      for (const [, toolConfig] of tools) {\n        const toolFlags = (toolConfig as any).flags || [];\n        for (const flag of toolFlags) {\n          const envVar = (flag as any).env || (flag as any).envVar;\n          if (envVar && !envVars[envVar]) {\n            // Only add if not already present\n            // Validate dxtOptions before processing\n            this.validateDxtOptions(flag, envVar);\n\n            // Add to server env - use the original env var name so process.env.CANNY_API_KEY works\n            envVars[envVar] = `\\${user_config.${envVar}}`;\n\n            // Add to user_config - use the original env var name to maintain compatibility\n            const userConfigEntry: any = {\n              type: getDxtType(flag),\n              title: getDxtTitle(flag, envVar),\n              description: getDxtDescription(flag, envVar),\n              required: shouldBeRequired(flag), // Respect the flag's mandatory setting\n              sensitive: shouldBeSensitive(flag), // Use dxtOptions or default logic\n            };\n\n            // Add DXT-specific properties if available\n            if (flag.dxtOptions?.multiple !== undefined) {\n              userConfigEntry.multiple = flag.dxtOptions.multiple;\n            }\n            if (flag.dxtOptions?.min !== undefined) {\n              userConfigEntry.min = flag.dxtOptions.min;\n            }\n            if (flag.dxtOptions?.max !== undefined) {\n              userConfigEntry.max = flag.dxtOptions.max;\n            }\n            if (flag.dxtOptions?.default !== undefined && typeof flag.dxtOptions.default !== 'function') {\n              userConfigEntry.default = flag.dxtOptions.default;\n            } else if (flag.dxtOptions?.localDefault !== undefined && typeof flag.dxtOptions.localDefault !== 'function') {\n              userConfigEntry.default = flag.dxtOptions.localDefault;\n            }\n\n            userConfig[envVar] = userConfigEntry;\n          }\n        }\n      }\n    }\n\n    return { envVars, userConfig };\n  }\n\n  private resolveModulePath(id: string, importer: string): string | null {\n    try {\n      if (Boolean(process.env[\"DEBUG\"])) {\n        console.log(\n          `  <${chalk.gray(\"module-resolve\")}> Resolving '${chalk.green(id)}' from '${chalk.gray(importer)}'`,\n        );\n      }\n\n      // Get tsconfig for the importing file\n      const tsconfig = getTsconfig(importer);\n      if (!tsconfig?.config.compilerOptions?.paths) {\n        if (Boolean(process.env[\"DEBUG\"])) {\n          console.log(\n            `  <${chalk.gray(\"ts-paths\")}> No tsconfig or paths found for '${importer}'`,\n          );\n        }\n        // Fall through to regular file resolution\n      } else {\n        if (Boolean(process.env[\"DEBUG\"])) {\n          const currentDir = typeof process !== 'undefined' ? process.cwd() : \"/test\";\n          console.log(\n            `  <${chalk.gray(\"ts-paths\")}> Found tsconfig at '${path.relative(currentDir, tsconfig.path)}' with paths:`,\n            Object.keys(tsconfig.config.compilerOptions.paths),\n          );\n        }\n\n        // Create paths matcher\n        const pathsMatcher = createPathsMatcher(tsconfig);\n        if (!pathsMatcher || typeof pathsMatcher !== 'function') {\n          if (Boolean(process.env[\"DEBUG\"])) {\n            console.log(\n              `  <${chalk.gray(\"ts-paths\")}> Failed to create paths matcher or matcher is not a function`,\n            );\n          }\n          // Fall through to regular file resolution\n        } else {\n          const possiblePaths = pathsMatcher(id);\n\n          if (Boolean(process.env[\"DEBUG\"])) {\n            console.log(\n              `  <${chalk.grey(\"ts-paths\")}> Possible paths for '${id}':`,\n              possiblePaths,\n            );\n          }\n\n          // Try to resolve each possible path\n          for (const possiblePath of possiblePaths) {\n            const resolvedPath = path.resolve(\n              path.dirname(tsconfig.path),\n              possiblePath,\n            );\n\n            if (Boolean(process.env[\"DEBUG\"])) {\n              console.log(\n                `  <${chalk.grey(\"ts-paths\")}> Trying resolved path: '${resolvedPath}'`,\n              );\n            }\n\n            // Try common extensions\n            const extensions = [\".ts\", \".js\", \".tsx\", \".jsx\", \".mjs\", \".cjs\"];\n\n            // Check if it's a file (with or without extension)\n            // 1. Try the resolved path as-is\n            if (\n              fs.existsSync(resolvedPath) &&\n              fs.statSync(resolvedPath).isFile()\n            ) {\n              if (Boolean(process.env[\"DEBUG\"])) {\n                console.log(\n                  `  <${chalk.grey(\"ts-paths\")}> ✓ Resolved '${id}' to '${resolvedPath}'`,\n                );\n              }\n              return resolvedPath;\n            }\n\n            // 2. If it has a .js extension, try replacing with TypeScript extensions\n            if (resolvedPath.endsWith(\".js\")) {\n              const basePath = resolvedPath.slice(0, -3); // Remove .js\n              for (const ext of [\".ts\", \".tsx\"]) {\n                const testPath = basePath + ext;\n                if (fs.existsSync(testPath) && fs.statSync(testPath).isFile()) {\n                  if (Boolean(process.env[\"DEBUG\"])) {\n                    console.log(\n                      `  <${chalk.grey(\"ts-paths\")}> ✓ Resolved '${id}' to '${testPath}' (replaced .js)`,\n                    );\n                  }\n                  return testPath;\n                }\n              }\n            }\n\n            // 3. Try adding extensions to the path (in case no extension)\n            for (const ext of extensions) {\n              const testPath = resolvedPath + ext;\n              if (fs.existsSync(testPath) && fs.statSync(testPath).isFile()) {\n                if (Boolean(process.env[\"DEBUG\"])) {\n                  console.log(\n                    `  <${chalk.grey(\"ts-paths\")}> ✓ Resolved '${id}' to '${testPath}' (added extension)`,\n                  );\n                }\n                return testPath;\n              }\n            }\n\n            // Check if it's a directory with index file\n            if (\n              fs.existsSync(resolvedPath) &&\n              fs.statSync(resolvedPath).isDirectory()\n            ) {\n              for (const ext of extensions) {\n                const indexPath = path.join(resolvedPath, `index${ext}`);\n                if (fs.existsSync(indexPath)) {\n                  if (Boolean(process.env[\"DEBUG\"])) {\n                    console.log(\n                      `  <${chalk.grey(\"ts-paths\")}> ✓ Resolved '${id}' to '${indexPath}' (index)`,\n                    );\n                  }\n                  return indexPath;\n                }\n              }\n            }\n          }\n        }\n      }\n\n      // TypeScript path resolution failed, try regular file resolution\n      if (Boolean(process.env[\"DEBUG\"])) {\n        console.log(\n          `  <${chalk.gray(\"file-resolve\")}> Trying regular file resolution for '${id}'`,\n        );\n      }\n\n      // Try to resolve as a regular file path relative to the importer\n      let testPath: string;\n      if (path.isAbsolute(id)) {\n        testPath = id;\n      } else {\n        testPath = path.resolve(path.dirname(importer), id);\n      }\n\n      const extensions = [\".ts\", \".js\", \".tsx\", \".jsx\", \".mjs\", \".cjs\"];\n\n      // Check if it's a file (with or without extension)\n      // 1. Try the path as-is\n      if (fs.existsSync(testPath) && fs.statSync(testPath).isFile()) {\n        if (Boolean(process.env[\"DEBUG\"])) {\n          console.log(\n            `  <${chalk.gray(\"file-resolve\")}> ✓ Resolved '${id}' to '${testPath}'`,\n          );\n        }\n        return testPath;\n      }\n\n      // 2. If it has a .js extension, try replacing with TypeScript extensions\n      if (testPath.endsWith(\".js\")) {\n        const basePath = testPath.slice(0, -3); // Remove .js\n        for (const ext of [\".ts\", \".tsx\"]) {\n          const tsPath = basePath + ext;\n          if (fs.existsSync(tsPath) && fs.statSync(tsPath).isFile()) {\n            if (Boolean(process.env[\"DEBUG\"])) {\n              console.log(\n                `  <${chalk.gray(\"file-resolve\")}> ✓ Resolved '${id}' to '${tsPath}' (replaced .js)`,\n              );\n            }\n            return tsPath;\n          }\n        }\n      }\n\n      // 3. Try adding extensions to the path (in case no extension)\n      for (const ext of extensions) {\n        const extPath = testPath + ext;\n        if (fs.existsSync(extPath) && fs.statSync(extPath).isFile()) {\n          if (Boolean(process.env[\"DEBUG\"])) {\n            console.log(\n              `  <${chalk.gray(\"file-resolve\")}> ✓ Resolved '${id}' to '${extPath}' (added extension)`,\n            );\n          }\n          return extPath;\n        }\n      }\n\n      // Check if it's a directory with index file\n      if (fs.existsSync(testPath) && fs.statSync(testPath).isDirectory()) {\n        for (const ext of extensions) {\n          const indexPath = path.join(testPath, `index${ext}`);\n          if (fs.existsSync(indexPath)) {\n            if (Boolean(process.env[\"DEBUG\"])) {\n              console.log(\n                `  <${chalk.gray(\"file-resolve\")}> ✓ Resolved '${id}' to '${indexPath}' (index)`,\n              );\n            }\n            return indexPath;\n          }\n        }\n      }\n\n      if (Boolean(process.env[\"DEBUG\"])) {\n        console.log(\n          `  <${chalk.gray(\"module-resolve\")}> ✗ Could not resolve '${id}'`,\n        );\n      }\n    } catch (error) {\n      console.warn(\n        chalk.yellow(\n          `Warning: Failed to resolve module path '${id}': ${error}`,\n        ),\n      );\n    }\n\n    return null;\n  }\n}\n","/**\n * MCP Change Notifications System\n *\n * This module provides functionality for managing MCP change notifications,\n * allowing clients to subscribe to changes in tools, resources, and prompts.\n */\n\n/**\n * Types of MCP entities that can change\n */\nexport type McpChangeType = \"tools\" | \"resources\" | \"prompts\";\n\n/**\n * Change notification event\n */\nexport interface McpChangeEvent {\n  type: McpChangeType;\n  timestamp: Date;\n  action: \"added\" | \"removed\" | \"updated\";\n  entityName?: string;\n}\n\n/**\n * Change listener function type\n */\nexport type McpChangeListener = (event: McpChangeEvent) => void;\n\n/**\n * Client subscription information\n */\nexport interface McpClientSubscription {\n  clientId: string;\n  subscriptions: Set<McpChangeType>;\n  connection: any; // MCP server connection object\n}\n\n/**\n * MCP Change Notifications Manager\n *\n * Manages client subscriptions and change notifications for MCP entities\n */\nexport class McpNotificationsManager {\n  private clients = new Map<string, McpClientSubscription>();\n  private globalListeners = new Set<McpChangeListener>();\n  private changeHistory: McpChangeEvent[] = [];\n  private maxHistorySize = 100;\n\n  /**\n   * Add a client connection\n   */\n  addClient(clientId: string, connection: any): void {\n    this.clients.set(clientId, {\n      clientId,\n      subscriptions: new Set(),\n      connection,\n    });\n  }\n\n  /**\n   * Remove a client connection\n   */\n  removeClient(clientId: string): void {\n    this.clients.delete(clientId);\n  }\n\n  /**\n   * Subscribe a client to changes of a specific type\n   */\n  subscribe(clientId: string, type: McpChangeType): void {\n    const client = this.clients.get(clientId);\n    if (client) {\n      client.subscriptions.add(type);\n    }\n  }\n\n  /**\n   * Unsubscribe a client from changes of a specific type\n   */\n  unsubscribe(clientId: string, type: McpChangeType): void {\n    const client = this.clients.get(clientId);\n    if (client) {\n      client.subscriptions.delete(type);\n    }\n  }\n\n  /**\n   * Subscribe a client to all change types\n   */\n  subscribeToAll(clientId: string): void {\n    const client = this.clients.get(clientId);\n    if (client) {\n      client.subscriptions.add(\"tools\");\n      client.subscriptions.add(\"resources\");\n      client.subscriptions.add(\"prompts\");\n    }\n  }\n\n  /**\n   * Unsubscribe a client from all change types\n   */\n  unsubscribeFromAll(clientId: string): void {\n    const client = this.clients.get(clientId);\n    if (client) {\n      client.subscriptions.clear();\n    }\n  }\n\n  /**\n   * Get client subscription status\n   */\n  getClientSubscriptions(clientId: string): Set<McpChangeType> | undefined {\n    return this.clients.get(clientId)?.subscriptions;\n  }\n\n  /**\n   * Check if a client is subscribed to a specific change type\n   */\n  isClientSubscribed(clientId: string, type: McpChangeType): boolean {\n    const client = this.clients.get(clientId);\n    return client ? client.subscriptions.has(type) : false;\n  }\n\n  /**\n   * Notify all subscribed clients of a change\n   */\n  notifyChange(\n    type: McpChangeType,\n    action: \"added\" | \"removed\" | \"updated\",\n    entityName?: string,\n  ): void {\n    const event: McpChangeEvent = {\n      type,\n      timestamp: new Date(),\n      action,\n      entityName,\n    };\n\n    // Add to history\n    this.addToHistory(event);\n\n    // Notify global listeners\n    for (const listener of this.globalListeners) {\n      try {\n        listener(event);\n      } catch (error) {\n        console.error(\"Error in global change listener:\", error);\n      }\n    }\n\n    // Notify subscribed clients\n    for (const client of this.clients.values()) {\n      if (client.subscriptions.has(type)) {\n        this.sendNotificationToClient(client, type);\n      }\n    }\n  }\n\n  /**\n   * Add a global change listener (not client-specific)\n   */\n  addGlobalListener(listener: McpChangeListener): void {\n    this.globalListeners.add(listener);\n  }\n\n  /**\n   * Remove a global change listener\n   */\n  removeGlobalListener(listener: McpChangeListener): void {\n    this.globalListeners.delete(listener);\n  }\n\n  /**\n   * Get change history\n   */\n  getChangeHistory(limit?: number): McpChangeEvent[] {\n    const history = [...this.changeHistory];\n    return limit ? history.slice(-limit) : history;\n  }\n\n  /**\n   * Clear change history\n   */\n  clearHistory(): void {\n    this.changeHistory = [];\n  }\n\n  /**\n   * Get connected client count\n   */\n  getClientCount(): number {\n    return this.clients.size;\n  }\n\n  /**\n   * Get subscription statistics\n   */\n  getSubscriptionStats(): Record<McpChangeType, number> {\n    const stats: Record<McpChangeType, number> = {\n      tools: 0,\n      resources: 0,\n      prompts: 0,\n    };\n\n    for (const client of this.clients.values()) {\n      for (const type of client.subscriptions) {\n        stats[type]++;\n      }\n    }\n\n    return stats;\n  }\n\n  /**\n   * Send notification to a specific client\n   */\n  private sendNotificationToClient(\n    client: McpClientSubscription,\n    type: McpChangeType,\n  ): void {\n    try {\n      // Send MCP notification using the connection\n      if (\n        client.connection &&\n        typeof client.connection.sendNotification === \"function\"\n      ) {\n        client.connection.sendNotification(\n          `notifications/${type}/list_changed`,\n          {},\n        );\n      }\n    } catch (error) {\n      console.error(\n        `Error sending notification to client ${client.clientId}:`,\n        error,\n      );\n      // Consider removing the client if connection is broken\n      this.removeClient(client.clientId);\n    }\n  }\n\n  /**\n   * Add event to change history\n   */\n  private addToHistory(event: McpChangeEvent): void {\n    this.changeHistory.push(event);\n\n    // Trim history if it exceeds max size\n    if (this.changeHistory.length > this.maxHistorySize) {\n      this.changeHistory = this.changeHistory.slice(-this.maxHistorySize);\n    }\n  }\n\n  /**\n   * Set maximum history size\n   */\n  setMaxHistorySize(size: number): void {\n    this.maxHistorySize = Math.max(0, size);\n\n    // Trim current history if needed\n    if (this.changeHistory.length > this.maxHistorySize) {\n      this.changeHistory = this.changeHistory.slice(-this.maxHistorySize);\n    }\n  }\n\n  /**\n   * Clear all subscriptions and clients\n   */\n  clear(): void {\n    this.clients.clear();\n    this.globalListeners.clear();\n    this.changeHistory = [];\n  }\n}\n\n/**\n * Utility functions for working with change notifications\n */\n\n/**\n * Create a debounced change notifier to batch rapid changes\n */\nexport function createDebouncedNotifier(\n  manager: McpNotificationsManager,\n  delay: number = 100,\n): (\n  type: McpChangeType,\n  action: \"added\" | \"removed\" | \"updated\",\n  entityName?: string,\n) => void {\n  const pending = new Map<\n    string,\n    {\n      type: McpChangeType;\n      action: \"added\" | \"removed\" | \"updated\";\n      entityName?: string;\n    }\n  >();\n  let timeoutId: NodeJS.Timeout | null = null;\n\n  return (\n    type: McpChangeType,\n    action: \"added\" | \"removed\" | \"updated\",\n    entityName?: string,\n  ) => {\n    const key = `${type}:${action}:${entityName || \"\"}`;\n    pending.set(key, { type, action, entityName });\n\n    if (timeoutId) {\n      clearTimeout(timeoutId);\n    }\n\n    timeoutId = setTimeout(() => {\n      for (const { type, action, entityName } of pending.values()) {\n        manager.notifyChange(type, action, entityName);\n      }\n      pending.clear();\n      timeoutId = null;\n    }, delay);\n  };\n}\n\n/**\n * Create a filtered change listener that only responds to specific types\n */\nexport function createFilteredListener(\n  types: McpChangeType[],\n  listener: McpChangeListener,\n): McpChangeListener {\n  return (event: McpChangeEvent) => {\n    if (types.includes(event.type)) {\n      listener(event);\n    }\n  };\n}\n\n/**\n * Create a logging change listener for debugging\n */\nexport function createLoggingListener(\n  prefix: string = \"[MCP]\",\n): McpChangeListener {\n  return (event: McpChangeEvent) => {\n    const entityInfo = event.entityName ? ` (${event.entityName})` : \"\";\n    console.log(\n      `${prefix} ${event.type} ${event.action}${entityInfo} at ${event.timestamp.toISOString()}`,\n    );\n  };\n}\n\n/**\n * Default global notifications manager instance\n */\nexport const globalNotificationsManager = new McpNotificationsManager();\n","/**\n * MCP Prompts Management\n *\n * This module provides functionality for managing MCP prompts - server-side prompt templates\n * that clients can discover and execute with custom parameters for dynamic text generation.\n */\n\nimport { z, ZodTypeAny } from \"zod\";\n\n/**\n * Prompt message content types\n */\nexport interface McpPromptTextContent {\n  type: \"text\";\n  text: string;\n}\n\nexport interface McpPromptImageContent {\n  type: \"image\";\n  data: string; // base64 encoded\n  mimeType: string;\n}\n\nexport type McpPromptContent = McpPromptTextContent | McpPromptImageContent;\n\n/**\n * Prompt message structure\n */\nexport interface McpPromptMessage {\n  role: \"user\" | \"assistant\" | \"system\";\n  content: McpPromptContent;\n}\n\n/**\n * Prompt response structure\n */\nexport interface McpPromptResponse {\n  description?: string;\n  messages: McpPromptMessage[];\n}\n\n/**\n * Prompt handler function type\n */\nexport type McpPromptHandler = (\n  args: any,\n) => McpPromptResponse | Promise<McpPromptResponse>;\n\n/**\n * Prompt configuration for registration\n */\nexport interface McpPromptConfig {\n  name: string;\n  title?: string;\n  description?: string;\n  argsSchema: ZodTypeAny;\n  handler: McpPromptHandler;\n}\n\n/**\n * Internal prompt storage structure\n */\nexport interface McpPromptEntry {\n  config: McpPromptConfig;\n  registeredAt: Date;\n}\n\n/**\n * MCP Prompts Manager\n *\n * Manages registration, storage, and execution of MCP prompts\n */\nexport class McpPromptsManager {\n  private prompts = new Map<string, McpPromptEntry>();\n  private changeListeners = new Set<() => void>();\n\n  /**\n   * Register a new prompt\n   */\n  addPrompt(config: McpPromptConfig): void {\n    // Validate configuration\n    this.validatePromptConfig(config);\n\n    // Store prompt\n    this.prompts.set(config.name, {\n      config,\n      registeredAt: new Date(),\n    });\n\n    // Notify listeners of change\n    this.notifyChange();\n  }\n\n  /**\n   * Remove a prompt by name\n   */\n  removePrompt(name: string): boolean {\n    const removed = this.prompts.delete(name);\n    if (removed) {\n      this.notifyChange();\n    }\n    return removed;\n  }\n\n  /**\n   * Get all registered prompts\n   */\n  getPrompts(): McpPromptConfig[] {\n    return Array.from(this.prompts.values()).map((entry) => entry.config);\n  }\n\n  /**\n   * Get a specific prompt by name\n   */\n  getPrompt(name: string): McpPromptConfig | undefined {\n    return this.prompts.get(name)?.config;\n  }\n\n  /**\n   * Check if a prompt exists\n   */\n  hasPrompt(name: string): boolean {\n    return this.prompts.has(name);\n  }\n\n  /**\n   * Execute a prompt with given arguments\n   */\n  async executePrompt(name: string, args: any): Promise<McpPromptResponse> {\n    const entry = this.prompts.get(name);\n    if (!entry) {\n      throw new Error(`Prompt '${name}' not found`);\n    }\n\n    // Validate arguments against schema\n    try {\n      const validatedArgs = entry.config.argsSchema.parse(args);\n      return await entry.config.handler(validatedArgs);\n    } catch (error) {\n      if (error instanceof z.ZodError) {\n        throw new Error(\n          `Invalid arguments for prompt '${name}': ${error.message}`,\n        );\n      }\n      throw error;\n    }\n  }\n\n  /**\n   * Add change listener\n   */\n  onPromptsChange(listener: () => void): void {\n    this.changeListeners.add(listener);\n  }\n\n  /**\n   * Remove change listener\n   */\n  offPromptsChange(listener: () => void): void {\n    this.changeListeners.delete(listener);\n  }\n\n  /**\n   * Clear all prompts\n   */\n  clear(): void {\n    const hadPrompts = this.prompts.size > 0;\n    this.prompts.clear();\n    if (hadPrompts) {\n      this.notifyChange();\n    }\n  }\n\n  /**\n   * Get prompt count\n   */\n  count(): number {\n    return this.prompts.size;\n  }\n\n  /**\n   * Validate prompt configuration\n   */\n  private validatePromptConfig(config: McpPromptConfig): void {\n    if (!config.name || typeof config.name !== \"string\") {\n      throw new Error(\"Prompt name is required and must be a string\");\n    }\n\n    if (!config.argsSchema) {\n      throw new Error(\"Prompt argsSchema is required\");\n    }\n\n    if (typeof config.handler !== \"function\") {\n      throw new Error(\"Prompt handler is required and must be a function\");\n    }\n\n    if (this.prompts.has(config.name)) {\n      throw new Error(`Prompt with name '${config.name}' already exists`);\n    }\n  }\n\n  /**\n   * Notify all listeners of changes\n   */\n  private notifyChange(): void {\n    for (const listener of this.changeListeners) {\n      try {\n        listener();\n      } catch (error) {\n        console.error(\"Error in prompt change listener:\", error);\n      }\n    }\n  }\n}\n\n/**\n * Helper function to create common prompt configurations\n */\n\n/**\n * Create a code review prompt\n */\nexport const createCodeReviewPrompt = (): McpPromptConfig => ({\n  name: \"code-review\",\n  title: \"Code Review Assistant\",\n  description: \"Generate prompts for code review with focus areas\",\n  argsSchema: z.object({\n    code: z.string().describe(\"The code to review\"),\n    language: z.string().optional().describe(\"Programming language\"),\n    focus: z\n      .enum([\"security\", \"performance\", \"style\", \"bugs\", \"general\"])\n      .optional()\n      .describe(\"Review focus area\"),\n  }),\n  handler: ({ code, language, focus }) => ({\n    description: `Code review prompt for ${language || \"code\"} focusing on ${focus || \"general best practices\"}`,\n    messages: [\n      {\n        role: \"user\",\n        content: {\n          type: \"text\",\n          text: `Please review this ${language || \"code\"} focusing on ${focus || \"general best practices\"}:\\n\\n\\`\\`\\`${language || \"\"}\\n${code}\\n\\`\\`\\``,\n        },\n      },\n    ],\n  }),\n});\n\n/**\n * Create a text summarization prompt\n */\nexport const createSummarizationPrompt = (): McpPromptConfig => ({\n  name: \"summarize\",\n  title: \"Text Summarization\",\n  description: \"Generate prompts for text summarization\",\n  argsSchema: z.object({\n    text: z.string().describe(\"The text to summarize\"),\n    length: z\n      .enum([\"brief\", \"medium\", \"detailed\"])\n      .optional()\n      .describe(\"Summary length\"),\n    style: z\n      .enum([\"bullet-points\", \"paragraph\", \"executive\"])\n      .optional()\n      .describe(\"Summary style\"),\n  }),\n  handler: ({ text, length, style }) => {\n    const lengthInstruction =\n      length === \"brief\"\n        ? \"in 1-2 sentences\"\n        : length === \"detailed\"\n          ? \"in detail with key points\"\n          : \"concisely\";\n\n    const styleInstruction =\n      style === \"bullet-points\"\n        ? \"as bullet points\"\n        : style === \"executive\"\n          ? \"as an executive summary\"\n          : \"in paragraph form\";\n\n    return {\n      description: `Summarization prompt for ${length || \"medium\"} ${style || \"paragraph\"} summary`,\n      messages: [\n        {\n          role: \"user\",\n          content: {\n            type: \"text\",\n            text: `Please summarize the following text ${lengthInstruction} ${styleInstruction}:\\n\\n${text}`,\n          },\n        },\n      ],\n    };\n  },\n});\n\n/**\n * Create a translation prompt\n */\nexport const createTranslationPrompt = (): McpPromptConfig => ({\n  name: \"translate\",\n  title: \"Text Translation\",\n  description: \"Generate prompts for text translation\",\n  argsSchema: z.object({\n    text: z.string().describe(\"The text to translate\"),\n    targetLanguage: z.string().describe(\"Target language for translation\"),\n    sourceLanguage: z\n      .string()\n      .optional()\n      .describe(\"Source language (auto-detect if not specified)\"),\n    tone: z\n      .enum([\"formal\", \"casual\", \"professional\"])\n      .optional()\n      .describe(\"Translation tone\"),\n  }),\n  handler: ({ text, targetLanguage, sourceLanguage, tone }) => {\n    const sourceInstruction = sourceLanguage\n      ? `from ${sourceLanguage}`\n      : \"(auto-detect source language)\";\n    const toneInstruction = tone ? ` in a ${tone} tone` : \"\";\n\n    return {\n      description: `Translation prompt ${sourceInstruction} to ${targetLanguage}${toneInstruction}`,\n      messages: [\n        {\n          role: \"user\",\n          content: {\n            type: \"text\",\n            text: `Please translate the following text ${sourceInstruction} to ${targetLanguage}${toneInstruction}:\\n\\n${text}`,\n          },\n        },\n      ],\n    };\n  },\n});\n\n/**\n * Create a documentation prompt\n */\nexport const createDocumentationPrompt = (): McpPromptConfig => ({\n  name: \"document-code\",\n  title: \"Code Documentation\",\n  description: \"Generate prompts for code documentation\",\n  argsSchema: z.object({\n    code: z.string().describe(\"The code to document\"),\n    language: z.string().optional().describe(\"Programming language\"),\n    style: z\n      .enum([\"jsdoc\", \"sphinx\", \"markdown\", \"inline\"])\n      .optional()\n      .describe(\"Documentation style\"),\n    includeExamples: z.boolean().optional().describe(\"Include usage examples\"),\n  }),\n  handler: ({ code, language, style, includeExamples }) => {\n    const styleInstruction = style ? ` using ${style} format` : \"\";\n    const examplesInstruction = includeExamples\n      ? \" Include usage examples.\"\n      : \"\";\n\n    return {\n      description: `Documentation prompt for ${language || \"code\"}${styleInstruction}`,\n      messages: [\n        {\n          role: \"user\",\n          content: {\n            type: \"text\",\n            text: `Please generate documentation for this ${language || \"code\"}${styleInstruction}.${examplesInstruction}\\n\\n\\`\\`\\`${language || \"\"}\\n${code}\\n\\`\\`\\``,\n          },\n        },\n      ],\n    };\n  },\n});\n","/**\n * MCP Resources Management\n *\n * This module provides functionality for managing MCP resources - server-side data sources\n * that clients can access using URI templates. Resources are similar to GET endpoints\n * in a REST API and should provide data without significant computation or side effects.\n */\n\n// Note: zod imports removed as they're not used in this file\n\n/**\n * Resource response content item\n */\nexport interface McpResourceContent {\n  uri: string;\n  text?: string;\n  blob?: Uint8Array;\n  mimeType?: string;\n}\n\n/**\n * Resource response structure\n */\nexport interface McpResourceResponse {\n  contents: McpResourceContent[];\n}\n\n/**\n * Resource handler function type\n */\nexport type McpResourceHandler = (\n  uri: URL,\n  params: Record<string, string>,\n) => Promise<McpResourceResponse>;\n\n/**\n * Resource configuration for registration\n */\nexport interface McpResourceConfig {\n  name: string;\n  uriTemplate: string;\n  title?: string;\n  description?: string;\n  mimeType?: string;\n  handler: McpResourceHandler;\n}\n\n/**\n * Internal resource storage structure\n */\nexport interface McpResourceEntry {\n  config: McpResourceConfig;\n  registeredAt: Date;\n}\n\n/**\n * Resource template parser for URI patterns like \"users://{userId}/profile\"\n */\nexport class ResourceTemplateParser {\n  private pattern: RegExp;\n  private paramNames: string[];\n\n  constructor(template: string) {\n    // Extract parameter names from template like \"users://{userId}/profile\"\n    const paramMatches = template.match(/\\{([^}]+)\\}/g) || [];\n    this.paramNames = paramMatches.map((match) => match.slice(1, -1));\n\n    // Create regex pattern to match URIs\n    const regexPattern = template.replace(/\\{[^}]+\\}/g, \"([^/]+)\");\n    this.pattern = new RegExp(`^${regexPattern}$`);\n  }\n\n  /**\n   * Parse a URI against this template and extract parameters\n   */\n  parse(uri: string): Record<string, string> | null {\n    const match = uri.match(this.pattern);\n    if (!match) return null;\n\n    const params: Record<string, string> = {};\n    for (let i = 0; i < this.paramNames.length; i++) {\n      params[this.paramNames[i]] = match[i + 1];\n    }\n    return params;\n  }\n\n  /**\n   * Check if a URI matches this template\n   */\n  matches(uri: string): boolean {\n    return this.pattern.test(uri);\n  }\n\n  /**\n   * Get the parameter names for this template\n   */\n  getParameterNames(): string[] {\n    return [...this.paramNames];\n  }\n}\n\n/**\n * MCP Resources Manager\n *\n * Manages registration, storage, and retrieval of MCP resources\n */\nexport class McpResourcesManager {\n  private resources = new Map<string, McpResourceEntry>();\n  private changeListeners = new Set<() => void>();\n\n  /**\n   * Register a new resource\n   */\n  addResource(config: McpResourceConfig): void {\n    // Validate configuration\n    this.validateResourceConfig(config);\n\n    // Store resource\n    this.resources.set(config.name, {\n      config,\n      registeredAt: new Date(),\n    });\n\n    // Notify listeners of change\n    this.notifyChange();\n  }\n\n  /**\n   * Remove a resource by name\n   */\n  removeResource(name: string): boolean {\n    const removed = this.resources.delete(name);\n    if (removed) {\n      this.notifyChange();\n    }\n    return removed;\n  }\n\n  /**\n   * Get all registered resources\n   */\n  getResources(): McpResourceConfig[] {\n    return Array.from(this.resources.values()).map((entry) => entry.config);\n  }\n\n  /**\n   * Get a specific resource by name\n   */\n  getResource(name: string): McpResourceConfig | undefined {\n    return this.resources.get(name)?.config;\n  }\n\n  /**\n   * Check if a resource exists\n   */\n  hasResource(name: string): boolean {\n    return this.resources.has(name);\n  }\n\n  /**\n   * Find resource that matches a URI\n   */\n  findResourceForUri(\n    uri: string,\n  ): { config: McpResourceConfig; params: Record<string, string> } | null {\n    for (const entry of this.resources.values()) {\n      const parser = new ResourceTemplateParser(entry.config.uriTemplate);\n      const params = parser.parse(uri);\n      if (params !== null) {\n        return { config: entry.config, params };\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Add change listener\n   */\n  onResourcesChange(listener: () => void): void {\n    this.changeListeners.add(listener);\n  }\n\n  /**\n   * Remove change listener\n   */\n  offResourcesChange(listener: () => void): void {\n    this.changeListeners.delete(listener);\n  }\n\n  /**\n   * Clear all resources\n   */\n  clear(): void {\n    const hadResources = this.resources.size > 0;\n    this.resources.clear();\n    if (hadResources) {\n      this.notifyChange();\n    }\n  }\n\n  /**\n   * Get resource count\n   */\n  count(): number {\n    return this.resources.size;\n  }\n\n  /**\n   * Validate resource configuration\n   */\n  private validateResourceConfig(config: McpResourceConfig): void {\n    if (!config.name || typeof config.name !== \"string\") {\n      throw new Error(\"Resource name is required and must be a string\");\n    }\n\n    if (!config.uriTemplate || typeof config.uriTemplate !== \"string\") {\n      throw new Error(\"Resource uriTemplate is required and must be a string\");\n    }\n\n    if (typeof config.handler !== \"function\") {\n      throw new Error(\"Resource handler is required and must be a function\");\n    }\n\n    if (this.resources.has(config.name)) {\n      throw new Error(`Resource with name '${config.name}' already exists`);\n    }\n\n    // Validate URI template format\n    try {\n      new ResourceTemplateParser(config.uriTemplate);\n    } catch (error) {\n      throw new Error(\n        `Invalid URI template '${config.uriTemplate}': ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  /**\n   * Notify all listeners of changes\n   */\n  private notifyChange(): void {\n    for (const listener of this.changeListeners) {\n      try {\n        listener();\n      } catch (error) {\n        console.error(\"Error in resource change listener:\", error);\n      }\n    }\n  }\n}\n\n/**\n * Helper function to create common resource configurations\n */\nexport const createFileResource = (\n  basePath: string = \"\",\n): McpResourceConfig => ({\n  name: \"file-content\",\n  uriTemplate: \"file://{path}\",\n  title: \"File Content\",\n  description: \"Read file contents from the filesystem\",\n  mimeType: \"text/plain\",\n  handler: async (uri, { path }) => {\n    const fs = await import(\"node:fs/promises\");\n    const fullPath = basePath ? `${basePath}/${path}` : path;\n\n    try {\n      const content = await fs.readFile(fullPath, \"utf8\");\n      return {\n        contents: [\n          {\n            uri: uri.href,\n            text: content,\n            mimeType: \"text/plain\",\n          },\n        ],\n      };\n    } catch (error) {\n      throw new Error(\n        `Failed to read file '${fullPath}': ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  },\n});\n\n/**\n * Helper function to create JSON data resource\n */\nexport const createJsonResource = (\n  name: string,\n  data: any,\n): McpResourceConfig => ({\n  name,\n  uriTemplate: `${name}://data`,\n  title: `${name} Data`,\n  description: `Access ${name} data as JSON`,\n  mimeType: \"application/json\",\n  handler: async (uri) => ({\n    contents: [\n      {\n        uri: uri.href,\n        text: JSON.stringify(data, null, 2),\n        mimeType: \"application/json\",\n      },\n    ],\n  }),\n});\n","/**\n * Debug utility for conditional logging based on environment variables\n *\n * This utility provides clean debug logging without scattered conditional statements.\n * Debug output is controlled by the DEBUG environment variable.\n */\n\n/**\n * Check if debug mode is enabled\n */\nconst isDebugEnabled = (): boolean => {\n  try {\n    // Safe access to process.env that works in all JavaScript environments\n    return Boolean(typeof process !== 'undefined' && process.env && process.env[\"DEBUG\"]);\n  } catch {\n    // Fallback for environments where process is not available\n    return false;\n  }\n};\n\n/**\n * Debug logger that only outputs when DEBUG environment variable is set\n */\nexport const debug = {\n  /**\n   * Log a debug message to stderr (only when DEBUG=true)\n   */\n  log: (...args: any[]): void => {\n    if (isDebugEnabled()) {\n      console.error(\"[DEBUG]\", ...args);\n    }\n  },\n\n  /**\n   * Log an error debug message to stderr (only when DEBUG=true)\n   */\n  error: (...args: any[]): void => {\n    if (isDebugEnabled()) {\n      console.error(\"[DEBUG ERROR]\", ...args);\n    }\n  },\n\n  /**\n   * Log a warning debug message to stderr (only when DEBUG=true)\n   */\n  warn: (...args: any[]): void => {\n    if (isDebugEnabled()) {\n      console.error(\"[DEBUG WARN]\", ...args);\n    }\n  },\n\n  /**\n   * Log an info debug message to stderr (only when DEBUG=true)\n   */\n  info: (...args: any[]): void => {\n    if (isDebugEnabled()) {\n      console.error(\"[DEBUG INFO]\", ...args);\n    }\n  },\n\n  /**\n   * Log a debug message with a custom prefix (only when DEBUG=true)\n   */\n  prefixed: (prefix: string, ...args: any[]): void => {\n    if (isDebugEnabled()) {\n      console.error(`[DEBUG ${prefix}]`, ...args);\n    }\n  },\n\n  /**\n   * Check if debug mode is currently enabled\n   */\n  get enabled(): boolean {\n    return isDebugEnabled();\n  }\n};\n\n/**\n * Default export for convenience\n */\nexport default debug;\n","import { zodFlagSchema } from \"./types\";\nimport type { IFlag, ProcessedFlag } from \"./types\";\n\nexport class FlagManager {\n  #_flags: Map<string, ProcessedFlag> = new Map();\n  #throwForDuplicateFlags: boolean;\n\n  constructor(\n    options: { throwForDuplicateFlags?: boolean } = {},\n    initialFlags: readonly IFlag[] = [],\n  ) {\n    this.#throwForDuplicateFlags = options.throwForDuplicateFlags ?? false;\n    this.addFlags(initialFlags);\n  }\n\n  static _safeFlag(flag: IFlag): ProcessedFlag {\n    const parsedFromZod = zodFlagSchema.parse(flag);\n\n    let resolvedType: ProcessedFlag[\"type\"];\n    const inputTypeFromZod = parsedFromZod[\"type\"];\n\n    if (typeof inputTypeFromZod === \"string\") {\n      switch (inputTypeFromZod.toLowerCase()) {\n        case \"boolean\":\n          resolvedType = Boolean;\n          break;\n        case \"string\":\n          resolvedType = String;\n          break;\n        case \"number\":\n          resolvedType = Number;\n          break;\n        case \"array\":\n          resolvedType = Array;\n          break;\n        case \"object\":\n          resolvedType = Object;\n          break;\n        default:\n          throw new Error(`Invalid type string: ${inputTypeFromZod}`);\n      }\n    } else {\n      resolvedType = inputTypeFromZod as ProcessedFlag[\"type\"];\n    }\n\n    return {\n      ...parsedFromZod,\n      options: parsedFromZod[\"options\"],\n      type: resolvedType,\n      validate: parsedFromZod[\"validate\"],\n      enum: parsedFromZod[\"enum\"],\n      mandatory: parsedFromZod[\"mandatory\"],\n      env: parsedFromZod[\"env\"],\n      dxtOptions: parsedFromZod[\"dxtOptions\"],\n    };\n  }\n\n  addFlag(flag: IFlag): this {\n    const safeFlag = FlagManager._safeFlag(flag);\n\n    if (this.#_flags.has(safeFlag[\"name\"])) {\n      if (this.#throwForDuplicateFlags) {\n        throw new Error(\n          `FlagManager: Flag '${safeFlag[\"name\"]}' already exists.`,\n        );\n      } else {\n        console.warn(\n          `Warning: FlagManager: Flag '${safeFlag[\"name\"]}' already exists. Duplicate not added.`,\n        );\n        return this;\n      }\n    }\n\n    this.#_flags.set(safeFlag[\"name\"], safeFlag);\n    return this;\n  }\n\n  _setProcessedFlagForInheritance(processedFlag: ProcessedFlag): this {\n    if (this.#_flags.has(processedFlag[\"name\"])) {\n      return this;\n    }\n    this.#_flags.set(processedFlag[\"name\"], processedFlag);\n    return this;\n  }\n\n  addFlags(flags: readonly IFlag[]): this {\n    for (const flag of flags) {\n      this.addFlag(flag);\n    }\n    return this;\n  }\n\n  hasFlag(name: string): boolean {\n    return this.#_flags.has(name);\n  }\n\n  removeFlag(name: string): boolean {\n    return this.#_flags.delete(name);\n  }\n\n  getFlag(name: string): ProcessedFlag | undefined {\n    return this.#_flags.get(name);\n  }\n\n  get flags(): ProcessedFlag[] {\n    return Array.from(this.#_flags.values());\n  }\n\n  get flagNames(): string[] {\n    return Array.from(this.#_flags.values()).map((flag) => flag[\"name\"]);\n  }\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { anyOf, char, createRegExp, oneOrMore } from \"magic-regexp\";\nimport chalk from \"@alcyone-labs/simple-chalk\";\nimport { ConfigurationManager } from \"../config/ConfigurationManager\";\nimport { DxtGenerator } from \"../dxt/DxtGenerator\";\nimport {\n  McpChangeType,\n  McpNotificationsManager,\n} from \"../mcp/mcp-notifications.js\";\nimport { McpPromptConfig, McpPromptsManager } from \"../mcp/mcp-prompts.js\";\nimport {\n  McpResourceConfig,\n  McpResourcesManager,\n} from \"../mcp/mcp-resources.js\";\nimport { debug } from \"../utils/debug-utils\";\nimport { FlagManager } from \"./FlagManager\";\nimport { resolveLogPath } from \"./log-path-utils\";\nimport type {\n  IFlag,\n  IHandlerContext,\n  ISubCommand,\n  ParseResult,\n  ProcessedFlag,\n  TParsedArgs,\n} from \"./types\";\n\nexport class ArgParserError extends Error {\n  public commandChain: string[];\n  constructor(\n    message: string,\n    public cmdChain: string[] = [],\n  ) {\n    super(message);\n    this.name = \"ArgParserError\";\n    this.commandChain = cmdChain;\n  }\n}\n\nexport interface IArgParserParams<THandlerReturn = any> {\n  /**\n   * This is the display name of the app, used in help text\n   */\n  appName?: string;\n  subCommands?: ISubCommand[];\n  handler?: (\n    ctx: IHandlerContext<any, any>,\n  ) => THandlerReturn | Promise<THandlerReturn>;\n\n  /**\n   * Add an extra new line between each flag group,\n   * makes the text more readable but uses more space\n   *\n   * Default: true\n   */\n  extraNewLine?: boolean;\n  /**\n   * Wraps the line at width, if shorter, wrapping will be more\n   * aggressive. Wrapping is based on words.\n   *\n   * Default: 50\n   * Minimum: 30\n   */\n  wrapAtWidth?: number;\n  /**\n   * Controls the placing of right text on the screen.\n   * The higher the value, the more to the right the text will be.\n   *\n   * Default: 30\n   * Minimum: 20\n   */\n  blankSpaceWidth?: number;\n  /**\n   * Character to display next to the flag to express mandatory fields.\n   *\n   * Default: *\n   */\n  mandatoryCharacter?: string;\n  /**\n   * Throw an error if a flag is added more than once\n   * @default false\n   */\n  throwForDuplicateFlags?: boolean;\n  description?: string; // New property for the description\n  /**\n   * Automatically handle ArgParserErrors by printing a formatted message\n   * and exiting. Set to false to catch ArgParserError manually.\n   * @default true\n   */\n  handleErrors?: boolean;\n  /**\n   * Whether to automatically call process.exit() based on ParseResult.\n   * When true (default), maintains backward compatibility with CLI behavior.\n   * When false, returns ParseResult objects for programmatic use.\n   * @default true\n   */\n  autoExit?: boolean;\n  /**\n   * The command name to display in help suggestions (e.g., 'dabl').\n   * If not provided, it falls back to guessing from the script path.\n   */\n  appCommandName?: string;\n  /**\n   * If true, when this parser is added as a sub-command, it will inherit\n   * flags from its direct parent *unless* a flag with the same name\n   * already exists in this parser. Child flags take precedence.\n   * @default false\n   */\n  inheritParentFlags?: boolean;\n}\n\nexport interface IParseOptions {\n  /**\n   * When true, skips help flag processing (doesn't exit or show help)\n   * @default false\n   */\n  skipHelpHandling?: boolean;\n  /**\n   * When true, skips the execution of any command handlers.\n   * @default false\n   */\n  skipHandlers?: boolean;\n  /**\n   * When true (default), automatically awaits async handlers before returning.\n   * When false, returns immediately with _asyncHandlerPromise for manual handling.\n   * @default true\n   */\n  deep?: boolean;\n  /**\n   * When true, indicates this is being called from MCP mode\n   * @default false\n   * @internal\n   */\n  isMcp?: boolean;\n  /**\n   * Internal: when true, this parse call is only for dynamic flag preloading for help\n   * Suppresses side effects and handler execution\n   * @internal\n   */\n  dynamicHelpPreload?: boolean;\n  /**\n   * When true, automatically executes the CLI if the script is being run directly (not imported).\n   * When false, disables auto-execution detection even if importMetaUrl is provided.\n   * Uses robust detection that works across different environments and sandboxes.\n   * Only takes effect when importMetaUrl is also provided.\n   * @default true (when importMetaUrl is provided)\n   */\n  autoExecute?: boolean;\n  /**\n   * The import.meta.url from the calling script, required for reliable auto-execution detection.\n   * Only used when autoExecute is true.\n   */\n  importMetaUrl?: string;\n}\n\ntype TParsedArgsWithRouting<T = any> = T & {\n  $commandChain?: string[];\n  handlerToExecute?: { handler: Function; context: IHandlerContext };\n};\n\ntype RecursiveParseResult = {\n  finalArgs: TParsedArgsWithRouting<any>;\n  handlerToExecute?: { handler: Function; context: IHandlerContext };\n};\n\nexport class ArgParserBase<THandlerReturn = any> {\n  #appName: string = \"Argument Parser\";\n  #appCommandName?: string;\n  #subCommandName: string = \"\";\n  #parameters: IArgParserParams<THandlerReturn> = {\n    extraNewLine: true,\n    wrapAtWidth: 50,\n    blankSpaceWidth: 30,\n    mandatoryCharacter: \"*\",\n  };\n  #handler?: (ctx: IHandlerContext) => void;\n  #throwForDuplicateFlags: boolean = false;\n  #description?: string;\n  #handleErrors: boolean = true;\n  #autoExit: boolean = true;\n  #parentParser?: ArgParserBase;\n  #lastParseResult: TParsedArgs<ProcessedFlag[]> = {};\n  #inheritParentFlags: boolean = false;\n  #subCommands: Map<string, ISubCommand> = new Map();\n  #flagManager: FlagManager;\n  #dxtGenerator: DxtGenerator;\n  #configurationManager: ConfigurationManager;\n  #fuzzyMode: boolean = false;\n\n  // Track dynamically added flags so we can clean them between parses\n  #dynamicFlagNames: Set<string> = new Set();\n\n  // MCP-related managers\n  #mcpResourcesManager: McpResourcesManager = new McpResourcesManager();\n  #mcpPromptsManager: McpPromptsManager = new McpPromptsManager();\n  #mcpNotificationsManager: McpNotificationsManager =\n    new McpNotificationsManager();\n\n  constructor(\n    options: IArgParserParams<THandlerReturn> = {},\n    initialFlags?: readonly IFlag[],\n  ) {\n    this.#appName = options.appName || \"app\";\n    if (\n      options.blankSpaceWidth &&\n      !isNaN(Number(options.blankSpaceWidth)) &&\n      Number(options.blankSpaceWidth) > 20\n    )\n      this.#parameters.blankSpaceWidth = Number(options.blankSpaceWidth);\n\n    if (\n      options.wrapAtWidth &&\n      !isNaN(Number(options.wrapAtWidth)) &&\n      Number(options.wrapAtWidth) > 30\n    )\n      this.#parameters.wrapAtWidth = Number(options.wrapAtWidth);\n\n    if (typeof options.extraNewLine === \"boolean\")\n      this.#parameters.extraNewLine = Boolean(options.extraNewLine);\n\n    if (typeof options.mandatoryCharacter === \"string\")\n      this.#parameters.mandatoryCharacter = options.mandatoryCharacter;\n\n    if (typeof options.throwForDuplicateFlags === \"boolean\")\n      this.#throwForDuplicateFlags = options.throwForDuplicateFlags;\n\n    this.#flagManager = new FlagManager(\n      {\n        throwForDuplicateFlags: this.#throwForDuplicateFlags,\n      },\n      initialFlags || [],\n    );\n\n    this.#handleErrors = options.handleErrors ?? true;\n    this.#autoExit = options.autoExit ?? true;\n    this.#inheritParentFlags = options.inheritParentFlags ?? false;\n    this.#description = options.description;\n    this.#handler = options.handler;\n    this.#appCommandName = options.appCommandName;\n\n    const helpFlag: IFlag = {\n      name: \"help\",\n      description: \"Display this help message and exits\",\n      mandatory: false,\n      type: Boolean,\n      options: [\"-h\", \"--help\"],\n      defaultValue: undefined,\n      allowLigature: false,\n      allowMultiple: false,\n      flagOnly: true,\n      enum: [],\n      validate: (_value?: any, _parsedArgs?: any) => true, // Ensure signature matches Zod schema for .args()\n    };\n    this.#flagManager.addFlag(helpFlag); // Add the help flag via FlagManager\n\n    // Initialize DXT generator\n    this.#dxtGenerator = new DxtGenerator(this);\n\n    // Initialize Configuration manager\n    this.#configurationManager = new ConfigurationManager(this);\n\n    if (options.subCommands) {\n      for (const sub of options.subCommands) {\n        this.addSubCommand(sub);\n      }\n    }\n  }\n\n  get flags(): ProcessedFlag[] {\n    return this.#flagManager.flags;\n  }\n\n  get flagNames(): string[] {\n    return this.#flagManager.flagNames;\n  }\n\n  public getAppName(): string | undefined {\n    return this.#appName;\n  }\n\n  public getAppCommandName(): string | undefined {\n    return this.#appCommandName;\n  }\n\n  public getSubCommandName(): string {\n    return this.#subCommandName;\n  }\n\n  public getDescription(): string | undefined {\n    return this.#description;\n  }\n\n  public getAutoExit(): boolean {\n    return this.#autoExit;\n  }\n\n  /**\n   * Helper method to handle exit logic based on autoExit setting\n   * Returns a ParseResult instead of calling process.exit() when autoExit is false\n   */\n  private _handleExit(\n    exitCode: number,\n    message?: string,\n    type?: ParseResult[\"type\"],\n    data?: any,\n  ): ParseResult | never {\n    const result: ParseResult = {\n      success: exitCode === 0,\n      exitCode,\n      message,\n      type: type || (exitCode === 0 ? \"success\" : \"error\"),\n      shouldExit: true,\n      data,\n    };\n\n    if (\n      this.#autoExit &&\n      typeof process === \"object\" &&\n      typeof process.exit === \"function\"\n    ) {\n      process.exit(exitCode as never);\n    }\n\n    return result;\n  }\n\n  public getHandler(): ((ctx: IHandlerContext) => void) | undefined {\n    return this.#handler;\n  }\n\n  public getSubCommands(): Map<string, ISubCommand> {\n    return this.#subCommands;\n  }\n\n  private async _addToOutput(\n    flag: ProcessedFlag, // Changed from Flags[number]\n    arg: any,\n    output: TParsedArgs<ProcessedFlag[]>,\n    _parseOptions?: IParseOptions,\n  ) {\n    let value: unknown = arg;\n\n    if (flag[\"type\"] === Boolean) {\n      if (typeof arg === \"boolean\") {\n        value = arg;\n      } else if (typeof arg === \"string\") {\n        value = /(true|yes|1)/i.test(arg);\n      } else {\n        value = new (flag[\"type\"] as ObjectConstructor)(value);\n      }\n    } else if (typeof flag[\"type\"] === \"function\") {\n      const result = (flag[\"type\"] as Function)(value as string);\n      // Handle both sync and async custom parser functions\n      value =\n        result && typeof result.then === \"function\" ? await result : result;\n    } else if (typeof flag[\"type\"] === \"object\") {\n      // Check if it's a Zod schema\n      if (flag[\"type\"] && (flag[\"type\"] as any)._def) {\n        // It's a Zod schema - parse JSON and validate\n        try {\n          const parsedJson =\n            typeof value === \"string\" ? JSON.parse(value as string) : value;\n          value = (flag[\"type\"] as any).parse(parsedJson);\n        } catch (error) {\n          if (error instanceof SyntaxError) {\n            throw new Error(\n              `Invalid JSON for flag '${flag[\"name\"]}': ${error.message}`,\n            );\n          } else {\n            const errorMessage =\n              error instanceof Error ? error.message : String(error);\n            throw new Error(\n              `Validation failed for flag '${flag[\"name\"]}': ${errorMessage}`,\n            );\n          }\n        }\n      } else {\n        // Regular object constructor\n        value = new (flag[\"type\"] as ObjectConstructor)(value);\n      }\n    }\n\n    if (flag[\"enum\"] && flag[\"enum\"].length > 0) {\n      const allowedValues = flag[\"enum\"]\n        .map((v: any) => (typeof v === \"string\" ? `'${v}'` : v))\n        .join(\", \");\n\n      if (!flag[\"enum\"].includes(value)) {\n        throw new ArgParserError(\n          `Invalid value '${value}' for flag '${chalk.yellow(flag[\"name\"])}'. ` +\n            `Allowed values: ${allowedValues}`,\n          this.getCommandChain(),\n        );\n      }\n    }\n\n    if (flag[\"validate\"]) {\n      const validationResult = flag[\"validate\"](value, output);\n      if (validationResult === false) {\n        throw new ArgParserError(\n          `Validation failed for flag '${chalk.yellow(flag[\"name\"])}' with value '${value}'`,\n          this.getCommandChain(),\n        );\n      } else if (typeof validationResult === \"string\") {\n        throw new ArgParserError(validationResult, this.getCommandChain());\n      }\n    }\n\n    if (flag[\"allowMultiple\"] && !Array.isArray(output[flag[\"name\"]])) {\n      output[flag[\"name\"]] = [] as any;\n    }\n\n    return flag[\"allowMultiple\"]\n      ? (output[flag[\"name\"]] as any[]).push(value)\n      : (output[flag[\"name\"]] = value as any);\n  }\n\n  // Register flags coming from dynamic loaders and track them for cleanup\n  #registerDynamicFlags(flags: readonly IFlag[]): void {\n    if (!Array.isArray(flags) || flags.length === 0) return;\n    for (const flag of flags) {\n      const name = (flag as any)[\"name\"] as string;\n      const existed = this.#flagManager.hasFlag(name);\n      this.#flagManager.addFlag(flag);\n      if (!existed) this.#dynamicFlagNames.add(name);\n    }\n  }\n\n  // Remove dynamically registered flags on this parser and all sub-parsers\n  #resetDynamicFlagsRecursive(parser: ArgParserBase = this): void {\n    for (const name of parser.#dynamicFlagNames) {\n      parser.#flagManager.removeFlag(name);\n    }\n    parser.#dynamicFlagNames.clear();\n    for (const [, sub] of parser.#subCommands) {\n      if (sub && sub.parser instanceof ArgParserBase) {\n        sub.parser.#resetDynamicFlagsRecursive();\n      }\n    }\n  }\n\n  // Preload dynamic flags for help display without executing handlers\n  async #_preloadDynamicFlagsForHelp(processArgs: string[]): Promise<void> {\n    let currentParser: ArgParserBase = this;\n    let remaining = [...processArgs];\n\n    while (true) {\n      // Find first index that matches a sub-command of currentParser\n      let subIndex = -1;\n      for (let i = 0; i < remaining.length; i++) {\n        if (currentParser.#subCommands.has(remaining[i]!)) {\n          subIndex = i;\n          break;\n        }\n      }\n\n      const segment =\n        subIndex === -1 ? remaining : remaining.slice(0, subIndex);\n      try {\n        await currentParser.#parseFlags(segment, {\n          skipHelpHandling: true,\n          dynamicHelpPreload: true,\n        });\n      } catch {\n        // ignore errors during help preloading\n      }\n\n      if (subIndex === -1) break;\n      const nextName = remaining[subIndex]!;\n      const sub = currentParser.#subCommands.get(nextName);\n      if (!sub || !(sub.parser instanceof ArgParserBase)) break;\n      currentParser = sub.parser;\n      remaining = remaining.slice(subIndex + 1);\n    }\n  }\n\n  addFlags(flags: readonly IFlag[]): this {\n    this.#flagManager.addFlags(flags);\n    return this;\n  }\n\n  addFlag(flag: IFlag): this {\n    this.#flagManager.addFlag(flag);\n    return this;\n  }\n\n  addSubCommand(subCommandConfig: ISubCommand): this {\n    if (this.#subCommands.has(subCommandConfig.name)) {\n      throw new Error(`Sub-command '${subCommandConfig.name}' already exists`);\n    }\n\n    const subParser = subCommandConfig.parser;\n\n    if (!(subParser instanceof ArgParserBase)) {\n      throw new Error(\n        `Parser for subcommand '${subCommandConfig.name}' is not an instance of ArgParserBase. ` +\n          `Please provide 'new ArgParserBase(...)' for the 'parser' property of an ISubCommand.`,\n      );\n    }\n\n    subParser.#parentParser = this;\n    subParser.#subCommandName = subCommandConfig.name;\n    if (!subParser.#appCommandName && this.#appCommandName) {\n      subParser.#appCommandName = this.#appCommandName;\n    }\n\n    // Inherit autoExit setting from parent to ensure consistent error handling\n    // across the parser hierarchy. Child parsers should follow parent's exit behavior.\n    subParser.#autoExit = this.#autoExit;\n\n    if (subParser.#inheritParentFlags) {\n      const parentFlags = this.#flagManager.flags;\n      for (const parentFlag of parentFlags) {\n        if (!subParser.#flagManager.hasFlag(parentFlag[\"name\"])) {\n          subParser.#flagManager._setProcessedFlagForInheritance(parentFlag);\n        }\n      }\n    }\n\n    this.#subCommands.set(subCommandConfig.name, subCommandConfig);\n\n    if (subCommandConfig.handler) {\n      subParser.setHandler(subCommandConfig.handler);\n    }\n\n    return this;\n  }\n\n  /**\n   * Sets the handler function for this specific parser instance.\n   * This handler will be executed if this parser is the final one\n   * in the command chain and `executeHandlers` is enabled on the root parser.\n   *\n   * @param handler - The function to execute.\n   * @returns The ArgParser instance for chaining.\n   */\n  setHandler(\n    handler: (\n      ctx: IHandlerContext<any, any>,\n    ) => THandlerReturn | Promise<THandlerReturn>,\n  ): this {\n    this.#handler = handler;\n    return this;\n  }\n\n  printAll(filePath?: string): void {\n    if (filePath) {\n      try {\n        const dir = path.dirname(filePath);\n        if (!fs.existsSync(dir)) {\n          fs.mkdirSync(dir, { recursive: true });\n        }\n\n        if (filePath.toLowerCase().endsWith(\".json\")) {\n          const outputObject = this.#_buildRecursiveJson(this);\n          const jsonString = JSON.stringify(outputObject, null, 2);\n          fs.writeFileSync(filePath, jsonString);\n          console.log(`ArgParser configuration JSON dumped to: ${filePath}`);\n        } else {\n          const outputString = this.#_buildRecursiveString(this, 0);\n          const plainText = outputString.replace(\n            /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,\n            \"\",\n          );\n          fs.writeFileSync(filePath, plainText);\n          console.log(`ArgParser configuration text dumped to: ${filePath}`);\n        }\n      } catch (error) {\n        console.error(\n          `Error writing ArgParser configuration to file '${filePath}':`,\n          error,\n        );\n      }\n    } else {\n      console.log(\"\\n--- ArgParser Configuration Dump ---\");\n      this.#_printRecursiveToConsole(this, 0);\n      console.log(\"--- End Configuration Dump ---\\\\n\");\n    }\n  }\n\n  #_identifyCommandChainAndParsers(\n    argsToParse: string[],\n    currentParser: ArgParserBase,\n    commandChainSoFar: string[],\n    parserChainSoFar: ArgParserBase[],\n  ): {\n    finalParser: ArgParserBase;\n    commandChain: string[];\n    parserChain: ArgParserBase[];\n    remainingArgs: string[];\n  } {\n    let subCommandIndex = -1;\n    let subCommandName: string | null = null;\n\n    for (let i = 0; i < argsToParse.length; i++) {\n      const potentialSubCommand = argsToParse[i];\n      if (currentParser.#subCommands.has(potentialSubCommand)) {\n        subCommandIndex = i;\n        subCommandName = potentialSubCommand;\n        break;\n      }\n    }\n\n    if (subCommandIndex === -1 || subCommandName === null) {\n      return {\n        finalParser: currentParser,\n        commandChain: commandChainSoFar,\n        parserChain: parserChainSoFar,\n        remainingArgs: argsToParse,\n      };\n    }\n\n    const subCommandConfig = currentParser.#subCommands.get(subCommandName);\n    if (\n      !subCommandConfig ||\n      !(subCommandConfig.parser instanceof ArgParserBase)\n    ) {\n      throw new Error(\n        `Internal error: Subcommand '${subCommandName!}' configuration is invalid or parser is missing.`,\n      );\n    }\n    const nextParser = subCommandConfig.parser;\n    const nextArgs = argsToParse.slice(subCommandIndex + 1);\n    const nextCommandChain = [...commandChainSoFar, subCommandName];\n    const nextParserChain = [...parserChainSoFar, nextParser];\n\n    return this.#_identifyCommandChainAndParsers(\n      nextArgs,\n      nextParser,\n      nextCommandChain,\n      nextParserChain,\n    );\n  }\n\n  async #_handleGlobalChecks(\n    processArgs: string[],\n    options?: IParseOptions,\n  ): Promise<boolean | ParseResult> {\n    // Auto-help should only trigger for root parsers that are intended as main CLI entry points\n    // A parser is considered a \"root CLI parser\" if it has appCommandName explicitly set\n    // This ensures that only parsers intended as main CLI tools trigger auto-help\n    const isRootCliParser = !this.#parentParser && !!this.#appCommandName;\n\n    if (processArgs.length === 0 && isRootCliParser && !this.#handler) {\n      console.log(this.helpText());\n      return this._handleExit(0, \"Help displayed\", \"help\");\n    }\n\n    if (processArgs.includes(\"--s-debug-print\")) {\n      this.printAll(\"ArgParser.full.json\");\n      return this._handleExit(0, \"Debug information printed\", \"debug\");\n    }\n\n    // Handle --s-enable-fuzzy system flag to enable fuzzy testing mode\n    if (processArgs.includes(\"--s-enable-fuzzy\")) {\n      this.#_enableFuzzyMode();\n      // Remove the flag from processArgs so it doesn't interfere with parsing\n      const fuzzyIndex = processArgs.indexOf(\"--s-enable-fuzzy\");\n      processArgs.splice(fuzzyIndex, 1);\n    }\n\n    // Handle --s-with-env system flag early to modify processArgs before parsing\n    const withEnvIndex = processArgs.findIndex((arg) => arg === \"--s-with-env\");\n    if (withEnvIndex !== -1) {\n      if (withEnvIndex + 1 >= processArgs.length) {\n        console.error(\n          chalk.red(\"Error: --s-with-env requires a file path argument\"),\n        );\n        return this._handleExit(\n          1,\n          \"--s-with-env requires a file path argument\",\n          \"error\",\n        );\n      }\n\n      const filePath = processArgs[withEnvIndex + 1];\n      if (!filePath || filePath.startsWith(\"-\")) {\n        console.error(\n          chalk.red(\"Error: --s-with-env requires a file path argument\"),\n        );\n        return this._handleExit(\n          1,\n          \"--s-with-env requires a file path argument\",\n          \"error\",\n        );\n      }\n\n      try {\n        // Identify the final parser and parser chain for loading configuration\n        const {\n          finalParser: identifiedFinalParser,\n          parserChain: identifiedParserChain,\n        } = this.#_identifyCommandChainAndParsers(\n          processArgs,\n          this,\n          [],\n          [this],\n        );\n\n        const envConfigArgs =\n          identifiedFinalParser.#configurationManager.loadEnvFile(\n            filePath,\n            identifiedParserChain,\n          );\n        if (envConfigArgs) {\n          // Merge environment configuration with process args\n          // CLI args take precedence over file configuration\n          const mergedArgs =\n            identifiedFinalParser.#configurationManager.mergeEnvConfigWithArgs(\n              envConfigArgs,\n              processArgs,\n            );\n\n          // Replace the original processArgs array contents\n          processArgs.length = 0;\n          processArgs.push(...mergedArgs);\n        }\n\n        // Remove the --s-with-env flag and its file path argument from processArgs\n        // This must be done after merging to avoid interfering with the merge process\n        const finalWithEnvIndex = processArgs.findIndex(\n          (arg) => arg === \"--s-with-env\",\n        );\n        if (finalWithEnvIndex !== -1) {\n          processArgs.splice(finalWithEnvIndex, 2); // Remove both --s-with-env and the file path\n        }\n      } catch (error) {\n        console.error(\n          chalk.red(\n            `Error loading environment file: ${error instanceof Error ? error.message : String(error)}`,\n          ),\n        );\n        return this._handleExit(\n          1,\n          `Error loading environment file: ${error instanceof Error ? error.message : String(error)}`,\n          \"error\",\n        );\n      }\n    }\n\n    const { finalParser: identifiedFinalParser } =\n      this.#_identifyCommandChainAndParsers(processArgs, this, [], [this]);\n\n    const buildDxtIndex = processArgs.findIndex(\n      (arg) => (arg ?? \"\").toLowerCase() === \"--s-build-dxt\",\n    );\n    if (buildDxtIndex !== -1) {\n      const dxtResult = await this.#_handleBuildDxtFlag(\n        processArgs,\n        buildDxtIndex,\n      );\n      if (dxtResult !== false) {\n        return dxtResult === true ? true : dxtResult;\n      }\n    }\n\n    // Handle --s-mcp-serve system flag to start all MCP servers\n    debug.log(\"Checking for --s-mcp-serve flag in args:\", processArgs);\n    const mcpServeIndex = processArgs.findIndex(\n      (arg) => arg === \"--s-mcp-serve\",\n    );\n    debug.log(\"mcpServeIndex:\", mcpServeIndex);\n    if (mcpServeIndex !== -1) {\n      debug.log(\"Found --s-mcp-serve flag, calling handler\");\n      const mcpServeResult = await this.#_handleMcpServeFlag(\n        processArgs,\n        mcpServeIndex,\n      );\n      debug.log(\"MCP serve handler returned:\", typeof mcpServeResult);\n      if (mcpServeResult !== false) {\n        return mcpServeResult === true ? true : mcpServeResult;\n      }\n    }\n\n    if (processArgs.includes(\"--s-debug\")) {\n      console.log(\n        chalk.yellow.bold(\"\\n--- ArgParser --s-debug Runtime Context ---\"),\n      );\n\n      const {\n        commandChain: identifiedCommandChain,\n        parserChain: _identifiedParserChain,\n      } = this.#_identifyCommandChainAndParsers(processArgs, this, [], [this]);\n\n      console.log(\n        `Identified Command Chain: ${chalk.cyan(identifiedCommandChain.join(\" -> \") || \"(root)\")}`,\n      );\n      console.log(\n        `Identified Final Parser: ${chalk.cyan(identifiedFinalParser.#subCommandName || identifiedFinalParser.#appName)}`,\n      );\n\n      let currentParser: ArgParserBase = this;\n      let remainingArgs = [...processArgs];\n      let accumulatedArgs: TParsedArgs<any> = {};\n      const parsingSteps: {\n        level: string;\n        argsSlice: string[];\n        parsed?: TParsedArgs<any>;\n        error?: string;\n      }[] = [];\n\n      const rootSubCommandIndex = remainingArgs.findIndex((arg) =>\n        currentParser.#subCommands.has(arg),\n      );\n      const rootArgsSlice =\n        rootSubCommandIndex === -1\n          ? remainingArgs\n          : remainingArgs.slice(0, rootSubCommandIndex);\n      parsingSteps.push({ level: \"(root)\", argsSlice: rootArgsSlice });\n      try {\n        const { parsedArgs: rootParsedArgs } = await currentParser.#parseFlags(\n          rootArgsSlice,\n          { skipHelpHandling: true },\n        );\n        parsingSteps[0].parsed = rootParsedArgs;\n        accumulatedArgs = { ...accumulatedArgs, ...rootParsedArgs };\n      } catch (e: any) {\n        parsingSteps[0].error = e.message;\n      }\n      remainingArgs =\n        rootSubCommandIndex === -1\n          ? []\n          : remainingArgs.slice(rootSubCommandIndex);\n\n      for (let i = 0; i < identifiedCommandChain.length; i++) {\n        const subCommandName = identifiedCommandChain[i];\n        if (!currentParser.#subCommands.has(subCommandName)) {\n          parsingSteps.push({\n            level: `Error`,\n            argsSlice: [],\n            error: `Could not find sub-command parser for '${subCommandName}'`,\n          });\n          break;\n        }\n        currentParser = currentParser.#subCommands.get(subCommandName)?.parser;\n        remainingArgs = remainingArgs.slice(1);\n\n        const nextSubCommandIndex = remainingArgs.findIndex((arg) =>\n          currentParser.#subCommands.has(arg),\n        );\n        const currentLevelArgsSlice =\n          nextSubCommandIndex === -1\n            ? remainingArgs\n            : remainingArgs.slice(0, nextSubCommandIndex);\n        const stepInfo: {\n          level: string;\n          argsSlice: string[];\n          parsed?: TParsedArgs<any>;\n          error?: string;\n        } = {\n          level: subCommandName,\n          argsSlice: currentLevelArgsSlice,\n        };\n        parsingSteps.push(stepInfo);\n\n        try {\n          const { parsedArgs: currentLevelParsedArgs } =\n            await currentParser.#parseFlags(currentLevelArgsSlice, {\n              skipHelpHandling: true,\n            });\n          stepInfo.parsed = currentLevelParsedArgs;\n          accumulatedArgs = { ...accumulatedArgs, ...currentLevelParsedArgs };\n        } catch (e: any) {\n          stepInfo.error = e.message;\n        }\n        remainingArgs =\n          nextSubCommandIndex === -1\n            ? []\n            : remainingArgs.slice(nextSubCommandIndex);\n      }\n\n      console.log(chalk.yellow(\"\\nParsing Simulation Steps:\"));\n      parsingSteps.forEach((step) => {\n        console.log(`  Level: ${chalk.cyan(step.level)}`);\n        console.log(\n          `    Args Slice Considered: ${JSON.stringify(step.argsSlice)}`,\n        );\n        if (step.parsed) {\n          console.log(\n            `    Parsed Args at this Level: ${JSON.stringify(step.parsed)}`,\n          );\n        }\n        if (step.error) {\n          console.log(\n            `    ${chalk.red(\"Error during parse simulation:\")} ${step.error}`,\n          );\n        }\n      });\n\n      console.log(\n        chalk.yellow(\n          \"\\nFinal Accumulated Args State (before final validation):\",\n        ),\n      );\n      console.log(JSON.stringify(accumulatedArgs, null, 2));\n\n      console.log(chalk.yellow(\"\\nArguments Remaining After Simulation:\"));\n      console.log(JSON.stringify(remainingArgs, null, 2));\n\n      console.log(\n        chalk.yellow.bold(\n          \"\\n--- ArgParser Static Configuration (Final Parser) ---\",\n        ),\n      );\n      identifiedFinalParser.printAll();\n\n      console.log(chalk.yellow.bold(\"--- End ArgParser --s-debug ---\"));\n      return this._handleExit(0, \"Debug information displayed\", \"debug\");\n    }\n\n    // ---- BEGIN ADDED DIAGNOSTIC LOG FOR identifiedFinalParser ----\n    let parserNameForLog = \"undefined_parser\";\n    if (identifiedFinalParser instanceof ArgParserBase) {\n      // Access private fields only if it's a confirmed ArgParser instance\n      parserNameForLog =\n        (identifiedFinalParser as any)[\"#subCommandName\"] ||\n        (identifiedFinalParser as any)[\"#appName\"];\n    } else if (identifiedFinalParser) {\n      parserNameForLog =\n        (identifiedFinalParser as any).name ||\n        (identifiedFinalParser as any).appName ||\n        \"unknown_type\";\n    }\n    // console.log(\n    //   `[ArgParser #_handleGlobalChecks Debug] identifiedFinalParser: constructor=${identifiedFinalParser ? 'defined' : 'undefined'}, isArgParser=${identifiedFinalParser instanceof ArgParser}, name=${parserNameForLog}`\n    // );\n    // ---- END ADDED DIAGNOSTIC LOG FOR identifiedFinalParser ----\n\n    // ---- BEGIN GUARD FOR identifiedFinalParser ----\n    if (!(identifiedFinalParser instanceof ArgParserBase)) {\n      console.error(\n        `[ArgParser #_handleGlobalChecks Critical Error] identifiedFinalParser is not an instance of ArgParser. Cannot process help. Name: ${parserNameForLog}, Constructor: ${identifiedFinalParser ? (identifiedFinalParser as any).constructor?.name : \"undefined\"}`,\n      );\n      // Returning false to prevent further processing with an invalid parser,\n      // which could lead to more cryptic errors or incorrect behavior.\n      return false;\n    }\n    // ---- END GUARD FOR identifiedFinalParser ----\n\n    const helpFlagDefinition =\n      identifiedFinalParser.#flagManager.getFlag(\"help\");\n    if (helpFlagDefinition && !options?.skipHelpHandling) {\n      const helpOptions = helpFlagDefinition[\"options\"];\n\n      // ---- BEGIN ADDED DEBUG AND DEFENSIVE CHECK ----\n      // if (!Array.isArray(helpOptions) || helpOptions.length === 0) {\n      //   console.warn(\n      //     `[ArgParser Debug] helpOptions is not a valid array or is empty. Value: ${JSON.stringify(helpOptions)}, Type: ${typeof helpOptions}`,\n      //     `Parser: ${parserNameForLog}`, // Use the determined parserNameForLog\n      //   );\n      //   // Potentially, we might even want to return false here or throw,\n      //   // as help cannot be processed correctly. For now, just log and continue.\n      // } else {\n      //   // Optional: Log the valid helpOptions for debugging successful cases\n      //   // console.log(`[ArgParser Debug] Valid helpOptions: ${JSON.stringify(helpOptions)} for parser ${parserNameForLog}`);\n      // }\n      // ---- END ADDED DEBUG AND DEFENSIVE CHECK ----\n\n      const helpRequested = processArgs.some((arg) =>\n        helpOptions.includes(arg),\n      );\n\n      if (helpRequested) {\n        await this.#_preloadDynamicFlagsForHelp(processArgs);\n        console.log(identifiedFinalParser.helpText());\n        return this._handleExit(0, \"Help displayed\", \"help\");\n      }\n    }\n\n    return false;\n  }\n\n  #_validateMandatoryFlags(\n    finalArgs: TParsedArgsWithRouting<any>,\n    parserChain: ArgParserBase[],\n    commandChain: string[],\n  ): void {\n    const finalMandatoryFlagsMissing: {\n      name: string;\n      parserName: string;\n      commandChain: string[];\n    }[] = [];\n    const checkedFlagNames = new Set<string>();\n\n    // For both MCP and regular subcommands, use the same inheritance-based validation logic\n    // Validate all parsers except the root parser when it's not the final destination\n    let parsersToValidate: ArgParserBase[] = [...parserChain];\n\n    // If there are multiple parsers and the root parser is not the final destination,\n    // remove the root parser from validation (unless its flags are inherited)\n    if (parserChain.length > 1) {\n      const immediateChild = parserChain[1];\n\n      // If the immediate child doesn't inherit from root, don't validate root\n      if (!immediateChild.#inheritParentFlags) {\n        parsersToValidate = parsersToValidate.slice(1);\n      }\n    }\n\n    for (let i = 0; i < parsersToValidate.length; i++) {\n      const parser = parsersToValidate[i];\n      const currentCommandChain = parser.getCommandChain();\n\n      for (const flag of parser.#flagManager.flags) {\n        // Use FlagManager\n        if (flag[\"name\"] === \"help\" || checkedFlagNames.has(flag[\"name\"]))\n          continue;\n\n        // Check if this flag is inherited by the immediate child\n        let flagIsInheritedByChild = false;\n\n        if (i < parsersToValidate.length - 1) {\n          const immediateChild = parsersToValidate[i + 1];\n\n          // If the immediate child inherits parent flags AND has this flag,\n          // then this flag is inherited and should be validated by the child\n          if (\n            immediateChild.#inheritParentFlags &&\n            immediateChild.#flagManager.hasFlag(flag[\"name\"])\n          ) {\n            flagIsInheritedByChild = true;\n          }\n        }\n\n        // Skip validation if this flag is inherited by a child (child will validate it)\n        if (flagIsInheritedByChild) continue;\n\n        const isMandatory =\n          typeof flag[\"mandatory\"] === \"function\"\n            ? flag[\"mandatory\"](finalArgs)\n            : flag[\"mandatory\"];\n\n        if (!isMandatory) continue;\n\n        const value = finalArgs[flag[\"name\"] as keyof typeof finalArgs];\n        let currentFlagIsMissing = false;\n\n        if (flag[\"allowMultiple\"]) {\n          // For allowMultiple, it's missing if undefined OR an empty array\n          if (\n            value === undefined ||\n            (Array.isArray(value) && value.length === 0)\n          ) {\n            currentFlagIsMissing = true;\n          }\n        } else {\n          // For non-allowMultiple, it's missing if undefined\n          if (value === undefined) {\n            currentFlagIsMissing = true;\n          }\n        }\n\n        if (currentFlagIsMissing) {\n          if (!checkedFlagNames.has(flag[\"name\"])) {\n            finalMandatoryFlagsMissing.push({\n              name: flag[\"name\"],\n              parserName: parser.#subCommandName || parser.#appName,\n              commandChain: currentCommandChain,\n            });\n            checkedFlagNames.add(flag[\"name\"]);\n          }\n        }\n      }\n    }\n\n    if (finalMandatoryFlagsMissing.length > 0) {\n      throw new ArgParserError(\n        `Missing mandatory flags: ${finalMandatoryFlagsMissing\n          .map((flag) => chalk.yellow(flag[\"name\"]))\n          .join(\", \")}`,\n        commandChain,\n      );\n    }\n  }\n\n  #_applyDefaultValues(\n    finalArgs: TParsedArgsWithRouting<any>,\n    finalParser: ArgParserBase,\n  ): void {\n    for (const flag of finalParser.#flagManager.flags) {\n      // Use FlagManager\n      const flagName = flag[\"name\"] as string;\n      if (\n        finalArgs[flagName] === undefined &&\n        flag[\"defaultValue\"] !== undefined\n      ) {\n        if (flag[\"allowMultiple\"]) {\n          finalArgs[flagName] = Array.isArray(flag[\"defaultValue\"])\n            ? flag[\"defaultValue\"]\n            : [flag[\"defaultValue\"]];\n        } else {\n          finalArgs[flagName] = flag[\"defaultValue\"];\n        }\n      }\n    }\n  }\n\n  #_prepareAndExecuteHandler(\n    handlerToExecute: RecursiveParseResult[\"handlerToExecute\"],\n    finalArgs: TParsedArgsWithRouting<any>,\n    skipHandlers: boolean,\n  ): void {\n    // Skip handlers if explicitly requested, if no handler exists, or if in fuzzy mode\n    if (skipHandlers || !handlerToExecute) {\n      return;\n    }\n\n    // Log handler skipping in fuzzy mode for visibility\n    if (this.#fuzzyMode) {\n      const commandChain = handlerToExecute.context.commandChain || [];\n      const args = handlerToExecute.context.args || {};\n\n      // Try to get the original input arguments from the final args if available\n      const inputArgs = (finalArgs as any)._originalInputArgs || \"unknown\";\n      const inputArgsStr = Array.isArray(inputArgs)\n        ? inputArgs.join(\" \")\n        : inputArgs;\n\n      console.log(\n        `[--s-enable-fuzzy] handler() skipped for command chain: ${commandChain.join(\" \") || \"(root)\"}`,\n      );\n      console.log(`  Input args: [${inputArgsStr}]`);\n      console.log(`  Parsed args: ${JSON.stringify(args)}`);\n      return;\n    }\n\n    const finalParserWhoseHandlerWillRun = handlerToExecute.context.parser;\n    const finalParserFlags = finalParserWhoseHandlerWillRun.#flagManager.flags;\n    const handlerArgs = handlerToExecute.context.args;\n\n    for (const flag of finalParserFlags) {\n      const flagName = flag[\"name\"] as keyof typeof finalArgs;\n      if (finalArgs.hasOwnProperty(flagName)) {\n        (handlerArgs as any)[flagName] = (finalArgs as any)[flagName];\n      } else if (\n        flag[\"allowMultiple\"] &&\n        !handlerArgs.hasOwnProperty(flagName)\n      ) {\n        (handlerArgs as any)[flagName] = [];\n      }\n    }\n    handlerToExecute.context.args = handlerArgs;\n\n    try {\n      const handlerResult = handlerToExecute.handler(handlerToExecute.context);\n\n      // Check if result is a Promise (async handler)\n      if (handlerResult && typeof handlerResult.then === \"function\") {\n        // Store async handler info for ArgParserWithMcp to handle\n        (finalArgs as any)._asyncHandlerPromise = handlerResult;\n        (finalArgs as any)._asyncHandlerInfo = handlerToExecute;\n\n        // Add a catch handler to prevent unhandled rejection warnings\n        // The actual error handling will be done in parseAsync()\n        handlerResult.catch(() => {\n          // Silently ignore - this will be handled properly in parseAsync()\n        });\n\n        return;\n      }\n\n      (finalArgs as any).handlerResponse = handlerResult;\n\n      // Merge handler result into final args if it's an object\n      if (\n        handlerResult &&\n        typeof handlerResult === \"object\" &&\n        !Array.isArray(handlerResult)\n      ) {\n        Object.assign(finalArgs, handlerResult);\n      }\n    } catch (error) {\n      // For synchronous handlers, we can handle sync errors\n      if (this.#handleErrors) {\n        this.#displayErrorAndExit(\n          new ArgParserError(`Handler error: ${error}`, []),\n        );\n      } else {\n        throw error;\n      }\n    }\n  }\n\n  /**\n   * Detects if the current script is being executed directly (not imported)\n   * Uses a robust method that works across different environments and sandboxes\n   * @param importMetaUrl The import.meta.url from the calling script (optional)\n   * @returns true if the script is being executed directly, false if imported\n   */\n  private static isExecutedDirectly(importMetaUrl?: string): boolean {\n    try {\n      // Use import.meta.url if provided (most reliable for ES modules)\n      if (importMetaUrl) {\n        const currentFile = fileURLToPath(importMetaUrl);\n        const executedFile = path.resolve(process.argv[1]);\n        return currentFile === executedFile;\n      }\n\n      // Fallback\n      if (typeof process !== \"undefined\" && process.argv && process.argv[1]) {\n        // Conservative approach\n        return false;\n      }\n\n      return false;\n    } catch {\n      return false;\n    }\n  }\n\n  async parse(\n    processArgs?: string[],\n    options?: IParseOptions,\n  ): Promise<TParsedArgsWithRouting<any> | ParseResult> {\n    debug.log(\"ArgParserBase.parse() called with args:\", processArgs);\n\n    // Handle auto-execution: only run if script is executed directly (not imported)\n    // Default to true unless explicitly disabled, but only when importMetaUrl is provided\n    const shouldCheckAutoExecution =\n      options?.importMetaUrl && options?.autoExecute !== false;\n    if (shouldCheckAutoExecution) {\n      const isDirectExecution = ArgParserBase.isExecutedDirectly(\n        options.importMetaUrl,\n      );\n      if (!isDirectExecution) {\n        // Script is being imported, not executed directly - return early without parsing\n        debug.log(\n          \"Auto-execution enabled but script is imported, skipping execution\",\n        );\n        return {} as TParsedArgsWithRouting<any>;\n      }\n    }\n\n    // Handle automatic argument detection when no arguments provided\n    if (processArgs === undefined) {\n      // Check if we're in a Node.js environment\n      if (\n        typeof process !== \"undefined\" &&\n        process.argv &&\n        Array.isArray(process.argv)\n      ) {\n        processArgs = process.argv.slice(2);\n      } else {\n        // Not in Node.js environment, throw an error\n        throw new Error(\n          \"parse() called without arguments in non-Node.js environment. \" +\n            \"Please provide arguments explicitly: parse(['--flag', 'value'])\",\n        );\n      }\n    }\n\n    // Reset dynamically registered flags before each parse to avoid accumulation\n    this.#resetDynamicFlagsRecursive();\n\n    // Store original args for fuzzy mode logging\n    const originalProcessArgs = [...processArgs];\n\n    // Check if fuzzy mode is enabled (global fuzzy mode detection)\n    // This allows automatic prevention of parse() execution without requiring boilerplate\n    // Prevent execution if:\n    // 1. ARGPARSER_FUZZY_MODE environment variable is set (during fuzzy test imports)\n    // 2. OR --s-enable-fuzzy is in process.argv but not in current processArgs (global fuzzy testing)\n    // 3. AND skipHelpHandling is not true (not a programmatic call from fuzzy tester)\n    const shouldPreventExecution =\n      typeof process !== \"undefined\" &&\n      (process.env[\"ARGPARSER_FUZZY_MODE\"] === \"true\" ||\n        (process.argv &&\n          process.argv.includes(\"--s-enable-fuzzy\") &&\n          !processArgs.includes(\"--s-enable-fuzzy\"))) &&\n      !options?.skipHelpHandling;\n\n    if (shouldPreventExecution) {\n      // Return a minimal result that indicates fuzzy mode prevented execution\n      return {\n        _fuzzyModePreventedExecution: true,\n        _originalInputArgs: originalProcessArgs,\n      } as TParsedArgsWithRouting<any>;\n    }\n\n    const globalCheckResult = await this.#_handleGlobalChecks(\n      processArgs,\n      options,\n    );\n    if (globalCheckResult !== false) {\n      // If it's a ParseResult, return it; otherwise return empty object for backward compatibility\n      return globalCheckResult === true\n        ? ({} as TParsedArgsWithRouting<any>)\n        : globalCheckResult;\n    }\n\n    try {\n      const {\n        finalParser: identifiedFinalParser,\n        commandChain: identifiedCommandChain,\n        parserChain: identifiedParserChain,\n      } = this.#_identifyCommandChainAndParsers(processArgs, this, [], [this]);\n\n      const saveToEnvResult = identifiedFinalParser.#_handleSaveToEnvFlag(\n        processArgs,\n        identifiedParserChain,\n      );\n      if (saveToEnvResult !== false) {\n        return saveToEnvResult === true\n          ? ({} as TParsedArgsWithRouting<any>)\n          : saveToEnvResult;\n      }\n\n      const { finalArgs, handlerToExecute } = await this._parseRecursive(\n        processArgs,\n        this,\n        {},\n        [],\n        options,\n        undefined,\n      );\n\n      if (identifiedCommandChain.length > 0) {\n        (finalArgs as any).$commandChain = identifiedCommandChain;\n      }\n\n      // Store original args for fuzzy mode logging\n      if (this.#fuzzyMode) {\n        (finalArgs as any)._originalInputArgs = originalProcessArgs;\n      }\n\n      // Skip mandatory flag validation in fuzzy mode\n      if (!this.#fuzzyMode) {\n        this.#_validateMandatoryFlags(\n          finalArgs,\n          identifiedParserChain,\n          identifiedCommandChain,\n        );\n      }\n\n      this.#_applyDefaultValues(finalArgs, identifiedFinalParser);\n\n      this.#_prepareAndExecuteHandler(\n        handlerToExecute,\n        finalArgs,\n        options?.skipHandlers ?? false,\n      );\n\n      // Handle deep option for async handlers (default: true)\n      const shouldAwaitHandlers = options?.deep !== false;\n      if (shouldAwaitHandlers && (finalArgs as any)._asyncHandlerPromise) {\n        try {\n          const handlerResult = await (finalArgs as any)._asyncHandlerPromise;\n          (finalArgs as any).handlerResponse = handlerResult;\n\n          // Merge handler result into final args if it's an object\n          if (\n            handlerResult &&\n            typeof handlerResult === \"object\" &&\n            !Array.isArray(handlerResult)\n          ) {\n            Object.assign(finalArgs, handlerResult);\n          }\n\n          // Clean up the async handler info since we've awaited it\n          delete (finalArgs as any)._asyncHandlerPromise;\n          delete (finalArgs as any)._asyncHandlerInfo;\n        } catch (error) {\n          // Handle async handler errors - respect the handleErrors setting\n          if (this.#handleErrors) {\n            this.#displayErrorAndExit(\n              new ArgParserError(`Handler error: ${error}`, []),\n            );\n          } else {\n            throw error;\n          }\n        }\n      }\n\n      return finalArgs;\n    } catch (error) {\n      if (error instanceof ArgParserError) {\n        if (this.#handleErrors) {\n          const errorResult = this.#displayErrorAndExit(error);\n          // If autoExit is false, return the ParseResult; otherwise return empty object\n          return this.#autoExit\n            ? ({} as TParsedArgsWithRouting<any>)\n            : errorResult;\n        } else {\n          throw error;\n        }\n      } else {\n        throw error;\n      }\n    }\n  }\n\n  /**\n   * Alias for parse() method for backward compatibility\n   * Since parse() is already async, this just calls parse()\n   *\n   * @deprecated Use parse() instead. This method will be removed in a future version.\n   */\n  public parseAsync(\n    processArgs?: string[],\n    options?: IParseOptions,\n  ): Promise<TParsedArgsWithRouting<any> | ParseResult> {\n    return this.parse(processArgs, options);\n  }\n\n  /**\n   * Recursive helper for parsing arguments and handling sub-commands.\n   * This method assumes the global help check has already been performed in `parse`.\n   */\n  private async _parseRecursive(\n    argsToParse: string[],\n    currentParser: ArgParserBase,\n    accumulatedParentArgs: TParsedArgs<any>,\n    commandChainSoFar: string[],\n    options?: IParseOptions,\n    parentParser?: ArgParserBase,\n  ): Promise<RecursiveParseResult> {\n    let subCommandIndex = -1;\n    let subCommandName: string | null = null;\n\n    // Find the index of the first argument that matches a defined sub-command name\n    for (let i = 0; i < argsToParse.length; i++) {\n      const potentialSubCommand = argsToParse[i];\n      if (currentParser.#subCommands.has(potentialSubCommand)) {\n        subCommandIndex = i;\n        subCommandName = potentialSubCommand;\n        break;\n      }\n    }\n\n    // Determine which arguments belong to the current parser level\n    const argsForCurrentLevel =\n      subCommandIndex === -1\n        ? argsToParse\n        : argsToParse.slice(0, subCommandIndex);\n\n    // Parse flags for the current level using #parseFlags\n    const { parsedArgs: currentLevelArgs, firstUnconsumedIndex } =\n      await currentParser.#parseFlags(argsForCurrentLevel, options);\n\n    // Apply default values for the current parser's flags to its args\n    currentParser.#_applyDefaultValues(currentLevelArgs, currentParser);\n\n    const combinedArgsFromThisAndParents = {\n      ...accumulatedParentArgs,\n      ...currentLevelArgs,\n    };\n\n    if (subCommandIndex === -1 || subCommandName === null) {\n      if (firstUnconsumedIndex < argsForCurrentLevel.length) {\n        const unknownCommand = argsForCurrentLevel[firstUnconsumedIndex];\n        throw new ArgParserError(\n          `Unknown command: '${chalk.yellow(unknownCommand)}'`,\n          commandChainSoFar,\n        );\n      }\n\n      const finalParseResultArgs = { ...combinedArgsFromThisAndParents };\n      if (commandChainSoFar.length > 0) {\n        finalParseResultArgs[\"$commandChain\"] = commandChainSoFar;\n      }\n\n      let handlerToExecute: RecursiveParseResult[\"handlerToExecute\"] =\n        undefined;\n      if (currentParser.#handler) {\n        handlerToExecute = {\n          handler: currentParser.#handler,\n          context: {\n            args: currentLevelArgs,\n            parentArgs: accumulatedParentArgs,\n            commandChain: commandChainSoFar,\n            parser: currentParser,\n            parentParser: parentParser,\n          },\n        };\n      }\n      return { finalArgs: finalParseResultArgs, handlerToExecute };\n    }\n    if (firstUnconsumedIndex < argsForCurrentLevel.length) {\n      const unknownCommand = argsForCurrentLevel[firstUnconsumedIndex];\n      throw new ArgParserError(\n        `Unknown command: '${chalk.yellow(unknownCommand)}'`,\n        commandChainSoFar,\n      );\n    }\n\n    const subCommandConfig = currentParser.#subCommands.get(subCommandName!);\n    if (\n      !subCommandConfig ||\n      !(subCommandConfig.parser instanceof ArgParserBase)\n    ) {\n      // This should ideally not be reached if addSubCommand validated the parser instance\n      throw new ArgParserError(\n        `Internal error: Subcommand '${subCommandName!}' is misconfigured or its parser is not a valid ArgParser instance.`,\n        commandChainSoFar,\n      );\n    }\n    const nextParser = subCommandConfig.parser;\n    const nextArgs = argsToParse.slice(subCommandIndex + 1);\n    const nextCommandChain = [...commandChainSoFar, subCommandName];\n    const combinedArgsForNextLevel = {\n      ...accumulatedParentArgs,\n      ...currentLevelArgs,\n    };\n\n    return await this._parseRecursive(\n      nextArgs,\n      nextParser,\n      combinedArgsForNextLevel,\n      nextCommandChain,\n      options,\n      currentParser,\n    );\n  }\n\n  async #parseFlags(\n    args: string[],\n    options?: IParseOptions,\n  ): Promise<{\n    parsedArgs: TParsedArgs<ProcessedFlag[]>;\n    firstUnconsumedIndex: number;\n  }> {\n    let flags = this.#flagManager.flags;\n\n    // Dynamic pre-pass: run loaders first to register new flags\n    const dynamicCandidates = flags.filter(\n      (f: any) => typeof (f as any)[\"dynamicRegister\"] === \"function\",\n    );\n    if (dynamicCandidates.length > 0) {\n      const loaderOutput: TParsedArgs<ProcessedFlag[]> = Object.fromEntries(\n        dynamicCandidates.map((f) => [\n          f[\"name\"],\n          f[\"allowMultiple\"] ? [] : undefined,\n        ]),\n      ) as TParsedArgs<ProcessedFlag[]>;\n      const tmpConsumed = new Set<number>();\n\n      // Ligature pre-pass\n      for (const flagToCheck of dynamicCandidates) {\n        if (flagToCheck[\"allowLigature\"] && !flagToCheck[\"flagOnly\"]) {\n          const regex = createRegExp(\n            anyOf(\n              ...flagToCheck[\"options\"].map((option: string) => `${option}=`),\n            ),\n            oneOrMore(char).groupedAs(\"arg\"),\n          );\n          for (let i = 0; i < args.length; i++) {\n            if (tmpConsumed.has(i)) continue;\n            const matches = regex.exec(`${args[i]}`);\n            if (matches?.groups?.[\"arg\"]) {\n              await this._addToOutput(\n                flagToCheck,\n                matches.groups[\"arg\"],\n                loaderOutput,\n                options,\n              );\n              tmpConsumed.add(i);\n              if (!flagToCheck[\"allowMultiple\"]) break;\n            }\n          }\n        }\n      }\n\n      // Split pre-pass\n      for (const flagToCheck of dynamicCandidates) {\n        for (let index = 0; index < args.length; index++) {\n          if (tmpConsumed.has(index)) continue;\n          const value = args[index];\n          const nextIndex = index + 1;\n          const nextValueExists = nextIndex < args.length;\n          const nextValue = nextValueExists ? args[nextIndex] : undefined;\n          const nextValueIsFlag =\n            typeof nextValue === \"string\" && nextValue.startsWith(\"-\");\n          if (flagToCheck[\"options\"].includes(value)) {\n            tmpConsumed.add(index);\n            if (flagToCheck[\"flagOnly\"]) {\n              await this._addToOutput(flagToCheck, true, loaderOutput, options);\n            } else if (nextValueExists && !nextValueIsFlag) {\n              await this._addToOutput(\n                flagToCheck,\n                nextValue,\n                loaderOutput,\n                options,\n              );\n              tmpConsumed.add(nextIndex);\n            } else if (flagToCheck[\"type\"] === Boolean) {\n              await this._addToOutput(flagToCheck, true, loaderOutput, options);\n            }\n            if (!flagToCheck[\"allowMultiple\"]) break;\n          }\n        }\n      }\n\n      // Invoke dynamicRegister per candidate\n      for (const flagToCheck of dynamicCandidates) {\n        const val = (loaderOutput as any)[flagToCheck[\"name\"]];\n        const hasValue = flagToCheck[\"allowMultiple\"]\n          ? Array.isArray(val) && val.length > 0\n          : val !== undefined;\n        if (!hasValue) continue;\n\n        const registerFlags = (newFlags: readonly IFlag[]) => {\n          if (Array.isArray(newFlags) && newFlags.length) {\n            this.#registerDynamicFlags(newFlags);\n          }\n        };\n\n        const dyn = (flagToCheck as any)[\"dynamicRegister\"];\n        if (typeof dyn === \"function\") {\n          const maybe = dyn({\n            value: val,\n            argsSoFar: loaderOutput,\n            parser: this,\n            processArgs: args,\n            forHelp: !!options?.dynamicHelpPreload,\n            registerFlags,\n          });\n          const awaited =\n            maybe && typeof (maybe as any).then === \"function\"\n              ? await maybe\n              : maybe;\n          if (Array.isArray(awaited)) registerFlags(awaited);\n        }\n      }\n\n      // Refresh flags after dynamic registration\n      flags = this.#flagManager.flags;\n    }\n\n    const output: TParsedArgs<ProcessedFlag[]> = Object.fromEntries(\n      flags.map((flag) => [\n        flag[\"name\"],\n        flag[\"allowMultiple\"] ? [] : undefined,\n      ]),\n    ) as TParsedArgs<ProcessedFlag[]>;\n\n    let consumedIndices = new Set<number>();\n\n    for (const flagToCheck of flags) {\n      if (flagToCheck[\"allowLigature\"] && !flagToCheck[\"flagOnly\"]) {\n        const regex = createRegExp(\n          anyOf(\n            ...flagToCheck[\"options\"].map((option: string) => `${option}=`),\n          ),\n          oneOrMore(char).groupedAs(\"arg\"),\n        );\n        for (let i = 0; i < args.length; i++) {\n          if (consumedIndices.has(i)) continue;\n          const itemToCheck = args[i];\n          const matches = regex.exec(`${itemToCheck}`);\n          if (matches?.groups?.[\"arg\"]) {\n            await this._addToOutput(\n              flagToCheck,\n              matches?.groups?.[\"arg\"],\n              output,\n              options,\n            );\n            consumedIndices.add(i);\n            if (!flagToCheck[\"allowMultiple\"]) break;\n          }\n        }\n      }\n    }\n\n    for (const flagToCheck of flags) {\n      for (let index = 0; index < args.length; index++) {\n        if (consumedIndices.has(index)) continue;\n\n        const value = args[index];\n        const nextIndex = index + 1;\n        const nextValueExists = nextIndex < args.length;\n        const nextValue = nextValueExists ? args[nextIndex] : undefined;\n        const nextValueIsFlag =\n          typeof nextValue === \"string\" && nextValue.startsWith(\"-\");\n\n        if (flagToCheck[\"options\"].includes(value)) {\n          // Mark the flag itself as consumed immediately\n          consumedIndices.add(index);\n\n          if (flagToCheck[\"flagOnly\"]) {\n            await this._addToOutput(flagToCheck, true, output, options);\n          } else if (nextValueExists && !nextValueIsFlag) {\n            await this._addToOutput(flagToCheck, nextValue, output, options);\n            consumedIndices.add(nextIndex);\n          } else if (flagToCheck[\"type\"] === Boolean) {\n            await this._addToOutput(flagToCheck, true, output, options);\n          }\n          if (!flagToCheck[\"allowMultiple\"]) break;\n        }\n      }\n    }\n\n    let firstUnconsumedIndex = args.length;\n    for (let i = 0; i < args.length; i++) {\n      if (!consumedIndices.has(i)) {\n        firstUnconsumedIndex = i;\n        break;\n      }\n    }\n\n    return { parsedArgs: output, firstUnconsumedIndex };\n  }\n\n  helpText(): string {\n    const cyan = chalk.cyan;\n    const green = chalk.green;\n    const white = chalk.white;\n    const red = chalk.red;\n    const dim = chalk.dim;\n\n    let rootAppName = this.#appName;\n    let current: ArgParserBase | undefined = this;\n    while (current.#parentParser) {\n      current = current.#parentParser;\n    }\n    if (current) {\n      rootAppName = current.#appName;\n    }\n\n    const helpTitle = this.#subCommandName\n      ? `${rootAppName} ${this.#subCommandName}`\n      : rootAppName;\n\n    let help = `${cyan(`${helpTitle} Help`)} (${this.#parameters.mandatoryCharacter} = Mandatory fields):\\n\\n`;\n\n    // ---- BEGIN ADDED DIAGNOSTIC LOG ----\n    // console.log(\n    //   `[ArgParser helpText Debug] 'this' context: constructor.name = ${this?.constructor?.name}, is ArgParser instance = ${this instanceof ArgParser}, subCommandName = ${this.#subCommandName || '(root)'}`,\n    // );\n    // ---- END ADDED DIAGNOSTIC LOG ----\n\n    if (this.#description) {\n      help += `${white(this.#description)}\\n\\n`;\n    }\n\n    const indent = (level: number = 1) => \"  \".repeat(level);\n\n    if (this.#subCommands.size > 0) {\n      // Use Map.size\n      help += `${cyan(\"Available sub-commands:\")}\\n`;\n      // Iterate over Map entries, then sort\n      help += Array.from(this.#subCommands.entries())\n        .sort(([nameA], [nameB]) => nameA.localeCompare(nameB))\n        .map(([name, subCommandConfig]) => {\n          // subCommandConfig is an ISubCommand object from the map\n          const actualSubParserInstance = subCommandConfig.parser;\n\n          // Guard against misconfiguration, though addSubCommand should prevent non-ArgParser instances\n          if (!(actualSubParserInstance instanceof ArgParserBase)) {\n            return `${indent()}${green(name.padEnd(20))} [Error: Subcommand '${name}' has an invalid parser configuration]`;\n          }\n\n          let subHelp = `${indent()}${green(name.padEnd(20))} ${white(actualSubParserInstance.#description || \"\")}`;\n\n          const flagsFromSubManager =\n            actualSubParserInstance && actualSubParserInstance.#flagManager\n              ? actualSubParserInstance.#flagManager.flags\n              : undefined;\n          const subFlags = (flagsFromSubManager || []).filter(\n            (f: ProcessedFlag) => f[\"name\"] !== \"help\",\n          );\n          if (subFlags.length > 0) {\n            subHelp += `\\n${indent(2)}${dim(\"Flags:\")}`;\n            subFlags\n              .sort((a: ProcessedFlag, b: ProcessedFlag) =>\n                a[\"name\"].localeCompare(b[\"name\"]),\n              )\n              .forEach((f: ProcessedFlag) => {\n                const flagOptions = f[\"options\"]\n                  .map((opt: string) => green(opt))\n                  .join(\", \");\n                const flagDesc = Array.isArray(f[\"description\"])\n                  ? f[\"description\"][0]\n                  : f[\"description\"];\n                subHelp += `\\n${indent(3)}${flagOptions} - ${dim(flagDesc)}`;\n              });\n          } else {\n            subHelp += `\\n${indent(2)}${dim(\"Flags:\")} none`;\n          }\n\n          const subSubCommandNames = Array.from(\n            actualSubParserInstance.#subCommands.keys(),\n          ); // Get keys from actualSubParserInstance's Map\n          if (subSubCommandNames.length > 0) {\n            subHelp += `\\n${indent(2)}${dim(\"Sub-commands:\")} ${subSubCommandNames.join(\", \")}`;\n          } else {\n            subHelp += `\\n${indent(2)}${dim(\"Sub-commands:\")} none`;\n          }\n\n          return subHelp;\n        })\n        .join(\"\\n\\n\");\n      help += \"\\n\";\n    }\n\n    help += `\\n${cyan(\"Flags:\")}\\n`;\n    const localFlags = this.#flagManager.flags; // Use FlagManager for local flags\n    if (localFlags.length > 0) {\n      help += localFlags\n        .sort((flagA, flagB) => flagA[\"name\"].localeCompare(flagB[\"name\"]))\n        .map((flag: ProcessedFlag) => {\n          // Flag type is ProcessedFlag\n          const optionsText = flag[\"options\"]\n            .slice() // Create a copy before sorting (toSorted only supported by Node 20+)\n            .sort((a: string, b: string) => a.length - b.length) // Sort by length (shortest first)\n            .map((opt: string) => green(opt))\n            .join(\", \");\n          const isMandatory =\n            typeof flag.mandatory === \"function\" ? \"dynamic\" : flag.mandatory;\n          const mandatoryIndicator =\n            isMandatory === true\n              ? ` ${red(this.#parameters.mandatoryCharacter || \"*\")}`\n              : isMandatory === \"dynamic\"\n                ? ` ${dim(\"(conditionally mandatory)\")}`\n                : \"\";\n\n          const descriptionLines = Array.isArray(flag[\"description\"])\n            ? flag[\"description\"]\n            : [flag[\"description\"]];\n\n          const metaLines: string[] = [];\n\n          // Determine the type name for display\n          let typeName = \"unknown\";\n          let typeDetails: string[] = [];\n\n          if (\n            flag[\"type\"] &&\n            typeof flag[\"type\"] === \"object\" &&\n            (flag[\"type\"] as any)._def\n          ) {\n            // It's a Zod schema - show JSON object with structure\n            typeName = \"JSON object\";\n            try {\n              // Try to generate a simple structure preview\n              const zodSchema = flag[\"type\"] as any;\n              const def = zodSchema._def;\n\n              // In Zod v4, check for object shape directly (typeName might be undefined)\n              if (def.shape) {\n                const shape =\n                  typeof def.shape === \"function\" ? def.shape() : def.shape;\n                const properties = Object.keys(shape);\n                if (properties.length > 0) {\n                  if (properties.length <= 4) {\n                    typeDetails.push(`Properties: ${properties.join(\", \")}`);\n                  } else {\n                    typeDetails.push(\n                      `Properties: ${properties.slice(0, 4).join(\", \")}, ... (${properties.length} total)`,\n                    );\n                  }\n                }\n              }\n\n              // Add a hint about JSON format\n              typeDetails.push(\"Expected: JSON string\");\n            } catch (error) {\n              // Fallback if schema introspection fails\n              typeDetails.push(\"Expected: JSON string\");\n            }\n          } else if (typeof flag[\"type\"] === \"function\") {\n            typeName = flag[\"type\"].name || \"custom function\";\n            // Make the type names more user-friendly\n            if (typeName === \"Boolean\") typeName = \"boolean\";\n            if (typeName === \"String\") typeName = \"string\";\n            if (typeName === \"Number\") typeName = \"number\";\n            if (typeName === \"Array\") typeName = \"array\";\n            if (typeName === \"Object\") typeName = \"object\";\n          } else if (typeof flag[\"type\"] === \"string\") {\n            typeName = flag[\"type\"];\n          }\n\n          metaLines.push(`Type: ${typeName}`);\n\n          // Usage/example hints. If repeatable, show repeat syntax; otherwise show single value.\n          {\n            let isRepeatable = false;\n            try {\n              if (\n                typeof flag[\"type\"] === \"function\" &&\n                flag[\"type\"].name === \"Array\"\n              ) {\n                isRepeatable = true;\n              }\n              const anyType: any = flag[\"type\"] as any;\n              if (\n                anyType &&\n                typeof anyType === \"object\" &&\n                anyType._def &&\n                anyType._def.typeName === \"ZodArray\"\n              ) {\n                isRepeatable = true;\n              }\n              if (flag[\"allowMultiple\"]) isRepeatable = true;\n            } catch {}\n\n            const primaryOpt =\n              flag[\"options\"].find((o: string) => o.startsWith(\"--\")) ??\n              flag[\"options\"][0];\n            const valueHint = (flag as any)[\"valueHint\"] as string | undefined;\n\n            if (!flag[\"flagOnly\"]) {\n              if (isRepeatable) {\n                metaLines.push(\"Multiple values allowed (repeat flag)\");\n                const v1 = valueHint ?? \"value1\";\n                const v2 = valueHint ?? \"value2\";\n                metaLines.push(\n                  `Example: ${primaryOpt} ${v1} ${primaryOpt} ${v2}`,\n                );\n              } else {\n                const v = valueHint ?? \"value\";\n                metaLines.push(`Example: ${primaryOpt} ${v}`);\n              }\n            }\n          }\n\n          // Add type details for Zod schemas\n          if (typeDetails.length > 0) {\n            metaLines.push(...typeDetails);\n          }\n\n          if (flag[\"flagOnly\"]) {\n            metaLines.push(\"Flag only (no value expected)\");\n          }\n          if (\n            flag[\"defaultValue\"] !== undefined &&\n            flag[\"defaultValue\"] !== null\n          ) {\n            metaLines.push(`Default: ${JSON.stringify(flag[\"defaultValue\"])}`);\n          }\n          if (flag[\"enum\"] && flag[\"enum\"].length > 0) {\n            metaLines.push(\n              `Allowed values: ${flag[\"enum\"].map((v: any) => `'${v}'`).join(\", \")}`,\n            );\n          }\n\n          const maxOptionLength = Math.max(\n            ...localFlags.map(\n              (f: ProcessedFlag) => f[\"options\"].join(\", \").length,\n            ),\n            0,\n          );\n          const formattedOptions =\n            optionsText.padEnd(maxOptionLength + 5) + mandatoryIndicator;\n\n          return `\n${indent()}${formattedOptions}\n${indent(2)}${white(descriptionLines[0])}\n${metaLines.map((line) => `${indent(3)}${dim(line)}`).join(\"\\n\")}\n${descriptionLines\n  .slice(1)\n  .map((line) => `\\n${indent(2)}${white(line)}`)\n  .join(\"\")}\n  `.trim();\n        })\n        .join(\"\\n\\n\");\n    } else {\n      help += `${indent()}${dim(\"none\")}`;\n    }\n\n    return help;\n  }\n\n  public getSubCommand(name: string): ISubCommand | undefined {\n    return this.#subCommands.get(name);\n  }\n\n  public hasFlag(name: string): boolean {\n    // Delegates to FlagManager\n    return this.#flagManager.hasFlag(name);\n  }\n\n  /**\n   * Get flag definition by name\n   * @param name Flag name\n   * @returns Flag definition or undefined if not found\n   */\n  public getFlagDefinition(name: string): ProcessedFlag | undefined {\n    return this.#flagManager.getFlag(name);\n  }\n\n  public getCommandChain(): string[] {\n    const chain = [];\n    let currentParser: ArgParserBase | undefined = this;\n    while (currentParser && currentParser.#parentParser) {\n      chain.unshift(currentParser.#subCommandName);\n      currentParser = currentParser.#parentParser;\n    }\n    return chain;\n  }\n\n  public getLastParseResult(): TParsedArgs<ProcessedFlag[]> {\n    return this.#lastParseResult;\n  }\n\n  /**\n   * Enables fuzzy testing mode by disabling error handling and making flags optional\n   */\n  #_enableFuzzyMode(): void {\n    // Enable fuzzy mode flag\n    this.#fuzzyMode = true;\n\n    // Disable error handling to allow fuzzy tester to catch errors\n    this.#handleErrors = false;\n\n    // Recursively enable fuzzy mode for all subcommand parsers\n    for (const [, subCommand] of this.#subCommands) {\n      if (subCommand.parser instanceof ArgParserBase) {\n        subCommand.parser.#_enableFuzzyMode();\n      }\n    }\n  }\n\n  #displayErrorAndExit(error: ArgParserError): ParseResult | never {\n    let commandNameToSuggest = \"your-script\";\n\n    if (this.#appCommandName) {\n      commandNameToSuggest = this.#appCommandName;\n    } else if (this.#appName && this.#appName !== \"Argument Parser\") {\n      commandNameToSuggest = this.#appName;\n    } else if (\n      typeof process !== \"undefined\" &&\n      process.argv &&\n      process.argv[1]\n    ) {\n      try {\n        commandNameToSuggest = path.basename(process.argv[1]);\n      } catch {}\n    }\n\n    console.error(`\\n${chalk.red.bold(\"Error:\")} ${error.message}`);\n    console.error(\n      `\\n${chalk.dim(`Try '${commandNameToSuggest} --help' for usage details.`)}`,\n    );\n\n    if (this.#autoExit) {\n      if (typeof process === \"object\" && typeof process.exit === \"function\") {\n        process.exit(1 as never);\n      } else {\n        throw error;\n      }\n    } else {\n      return {\n        success: false,\n        exitCode: 1,\n        message: error.message,\n        type: \"error\",\n        shouldExit: true,\n      };\n    }\n  }\n\n  #_printRecursiveToConsole(\n    parser: ArgParserBase,\n    level: number,\n    visited: Set<ArgParserBase> = new Set(),\n  ): void {\n    const indent = \"  \".repeat(level);\n    const subIndent = \"  \".repeat(level + 1);\n    const flagIndent = \"  \".repeat(level + 2);\n\n    console.log(\n      `${indent}Parser: ${chalk.blueBright(parser.#subCommandName || parser.#appName)}`,\n    );\n    if (parser.#description) {\n      console.log(`${subIndent}Description: ${parser.#description}`);\n    }\n    console.log(`${subIndent}Options:`);\n    console.log(`${flagIndent}appName: ${parser.#appName}`);\n    console.log(\n      `${flagIndent}appCommandName: ${parser.#appCommandName ?? chalk.dim(\"undefined\")}`,\n    );\n    console.log(`${flagIndent}handleErrors: ${parser.#handleErrors}`);\n    console.log(\n      `${flagIndent}throwForDuplicateFlags: ${parser.#throwForDuplicateFlags}`,\n    );\n    console.log(\n      `${flagIndent}inheritParentFlags: ${parser.#inheritParentFlags}`,\n    );\n    console.log(`${flagIndent}Handler Defined: ${!!parser.#handler}`);\n    console.log(\n      `${subIndent}Internal Params: ${JSON.stringify(parser.#parameters)}`,\n    );\n\n    const flags = parser.#flagManager.flags;\n    if (flags.length > 0) {\n      console.log(`${subIndent}Flags (${flags.length}):`);\n      flags.forEach((flag: ProcessedFlag) => {\n        console.log(`${flagIndent}* ${chalk.green(flag[\"name\"])}:`);\n        console.log(`${flagIndent}  Options: ${flag[\"options\"].join(\", \")}`);\n        console.log(\n          `${flagIndent}  Description: ${Array.isArray(flag[\"description\"]) ? flag[\"description\"].join(\" | \") : flag[\"description\"]}`,\n        );\n        console.log(\n          `${flagIndent}  Type: ${typeof flag[\"type\"] === \"function\" ? flag[\"type\"].name || \"custom function\" : flag[\"type\"]}`,\n        );\n        console.log(\n          `${flagIndent}  Mandatory: ${typeof flag[\"mandatory\"] === \"function\" ? \"dynamic\" : (flag[\"mandatory\"] ?? false)}`,\n        );\n        console.log(\n          `${flagIndent}  Default: ${JSON.stringify(flag[\"defaultValue\"])}`,\n        );\n        console.log(`${flagIndent}  Flag Only: ${flag[\"flagOnly\"]}`);\n        console.log(`${flagIndent}  Allow Multiple: ${flag[\"allowMultiple\"]}`);\n        console.log(`${flagIndent}  Allow Ligature: ${flag[\"allowLigature\"]}`);\n        console.log(\n          `${flagIndent}  Enum: ${flag[\"enum\"] && flag[\"enum\"].length > 0 ? flag[\"enum\"].join(\", \") : \"none\"}`,\n        );\n        console.log(`${flagIndent}  Validator Defined: ${!!flag[\"validate\"]}`);\n      });\n    } else {\n      console.log(`${subIndent}Flags: ${chalk.dim(\"none\")}`);\n    }\n\n    const subCommandParsers = Array.from(parser.#subCommands.values());\n    if (subCommandParsers.length > 0) {\n      console.log(`${subIndent}Sub-Commands (${subCommandParsers.length}):`);\n      subCommandParsers.forEach((subCommand: any) => {\n        this.#_printRecursiveToConsole(subCommand.parser, level + 1, visited);\n      });\n    } else {\n      console.log(`${subIndent}Sub-Commands: ${chalk.dim(\"none\")}`);\n    }\n  }\n\n  #_buildRecursiveString(\n    parser: ArgParserBase,\n    level: number,\n    visited = new Set<ArgParserBase>(),\n  ): string {\n    // Add visited set\n    if (visited.has(parser)) return \"\"; // Prevent infinite loops for circular structures (if ever possible)\n    visited.add(parser);\n\n    let output = \"\";\n    const indent = \"  \".repeat(level);\n    const subIndent = \"  \".repeat(level + 1);\n    const flagIndent = \"  \".repeat(level + 2);\n\n    const addLine = (line: string) => {\n      output += line + \"\\\\n\";\n    };\n\n    addLine(\n      `${indent}Parser: ${parser.#subCommandName || parser.#appName}`, // #appName is guaranteed\n    );\n    if (parser.#description) {\n      addLine(`${subIndent}Description: ${parser.#description}`);\n    }\n    addLine(`${subIndent}Options:`);\n    addLine(`${flagIndent}appName: ${parser.#appName}`);\n    addLine(\n      `${flagIndent}appCommandName: ${parser.#appCommandName ?? \"undefined\"}`,\n    );\n    addLine(`${flagIndent}handleErrors: ${parser.#handleErrors}`);\n    addLine(\n      `${flagIndent}throwForDuplicateFlags: ${parser.#throwForDuplicateFlags}`,\n    );\n    addLine(`${flagIndent}inheritParentFlags: ${parser.#inheritParentFlags}`);\n    addLine(`${flagIndent}Handler Defined: ${!!parser.#handler}`);\n    addLine(\n      `${subIndent}Internal Params: ${JSON.stringify(parser.#parameters)}`,\n    );\n\n    const flags = parser.#flagManager.flags;\n    if (flags.length > 0) {\n      addLine(`${subIndent}Flags (${flags.length}):`);\n      flags.forEach((flag: ProcessedFlag) => {\n        addLine(`${flagIndent}* ${flag[\"name\"]}:`);\n        addLine(`${flagIndent}  Options: ${flag[\"options\"].join(\", \")}`);\n        addLine(\n          `${flagIndent}  Description: ${Array.isArray(flag[\"description\"]) ? flag[\"description\"].join(\" | \") : flag[\"description\"]}`,\n        );\n        let typeName = \"unknown\";\n        if (\n          flag[\"type\"] &&\n          typeof flag[\"type\"] === \"object\" &&\n          (flag[\"type\"] as any)._def\n        ) {\n          typeName = \"Zod schema\";\n        } else if (typeof flag[\"type\"] === \"function\") {\n          typeName = flag[\"type\"].name || \"custom function\";\n        } else if (typeof flag[\"type\"] === \"string\") {\n          typeName = flag[\"type\"];\n        } else if (typeof flag[\"type\"] === \"object\" && flag[\"type\"]) {\n          try {\n            typeName = (flag[\"type\"] as any).constructor?.name || \"object\";\n          } catch {\n            typeName = \"object\";\n          }\n        }\n        addLine(`${flagIndent}  Type: ${typeName}`);\n        addLine(\n          `${flagIndent}  Mandatory: ${typeof flag[\"mandatory\"] === \"function\" ? \"dynamic\" : (flag[\"mandatory\"] ?? false)}`,\n        );\n        addLine(\n          `${flagIndent}  Default: ${JSON.stringify(flag[\"defaultValue\"])}`,\n        );\n        addLine(`${flagIndent}  Flag Only: ${flag[\"flagOnly\"]}`);\n        addLine(`${flagIndent}  Allow Multiple: ${flag[\"allowMultiple\"]}`);\n        addLine(`${flagIndent}  Allow Ligature: ${flag[\"allowLigature\"]}`);\n        addLine(\n          `${flagIndent}  Enum: ${flag[\"enum\"] && flag[\"enum\"].length > 0 ? flag[\"enum\"].join(\", \") : \"none\"}`,\n        );\n        addLine(`${flagIndent}  Validator Defined: ${!!flag[\"validate\"]}`);\n      });\n    } else {\n      addLine(`${subIndent}Flags: none`);\n    }\n\n    const subCommandParsers = Array.from(parser.#subCommands.values());\n    if (subCommandParsers.length > 0) {\n      addLine(`${subIndent}Sub-Commands (${subCommandParsers.length}):`);\n      subCommandParsers.forEach((subCommand: any) => {\n        output += this.#_buildRecursiveString(\n          subCommand.parser,\n          level + 1,\n          visited,\n        );\n      });\n    } else {\n      addLine(`${subIndent}Sub-Commands: none`);\n    }\n    return output;\n  }\n\n  #_buildRecursiveJson(\n    parser: ArgParserBase,\n    visited = new Set<ArgParserBase>(),\n  ): object {\n    if (visited.has(parser))\n      return {\n        note: `Reference to already processed parser: ${parser.#subCommandName || parser.#appName}`,\n      };\n    visited.add(parser);\n\n    const config: any = {\n      parserName: parser.#subCommandName || parser.#appName, // #appName is guaranteed\n      description: parser.#description,\n      options: {\n        appName: parser.#appName,\n        appCommandName: parser.#appCommandName ?? undefined,\n        handleErrors: parser.#handleErrors,\n        throwForDuplicateFlags: parser.#throwForDuplicateFlags,\n        inheritParentFlags: parser.#inheritParentFlags,\n      },\n      handlerDefined: !!parser.#handler,\n      internalParams: parser.#parameters,\n      flags: [],\n      subCommands: {}, // Will be an object where keys are sub-command names\n    };\n\n    const flags = parser.#flagManager.flags;\n    config.flags = flags.map((flag: ProcessedFlag) => {\n      let typeName = \"unknown\";\n      if (\n        flag[\"type\"] &&\n        typeof flag[\"type\"] === \"object\" &&\n        (flag[\"type\"] as any)._def\n      ) {\n        typeName = \"Zod schema\";\n      } else if (typeof flag[\"type\"] === \"function\") {\n        typeName = flag[\"type\"].name || \"custom function\";\n      } else if (typeof flag[\"type\"] === \"string\") {\n        typeName = flag[\"type\"];\n      } else if (typeof flag[\"type\"] === \"object\" && flag[\"type\"]) {\n        try {\n          typeName = (flag[\"type\"] as any).constructor?.name || \"object\";\n        } catch {\n          typeName = \"object\";\n        }\n      }\n\n      return {\n        name: flag[\"name\"],\n        options: flag[\"options\"],\n        description: flag[\"description\"],\n        type: typeName,\n        mandatory:\n          typeof flag[\"mandatory\"] === \"function\"\n            ? \"dynamic\"\n            : (flag[\"mandatory\"] ?? false),\n        defaultValue: flag[\"defaultValue\"],\n        flagOnly: flag[\"flagOnly\"],\n        allowMultiple: flag[\"allowMultiple\"],\n        allowLigature: flag[\"allowLigature\"],\n        enum: flag[\"enum\"],\n        validatorDefined: !!flag[\"validate\"],\n      };\n    });\n\n    const subCommands = Array.from(parser.#subCommands.values());\n    if (subCommands.length > 0) {\n      subCommands.forEach((sub: any) => {\n        config.subCommands[sub.name] = this.#_buildRecursiveJson(\n          sub.parser,\n          visited,\n        );\n      });\n    }\n\n    return config;\n  }\n\n  // ===== MCP API Methods =====\n\n  /**\n   * Add an MCP resource to this parser\n   */\n  addMcpResource(config: McpResourceConfig): this {\n    this.#mcpResourcesManager.addResource(config);\n    this.#mcpNotificationsManager.notifyChange(\n      \"resources\",\n      \"added\",\n      config.name,\n    );\n    return this;\n  }\n\n  /**\n   * Remove an MCP resource by name\n   */\n  removeMcpResource(name: string): this {\n    const removed = this.#mcpResourcesManager.removeResource(name);\n    if (removed) {\n      this.#mcpNotificationsManager.notifyChange(\"resources\", \"removed\", name);\n    }\n    return this;\n  }\n\n  /**\n   * Get all registered MCP resources\n   */\n  getMcpResources(): McpResourceConfig[] {\n    return this.#mcpResourcesManager.getResources();\n  }\n\n  /**\n   * Add an MCP prompt to this parser\n   */\n  addMcpPrompt(config: McpPromptConfig): this {\n    this.#mcpPromptsManager.addPrompt(config);\n    this.#mcpNotificationsManager.notifyChange(\"prompts\", \"added\", config.name);\n    return this;\n  }\n\n  /**\n   * Remove an MCP prompt by name\n   */\n  removeMcpPrompt(name: string): this {\n    const removed = this.#mcpPromptsManager.removePrompt(name);\n    if (removed) {\n      this.#mcpNotificationsManager.notifyChange(\"prompts\", \"removed\", name);\n    }\n    return this;\n  }\n\n  /**\n   * Get all registered MCP prompts\n   */\n  getMcpPrompts(): McpPromptConfig[] {\n    return this.#mcpPromptsManager.getPrompts();\n  }\n\n  /**\n   * Add a change listener for MCP entities\n   */\n  onMcpChange(\n    listener: (event: {\n      type: McpChangeType;\n      action: string;\n      entityName?: string;\n    }) => void,\n  ): this {\n    this.#mcpNotificationsManager.addGlobalListener(listener);\n    return this;\n  }\n\n  /**\n   * Remove a change listener for MCP entities\n   */\n  offMcpChange(\n    listener: (event: {\n      type: McpChangeType;\n      action: string;\n      entityName?: string;\n    }) => void,\n  ): this {\n    this.#mcpNotificationsManager.removeGlobalListener(listener);\n    return this;\n  }\n\n  /**\n   * Get the MCP notifications manager (for advanced usage)\n   */\n  getMcpNotificationsManager(): McpNotificationsManager {\n    return this.#mcpNotificationsManager;\n  }\n\n  /**\n   * Get the MCP resources manager (for advanced usage)\n   */\n  getMcpResourcesManager(): McpResourcesManager {\n    return this.#mcpResourcesManager;\n  }\n\n  /**\n   * Get the MCP prompts manager (for advanced usage)\n   */\n  getMcpPromptsManager(): McpPromptsManager {\n    return this.#mcpPromptsManager;\n  }\n\n  /**\n   * Handles the --s-save-to-env system flag at the final parser level\n   */\n  #_handleSaveToEnvFlag(\n    processArgs: string[],\n    parserChain: ArgParserBase[],\n  ): boolean | ParseResult {\n    try {\n      const result = this.#configurationManager.handleSaveToEnvFlag(\n        processArgs,\n        parserChain,\n      );\n      if (result) {\n        // Configuration was saved successfully\n        return this._handleExit(\n          0,\n          \"Configuration saved successfully\",\n          \"success\",\n        );\n      }\n      return result;\n    } catch (error) {\n      // Configuration save failed\n      return this._handleExit(\n        1,\n        error instanceof Error ? error.message : String(error),\n        \"error\",\n      );\n    }\n  }\n\n  /**\n   * Handles the --s-build-dxt system flag to generate DXT packages for MCP servers\n   */\n  async #_handleBuildDxtFlag(\n    processArgs: string[],\n    buildDxtIndex: number,\n  ): Promise<boolean | ParseResult> {\n    return await this.#dxtGenerator.handleBuildDxtFlag(\n      processArgs,\n      buildDxtIndex,\n    );\n  }\n\n  /**\n   * Handles the --s-mcp-serve system flag to start all MCP servers\n   */\n  async #_handleMcpServeFlag(\n    processArgs: string[],\n    _mcpServeIndex: number,\n  ): Promise<boolean | ParseResult> {\n    debug.log(\"#_handleMcpServeFlag started\");\n    // Parse transport options from command line arguments first to get log path\n    const transportOptions = this.#_parseMcpTransportOptions(processArgs);\n    debug.log(\"Transport options parsed:\", JSON.stringify(transportOptions));\n\n    // Get MCP server configuration early to access programmatic logPath\n    const mcpServerConfig = this.#_getMcpServerConfiguration();\n    debug.log(\"Got MCP server config:\", JSON.stringify(mcpServerConfig));\n\n    // Determine log path: CLI flag > log.logToFile > logPath > default\n    const effectiveLogPath =\n      transportOptions.logPath ||\n      (mcpServerConfig?.log && typeof mcpServerConfig.log === \"object\"\n        ? mcpServerConfig.log.logToFile\n        : null) ||\n      mcpServerConfig?.logPath ||\n      \"./logs/mcp.log\";\n    debug.log(\"Effective log path:\", effectiveLogPath);\n    const resolvedLogPath = resolveLogPath(effectiveLogPath);\n    debug.log(\"Resolved log path:\", resolvedLogPath);\n\n    // Setup MCP logger with console hijacking\n    let mcpLogger: any;\n    debug.log(\"About to import simple-mcp-logger\");\n    try {\n      // Try to import simple-mcp-logger if available\n      const mcpLoggerModule = await import(\"@alcyone-labs/simple-mcp-logger\");\n      debug.log(\"Successfully imported simple-mcp-logger\");\n\n      // Resolve logger configuration from MCP server config\n      const loggerConfig = this.#_resolveLoggerConfigForServe(\n        mcpServerConfig,\n        resolvedLogPath,\n      );\n\n      if (typeof loggerConfig === \"string\") {\n        mcpLogger = mcpLoggerModule.createMcpLogger(\"MCP Serve\", loggerConfig);\n      } else {\n        // Use options-based API when full config is provided to honor level and mcpMode\n        mcpLogger = mcpLoggerModule.createMcpLogger({\n          prefix: loggerConfig.prefix || \"MCP Serve\",\n          logToFile: loggerConfig.logToFile,\n          level: loggerConfig.level,\n          mcpMode: loggerConfig.mcpMode ?? true,\n        });\n      }\n\n      debug.log(\"Created MCP logger, about to hijack console\");\n      // Hijack console globally to prevent STDOUT contamination in MCP mode\n      (globalThis as any).console = mcpLogger;\n      debug.log(\"Console hijacked successfully\");\n    } catch {\n      debug.log(\"Failed to import simple-mcp-logger, using fallback\");\n      mcpLogger = {\n        mcpError: (message: string) => console.error(`[MCP Serve] ${message}`),\n      };\n    }\n    debug.log(\"MCP logger setup complete, starting MCP serve handler\");\n\n    try {\n      mcpLogger.mcpError(\n        \"Starting --s-mcp-serve system flag handler - console hijacked for MCP safety\",\n      );\n\n      if (!mcpServerConfig) {\n        mcpLogger.mcpError(\n          \"No MCP server configuration found. Use withMcp() or addMcpSubCommand() to configure MCP server.\",\n        );\n        return this._handleExit(\n          1,\n          \"No MCP server configuration found\",\n          \"error\",\n        );\n      }\n\n      mcpLogger.mcpError(\n        `Found MCP server configuration: ${mcpServerConfig.serverInfo?.name || \"unnamed\"}`,\n      );\n\n      mcpLogger.mcpError(`Using log path: ${resolvedLogPath}`);\n\n      mcpLogger.mcpError(\n        `Transport options: ${JSON.stringify(transportOptions)}`,\n      );\n\n      // Start the unified MCP server\n      try {\n        debug.log(\"About to call #_startUnifiedMcpServer\");\n        mcpLogger.mcpError(\"Starting unified MCP server with all tools\");\n        await this.#_startUnifiedMcpServer(mcpServerConfig, {\n          ...transportOptions,\n          logPath: resolvedLogPath,\n        });\n        debug.log(\"#_startUnifiedMcpServer completed\");\n        mcpLogger.mcpError(\"Successfully started unified MCP server\");\n      } catch (error) {\n        mcpLogger.mcpError(\n          `Failed to start unified MCP server: ${error instanceof Error ? error.message : String(error)}`,\n        );\n        return this._handleExit(\n          1,\n          `Failed to start MCP server: ${error instanceof Error ? error.message : String(error)}`,\n          \"error\",\n        );\n      }\n\n      mcpLogger.mcpError(\n        \"MCP server started successfully, keeping process alive\",\n      );\n\n      // Keep the process alive indefinitely\n      return new Promise(() => {});\n    } catch (error) {\n      mcpLogger.mcpError(\n        `Error in --s-mcp-serve handler: ${error instanceof Error ? error.message : String(error)}`,\n      );\n      if (error instanceof Error && error.stack) {\n        mcpLogger.mcpError(`Stack trace: ${error.stack}`);\n      }\n      return this._handleExit(\n        1,\n        `MCP serve failed: ${error instanceof Error ? error.message : String(error)}`,\n        \"error\",\n      );\n    }\n  }\n\n  /**\n   * Resolve logger configuration for MCP serve with proper priority\n   * @param mcpServerConfig MCP server configuration\n   * @param resolvedLogPath Resolved log path from CLI flags and config priority\n   * @returns Logger configuration object or string path\n   */\n  #_resolveLoggerConfigForServe(\n    mcpServerConfig: any,\n    resolvedLogPath: string,\n  ): any {\n    // Priority 1: CLI flag override (already resolved in resolvedLogPath)\n    // Priority 2: New 'log' configuration from withMcp\n    if (mcpServerConfig?.log) {\n      if (typeof mcpServerConfig.log === \"string\") {\n        // Simple string path - use resolved path\n        return {\n          prefix: \"MCP Serve\",\n          logToFile: resolvedLogPath,\n          level: \"error\", // Default level for backward compatibility\n          mcpMode: true,\n        };\n      } else {\n        // Full options object - merge with resolved path\n        // The resolvedLogPath already includes the correct priority: CLI > log.logToFile > logPath > default\n        return {\n          prefix: \"MCP Serve\",\n          level: \"error\", // Default level for backward compatibility\n          mcpMode: true,\n          ...mcpServerConfig.log,\n          // Use the resolved path which respects the proper priority order\n          logToFile: resolvedLogPath,\n        };\n      }\n    }\n\n    // Priority 3: Legacy 'logPath' configuration or CLI flag\n    // (resolvedLogPath already handles this priority)\n    return resolvedLogPath;\n  }\n\n  /**\n   * Get MCP server configuration from withMcp() or fallback to addMcpSubCommand()\n   */\n  #_getMcpServerConfiguration(): any {\n    // First, check if this is an ArgParser instance with withMcp() configuration\n    if ((this as any).getMcpServerConfig) {\n      const mcpConfig = (this as any).getMcpServerConfig();\n      if (mcpConfig) {\n        return mcpConfig;\n      }\n    }\n\n    // Fallback: look for MCP subcommands for backward compatibility\n    const mcpSubCommands = this.#_findAllMcpSubCommands();\n    if (mcpSubCommands.length > 0) {\n      // Use the first MCP subcommand configuration\n      const firstMcpCmd = mcpSubCommands[0];\n      return {\n        serverInfo: firstMcpCmd.serverInfo,\n        toolOptions: firstMcpCmd.toolOptions,\n        // Extract transport options from subcommand if available\n        defaultTransports: firstMcpCmd.subCommand.mcpOptions?.defaultTransports,\n        defaultTransport: firstMcpCmd.subCommand.mcpOptions?.defaultTransport,\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * Start a unified MCP server with all tools from the parser\n   */\n  async #_startUnifiedMcpServer(\n    mcpServerConfig: any,\n    transportOptions: {\n      transportType?: string;\n      port?: number;\n      host?: string;\n      path?: string;\n      transports?: string;\n      logPath?: string;\n      cors?: any;\n      auth?: any;\n    },\n  ): Promise<void> {\n    // We need to cast this to ArgParser to access MCP methods\n    const mcpParser = this as any;\n\n    if (\n      !mcpParser.createMcpServer ||\n      !mcpParser.startMcpServerWithTransport ||\n      !mcpParser.startMcpServerWithMultipleTransports\n    ) {\n      throw new Error(\n        \"MCP server methods not available. This parser may not support MCP functionality.\",\n      );\n    }\n\n    const { serverInfo, toolOptions, defaultTransports, defaultTransport } =\n      mcpServerConfig;\n\n    // Determine which transport configuration to use - CLI flags take precedence over programmatic defaults\n    if (transportOptions.transports) {\n      // Multiple transports specified via CLI\n      try {\n        const transportConfigs = JSON.parse(transportOptions.transports);\n        await mcpParser.startMcpServerWithMultipleTransports(\n          serverInfo,\n          transportConfigs,\n          toolOptions,\n          transportOptions.logPath,\n        );\n      } catch (error: any) {\n        throw new Error(\n          `Error parsing transports configuration: ${error.message}. Expected JSON format: '[{\"type\":\"stdio\"},{\"type\":\"sse\",\"port\":3001}]'`,\n        );\n      }\n    } else if (transportOptions.transportType) {\n      // Single transport specified via CLI flags - takes precedence over programmatic defaults\n      const transportType = transportOptions.transportType as\n        | \"stdio\"\n        | \"sse\"\n        | \"streamable-http\";\n      const finalTransportOptions = {\n        port: transportOptions.port,\n        host: transportOptions.host || \"localhost\",\n        path: transportOptions.path || \"/mcp\",\n        // Pass-through for streamable-http only; harmlessly ignored for others\n        cors: transportOptions.cors,\n        auth: transportOptions.auth,\n      };\n\n      await mcpParser.startMcpServerWithTransport(\n        serverInfo,\n        transportType,\n        finalTransportOptions,\n        toolOptions,\n        transportOptions.logPath,\n      );\n    } else if (defaultTransports && defaultTransports.length > 0) {\n      // Use preset multiple transports configuration\n      await mcpParser.startMcpServerWithMultipleTransports(\n        serverInfo,\n        defaultTransports,\n        toolOptions,\n        transportOptions.logPath,\n      );\n    } else if (defaultTransport) {\n      // Use preset single transport configuration\n      await mcpParser.startMcpServerWithTransport(\n        serverInfo,\n        defaultTransport.type,\n        {\n          port: defaultTransport.port,\n          host: defaultTransport.host,\n          path: defaultTransport.path,\n          sessionIdGenerator: defaultTransport.sessionIdGenerator,\n        },\n        toolOptions,\n        transportOptions.logPath,\n      );\n    } else {\n      // Default fallback to stdio when no transport configuration is provided\n      await mcpParser.startMcpServerWithTransport(\n        serverInfo,\n        \"stdio\",\n        {},\n        toolOptions,\n        transportOptions.logPath,\n      );\n    }\n  }\n\n  /**\n   * Find all MCP subcommands in the parser tree\n   */\n  #_findAllMcpSubCommands(): Array<{\n    subCommand: any;\n    serverInfo: any;\n    toolOptions: any;\n  }> {\n    const mcpSubCommands: Array<{\n      subCommand: any;\n      serverInfo: any;\n      toolOptions: any;\n    }> = [];\n\n    // Check current parser's subcommands\n    for (const [_name, subCommand] of this.#subCommands.entries()) {\n      if (subCommand.isMcp && subCommand.mcpServerInfo) {\n        mcpSubCommands.push({\n          subCommand: subCommand,\n          serverInfo: subCommand.mcpServerInfo,\n          toolOptions: subCommand.mcpToolOptions || {},\n        });\n      }\n    }\n\n    // Recursively check child parsers\n    for (const [_name, subCommand] of this.#subCommands.entries()) {\n      if (subCommand.parser) {\n        const childMcpCommands = (\n          subCommand.parser as ArgParserBase\n        ).#_findAllMcpSubCommands();\n        mcpSubCommands.push(...childMcpCommands);\n      }\n    }\n\n    return mcpSubCommands;\n  }\n\n  /**\n   * Parse MCP transport options from command line arguments\n   * Uses system flags (--s-mcp-*) to avoid collisions with user flags\n   */\n  #_parseMcpTransportOptions(processArgs: string[]): {\n    transportType?: string;\n    port?: number;\n    host?: string;\n    path?: string;\n    transports?: string;\n    logPath?: string;\n    cors?: any;\n    auth?: any;\n  } {\n    const options: {\n      transportType?: string;\n      port?: number;\n      host?: string;\n      path?: string;\n      transports?: string;\n      logPath?: string;\n      cors?: any;\n      auth?: any;\n    } = {};\n\n    // Look for transport-related system flags\n    for (let i = 0; i < processArgs.length; i++) {\n      const arg = processArgs[i];\n      const nextArg = processArgs[i + 1];\n\n      switch (arg) {\n        case \"--s-mcp-transport\":\n          if (nextArg && !nextArg.startsWith(\"-\")) {\n            options.transportType = nextArg;\n            i++; // Skip next arg since we consumed it\n          }\n          break;\n        case \"--s-mcp-port\":\n          if (nextArg && !nextArg.startsWith(\"-\")) {\n            options.port = parseInt(nextArg, 10);\n            i++; // Skip next arg since we consumed it\n          }\n          break;\n        case \"--s-mcp-host\":\n          if (nextArg && !nextArg.startsWith(\"-\")) {\n            options.host = nextArg;\n            i++; // Skip next arg since we consumed it\n          }\n          break;\n        case \"--s-mcp-path\":\n          if (nextArg && !nextArg.startsWith(\"-\")) {\n            options.path = nextArg;\n            i++; // Skip next arg since we consumed it\n          }\n          break;\n        case \"--s-mcp-transports\":\n          if (nextArg && !nextArg.startsWith(\"-\")) {\n            options.transports = nextArg;\n            i++; // Skip next arg since we consumed it\n          }\n          break;\n        case \"--s-mcp-log-path\":\n          if (nextArg && !nextArg.startsWith(\"-\")) {\n            options.logPath = nextArg;\n            i++; // Skip next arg since we consumed it\n          }\n          break;\n        // Streamable HTTP extras (accept JSON string)\n        case \"--s-mcp-cors\":\n          if (nextArg && !nextArg.startsWith(\"-\")) {\n            try {\n              options.cors = JSON.parse(nextArg);\n            } catch {\n              options.cors = nextArg;\n            }\n            i++;\n          }\n          break;\n        case \"--s-mcp-auth\":\n          if (nextArg && !nextArg.startsWith(\"-\")) {\n            try {\n              options.auth = JSON.parse(nextArg);\n            } catch {\n              options.auth = nextArg;\n            }\n            i++;\n          }\n          break;\n        // Backward compatibility: support old flags but with deprecation warning\n        case \"--transport\":\n        case \"--port\":\n        case \"--host\":\n        case \"--path\":\n        case \"--transports\":\n          console.warn(\n            `Warning: ${arg} is deprecated. Use --s-mcp-${arg.slice(2)} instead.`,\n          );\n          // Fall through to handle the old flag for now\n          if (arg === \"--transport\" && nextArg && !nextArg.startsWith(\"-\")) {\n            options.transportType = nextArg;\n            i++;\n          } else if (arg === \"--port\" && nextArg && !nextArg.startsWith(\"-\")) {\n            options.port = parseInt(nextArg, 10);\n            i++;\n          } else if (arg === \"--host\" && nextArg && !nextArg.startsWith(\"-\")) {\n            options.host = nextArg;\n            i++;\n          } else if (arg === \"--path\" && nextArg && !nextArg.startsWith(\"-\")) {\n            options.path = nextArg;\n            i++;\n          } else if (\n            arg === \"--transports\" &&\n            nextArg &&\n            !nextArg.startsWith(\"-\")\n          ) {\n            options.transports = nextArg;\n            i++;\n          }\n          break;\n      }\n    }\n\n    return options;\n  }\n}\n","/**\n * Utilities for MCP (Model Context Protocol) compatibility\n */\n\n/**\n * Sanitizes a tool name to comply with MCP naming requirements.\n * MCP tool names must match the pattern: ^[a-zA-Z0-9_-]{1,64}$\n * \n * @param name The original tool name\n * @returns A sanitized tool name that complies with MCP requirements\n */\nexport function sanitizeMcpToolName(name: string): string {\n  if (!name || typeof name !== \"string\") {\n    throw new Error(\"Tool name must be a non-empty string\");\n  }\n\n  // Replace invalid characters with underscores\n  let sanitized = name.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n\n  // Ensure the name is not empty or only underscores after sanitization\n  if (!sanitized || /^_+$/.test(sanitized)) {\n    sanitized = \"tool\";\n  }\n\n  // Truncate to 64 characters if necessary\n  if (sanitized.length > 64) {\n    sanitized = sanitized.substring(0, 64);\n  }\n\n  return sanitized;\n}\n\n/**\n * Validates if a tool name complies with MCP naming requirements.\n * MCP tool names must match the pattern: ^[a-zA-Z0-9_-]{1,64}$\n * \n * @param name The tool name to validate\n * @returns True if the name is valid, false otherwise\n */\nexport function isValidMcpToolName(name: string): boolean {\n  if (!name || typeof name !== \"string\") {\n    return false;\n  }\n  \n  const mcpNamePattern = /^[a-zA-Z0-9_-]{1,64}$/;\n  return mcpNamePattern.test(name);\n}\n","import { z } from \"zod\";\nimport type { ZodRawShape, ZodTypeAny } from \"zod\";\nimport { createMcpLogger } from \"@alcyone-labs/simple-mcp-logger\";\nimport { ArgParserBase } from \"../core/ArgParserBase\";\nimport type {\n  IFlag,\n  IHandlerContext,\n  ProcessedFlag,\n  TParsedArgs,\n} from \"../core/types\";\n// Import the centralized utility functions\nimport {\n  createOutputSchema,\n  getJsonSchemaTypeFromFlag,\n} from \"../core/types.js\";\nimport { sanitizeMcpToolName } from \"./mcp-utils\";\n\n// Assuming these types are correctly exported from src/index.ts\n\n/**\n * Standard MCP response format\n */\nexport interface McpResponse {\n  content: Array<{\n    type: \"text\";\n    text: string;\n  }>;\n  isError?: boolean;\n  structuredContent?: any;\n}\n\n/**\n * Create a standardized MCP success response\n */\nexport function createMcpSuccessResponse(data: any): McpResponse {\n  return {\n    content: [\n      {\n        type: \"text\",\n        text: typeof data === \"string\" ? data : JSON.stringify(data, null, 2),\n      },\n    ],\n  };\n}\n\n/**\n * Create a standardized MCP error response\n */\nexport function createMcpErrorResponse(error: string | Error): McpResponse {\n  const errorMessage = error instanceof Error ? error.message : error;\n  const errorData = { error: errorMessage, success: false };\n  return {\n    isError: true,\n    content: [\n      {\n        type: \"text\",\n        text: `Error: ${errorMessage}`,\n      },\n    ],\n    structuredContent: errorData,\n  };\n}\n\n/**\n * Convert a single ArgParser flag to JSON Schema property\n */\nexport function convertFlagToJsonSchemaProperty(flag: IFlag | ProcessedFlag): {\n  property: any;\n  isRequired: boolean;\n} {\n  // Handle Zod schemas specially - use Zod v4's native JSON Schema support\n  if (flag.type && typeof flag.type === \"object\" && flag.type._def) {\n    const zodSchema = flag.type as ZodTypeAny;\n\n    try {\n      const property = z.toJSONSchema(zodSchema);\n\n      if (flag.description) {\n        property.description = flag.description;\n      }\n\n      const isRequired = !!(flag.mandatory || (flag as any).required);\n\n      return { property, isRequired };\n    } catch (error) {\n      // Fallback if JSON Schema conversion fails\n      console.warn(`Failed to convert Zod schema to JSON Schema for flag '${flag.name}':`, error);\n      const property = {\n        type: \"object\" as const,\n        description: flag.description || `${flag.name} parameter (Zod schema)`,\n      };\n      const isRequired = !!(flag.mandatory || (flag as any).required);\n      return { property, isRequired };\n    }\n  }\n\n  const property: any = {\n    type: getJsonSchemaTypeFromFlag(flag.type),\n    description: flag.description || `${flag.name} parameter`,\n  };\n\n  // Handle enums\n  if (flag.enum && Array.isArray(flag.enum)) {\n    property.enum = flag.enum;\n  }\n\n  // Handle default values\n  const defaultValue = (flag as any).defaultValue || (flag as any).default;\n  if (defaultValue !== undefined) {\n    property.default = defaultValue;\n  } else if (\n    flag.flagOnly &&\n    getJsonSchemaTypeFromFlag(flag.type) === \"boolean\"\n  ) {\n    // For flagOnly boolean flags, default to false when not explicitly set\n    property.default = false;\n  }\n\n  // Handle array items\n  if (flag.type === \"array\" && (flag as any).itemType) {\n    property.items = {\n      type: getJsonSchemaTypeFromFlag((flag as any).itemType),\n    };\n  }\n\n  // Determine if required\n  const isRequired = !!(flag.mandatory || (flag as any).required);\n\n  return { property, isRequired };\n}\n\n/**\n * Convert ArgParser flags to MCP JSON Schema\n */\nexport function convertFlagsToJsonSchema(\n  flags: readonly (IFlag | ProcessedFlag)[],\n): {\n  type: \"object\";\n  properties: Record<string, any>;\n  required: string[];\n} {\n  const properties: Record<string, any> = {};\n  const required: string[] = [];\n\n  for (const flag of flags) {\n    // Skip help flag and system flags\n    if (flag.name === \"help\" || flag.name.startsWith(\"s-\")) {\n      continue;\n    }\n\n    const { property, isRequired } = convertFlagToJsonSchemaProperty(flag);\n    properties[flag.name] = property;\n\n    if (isRequired) {\n      required.push(flag.name);\n    }\n  }\n\n  return {\n    type: \"object\",\n    properties,\n    required,\n  };\n}\n\n/**\n * Convert ArgParser flags to Zod schema for MCP tools\n */\nexport function convertFlagsToZodSchema(\n  flags: readonly (IFlag | ProcessedFlag)[],\n): ZodTypeAny {\n  const zodProperties: Record<string, ZodTypeAny> = {};\n\n  for (const flag of flags) {\n    // Skip help flag and system flags\n    if (flag.name === \"help\" || flag.name.startsWith(\"s-\")) {\n      continue;\n    }\n\n    const zodSchema = mapArgParserFlagToZodSchema(flag);\n    zodProperties[flag.name] = zodSchema;\n  }\n\n  return z.object(zodProperties);\n}\n\n/**\n * Simplified response format for testing and validation\n */\nexport interface SimplifiedToolResponse {\n  success: boolean;\n  data?: any;\n  error?: string;\n  message?: string;\n  exitCode?: number;\n}\n\n/**\n * Extract simplified response from MCP protocol response\n */\nexport function extractSimplifiedResponse(\n  mcpResponse: any,\n): SimplifiedToolResponse {\n  // Handle responses that are already in simplified format\n  if (\n    typeof mcpResponse === \"object\" &&\n    mcpResponse !== null &&\n    \"success\" in mcpResponse\n  ) {\n    return {\n      success: mcpResponse.success,\n      data: mcpResponse.data,\n      error: mcpResponse.error || mcpResponse.message, // Ensure error is populated\n      message: mcpResponse.message || mcpResponse.error, // Ensure message is populated\n      exitCode: mcpResponse.exitCode,\n    };\n  }\n\n  // Handle error responses\n  if (mcpResponse.isError) {\n    const errorMessage = mcpResponse.content?.[0]?.text || \"Unknown error\";\n    return {\n      success: false,\n      error: errorMessage,\n      message: errorMessage, // Include message field for test compatibility\n      data: { error: errorMessage }, // Include data field for test compatibility\n      exitCode: 1,\n    };\n  }\n\n  // Handle structured content (when output schema is used)\n  if (mcpResponse.structuredContent) {\n    return {\n      success: true,\n      data: mcpResponse.structuredContent,\n    };\n  }\n\n  // Handle standard MCP content format\n  if (mcpResponse.content && Array.isArray(mcpResponse.content)) {\n    try {\n      // Try to parse JSON from the text content\n      const textContent = mcpResponse.content[0]?.text;\n      if (textContent) {\n        const parsedData = JSON.parse(textContent);\n        return {\n          success: true,\n          data: parsedData,\n        };\n      }\n    } catch {\n      // If parsing fails, return the raw text\n      return {\n        success: true,\n        data: mcpResponse.content[0]?.text || \"No content\",\n      };\n    }\n  }\n\n  // Fallback for unexpected formats\n  return {\n    success: false,\n    error: \"Unexpected response format\",\n    exitCode: 1,\n  };\n}\n\n// Structural type for what MCP server.tool() expects\nexport interface IMcpToolStructure {\n  name: string;\n  description?: string;\n  inputSchema: ZodTypeAny;\n  outputSchema?: ZodTypeAny;\n  execute: (args: any) => Promise<any>;\n  executeForTesting?: (args: any) => Promise<SimplifiedToolResponse>;\n}\n\nfunction mapArgParserFlagToZodSchema(flag: IFlag | ProcessedFlag): ZodTypeAny {\n  const flagTypeOpt = flag[\"type\"];\n\n  // Handle Zod schemas directly - return them as-is\n  if (flagTypeOpt && typeof flagTypeOpt === \"object\" && flagTypeOpt._def) {\n    return flagTypeOpt as ZodTypeAny;\n  }\n\n  let zodSchema: ZodTypeAny = z.string(); // Initialize with default value\n  let typeName: string;\n\n  if (typeof flagTypeOpt === \"function\") {\n    typeName = flagTypeOpt.name.toLowerCase().replace(\"constructor\", \"\");\n  } else {\n    typeName = String(flagTypeOpt).toLowerCase();\n  }\n\n  const flagEnum = flag[\"enum\"];\n  const allowMultiple = flag[\"allowMultiple\"];\n\n  // Handle array flags (allowMultiple: true)\n  if (allowMultiple) {\n    let itemSchema: ZodTypeAny;\n\n    if (flagEnum && Array.isArray(flagEnum) && flagEnum.length > 0) {\n      if (flagEnum.every((e) => typeof e === \"string\")) {\n        itemSchema = z.enum(flagEnum as [string, ...string[]]);\n      } else if (flagEnum.every((e) => typeof e === \"number\")) {\n        const literalSchemas = flagEnum.map((val) => z.literal(val));\n        if (literalSchemas.length === 1) {\n          itemSchema = literalSchemas[0];\n        } else {\n          itemSchema = z.union(\n            literalSchemas as unknown as [\n              ZodTypeAny,\n              ZodTypeAny,\n              ...ZodTypeAny[],\n            ],\n          );\n        }\n      } else {\n        itemSchema = z.string();\n      }\n    } else {\n      // Default item type based on flag type\n      switch (typeName) {\n        case \"number\":\n          itemSchema = z.number();\n          break;\n        case \"boolean\":\n          itemSchema = z.boolean();\n          break;\n        default:\n          itemSchema = z.string();\n          break;\n      }\n    }\n\n    zodSchema = z.array(itemSchema);\n  } else {\n    // Handle non-array flags\n    switch (typeName) {\n      case \"string\":\n        zodSchema =\n          flagEnum &&\n          Array.isArray(flagEnum) &&\n          flagEnum.length > 0 &&\n          flagEnum.every((e) => typeof e === \"string\")\n            ? z.enum(flagEnum as [string, ...string[]])\n            : z.string();\n        break;\n      case \"number\":\n        if (\n          flagEnum &&\n          Array.isArray(flagEnum) &&\n          flagEnum.length > 0 &&\n          flagEnum.every((e) => typeof e === \"number\")\n        ) {\n          const literalSchemas = flagEnum.map((val) => z.literal(val));\n          if (literalSchemas.length === 1) {\n            zodSchema = literalSchemas[0];\n          } else if (literalSchemas.length >= 2) {\n            zodSchema = z.union(\n              literalSchemas as unknown as [\n                ZodTypeAny,\n                ZodTypeAny,\n                ...ZodTypeAny[],\n              ],\n            );\n          } else {\n            zodSchema = z.number();\n          }\n        } else {\n          zodSchema = z.number();\n        }\n        break;\n      case \"boolean\":\n        zodSchema = z.boolean();\n        break;\n      case \"array\":\n        const itemSchema =\n          flagEnum &&\n          Array.isArray(flagEnum) &&\n          flagEnum.length > 0 &&\n          flagEnum.every((e) => typeof e === \"string\")\n            ? z.enum(flagEnum as [string, ...string[]])\n            : z.string(); // Default item type for arrays\n        zodSchema = z.array(itemSchema);\n        break;\n      case \"object\":\n        zodSchema = z.record(z.string(), z.any());\n        break;\n      default:\n        const logger = createMcpLogger(\"MCP Integration\");\n        logger.mcpError(\n          `Flag '${flag[\"name\"]}' has an unknown type '${typeName}'. Defaulting to z.string().`,\n        );\n        zodSchema = z.string();\n        break;\n    }\n  }\n\n  const description = flag[\"description\"];\n  if (description) {\n    zodSchema = zodSchema.describe(\n      Array.isArray(description) ? description.join(\"\\n\") : description,\n    );\n  }\n\n  const defaultValue = flag[\"defaultValue\"];\n  if (defaultValue !== undefined) {\n    zodSchema = zodSchema.default(defaultValue);\n  } else if (!flag[\"mandatory\"]) {\n    zodSchema = zodSchema.optional();\n  }\n  return zodSchema;\n}\n\nexport interface GenerateMcpToolsOptions {\n  outputSchemaMap?: Record<string, ZodTypeAny>;\n  defaultOutputSchema?: ZodTypeAny;\n  /** Automatically generate output schemas for tools that don't have explicit schemas */\n  autoGenerateOutputSchema?:\n    | boolean\n    | keyof typeof import(\"../core/types\").OutputSchemaPatterns;\n  generateToolName?: (commandPath: string[], appName?: string) => string;\n  includeSubCommands?: boolean;\n  toolNamePrefix?: string;\n  toolNameSuffix?: string;\n}\n\ninterface ISpecialParseResultProps {\n  $commandChain?: string[];\n  $error?: { type: string; message: string; details?: any };\n  handlerResponse?: any;\n}\nexport type IParseExecutionResult = TParsedArgs<ProcessedFlag[]> &\n  ISpecialParseResultProps;\n\nexport function generateMcpToolsFromArgParser(\n  rootParser: ArgParserBase,\n  options?: GenerateMcpToolsOptions,\n): IMcpToolStructure[] {\n  const tools: IMcpToolStructure[] = [];\n  const visitedParsers = new Set<ArgParserBase>();\n\n  function buildToolsRecursively(\n    currentParser: ArgParserBase,\n    commandPathParts: string[],\n  ) {\n    if (visitedParsers.has(currentParser)) return;\n    visitedParsers.add(currentParser);\n\n    const typedRootParser = rootParser as any;\n    const typedCurrentParser = currentParser as any;\n\n    const appName = typedRootParser.getAppName\n      ? typedRootParser.getAppName()\n      : typedRootParser[\"#appName\"];\n    const currentParserDescription = typedCurrentParser.getDescription\n      ? typedCurrentParser.getDescription()\n      : typedCurrentParser[\"#description\"];\n    const currentParserHandler = typedCurrentParser.getHandler\n      ? typedCurrentParser.getHandler()\n      : typedCurrentParser[\"#handler\"];\n\n    // ArgParser.ts (line 196) has a public getter `get flags()`\n    const currentParserFlags = typedCurrentParser.flags as (\n      | IFlag\n      | ProcessedFlag\n    )[];\n\n    const subCommandsMap = typedCurrentParser.getSubCommands\n      ? typedCurrentParser.getSubCommands()\n      : typedCurrentParser[\"#subCommands\"];\n    const currentParserSubCommands = subCommandsMap\n      ? Array.from(subCommandsMap.values())\n      : [];\n\n    let currentParserCommandName = typedCurrentParser.getAppCommandName\n      ? typedCurrentParser.getAppCommandName()\n      : typedCurrentParser[\"#appCommandName\"];\n    if (!currentParserCommandName && currentParser !== rootParser) {\n      currentParserCommandName = typedCurrentParser.getSubCommandName\n        ? typedCurrentParser.getSubCommandName()\n        : typedCurrentParser[\"#subCommandName\"];\n    }\n\n    // For sub-commands, prefer the command path over the inherited command name\n    if (currentParser !== rootParser && commandPathParts.length > 0) {\n      currentParserCommandName = commandPathParts[commandPathParts.length - 1];\n    }\n    const currentParserCommandNameOrAppName =\n      currentParserCommandName || appName;\n\n    const effectiveCommandName =\n      currentParserCommandName ||\n      (commandPathParts.length > 0\n        ? commandPathParts[commandPathParts.length - 1]\n        : appName);\n\n    let toolName: string;\n    if (options?.generateToolName) {\n      toolName = options.generateToolName(commandPathParts, appName);\n    } else {\n      // For root parser, use the command name directly\n      if (currentParser === rootParser) {\n        toolName = currentParserCommandNameOrAppName || appName || \"root_cmd\";\n      } else {\n        // For sub-parsers, use the effective command name or the last part of the path\n        toolName = effectiveCommandName || \"cmd\";\n      }\n\n      // Clean up the tool name for MCP compatibility\n      toolName = sanitizeMcpToolName(toolName);\n    }\n    if (!toolName)\n      toolName = currentParser === rootParser && appName ? appName : \"cmd\";\n\n    // Apply prefix and suffix if provided\n    if (options?.toolNamePrefix) {\n      toolName = options.toolNamePrefix + toolName;\n    }\n    if (options?.toolNameSuffix) {\n      toolName = toolName + options.toolNameSuffix;\n    }\n\n    if (currentParserHandler) {\n      const flags = currentParserFlags as ProcessedFlag[];\n      const zodProperties: Record<string, ZodTypeAny> = {};\n      const hasHelpFlag = flags.some((flag) => flag[\"name\"] === \"help\");\n\n      for (const flag of flags) {\n        // Skip help flag - it doesn't make sense in MCP tool context\n        if (flag[\"name\"] === \"help\") continue;\n\n        let flagSchema = mapArgParserFlagToZodSchema(flag);\n\n        // If there's a help flag, make mandatory fields optional to allow help to work\n        // This is necessary because MCP SDK validates the schema before our execute function runs\n        if (hasHelpFlag && flag[\"mandatory\"]) {\n          flagSchema = flagSchema.optional();\n        }\n\n        zodProperties[flag[\"name\"]] = flagSchema;\n      }\n      const inputSchema = z.object(zodProperties);\n\n      let outputSchema: ZodTypeAny | undefined;\n\n      // Priority order: explicit schema map > default schema > auto-generated schema\n      if (options?.outputSchemaMap && options.outputSchemaMap[toolName]) {\n        const customSchema = options.outputSchemaMap[toolName];\n        outputSchema =\n          typeof customSchema === \"object\" &&\n          customSchema !== null &&\n          !customSchema._def\n            ? z.object(customSchema as unknown as ZodRawShape)\n            : customSchema;\n      } else if (options?.defaultOutputSchema) {\n        outputSchema = options.defaultOutputSchema;\n      } else if (options?.autoGenerateOutputSchema) {\n        // Auto-generate output schema based on the option value\n        if (typeof options.autoGenerateOutputSchema === \"string\") {\n          // Use specific pattern\n          outputSchema = createOutputSchema(options.autoGenerateOutputSchema);\n        } else if (options.autoGenerateOutputSchema === true) {\n          // Use default success/error pattern\n          outputSchema = createOutputSchema(\"successWithData\");\n        }\n      }\n\n      const tool: IMcpToolStructure = {\n        name: toolName,\n        description:\n          currentParserDescription || `Executes the ${toolName} command.`,\n        inputSchema: inputSchema,\n        outputSchema: outputSchema,\n        async execute(mcpInputArgs: Record<string, any>) {\n          if (process.env[\"MCP_DEBUG\"]) {\n            console.error(\n              `[MCP Execute] Starting execution for tool '${toolName}'`,\n            );\n            console.error(\n              `[MCP Execute] Input args:`,\n              JSON.stringify(mcpInputArgs, null, 2),\n            );\n          }\n\n          // Check if help is requested first, before any other processing\n          if (mcpInputArgs[\"help\"] === true) {\n            // Generate help text for the specific command path\n            let helpParser = rootParser;\n            const pathParts = [...commandPathParts];\n\n            // Navigate to the correct parser for help\n            for (const part of pathParts) {\n              const subCmd = (helpParser as any).getSubCommand\n                ? (helpParser as any).getSubCommand(part)\n                : undefined;\n              if (subCmd && subCmd.parser) {\n                helpParser = subCmd.parser;\n              } else {\n                break;\n              }\n            }\n\n            const helpText = (helpParser as any).helpText\n              ? (helpParser as any).helpText()\n              : \"Help not available\";\n\n            if (options?.outputSchemaMap?.[toolName]) {\n              const helpData = {\n                success: true,\n                help: helpText,\n                files: [],\n                commandExecuted: null,\n                stderrOutput: null,\n              };\n              return {\n                content: [\n                  {\n                    type: \"text\",\n                    text: JSON.stringify(helpData, null, 2),\n                  },\n                ],\n                structuredContent: helpData,\n              };\n            }\n            return { success: true, message: helpText };\n          }\n\n          // The ArgParser will handle validation based on its flag definitions during parse.\n          // The MCP Server uses these Zod schemas directly.\n          const argv: string[] = [...commandPathParts];\n          const parserFlags = currentParserFlags as ProcessedFlag[];\n\n          for (const flagDef of parserFlags) {\n            const flagName = flagDef[\"name\"];\n            if (mcpInputArgs.hasOwnProperty(flagName)) {\n              const value = mcpInputArgs[flagName];\n              const flagType = flagDef[\"type\"];\n              const flagOptions = flagDef[\"options\"];\n              const isFlagOnly = flagDef[\"flagOnly\"];\n              const allowMultiple = flagDef[\"allowMultiple\"];\n              let flagTypeName =\n                typeof flagType === \"function\"\n                  ? flagType.name.toLowerCase().replace(\"constructor\", \"\")\n                  : String(flagType).toLowerCase();\n\n              argv.push(flagOptions[0]);\n\n              if (flagTypeName === \"boolean\") {\n                if (value === true && isFlagOnly === false)\n                  argv.push(String(value));\n                else if (value === false && isFlagOnly === false)\n                  argv.push(String(value));\n              } else if (flagTypeName === \"array\") {\n                if (Array.isArray(value)) {\n                  if (allowMultiple) {\n                    const originalArgvLength = argv.length;\n                    value.forEach((item) => {\n                      argv.push(flagOptions[0]);\n                      argv.push(String(item));\n                    });\n                    if (\n                      value.length > 0 &&\n                      argv[originalArgvLength - 1] === flagOptions[0]\n                    ) {\n                      argv.splice(originalArgvLength - 1, 1);\n                    }\n                  } else {\n                    argv.push(value.join(\",\"));\n                  }\n                } else if (value != null) argv.push(String(value));\n              } else if (value !== null && value !== undefined)\n                argv.push(String(value));\n            }\n          }\n\n          try {\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(\n                `[MCP Execute] Starting try block for tool '${toolName}'`,\n              );\n            }\n\n            // Check if this is a unified tool - if so, handle it directly without recursive parsing\n            const rootParserTyped = rootParser as any;\n            const unifiedTools = rootParserTyped._tools;\n            const isUnifiedTool = unifiedTools && unifiedTools.has(toolName);\n\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(\n                `[MCP Tool Debug] Checking tool '${toolName}' for unified execution`,\n              );\n              console.error(`[MCP Tool Debug] Has _tools:`, !!unifiedTools);\n              console.error(\n                `[MCP Tool Debug] Available tools:`,\n                unifiedTools ? Array.from(unifiedTools.keys()) : [],\n              );\n              console.error(`[MCP Tool Debug] Is unified tool:`, isUnifiedTool);\n            }\n\n            let parseResult: IParseExecutionResult;\n\n            if (isUnifiedTool) {\n              // For unified tools, bypass the recursive parse call and execute directly\n              const toolConfig = unifiedTools.get(toolName);\n              if (process.env[\"MCP_DEBUG\"]) {\n                console.error(\n                  `[MCP Tool Debug] Found unified tool config:`,\n                  !!toolConfig,\n                );\n                console.error(\n                  `[MCP Tool Debug] Has handler:`,\n                  !!(toolConfig && toolConfig.handler),\n                );\n              }\n              if (toolConfig && toolConfig.handler) {\n                try {\n                  if (process.env[\"MCP_DEBUG\"]) {\n                    console.error(\n                      `[MCP Tool Debug] Executing unified tool handler for '${toolName}'`,\n                    );\n                    console.error(\n                      `[MCP Tool Debug] Handler args:`,\n                      JSON.stringify(mcpInputArgs, null, 2),\n                    );\n                  }\n                  const getFlag = (name: string): any => {\n                    if (mcpInputArgs && mcpInputArgs[name] !== undefined) {\n                      return mcpInputArgs[name];\n                    }\n\n                    if (rootParser) {\n                      const flagDef = rootParser.getFlagDefinition(name);\n                      if (flagDef) {\n                        const envVar = flagDef[\"env\"];\n                        if (envVar) {\n                          const envKey = Array.isArray(envVar) ? envVar[0] : envVar;\n                          if (envKey && process.env[envKey]) {\n                            return process.env[envKey];\n                          }\n                        }\n                        return flagDef[\"defaultValue\"];\n                      }\n                    }\n\n                    return undefined;\n                  };\n\n                  const handlerContext: IHandlerContext<any, any> = {\n                    args: mcpInputArgs,\n                    commandChain: [toolName],\n                    parser: rootParser,\n                    parentArgs: undefined,\n                    isMcp: true,\n                    getFlag,\n                  };\n\n                  const handlerResult =\n                    await toolConfig.handler(handlerContext);\n\n                  // Create a mock parse result that mimics successful execution\n                  if (process.env[\"MCP_DEBUG\"]) {\n                    console.error(\n                      `[MCP Tool Debug] Handler result:`,\n                      JSON.stringify(handlerResult, null, 2),\n                    );\n                  }\n                  parseResult = {\n                    handlerResponse: handlerResult,\n                    $commandChain: [toolName],\n                    ...mcpInputArgs,\n                  } as IParseExecutionResult;\n                } catch (handlerError: any) {\n                  // Create error parse result\n                  if (process.env[\"MCP_DEBUG\"]) {\n                    console.error(\n                      `[MCP Tool Debug] Handler error:`,\n                      handlerError,\n                    );\n                  }\n                  parseResult = {\n                    $error: {\n                      type: \"handler_error\",\n                      message:\n                        handlerError instanceof Error\n                          ? handlerError.message\n                          : String(handlerError),\n                      details: handlerError,\n                    },\n                    ...mcpInputArgs,\n                  } as IParseExecutionResult;\n                }\n              } else {\n                // Tool not found error\n                parseResult = {\n                  $error: {\n                    type: \"tool_not_found\",\n                    message: `Unified tool '${toolName}' not found or has no handler`,\n                    details: { toolName },\n                  },\n                  ...mcpInputArgs,\n                } as IParseExecutionResult;\n              }\n            } else {\n              // For CLI-generated tools, use the original parse approach\n              // ArgParser instance (rootParser) should be configured with handleErrors: false in its constructor.\n              if (process.env[\"MCP_DEBUG\"]) {\n                console.error(\n                  `[MCP Tool Debug] Using CLI-generated tool parsing for '${toolName}'`,\n                );\n                console.error(\n                  `[MCP Tool Debug] Parse argv:`,\n                  JSON.stringify(argv, null, 2),\n                );\n              }\n              parseResult = (await rootParser.parse(\n                argv,\n              )) as IParseExecutionResult;\n            }\n\n            if (parseResult[\"$error\"]) {\n              const errorDetails = parseResult[\"$error\"]!;\n              const errPayload = {\n                message: `Cmd error: ${errorDetails.type} - ${errorDetails.message}`,\n                details: errorDetails.details,\n              };\n              // For tools with output schemas, we need to provide structured content even for errors\n              if (outputSchema) {\n                // Try to create a structured error response that matches the output schema\n                // We need to provide all required fields from the schema\n                const structuredError: any = {\n                  success: false,\n                  error: errPayload.message,\n                  message: errPayload.message,\n                };\n\n                // Try to extract schema requirements and provide default values\n                try {\n                  if (\n                    outputSchema &&\n                    typeof outputSchema === \"object\" &&\n                    outputSchema !== null &&\n                    outputSchema._def\n                  ) {\n                    const zodSchema = outputSchema as any;\n                    if (process.env[\"MCP_DEBUG\"]) {\n                      console.error(\n                        `[MCP Debug] Output schema type:`,\n                        zodSchema._def?.typeName || zodSchema._def?.type,\n                      );\n                    }\n                    if (\n                      zodSchema._def?.typeName === \"ZodObject\" ||\n                      zodSchema._def?.type === \"object\"\n                    ) {\n                      const shapeGetter = zodSchema._def?.shape;\n                      if (shapeGetter) {\n                        const shape =\n                          typeof shapeGetter === \"function\"\n                            ? shapeGetter()\n                            : shapeGetter;\n\n                        if (shape && typeof shape === \"object\") {\n                          if (process.env[\"MCP_DEBUG\"]) {\n                            console.error(\n                              `[MCP Debug] Schema shape keys:`,\n                              Object.keys(shape),\n                            );\n                          }\n\n                          // Provide default values for required fields\n                          Object.keys(shape).forEach((key) => {\n                            if (!(key in structuredError)) {\n                              const fieldSchema = shape[key];\n                              if (fieldSchema && fieldSchema._def) {\n                                switch (\n                                  fieldSchema._def.typeName ||\n                                  fieldSchema._def.type\n                                ) {\n                                  case \"ZodString\":\n                                  case \"string\":\n                                    structuredError[key] = \"\";\n                                    break;\n                                  case \"ZodNumber\":\n                                  case \"number\":\n                                    structuredError[key] = 0;\n                                    break;\n                                  case \"ZodBoolean\":\n                                  case \"boolean\":\n                                    structuredError[key] = false;\n                                    break;\n                                  case \"ZodArray\":\n                                  case \"array\":\n                                    structuredError[key] = [];\n                                    break;\n                                  case \"ZodObject\":\n                                  case \"object\":\n                                    structuredError[key] = {};\n                                    break;\n                                  default:\n                                    structuredError[key] = null;\n                                }\n                              }\n                            }\n                          });\n                        }\n                      }\n                    }\n                  }\n                } catch (schemaError) {\n                  if (process.env[\"MCP_DEBUG\"]) {\n                    console.error(\n                      `[MCP Debug] Error processing output schema for structured error:`,\n                      schemaError,\n                    );\n                  }\n                  // Continue with basic structured error if schema processing fails\n                }\n\n                if (process.env[\"MCP_DEBUG\"]) {\n                  console.error(\n                    `[MCP Debug] Final structured error:`,\n                    JSON.stringify(structuredError, null, 2),\n                  );\n                }\n\n                return {\n                  isError: true,\n                  content: [\n                    {\n                      type: \"text\",\n                      text: `Error: ${errPayload.message}`,\n                    },\n                  ],\n                  structuredContent: structuredError,\n                };\n              }\n\n              // Always return standard MCP error response format for errors\n              // Custom output schemas only apply to successful responses\n              return createMcpErrorResponse(errPayload.message);\n            }\n\n            let handlerResponse = parseResult[\"handlerResponse\"];\n\n            // Check if there's an async handler that needs to be awaited\n            if (!handlerResponse && parseResult[\"_asyncHandlerPromise\"]) {\n              try {\n                handlerResponse = await parseResult[\"_asyncHandlerPromise\"];\n              } catch (error: any) {\n                // Use standardized MCP error response for async handler errors\n                return createMcpErrorResponse(\n                  error instanceof Error ? error : new Error(String(error)),\n                );\n              }\n            }\n\n            // Check if we need to execute or re-execute the handler with proper MCP context\n            // This happens when:\n            // 1. No handler was executed (handlerResponse === undefined)\n            // 2. Handler was executed but not with MCP context (need to re-execute with isMcp: true)\n\n            // For root commands, the $commandChain might be undefined, so we need to construct it\n            let commandChain = parseResult[\"$commandChain\"];\n            if (!commandChain) {\n              // For root commands, use the app command name\n              const appCommandName = (rootParser as any).getAppCommandName\n                ? (rootParser as any).getAppCommandName()\n                : (rootParser as any)[\"#appCommandName\"];\n              if (appCommandName) {\n                commandChain = [appCommandName];\n              }\n            }\n\n            const needsHandlerExecution =\n              handlerResponse === undefined ||\n              (handlerResponse !== undefined && commandChain);\n\n            if (needsHandlerExecution && commandChain) {\n              let finalParser: ArgParserBase | undefined = rootParser;\n              let currentArgs: Record<string, any> = { ...parseResult };\n              let resolvedParentArgs: Record<string, any> | undefined =\n                undefined;\n              const chain = commandChain;\n\n              // Clean up special properties from currentArgs\n              delete currentArgs[\"handlerResponse\"];\n              delete currentArgs[\"$commandChain\"];\n              delete currentArgs[\"$error\"];\n              delete currentArgs[\"_originalInputArgs\"];\n              delete currentArgs[\"_asyncHandlerPromise\"];\n              delete currentArgs[\"_asyncHandlerInfo\"];\n              delete currentArgs[\"_fuzzyModePreventedExecution\"];\n              delete currentArgs[\"help\"]; // Remove help flag as well\n\n              for (let i = 0; i < chain.length; i++) {\n                const cmdName = chain[i];\n                // Use ArgParser's public getSubCommand method\n                const subCmdInfo = finalParser?.getSubCommand\n                  ? finalParser.getSubCommand(cmdName)\n                  : undefined;\n\n                if (subCmdInfo && subCmdInfo.parser) {\n                  // For sub-commands, we need to pass the arguments that belong to the sub-command\n                  // Since the parseResult contains all the arguments, we'll use them directly\n                  // and filter out the special properties\n                  resolvedParentArgs = { ...currentArgs };\n                  currentArgs = { ...currentArgs };\n                  // Remove special properties to get clean sub-command args\n                  delete currentArgs[\"handlerResponse\"];\n                  delete currentArgs[\"$commandChain\"];\n                  delete currentArgs[\"$error\"];\n                  delete currentArgs[\"_originalInputArgs\"];\n                  delete currentArgs[\"_asyncHandlerPromise\"];\n                  delete currentArgs[\"_asyncHandlerInfo\"];\n                  delete currentArgs[\"_fuzzyModePreventedExecution\"];\n                  delete currentArgs[\"help\"];\n\n                  finalParser = subCmdInfo.parser as ArgParserBase;\n                } else if (\n                  i === 0 &&\n                  finalParser &&\n                  cmdName ===\n                    ((finalParser as any).getAppCommandName\n                      ? (finalParser as any).getAppCommandName()\n                      : (finalParser as any)[\"#appCommandName\"] ||\n                        ((finalParser as any).getAppName\n                          ? (finalParser as any).getAppName()\n                          : (finalParser as any)[\"#appName\"]))\n                ) {\n                  currentArgs = { ...parseResult };\n                  // Clean up special properties again after resetting from parseResult\n                  delete currentArgs[\"handlerResponse\"];\n                  delete currentArgs[\"$commandChain\"];\n                  delete currentArgs[\"$error\"];\n                  delete currentArgs[\"_originalInputArgs\"];\n                  delete currentArgs[\"_asyncHandlerPromise\"];\n                  delete currentArgs[\"_asyncHandlerInfo\"];\n                  delete currentArgs[\"_fuzzyModePreventedExecution\"];\n                  delete currentArgs[\"help\"];\n                  break;\n                } else {\n                  finalParser = undefined;\n                  break;\n                }\n              }\n\n              const finalParserTyped = finalParser as any;\n              const finalHandler = finalParserTyped.getHandler\n                ? finalParserTyped.getHandler()\n                : finalParserTyped[\"#handler\"];\n\n              if (finalParser && finalHandler) {\n                const handlerToCall = finalHandler as Function;\n\n                // For MCP execution, use the original MCP input args instead of the merged parse result\n                // This prevents the nested args issue where handler response gets merged into args\n                const cleanArgs = { ...mcpInputArgs };\n                delete cleanArgs[\"help\"]; // Remove help flag\n\n                const getFlag = (name: string): any => {\n                  if (cleanArgs && cleanArgs[name] !== undefined) {\n                    return cleanArgs[name];\n                  }\n\n                  if (finalParser) {\n                    const flagDef = finalParser.getFlagDefinition(name);\n                    if (flagDef) {\n                      const envVar = flagDef[\"env\"];\n                      if (envVar) {\n                        const envKey = Array.isArray(envVar) ? envVar[0] : envVar;\n                        if (envKey && process.env[envKey]) {\n                          return process.env[envKey];\n                        }\n                      }\n                      return flagDef[\"defaultValue\"];\n                    }\n                  }\n\n                  return undefined;\n                };\n\n                const handlerContext: IHandlerContext<any, any> = {\n                  args: cleanArgs,\n                  commandChain: chain,\n                  parser: finalParser,\n                  parentArgs: resolvedParentArgs,\n                  isMcp: true,\n                  getFlag,\n                };\n                try {\n                  handlerResponse = await handlerToCall(handlerContext);\n                } catch (handlerError: any) {\n                  // Use standardized MCP error response\n                  return createMcpErrorResponse(handlerError);\n                }\n              }\n            }\n\n            // Automatically format response for MCP\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(\n                `[MCP Execute] Formatting response for tool '${toolName}'`,\n              );\n              console.error(\n                `[MCP Execute] Handler response:`,\n                JSON.stringify(handlerResponse, null, 2),\n              );\n            }\n\n            if (handlerResponse && typeof handlerResponse === \"object\") {\n              // If handler already returned MCP format with content field, use it\n              if (\n                handlerResponse.content &&\n                Array.isArray(handlerResponse.content)\n              ) {\n                // If tool has output schema, ensure structuredContent is present\n                if (outputSchema && !handlerResponse.structuredContent) {\n                  handlerResponse.structuredContent = handlerResponse;\n                }\n\n                if (process.env[\"MCP_DEBUG\"]) {\n                  console.error(\n                    `[MCP Execute] Returning MCP format response for '${toolName}'`,\n                  );\n                }\n                return handlerResponse;\n              } else {\n                // Handler returned plain data, wrap it in MCP format\n                // Always include structuredContent for object responses to ensure MCP compliance\n                // This is safe because structuredContent is optional in the MCP spec\n                const mcpResponse = {\n                  content: [\n                    {\n                      type: \"text\",\n                      text: JSON.stringify(handlerResponse, null, 2),\n                    },\n                  ],\n                  structuredContent: handlerResponse,\n                };\n\n                if (process.env[\"MCP_DEBUG\"]) {\n                  console.error(\n                    `[MCP Execute] Wrapping plain response in MCP format for '${toolName}'`,\n                  );\n                  console.error(\n                    `[MCP Execute] Final MCP response:`,\n                    JSON.stringify(mcpResponse, null, 2),\n                  );\n                }\n                return mcpResponse;\n              }\n            }\n\n            // For non-object responses, wrap in MCP format\n            const defaultResponse = handlerResponse || { success: true };\n\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(\n                `[MCP Execute] Using default response for tool '${toolName}'`,\n              );\n              console.error(\n                `[MCP Execute] Default response:`,\n                JSON.stringify(defaultResponse, null, 2),\n              );\n            }\n\n            // Always include structuredContent for object responses to ensure MCP compliance\n            if (typeof defaultResponse === \"object\") {\n              const finalResponse = {\n                content: [\n                  {\n                    type: \"text\",\n                    text: JSON.stringify(defaultResponse, null, 2),\n                  },\n                ],\n                structuredContent: defaultResponse,\n              };\n\n              if (process.env[\"MCP_DEBUG\"]) {\n                console.error(\n                  `[MCP Execute] Returning structured default response for '${toolName}'`,\n                );\n                console.error(\n                  `[MCP Execute] Final response:`,\n                  JSON.stringify(finalResponse, null, 2),\n                );\n              }\n              return finalResponse;\n            }\n\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(\n                `[MCP Execute] Returning success response for '${toolName}'`,\n              );\n            }\n            return createMcpSuccessResponse(defaultResponse);\n          } catch (e: any) {\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(\n                `[MCP Execute] Exception caught in tool '${toolName}':`,\n                e,\n              );\n            }\n\n            // Check if this is a handler error that was thrown due to handleErrors: false\n            // In this case, we want to format it consistently with the $error handling above\n            let errorMsg: string;\n\n            if (e instanceof Error && e.message) {\n              // This is likely a handler error thrown when handleErrors: false\n              errorMsg = `Cmd error: handler_error - ${e.message}`;\n            } else {\n              // Other types of errors (parsing errors, etc.)\n              errorMsg = `MCP tool exec failed: ${e.message || String(e)}`;\n            }\n\n            // For tools with output schemas, we need to provide structured content even for errors\n            // to satisfy MCP SDK validation requirements\n            if (outputSchema) {\n              // Try to create a structured error response that matches the output schema\n              const structuredError: any = {\n                success: false,\n                error: errorMsg,\n                message: errorMsg,\n              };\n\n              // Try to extract schema requirements and provide default values\n              if (\n                outputSchema &&\n                typeof outputSchema === \"object\" &&\n                outputSchema !== null &&\n                outputSchema._def\n              ) {\n                const zodSchema = outputSchema as any;\n                if (zodSchema._def.type === \"object\") {\n                  const shapeGetter = zodSchema._def.shape;\n                  const shape =\n                    typeof shapeGetter === \"function\"\n                      ? shapeGetter()\n                      : shapeGetter;\n\n                  // Provide default values for required fields\n                  Object.keys(shape).forEach((key) => {\n                    if (!(key in structuredError)) {\n                      const fieldSchema = shape[key];\n                      if (fieldSchema && fieldSchema._def) {\n                        switch (fieldSchema._def.type) {\n                          case \"string\":\n                            structuredError[key] = \"\";\n                            break;\n                          case \"number\":\n                            structuredError[key] = 0;\n                            break;\n                          case \"boolean\":\n                            structuredError[key] = false;\n                            break;\n                          case \"array\":\n                            structuredError[key] = [];\n                            break;\n                          case \"object\":\n                            structuredError[key] = {};\n                            break;\n                          default:\n                            structuredError[key] = null;\n                        }\n                      }\n                    }\n                  });\n                }\n              }\n\n              return {\n                isError: true,\n                content: [\n                  {\n                    type: \"text\",\n                    text: `Error: ${errorMsg}`,\n                  },\n                ],\n                structuredContent: structuredError,\n              };\n            }\n\n            // Always return standard MCP error response format for errors\n            // Custom output schemas only apply to successful responses\n            return createMcpErrorResponse(errorMsg);\n          }\n        },\n        async executeForTesting(\n          mcpInputArgs: Record<string, any>,\n        ): Promise<SimplifiedToolResponse> {\n          try {\n            const mcpResponse = await this.execute(mcpInputArgs);\n            return extractSimplifiedResponse(mcpResponse);\n          } catch (error: any) {\n            return {\n              success: false,\n              error: error.message || String(error),\n              exitCode: 1,\n            };\n          }\n        },\n      };\n      tools.push(tool);\n    }\n\n    const subCommands = currentParserSubCommands;\n    if (subCommands && options?.includeSubCommands !== false) {\n      for (const subCmdObj of subCommands) {\n        // Skip MCP server sub-commands to avoid infinite recursion\n        if ((subCmdObj as any).isMcp === true) {\n          continue;\n        }\n\n        const nextPathParts = [...commandPathParts, (subCmdObj as any).name];\n        buildToolsRecursively(\n          (subCmdObj as any).parser as ArgParserBase,\n          nextPathParts.filter((p) => p),\n        );\n      }\n    }\n  }\n  buildToolsRecursively(rootParser, []);\n  return tools;\n}\n","/**\n * MCP Protocol Version Configuration\n *\n * This module defines the supported MCP protocol versions and provides\n * utilities for version negotiation according to the MCP specification.\n *\n * Version Negotiation Rules (per MCP specification):\n * 1. If server supports the requested protocol version, it MUST respond with the same version\n * 2. Otherwise, server MUST respond with another protocol version it supports\n * 3. Server SHOULD respond with the latest version it supports\n * 4. If client doesn't support the server's response version, it SHOULD disconnect\n */\n\n/**\n * Official MCP protocol versions in chronological order\n * Based on the official MCP specification releases found in docs/MCP/modelcontextprotocol/docs/specification/\n *\n * According to versioning.mdx:\n * - 2025-06-18 is the **current** protocol version\n * - Previous versions are marked as **final** (complete, no changes)\n * - Draft versions are in-progress specifications\n */\nexport const MCP_PROTOCOL_VERSIONS = [\n  \"2024-11-05\", // Final - Initial stable release\n  \"2025-03-26\", // Final - Updated transport specifications\n  \"2025-06-18\", // Current - Latest stable specification\n] as const;\n\n/**\n * Draft protocol versions (in-progress specifications)\n * These are not yet ready for production use\n */\nexport const MCP_DRAFT_VERSIONS = [\n  \"draft\", // Draft - In-progress specification\n] as const;\n\n/**\n * All available protocol versions (stable + draft)\n */\nexport const ALL_MCP_VERSIONS = [\n  ...MCP_PROTOCOL_VERSIONS,\n  ...MCP_DRAFT_VERSIONS,\n] as const;\n\n/**\n * Type for stable MCP protocol versions\n */\nexport type McpProtocolVersion = (typeof MCP_PROTOCOL_VERSIONS)[number];\n\n/**\n * Type for draft MCP protocol versions\n */\nexport type McpDraftVersion = (typeof MCP_DRAFT_VERSIONS)[number];\n\n/**\n * Type for all MCP protocol versions (stable + draft)\n */\nexport type McpAnyVersion = (typeof ALL_MCP_VERSIONS)[number];\n\n/**\n * Current protocol version according to the official MCP specification\n * This is marked as \"current\" in versioning.mdx and should be the preferred version\n */\nexport const CURRENT_MCP_PROTOCOL_VERSION: McpProtocolVersion = \"2025-06-18\";\n\n/**\n * Default protocol version used by this implementation for backward compatibility\n * We start with this version but can negotiate to newer versions\n *\n * Note: The official MCP SDK may support newer versions automatically.\n * This constant represents our fallback/minimum version.\n */\nexport const DEFAULT_MCP_PROTOCOL_VERSION: McpProtocolVersion = \"2024-11-05\";\n\n/**\n * Latest stable protocol version (highest version number from stable versions)\n */\nexport const LATEST_MCP_PROTOCOL_VERSION: McpProtocolVersion =\n  MCP_PROTOCOL_VERSIONS[MCP_PROTOCOL_VERSIONS.length - 1];\n\n/**\n * Minimum supported protocol version (oldest stable version)\n */\nexport const MINIMUM_MCP_PROTOCOL_VERSION: McpProtocolVersion =\n  MCP_PROTOCOL_VERSIONS[0];\n\n/**\n * Validates if a protocol version string follows the MCP format (YYYY-MM-DD or 'draft')\n */\nexport function isValidMcpVersionFormat(version: string): boolean {\n  return /^\\d{4}-\\d{2}-\\d{2}$/.test(version) || version === \"draft\";\n}\n\n/**\n * Checks if a protocol version is an official stable MCP version\n */\nexport function isOfficialMcpVersion(\n  version: string,\n): version is McpProtocolVersion {\n  return MCP_PROTOCOL_VERSIONS.includes(version as McpProtocolVersion);\n}\n\n/**\n * Checks if a protocol version is a draft MCP version\n */\nexport function isDraftMcpVersion(version: string): version is McpDraftVersion {\n  return MCP_DRAFT_VERSIONS.includes(version as McpDraftVersion);\n}\n\n/**\n * Checks if a protocol version is any valid MCP version (stable or draft)\n */\nexport function isAnyMcpVersion(version: string): version is McpAnyVersion {\n  return ALL_MCP_VERSIONS.includes(version as McpAnyVersion);\n}\n\n/**\n * Checks if a protocol version is supported by this implementation\n * Note: The official MCP SDK may support additional versions automatically\n */\nexport function isSupportedByImplementation(version: string): boolean {\n  // We support all official stable versions and can handle draft versions\n  // The official SDK likely supports all of these automatically\n  return isAnyMcpVersion(version);\n}\n\n/**\n * Checks if a protocol version is recommended for production use\n */\nexport function isProductionReady(version: string): boolean {\n  // Only stable versions are recommended for production\n  return isOfficialMcpVersion(version);\n}\n\n/**\n * Performs version negotiation according to MCP specification\n *\n * @param requestedVersion The protocol version requested by the client\n * @returns The protocol version the server should respond with\n *\n * According to MCP specification:\n * - If server supports requested version → return SAME version (MUST)\n * - If server doesn't support requested version → return different supported version (MUST)\n * - Server SHOULD return latest version it supports\n *\n * Note: The actual MCP SDK may implement its own version negotiation.\n */\nexport function negotiateProtocolVersion(\n  requestedVersion: string,\n): McpAnyVersion {\n  // Validate format first\n  if (!isValidMcpVersionFormat(requestedVersion)) {\n    // If format is invalid, return the current/latest stable version\n    return CURRENT_MCP_PROTOCOL_VERSION;\n  }\n\n  // If we support the requested version, return it (MUST per spec)\n  if (isSupportedByImplementation(requestedVersion)) {\n    // For draft versions, we might want to negotiate to stable version in production\n    if (isDraftMcpVersion(requestedVersion)) {\n      // In production, prefer stable version over draft\n      return CURRENT_MCP_PROTOCOL_VERSION;\n    }\n    return requestedVersion as McpAnyVersion;\n  }\n\n  // If we don't support the requested version, return our current/latest version (SHOULD per spec)\n  return CURRENT_MCP_PROTOCOL_VERSION;\n}\n\n/**\n * Gets comprehensive version compatibility information\n */\nexport function getVersionCompatibilityInfo() {\n  return {\n    // Stable versions\n    stableVersions: [...MCP_PROTOCOL_VERSIONS],\n    currentVersion: CURRENT_MCP_PROTOCOL_VERSION,\n    defaultVersion: DEFAULT_MCP_PROTOCOL_VERSION,\n    latestStableVersion: LATEST_MCP_PROTOCOL_VERSION,\n    minimumVersion: MINIMUM_MCP_PROTOCOL_VERSION,\n\n    // Draft versions\n    draftVersions: [...MCP_DRAFT_VERSIONS],\n\n    // All versions\n    allSupportedVersions: [...ALL_MCP_VERSIONS],\n\n    // Version status\n    versionStatus: {\n      \"2024-11-05\": \"final\",\n      \"2025-03-26\": \"final\",\n      \"2025-06-18\": \"current\",\n      draft: \"draft\",\n    },\n  };\n}\n\n/**\n * Compares two MCP protocol versions\n * Returns: -1 if v1 < v2, 0 if v1 === v2, 1 if v1 > v2\n */\nexport function compareVersions(v1: string, v2: string): number {\n  if (v1 === v2) return 0;\n  return v1 < v2 ? -1 : 1;\n}\n\n/**\n * Finds the highest version from a list of versions\n */\nexport function getHighestVersion(versions: string[]): string | null {\n  if (versions.length === 0) return null;\n\n  return versions.reduce((highest, current) => {\n    return compareVersions(current, highest) > 0 ? current : highest;\n  });\n}\n\n/**\n * Comprehensive test data for version negotiation testing\n */\nexport const VERSION_TEST_DATA = {\n  // All supported stable versions\n  stableVersions: [...MCP_PROTOCOL_VERSIONS],\n\n  // Draft versions (may not be suitable for production)\n  draftVersions: [...MCP_DRAFT_VERSIONS],\n\n  // All supported versions\n  allSupportedVersions: [...ALL_MCP_VERSIONS],\n\n  // Versions that should be rejected/negotiated\n  unsupportedVersions: [\n    \"2020-01-01\", // Too old (before MCP existed)\n    \"2023-01-01\", // Before first official release\n    \"2024-01-01\", // Before first official release\n    \"2030-12-31\", // Future version\n    \"2026-01-01\", // Future version\n  ],\n\n  // Malformed version strings\n  malformedVersions: [\n    \"\", // Empty string\n    \"invalid\", // Non-date format\n    \"2024\", // Incomplete date\n    \"2024-13-01\", // Invalid month\n    \"2024-01-32\", // Invalid day\n    \"v2024-11-05\", // With prefix\n    \"2024.11.05\", // Wrong separator\n    \"24-11-05\", // Wrong year format\n    \"2024-11-5\", // Wrong day format\n    \"beta\", // Invalid draft name\n    \"v1.0.0\", // Semantic versioning format\n  ],\n\n  // Expected negotiation results for testing\n  expectedNegotiations: {\n    \"2024-11-05\": \"2024-11-05\", // Should return same\n    \"2025-03-26\": \"2025-03-26\", // Should return same\n    \"2025-06-18\": \"2025-06-18\", // Should return same (current)\n    draft: \"2025-06-18\", // Should negotiate to stable\n    \"2020-01-01\": \"2025-06-18\", // Should negotiate to current\n    \"2030-12-31\": \"2025-06-18\", // Should negotiate to current\n    invalid: \"2025-06-18\", // Should negotiate to current\n  },\n} as const;\n","/**\n * Zod v3/v4 compatibility layer for MCP SDK integration\n *\n * The MCP SDK currently expects Zod v3 \"raw shape\" types for input schemas,\n * but this project uses Zod v4. This module provides compatibility functions\n * to convert Zod v4 schemas to formats that the MCP SDK can understand.\n */\n\nimport { z, type ZodObject, type ZodRawShape, type ZodTypeAny } from \"zod\";\n\n/**\n * Type representing a Zod v3 compatible raw shape\n */\ntype ZodV3CompatibleShape = Record<string, ZodTypeAny>;\n\n/**\n * Type representing what the MCP SDK expects for tool registration\n */\ninterface McpSdkCompatibleSchema {\n  shape?: ZodV3CompatibleShape;\n  _def?: any;\n  _zod?: any; // MCP SDK may look for this property\n  parse?: (input: any) => any;\n  safeParse?: (input: any) => any;\n}\n\n/**\n * Converts a Zod v4 schema to a format compatible with the MCP SDK's expectations\n * for Zod v3 raw shape types.\n *\n * @param zodSchema - The Zod v4 schema to convert\n * @returns A schema format compatible with MCP SDK\n */\nexport function convertToMcpCompatibleSchema(\n  zodSchema: ZodTypeAny,\n): McpSdkCompatibleSchema {\n  // Helper to get def property from either _def (v3) or def (v4)\n  const getDefProperty = (schema: any) => schema._def || schema.def;\n\n  // If it's already a ZodObject, try to extract the shape\n  if (zodSchema instanceof z.ZodObject) {\n    try {\n      // In Zod v4, the shape is accessible via the shape property\n      const shape = (zodSchema as any).shape;\n      if (shape && typeof shape === \"object\") {\n        return {\n          shape,\n          _def: getDefProperty(zodSchema),\n          _zod: zodSchema, // Include reference to original Zod schema\n          parse: zodSchema.parse.bind(zodSchema),\n          safeParse: zodSchema.safeParse.bind(zodSchema),\n        };\n      }\n    } catch (error) {\n      console.error(\n        \"[Zod Compatibility] Failed to extract shape from ZodObject:\",\n        error,\n      );\n    }\n  }\n\n  // Try to extract shape from _def (v3) or def (v4) if available\n  const defProperty = getDefProperty(zodSchema);\n  if (defProperty && defProperty.shape) {\n    try {\n      const shapeGetter = defProperty.shape;\n      const shape =\n        typeof shapeGetter === \"function\" ? shapeGetter() : shapeGetter;\n      return {\n        shape: shape,\n        _def: defProperty,\n        _zod: zodSchema, // Include reference to original Zod schema\n        parse: zodSchema.parse.bind(zodSchema),\n        safeParse: zodSchema.safeParse.bind(zodSchema),\n      };\n    } catch (error) {\n      console.error(\n        \"[Zod Compatibility] Failed to extract shape from def property:\",\n        error,\n      );\n    }\n  }\n\n  // Fallback: create a wrapper that mimics Zod v3 behavior\n  return {\n    shape: {},\n    _def: getDefProperty(zodSchema) || {},\n    _zod: zodSchema, // Include reference to original Zod schema\n    parse: zodSchema.parse.bind(zodSchema),\n    safeParse: zodSchema.safeParse.bind(zodSchema),\n  };\n}\n\n/**\n * Creates an empty schema compatible with MCP SDK for tools with no parameters\n */\nexport function createEmptyMcpSchema(): McpSdkCompatibleSchema {\n  const emptySchema = z.object({});\n  return convertToMcpCompatibleSchema(emptySchema);\n}\n\n/**\n * Extracts the raw shape from a Zod v4 object schema in a way that's\n * compatible with what MCP SDK expects from Zod v3.\n *\n * @param zodObjectSchema - A Zod object schema\n * @returns The raw shape or empty object if extraction fails\n */\nexport function extractRawShape(\n  zodObjectSchema: ZodObject<ZodRawShape>,\n): ZodV3CompatibleShape {\n  try {\n    // Try multiple methods to extract the shape\n\n    // Method 1: Direct shape property access (Zod v4)\n    if ((zodObjectSchema as any).shape) {\n      return (zodObjectSchema as any).shape;\n    }\n\n    // Method 2: Shape from _def (fallback for Zod v3)\n    if (\n      (zodObjectSchema as any)._def &&\n      typeof (zodObjectSchema as any)._def.shape === \"function\"\n    ) {\n      return (zodObjectSchema as any)._def.shape();\n    }\n\n    // Method 3: Shape from def (Zod v4)\n    if (\n      (zodObjectSchema as any).def &&\n      typeof (zodObjectSchema as any).def.shape === \"function\"\n    ) {\n      return (zodObjectSchema as any).def.shape();\n    }\n\n    // Method 4: Static shape property from _def (Zod v3)\n    if ((zodObjectSchema as any)._def && (zodObjectSchema as any)._def.shape) {\n      const shapeValue = (zodObjectSchema as any)._def.shape;\n      return typeof shapeValue === \"function\" ? shapeValue() : shapeValue;\n    }\n\n    // Method 5: Static shape property from def (Zod v4)\n    if ((zodObjectSchema as any).def && (zodObjectSchema as any).def.shape) {\n      const shapeValue = (zodObjectSchema as any).def.shape;\n      return typeof shapeValue === \"function\" ? shapeValue() : shapeValue;\n    }\n\n    console.warn(\n      \"[Zod Compatibility] Could not extract raw shape, returning empty object\",\n    );\n    return {};\n  } catch (error) {\n    console.error(\"[Zod Compatibility] Error extracting raw shape:\", error);\n    return {};\n  }\n}\n\n/**\n * Checks if a schema is a Zod object schema\n */\nexport function isZodObjectSchema(\n  schema: any,\n): schema is ZodObject<ZodRawShape> {\n  return (\n    schema instanceof z.ZodObject ||\n    (schema &&\n      ((schema._def &&\n        (schema._def.typeName === \"ZodObject\" ||\n          schema._def.type === \"object\")) ||\n        (schema.def &&\n          (schema.def.typeName === \"ZodObject\" ||\n            schema.def.type === \"object\"))))\n  );\n}\n\n/**\n * Converts Zod v4 schemas to the specific format expected by MCP SDK tool registration.\n * This function handles the conversion for the server.registerTool() call.\n *\n * @param zodSchema - The Zod v4 schema to convert\n * @returns A schema format that MCP SDK can work with\n */\nexport function prepareMcpToolSchema(zodSchema: ZodTypeAny): any {\n  // For MCP SDK compatibility, we need to provide something that looks like Zod v3\n\n  // Add null/undefined check at the beginning\n  if (!zodSchema) {\n    console.error(\"[prepareMcpToolSchema] ERROR: zodSchema is null or undefined!\");\n    console.error(\"[prepareMcpToolSchema] Stack trace:\", new Error().stack);\n    throw new Error(\"prepareMcpToolSchema called with null or undefined zodSchema\");\n  }\n\n  // Helper to get def property from either _def (v3) or def (v4)\n  const getDefProperty = (schema: any) => schema._def || schema.def;\n\n  if (process.env[\"MCP_DEBUG\"]) {\n    console.error(\"[prepareMcpToolSchema] Input schema:\");\n    console.error(`  - Type: ${typeof zodSchema}`);\n    console.error(`  - Constructor: ${zodSchema?.constructor?.name}`);\n    console.error(`  - Has _def: ${!!zodSchema?._def}`);\n    console.error(`  - Has def: ${!!zodSchema?.def}`);\n    console.error(`  - _def content:`, zodSchema?._def);\n    console.error(`  - def content:`, zodSchema?.def);\n    console.error(`  - Has shape: ${!!(zodSchema as any)?.shape}`);\n  }\n\n  if (isZodObjectSchema(zodSchema)) {\n    if (process.env[\"MCP_DEBUG\"]) {\n      console.error(\"[prepareMcpToolSchema] Processing as ZodObject schema\");\n    }\n    // For object schemas, try to return the raw shape or a compatible wrapper\n    const rawShape = extractRawShape(zodSchema);\n\n    if (process.env[\"MCP_DEBUG\"]) {\n      console.error(\"[prepareMcpToolSchema] Extracted raw shape:\", rawShape);\n      console.error(\n        \"[prepareMcpToolSchema] Raw shape keys:\",\n        Object.keys(rawShape || {}),\n      );\n    }\n\n    // Create a completely clean Zod v3-like object that MCP SDK can understand\n    const defProperty = getDefProperty(zodSchema);\n\n    // Create object with clean prototype to avoid any Zod v4 properties\n    const compatibleSchema = Object.create(null);\n\n    // Only add the essential properties that MCP SDK expects\n    compatibleSchema._def = defProperty;\n    compatibleSchema.shape = rawShape;\n\n    // Essential methods\n    compatibleSchema.parse = zodSchema.parse.bind(zodSchema);\n    compatibleSchema.safeParse = zodSchema.safeParse.bind(zodSchema);\n\n    // Optional methods (only if they exist)\n    if (zodSchema.optional) {\n      compatibleSchema.optional = zodSchema.optional.bind(zodSchema);\n    }\n    if (zodSchema.nullable) {\n      compatibleSchema.nullable = zodSchema.nullable.bind(zodSchema);\n    }\n\n    // Store reference for debugging (but not as _zod to avoid conflicts)\n    compatibleSchema._originalSchema = zodSchema;\n\n    if (process.env[\"MCP_DEBUG\"]) {\n      console.error(\"[prepareMcpToolSchema] Created compatible schema:\");\n      console.error(`  - Has _def: ${!!compatibleSchema._def}`);\n      console.error(`  - Has shape: ${!!compatibleSchema.shape}`);\n      console.error(\n        `  - Shape keys: ${Object.keys(compatibleSchema.shape || {})}`,\n      );\n    }\n\n    return compatibleSchema;\n  }\n\n  if (process.env[\"MCP_DEBUG\"]) {\n    console.error(\"[prepareMcpToolSchema] Processing as non-object schema\");\n  }\n\n  // For non-object schemas, return minimal compatible object\n  const defProperty = getDefProperty(zodSchema);\n\n  // Create clean object without any Zod v4 properties\n  const result = Object.create(null);\n\n  // Only add essential properties\n  result._def = defProperty;\n  result.parse = zodSchema.parse.bind(zodSchema);\n  result.safeParse = zodSchema.safeParse.bind(zodSchema);\n\n  // Optional methods (only if they exist)\n  if (zodSchema.optional) {\n    result.optional = zodSchema.optional.bind(zodSchema);\n  }\n  if (zodSchema.nullable) {\n    result.nullable = zodSchema.nullable.bind(zodSchema);\n  }\n\n  // Store reference for debugging\n  result._originalSchema = zodSchema;\n\n  if (process.env[\"MCP_DEBUG\"]) {\n    console.error(\"[prepareMcpToolSchema] Non-object result:\");\n    console.error(`  - Has _def: ${!!result._def}`);\n    console.error(`  - Type: ${typeof result}`);\n  }\n\n  return result;\n}\n\n/**\n * Simple approach: Create a clean copy of Zod schema without v4-specific properties\n * This is a non-recursive version to avoid infinite loops\n */\nexport function createCleanZodSchema(zodSchema: ZodTypeAny): any {\n  if (!zodSchema) {\n    if (process.env[\"MCP_DEBUG\"]) {\n      console.error(\"[createCleanZodSchema] ERROR: zodSchema is null or undefined!\");\n    }\n    // Return a simple default schema\n    return z.object({});\n  }\n\n  if (process.env[\"MCP_DEBUG\"]) {\n    console.error(\"[createCleanZodSchema] Input schema:\");\n    console.error(`  - Type: ${typeof zodSchema}`);\n    console.error(`  - Constructor: ${zodSchema?.constructor?.name}`);\n    console.error(`  - Has ~standard: ${!!(zodSchema as any)['~standard']}`);\n    console.error(`  - Has def: ${!!(zodSchema as any).def}`);\n    console.error(`  - Has _def: ${!!(zodSchema as any)._def}`);\n  }\n\n  // Create a minimal Zod-like object with just the essential properties\n  const cleanSchema: any = {};\n\n  // Copy essential properties that MCP SDK needs\n  cleanSchema._def = (zodSchema as any)._def || (zodSchema as any).def;\n  cleanSchema.parse = (zodSchema as any).parse?.bind(zodSchema);\n  cleanSchema.safeParse = (zodSchema as any).safeParse?.bind(zodSchema);\n\n  // Copy shape if it exists (for object schemas)\n  if ((zodSchema as any).shape) {\n    cleanSchema.shape = (zodSchema as any).shape;\n  }\n\n  // Set the prototype to match the original schema\n  Object.setPrototypeOf(cleanSchema, Object.getPrototypeOf(zodSchema));\n\n  if (process.env[\"MCP_DEBUG\"]) {\n    console.error(\"[createCleanZodSchema] Clean schema created:\");\n    console.error(`  - Has ~standard: ${!!(cleanSchema as any)['~standard']}`);\n    console.error(`  - Has def: ${!!(cleanSchema as any).def}`);\n    console.error(`  - Has _def: ${!!(cleanSchema as any)._def}`);\n    console.error(`  - Has parse: ${typeof cleanSchema.parse}`);\n    console.error(`  - Has safeParse: ${typeof cleanSchema.safeParse}`);\n    console.error(`  - Has shape: ${!!(cleanSchema as any).shape}`);\n  }\n\n  return cleanSchema;\n}\n\n/**\n * Convert a Zod schema to a JSON Schema object that the MCP SDK expects\n * This is the correct approach - the MCP SDK expects JSON Schema, not Zod schemas\n */\nexport function zodToJsonSchema(zodSchema: ZodTypeAny): any {\n  if (!zodSchema) {\n    return { type: \"object\", properties: {} };\n  }\n\n  if (process.env[\"MCP_DEBUG\"]) {\n    console.error(\"[zodToJsonSchema] Converting Zod schema to JSON Schema\");\n    console.error(`  - Input type: ${typeof zodSchema}`);\n    console.error(`  - Constructor: ${zodSchema?.constructor?.name}`);\n  }\n\n  // For now, create a basic JSON Schema structure\n  // This is a simplified implementation - we can enhance it later\n  const def = (zodSchema as any)._def || (zodSchema as any).def;\n\n  if (def?.typeName === \"ZodObject\") {\n    const properties: Record<string, any> = {};\n    const required: string[] = [];\n\n    // Get the shape\n    const shape = typeof def.shape === 'function' ? def.shape() : def.shape;\n\n    for (const [key, value] of Object.entries(shape || {})) {\n      const fieldDef = (value as any)?._def || (value as any)?.def;\n\n      if (fieldDef?.typeName === \"ZodString\") {\n        properties[key] = { type: \"string\" };\n        if (fieldDef.description) {\n          properties[key].description = fieldDef.description;\n        }\n      } else if (fieldDef?.typeName === \"ZodNumber\") {\n        properties[key] = { type: \"number\" };\n      } else if (fieldDef?.typeName === \"ZodBoolean\") {\n        properties[key] = { type: \"boolean\" };\n      } else {\n        // Fallback for unknown types\n        properties[key] = { type: \"string\" };\n      }\n\n      // Check if field is required (not optional)\n      if (fieldDef?.typeName && !fieldDef?.typeName?.includes(\"Optional\")) {\n        required.push(key);\n      }\n    }\n\n    const jsonSchema = {\n      type: \"object\" as const,\n      properties,\n      ...(required.length > 0 && { required }),\n    };\n\n    if (process.env[\"MCP_DEBUG\"]) {\n      console.error(\"[zodToJsonSchema] Generated JSON Schema:\", JSON.stringify(jsonSchema, null, 2));\n    }\n\n    return jsonSchema;\n  }\n\n  // Fallback for non-object schemas\n  return { type: \"object\", properties: {} };\n}\n\n/**\n * Debug function to log schema structure for troubleshooting\n */\nexport function debugSchemaStructure(\n  schema: any,\n  label: string = \"Schema\",\n): void {\n  if (process.env[\"MCP_DEBUG\"]) {\n    console.error(`[Zod Compatibility Debug] ${label} structure:`);\n    console.error(`  - Type: ${typeof schema}`);\n    console.error(`  - Constructor: ${schema?.constructor?.name}`);\n    console.error(`  - Has shape: ${!!schema?.shape}`);\n    console.error(`  - Has _def: ${!!schema?._def}`);\n    console.error(`  - _def.typeName: ${schema?._def?.typeName}`);\n    console.error(`  - _def.type: ${schema?._def?.type}`);\n    console.error(`  - Has parse: ${typeof schema?.parse}`);\n    console.error(`  - Has safeParse: ${typeof schema?.safeParse}`);\n\n    if (schema?.shape) {\n      console.error(`  - Shape keys: ${Object.keys(schema.shape)}`);\n    }\n  }\n}\n\n/**\n * Validates that a schema is compatible with MCP SDK expectations\n */\nexport function validateMcpSchemaCompatibility(schema: any): boolean {\n  try {\n    // Check for required methods\n    if (typeof schema?.parse !== \"function\") {\n      console.warn(\"[Zod Compatibility] Schema missing parse method\");\n      return false;\n    }\n\n    if (typeof schema?.safeParse !== \"function\") {\n      console.warn(\"[Zod Compatibility] Schema missing safeParse method\");\n      return false;\n    }\n\n    // For object schemas, check for shape\n    if (\n      (schema?._def?.typeName === \"ZodObject\" ||\n        schema?._def?.type === \"object\") &&\n      !schema?.shape\n    ) {\n      console.warn(\n        \"[Zod Compatibility] ZodObject schema missing shape property\",\n      );\n      return false;\n    }\n\n    return true;\n  } catch (error) {\n    console.error(\n      \"[Zod Compatibility] Error validating schema compatibility:\",\n      error,\n    );\n    return false;\n  }\n}\n","import { z, type ZodTypeAny } from \"zod\";\nimport {\n  createMcpLogger,\n  type McpLoggerOptions,\n} from \"@alcyone-labs/simple-mcp-logger\";\nimport {\n  convertFlagsToZodSchema,\n  createMcpErrorResponse,\n  createMcpSuccessResponse,\n  generateMcpToolsFromArgParser,\n} from \"../mcp/mcp-integration\";\nimport type {\n  GenerateMcpToolsOptions,\n  IMcpToolStructure,\n} from \"../mcp/mcp-integration\";\nimport type { McpLifecycleEvents } from \"../mcp/mcp-lifecycle\";\nimport {\n  compareVersions,\n  CURRENT_MCP_PROTOCOL_VERSION,\n} from \"../mcp/mcp-protocol-versions\";\nimport { sanitizeMcpToolName } from \"../mcp/mcp-utils\";\nimport {\n  debugSchemaStructure,\n  validateMcpSchemaCompatibility,\n} from \"../mcp/zod-compatibility\";\nimport { debug } from \"../utils/debug-utils\";\nimport { ArgParserBase, type IArgParserParams } from \"./ArgParserBase\";\nimport { resolveLogPath, type LogPath } from \"./log-path-utils\";\nimport type {\n  IFlag,\n  IHandlerContext,\n  OutputSchemaConfig,\n  ParseResult,\n} from \"./types\";\nimport { createOutputSchema } from \"./types\";\nimport type { Application as ExpressApplication } from \"express\";\n\nexport type { Application as ExpressApplication } from \"express\";\n\n/**\n * Configuration for a single MCP transport\n */\nexport type CorsOptions = {\n  origins?: \"*\" | string | RegExp | Array<string | RegExp>;\n  methods?: string[];\n  headers?: string[];\n  exposedHeaders?: string[];\n  credentials?: boolean;\n  maxAge?: number;\n};\n\nexport type JwtVerifyOptions = {\n  algorithms?: (\"HS256\" | \"RS256\")[];\n  secret?: string; // for HS256\n  publicKey?: string; // for RS256\n  getPublicKey?: (\n    header: Record<string, unknown>,\n    payload: Record<string, unknown>,\n  ) => Promise<string> | string;\n  audience?: string | string[];\n  issuer?: string | string[];\n  clockToleranceSec?: number;\n};\n\nexport type AuthOptions = {\n  required?: boolean; // default true for MCP endpoint\n  scheme?: \"bearer\" | \"jwt\";\n  allowedTokens?: string[]; // simple bearer allowlist\n  validator?: (req: any, token: string | undefined) => boolean | Promise<boolean>;\n  jwt?: JwtVerifyOptions;\n  publicPaths?: string[]; // paths that skip auth\n  protectedPaths?: string[]; // if provided, only these paths require auth\n  customMiddleware?: (req: any, res: any, next: any) => any; // full control hook\n};\n\nexport type McpTransportConfig = {\n  type: \"stdio\" | \"sse\" | \"streamable-http\";\n  port?: number;\n  host?: string;\n  path?: string;\n  sessionIdGenerator?: () => string;\n  cors?: CorsOptions; // streamable-http only\n  auth?: AuthOptions; // streamable-http only\n};\n\n/**\n * Configuration options for MCP sub-command\n */\nexport type McpSubCommandOptions = {\n  /** Preset transport configurations to use when no CLI flags are provided */\n  defaultTransports?: McpTransportConfig[];\n  /** Single preset transport configuration (alternative to defaultTransports) */\n  defaultTransport?: McpTransportConfig;\n};\n\n/**\n * Extended server information for DXT package generation and MCP server metadata\n * This type includes logo support for MCP servers and DXT packages\n */\nexport type DxtServerInfo = {\n  name: string;\n  version: string;\n  description?: string;\n  /** Author information for DXT manifest */\n  author?: {\n    name: string;\n    email?: string;\n    url?: string;\n  };\n  /** Repository information for DXT manifest */\n  repository?: {\n    type: string;\n    url: string;\n  };\n  /** License identifier for DXT manifest */\n  license?: string;\n  /** Homepage URL for DXT manifest */\n  homepage?: string;\n  /** Documentation URL for DXT manifest */\n  documentation?: string;\n  /** Support/issues URL for DXT manifest */\n  support?: string;\n  /** Keywords for DXT manifest */\n  keywords?: string[];\n  /**\n   * Logo/icon for DXT manifest and MCP server - can be a local file path or URL\n   * This is where logo support is provided for MCP-enabled ArgParser instances\n   */\n  logo?: string;\n};\n\n/**\n * Copy entry for DXT package bundling, compatible with TSDown's copy options\n */\nexport type DxtCopyEntry = {\n  from: string;\n  to: string;\n};\n\n/**\n * Copy options for DXT package bundling, compatible with TSDown's copy options\n * @example\n * ```ts\n * [\n *   'migrations',\n *   { from: 'migrations', to: 'migrations' },\n *   { from: 'config/default.json', to: 'config/default.json' }\n * ]\n * ```\n */\nexport type DxtCopyOptions = Array<string | DxtCopyEntry>;\n\n/**\n * DXT-specific configuration options\n */\nexport type DxtOptions = {\n  /**\n   * Additional files and directories to include in the DXT package.\n   * Paths are relative to the project root (where package.json/tsconfig.json are located).\n   *\n   * @example\n   * ```ts\n   * include: [\n   *   'migrations',                                    // Copy entire migrations folder\n   *   { from: 'config/prod.json', to: 'config.json' }, // Copy and rename file\n   *   'assets/logo.png'                               // Copy specific file\n   * ]\n   * ```\n   */\n  include?: DxtCopyOptions;\n};\n\n/**\n * MCP server configuration options for withMcp() method\n * This centralizes MCP server metadata that was previously scattered across addMcpSubCommand calls\n */\nexport type HttpServerOptions = {\n  configureExpress?: (app: ExpressApplication) => void;\n};\n\nexport type McpServerOptions = {\n  /** MCP server metadata */\n  serverInfo?: DxtServerInfo;\n  /** Default transport configurations for the MCP server */\n  defaultTransports?: McpTransportConfig[];\n  /** Single default transport configuration (alternative to defaultTransports) */\n  defaultTransport?: McpTransportConfig;\n  /** Tool generation options for the MCP server */\n  toolOptions?: GenerateMcpToolsOptions;\n  /**\n   * Custom log file path for MCP server logs (default: \"./logs/mcp.log\" relative to entry point)\n   *\n   * @deprecated Use 'log' property instead for more comprehensive logging configuration\n   *\n   * Can be:\n   * - Simple string: \"./logs/app.log\" (relative to entry point)\n   * - Absolute path: \"/tmp/app.log\"\n   * - Explicit cwd: \"cwd:./logs/app.log\" (relative to process.cwd())\n   * - Config object: { path: \"./logs/app.log\", relativeTo: \"entry\" | \"cwd\" | \"absolute\" }\n   */\n  logPath?: LogPath;\n  /**\n   * MCP logger configuration options\n   *\n   * Can be:\n   * - Simple string: \"./logs/app.log\" (equivalent to logPath for backward compatibility)\n   * - Full options object: { level: \"debug\", logToFile: \"./logs/app.log\", prefix: \"MyServer\" }\n   *\n   * When both 'log' and 'logPath' are specified, they are merged intelligently:\n   * - 'log' provides logger options (level, prefix, mcpMode)\n   * - 'logPath' provides flexible path resolution (relativeTo, basePath)\n   * - If 'log' has logToFile, 'logPath' still takes precedence for path resolution\n   */\n  log?: string | McpLoggerOptions;\n  /**\n   * Lifecycle event handlers for MCP server operations\n   * These provide hooks for initialization, cleanup, and other lifecycle events\n   */\n  lifecycle?: McpLifecycleEvents;\n  /** DXT package configuration options */\n  dxt?: DxtOptions;\n  /** Optional HTTP server configuration hooks */\n  httpServer?: HttpServerOptions;\n};\n\n/**\n * Combined options for withMcp() method\n */\nexport type WithMcpOptions<THandlerReturn = any> =\n  IArgParserParams<THandlerReturn> & {\n    /** MCP-specific server configuration */\n    mcp?: McpServerOptions;\n  };\n\n/**\n * Type alias for clarity - ArgParser options with MCP capabilities\n * This provides a clearer name for WithMcpOptions\n */\nexport type ArgParserWithMcpOptions<THandlerReturn = any> =\n  WithMcpOptions<THandlerReturn>;\n\n/**\n * Configuration for an individual MCP tool (deprecated - use ToolConfig instead)\n * @deprecated Use ToolConfig and addTool() instead. Will be removed in v2.0.\n */\nexport type McpToolConfig = {\n  /**\n   * Tool name (must be unique within the server)\n   * Note: For MCP compatibility, names will be automatically sanitized to match ^[a-zA-Z0-9_-]{1,64}$\n   * Invalid characters will be replaced with underscores\n   */\n  name: string;\n  /** Tool description */\n  description?: string;\n  /** Input schema for the tool (Zod schema) */\n  inputSchema?: any; // ZodTypeAny from zod\n  /** Output schema for the tool (Zod schema) */\n  outputSchema?: any; // ZodTypeAny from zod\n  /** Handler function for the tool */\n  handler: (args: any) => Promise<any> | any;\n};\n\n/**\n * Configuration for a unified tool that works in both CLI and MCP modes\n */\nexport type ToolConfig = {\n  /**\n   * Tool name (CLI subcommand name & MCP tool name)\n   * Note: For MCP compatibility, names will be automatically sanitized to match ^[a-zA-Z0-9_-]{1,64}$\n   * Invalid characters will be replaced with underscores\n   */\n  name: string;\n  /** Tool description */\n  description?: string;\n  /** Flags for this tool (auto-converted to MCP schema) */\n  flags: readonly IFlag[];\n  /** Handler function for the tool */\n  handler: (ctx: IHandlerContext) => Promise<any> | any;\n  /** Output schema for this tool (predefined pattern, Zod schema, or schema definition object) */\n  outputSchema?: OutputSchemaConfig;\n};\n\n/**\n * ArgParser with Model Context Protocol (MCP) integration capabilities.\n *\n * This class adds MCP server functionality on top of the standard ArgParser,\n * allowing CLI tools to be easily exposed as MCP tools with minimal boilerplate.\n *\n * @example\n * ```typescript\n * const parser = new ArgParser({\n *   appName: \"My CLI\",\n *   appCommandName: \"my-cli\",\n *   handler: async (ctx) => ({ result: \"success\" })\n * })\n *   .addFlags([...])\n *   .addMcpSubCommand(\"serve\", {\n *     name: \"my-cli-mcp-server\",\n *     version: \"1.0.0\"\n *   });\n * ```\n */\nexport class ArgParser<\n  THandlerReturn = any,\n> extends ArgParserBase<THandlerReturn> {\n  /** Stored MCP server configuration from withMcp() */\n  private _mcpServerConfig?: McpServerOptions;\n\n  /** Registered MCP tools (deprecated) */\n  private _mcpTools: Map<string, McpToolConfig> = new Map();\n\n  /** Registered unified tools */\n  private _tools: Map<string, ToolConfig> = new Map();\n\n  /** Output schema management */\n  private _defaultOutputSchema?: import(\"zod\").ZodTypeAny;\n  private _outputSchemaMap: Map<string, import(\"zod\").ZodTypeAny> = new Map();\n  private _autoGenerateOutputSchema?:\n    | boolean\n    | keyof typeof import(\"./types\").OutputSchemaPatterns;\n\n  /** MCP version for output schema compatibility */\n  private _mcpProtocolVersion: string = CURRENT_MCP_PROTOCOL_VERSION;\n\n  /**\n   * Get the stored MCP server configuration\n   * @returns MCP server configuration if set via withMcp(), undefined otherwise\n   */\n  public getMcpServerConfig(): McpServerOptions | undefined {\n    return this._mcpServerConfig;\n  }\n\n  /**\n   * Resolve logger configuration from various sources with proper priority\n   * @param logPathOverride Optional log path override parameter\n   * @returns Logger configuration object for createMcpLogger\n   */\n  #_resolveLoggerConfig(logPathOverride?: LogPath): McpLoggerOptions | string {\n    const mcpConfig = this._mcpServerConfig;\n\n    // Priority 1: Parameter override (for backward compatibility)\n    if (logPathOverride) {\n      const resolvedPath = resolveLogPath(logPathOverride);\n      return {\n        prefix: \"MCP Server Creation\",\n        logToFile: resolvedPath,\n        level: \"error\", // Default level for backward compatibility\n        mcpMode: true,\n      };\n    }\n\n    // Enhanced logic: Merge 'log' configuration with 'logPath' for flexible path resolution\n    const hasLogConfig = mcpConfig?.log;\n    const hasLogPath = mcpConfig?.logPath;\n\n    if (hasLogConfig || hasLogPath) {\n      // Start with base configuration\n      let config: McpLoggerOptions = {\n        prefix: \"MCP Server Creation\",\n        level: \"error\", // Default level for backward compatibility\n        mcpMode: true,\n      };\n\n      // Apply log configuration if present\n      if (hasLogConfig && mcpConfig.log) {\n        if (typeof mcpConfig.log === \"string\") {\n          // Simple string path - use it as logToFile\n          config.logToFile = resolveLogPath(mcpConfig.log);\n        } else {\n          // Full options object - merge with defaults\n          config = {\n            ...config,\n            ...mcpConfig.log,\n            // Resolve logToFile path if provided in log config\n            ...(mcpConfig.log.logToFile && {\n              logToFile: resolveLogPath(mcpConfig.log.logToFile),\n            }),\n          };\n        }\n      }\n\n      // Apply logPath configuration if present and no logToFile was set by log config\n      if (hasLogPath && mcpConfig.logPath && !config.logToFile) {\n        config.logToFile = resolveLogPath(mcpConfig.logPath);\n      }\n\n      // If logPath is present but log config also specified a logToFile,\n      // use logPath for more flexible path resolution (this preserves the nice LogPath features)\n      if (\n        hasLogPath &&\n        mcpConfig.logPath &&\n        hasLogConfig &&\n        mcpConfig.log &&\n        typeof mcpConfig.log === \"object\" &&\n        mcpConfig.log.logToFile\n      ) {\n        // Use logPath for path resolution, but keep the logToFile from log config as fallback\n        config.logToFile = resolveLogPath(mcpConfig.logPath);\n      }\n\n      return config;\n    }\n\n    // Priority 4: Default fallback\n    const defaultPath = resolveLogPath(\"./logs/mcp.log\");\n    return {\n      prefix: \"MCP Server Creation\",\n      logToFile: defaultPath,\n      level: \"error\", // Default level for backward compatibility\n      mcpMode: true,\n    };\n  }\n\n  /**\n   * Set a default output schema for all MCP tools generated from this parser\n   * @param schema - Predefined pattern name, Zod schema, or schema definition object\n   * @returns This ArgParser instance for chaining\n   */\n  public setDefaultOutputSchema(schema: OutputSchemaConfig): this {\n    this._defaultOutputSchema = createOutputSchema(schema);\n    return this;\n  }\n\n  /**\n   * Set an output schema for a specific tool/command\n   * @param toolName - Name of the tool/command\n   * @param schema - Predefined pattern name, Zod schema, or schema definition object\n   * @returns This ArgParser instance for chaining\n   */\n  public setOutputSchema(toolName: string, schema: OutputSchemaConfig): this {\n    this._outputSchemaMap.set(toolName, createOutputSchema(schema));\n    return this;\n  }\n\n  /**\n   * Enable automatic output schema generation for MCP tools\n   * @param pattern - True for default pattern, or specific pattern name\n   * @returns This ArgParser instance for chaining\n   */\n  public enableAutoOutputSchema(\n    pattern:\n      | boolean\n      | keyof typeof import(\"./types\").OutputSchemaPatterns = true,\n  ): this {\n    this._autoGenerateOutputSchema = pattern;\n    return this;\n  }\n\n  /**\n   * Set the MCP protocol version for compatibility checks\n   * @param version - MCP protocol version (e.g., \"2025-06-18\")\n   * @returns This ArgParser instance for chaining\n   */\n  public setMcpProtocolVersion(version: string): this {\n    this._mcpProtocolVersion = version;\n    return this;\n  }\n\n  /**\n   * Check if the current MCP protocol version supports output schemas\n   * Output schemas were introduced in MCP version 2025-06-18\n   * @returns true if output schemas are supported\n   */\n  private supportsOutputSchemas(): boolean {\n    // Output schemas were introduced in MCP version 2025-06-18\n    return compareVersions(this._mcpProtocolVersion, \"2025-06-18\") >= 0;\n  }\n\n  /**\n   * Add a unified tool that works in both CLI and MCP modes\n   * In CLI mode, the tool becomes a subcommand with its own flags\n   * In MCP mode, the tool becomes an MCP tool with auto-generated schema\n   *\n   * @param toolConfig Configuration for the tool\n   * @returns This ArgParser instance for chaining\n   */\n  public addTool(toolConfig: ToolConfig): this {\n    // Validate tool configuration\n    if (!toolConfig.name || typeof toolConfig.name !== \"string\") {\n      throw new Error(\"Tool name is required and must be a string\");\n    }\n\n    if (!toolConfig.handler || typeof toolConfig.handler !== \"function\") {\n      throw new Error(\"Tool handler is required and must be a function\");\n    }\n\n    // Sanitize the tool name for MCP compatibility\n    const sanitizedName = sanitizeMcpToolName(toolConfig.name);\n\n    // Suppress sanitization warnings in MCP mode to avoid STDOUT contamination\n    if (sanitizedName !== toolConfig.name) {\n      // Only warn in non-MCP contexts\n      const isMcpMode = (globalThis as any).console?.mcpError;\n      if (!isMcpMode) {\n        console.warn(\n          `[ArgParser] Tool name '${toolConfig.name}' was sanitized to '${sanitizedName}' for MCP compatibility`,\n        );\n      }\n    }\n\n    if (this._tools.has(sanitizedName)) {\n      throw new Error(`Tool with name '${sanitizedName}' already exists`);\n    }\n\n    if (!Array.isArray(toolConfig.flags)) {\n      throw new Error(\"Tool flags must be an array\");\n    }\n\n    // Create a new tool config with the sanitized name\n    const sanitizedToolConfig: ToolConfig = {\n      ...toolConfig,\n      name: sanitizedName,\n    };\n\n    // Store the tool configuration with sanitized name\n    this._tools.set(sanitizedName, sanitizedToolConfig);\n\n    // Register the tool as a CLI subcommand (using original name for CLI)\n    this.#registerToolAsSubCommand(toolConfig);\n\n    return this;\n  }\n\n  /**\n   * Register a tool as a CLI subcommand\n   * @private\n   */\n  #registerToolAsSubCommand(toolConfig: ToolConfig): void {\n    // Create a new ArgParser instance for this tool's subcommand\n    const toolParser = new ArgParserBase(\n      {\n        appName: `${this.getAppName()} ${toolConfig.name}`,\n        description:\n          toolConfig.description || `Execute ${toolConfig.name} tool`,\n        handler: toolConfig.handler,\n      },\n      toolConfig.flags,\n    );\n\n    // Add the subcommand to this parser\n    this.addSubCommand({\n      name: toolConfig.name,\n      description: toolConfig.description || `Execute ${toolConfig.name} tool`,\n      parser: toolParser,\n      handler: toolConfig.handler,\n    });\n  }\n\n  /**\n   * Add an MCP tool to this parser (deprecated)\n   * @deprecated Use addTool() instead. This method will be removed in v2.0.\n   * @param toolConfig Configuration for the MCP tool\n   * @returns This ArgParser instance for chaining\n   */\n  public addMcpTool(toolConfig: McpToolConfig): this {\n    // Use stderr to avoid STDOUT contamination in MCP mode\n    try {\n      if (typeof process !== \"undefined\" && process.stderr) {\n        process.stderr\n          .write(`[DEPRECATED] addMcpTool() is deprecated and will be removed in v2.0.\nPlease use addTool() instead for a unified CLI/MCP experience.\nMigration guide: https://github.com/alcyone-labs/arg-parser/blob/main/docs/MCP-MIGRATION.md\\n`);\n      } else {\n        console.warn(`[DEPRECATED] addMcpTool() is deprecated and will be removed in v2.0.\nPlease use addTool() instead for a unified CLI/MCP experience.\nMigration guide: https://github.com/alcyone-labs/arg-parser/blob/main/docs/MCP-MIGRATION.md`);\n      }\n    } catch {\n      // Fallback for environments where process is not available\n      console.warn(`[DEPRECATED] addMcpTool() is deprecated and will be removed in v2.0.\nPlease use addTool() instead for a unified CLI/MCP experience.\nMigration guide: https://github.com/alcyone-labs/arg-parser/blob/main/docs/MCP-MIGRATION.md`);\n    }\n\n    // Sanitize the tool name for MCP compatibility\n    const sanitizedName = sanitizeMcpToolName(toolConfig.name);\n\n    // Suppress sanitization warnings in MCP mode to avoid STDOUT contamination\n    if (sanitizedName !== toolConfig.name) {\n      // Only warn in non-MCP contexts\n      const isMcpMode = (globalThis as any).console?.mcpError;\n      if (!isMcpMode) {\n        console.warn(\n          `[ArgParser] Tool name '${toolConfig.name}' was sanitized to '${sanitizedName}' for MCP compatibility`,\n        );\n      }\n    }\n\n    if (this._mcpTools.has(sanitizedName)) {\n      throw new Error(`MCP tool with name '${sanitizedName}' already exists`);\n    }\n\n    // Create a new tool config with the sanitized name\n    const sanitizedToolConfig: McpToolConfig = {\n      ...toolConfig,\n      name: sanitizedName,\n    };\n\n    this._mcpTools.set(sanitizedName, sanitizedToolConfig);\n    return this;\n  }\n\n  /**\n   * Get all registered unified tools\n   * @returns Map of tool names to tool configurations\n   */\n  public getTools(): Map<string, ToolConfig> {\n    return new Map(this._tools);\n  }\n\n  /**\n   * Get all registered MCP tools (deprecated)\n   * @deprecated Use getTools() instead\n   * @returns Map of tool names to tool configurations\n   */\n  public getMcpTools(): Map<string, McpToolConfig> {\n    return new Map(this._mcpTools);\n  }\n\n  /**\n   * Get information about all available tools (unified, legacy MCP, and CLI-generated)\n   * @param options Optional configuration for MCP tool generation\n   * @returns Object with tool counts and names for debugging\n   */\n  public getToolInfo(options?: GenerateMcpToolsOptions): {\n    unifiedTools: string[];\n    legacyMcpTools: string[];\n    cliTools: string[];\n    totalTools: number;\n    duplicates: string[];\n  } {\n    const cliTools = generateMcpToolsFromArgParser(this, options);\n    const unifiedToolNames = Array.from(this._tools.keys());\n    const legacyMcpToolNames = Array.from(this._mcpTools.keys());\n    const cliToolNames = cliTools.map((t) => t.name);\n\n    // Find duplicates (tools that exist in multiple categories)\n    const allToolNames = [\n      ...unifiedToolNames,\n      ...legacyMcpToolNames,\n      ...cliToolNames,\n    ];\n    const duplicates = allToolNames.filter(\n      (name, index) => allToolNames.indexOf(name) !== index,\n    );\n\n    // Calculate total unique tools (unified tools take precedence)\n    const uniqueToolNames = new Set(allToolNames);\n\n    return {\n      unifiedTools: unifiedToolNames,\n      legacyMcpTools: legacyMcpToolNames,\n      cliTools: cliToolNames,\n      totalTools: uniqueToolNames.size,\n      duplicates: Array.from(new Set(duplicates)),\n    };\n  }\n\n  /**\n   * Get information about all available MCP tools (legacy method)\n   * @deprecated Use getToolInfo() instead\n   * @param options Optional configuration for MCP tool generation\n   * @returns Object with tool counts and names for debugging\n   */\n  public getMcpToolInfo(options?: GenerateMcpToolsOptions): {\n    manualTools: string[];\n    cliTools: string[];\n    totalTools: number;\n    duplicates: string[];\n  } {\n    const toolInfo = this.getToolInfo(options);\n    return {\n      manualTools: [...toolInfo.unifiedTools, ...toolInfo.legacyMcpTools],\n      cliTools: toolInfo.cliTools,\n      totalTools: toolInfo.totalTools,\n      duplicates: toolInfo.duplicates,\n    };\n  }\n\n  /**\n   * Validate that all tools are properly registered and routable\n   * @returns Validation results\n   */\n  public validateToolRouting(): {\n    isValid: boolean;\n    issues: string[];\n    cliSubcommands: string[];\n    mcpTools: string[];\n  } {\n    const issues: string[] = [];\n    const cliSubcommands: string[] = [];\n    const mcpTools: string[] = [];\n\n    // Check CLI subcommand registration\n    const subCommands = this.getSubCommands();\n    if (subCommands) {\n      for (const [name] of subCommands) {\n        cliSubcommands.push(name);\n      }\n    }\n\n    // Check MCP tool registration\n    const mcpToolStructures = this.toMcpTools();\n    for (const tool of mcpToolStructures) {\n      mcpTools.push(tool.name);\n    }\n\n    // Validate that unified tools are registered in both CLI and MCP\n    for (const [toolName] of this._tools) {\n      if (!cliSubcommands.includes(toolName)) {\n        issues.push(\n          `Unified tool '${toolName}' is not registered as CLI subcommand`,\n        );\n      }\n      if (!mcpTools.includes(toolName)) {\n        issues.push(`Unified tool '${toolName}' is not registered as MCP tool`);\n      }\n    }\n\n    return {\n      isValid: issues.length === 0,\n      issues,\n      cliSubcommands,\n      mcpTools,\n    };\n  }\n\n  /**\n   * Test tool routing by simulating a tool call\n   * This is useful for debugging and ensuring tools are properly registered\n   * @param toolName Name of the tool to test\n   * @param args Arguments to pass to the tool\n   * @returns Promise with the tool execution result or error\n   */\n  public async testMcpToolRouting(\n    toolName: string,\n    args: any = {},\n  ): Promise<{\n    success: boolean;\n    result?: any;\n    error?: string;\n    executionTime?: number;\n  }> {\n    try {\n      const tools = this.toMcpTools();\n      const tool = tools.find((t) => t.name === toolName);\n\n      if (!tool) {\n        return {\n          success: false,\n          error: `Tool '${toolName}' not found. Available tools: ${tools.map((t) => t.name).join(\", \")}`,\n        };\n      }\n\n      const startTime = Date.now();\n      const result = await tool.execute(args);\n      const executionTime = Date.now() - startTime;\n\n      return {\n        success: true,\n        result,\n        executionTime,\n      };\n    } catch (error) {\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : String(error),\n      };\n    }\n  }\n\n  /**\n   * Generate MCP tools from this ArgParser instance\n   * @param options Optional configuration for MCP tool generation\n   * @returns Array of MCP tool structures ready for server registration\n   */\n  public toMcpTools(options?: GenerateMcpToolsOptions): IMcpToolStructure[] {\n    // Merge instance-level output schema settings with options\n    const mergedOptions: GenerateMcpToolsOptions = {\n      ...options,\n      // Merge output schema maps (options take precedence)\n      outputSchemaMap: {\n        ...Object.fromEntries(this._outputSchemaMap),\n        ...options?.outputSchemaMap,\n      },\n      // Use instance default if not specified in options\n      defaultOutputSchema:\n        options?.defaultOutputSchema || this._defaultOutputSchema,\n      // Use instance auto-generate setting if not specified in options\n      autoGenerateOutputSchema:\n        options?.autoGenerateOutputSchema ?? this._autoGenerateOutputSchema,\n    };\n\n    // Generate tools from CLI structure (legacy approach)\n    const cliTools = generateMcpToolsFromArgParser(this, mergedOptions);\n\n    // Convert unified tools to MCP tool structures\n    const unifiedTools: IMcpToolStructure[] = Array.from(\n      this._tools.values(),\n    ).map((toolConfig) => {\n      // Determine output schema for this tool\n      let outputSchema: import(\"zod\").ZodTypeAny | undefined;\n\n      // Priority: explicit schema map > tool-level schema > default schema > auto-generated schema\n      if (mergedOptions.outputSchemaMap?.[toolConfig.name]) {\n        outputSchema = mergedOptions.outputSchemaMap[toolConfig.name];\n      } else if (toolConfig.outputSchema) {\n        if (process.env[\"MCP_DEBUG\"]) {\n          console.error(\n            `[MCP Debug] Tool '${toolConfig.name}' has outputSchema:`,\n            typeof toolConfig.outputSchema,\n          );\n          console.error(\n            `[MCP Debug] outputSchema has _def:`,\n            !!(\n              toolConfig.outputSchema &&\n              typeof toolConfig.outputSchema === \"object\" &&\n              \"_def\" in toolConfig.outputSchema\n            ),\n          );\n        }\n        outputSchema = createOutputSchema(toolConfig.outputSchema);\n        if (process.env[\"MCP_DEBUG\"]) {\n          console.error(\n            `[MCP Debug] Created output schema for '${toolConfig.name}':`,\n            !!outputSchema,\n          );\n        }\n      } else if (mergedOptions.defaultOutputSchema) {\n        outputSchema = mergedOptions.defaultOutputSchema;\n      } else if (mergedOptions.autoGenerateOutputSchema) {\n        if (typeof mergedOptions.autoGenerateOutputSchema === \"string\") {\n          outputSchema = createOutputSchema(\n            mergedOptions.autoGenerateOutputSchema,\n          );\n        } else if (mergedOptions.autoGenerateOutputSchema === true) {\n          outputSchema = createOutputSchema(\"successWithData\");\n        }\n      }\n\n      // Only include output schema if the MCP protocol version supports it\n      if (outputSchema && !this.supportsOutputSchemas()) {\n        if (process.env[\"MCP_DEBUG\"]) {\n          console.error(\n            `[MCP Debug] Output schema for '${toolConfig.name}' removed due to MCP version ${this._mcpProtocolVersion} not supporting output schemas`,\n          );\n        }\n        outputSchema = undefined;\n      }\n\n      return {\n        name: toolConfig.name,\n        description:\n          toolConfig.description || `Executes the ${toolConfig.name} tool.`,\n        inputSchema: convertFlagsToZodSchema(toolConfig.flags),\n        outputSchema,\n        execute: async (args: any) => {\n          // Hijack console for MCP mode to prevent STDOUT contamination\n          const originalConsole = globalThis.console;\n          let mcpLogger: any = null;\n\n          try {\n            // Try to import and setup MCP logger for this tool execution\n            try {\n              const mcpLoggerModule = await Function(\n                'return import(\"@alcyone-labs/simple-mcp-logger\")',\n              )();\n              mcpLogger = mcpLoggerModule.createMcpLogger(\n                `MCP-Tool-${toolConfig.name}`,\n              );\n              // Hijack console globally to prevent STDOUT contamination\n              (globalThis as any).console = mcpLogger;\n            } catch {\n              // Fallback: create a minimal logger that redirects to stderr\n              // Use originalConsole to avoid circular reference\n              mcpLogger = {\n                log: (...args: any[]) =>\n                  originalConsole.error(`[${toolConfig.name}]`, ...args),\n                info: (...args: any[]) =>\n                  originalConsole.error(`[${toolConfig.name}]`, ...args),\n                warn: (...args: any[]) =>\n                  originalConsole.error(`[${toolConfig.name}]`, ...args),\n                error: (...args: any[]) =>\n                  originalConsole.error(`[${toolConfig.name}]`, ...args),\n                debug: (...args: any[]) =>\n                  originalConsole.error(`[${toolConfig.name}]`, ...args),\n              };\n              (globalThis as any).console = mcpLogger;\n            }\n\n            // Create handler context similar to CLI mode\n            const context: IHandlerContext = {\n              args,\n              parentArgs: {},\n              commandChain: [toolConfig.name],\n              parser: this,\n              isMcp: true,\n            };\n\n            const startTime = Date.now();\n            const result = await toolConfig.handler(context);\n            const executionTime = Date.now() - startTime;\n\n            // Log successful execution for debugging\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(\n                `[MCP Tool] '${toolConfig.name}' executed successfully in ${executionTime}ms`,\n              );\n            }\n\n            // Ensure the result is properly formatted for MCP\n            if (result && typeof result === \"object\" && \"content\" in result) {\n              // Already in MCP format - ensure structuredContent is present if output schema exists and is supported\n              if (\n                outputSchema &&\n                this.supportsOutputSchemas() &&\n                !result.structuredContent\n              ) {\n                result.structuredContent = result;\n              }\n              return result;\n            } else {\n              // Format response consistently - include structuredContent when output schema is present and supported\n              if (\n                outputSchema &&\n                this.supportsOutputSchemas() &&\n                result &&\n                typeof result === \"object\"\n              ) {\n                // Include structuredContent when output schema is present and version supports it\n                return {\n                  content: [\n                    {\n                      type: \"text\",\n                      text: JSON.stringify(result, null, 2),\n                    },\n                  ],\n                  structuredContent: result,\n                };\n              } else {\n                // Wrap in standard MCP response format\n                return createMcpSuccessResponse(result);\n              }\n            }\n          } catch (error) {\n            // Enhanced error handling with proper MCP error response format\n            const errorMessage = `Tool '${toolConfig.name}' execution failed: ${error instanceof Error ? error.message : String(error)}`;\n\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(`[MCP Tool Error] ${errorMessage}`);\n              if (error instanceof Error && error.stack) {\n                console.error(`[MCP Tool Stack] ${error.stack}`);\n              }\n            }\n\n            // Return MCP-compliant error response\n            return createMcpErrorResponse(errorMessage);\n          } finally {\n            // Restore original console\n            globalThis.console = originalConsole;\n          }\n        },\n      };\n    });\n\n    // Convert legacy MCP tools to MCP tool structures (deprecated)\n    const legacyMcpTools: IMcpToolStructure[] = Array.from(\n      this._mcpTools.values(),\n    ).map((toolConfig) => ({\n      name: toolConfig.name,\n      description:\n        toolConfig.description || `Executes the ${toolConfig.name} tool.`,\n      inputSchema: toolConfig.inputSchema || z.object({}),\n      outputSchema: toolConfig.outputSchema,\n      execute: async (args: any) => {\n        try {\n          const startTime = Date.now();\n          const result = await toolConfig.handler(args);\n          const executionTime = Date.now() - startTime;\n\n          if (process.env[\"MCP_DEBUG\"]) {\n            console.error(\n              `[MCP Tool] '${toolConfig.name}' (legacy) executed successfully in ${executionTime}ms`,\n            );\n          }\n\n          if (result && typeof result === \"object\" && \"content\" in result) {\n            // If tool has output schema and version supports it, ensure structuredContent is present\n            if (\n              toolConfig.outputSchema &&\n              this.supportsOutputSchemas() &&\n              !result.structuredContent\n            ) {\n              result.structuredContent = result;\n            }\n            return result;\n          } else {\n            // Format response consistently with CLI-generated tools\n            if (\n              toolConfig.outputSchema &&\n              this.supportsOutputSchemas() &&\n              result &&\n              typeof result === \"object\"\n            ) {\n              // Include structuredContent when output schema is present and version supports it\n              return {\n                content: [\n                  {\n                    type: \"text\",\n                    text: JSON.stringify(result, null, 2),\n                  },\n                ],\n                structuredContent: result,\n              };\n            } else {\n              return createMcpSuccessResponse(result);\n            }\n          }\n        } catch (error) {\n          const errorMessage = `Tool '${toolConfig.name}' execution failed: ${error instanceof Error ? error.message : String(error)}`;\n\n          if (process.env[\"MCP_DEBUG\"]) {\n            console.error(`[MCP Tool Error] ${errorMessage}`);\n          }\n\n          return createMcpErrorResponse(errorMessage);\n        }\n      },\n    }));\n\n    // Combine all tools (unified tools take precedence over legacy tools, which take precedence over CLI-generated tools)\n    const allTools = [...unifiedTools, ...legacyMcpTools, ...cliTools];\n    const uniqueTools = allTools.reduce((acc, tool) => {\n      const existingTool = acc.find((t) => t.name === tool.name);\n      if (!existingTool) {\n        acc.push(tool);\n      } else {\n        // Log when a tool is being overridden\n        const toolSource = unifiedTools.find((t) => t.name === tool.name)\n          ? \"unified\"\n          : legacyMcpTools.find((t) => t.name === tool.name)\n            ? \"legacy MCP\"\n            : \"CLI-generated\";\n        console.warn(\n          `[MCP Tool Registration] ${toolSource} tool '${tool.name}' overrides other tool definitions`,\n        );\n      }\n      return acc;\n    }, [] as IMcpToolStructure[]);\n\n    return uniqueTools;\n  }\n\n  /**\n   * Create an MCP server with tools generated from this ArgParser\n   * @param serverInfo Server configuration\n   * @param toolOptions Optional MCP tool generation options\n   * @param logPath Optional log path (deprecated, use log config in withMcp instead)\n   * @returns Configured MCP server instance\n   */\n  public async createMcpServer(\n    serverInfo?: DxtServerInfo,\n    toolOptions?: GenerateMcpToolsOptions,\n    logPath?: LogPath,\n  ): Promise<any> {\n    // Resolve logger configuration with priority: parameter > log config > logPath config > default\n    const loggerConfig = this.#_resolveLoggerConfig(logPath);\n\n    // Use the appropriate createMcpLogger API based on configuration type\n    // Note: Current version only supports legacy API (prefix, logToFile)\n    const logger =\n      typeof loggerConfig === \"string\"\n        ? createMcpLogger(\"MCP Server Creation\", loggerConfig)\n        : createMcpLogger(\n            loggerConfig.prefix || \"MCP Server Creation\",\n            loggerConfig.logToFile,\n          );\n\n    try {\n      // Use provided serverInfo or fall back to internal MCP configuration\n      const effectiveServerInfo =\n        serverInfo || this._mcpServerConfig?.serverInfo;\n\n      if (!effectiveServerInfo) {\n        throw new Error(\n          \"No MCP server configuration found. Use withMcp() to configure server info or provide serverInfo parameter.\",\n        );\n      }\n\n      logger.mcpError(\n        `Creating MCP server: ${effectiveServerInfo.name} v${effectiveServerInfo.version}`,\n      );\n\n      // Dynamic import to avoid circular dependencies and support ES modules\n      const { McpServer, ResourceTemplate } = await import(\n        \"@alcyone-labs/modelcontextprotocol-sdk/server/mcp.js\"\n      );\n      logger.mcpError(\n        \"Successfully imported McpServer and ResourceTemplate from SDK\",\n      );\n\n      const server = new McpServer({\n        id: effectiveServerInfo.name,\n        version: effectiveServerInfo.version,\n        name: effectiveServerInfo.name,\n        description: effectiveServerInfo.description,\n      });\n\n      logger.mcpError(\"Successfully created McpServer instance\");\n\n      // Set up lifecycle manager if lifecycle events are configured\n      // Skip lifecycle setup during MCP server creation to prevent infinite recursion\n      const isInMcpServeMode = process.argv.includes(\"--s-mcp-serve\");\n      if (this._mcpServerConfig?.lifecycle && !isInMcpServeMode) {\n        const { McpLifecycleManager } = await import(\"../mcp/mcp-lifecycle\");\n\n        const lifecycleManager = new McpLifecycleManager(\n          this._mcpServerConfig.lifecycle,\n          logger,\n          effectiveServerInfo,\n          this,\n        );\n\n        // Parse the current process arguments to provide to lifecycle manager\n        try {\n          // Parse arguments without executing handlers to get flag values\n          // Filter out system flags that could cause infinite recursion during server creation\n          const filteredArgs = process.argv\n            .slice(2)\n            .filter(\n              (arg) => !arg.startsWith(\"--s-mcp-\") && arg !== \"--s-mcp-serve\",\n            );\n          const parsedResult = await this.parse(filteredArgs, {\n            skipHandlerExecution: true,\n            isMcp: true,\n          });\n\n          // Extract the parsed arguments from the result\n          const parsedArgs = (parsedResult as any)?.args || parsedResult || {};\n          lifecycleManager.setParsedArgs(parsedArgs);\n\n          logger.mcpError(\n            `Lifecycle manager initialized with parsed args: ${Object.keys(parsedArgs).join(\", \")}`,\n          );\n        } catch (parseError) {\n          logger.mcpError(\n            `Warning: Could not parse arguments for lifecycle manager: ${parseError instanceof Error ? parseError.message : String(parseError)}`,\n          );\n          // Continue without parsed args - will fall back to environment variables\n        }\n\n        // Wrap the server's connect method to trigger lifecycle events\n        const originalConnect = server.connect.bind(server);\n        server.connect = async (transport: any) => {\n          logger.mcpError(\"MCP server connecting with lifecycle events...\");\n\n          // Call the original connect method\n          const result = await originalConnect(transport);\n\n          // Trigger onInitialize event immediately after connection\n          // This simulates the initialize request since we can't intercept it directly\n          try {\n            await lifecycleManager.handleInitialize(\n              { name: \"mcp-client\", version: \"1.0.0\" }, // Default client info\n              \"2024-11-05\", // Default protocol version\n              {}, // Default capabilities\n            );\n\n            // Trigger onInitialized event after a short delay\n            setTimeout(async () => {\n              try {\n                await lifecycleManager.handleInitialized();\n              } catch (error) {\n                logger.mcpError(\n                  `Lifecycle onInitialized error: ${error instanceof Error ? error.message : String(error)}`,\n                );\n              }\n            }, 100);\n          } catch (error) {\n            logger.mcpError(\n              `Lifecycle onInitialize error: ${error instanceof Error ? error.message : String(error)}`,\n            );\n          }\n\n          return result;\n        };\n\n        // Store lifecycle manager for shutdown handling\n        (server as any)._lifecycleManager = lifecycleManager;\n\n        logger.mcpError(\"Successfully set up MCP lifecycle manager\");\n      }\n\n      // Note: We now register actual resources and prompts below, so no need for internal handlers\n      logger.mcpError(\n        \"MCP server will register actual resources and prompts for full capability support\",\n      );\n\n      // Generate tools from this ArgParser instance\n      logger.mcpError(\"Generating MCP tools from ArgParser\");\n      const tools = this.toMcpTools(toolOptions);\n      logger.mcpError(`Generated ${tools.length} MCP tools`);\n\n      // Deduplicate tools by name to avoid registration conflicts\n      const uniqueTools = tools.reduce((acc, tool) => {\n        if (!acc.find((t) => t.name === tool.name)) {\n          acc.push(tool);\n        }\n        return acc;\n      }, [] as IMcpToolStructure[]);\n\n      logger.mcpError(\n        `After deduplication: ${uniqueTools.length} unique tools`,\n      );\n\n      // Register tools\n      uniqueTools.forEach((tool) => {\n        logger.mcpError(`Registering tool: ${tool.name}`);\n\n        // MCP SDK expects Zod v3 compatible schemas\n        let zodSchema: ZodTypeAny;\n\n        // Find the tool configuration to get the flags\n        const toolFromUnified = Array.from(this._tools.values()).find(\n          (t) => t.name === tool.name,\n        );\n        const toolFromLegacy = Array.from(this._mcpTools.values()).find(\n          (t) => t.name === tool.name,\n        );\n\n        if (toolFromUnified && toolFromUnified.flags) {\n          // Convert flags to Zod schema for unified tools\n          zodSchema = convertFlagsToZodSchema(toolFromUnified.flags);\n        } else if (toolFromLegacy && toolFromLegacy.inputSchema) {\n          // For legacy tools, use the existing Zod schema directly\n          zodSchema = toolFromLegacy.inputSchema;\n        } else {\n          // Fallback for tools with no input parameters - create empty Zod object\n          zodSchema = z.object({});\n        }\n\n        // Convert Zod schema to JSON Schema for MCP SDK\n        let mcpCompatibleSchema;\n        try {\n          if (process.env[\"MCP_DEBUG\"]) {\n            console.error(`[MCP Debug] Preparing schema for tool ${tool.name}`);\n            console.error(`[MCP Debug] Input zodSchema:`, zodSchema);\n          }\n\n          // Use the original Zod v4 schema directly (MCP SDK now supports v4)\n          mcpCompatibleSchema = zodSchema;\n\n          if (process.env[\"MCP_DEBUG\"]) {\n            console.error(\n              `[MCP Debug] Successfully prepared schema for tool ${tool.name}`,\n            );\n          }\n        } catch (schemaError) {\n          console.error(\n            `[MCP Debug] Error preparing schema for tool ${tool.name}:`,\n            schemaError,\n          );\n          throw schemaError;\n        }\n\n        // Add detailed debug logging for the prepared schema\n        if (process.env[\"MCP_DEBUG\"]) {\n          console.error(\n            `[MCP Debug] Prepared mcpCompatibleSchema for tool ${tool.name}:`,\n            JSON.stringify(mcpCompatibleSchema, null, 2),\n          );\n          console.error(\n            `[MCP Debug] Schema properties:`,\n            Object.keys(mcpCompatibleSchema || {}),\n          );\n          console.error(\n            `[MCP Debug] Schema def:`,\n            (mcpCompatibleSchema as any)?.def,\n          );\n          console.error(\n            `[MCP Debug] Schema shape:`,\n            (mcpCompatibleSchema as any)?.shape,\n          );\n          console.error(\n            `[MCP Debug] Schema parse function:`,\n            typeof mcpCompatibleSchema?.parse,\n          );\n        }\n\n        // Add debug logging before schema preparation\n        if (process.env[\"MCP_DEBUG\"]) {\n          console.error(\n            `[MCP Debug] About to prepare schema for tool ${tool.name}`,\n          );\n          console.error(`[MCP Debug] zodSchema type:`, typeof zodSchema);\n          console.error(`[MCP Debug] zodSchema:`, zodSchema);\n          console.error(\n            `[MCP Debug] zodSchema constructor:`,\n            zodSchema?.constructor?.name,\n          );\n        }\n\n        // Debug schema structure if MCP_DEBUG is enabled\n        debugSchemaStructure(mcpCompatibleSchema, `Tool ${tool.name} schema`);\n\n        // Validate compatibility\n        if (!validateMcpSchemaCompatibility(mcpCompatibleSchema)) {\n          logger.mcpError(\n            `Warning: Schema for tool ${tool.name} may not be fully compatible with MCP SDK`,\n          );\n        }\n\n        const toolConfig: any = {\n          title: tool.name, // MCP SDK requires title field\n          description: tool.description || \"No description provided.\",\n          inputSchema: mcpCompatibleSchema, // Use Zod v3 compatible schema for MCP SDK\n        };\n\n        // Debug the final toolConfig being passed to registerTool\n        if (process.env[\"MCP_DEBUG\"]) {\n          console.error(\n            `[MCP Debug] Final toolConfig for ${tool.name}:`,\n            JSON.stringify(toolConfig, null, 2),\n          );\n          console.error(\n            `[MCP Debug] toolConfig.inputSchema type:`,\n            typeof toolConfig.inputSchema,\n          );\n          console.error(\n            `[MCP Debug] toolConfig.inputSchema constructor:`,\n            toolConfig.inputSchema?.constructor?.name,\n          );\n          console.error(\n            `[MCP Debug] toolConfig.inputSchema._def:`,\n            toolConfig.inputSchema?._def,\n          );\n          console.error(\n            `[MCP Debug] toolConfig.inputSchema.shape:`,\n            toolConfig.inputSchema?.shape,\n          );\n          console.error(\n            `[MCP Debug] toolConfig.inputSchema._zod:`,\n            toolConfig.inputSchema?._zod,\n          );\n          console.error(\n            `[MCP Debug] Schema keys:`,\n            Object.keys(mcpCompatibleSchema || {}),\n          );\n          console.error(`[MCP Debug] About to call server.registerTool with:`, {\n            name: tool.name,\n            description: tool.description,\n            inputSchema: mcpCompatibleSchema,\n          });\n        }\n\n        // Include output schema in MCP tool registration for MCP 2025-06-18+ clients\n        // The Alcyone Labs MCP SDK fork v1.16.0+ supports outputSchema in registerTool\n        // This is conditionally enabled based on negotiated protocol version\n        // Output schemas must be converted to Zod schema objects before passing to MCP SDK\n        if (tool.outputSchema && this.supportsOutputSchemas()) {\n          // Convert outputSchema to Zod schema (handles plain objects, patterns, and existing Zod schemas)\n          const convertedOutputSchema = createOutputSchema(tool.outputSchema);\n          toolConfig.outputSchema = convertedOutputSchema;\n\n          if (process.env[\"MCP_DEBUG\"]) {\n            console.error(\n              `[MCP Debug] Including outputSchema for tool '${tool.name}':`,\n              typeof tool.outputSchema\n            );\n            console.error(\n              `[MCP Debug] Converted outputSchema constructor:`,\n              convertedOutputSchema?.constructor?.name\n            );\n            console.error(\n              `[MCP Debug] supportsOutputSchemas():`,\n              this.supportsOutputSchemas()\n            );\n          }\n        } else if (process.env[\"MCP_DEBUG\"]) {\n          console.error(\n            `[MCP Debug] NOT including outputSchema for tool '${tool.name}':`,\n            `hasOutputSchema=${!!tool.outputSchema}, supportsOutputSchemas=${this.supportsOutputSchemas()}`\n          );\n        }\n\n        // Simple tool execution that matches the working minimal MCP server pattern\n        const simpleExecute = async (args: any) => {\n          if (process.env[\"MCP_DEBUG\"]) {\n            console.error(\n              `[MCP Simple Execute] 🎯 TOOL CALLED: '${tool.name}' with args:`,\n              JSON.stringify(args, null, 2),\n            );\n          }\n\n          try {\n            // Call the tool's execute method directly\n            const result = await tool.execute(args);\n\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(\n                `[MCP Simple Execute] Tool '${tool.name}' returned:`,\n                JSON.stringify(result, null, 2),\n              );\n            }\n\n            // If result already has content field, return as-is\n            if (\n              result &&\n              typeof result === \"object\" &&\n              result.content &&\n              Array.isArray(result.content)\n            ) {\n              return result;\n            }\n\n            // Otherwise, wrap in MCP content format\n            return {\n              content: [\n                {\n                  type: \"text\" as const,\n                  text:\n                    typeof result === \"string\"\n                      ? result\n                      : JSON.stringify(result, null, 2),\n                },\n              ],\n            };\n          } catch (error) {\n            const errorMessage =\n              error instanceof Error ? error.message : String(error);\n\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(\n                `[MCP Simple Execute] Tool '${tool.name}' error:`,\n                errorMessage,\n              );\n            }\n\n            return {\n              content: [\n                {\n                  type: \"text\" as const,\n                  text: `Error: ${errorMessage}`,\n                },\n              ],\n              isError: true,\n            };\n          }\n        };\n\n        server.registerTool(tool.name, toolConfig, simpleExecute);\n      });\n\n      logger.mcpError(\"Successfully registered all tools with MCP server\");\n\n      // Register MCP resources\n      const resources = this.getMcpResources();\n      logger.mcpError(`Registering ${resources.length} MCP resources`);\n\n      resources.forEach((resource) => {\n        try {\n          const resourceConfig = {\n            title: resource.title || resource.name,\n            description: resource.description || `Resource: ${resource.name}`,\n            mimeType: resource.mimeType || \"application/json\",\n          };\n\n          // Handle different URI template types\n          if (resource.uriTemplate.includes(\"{\")) {\n            // URI template with parameters\n            const resourceTemplate = new ResourceTemplate(\n              resource.uriTemplate,\n              { list: undefined },\n            );\n            const templateHandler = async (uri: any, params: any = {}) => {\n              try {\n                const result = await resource.handler(\n                  new URL(uri.href || uri),\n                  params,\n                );\n                // Convert our format to MCP SDK format\n                return {\n                  contents: result.contents.map((content) => {\n                    const mcpContent: any = {\n                      uri: content.uri,\n                    };\n                    if (content.text !== undefined) {\n                      mcpContent.text = content.text;\n                    }\n                    if (content.blob !== undefined) {\n                      mcpContent.blob = content.blob;\n                    }\n                    if (content.mimeType !== undefined) {\n                      mcpContent.mimeType = content.mimeType;\n                    }\n                    return mcpContent;\n                  }),\n                };\n              } catch (error) {\n                logger.mcpError(\n                  `Resource template handler error for ${resource.name}: ${error instanceof Error ? error.message : String(error)}`,\n                );\n                throw error;\n              }\n            };\n            server.registerResource(\n              resource.name,\n              resourceTemplate,\n              resourceConfig,\n              templateHandler,\n            );\n          } else {\n            // Simple URI string\n            const resourceHandler = async (uri: any) => {\n              try {\n                const result = await resource.handler(\n                  new URL(uri.href || uri),\n                  {},\n                );\n                // Convert our format to MCP SDK format\n                return {\n                  contents: result.contents.map((content) => {\n                    const mcpContent: any = {\n                      uri: content.uri,\n                    };\n                    if (content.text !== undefined) {\n                      mcpContent.text = content.text;\n                    }\n                    if (content.blob !== undefined) {\n                      mcpContent.blob = content.blob;\n                    }\n                    if (content.mimeType !== undefined) {\n                      mcpContent.mimeType = content.mimeType;\n                    }\n                    return mcpContent;\n                  }),\n                };\n              } catch (error) {\n                logger.mcpError(\n                  `Resource handler error for ${resource.name}: ${error instanceof Error ? error.message : String(error)}`,\n                );\n                throw error;\n              }\n            };\n            server.registerResource(\n              resource.name,\n              resource.uriTemplate,\n              resourceConfig,\n              resourceHandler,\n            );\n          }\n\n          logger.mcpError(`Successfully registered resource: ${resource.name}`);\n        } catch (error) {\n          logger.mcpError(\n            `Failed to register resource ${resource.name}: ${error instanceof Error ? error.message : String(error)}`,\n          );\n        }\n      });\n\n      logger.mcpError(\"Successfully registered all resources with MCP server\");\n\n      // Register MCP prompts\n      const prompts = this.getMcpPrompts();\n      logger.mcpError(`Registering ${prompts.length} MCP prompts`);\n\n      prompts.forEach((prompt) => {\n        try {\n          // Convert Zod v4 schema to MCP SDK compatible format (Zod v3 style)\n          let mcpCompatibleSchema;\n          try {\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(\n                `[MCP Debug] Preparing schema for prompt ${prompt.name}`,\n              );\n              console.error(`[MCP Debug] Input argsSchema:`, prompt.argsSchema);\n            }\n            mcpCompatibleSchema = prompt.argsSchema;\n            if (process.env[\"MCP_DEBUG\"]) {\n              console.error(\n                `[MCP Debug] Successfully prepared schema for prompt ${prompt.name}`,\n              );\n            }\n          } catch (schemaError) {\n            console.error(\n              `[MCP Debug] Error preparing schema for prompt ${prompt.name}:`,\n              schemaError,\n            );\n            throw schemaError;\n          }\n\n          // Validate the converted schema\n          if (!validateMcpSchemaCompatibility(mcpCompatibleSchema)) {\n            throw new Error(\n              `Schema validation failed for prompt ${prompt.name}`,\n            );\n          }\n\n          if (process.env[\"MCP_DEBUG\"]) {\n            debugSchemaStructure(mcpCompatibleSchema, `prompt ${prompt.name}`);\n          }\n\n          const promptConfig: any = {\n            title: prompt.title || prompt.name, // MCP SDK requires title field\n            description: prompt.description || \"No description provided.\",\n            argsSchema: mcpCompatibleSchema, // Use Zod v3 compatible schema for MCP SDK\n          };\n\n          // Create prompt handler that wraps the original handler\n          const promptHandler = async (args: any) => {\n            try {\n              // Validate arguments using the original Zod v4 schema\n              const validatedArgs = prompt.argsSchema.parse(args);\n\n              // Call the original handler with validated arguments\n              const result = await prompt.handler(validatedArgs);\n\n              if (process.env[\"MCP_DEBUG\"]) {\n                console.error(\n                  `[MCP Debug] Prompt '${prompt.name}' executed successfully`,\n                );\n              }\n\n              return result;\n            } catch (error) {\n              if (process.env[\"MCP_DEBUG\"]) {\n                console.error(\n                  `[MCP Debug] Prompt '${prompt.name}' execution error:`,\n                  error,\n                );\n              }\n              throw error;\n            }\n          };\n\n          server.registerPrompt(\n            prompt.name,\n            promptConfig,\n            promptHandler as any,\n          );\n\n          logger.mcpError(`Successfully registered prompt: ${prompt.name}`);\n        } catch (error) {\n          logger.mcpError(\n            `Failed to register prompt ${prompt.name}: ${error instanceof Error ? error.message : String(error)}`,\n          );\n        }\n      });\n\n      logger.mcpError(\"Successfully registered all prompts with MCP server\");\n\n      // Set up change notifications\n      this.setupMcpChangeNotifications(server);\n      logger.mcpError(\"Successfully set up MCP change notifications\");\n\n      // Add shutdown handler for lifecycle cleanup\n      if ((server as any)._lifecycleManager) {\n        const originalClose = server.close?.bind(server);\n        server.close = async () => {\n          logger.mcpError(\"MCP server shutdown initiated\");\n          try {\n            await (server as any)._lifecycleManager.handleShutdown(\n              \"server_shutdown\",\n            );\n          } catch (error) {\n            logger.mcpError(\n              `Error during lifecycle shutdown: ${error instanceof Error ? error.message : String(error)}`,\n            );\n          }\n          if (originalClose) {\n            await originalClose();\n          }\n        };\n      }\n\n      return server;\n    } catch (error) {\n      logger.mcpError(\n        `Error creating MCP server: ${error instanceof Error ? error.message : String(error)}`,\n      );\n      if (error instanceof Error && error.stack) {\n        logger.mcpError(`Stack trace: ${error.stack}`);\n      }\n      throw error;\n    }\n  }\n\n  /**\n   * Set up change notifications for the MCP server\n   * @param _server The MCP server instance (unused for now, but reserved for future client connection tracking)\n   */\n  private setupMcpChangeNotifications(_server: any): void {\n    // Set up connection tracking (this would be enhanced with actual client connections)\n    // For now, we'll set up the infrastructure for future client management\n\n    // Add listeners for resource/prompt changes to notify the server\n    this.onMcpChange((event) => {\n      // When resources/prompts change, we could notify connected clients\n      // The actual notification sending would happen when clients are connected\n      const logger = createMcpLogger(\"MCP Change Notifications\");\n      logger.mcpError(\n        `MCP ${event.type} ${event.action}: ${event.entityName || \"unknown\"}`,\n      );\n    });\n  }\n\n  /**\n   * Start an MCP server using stdio transport\n   * @param serverInfo Server configuration\n   * @param toolOptions Optional MCP tool generation options\n   * @returns Promise that resolves when server is connected\n   */\n  public async startMcpServer(\n    serverInfo: {\n      name: string;\n      version: string;\n      description?: string;\n    },\n    toolOptions?: GenerateMcpToolsOptions,\n  ): Promise<void> {\n    return this.startMcpServerWithTransport(\n      serverInfo,\n      \"stdio\",\n      {},\n      toolOptions,\n    );\n  }\n\n  /**\n   * Start an MCP server with multiple transport types simultaneously\n   * @param serverInfo Server configuration\n   * @param transports Array of transport configurations\n   * @param toolOptions Optional MCP tool generation options\n   * @returns Promise that resolves when all servers are started\n   */\n  public async startMcpServerWithMultipleTransports(\n    serverInfo: {\n      name: string;\n      version: string;\n      description?: string;\n    },\n    transports: Array<{\n      type: \"stdio\" | \"sse\" | \"streamable-http\";\n      port?: number;\n      host?: string;\n      path?: string;\n      sessionIdGenerator?: () => string;\n      cors?: CorsOptions;\n      auth?: AuthOptions;\n    }>,\n    toolOptions?: GenerateMcpToolsOptions,\n    logPath?: LogPath,\n  ): Promise<void> {\n    const server = await this.createMcpServer(serverInfo, toolOptions, logPath);\n    const startPromises: Promise<void>[] = [];\n\n    for (const transportConfig of transports) {\n      const promise = this.#_startSingleTransport(\n        server,\n        serverInfo,\n        transportConfig,\n        logPath,\n      );\n      startPromises.push(promise);\n    }\n\n    await Promise.all(startPromises);\n  }\n\n  /**\n   * Start an MCP server with a specific transport type\n   * @param serverInfo Server configuration\n   * @param transportType Type of transport to use\n   * @param transportOptions Transport-specific options\n   * @param toolOptions Optional MCP tool generation options\n   * @returns Promise that resolves when server is connected\n   */\n  public async startMcpServerWithTransport(\n    serverInfo: {\n      name: string;\n      version: string;\n      description?: string;\n    },\n    transportType: \"stdio\" | \"sse\" | \"streamable-http\",\n    transportOptions: {\n      port?: number;\n      host?: string;\n      path?: string;\n      sessionIdGenerator?: () => string;\n      cors?: CorsOptions;\n      auth?: AuthOptions;\n    } = {},\n    toolOptions?: GenerateMcpToolsOptions,\n    logPath?: LogPath,\n  ): Promise<void> {\n    const server = await this.createMcpServer(serverInfo, toolOptions, logPath);\n    await this.#_startSingleTransport(\n      server,\n      serverInfo,\n      {\n        type: transportType,\n        ...transportOptions,\n      },\n      logPath,\n    );\n  }\n\n  /**\n   * Private helper method to start a single transport\n   */\n  async #_startSingleTransport(\n    server: any,\n    serverInfo: { name: string; version: string; description?: string },\n    transportConfig: {\n      type: \"stdio\" | \"sse\" | \"streamable-http\";\n      port?: number;\n      host?: string;\n      path?: string;\n      sessionIdGenerator?: () => string;\n      cors?: CorsOptions;\n      auth?: AuthOptions;\n    },\n    logPath?: LogPath,\n  ): Promise<void> {\n    const resolvedLogPath = resolveLogPath(logPath || \"./logs/mcp.log\");\n    const logger = createMcpLogger(\"MCP Transport\", resolvedLogPath);\n\n    try {\n      logger.mcpError(\n        `Starting ${transportConfig.type} transport for server: ${serverInfo.name}`,\n      );\n\n      switch (transportConfig.type) {\n        case \"stdio\": {\n          logger.mcpError(\"Importing StdioServerTransport from SDK\");\n          const { StdioServerTransport } = await import(\n            \"@alcyone-labs/modelcontextprotocol-sdk/server/stdio.js\"\n          );\n          logger.mcpError(\"Creating StdioServerTransport instance\");\n          const transport = new StdioServerTransport();\n          logger.mcpError(\"Connecting server to stdio transport\");\n          await server.connect(transport);\n          logger.mcpError(\"Successfully connected to stdio transport\");\n          break;\n        }\n\n        case \"sse\": {\n          const { SSEServerTransport } = await import(\n            \"@alcyone-labs/modelcontextprotocol-sdk/server/sse.js\"\n          );\n          const express = (await import(\"express\")).default;\n\n          const app = express();\n          app.use(express.json());\n\n          const port = transportConfig.port || 3000;\n          const path = transportConfig.path || \"/sse\";\n\n          app.get(path, (_req: any, res: any) => {\n            const transport = new SSEServerTransport(path, res);\n            server.connect(transport);\n          });\n\n          await new Promise<void>((resolve) => {\n            app.listen(port, transportConfig.host || \"localhost\", () => {\n              console.error(\n                `[${serverInfo.name}] MCP Server listening on http://${transportConfig.host || \"localhost\"}:${port}${path} (SSE)`,\n              );\n              resolve();\n            });\n          });\n          break;\n        }\n\n        case \"streamable-http\": {\n          const { StreamableHTTPServerTransport } = await import(\n            \"@alcyone-labs/modelcontextprotocol-sdk/server/streamableHttp.js\"\n          );\n          const express = (await import(\"express\")).default;\n\n          const app = express();\n          app.disable(\"x-powered-by\");\n          app.use(express.json());\n\n          // Add a simple favicon to prevent 404 errors\n          app.get(\"/favicon.ico\", (_req, res) => {\n            // Simple red dot on white background as SVG\n            const favicon = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n              <rect width=\"16\" height=\"16\" fill=\"white\"/>\n              <circle cx=\"8\" cy=\"8\" r=\"4\" fill=\"red\"/>\n            </svg>`;\n            res.setHeader(\"Content-Type\", \"image/svg+xml\");\n            res.setHeader(\"Cache-Control\", \"public, max-age=86400\"); // Cache for 1 day\n            res.send(favicon);\n          });\n\n          // Allow user to customize Express before we register routes\n          try {\n            this._mcpServerConfig?.httpServer?.configureExpress?.(app);\n          } catch (e) {\n            // ignore hook errors to avoid breaking server start\n          }\n\n          const port = transportConfig.port || 3000;\n          const path = transportConfig.path || \"/mcp\";\n\n          // CORS middleware (optional)\n          if (transportConfig.cors) {\n            const cors = transportConfig.cors;\n            const allowMethods = cors.methods?.join(\", \") || \"GET,POST,PUT,PATCH,DELETE,OPTIONS\";\n            const allowHeaders = (req: any) =>\n              cors.headers?.join(\", \") || req.headers[\"access-control-request-headers\"] || \"Content-Type, Authorization, MCP-Session-Id\";\n            const exposed = cors.exposedHeaders?.join(\", \") || undefined;\n\n            const resolveOrigin = (req: any): string | undefined => {\n              const reqOrigin = req.headers.origin as string | undefined;\n              const origins = cors.origins ?? \"*\";\n              if (origins === \"*\") return cors.credentials ? reqOrigin : \"*\";\n              if (!reqOrigin) return undefined;\n              const list = Array.isArray(origins) ? origins : [origins];\n              for (const o of list) {\n                if (typeof o === \"string\" && o === reqOrigin) return reqOrigin;\n                if (o instanceof RegExp && o.test(reqOrigin)) return reqOrigin;\n              }\n              return undefined;\n            };\n\n            const applyCorsHeaders = (req: any, res: any) => {\n              const origin = resolveOrigin(req);\n              if (origin) res.setHeader(\"Access-Control-Allow-Origin\", origin);\n              if (cors.credentials) res.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n              res.setHeader(\"Vary\", \"Origin\");\n              res.setHeader(\"Access-Control-Allow-Methods\", allowMethods);\n              const hdrs = allowHeaders(req);\n              if (hdrs) res.setHeader(\"Access-Control-Allow-Headers\", hdrs);\n              if (exposed) res.setHeader(\"Access-Control-Expose-Headers\", exposed);\n              if (typeof cors.maxAge === \"number\") res.setHeader(\"Access-Control-Max-Age\", String(cors.maxAge));\n            };\n\n            app.options(path, (req: any, res: any) => {\n              applyCorsHeaders(req, res);\n              res.status(204).end();\n            });\n\n            app.use((req: any, res: any, next: any) => {\n              if (req.path === path) applyCorsHeaders(req, res);\n              next();\n            });\n          }\n\n          // Custom auth middleware hook (optional)\n          if (transportConfig.auth?.customMiddleware) {\n            app.use(transportConfig.auth.customMiddleware);\n          }\n\n          // Built-in auth (optional)\n          const authOpts = transportConfig.auth;\n          const shouldRequireAuthFor = (req: any): boolean => {\n            if (!authOpts) return false;\n            const reqPath = req.path;\n            const pub = authOpts.publicPaths || [];\n            const prot = authOpts.protectedPaths;\n            if (pub.includes(reqPath)) return false;\n            if (prot && !prot.includes(reqPath)) return false;\n            return authOpts.required !== false; // default true\n          };\n\n          // Minimal JWT verifier supporting HS256 and RS256\n          const base64urlDecode = (s: string) => Buffer.from(s.replace(/-/g, \"+\").replace(/_/g, \"/\"), \"base64\");\n          const verifyJwt = async (token: string): Promise<boolean> => {\n            if (!authOpts?.jwt) return false;\n            const [h, p, sig] = token.split(\".\");\n            if (!h || !p || !sig) return false;\n            const header = JSON.parse(base64urlDecode(h).toString(\"utf8\"));\n            const payload = JSON.parse(base64urlDecode(p).toString(\"utf8\"));\n            const alg = header.alg as \"HS256\" | \"RS256\";\n            if (authOpts.jwt.algorithms && !authOpts.jwt.algorithms.includes(alg)) return false;\n            const data = Buffer.from(`${h}.${p}`);\n            const signature = base64urlDecode(sig);\n            if (alg === \"HS256\") {\n              const secret = authOpts.jwt.secret;\n              if (!secret) return false;\n              const hmac = (await import(\"node:crypto\")).createHmac(\"sha256\", secret).update(data).digest();\n              if (!hmac.equals(signature)) return false;\n            } else if (alg === \"RS256\") {\n              const crypto = await import(\"node:crypto\");\n              let key = authOpts.jwt.publicKey;\n              if (!key && authOpts.jwt.getPublicKey) {\n                key = await authOpts.jwt.getPublicKey(header, payload);\n              }\n              if (!key) return false;\n              const verify = crypto.createVerify(\"RSA-SHA256\");\n              verify.update(data);\n              verify.end();\n              const ok = verify.verify(key, signature);\n              if (!ok) return false;\n            } else {\n              return false;\n            }\n            // Optional audience/issuer checks\n            if (authOpts.jwt.audience) {\n              const allowed = Array.isArray(authOpts.jwt.audience) ? authOpts.jwt.audience : [authOpts.jwt.audience];\n              if (!allowed.includes(payload.aud)) return false;\n            }\n            if (authOpts.jwt.issuer) {\n              const allowed = Array.isArray(authOpts.jwt.issuer) ? authOpts.jwt.issuer : [authOpts.jwt.issuer];\n              if (!allowed.includes(payload.iss)) return false;\n            }\n            const nowSec = Math.floor(Date.now() / 1000);\n            const tol = authOpts.jwt.clockToleranceSec || 0;\n            if (payload.nbf && nowSec + tol < payload.nbf) return false;\n            if (payload.exp && nowSec - tol >= payload.exp) return false;\n            return true;\n          };\n\n          const authenticate = async (req: any): Promise<boolean> => {\n            if (!authOpts) return true;\n            const authz = req.headers.authorization as string | undefined;\n            const token = authz?.startsWith(\"Bearer \") ? authz.slice(7) : undefined;\n            if (!token) {\n              // allow custom validator to decide on missing token\n              if (authOpts.validator) return !!(await authOpts.validator(req, token));\n              return false;\n            }\n            if (authOpts.scheme === \"jwt\" || authOpts.jwt) {\n              const ok = await verifyJwt(token);\n              if (!ok) return false;\n            } else if (authOpts.scheme === \"bearer\" || !authOpts.scheme) {\n              if (authOpts.allowedTokens && !authOpts.allowedTokens.includes(token)) {\n                // fall through to validator if provided\n                if (authOpts.validator) return !!(await authOpts.validator(req, token));\n                return false;\n              }\n            }\n            if (authOpts.validator) {\n              const ok = await authOpts.validator(req, token);\n              if (!ok) return false;\n            }\n            return true;\n          };\n\n          const transports: { [sessionId: string]: any } = {};\n\n          app.all(path, async (req: any, res: any) => {\n            if (shouldRequireAuthFor(req)) {\n              const ok = await authenticate(req);\n              if (!ok) {\n                res.status(401).json({ error: \"Unauthorized\" });\n                return;\n              }\n            }\n\n            const sessionId = req.headers[\"mcp-session-id\"] as string | undefined;\n            let transport: any;\n\n            if (sessionId && transports[sessionId]) {\n              transport = transports[sessionId];\n            } else {\n              transport = new StreamableHTTPServerTransport({\n                sessionIdGenerator:\n                  transportConfig.sessionIdGenerator ||\n                  (() => Math.random().toString(36).substring(7)),\n                onsessioninitialized: (sessionId: string) => {\n                  transports[sessionId] = transport;\n                },\n              });\n\n              transport.onclose = () => {\n                if (transport.sessionId) delete transports[transport.sessionId];\n              };\n\n              await server.connect(transport);\n            }\n\n            await transport.handleRequest(req, res, req.body);\n          });\n\n          await new Promise<void>((resolve) => {\n            app.listen(port, transportConfig.host || \"localhost\", () => {\n              resolve();\n            });\n          });\n          break;\n        }\n\n        default:\n          logger.mcpError(\n            `Unsupported transport type: ${transportConfig.type}`,\n          );\n          throw new Error(\n            `Unsupported transport type: ${transportConfig.type}`,\n          );\n      }\n\n      logger.mcpError(`Successfully started ${transportConfig.type} transport`);\n    } catch (error) {\n      logger.mcpError(\n        `Error starting ${transportConfig.type} transport: ${error instanceof Error ? error.message : String(error)}`,\n      );\n      if (error instanceof Error && error.stack) {\n        logger.mcpError(`Stack trace: ${error.stack}`);\n      }\n      throw error;\n    }\n  }\n\n  public async parse(processArgs?: string[], options?: any): Promise<any> {\n    debug.log(\"ArgParser.parse() called with args:\", processArgs);\n    // Call the base class parse method directly to avoid any override issues\n    debug.log(\"About to call ArgParserBase.prototype.parse.call()\");\n    let result = await ArgParserBase.prototype.parse.call(\n      this,\n      processArgs,\n      options,\n    );\n    debug.log(\"ArgParserBase.prototype.parse.call() returned:\", typeof result);\n\n    // If fuzzy mode prevented execution, return the result as-is\n    const anyResult = result as any;\n    if (anyResult._fuzzyModePreventedExecution) {\n      return result;\n    }\n\n    // Only process async handler promise if deep option is true (default) and ArgParserBase didn't handle it\n    // When deep is false, leave _asyncHandlerPromise for manual handling\n    const shouldAutoProcess = options?.deep !== false;\n    if (shouldAutoProcess && (result as any)._asyncHandlerPromise) {\n      result = await this.#processAsyncHandlerPromise(result);\n    }\n\n    return result;\n  }\n\n  /**\n   * CLI-friendly parse method that automatically handles ParseResult objects\n   * When autoExit is false, this method will call process.exit() based on ParseResult\n   * This ensures backward compatibility for CLI applications\n   */\n  public parseForCli(processArgs?: string[], options?: any): any {\n    const result = this.parse(processArgs, options);\n\n    // Handle ParseResult objects when autoExit is false\n    if (\n      result &&\n      typeof result === \"object\" &&\n      \"success\" in result &&\n      \"exitCode\" in result\n    ) {\n      const parseResult = result as ParseResult;\n      if (\n        parseResult.shouldExit &&\n        typeof process === \"object\" &&\n        typeof process.exit === \"function\"\n      ) {\n        process.exit(parseResult.exitCode as never);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Alias for parse() method for backward compatibility\n   * Since parse() is already async, this just calls parse()\n   *\n   * @deprecated Use parse() instead. This method will be removed in a future version.\n   */\n  public parseAsync(processArgs?: string[], options?: any): Promise<any> {\n    return this.parse(processArgs, options);\n  }\n\n  /**\n   * Convenience method for auto-execution: only runs if the script is executed directly (not imported).\n   * This eliminates the need for boilerplate code to check if the script is being run directly.\n   *\n   * @param importMetaUrl Pass import.meta.url from your script for reliable detection\n   * @param processArgs Optional arguments to parse (defaults to process.argv.slice(2))\n   * @param options Additional parse options\n   * @returns Promise that resolves to the parse result, or empty object if script is imported\n   *\n   * @example\n   * ```typescript\n   * // At the bottom of your CLI script:\n   * await cli.parseIfExecutedDirectly(import.meta.url);\n   *\n   * // With error handling:\n   * await cli.parseIfExecutedDirectly(import.meta.url).catch((error) => {\n   *   console.error(\"Fatal error:\", error instanceof Error ? error.message : String(error));\n   *   process.exit(1);\n   * });\n   * ```\n   */\n  public async parseIfExecutedDirectly(\n    importMetaUrl: string,\n    processArgs?: string[],\n    options?: any\n  ): Promise<any> {\n    return this.parse(processArgs, {\n      ...options,\n      autoExecute: true,\n      importMetaUrl,\n    });\n  }\n\n  async #processAsyncHandlerPromise(result: any): Promise<any> {\n    const anyResult = result as any;\n\n    // Check if there's an async handler that needs to be awaited\n    if (anyResult._asyncHandlerPromise) {\n      try {\n        const handlerResult = await anyResult._asyncHandlerPromise;\n        anyResult.handlerResponse = handlerResult;\n\n        // Merge handler result into final args if it's an object\n        if (\n          handlerResult &&\n          typeof handlerResult === \"object\" &&\n          !Array.isArray(handlerResult)\n        ) {\n          Object.assign(anyResult, handlerResult);\n        }\n      } catch (error) {\n        // Handle async handler errors - respect the handleErrors setting\n        if ((this as any)[\"#handleErrors\"]) {\n          // When handleErrors is true, catch and wrap the error\n          anyResult.$error = {\n            type: \"handler_error\",\n            message: error instanceof Error ? error.message : String(error),\n            details: error,\n          };\n        } else {\n          // When handleErrors is false, throw the error (consistent with sync behavior)\n          throw error;\n        }\n      }\n\n      // Clean up the async handler info\n      delete anyResult._asyncHandlerPromise;\n      delete anyResult._asyncHandlerInfo;\n    }\n\n    return result;\n  }\n\n  /**\n   * Add an MCP sub-command that starts an MCP server exposing this parser's functionality\n   * @param subCommandName Name of the sub-command (default: \"mcp-server\")\n   * @param serverInfo Server configuration (supports extended DXT fields)\n   * @param options Optional configuration including preset transports and tool options\n   * @returns This ArgParserWithMcp instance for chaining\n   * @deprecated Use withMcp() to configure server metadata and --s-mcp-serve system flag instead. This method will be removed in v2.0.\n   */\n  public addMcpSubCommand(\n    subCommandName: string | undefined,\n    serverInfo: DxtServerInfo,\n    options?: McpSubCommandOptions & { toolOptions?: GenerateMcpToolsOptions },\n  ): this;\n\n  /**\n   * Add an MCP sub-command that starts an MCP server exposing this parser's functionality\n   * @param subCommandName Name of the sub-command (default: \"mcp-server\")\n   * @param serverInfo Server configuration (supports extended DXT fields)\n   * @param toolOptions Optional MCP tool generation options (backward compatibility)\n   * @returns This ArgParserWithMcp instance for chaining\n   * @deprecated Use withMcp() to configure server metadata and --s-mcp-serve system flag instead. This method will be removed in v2.0.\n   */\n  public addMcpSubCommand(\n    subCommandName: string | undefined,\n    serverInfo: DxtServerInfo,\n    toolOptions?: GenerateMcpToolsOptions,\n  ): this;\n\n  public addMcpSubCommand(\n    subCommandName: string | undefined = \"mcp-server\",\n    serverInfo: DxtServerInfo,\n    optionsOrToolOptions?:\n      | (McpSubCommandOptions & { toolOptions?: GenerateMcpToolsOptions })\n      | GenerateMcpToolsOptions,\n  ): this {\n    // Emit deprecation warning\n    console.warn(`[DEPRECATED] addMcpSubCommand() is deprecated and will be removed in v2.0.\nPlease use withMcp() to configure server metadata and the --s-mcp-serve system flag instead.\nMigration guide: https://github.com/alcyone-labs/arg-parser/blob/main/docs/MCP-MIGRATION.md`);\n\n    // Handle backward compatibility: if the third parameter is a GenerateMcpToolsOptions object\n    // (detected by checking if it has properties that only exist in GenerateMcpToolsOptions)\n    let options: McpSubCommandOptions & {\n      toolOptions?: GenerateMcpToolsOptions;\n    };\n\n    if (\n      optionsOrToolOptions &&\n      typeof optionsOrToolOptions === \"object\" &&\n      (\"includeSubCommands\" in optionsOrToolOptions ||\n        \"toolNamePrefix\" in optionsOrToolOptions ||\n        \"toolNameSuffix\" in optionsOrToolOptions)\n    ) {\n      // This is the old GenerateMcpToolsOptions format\n      options = {\n        toolOptions: optionsOrToolOptions as GenerateMcpToolsOptions,\n      };\n    } else {\n      // This is the new options format or undefined\n      options =\n        (optionsOrToolOptions as McpSubCommandOptions & {\n          toolOptions?: GenerateMcpToolsOptions;\n        }) || {};\n    }\n\n    const { defaultTransports, defaultTransport, toolOptions } = options;\n\n    // Store server configuration for backward compatibility with --s-mcp-serve\n    if (!this._mcpServerConfig) {\n      this._mcpServerConfig = {\n        serverInfo,\n        defaultTransports,\n        defaultTransport,\n        toolOptions,\n      };\n    }\n\n    const mcpHandler = async (ctx: IHandlerContext): Promise<void> => {\n      // Hijack console globally to prevent STDOUT contamination in MCP mode\n      // TODO: upgrade to options-based API\n      const logger = createMcpLogger(\"MCP Handler\");\n      // Ensure the logger is properly cast as Console interface\n      (globalThis as any).console = logger;\n\n      try {\n        logger.mcpError(\n          \"MCP handler started - console hijacked for MCP safety\",\n        );\n        logger.mcpError(`Handler context args: ${JSON.stringify(ctx.args)}`);\n\n        if (!ctx.parentParser) {\n          logger.mcpError(\n            \"Critical: MCP server handler called without a parent parser context.\",\n          );\n          process.exit(1);\n        }\n\n        logger.mcpError(\"Parent parser found, casting to ArgParser\");\n        // Cast parent parser to ArgParser to access MCP methods\n        const mcpParser = ctx.parentParser as ArgParser;\n\n        // Check if multiple transports are specified via CLI\n        logger.mcpError(\"Checking transport configuration\");\n        const transports = ctx.args[\"transports\"] as string;\n\n        if (transports) {\n          logger.mcpError(\n            `Multiple transports specified via CLI: ${transports}`,\n          );\n          // Parse multiple transports configuration from CLI\n          try {\n            const transportConfigs = JSON.parse(transports);\n            logger.mcpError(\n              `Parsed transport configs: ${JSON.stringify(transportConfigs)}`,\n            );\n            await mcpParser.startMcpServerWithMultipleTransports(\n              serverInfo,\n              transportConfigs,\n              toolOptions,\n            );\n          } catch (error: any) {\n            logger.mcpError(\n              `Error parsing transports configuration: ${error.message}`,\n            );\n            logger.mcpError(\n              'Expected JSON format: \\'[{\"type\":\"stdio\"},{\"type\":\"sse\",\"port\":3001}]\\'',\n            );\n            process.exit(1);\n          }\n        } else if (defaultTransports && defaultTransports.length > 0) {\n          logger.mcpError(\n            `Using preset multiple transports: ${JSON.stringify(defaultTransports)}`,\n          );\n          // Use preset multiple transports configuration\n          await mcpParser.startMcpServerWithMultipleTransports(\n            serverInfo,\n            defaultTransports,\n            toolOptions,\n          );\n        } else if (defaultTransport) {\n          logger.mcpError(\n            `Using preset single transport: ${JSON.stringify(defaultTransport)}`,\n          );\n          // Use preset single transport configuration\n          await mcpParser.startMcpServerWithTransport(\n            serverInfo,\n            defaultTransport.type,\n            {\n              port: defaultTransport.port,\n              host: defaultTransport.host,\n              path: defaultTransport.path,\n              sessionIdGenerator: defaultTransport.sessionIdGenerator,\n            },\n            toolOptions,\n          );\n        } else {\n          // Single transport mode from CLI flags (backwards compatibility)\n          const transportType =\n            (ctx.args[\"transport\"] as \"stdio\" | \"sse\" | \"streamable-http\") ||\n            \"stdio\";\n          const transportOptions = {\n            port: ctx.args[\"port\"] as number,\n            host: ctx.args[\"host\"] as string,\n            path: ctx.args[\"path\"] as string,\n          };\n\n          logger.mcpError(\n            `Using single transport mode: ${transportType} with options: ${JSON.stringify(transportOptions)}`,\n          );\n          await mcpParser.startMcpServerWithTransport(\n            serverInfo,\n            transportType,\n            transportOptions,\n            toolOptions,\n          );\n        }\n\n        logger.mcpError(\"MCP server setup completed, keeping process alive\");\n        // Keep the process alive\n        return new Promise(() => {});\n      } catch (error) {\n        logger.mcpError(\n          `Error in MCP handler: ${error instanceof Error ? error.message : String(error)}`,\n        );\n        if (error instanceof Error && error.stack) {\n          logger.mcpError(`Stack trace: ${error.stack}`);\n        }\n        process.exit(1);\n      }\n    };\n\n    // Create sub-command parser without transport options (now handled as system flags)\n    const mcpSubParser = new ArgParserBase({}, []);\n\n    this.addSubCommand({\n      name: subCommandName,\n      description: `Start ${serverInfo.name} as an MCP server`,\n      handler: mcpHandler,\n      parser: mcpSubParser,\n      isMcp: true,\n      mcpServerInfo: serverInfo,\n      mcpToolOptions: toolOptions,\n    });\n\n    return this;\n  }\n\n  /**\n   * Factory method to create an ArgParser instance with MCP capabilities\n   * This provides a clean API for users who want MCP functionality from the start\n   * Automatically sets handleErrors: false for MCP compatibility\n   *\n   * @param options Combined ArgParser and MCP server configuration options\n   * @param initialFlags Optional array of initial flags to add\n   * @returns ArgParser instance with MCP capabilities and stored server metadata\n   */\n  public static withMcp<T = any>(\n    options?: WithMcpOptions<T>,\n    initialFlags?: readonly IFlag[],\n  ): ArgParser<T> {\n    // Extract MCP-specific options\n    const { mcp: mcpConfig, ...argParserOptions } = options || {};\n\n    // Ensure handleErrors is false for MCP compatibility unless explicitly overridden\n    const mcpOptions = {\n      handleErrors: false,\n      ...argParserOptions,\n    };\n\n    const parser = new ArgParser<T>(mcpOptions as any, initialFlags);\n\n    // Store MCP server configuration for later use\n    if (mcpConfig) {\n      (parser as any)._mcpServerConfig = mcpConfig;\n    }\n\n    return parser;\n  }\n\n  /**\n   * Create an ArgParser instance optimized for CLI usage\n   * This sets autoExit: true by default for traditional CLI behavior\n   */\n  public static forCli<T = any>(\n    options?: ConstructorParameters<typeof ArgParserBase>[0],\n    initialFlags?: ConstructorParameters<typeof ArgParserBase>[1],\n  ): ArgParser<T> {\n    const cliOptions = {\n      autoExit: true,\n      handleErrors: true,\n      ...options,\n    };\n    return new ArgParser<T>(cliOptions as any, initialFlags);\n  }\n\n  /**\n   * Create an ArgParser instance optimized for library usage\n   * This sets autoExit: false by default for programmatic control\n   */\n  public static forLibrary<T = any>(\n    options?: ConstructorParameters<typeof ArgParserBase>[0],\n    initialFlags?: ConstructorParameters<typeof ArgParserBase>[1],\n  ): ArgParser<T> {\n    const libraryOptions = {\n      autoExit: false,\n      handleErrors: false,\n      ...options,\n    };\n    return new ArgParser<T>(libraryOptions as any, initialFlags);\n  }\n\n  public static fromArgParser<T = any>(parser: ArgParserBase<T>): ArgParser<T> {\n    const originalParser = parser as any;\n\n    const mcpParser = new ArgParser<T>({\n      appName: originalParser.getAppName(),\n      appCommandName: originalParser.getAppCommandName(),\n      description: originalParser.getDescription(),\n      handler: originalParser.getHandler(),\n      handleErrors: originalParser[\"#handleErrors\"],\n      throwForDuplicateFlags: originalParser[\"#throwForDuplicateFlags\"],\n    });\n\n    // Copy flags from original parser (excluding help flag which is auto-added)\n    const originalFlags = originalParser.flags.filter(\n      (flag: any) => flag.name !== \"help\",\n    );\n    if (originalFlags.length > 0) {\n      mcpParser.addFlags(originalFlags);\n    }\n\n    // Copy additional private fields that aren't in constructor options\n    const newParser = mcpParser as any;\n    newParser[\"#subCommandName\"] = originalParser[\"#subCommandName\"];\n    newParser[\"#parameters\"] = originalParser[\"#parameters\"];\n    newParser[\"#parentParser\"] = originalParser[\"#parentParser\"];\n    newParser[\"#lastParseResult\"] = originalParser[\"#lastParseResult\"];\n    newParser[\"#inheritParentFlags\"] = originalParser[\"#inheritParentFlags\"];\n    newParser[\"#subCommands\"] = originalParser[\"#subCommands\"];\n\n    return mcpParser;\n  }\n}\n","import { ArgParser } from \"../core/ArgParser\";\nimport type { IArgParserParams } from \"../core/ArgParserBase\";\nimport type { IFlag } from \"../core/types\";\n\n/**\n * MCP-optimized ArgParser that excludes config file functionality\n * This version doesn't load any config plugins, making it suitable for\n * autonomous builds where TOML/YAML dependencies cause bundling issues.\n */\nexport class ArgParserMcp<\n  THandlerReturn = any,\n> extends ArgParser<THandlerReturn> {\n  constructor(\n    params?: IArgParserParams<THandlerReturn>,\n    initialFlags?: IFlag[],\n  ) {\n    // Set a flag to indicate this is MCP mode (no config plugins)\n    const mcpParams = {\n      ...params,\n      _mcpMode: true, // Internal flag to disable config functionality\n    };\n    super(mcpParams as any, initialFlags);\n  }\n\n  /**\n   * Override parse to skip config file processing\n   */\n  public parse(processArgs: string[], options?: any): any {\n    // Filter out config-related system flags before parsing\n    const filteredArgs = processArgs.filter(\n      (arg) =>\n        !arg.startsWith(\"--s-with-env\") &&\n        !arg.startsWith(\"--s-save-to-env\") &&\n        !arg.startsWith(\"--s-load-env\"),\n    );\n\n    return super.parse(filteredArgs, options);\n  }\n}\n\n/**\n * Convenience function to create MCP-optimized ArgParser\n * This is the recommended way to create ArgParser instances for MCP servers\n */\nexport function createMcpArgParser<THandlerReturn = any>(\n  params?: IArgParserParams<THandlerReturn>,\n  initialFlags?: IFlag[],\n): ArgParserMcp<THandlerReturn> {\n  return ArgParserMcp.withMcp(params, initialFlags);\n}\n","import { ConfigPlugin } from \"./ConfigPlugin\";\n\n/**\n * TOML configuration plugin (requires smol-toml dependency)\n * This plugin is optional and only loaded when TOML support is needed\n */\nexport class TomlConfigPlugin extends ConfigPlugin {\n  readonly supportedExtensions = [\".toml\", \".tml\"];\n  readonly name = \"toml\";\n\n  private tomlModule: any = null;\n\n  constructor(tomlModule?: any) {\n    super();\n    if (tomlModule) {\n      this.tomlModule = tomlModule;\n    } else {\n      this.loadTomlModule();\n    }\n  }\n\n  private loadTomlModule(): void {\n    try {\n      // Dynamic import to avoid bundling issues\n      if (typeof require !== \"undefined\") {\n        this.tomlModule = require(\"smol-toml\");\n      } else {\n        // For ESM environments, we need to use dynamic import\n        // This will be handled asynchronously in the factory function\n        throw new Error(\"TOML module not available in this environment\");\n      }\n    } catch (error) {\n      throw new Error(\n        \"TOML plugin requires smol-toml dependency. \" +\n          \"Install it with: npm install smol-toml\",\n      );\n    }\n  }\n\n  parse(content: string): Record<string, any> {\n    if (!this.tomlModule) {\n      // Fallback to simple parsing if module not available\n      return this.parseTomlSimple(content);\n    }\n\n    try {\n      const parsed = this.tomlModule.parse(content);\n      if (typeof parsed !== \"object\" || parsed === null) {\n        throw new Error(\"TOML file must contain an object at the root level\");\n      }\n      return parsed;\n    } catch (error) {\n      throw new Error(\n        `Failed to parse TOML: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  generate(\n    _config: Record<string, any>,\n    flags: any[],\n    parsedArgs: any,\n  ): string {\n    const lines: string[] = [];\n    lines.push(\"# Environment configuration generated by ArgParser\");\n    lines.push(\"# Format: TOML\");\n    lines.push(\"\");\n\n    const configWithValues: Record<string, any> = {};\n\n    for (const flag of flags) {\n      if (flag.name === \"help\") continue;\n\n      const flagValue = parsedArgs[flag.name];\n      const isSet = flagValue !== undefined && flagValue !== null;\n      const isMandatory = flag.mandatory === true;\n\n      lines.push(`# ${flag.description || flag.name}`);\n      lines.push(`# Type: ${this.getTypeString(flag.type)}`);\n\n      if (flag.defaultValue !== undefined) {\n        lines.push(`# Default: ${flag.defaultValue}`);\n      }\n\n      if (isSet) {\n        configWithValues[flag.name] = flagValue;\n      } else if (isMandatory) {\n        configWithValues[flag.name] =\n          flag.defaultValue !== undefined ? flag.defaultValue : null;\n      }\n\n      lines.push(\"\");\n    }\n\n    if (!this.tomlModule) {\n      // Simple TOML generation if module not available\n      for (const [key, value] of Object.entries(configWithValues)) {\n        if (typeof value === \"string\") {\n          lines.push(`${key} = \"${value}\"`);\n        } else {\n          lines.push(`${key} = ${JSON.stringify(value)}`);\n        }\n      }\n      return lines.join(\"\\n\");\n    }\n\n    try {\n      const tomlContent = this.tomlModule.stringify(configWithValues);\n      return lines.join(\"\\n\") + \"\\n\" + tomlContent;\n    } catch (error) {\n      throw new Error(\n        `Failed to generate TOML: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  /**\n   * Simple TOML parsing fallback for basic key-value pairs\n   */\n  private parseTomlSimple(content: string): Record<string, any> {\n    const config: Record<string, any> = {};\n    const lines = content.split(\"\\n\");\n\n    for (const line of lines) {\n      const trimmed = line.trim();\n      if (trimmed && !trimmed.startsWith(\"#\")) {\n        const equalIndex = trimmed.indexOf(\"=\");\n        if (equalIndex > 0) {\n          const key = trimmed.substring(0, equalIndex).trim();\n          let value = trimmed.substring(equalIndex + 1).trim();\n\n          // Remove quotes if present\n          if (\n            (value.startsWith('\"') && value.endsWith('\"')) ||\n            (value.startsWith(\"'\") && value.endsWith(\"'\"))\n          ) {\n            value = value.slice(1, -1);\n          }\n\n          config[key] = value;\n        }\n      }\n    }\n\n    return config;\n  }\n\n  private getTypeString(type: any): string {\n    if (typeof type === \"function\") {\n      return type.name || \"custom function\";\n    }\n    return String(type).toLowerCase();\n  }\n}\n\n/**\n * Factory function to create TOML plugin safely\n * Returns null if TOML dependency is not available\n */\nexport function createTomlPlugin(): TomlConfigPlugin | null {\n  try {\n    return new TomlConfigPlugin();\n  } catch (error) {\n    console.warn(\n      \"TOML plugin not available:\",\n      error instanceof Error ? error.message : String(error),\n    );\n    return null;\n  }\n}\n\n/**\n * Async factory function to create TOML plugin with ESM support\n * Returns null if TOML dependency is not available\n */\nexport async function createTomlPluginAsync(): Promise<TomlConfigPlugin | null> {\n  try {\n    // Try CommonJS first\n    if (typeof require !== \"undefined\") {\n      try {\n        const tomlModule = require(\"smol-toml\");\n        return new TomlConfigPlugin(tomlModule);\n      } catch (error) {\n        // Fall through to ESM import\n      }\n    }\n\n    // Try ESM dynamic import\n    const tomlModule = await import(\"smol-toml\");\n    return new TomlConfigPlugin(tomlModule);\n  } catch (error) {\n    console.warn(\n      \"TOML plugin not available:\",\n      error instanceof Error ? error.message : String(error),\n    );\n    return null;\n  }\n}\n","import { ConfigPlugin } from \"./ConfigPlugin\";\n\n/**\n * YAML configuration plugin (requires js-yaml dependency)\n * This plugin is optional and only loaded when YAML support is needed\n */\nexport class YamlConfigPlugin extends ConfigPlugin {\n  readonly supportedExtensions = [\".yaml\", \".yml\"];\n  readonly name = \"yaml\";\n\n  private yamlModule: any = null;\n\n  constructor(yamlModule?: any) {\n    super();\n    if (yamlModule) {\n      this.yamlModule = yamlModule;\n    } else {\n      this.loadYamlModule();\n    }\n  }\n\n  private loadYamlModule(): void {\n    try {\n      // Dynamic import to avoid bundling issues\n      if (typeof require !== \"undefined\") {\n        this.yamlModule = require(\"js-yaml\");\n      } else {\n        throw new Error(\"YAML module not available in this environment\");\n      }\n    } catch (error) {\n      throw new Error(\n        \"YAML plugin requires js-yaml dependency. \" +\n          \"Install it with: npm install js-yaml\",\n      );\n    }\n  }\n\n  parse(content: string): Record<string, any> {\n    if (!this.yamlModule) {\n      // Fallback to simple parsing if module not available\n      return this.parseYamlSimple(content);\n    }\n\n    try {\n      const parsed = this.yamlModule.load(content);\n      if (typeof parsed !== \"object\" || parsed === null) {\n        throw new Error(\"YAML file must contain an object at the root level\");\n      }\n      return parsed;\n    } catch (error) {\n      throw new Error(\n        `Failed to parse YAML: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  generate(\n    _config: Record<string, any>,\n    flags: any[],\n    parsedArgs: any,\n  ): string {\n    const lines: string[] = [];\n    lines.push(\"# Environment configuration generated by ArgParser\");\n    lines.push(\"# Format: YAML\");\n    lines.push(\"\");\n\n    const configWithValues: Record<string, any> = {};\n\n    for (const flag of flags) {\n      if (flag.name === \"help\") continue;\n\n      const flagValue = parsedArgs[flag.name];\n      const isSet = flagValue !== undefined && flagValue !== null;\n      const isMandatory = flag.mandatory === true;\n\n      if (isSet) {\n        configWithValues[flag.name] = flagValue;\n      } else if (isMandatory) {\n        configWithValues[flag.name] =\n          flag.defaultValue !== undefined ? flag.defaultValue : null;\n      }\n    }\n\n    if (!this.yamlModule) {\n      // Simple YAML generation if module not available\n      for (const [key, value] of Object.entries(configWithValues)) {\n        lines.push(`${key}: ${JSON.stringify(value)}`);\n      }\n      return lines.join(\"\\n\");\n    }\n\n    try {\n      const yamlContent = this.yamlModule.dump(configWithValues, {\n        indent: 2,\n        lineWidth: 120,\n        noRefs: true,\n      });\n      return lines.join(\"\\n\") + \"\\n\" + yamlContent;\n    } catch (error) {\n      throw new Error(\n        `Failed to generate YAML: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  /**\n   * Simple YAML parsing fallback for basic key-value pairs\n   */\n  private parseYamlSimple(content: string): Record<string, any> {\n    const config: Record<string, any> = {};\n    const lines = content.split(\"\\n\");\n\n    for (const line of lines) {\n      const trimmed = line.trim();\n      if (trimmed && !trimmed.startsWith(\"#\")) {\n        const colonIndex = trimmed.indexOf(\":\");\n        if (colonIndex > 0) {\n          const key = trimmed.substring(0, colonIndex).trim();\n          let value = trimmed.substring(colonIndex + 1).trim();\n\n          // Remove quotes if present\n          if (\n            (value.startsWith('\"') && value.endsWith('\"')) ||\n            (value.startsWith(\"'\") && value.endsWith(\"'\"))\n          ) {\n            value = value.slice(1, -1);\n          }\n\n          config[key] = value;\n        }\n      }\n    }\n\n    return config;\n  }\n}\n\n/**\n * Factory function to create YAML plugin safely\n * Returns null if YAML dependency is not available\n */\nexport function createYamlPlugin(): YamlConfigPlugin | null {\n  try {\n    return new YamlConfigPlugin();\n  } catch (error) {\n    console.warn(\n      \"YAML plugin not available:\",\n      error instanceof Error ? error.message : String(error),\n    );\n    return null;\n  }\n}\n\n/**\n * Async factory function to create YAML plugin with ESM support\n * Returns null if YAML dependency is not available\n */\nexport async function createYamlPluginAsync(): Promise<YamlConfigPlugin | null> {\n  try {\n    // Try CommonJS first\n    if (typeof require !== \"undefined\") {\n      try {\n        const yamlModule = require(\"js-yaml\");\n        return new YamlConfigPlugin(yamlModule);\n      } catch (error) {\n        // Fall through to ESM import\n      }\n    }\n\n    // Try ESM dynamic import\n    const yamlModule = await import(\"js-yaml\");\n    return new YamlConfigPlugin(yamlModule);\n  } catch (error) {\n    console.warn(\n      \"YAML plugin not available:\",\n      error instanceof Error ? error.message : String(error),\n    );\n    return null;\n  }\n}\n","import type { ArgParserBase } from \"../core/ArgParserBase\";\nimport type { ISubCommand, ProcessedFlag } from \"../core/types\";\n\nexport interface FuzzyTestOptions {\n  /** Maximum depth for command path exploration */\n  maxDepth?: number;\n  /** Number of random test cases to generate per command path */\n  randomTestCases?: number;\n  /** Include performance timing in results */\n  includePerformance?: boolean;\n  /** Test invalid combinations to verify error handling */\n  testErrorCases?: boolean;\n  /** Verbose output for debugging */\n  verbose?: boolean;\n}\n\nexport interface TestResult {\n  commandPath: string[];\n  args: string[];\n  success: boolean;\n  error?: string;\n  executionTime?: number;\n  parsedResult?: any;\n}\n\nexport interface FuzzyTestReport {\n  totalTests: number;\n  successfulTests: number;\n  failedTests: number;\n  commandPaths: string[][];\n  results: TestResult[];\n  summary: {\n    coverageByPath: Record<string, { total: number; passed: number }>;\n    errorTypes: Record<string, number>;\n  };\n}\n\nexport class ArgParserFuzzyTester {\n  private parser: ArgParserBase;\n  private options: Required<FuzzyTestOptions>;\n\n  constructor(parser: ArgParserBase, options: FuzzyTestOptions = {}) {\n    this.parser = parser;\n    this.options = {\n      maxDepth: options.maxDepth ?? 5,\n      randomTestCases: options.randomTestCases ?? 10,\n      includePerformance: options.includePerformance ?? true,\n      testErrorCases: options.testErrorCases ?? true,\n      verbose: options.verbose ?? false,\n    };\n  }\n\n  /**\n   * Run comprehensive fuzzy testing on the ArgParser instance\n   */\n  async runFuzzyTest(): Promise<FuzzyTestReport> {\n    const commandPaths = this.discoverCommandPaths();\n    const results: TestResult[] = [];\n\n    if (this.options.verbose) {\n      console.log(`Discovered ${commandPaths.length} command paths:`);\n      commandPaths.forEach((path) =>\n        console.log(`  ${path.join(\" \") || \"(root)\"}`),\n      );\n    }\n\n    for (const commandPath of commandPaths) {\n      const pathResults = await this.testCommandPath(commandPath);\n      results.push(...pathResults);\n    }\n\n    return this.generateReport(commandPaths, results);\n  }\n\n  /**\n   * Discover all possible command paths in the parser\n   */\n  private discoverCommandPaths(): string[][] {\n    const paths: string[][] = [];\n\n    // Add root path\n    paths.push([]);\n\n    // Recursively discover subcommand paths\n    this.discoverSubCommandPaths(this.parser, [], paths, 0);\n\n    return paths;\n  }\n\n  /**\n   * Recursively discover subcommand paths\n   */\n  private discoverSubCommandPaths(\n    parser: ArgParserBase,\n    currentPath: string[],\n    allPaths: string[][],\n    depth: number,\n  ): void {\n    if (depth >= this.options.maxDepth) return;\n\n    const subCommands = this.getSubCommands(parser);\n\n    for (const [subCommandName, subCommand] of subCommands) {\n      const newPath = [...currentPath, subCommandName];\n      allPaths.push(newPath);\n\n      // Recursively explore this subcommand's subcommands\n      this.discoverSubCommandPaths(\n        subCommand.parser,\n        newPath,\n        allPaths,\n        depth + 1,\n      );\n    }\n  }\n\n  /**\n   * Get subcommands from a parser instance\n   */\n  private getSubCommands(parser: ArgParserBase): Map<string, ISubCommand> {\n    return parser.getSubCommands();\n  }\n\n  /**\n   * Get flags from a parser instance\n   */\n  private getFlags(parser: ArgParserBase): ProcessedFlag[] {\n    return parser.flags;\n  }\n\n  /**\n   * Test a specific command path with various flag combinations\n   */\n  private async testCommandPath(commandPath: string[]): Promise<TestResult[]> {\n    const results: TestResult[] = [];\n    const targetParser = this.getParserForPath(commandPath);\n    const flags = this.getFlags(targetParser);\n\n    if (this.options.verbose) {\n      console.log(`Testing command path: ${commandPath.join(\" \") || \"(root)\"}`);\n    }\n\n    // Test valid combinations\n    const validCombinations = this.generateValidFlagCombinations(flags);\n    for (const flagArgs of validCombinations) {\n      const fullArgs = [...commandPath, ...flagArgs];\n      const result = await this.executeTest(fullArgs, commandPath);\n      results.push(result);\n    }\n\n    // Test random combinations\n    for (let i = 0; i < this.options.randomTestCases; i++) {\n      const randomArgs = this.generateRandomFlagCombination(flags);\n      const fullArgs = [...commandPath, ...randomArgs];\n      const result = await this.executeTest(fullArgs, commandPath);\n      results.push(result);\n    }\n\n    // Test error cases if enabled\n    if (this.options.testErrorCases) {\n      const errorCases = this.generateErrorCases(flags);\n      for (const errorArgs of errorCases) {\n        const fullArgs = [...commandPath, ...errorArgs];\n        const result = await this.executeTest(fullArgs, commandPath, true);\n        results.push(result);\n      }\n    }\n\n    return results;\n  }\n\n  /**\n   * Get the parser instance for a specific command path\n   */\n  private getParserForPath(commandPath: string[]): ArgParserBase {\n    let currentParser = this.parser;\n\n    for (const command of commandPath) {\n      const subCommands = this.getSubCommands(currentParser);\n      const subCommand = subCommands.get(command);\n      if (!subCommand) {\n        throw new Error(`Command path not found: ${commandPath.join(\" \")}`);\n      }\n      currentParser = subCommand.parser;\n    }\n\n    return currentParser;\n  }\n\n  /**\n   * Generate valid flag combinations for testing\n   */\n  private generateValidFlagCombinations(flags: ProcessedFlag[]): string[][] {\n    const combinations: string[][] = [];\n\n    // Separate mandatory and optional flags\n    const mandatoryFlags = flags.filter(\n      (f) =>\n        f[\"name\"] !== \"help\" &&\n        (typeof f[\"mandatory\"] === \"boolean\" ? f[\"mandatory\"] : false),\n    );\n    const optionalFlags = flags.filter(\n      (f) =>\n        f[\"name\"] !== \"help\" &&\n        (typeof f[\"mandatory\"] === \"boolean\" ? !f[\"mandatory\"] : true),\n    );\n\n    // Generate base combination with all mandatory flags\n    const mandatoryArgs: string[] = [];\n    for (const flag of mandatoryFlags) {\n      const flagArgs = this.generateFlagArgs(flag, \"valid\");\n      mandatoryArgs.push(...flagArgs);\n    }\n\n    // Test with just mandatory flags\n    if (mandatoryArgs.length > 0) {\n      combinations.push([...mandatoryArgs]);\n    } else {\n      // Test with no flags if no mandatory flags exist\n      combinations.push([]);\n    }\n\n    // Test each optional flag individually (with mandatory flags)\n    for (const flag of optionalFlags) {\n      const flagArgs = this.generateFlagArgs(flag, \"valid\");\n      if (flagArgs.length > 0) {\n        combinations.push([...mandatoryArgs, ...flagArgs]);\n      }\n    }\n\n    // Test combinations of optional flags (with mandatory flags)\n    if (optionalFlags.length > 1) {\n      // Test pairs of optional flags\n      for (let i = 0; i < optionalFlags.length - 1; i++) {\n        for (let j = i + 1; j < optionalFlags.length; j++) {\n          const flag1Args = this.generateFlagArgs(optionalFlags[i], \"valid\");\n          const flag2Args = this.generateFlagArgs(optionalFlags[j], \"valid\");\n          if (flag1Args.length > 0 && flag2Args.length > 0) {\n            combinations.push([...mandatoryArgs, ...flag1Args, ...flag2Args]);\n          }\n        }\n      }\n    }\n\n    return combinations;\n  }\n\n  /**\n   * Generate random flag combination\n   */\n  private generateRandomFlagCombination(flags: ProcessedFlag[]): string[] {\n    const args: string[] = [];\n    const availableFlags = flags.filter((f) => f[\"name\"] !== \"help\");\n\n    // Randomly select flags to include\n    for (const flag of availableFlags) {\n      if (Math.random() < 0.3) {\n        // 30% chance to include each flag\n        const flagArgs = this.generateFlagArgs(flag, \"random\");\n        args.push(...flagArgs);\n      }\n    }\n\n    return args;\n  }\n\n  /**\n   * Generate error test cases\n   */\n  private generateErrorCases(flags: ProcessedFlag[]): string[][] {\n    const errorCases: string[][] = [];\n\n    // Test invalid flag names\n    errorCases.push([\"--invalid-flag\"]);\n    errorCases.push([\"--nonexistent\", \"value\"]);\n\n    // Test flags with wrong types\n    for (const flag of flags) {\n      if (flag[\"name\"] === \"help\") continue;\n\n      const invalidArgs = this.generateFlagArgs(flag, \"invalid\");\n      if (invalidArgs.length > 0) {\n        errorCases.push(invalidArgs);\n      }\n    }\n\n    return errorCases;\n  }\n\n  /**\n   * Generate arguments for a specific flag\n   */\n  private generateFlagArgs(\n    flag: ProcessedFlag,\n    mode: \"valid\" | \"invalid\" | \"random\",\n  ): string[] {\n    const option = flag[\"options\"][0]; // Use first option\n    if (!option) return [];\n\n    if (flag[\"flagOnly\"]) {\n      return [option];\n    }\n\n    const values = this.generateFlagValues(flag, mode);\n    const args: string[] = [];\n\n    for (const value of values) {\n      if (flag[\"allowLigature\"] && Math.random() < 0.5) {\n        args.push(`${option}=${value}`);\n      } else {\n        args.push(option, value);\n      }\n    }\n\n    return args;\n  }\n\n  /**\n   * Generate values for a flag based on its type and constraints\n   */\n  private generateFlagValues(\n    flag: ProcessedFlag,\n    mode: \"valid\" | \"invalid\" | \"random\",\n  ): string[] {\n    const count =\n      flag[\"allowMultiple\"] && mode !== \"invalid\"\n        ? Math.floor(Math.random() * 3) + 1\n        : 1;\n\n    const values: string[] = [];\n\n    for (let i = 0; i < count; i++) {\n      values.push(this.generateSingleFlagValue(flag, mode));\n    }\n\n    return values;\n  }\n\n  /**\n   * Generate a single value for a flag\n   */\n  private generateSingleFlagValue(\n    flag: ProcessedFlag,\n    mode: \"valid\" | \"invalid\" | \"random\",\n  ): string {\n    if (mode === \"invalid\") {\n      // Generate intentionally invalid values\n      if (flag[\"type\"] === Number) return \"not-a-number\";\n      if (flag[\"enum\"] && flag[\"enum\"].length > 0) return \"invalid-enum-value\";\n      if (flag[\"type\"] === Boolean) return \"not-boolean\";\n      return \"invalid-value\";\n    }\n\n    // Handle enum values\n    if (flag[\"enum\"] && flag[\"enum\"].length > 0) {\n      const randomIndex = Math.floor(Math.random() * flag[\"enum\"].length);\n      return String(flag[\"enum\"][randomIndex]);\n    }\n\n    // Generate values based on type\n    if (flag[\"type\"] === Number) {\n      return String(Math.floor(Math.random() * 1000));\n    }\n\n    if (flag[\"type\"] === Boolean) {\n      return Math.random() < 0.5 ? \"true\" : \"false\";\n    }\n\n    // Default to string\n    const testStrings = [\n      \"test-value\",\n      \"hello-world\",\n      \"file.txt\",\n      \"/path/to/file\",\n      \"user@example.com\",\n      \"123\",\n      \"special-chars-!@#\",\n    ];\n\n    return testStrings[Math.floor(Math.random() * testStrings.length)];\n  }\n\n  /**\n   * Execute a single test case\n   */\n  private async executeTest(\n    args: string[],\n    commandPath: string[],\n    expectError: boolean = false,\n  ): Promise<TestResult> {\n    const startTime = this.options.includePerformance ? Date.now() : 0;\n\n    try {\n      // Store the original input arguments for logging visibility\n      const originalArgs = [...args];\n\n      const testResult = this.parser.parse(args, {\n        skipHelpHandling: true,\n      });\n\n      // Store original args in the result for logging\n      if (testResult && typeof testResult === \"object\") {\n        (testResult as any)._originalInputArgs = originalArgs;\n      }\n\n      const executionTime = this.options.includePerformance\n        ? Date.now() - startTime\n        : undefined;\n\n      return {\n        commandPath,\n        args,\n        success: !expectError,\n        parsedResult: testResult,\n        executionTime,\n      };\n    } catch (error) {\n      const executionTime = this.options.includePerformance\n        ? Date.now() - startTime\n        : undefined;\n\n      return {\n        commandPath,\n        args,\n        success: expectError,\n        error: error instanceof Error ? error.message : String(error),\n        executionTime,\n      };\n    }\n  }\n\n  /**\n   * Generate comprehensive test report\n   */\n  private generateReport(\n    commandPaths: string[][],\n    results: TestResult[],\n  ): FuzzyTestReport {\n    const totalTests = results.length;\n    const successfulTests = results.filter((r) => r.success).length;\n    const failedTests = totalTests - successfulTests;\n\n    // Coverage by path\n    const coverageByPath: Record<string, { total: number; passed: number }> =\n      {};\n    for (const path of commandPaths) {\n      const pathKey = path.join(\" \") || \"(root)\";\n      const pathResults = results.filter(\n        (r) => JSON.stringify(r.commandPath) === JSON.stringify(path),\n      );\n      coverageByPath[pathKey] = {\n        total: pathResults.length,\n        passed: pathResults.filter((r) => r.success).length,\n      };\n    }\n\n    // Error types\n    const errorTypes: Record<string, number> = {};\n    for (const result of results) {\n      if (result.error) {\n        const errorType = result.error.split(\":\")[0] || \"Unknown\";\n        errorTypes[errorType] = (errorTypes[errorType] || 0) + 1;\n      }\n    }\n\n    return {\n      totalTests,\n      successfulTests,\n      failedTests,\n      commandPaths,\n      results,\n      summary: {\n        coverageByPath,\n        errorTypes,\n      },\n    };\n  }\n}\n","import { z } from \"zod\";\nexport const LATEST_PROTOCOL_VERSION = \"2025-06-18\";\nexport const DEFAULT_NEGOTIATED_PROTOCOL_VERSION = \"2025-03-26\";\nexport const SUPPORTED_PROTOCOL_VERSIONS = [\n    LATEST_PROTOCOL_VERSION,\n    \"2025-03-26\",\n    \"2024-11-05\",\n    \"2024-10-07\",\n];\n/* JSON-RPC types */\nexport const JSONRPC_VERSION = \"2.0\";\n/**\n * A progress token, used to associate progress notifications with the original request.\n */\nexport const ProgressTokenSchema = z.union([z.string(), z.number().int()]);\n/**\n * An opaque token used to represent a cursor for pagination.\n */\nexport const CursorSchema = z.string();\nconst RequestMetaSchema = z.looseObject({\n    /**\n     * If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.\n     */\n    progressToken: z.optional(ProgressTokenSchema),\n});\nconst BaseRequestParamsSchema = z.looseObject({\n    _meta: z.optional(RequestMetaSchema),\n});\nexport const RequestSchema = z.object({\n    method: z.string(),\n    params: z.optional(BaseRequestParamsSchema),\n});\nconst BaseNotificationParamsSchema = z.looseObject({\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.looseObject({})),\n});\nexport const NotificationSchema = z.object({\n    method: z.string(),\n    params: z.optional(BaseNotificationParamsSchema),\n});\nexport const ResultSchema = z.looseObject({\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.looseObject({})),\n});\n/**\n * A uniquely identifying ID for a request in JSON-RPC.\n */\nexport const RequestIdSchema = z.union([z.string(), z.number().int()]);\n/**\n * A request that expects a response.\n */\nexport const JSONRPCRequestSchema = z\n    .strictObject({\n    jsonrpc: z.literal(JSONRPC_VERSION),\n    id: RequestIdSchema,\n})\n    .extend(RequestSchema.shape);\nexport const isJSONRPCRequest = (value) => {\n    const result = JSONRPCRequestSchema.safeParse(value);\n    return result.success;\n};\n/**\n * A notification which does not expect a response.\n */\nexport const JSONRPCNotificationSchema = z\n    .strictObject({\n    jsonrpc: z.literal(JSONRPC_VERSION),\n})\n    .extend(NotificationSchema.shape);\nexport const isJSONRPCNotification = (value) => {\n    const result = JSONRPCNotificationSchema.safeParse(value);\n    return result.success;\n};\n/**\n * A successful (non-error) response to a request.\n */\nexport const JSONRPCResponseSchema = z.strictObject({\n    jsonrpc: z.literal(JSONRPC_VERSION),\n    id: RequestIdSchema,\n    result: ResultSchema,\n});\nexport const isJSONRPCResponse = (value) => {\n    const result = JSONRPCResponseSchema.safeParse(value);\n    return result.success;\n};\n/**\n * Error codes defined by the JSON-RPC specification.\n */\nexport var ErrorCode;\n(function (ErrorCode) {\n    // SDK error codes\n    ErrorCode[ErrorCode[\"ConnectionClosed\"] = -32000] = \"ConnectionClosed\";\n    ErrorCode[ErrorCode[\"RequestTimeout\"] = -32001] = \"RequestTimeout\";\n    // Standard JSON-RPC error codes\n    ErrorCode[ErrorCode[\"ParseError\"] = -32700] = \"ParseError\";\n    ErrorCode[ErrorCode[\"InvalidRequest\"] = -32600] = \"InvalidRequest\";\n    ErrorCode[ErrorCode[\"MethodNotFound\"] = -32601] = \"MethodNotFound\";\n    ErrorCode[ErrorCode[\"InvalidParams\"] = -32602] = \"InvalidParams\";\n    ErrorCode[ErrorCode[\"InternalError\"] = -32603] = \"InternalError\";\n})(ErrorCode || (ErrorCode = {}));\n/**\n * A response to a request that indicates an error occurred.\n */\nexport const JSONRPCErrorSchema = z.strictObject({\n    jsonrpc: z.literal(JSONRPC_VERSION),\n    id: RequestIdSchema,\n    error: z.object({\n        /**\n         * The error type that occurred.\n         */\n        code: z.number().int(),\n        /**\n         * A short description of the error. The message SHOULD be limited to a concise single sentence.\n         */\n        message: z.string(),\n        /**\n         * Additional information about the error. The value of this member is defined by the sender (e.g. detailed error information, nested errors etc.).\n         */\n        data: z.optional(z.unknown()),\n    }),\n});\nexport const isJSONRPCError = (value) => {\n    const result = JSONRPCErrorSchema.safeParse(value);\n    return result.success;\n};\nexport const JSONRPCMessageSchema = z.union([\n    JSONRPCRequestSchema,\n    JSONRPCNotificationSchema,\n    JSONRPCResponseSchema,\n    JSONRPCErrorSchema,\n]);\n/* Empty result */\n/**\n * A response that indicates success but carries no data.\n */\nexport const EmptyResultSchema = z.strictObject({}).extend(ResultSchema.shape);\n/* Cancellation */\n/**\n * This notification can be sent by either side to indicate that it is cancelling a previously-issued request.\n *\n * The request SHOULD still be in-flight, but due to communication latency, it is always possible that this notification MAY arrive after the request has already finished.\n *\n * This notification indicates that the result will be unused, so any associated processing SHOULD cease.\n *\n * A client MUST NOT attempt to cancel its `initialize` request.\n */\nexport const CancelledNotificationSchema = NotificationSchema.extend({\n    method: z.literal(\"notifications/cancelled\"),\n    params: BaseNotificationParamsSchema.extend({\n        /**\n         * The ID of the request to cancel.\n         *\n         * This MUST correspond to the ID of a request previously issued in the same direction.\n         */\n        requestId: RequestIdSchema,\n        /**\n         * An optional string describing the reason for the cancellation. This MAY be logged or presented to the user.\n         */\n        reason: z.string().optional(),\n    }),\n});\n/* Base Metadata */\n/**\n * Base metadata interface for common properties across resources, tools, prompts, and implementations.\n */\nconst BaseMetadataSchema = z.looseObject({\n    /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */\n    name: z.string(),\n    /**\n     * Intended for UI and end-user contexts — optimized to be human-readable and easily understood,\n     * even by those unfamiliar with domain-specific terminology.\n     *\n     * If not provided, the name should be used for display (except for Tool,\n     * where `annotations.title` should be given precedence over using `name`,\n     * if present).\n     */\n    title: z.optional(z.string()),\n});\n/* Initialization */\n/**\n * Describes the name and version of an MCP implementation.\n */\nexport const ImplementationSchema = BaseMetadataSchema.extend({\n    version: z.string(),\n});\n/**\n * Capabilities a client may support. Known capabilities are defined here, in this schema, but this is not a closed set: any client can define its own, additional capabilities.\n */\nexport const ClientCapabilitiesSchema = z\n    .object({\n    /**\n     * Experimental, non-standard capabilities that the client supports.\n     */\n    experimental: z.optional(z.object({}).passthrough()),\n    /**\n     * Present if the client supports sampling from an LLM.\n     */\n    sampling: z.optional(z.object({}).passthrough()),\n    /**\n     * Present if the client supports eliciting user input.\n     */\n    elicitation: z.optional(z.object({}).passthrough()),\n    /**\n     * Present if the client supports listing roots.\n     */\n    roots: z.optional(z\n        .object({\n        /**\n         * Whether the client supports issuing notifications for changes to the roots list.\n         */\n        listChanged: z.optional(z.boolean()),\n    })\n        .passthrough()),\n})\n    .passthrough();\n/**\n * This request is sent from the client to the server when it first connects, asking it to begin initialization.\n */\nexport const InitializeRequestSchema = RequestSchema.extend({\n    method: z.literal(\"initialize\"),\n    params: BaseRequestParamsSchema.extend({\n        /**\n         * The latest version of the Model Context Protocol that the client supports. The client MAY decide to support older versions as well.\n         */\n        protocolVersion: z.string(),\n        capabilities: ClientCapabilitiesSchema,\n        clientInfo: ImplementationSchema,\n    }),\n});\nexport const isInitializeRequest = (value) => {\n    const result = InitializeRequestSchema.safeParse(value);\n    return result.success;\n};\n/**\n * Capabilities that a server may support. Known capabilities are defined here, in this schema, but this is not a closed set: any server can define its own, additional capabilities.\n */\nexport const ServerCapabilitiesSchema = z\n    .object({\n    /**\n     * Experimental, non-standard capabilities that the server supports.\n     */\n    experimental: z.optional(z.object({}).passthrough()),\n    /**\n     * Present if the server supports sending log messages to the client.\n     */\n    logging: z.optional(z.object({}).passthrough()),\n    /**\n     * Present if the server supports sending completions to the client.\n     */\n    completions: z.optional(z.object({}).passthrough()),\n    /**\n     * Present if the server offers any prompt templates.\n     */\n    prompts: z.optional(z\n        .object({\n        /**\n         * Whether this server supports issuing notifications for changes to the prompt list.\n         */\n        listChanged: z.optional(z.boolean()),\n    })\n        .passthrough()),\n    /**\n     * Present if the server offers any resources to read.\n     */\n    resources: z.optional(z\n        .object({\n        /**\n         * Whether this server supports clients subscribing to resource updates.\n         */\n        subscribe: z.optional(z.boolean()),\n        /**\n         * Whether this server supports issuing notifications for changes to the resource list.\n         */\n        listChanged: z.optional(z.boolean()),\n    })\n        .passthrough()),\n    /**\n     * Present if the server offers any tools to call.\n     */\n    tools: z.optional(z\n        .object({\n        /**\n         * Whether this server supports issuing notifications for changes to the tool list.\n         */\n        listChanged: z.optional(z.boolean()),\n    })\n        .passthrough()),\n})\n    .passthrough();\n/**\n * After receiving an initialize request from the client, the server sends this response.\n */\nexport const InitializeResultSchema = ResultSchema.extend({\n    /**\n     * The version of the Model Context Protocol that the server wants to use. This may not match the version that the client requested. If the client cannot support this version, it MUST disconnect.\n     */\n    protocolVersion: z.string(),\n    capabilities: ServerCapabilitiesSchema,\n    serverInfo: ImplementationSchema,\n    /**\n     * Instructions describing how to use the server and its features.\n     *\n     * This can be used by clients to improve the LLM's understanding of available tools, resources, etc. It can be thought of like a \"hint\" to the model. For example, this information MAY be added to the system prompt.\n     */\n    instructions: z.optional(z.string()),\n});\n/**\n * This notification is sent from the client to the server after initialization has finished.\n */\nexport const InitializedNotificationSchema = NotificationSchema.extend({\n    method: z.literal(\"notifications/initialized\"),\n});\nexport const isInitializedNotification = (value) => {\n    const result = InitializedNotificationSchema.safeParse(value);\n    return result.success;\n};\n/* Ping */\n/**\n * A ping, issued by either the server or the client, to check that the other party is still alive. The receiver must promptly respond, or else may be disconnected.\n */\nexport const PingRequestSchema = RequestSchema.extend({\n    method: z.literal(\"ping\"),\n});\n/* Progress notifications */\nexport const ProgressSchema = z\n    .object({\n    /**\n     * The progress thus far. This should increase every time progress is made, even if the total is unknown.\n     */\n    progress: z.number(),\n    /**\n     * Total number of items to process (or total progress required), if known.\n     */\n    total: z.optional(z.number()),\n    /**\n     * An optional message describing the current progress.\n     */\n    message: z.optional(z.string()),\n})\n    .passthrough();\n/**\n * An out-of-band notification used to inform the receiver of a progress update for a long-running request.\n */\nexport const ProgressNotificationSchema = NotificationSchema.extend({\n    method: z.literal(\"notifications/progress\"),\n    params: BaseNotificationParamsSchema.extend({\n        ...ProgressSchema.shape,\n        /**\n         * The progress token which was given in the initial request, used to associate this notification with the request that is proceeding.\n         */\n        progressToken: ProgressTokenSchema,\n    }),\n});\n/* Pagination */\nexport const PaginatedRequestSchema = RequestSchema.extend({\n    params: BaseRequestParamsSchema.extend({\n        /**\n         * An opaque token representing the current pagination position.\n         * If provided, the server should return results starting after this cursor.\n         */\n        cursor: z.optional(CursorSchema),\n    }).optional(),\n});\nexport const PaginatedResultSchema = ResultSchema.extend({\n    /**\n     * An opaque token representing the pagination position after the last returned result.\n     * If present, there may be more results available.\n     */\n    nextCursor: z.optional(CursorSchema),\n});\n/* Resources */\n/**\n * The contents of a specific resource or sub-resource.\n */\nexport const ResourceContentsSchema = z.looseObject({\n    /**\n     * The URI of this resource.\n     */\n    uri: z.string(),\n    /**\n     * The MIME type of this resource, if known.\n     */\n    mimeType: z.optional(z.string()),\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.looseObject({})),\n});\nexport const TextResourceContentsSchema = ResourceContentsSchema.extend({\n    /**\n     * The text of the item. This must only be set if the item can actually be represented as text (not binary data).\n     */\n    text: z.string(),\n});\n/**\n * A Zod schema for validating Base64 strings that is more performant and\n * robust for very large inputs than the default regex-based check. It avoids\n * stack overflows by using the native `atob` function for validation.\n */\nconst Base64Schema = z.string().refine((val) => {\n    try {\n        // atob throws a DOMException if the string contains characters\n        // that are not part of the Base64 character set.\n        atob(val);\n        return true;\n    }\n    catch (_a) {\n        return false;\n    }\n}, { message: \"Invalid Base64 string\" });\nexport const BlobResourceContentsSchema = ResourceContentsSchema.extend({\n    /**\n     * A base64-encoded string representing the binary data of the item.\n     */\n    blob: Base64Schema,\n});\n/**\n * A known resource that the server is capable of reading.\n */\nexport const ResourceSchema = BaseMetadataSchema.extend({\n    /**\n     * The URI of this resource.\n     */\n    uri: z.string(),\n    /**\n     * A description of what this resource represents.\n     *\n     * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a \"hint\" to the model.\n     */\n    description: z.optional(z.string()),\n    /**\n     * The MIME type of this resource, if known.\n     */\n    mimeType: z.optional(z.string()),\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.object({}).passthrough()),\n});\n/**\n * A template description for resources available on the server.\n */\nexport const ResourceTemplateSchema = BaseMetadataSchema.extend({\n    /**\n     * A URI template (according to RFC 6570) that can be used to construct resource URIs.\n     */\n    uriTemplate: z.string(),\n    /**\n     * A description of what this template is for.\n     *\n     * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a \"hint\" to the model.\n     */\n    description: z.optional(z.string()),\n    /**\n     * The MIME type for all resources that match this template. This should only be included if all resources matching this template have the same type.\n     */\n    mimeType: z.optional(z.string()),\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.object({}).passthrough()),\n});\n/**\n * Sent from the client to request a list of resources the server has.\n */\nexport const ListResourcesRequestSchema = PaginatedRequestSchema.extend({\n    method: z.literal(\"resources/list\"),\n});\n/**\n * The server's response to a resources/list request from the client.\n */\nexport const ListResourcesResultSchema = PaginatedResultSchema.extend({\n    resources: z.array(ResourceSchema),\n});\n/**\n * Sent from the client to request a list of resource templates the server has.\n */\nexport const ListResourceTemplatesRequestSchema = PaginatedRequestSchema.extend({\n    method: z.literal(\"resources/templates/list\"),\n});\n/**\n * The server's response to a resources/templates/list request from the client.\n */\nexport const ListResourceTemplatesResultSchema = PaginatedResultSchema.extend({\n    resourceTemplates: z.array(ResourceTemplateSchema),\n});\n/**\n * Sent from the client to the server, to read a specific resource URI.\n */\nexport const ReadResourceRequestSchema = RequestSchema.extend({\n    method: z.literal(\"resources/read\"),\n    params: BaseRequestParamsSchema.extend({\n        /**\n         * The URI of the resource to read. The URI can use any protocol; it is up to the server how to interpret it.\n         */\n        uri: z.string(),\n    }),\n});\n/**\n * The server's response to a resources/read request from the client.\n */\nexport const ReadResourceResultSchema = ResultSchema.extend({\n    contents: z.array(z.union([TextResourceContentsSchema, BlobResourceContentsSchema])),\n});\n/**\n * An optional notification from the server to the client, informing it that the list of resources it can read from has changed. This may be issued by servers without any previous subscription from the client.\n */\nexport const ResourceListChangedNotificationSchema = NotificationSchema.extend({\n    method: z.literal(\"notifications/resources/list_changed\"),\n});\n/**\n * Sent from the client to request resources/updated notifications from the server whenever a particular resource changes.\n */\nexport const SubscribeRequestSchema = RequestSchema.extend({\n    method: z.literal(\"resources/subscribe\"),\n    params: BaseRequestParamsSchema.extend({\n        /**\n         * The URI of the resource to subscribe to. The URI can use any protocol; it is up to the server how to interpret it.\n         */\n        uri: z.string(),\n    }),\n});\n/**\n * Sent from the client to request cancellation of resources/updated notifications from the server. This should follow a previous resources/subscribe request.\n */\nexport const UnsubscribeRequestSchema = RequestSchema.extend({\n    method: z.literal(\"resources/unsubscribe\"),\n    params: BaseRequestParamsSchema.extend({\n        /**\n         * The URI of the resource to unsubscribe from.\n         */\n        uri: z.string(),\n    }),\n});\n/**\n * A notification from the server to the client, informing it that a resource has changed and may need to be read again. This should only be sent if the client previously sent a resources/subscribe request.\n */\nexport const ResourceUpdatedNotificationSchema = NotificationSchema.extend({\n    method: z.literal(\"notifications/resources/updated\"),\n    params: BaseNotificationParamsSchema.extend({\n        /**\n         * The URI of the resource that has been updated. This might be a sub-resource of the one that the client actually subscribed to.\n         */\n        uri: z.string(),\n    }),\n});\n/* Prompts */\n/**\n * Describes an argument that a prompt can accept.\n */\nexport const PromptArgumentSchema = z.looseObject({\n    /**\n     * The name of the argument.\n     */\n    name: z.string(),\n    /**\n     * A human-readable description of the argument.\n     */\n    description: z.optional(z.string()),\n    /**\n     * Whether this argument is required.\n     */\n    required: z.optional(z.boolean()),\n});\n/**\n * A prompt or prompt template that the server offers.\n */\nexport const PromptSchema = BaseMetadataSchema.extend({\n    /**\n     * An optional description of what this prompt provides\n     */\n    description: z.optional(z.string()),\n    /**\n     * A list of arguments to use for templating the prompt.\n     */\n    arguments: z.optional(z.array(PromptArgumentSchema)),\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.object({}).passthrough()),\n});\n/**\n * Sent from the client to request a list of prompts and prompt templates the server has.\n */\nexport const ListPromptsRequestSchema = PaginatedRequestSchema.extend({\n    method: z.literal(\"prompts/list\"),\n});\n/**\n * The server's response to a prompts/list request from the client.\n */\nexport const ListPromptsResultSchema = PaginatedResultSchema.extend({\n    prompts: z.array(PromptSchema),\n});\n/**\n * Used by the client to get a prompt provided by the server.\n */\nexport const GetPromptRequestSchema = RequestSchema.extend({\n    method: z.literal(\"prompts/get\"),\n    params: BaseRequestParamsSchema.extend({\n        /**\n         * The name of the prompt or prompt template.\n         */\n        name: z.string(),\n        /**\n         * Arguments to use for templating the prompt.\n         */\n        arguments: z.optional(z.record(z.string(), z.string())),\n    }),\n});\n/**\n * Text provided to or from an LLM.\n */\nexport const TextContentSchema = z.looseObject({\n    type: z.literal(\"text\"),\n    /**\n     * The text content of the message.\n     */\n    text: z.string(),\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.looseObject({})),\n});\n/**\n * An image provided to or from an LLM.\n */\nexport const ImageContentSchema = z.looseObject({\n    type: z.literal(\"image\"),\n    /**\n     * The base64-encoded image data.\n     */\n    data: Base64Schema,\n    /**\n     * The MIME type of the image. Different providers may support different image types.\n     */\n    mimeType: z.string(),\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.looseObject({})),\n});\n/**\n * An Audio provided to or from an LLM.\n */\nexport const AudioContentSchema = z.looseObject({\n    type: z.literal(\"audio\"),\n    /**\n     * The base64-encoded audio data.\n     */\n    data: Base64Schema,\n    /**\n     * The MIME type of the audio. Different providers may support different audio types.\n     */\n    mimeType: z.string(),\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.looseObject({})),\n});\n/**\n * The contents of a resource, embedded into a prompt or tool call result.\n */\nexport const EmbeddedResourceSchema = z.looseObject({\n    type: z.literal(\"resource\"),\n    resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]),\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.looseObject({})),\n});\n/**\n * A resource that the server is capable of reading, included in a prompt or tool call result.\n *\n * Note: resource links returned by tools are not guaranteed to appear in the results of `resources/list` requests.\n */\nexport const ResourceLinkSchema = ResourceSchema.extend({\n    type: z.literal(\"resource_link\"),\n});\n/**\n * A content block that can be used in prompts and tool results.\n */\nexport const ContentBlockSchema = z.union([\n    TextContentSchema,\n    ImageContentSchema,\n    AudioContentSchema,\n    ResourceLinkSchema,\n    EmbeddedResourceSchema,\n]);\n/**\n * Describes a message returned as part of a prompt.\n */\nexport const PromptMessageSchema = z.looseObject({\n    role: z.enum([\"user\", \"assistant\"]),\n    content: ContentBlockSchema,\n});\n/**\n * The server's response to a prompts/get request from the client.\n */\nexport const GetPromptResultSchema = ResultSchema.extend({\n    /**\n     * An optional description for the prompt.\n     */\n    description: z.optional(z.string()),\n    messages: z.array(PromptMessageSchema),\n});\n/**\n * An optional notification from the server to the client, informing it that the list of prompts it offers has changed. This may be issued by servers without any previous subscription from the client.\n */\nexport const PromptListChangedNotificationSchema = NotificationSchema.extend({\n    method: z.literal(\"notifications/prompts/list_changed\"),\n});\n/* Tools */\n/**\n * Additional properties describing a Tool to clients.\n *\n * NOTE: all properties in ToolAnnotations are **hints**.\n * They are not guaranteed to provide a faithful description of\n * tool behavior (including descriptive properties like `title`).\n *\n * Clients should never make tool use decisions based on ToolAnnotations\n * received from untrusted servers.\n */\nexport const ToolAnnotationsSchema = z\n    .object({\n    /**\n     * A human-readable title for the tool.\n     */\n    title: z.optional(z.string()),\n    /**\n     * If true, the tool does not modify its environment.\n     *\n     * Default: false\n     */\n    readOnlyHint: z.optional(z.boolean()),\n    /**\n     * If true, the tool may perform destructive updates to its environment.\n     * If false, the tool performs only additive updates.\n     *\n     * (This property is meaningful only when `readOnlyHint == false`)\n     *\n     * Default: true\n     */\n    destructiveHint: z.optional(z.boolean()),\n    /**\n     * If true, calling the tool repeatedly with the same arguments\n     * will have no additional effect on the its environment.\n     *\n     * (This property is meaningful only when `readOnlyHint == false`)\n     *\n     * Default: false\n     */\n    idempotentHint: z.optional(z.boolean()),\n    /**\n     * If true, this tool may interact with an \"open world\" of external\n     * entities. If false, the tool's domain of interaction is closed.\n     * For example, the world of a web search tool is open, whereas that\n     * of a memory tool is not.\n     *\n     * Default: true\n     */\n    openWorldHint: z.optional(z.boolean()),\n})\n    .passthrough();\n/**\n * Definition for a tool the client can call.\n */\nexport const ToolSchema = BaseMetadataSchema.extend({\n    /**\n     * A human-readable description of the tool.\n     */\n    description: z.optional(z.string()),\n    /**\n     * A JSON Schema object defining the expected parameters for the tool.\n     */\n    inputSchema: z.object({\n        type: z.literal(\"object\"),\n        properties: z.optional(z.looseObject({})),\n        required: z.optional(z.array(z.string())),\n    }),\n    /**\n     * An optional JSON Schema object defining the structure of the tool's output returned in\n     * the structuredContent field of a CallToolResult.\n     */\n    outputSchema: z.optional(z.looseObject({\n        type: z.literal(\"object\"),\n        properties: z.optional(z.looseObject({})),\n        required: z.optional(z.array(z.string())),\n    })),\n    /**\n     * Optional additional tool information.\n     */\n    annotations: z.optional(ToolAnnotationsSchema),\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.object({}).passthrough()),\n});\n/**\n * Sent from the client to request a list of tools the server has.\n */\nexport const ListToolsRequestSchema = PaginatedRequestSchema.extend({\n    method: z.literal(\"tools/list\"),\n});\n/**\n * The server's response to a tools/list request from the client.\n */\nexport const ListToolsResultSchema = PaginatedResultSchema.extend({\n    tools: z.array(ToolSchema),\n});\n/**\n * The server's response to a tool call.\n */\nexport const CallToolResultSchema = ResultSchema.extend({\n    /**\n     * A list of content objects that represent the result of the tool call.\n     *\n     * If the Tool does not define an outputSchema, this field MUST be present in the result.\n     * For backwards compatibility, this field is always present, but it may be empty.\n     */\n    content: z.array(ContentBlockSchema).default([]),\n    /**\n     * An object containing structured tool output.\n     *\n     * If the Tool defines an outputSchema, this field MUST be present in the result, and contain a JSON object that matches the schema.\n     */\n    structuredContent: z.looseObject({}).optional(),\n    /**\n     * Whether the tool call ended in an error.\n     *\n     * If not set, this is assumed to be false (the call was successful).\n     *\n     * Any errors that originate from the tool SHOULD be reported inside the result\n     * object, with `isError` set to true, _not_ as an MCP protocol-level error\n     * response. Otherwise, the LLM would not be able to see that an error occurred\n     * and self-correct.\n     *\n     * However, any errors in _finding_ the tool, an error indicating that the\n     * server does not support tool calls, or any other exceptional conditions,\n     * should be reported as an MCP error response.\n     */\n    isError: z.optional(z.boolean()),\n});\n/**\n * CallToolResultSchema extended with backwards compatibility to protocol version 2024-10-07.\n */\nexport const CompatibilityCallToolResultSchema = CallToolResultSchema.or(ResultSchema.extend({\n    toolResult: z.unknown(),\n}));\n/**\n * Used by the client to invoke a tool provided by the server.\n */\nexport const CallToolRequestSchema = RequestSchema.extend({\n    method: z.literal(\"tools/call\"),\n    params: BaseRequestParamsSchema.extend({\n        name: z.string(),\n        arguments: z.optional(z.record(z.string(), z.unknown())),\n    }),\n});\n/**\n * An optional notification from the server to the client, informing it that the list of tools it offers has changed. This may be issued by servers without any previous subscription from the client.\n */\nexport const ToolListChangedNotificationSchema = NotificationSchema.extend({\n    method: z.literal(\"notifications/tools/list_changed\"),\n});\n/* Logging */\n/**\n * The severity of a log message.\n */\nexport const LoggingLevelSchema = z.enum([\n    \"debug\",\n    \"info\",\n    \"notice\",\n    \"warning\",\n    \"error\",\n    \"critical\",\n    \"alert\",\n    \"emergency\",\n]);\n/**\n * A request from the client to the server, to enable or adjust logging.\n */\nexport const SetLevelRequestSchema = RequestSchema.extend({\n    method: z.literal(\"logging/setLevel\"),\n    params: BaseRequestParamsSchema.extend({\n        /**\n         * The level of logging that the client wants to receive from the server. The server should send all logs at this level and higher (i.e., more severe) to the client as notifications/logging/message.\n         */\n        level: LoggingLevelSchema,\n    }),\n});\n/**\n * Notification of a log message passed from server to client. If no logging/setLevel request has been sent from the client, the server MAY decide which messages to send automatically.\n */\nexport const LoggingMessageNotificationSchema = NotificationSchema.extend({\n    method: z.literal(\"notifications/message\"),\n    params: BaseNotificationParamsSchema.extend({\n        /**\n         * The severity of this log message.\n         */\n        level: LoggingLevelSchema,\n        /**\n         * An optional name of the logger issuing this message.\n         */\n        logger: z.optional(z.string()),\n        /**\n         * The data to be logged, such as a string message or an object. Any JSON serializable type is allowed here.\n         */\n        data: z.unknown(),\n    }),\n});\n/* Sampling */\n/**\n * Hints to use for model selection.\n */\nexport const ModelHintSchema = z.looseObject({\n    /**\n     * A hint for a model name.\n     */\n    name: z.string().optional(),\n});\n/**\n * The server's preferences for model selection, requested of the client during sampling.\n */\nexport const ModelPreferencesSchema = z.looseObject({\n    /**\n     * Optional hints to use for model selection. If multiple models are supported, the client MAY choose how to prioritize these hints to pick a model.\n     */\n    hints: z.optional(z.array(ModelHintSchema)),\n    /**\n     * A hint for the model's cost priority. 0 = highest cost, 1 = lowest cost. The client MAY use this to decide which model to use.\n     */\n    costPriority: z.optional(z.number().min(0).max(1)),\n    /**\n     * A hint for the model's speed priority. 0 = slowest, 1 = fastest. The client MAY use this to decide which model to use.\n     */\n    speedPriority: z.optional(z.number().min(0).max(1)),\n    /**\n     * A hint for the model's intelligence priority. 0 = least intelligent, 1 = most intelligent. The client MAY use this to decide which model to use.\n     */\n    intelligencePriority: z.optional(z.number().min(0).max(1)),\n});\n/**\n * Describes a message issued to or received from an LLM API.\n */\nexport const SamplingMessageSchema = z.looseObject({\n    role: z.enum([\"user\", \"assistant\"]),\n    content: z.union([TextContentSchema, ImageContentSchema, AudioContentSchema]),\n});\n/**\n * A request from the server to sample an LLM via the client. The client has full discretion over which model to select. The client should also inform the user before beginning sampling, to allow them to inspect the request (human in the loop) and decide whether to approve it.\n */\nexport const CreateMessageRequestSchema = RequestSchema.extend({\n    method: z.literal(\"sampling/createMessage\"),\n    params: BaseRequestParamsSchema.extend({\n        messages: z.array(SamplingMessageSchema),\n        /**\n         * An optional system prompt the server wants to use for sampling. The client MAY modify or omit this prompt.\n         */\n        systemPrompt: z.optional(z.string()),\n        /**\n         * A request to include context from one or more MCP servers (including the caller), to be attached to the prompt. The client MAY ignore this request.\n         */\n        includeContext: z.optional(z.enum([\"none\", \"thisServer\", \"allServers\"])),\n        temperature: z.optional(z.number()),\n        /**\n         * The maximum number of tokens to sample, as requested by the server. The client MAY choose to sample fewer tokens than requested.\n         */\n        maxTokens: z.number().int(),\n        stopSequences: z.optional(z.array(z.string())),\n        /**\n         * Optional metadata to pass through to the LLM provider. The format of this metadata is provider-specific.\n         */\n        metadata: z.optional(z.looseObject({})),\n        /**\n         * The server's preferences for which model to select.\n         */\n        modelPreferences: z.optional(ModelPreferencesSchema),\n    }),\n});\n/**\n * The client's response to a sampling/create_message request from the server. The client should inform the user before returning the sampled message, to allow them to inspect the response (human in the loop) and decide whether to allow the server to see it.\n */\nexport const CreateMessageResultSchema = ResultSchema.extend({\n    /**\n     * The name of the model that generated the message.\n     */\n    model: z.string(),\n    /**\n     * The reason why sampling stopped.\n     */\n    stopReason: z.optional(z.enum([\"endTurn\", \"stopSequence\", \"maxTokens\"]).or(z.string())),\n    role: z.enum([\"user\", \"assistant\"]),\n    content: z.discriminatedUnion(\"type\", [\n        TextContentSchema,\n        ImageContentSchema,\n        AudioContentSchema,\n    ]),\n});\n/* Elicitation */\n/**\n * Primitive schema definition for boolean fields.\n */\nexport const BooleanSchemaSchema = z.looseObject({\n    type: z.literal(\"boolean\"),\n    title: z.optional(z.string()),\n    description: z.optional(z.string()),\n    default: z.optional(z.boolean()),\n});\n/**\n * Primitive schema definition for string fields.\n */\nexport const StringSchemaSchema = z\n    .object({\n    type: z.literal(\"string\"),\n    title: z.optional(z.string()),\n    description: z.optional(z.string()),\n    minLength: z.optional(z.number()),\n    maxLength: z.optional(z.number()),\n    format: z.optional(z.enum([\"email\", \"uri\", \"date\", \"date-time\"])),\n})\n    .passthrough();\n/**\n * Primitive schema definition for number fields.\n */\nexport const NumberSchemaSchema = z\n    .object({\n    type: z.enum([\"number\", \"integer\"]),\n    title: z.optional(z.string()),\n    description: z.optional(z.string()),\n    minimum: z.optional(z.number()),\n    maximum: z.optional(z.number()),\n})\n    .passthrough();\n/**\n * Primitive schema definition for enum fields.\n */\nexport const EnumSchemaSchema = z\n    .object({\n    type: z.literal(\"string\"),\n    title: z.optional(z.string()),\n    description: z.optional(z.string()),\n    enum: z.array(z.string()),\n    enumNames: z.optional(z.array(z.string())),\n})\n    .passthrough();\n/**\n * Union of all primitive schema definitions.\n */\nexport const PrimitiveSchemaDefinitionSchema = z.union([\n    BooleanSchemaSchema,\n    StringSchemaSchema,\n    NumberSchemaSchema,\n    EnumSchemaSchema,\n]);\n/**\n * A request from the server to elicit user input via the client.\n * The client should present the message and form fields to the user.\n */\nexport const ElicitRequestSchema = RequestSchema.extend({\n    method: z.literal(\"elicitation/create\"),\n    params: BaseRequestParamsSchema.extend({\n        /**\n         * The message to present to the user.\n         */\n        message: z.string(),\n        /**\n         * The schema for the requested user input.\n         */\n        requestedSchema: z.looseObject({\n            type: z.literal(\"object\"),\n            properties: z.record(z.string(), PrimitiveSchemaDefinitionSchema),\n            required: z.optional(z.array(z.string())),\n        }),\n    }),\n});\n/**\n * The client's response to an elicitation/create request from the server.\n */\nexport const ElicitResultSchema = ResultSchema.extend({\n    /**\n     * The user's response action.\n     */\n    action: z.enum([\"accept\", \"decline\", \"cancel\"]),\n    /**\n     * The collected user input content (only present if action is \"accept\").\n     */\n    content: z.optional(z.record(z.string(), z.unknown())),\n});\n/* Autocomplete */\n/**\n * A reference to a resource or resource template definition.\n */\nexport const ResourceTemplateReferenceSchema = z\n    .object({\n    type: z.literal(\"ref/resource\"),\n    /**\n     * The URI or URI template of the resource.\n     */\n    uri: z.string(),\n})\n    .passthrough();\n/**\n * @deprecated Use ResourceTemplateReferenceSchema instead\n */\nexport const ResourceReferenceSchema = ResourceTemplateReferenceSchema;\n/**\n * Identifies a prompt.\n */\nexport const PromptReferenceSchema = z\n    .object({\n    type: z.literal(\"ref/prompt\"),\n    /**\n     * The name of the prompt or prompt template\n     */\n    name: z.string(),\n})\n    .passthrough();\n/**\n * A request from the client to the server, to ask for completion options.\n */\nexport const CompleteRequestSchema = RequestSchema.extend({\n    method: z.literal(\"completion/complete\"),\n    params: BaseRequestParamsSchema.extend({\n        ref: z.union([PromptReferenceSchema, ResourceTemplateReferenceSchema]),\n        /**\n         * The argument's information\n         */\n        argument: z\n            .object({\n            /**\n             * The name of the argument\n             */\n            name: z.string(),\n            /**\n             * The value of the argument to use for completion matching.\n             */\n            value: z.string(),\n        })\n            .passthrough(),\n        context: z.optional(z.object({\n            /**\n             * Previously-resolved variables in a URI template or prompt.\n             */\n            arguments: z.optional(z.record(z.string(), z.string())),\n        })),\n    }),\n});\n/**\n * The server's response to a completion/complete request\n */\nexport const CompleteResultSchema = ResultSchema.extend({\n    completion: z\n        .object({\n        /**\n         * An array of completion values. Must not exceed 100 items.\n         */\n        values: z.array(z.string()).max(100),\n        /**\n         * The total number of completion options available. This can exceed the number of values actually sent in the response.\n         */\n        total: z.optional(z.number().int()),\n        /**\n         * Indicates whether there are additional completion options beyond those provided in the current response, even if the exact total is unknown.\n         */\n        hasMore: z.optional(z.boolean()),\n    })\n        .passthrough(),\n});\n/* Roots */\n/**\n * Represents a root directory or file that the server can operate on.\n */\nexport const RootSchema = z\n    .object({\n    /**\n     * The URI identifying the root. This *must* start with file:// for now.\n     */\n    uri: z.string().startsWith(\"file://\"),\n    /**\n     * An optional name for the root.\n     */\n    name: z.optional(z.string()),\n    /**\n     * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n     * for notes on _meta usage.\n     */\n    _meta: z.optional(z.object({}).passthrough()),\n})\n    .passthrough();\n/**\n * Sent from the server to request a list of root URIs from the client.\n */\nexport const ListRootsRequestSchema = PaginatedRequestSchema.extend({\n    method: z.literal(\"roots/list\"),\n});\n/**\n * The client's response to a roots/list request from the server.\n */\nexport const ListRootsResultSchema = ResultSchema.extend({\n    roots: z.array(RootSchema),\n});\n/**\n * A notification from the client to the server, informing it that the list of roots has changed.\n */\nexport const RootsListChangedNotificationSchema = NotificationSchema.extend({\n    method: z.literal(\"notifications/roots/list_changed\"),\n});\n/* Client messages */\nexport const ClientRequestSchema = z.union([\n    PingRequestSchema,\n    InitializeRequestSchema,\n    CompleteRequestSchema,\n    SetLevelRequestSchema,\n    GetPromptRequestSchema,\n    ListPromptsRequestSchema,\n    ListResourcesRequestSchema,\n    ListResourceTemplatesRequestSchema,\n    ReadResourceRequestSchema,\n    SubscribeRequestSchema,\n    UnsubscribeRequestSchema,\n    CallToolRequestSchema,\n    ListToolsRequestSchema,\n]);\nexport const ClientNotificationSchema = z.union([\n    CancelledNotificationSchema,\n    ProgressNotificationSchema,\n    InitializedNotificationSchema,\n    RootsListChangedNotificationSchema,\n]);\nexport const ClientResultSchema = z.union([\n    EmptyResultSchema,\n    CreateMessageResultSchema,\n    ElicitResultSchema,\n    ListRootsResultSchema,\n]);\n/* Server messages */\nexport const ServerRequestSchema = z.union([\n    PingRequestSchema,\n    CreateMessageRequestSchema,\n    ElicitRequestSchema,\n    ListRootsRequestSchema,\n]);\nexport const ServerNotificationSchema = z.union([\n    CancelledNotificationSchema,\n    ProgressNotificationSchema,\n    LoggingMessageNotificationSchema,\n    ResourceUpdatedNotificationSchema,\n    ResourceListChangedNotificationSchema,\n    ToolListChangedNotificationSchema,\n    PromptListChangedNotificationSchema,\n]);\nexport const ServerResultSchema = z.union([\n    EmptyResultSchema,\n    InitializeResultSchema,\n    CompleteResultSchema,\n    GetPromptResultSchema,\n    ListPromptsResultSchema,\n    ListResourcesResultSchema,\n    ListResourceTemplatesResultSchema,\n    ReadResourceResultSchema,\n    CallToolResultSchema,\n    ListToolsResultSchema,\n]);\nexport class McpError extends Error {\n    constructor(code, message, data) {\n        super(`MCP error ${code}: ${message}`);\n        this.code = code;\n        this.data = data;\n        this.name = \"McpError\";\n    }\n}\n//# sourceMappingURL=types.js.map","import { CancelledNotificationSchema, ErrorCode, isJSONRPCError, isJSONRPCRequest, isJSONRPCResponse, isJSONRPCNotification, McpError, PingRequestSchema, ProgressNotificationSchema, } from \"../types.js\";\n/**\n * The default request timeout, in miliseconds.\n */\nexport const DEFAULT_REQUEST_TIMEOUT_MSEC = 60000;\n/**\n * Implements MCP protocol framing on top of a pluggable transport, including\n * features like request/response linking, notifications, and progress.\n */\nexport class Protocol {\n    constructor(_options) {\n        this._options = _options;\n        this._requestMessageId = 0;\n        this._requestHandlers = new Map();\n        this._requestHandlerAbortControllers = new Map();\n        this._notificationHandlers = new Map();\n        this._responseHandlers = new Map();\n        this._progressHandlers = new Map();\n        this._timeoutInfo = new Map();\n        this._pendingDebouncedNotifications = new Set();\n        this.setNotificationHandler(CancelledNotificationSchema, (notification) => {\n            const controller = this._requestHandlerAbortControllers.get(notification.params.requestId);\n            controller === null || controller === void 0 ? void 0 : controller.abort(notification.params.reason);\n        });\n        this.setNotificationHandler(ProgressNotificationSchema, (notification) => {\n            this._onprogress(notification);\n        });\n        this.setRequestHandler(PingRequestSchema, \n        // Automatic pong by default.\n        (_request) => ({}));\n    }\n    _setupTimeout(messageId, timeout, maxTotalTimeout, onTimeout, resetTimeoutOnProgress = false) {\n        this._timeoutInfo.set(messageId, {\n            timeoutId: setTimeout(onTimeout, timeout),\n            startTime: Date.now(),\n            timeout,\n            maxTotalTimeout,\n            resetTimeoutOnProgress,\n            onTimeout,\n        });\n    }\n    _resetTimeout(messageId) {\n        const info = this._timeoutInfo.get(messageId);\n        if (!info)\n            return false;\n        const totalElapsed = Date.now() - info.startTime;\n        if (info.maxTotalTimeout && totalElapsed >= info.maxTotalTimeout) {\n            this._timeoutInfo.delete(messageId);\n            throw new McpError(ErrorCode.RequestTimeout, \"Maximum total timeout exceeded\", { maxTotalTimeout: info.maxTotalTimeout, totalElapsed });\n        }\n        clearTimeout(info.timeoutId);\n        info.timeoutId = setTimeout(info.onTimeout, info.timeout);\n        return true;\n    }\n    _cleanupTimeout(messageId) {\n        const info = this._timeoutInfo.get(messageId);\n        if (info) {\n            clearTimeout(info.timeoutId);\n            this._timeoutInfo.delete(messageId);\n        }\n    }\n    /**\n     * Attaches to the given transport, starts it, and starts listening for messages.\n     *\n     * The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.\n     */\n    async connect(transport) {\n        var _a, _b, _c;\n        this._transport = transport;\n        const _onclose = (_a = this.transport) === null || _a === void 0 ? void 0 : _a.onclose;\n        this._transport.onclose = () => {\n            _onclose === null || _onclose === void 0 ? void 0 : _onclose();\n            this._onclose();\n        };\n        const _onerror = (_b = this.transport) === null || _b === void 0 ? void 0 : _b.onerror;\n        this._transport.onerror = (error) => {\n            _onerror === null || _onerror === void 0 ? void 0 : _onerror(error);\n            this._onerror(error);\n        };\n        const _onmessage = (_c = this._transport) === null || _c === void 0 ? void 0 : _c.onmessage;\n        this._transport.onmessage = (message, extra) => {\n            _onmessage === null || _onmessage === void 0 ? void 0 : _onmessage(message, extra);\n            if (isJSONRPCResponse(message) || isJSONRPCError(message)) {\n                this._onresponse(message);\n            }\n            else if (isJSONRPCRequest(message)) {\n                this._onrequest(message, extra);\n            }\n            else if (isJSONRPCNotification(message)) {\n                this._onnotification(message);\n            }\n            else {\n                this._onerror(new Error(`Unknown message type: ${JSON.stringify(message)}`));\n            }\n        };\n        await this._transport.start();\n    }\n    _onclose() {\n        var _a;\n        const responseHandlers = this._responseHandlers;\n        this._responseHandlers = new Map();\n        this._progressHandlers.clear();\n        this._pendingDebouncedNotifications.clear();\n        // Clean up all pending timeouts\n        for (const info of this._timeoutInfo.values()) {\n            clearTimeout(info.timeoutId);\n        }\n        this._timeoutInfo.clear();\n        this._transport = undefined;\n        (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);\n        const error = new McpError(ErrorCode.ConnectionClosed, \"Connection closed\");\n        for (const handler of responseHandlers.values()) {\n            handler(error);\n        }\n    }\n    _onerror(error) {\n        var _a;\n        (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);\n    }\n    _onnotification(notification) {\n        var _a;\n        const handler = (_a = this._notificationHandlers.get(notification.method)) !== null && _a !== void 0 ? _a : this.fallbackNotificationHandler;\n        // Ignore notifications not being subscribed to.\n        if (handler === undefined) {\n            return;\n        }\n        // Starting with Promise.resolve() puts any synchronous errors into the monad as well.\n        Promise.resolve()\n            .then(() => handler(notification))\n            .catch((error) => this._onerror(new Error(`Uncaught error in notification handler: ${error}`)));\n    }\n    _onrequest(request, extra) {\n        var _a, _b, _c, _d;\n        const handler = (_a = this._requestHandlers.get(request.method)) !== null && _a !== void 0 ? _a : this.fallbackRequestHandler;\n        if (handler === undefined) {\n            (_b = this._transport) === null || _b === void 0 ? void 0 : _b.send({\n                jsonrpc: \"2.0\",\n                id: request.id,\n                error: {\n                    code: ErrorCode.MethodNotFound,\n                    message: \"Method not found\",\n                },\n            }).catch((error) => this._onerror(new Error(`Failed to send an error response: ${error}`)));\n            return;\n        }\n        const abortController = new AbortController();\n        this._requestHandlerAbortControllers.set(request.id, abortController);\n        const fullExtra = {\n            signal: abortController.signal,\n            sessionId: (_c = this._transport) === null || _c === void 0 ? void 0 : _c.sessionId,\n            _meta: (_d = request.params) === null || _d === void 0 ? void 0 : _d._meta,\n            sendNotification: (notification) => this.notification(notification, { relatedRequestId: request.id }),\n            sendRequest: (r, resultSchema, options) => this.request(r, resultSchema, {\n                ...options,\n                relatedRequestId: request.id,\n            }),\n            authInfo: extra === null || extra === void 0 ? void 0 : extra.authInfo,\n            requestId: request.id,\n            requestInfo: extra === null || extra === void 0 ? void 0 : extra.requestInfo,\n        };\n        // Starting with Promise.resolve() puts any synchronous errors into the monad as well.\n        Promise.resolve()\n            .then(() => handler(request, fullExtra))\n            .then((result) => {\n            var _a;\n            if (abortController.signal.aborted) {\n                return;\n            }\n            return (_a = this._transport) === null || _a === void 0 ? void 0 : _a.send({\n                result,\n                jsonrpc: \"2.0\",\n                id: request.id,\n            });\n        }, (error) => {\n            var _a, _b;\n            if (abortController.signal.aborted) {\n                return;\n            }\n            return (_a = this._transport) === null || _a === void 0 ? void 0 : _a.send({\n                jsonrpc: \"2.0\",\n                id: request.id,\n                error: {\n                    code: Number.isSafeInteger(error[\"code\"])\n                        ? error[\"code\"]\n                        : ErrorCode.InternalError,\n                    message: (_b = error.message) !== null && _b !== void 0 ? _b : \"Internal error\",\n                },\n            });\n        })\n            .catch((error) => this._onerror(new Error(`Failed to send response: ${error}`)))\n            .finally(() => {\n            this._requestHandlerAbortControllers.delete(request.id);\n        });\n    }\n    _onprogress(notification) {\n        const { progressToken, ...params } = notification.params;\n        const messageId = Number(progressToken);\n        const handler = this._progressHandlers.get(messageId);\n        if (!handler) {\n            this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(notification)}`));\n            return;\n        }\n        const responseHandler = this._responseHandlers.get(messageId);\n        const timeoutInfo = this._timeoutInfo.get(messageId);\n        if (timeoutInfo && responseHandler && timeoutInfo.resetTimeoutOnProgress) {\n            try {\n                this._resetTimeout(messageId);\n            }\n            catch (error) {\n                responseHandler(error);\n                return;\n            }\n        }\n        handler(params);\n    }\n    _onresponse(response) {\n        const messageId = Number(response.id);\n        const handler = this._responseHandlers.get(messageId);\n        if (handler === undefined) {\n            this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(response)}`));\n            return;\n        }\n        this._responseHandlers.delete(messageId);\n        this._progressHandlers.delete(messageId);\n        this._cleanupTimeout(messageId);\n        if (isJSONRPCResponse(response)) {\n            handler(response);\n        }\n        else {\n            const error = new McpError(response.error.code, response.error.message, response.error.data);\n            handler(error);\n        }\n    }\n    get transport() {\n        return this._transport;\n    }\n    /**\n     * Closes the connection.\n     */\n    async close() {\n        const transport = this._transport;\n        if (transport) {\n            await transport.close();\n            // Only call _onclose if the transport didn't trigger it\n            if (this._transport === transport) {\n                this._onclose();\n            }\n        }\n    }\n    /**\n     * Sends a request and wait for a response.\n     *\n     * Do not use this method to emit notifications! Use notification() instead.\n     */\n    request(request, resultSchema, options) {\n        const { relatedRequestId, resumptionToken, onresumptiontoken } = options !== null && options !== void 0 ? options : {};\n        return new Promise((resolve, reject) => {\n            var _a, _b, _c, _d, _e, _f;\n            if (!this._transport) {\n                reject(new Error(\"Not connected\"));\n                return;\n            }\n            if (((_a = this._options) === null || _a === void 0 ? void 0 : _a.enforceStrictCapabilities) === true) {\n                this.assertCapabilityForMethod(request.method);\n            }\n            (_b = options === null || options === void 0 ? void 0 : options.signal) === null || _b === void 0 ? void 0 : _b.throwIfAborted();\n            const messageId = this._requestMessageId++;\n            const jsonrpcRequest = {\n                ...request,\n                jsonrpc: \"2.0\",\n                id: messageId,\n            };\n            if (options === null || options === void 0 ? void 0 : options.onprogress) {\n                this._progressHandlers.set(messageId, options.onprogress);\n                jsonrpcRequest.params = {\n                    ...request.params,\n                    _meta: {\n                        ...(((_c = request.params) === null || _c === void 0 ? void 0 : _c._meta) || {}),\n                        progressToken: messageId,\n                    },\n                };\n            }\n            const cancel = (reason) => {\n                var _a;\n                this._responseHandlers.delete(messageId);\n                this._progressHandlers.delete(messageId);\n                this._cleanupTimeout(messageId);\n                (_a = this._transport) === null || _a === void 0 ? void 0 : _a.send({\n                    jsonrpc: \"2.0\",\n                    method: \"notifications/cancelled\",\n                    params: {\n                        requestId: messageId,\n                        reason: String(reason),\n                    },\n                }, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error) => this._onerror(new Error(`Failed to send cancellation: ${error}`)));\n                reject(reason);\n            };\n            this._responseHandlers.set(messageId, (response) => {\n                var _a;\n                if ((_a = options === null || options === void 0 ? void 0 : options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {\n                    return;\n                }\n                if (response instanceof Error) {\n                    return reject(response);\n                }\n                try {\n                    const result = resultSchema.parse(response.result);\n                    resolve(result);\n                }\n                catch (error) {\n                    reject(error);\n                }\n            });\n            (_d = options === null || options === void 0 ? void 0 : options.signal) === null || _d === void 0 ? void 0 : _d.addEventListener(\"abort\", () => {\n                var _a;\n                cancel((_a = options === null || options === void 0 ? void 0 : options.signal) === null || _a === void 0 ? void 0 : _a.reason);\n            });\n            const timeout = (_e = options === null || options === void 0 ? void 0 : options.timeout) !== null && _e !== void 0 ? _e : DEFAULT_REQUEST_TIMEOUT_MSEC;\n            const timeoutHandler = () => cancel(new McpError(ErrorCode.RequestTimeout, \"Request timed out\", {\n                timeout,\n            }));\n            this._setupTimeout(messageId, timeout, options === null || options === void 0 ? void 0 : options.maxTotalTimeout, timeoutHandler, (_f = options === null || options === void 0 ? void 0 : options.resetTimeoutOnProgress) !== null && _f !== void 0 ? _f : false);\n            this._transport\n                .send(jsonrpcRequest, {\n                relatedRequestId,\n                resumptionToken,\n                onresumptiontoken,\n            })\n                .catch((error) => {\n                this._cleanupTimeout(messageId);\n                reject(error);\n            });\n        });\n    }\n    /**\n     * Emits a notification, which is a one-way message that does not expect a response.\n     */\n    async notification(notification, options) {\n        var _a, _b;\n        if (!this._transport) {\n            throw new Error(\"Not connected\");\n        }\n        this.assertNotificationCapability(notification.method);\n        const debouncedMethods = (_b = (_a = this._options) === null || _a === void 0 ? void 0 : _a.debouncedNotificationMethods) !== null && _b !== void 0 ? _b : [];\n        // A notification can only be debounced if it's in the list AND it's \"simple\"\n        // (i.e., has no parameters and no related request ID that could be lost).\n        const canDebounce = debouncedMethods.includes(notification.method) &&\n            !notification.params &&\n            !(options === null || options === void 0 ? void 0 : options.relatedRequestId);\n        if (canDebounce) {\n            // If a notification of this type is already scheduled, do nothing.\n            if (this._pendingDebouncedNotifications.has(notification.method)) {\n                return;\n            }\n            // Mark this notification type as pending.\n            this._pendingDebouncedNotifications.add(notification.method);\n            // Schedule the actual send to happen in the next microtask.\n            // This allows all synchronous calls in the current event loop tick to be coalesced.\n            Promise.resolve().then(() => {\n                var _a;\n                // Un-mark the notification so the next one can be scheduled.\n                this._pendingDebouncedNotifications.delete(notification.method);\n                // SAFETY CHECK: If the connection was closed while this was pending, abort.\n                if (!this._transport) {\n                    return;\n                }\n                const jsonrpcNotification = {\n                    ...notification,\n                    jsonrpc: \"2.0\",\n                };\n                // Send the notification, but don't await it here to avoid blocking.\n                // Handle potential errors with a .catch().\n                (_a = this._transport) === null || _a === void 0 ? void 0 : _a.send(jsonrpcNotification, options).catch((error) => this._onerror(error));\n            });\n            // Return immediately.\n            return;\n        }\n        const jsonrpcNotification = {\n            ...notification,\n            jsonrpc: \"2.0\",\n        };\n        await this._transport.send(jsonrpcNotification, options);\n    }\n    /**\n     * Registers a handler to invoke when this protocol object receives a request with the given method.\n     *\n     * Note that this will replace any previous request handler for the same method.\n     */\n    setRequestHandler(requestSchema, handler) {\n        const method = requestSchema.shape.method.value;\n        this.assertRequestHandlerCapability(method);\n        this._requestHandlers.set(method, (request, extra) => {\n            return Promise.resolve(handler(requestSchema.parse(request), extra));\n        });\n    }\n    /**\n     * Removes the request handler for the given method.\n     */\n    removeRequestHandler(method) {\n        this._requestHandlers.delete(method);\n    }\n    /**\n     * Asserts that a request handler has not already been set for the given method, in preparation for a new one being automatically installed.\n     */\n    assertCanSetRequestHandler(method) {\n        if (this._requestHandlers.has(method)) {\n            throw new Error(`A request handler for ${method} already exists, which would be overridden`);\n        }\n    }\n    /**\n     * Registers a handler to invoke when this protocol object receives a notification with the given method.\n     *\n     * Note that this will replace any previous notification handler for the same method.\n     */\n    setNotificationHandler(notificationSchema, handler) {\n        this._notificationHandlers.set(notificationSchema.shape.method.value, (notification) => Promise.resolve(handler(notificationSchema.parse(notification))));\n    }\n    /**\n     * Removes the notification handler for the given method.\n     */\n    removeNotificationHandler(method) {\n        this._notificationHandlers.delete(method);\n    }\n}\nexport function mergeCapabilities(base, additional) {\n    return Object.entries(additional).reduce((acc, [key, value]) => {\n        if (value && typeof value === \"object\") {\n            acc[key] = acc[key] ? { ...acc[key], ...value } : value;\n        }\n        else {\n            acc[key] = value;\n        }\n        return acc;\n    }, { ...base });\n}\n//# sourceMappingURL=protocol.js.map","/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.URI = global.URI || {})));\n}(this, (function (exports) { 'use strict';\n\nfunction merge() {\n    for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) {\n        sets[_key] = arguments[_key];\n    }\n\n    if (sets.length > 1) {\n        sets[0] = sets[0].slice(0, -1);\n        var xl = sets.length - 1;\n        for (var x = 1; x < xl; ++x) {\n            sets[x] = sets[x].slice(1, -1);\n        }\n        sets[xl] = sets[xl].slice(1);\n        return sets.join('');\n    } else {\n        return sets[0];\n    }\n}\nfunction subexp(str) {\n    return \"(?:\" + str + \")\";\n}\nfunction typeOf(o) {\n    return o === undefined ? \"undefined\" : o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase();\n}\nfunction toUpperCase(str) {\n    return str.toUpperCase();\n}\nfunction toArray(obj) {\n    return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : [];\n}\nfunction assign(target, source) {\n    var obj = target;\n    if (source) {\n        for (var key in source) {\n            obj[key] = source[key];\n        }\n    }\n    return obj;\n}\n\nfunction buildExps(isIRI) {\n    var ALPHA$$ = \"[A-Za-z]\",\n        CR$ = \"[\\\\x0D]\",\n        DIGIT$$ = \"[0-9]\",\n        DQUOTE$$ = \"[\\\\x22]\",\n        HEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"),\n        //case-insensitive\n    LF$$ = \"[\\\\x0A]\",\n        SP$$ = \"[\\\\x20]\",\n        PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)),\n        //expanded\n    GEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n        SUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n        RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n        UCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\",\n        //subset, excludes bidi control characters\n    IPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\",\n        //subset\n    UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n        SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n        USERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n        DEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n        DEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$),\n        //relaxed parsing rules\n    IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n        H16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n        LS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n        IPV6ADDRESS1$ = subexp(subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$),\n        //                           6( h16 \":\" ) ls32\n    IPV6ADDRESS2$ = subexp(\"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$),\n        //                      \"::\" 5( h16 \":\" ) ls32\n    IPV6ADDRESS3$ = subexp(subexp(H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$),\n        //[               h16 ] \"::\" 4( h16 \":\" ) ls32\n    IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$),\n        //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n    IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$),\n        //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n    IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$),\n        //[ *3( h16 \":\" ) h16 ] \"::\"    h16 \":\"   ls32\n    IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$),\n        //[ *4( h16 \":\" ) h16 ] \"::\"              ls32\n    IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$),\n        //[ *5( h16 \":\" ) h16 ] \"::\"              h16\n    IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\"),\n        //[ *6( h16 \":\" ) h16 ] \"::\"\n    IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n        ZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"),\n        //RFC 6874\n    IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$),\n        //RFC 6874\n    IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$),\n        //RFC 6874, with relaxed parsing rules\n    IPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n        IP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"),\n        //RFC 6874\n    REG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n        HOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n        PORT$ = subexp(DIGIT$$ + \"*\"),\n        AUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n        PCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n        SEGMENT$ = subexp(PCHAR$ + \"*\"),\n        SEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n        SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n        PATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n        PATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"),\n        //simplified\n    PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$),\n        //simplified\n    PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$),\n        //simplified\n    PATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n        PATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n        QUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n        FRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n        HIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n        URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n        RELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n        RELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n        URI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n        ABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n        GENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n        RELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n        ABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n        SAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n        AUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\";\n    return {\n        NOT_SCHEME: new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n        NOT_USERINFO: new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n        NOT_HOST: new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n        NOT_PATH: new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n        NOT_PATH_NOSCHEME: new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n        NOT_QUERY: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n        NOT_FRAGMENT: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n        ESCAPE: new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n        UNRESERVED: new RegExp(UNRESERVED$$, \"g\"),\n        OTHER_CHARS: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n        PCT_ENCODED: new RegExp(PCT_ENCODED$, \"g\"),\n        IPV4ADDRESS: new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n        IPV6ADDRESS: new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n    };\n}\nvar URI_PROTOCOL = buildExps(false);\n\nvar IRI_PROTOCOL = buildExps(true);\n\nvar slicedToArray = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if (Symbol.iterator in Object(arr)) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  } else {\n    return Array.from(arr);\n  }\n};\n\n/** Highest positive signed 32-bit float value */\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nvar regexPunycode = /^xn--/;\nvar regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nvar regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nvar errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error$1(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tvar result = [];\n\tvar length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tvar parts = string.split('@');\n\tvar result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tvar labels = string.split('.');\n\tvar encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t// Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nvar ucs2encode = function ucs2encode(array) {\n\treturn String.fromCodePoint.apply(String, toConsumableArray(array));\n};\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nvar basicToDigit = function basicToDigit(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nvar digitToBasic = function digitToBasic(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nvar adapt = function adapt(delta, numPoints, firstTime) {\n\tvar k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nvar decode = function decode(input) {\n\t// Don't use UCS-2.\n\tvar output = [];\n\tvar inputLength = input.length;\n\tvar i = 0;\n\tvar n = initialN;\n\tvar bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tvar basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (var j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror$1('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tvar oldi = i;\n\t\tfor (var w = 1, k = base;; /* no condition */k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror$1('invalid-input');\n\t\t\t}\n\n\t\t\tvar digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror$1('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tvar t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror$1('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\t\t}\n\n\t\tvar out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror$1('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\t}\n\n\treturn String.fromCodePoint.apply(String, output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nvar encode = function encode(input) {\n\tvar output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tvar inputLength = input.length;\n\n\t// Initialize the state.\n\tvar n = initialN;\n\tvar delta = 0;\n\tvar bias = initialBias;\n\n\t// Handle the basic code points.\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _currentValue2 = _step.value;\n\n\t\t\tif (_currentValue2 < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(_currentValue2));\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar basicLength = output.length;\n\tvar handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tvar m = maxInt;\n\t\tvar _iteratorNormalCompletion2 = true;\n\t\tvar _didIteratorError2 = false;\n\t\tvar _iteratorError2 = undefined;\n\n\t\ttry {\n\t\t\tfor (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\t\tvar currentValue = _step2.value;\n\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow.\n\t\t} catch (err) {\n\t\t\t_didIteratorError2 = true;\n\t\t\t_iteratorError2 = err;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t\t_iterator2.return();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (_didIteratorError2) {\n\t\t\t\t\tthrow _iteratorError2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror$1('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tvar _iteratorNormalCompletion3 = true;\n\t\tvar _didIteratorError3 = false;\n\t\tvar _iteratorError3 = undefined;\n\n\t\ttry {\n\t\t\tfor (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n\t\t\t\tvar _currentValue = _step3.value;\n\n\t\t\t\tif (_currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror$1('overflow');\n\t\t\t\t}\n\t\t\t\tif (_currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\t\tvar q = delta;\n\t\t\t\t\tfor (var k = base;; /* no condition */k += base) {\n\t\t\t\t\t\tvar t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar qMinusT = q - t;\n\t\t\t\t\t\tvar baseMinusT = base - t;\n\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t_didIteratorError3 = true;\n\t\t\t_iteratorError3 = err;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!_iteratorNormalCompletion3 && _iterator3.return) {\n\t\t\t\t\t_iterator3.return();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (_didIteratorError3) {\n\t\t\t\t\tthrow _iteratorError3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nvar toUnicode = function toUnicode(input) {\n\treturn mapDomain(input, function (string) {\n\t\treturn regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nvar toASCII = function toASCII(input) {\n\treturn mapDomain(input, function (string) {\n\t\treturn regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nvar punycode = {\n\t/**\n  * A string representing the current Punycode.js version number.\n  * @memberOf punycode\n  * @type String\n  */\n\t'version': '2.1.0',\n\t/**\n  * An object of methods to convert from JavaScript's internal character\n  * representation (UCS-2) to Unicode code points, and back.\n  * @see <https://mathiasbynens.be/notes/javascript-encoding>\n  * @memberOf punycode\n  * @type Object\n  */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\n/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\nvar SCHEMES = {};\nfunction pctEncChar(chr) {\n    var c = chr.charCodeAt(0);\n    var e = void 0;\n    if (c < 16) e = \"%0\" + c.toString(16).toUpperCase();else if (c < 128) e = \"%\" + c.toString(16).toUpperCase();else if (c < 2048) e = \"%\" + (c >> 6 | 192).toString(16).toUpperCase() + \"%\" + (c & 63 | 128).toString(16).toUpperCase();else e = \"%\" + (c >> 12 | 224).toString(16).toUpperCase() + \"%\" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + \"%\" + (c & 63 | 128).toString(16).toUpperCase();\n    return e;\n}\nfunction pctDecChars(str) {\n    var newStr = \"\";\n    var i = 0;\n    var il = str.length;\n    while (i < il) {\n        var c = parseInt(str.substr(i + 1, 2), 16);\n        if (c < 128) {\n            newStr += String.fromCharCode(c);\n            i += 3;\n        } else if (c >= 194 && c < 224) {\n            if (il - i >= 6) {\n                var c2 = parseInt(str.substr(i + 4, 2), 16);\n                newStr += String.fromCharCode((c & 31) << 6 | c2 & 63);\n            } else {\n                newStr += str.substr(i, 6);\n            }\n            i += 6;\n        } else if (c >= 224) {\n            if (il - i >= 9) {\n                var _c = parseInt(str.substr(i + 4, 2), 16);\n                var c3 = parseInt(str.substr(i + 7, 2), 16);\n                newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63);\n            } else {\n                newStr += str.substr(i, 9);\n            }\n            i += 9;\n        } else {\n            newStr += str.substr(i, 3);\n            i += 3;\n        }\n    }\n    return newStr;\n}\nfunction _normalizeComponentEncoding(components, protocol) {\n    function decodeUnreserved(str) {\n        var decStr = pctDecChars(str);\n        return !decStr.match(protocol.UNRESERVED) ? str : decStr;\n    }\n    if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n    if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n    if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n    if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n    if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n    if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n    return components;\n}\n\nfunction _stripLeadingZeros(str) {\n    return str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\nfunction _normalizeIPv4(host, protocol) {\n    var matches = host.match(protocol.IPV4ADDRESS) || [];\n\n    var _matches = slicedToArray(matches, 2),\n        address = _matches[1];\n\n    if (address) {\n        return address.split(\".\").map(_stripLeadingZeros).join(\".\");\n    } else {\n        return host;\n    }\n}\nfunction _normalizeIPv6(host, protocol) {\n    var matches = host.match(protocol.IPV6ADDRESS) || [];\n\n    var _matches2 = slicedToArray(matches, 3),\n        address = _matches2[1],\n        zone = _matches2[2];\n\n    if (address) {\n        var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(),\n            _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2),\n            last = _address$toLowerCase$2[0],\n            first = _address$toLowerCase$2[1];\n\n        var firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n        var lastFields = last.split(\":\").map(_stripLeadingZeros);\n        var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n        var fieldCount = isLastFieldIPv4Address ? 7 : 8;\n        var lastFieldsStart = lastFields.length - fieldCount;\n        var fields = Array(fieldCount);\n        for (var x = 0; x < fieldCount; ++x) {\n            fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n        }\n        if (isLastFieldIPv4Address) {\n            fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n        }\n        var allZeroFields = fields.reduce(function (acc, field, index) {\n            if (!field || field === \"0\") {\n                var lastLongest = acc[acc.length - 1];\n                if (lastLongest && lastLongest.index + lastLongest.length === index) {\n                    lastLongest.length++;\n                } else {\n                    acc.push({ index: index, length: 1 });\n                }\n            }\n            return acc;\n        }, []);\n        var longestZeroFields = allZeroFields.sort(function (a, b) {\n            return b.length - a.length;\n        })[0];\n        var newHost = void 0;\n        if (longestZeroFields && longestZeroFields.length > 1) {\n            var newFirst = fields.slice(0, longestZeroFields.index);\n            var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n            newHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n        } else {\n            newHost = fields.join(\":\");\n        }\n        if (zone) {\n            newHost += \"%\" + zone;\n        }\n        return newHost;\n    } else {\n        return host;\n    }\n}\nvar URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nvar NO_MATCH_IS_UNDEFINED = \"\".match(/(){0}/)[1] === undefined;\nfunction parse(uriString) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var components = {};\n    var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;\n    if (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n    var matches = uriString.match(URI_PARSE);\n    if (matches) {\n        if (NO_MATCH_IS_UNDEFINED) {\n            //store each component\n            components.scheme = matches[1];\n            components.userinfo = matches[3];\n            components.host = matches[4];\n            components.port = parseInt(matches[5], 10);\n            components.path = matches[6] || \"\";\n            components.query = matches[7];\n            components.fragment = matches[8];\n            //fix port number\n            if (isNaN(components.port)) {\n                components.port = matches[5];\n            }\n        } else {\n            //IE FIX for improper RegExp matching\n            //store each component\n            components.scheme = matches[1] || undefined;\n            components.userinfo = uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined;\n            components.host = uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined;\n            components.port = parseInt(matches[5], 10);\n            components.path = matches[6] || \"\";\n            components.query = uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined;\n            components.fragment = uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined;\n            //fix port number\n            if (isNaN(components.port)) {\n                components.port = uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined;\n            }\n        }\n        if (components.host) {\n            //normalize IP hosts\n            components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n        }\n        //determine reference type\n        if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n            components.reference = \"same-document\";\n        } else if (components.scheme === undefined) {\n            components.reference = \"relative\";\n        } else if (components.fragment === undefined) {\n            components.reference = \"absolute\";\n        } else {\n            components.reference = \"uri\";\n        }\n        //check for reference errors\n        if (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n            components.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n        }\n        //find scheme handler\n        var schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n        //check if scheme can't handle IRIs\n        if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n            //if host component is a domain name\n            if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) {\n                //convert Unicode IDN -> ASCII IDN\n                try {\n                    components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n                } catch (e) {\n                    components.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n                }\n            }\n            //convert IRI -> URI\n            _normalizeComponentEncoding(components, URI_PROTOCOL);\n        } else {\n            //normalize encodings\n            _normalizeComponentEncoding(components, protocol);\n        }\n        //perform scheme specific parsing\n        if (schemeHandler && schemeHandler.parse) {\n            schemeHandler.parse(components, options);\n        }\n    } else {\n        components.error = components.error || \"URI can not be parsed.\";\n    }\n    return components;\n}\n\nfunction _recomposeAuthority(components, options) {\n    var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;\n    var uriTokens = [];\n    if (components.userinfo !== undefined) {\n        uriTokens.push(components.userinfo);\n        uriTokens.push(\"@\");\n    }\n    if (components.host !== undefined) {\n        //normalize IP hosts, add brackets and escape zone separator for IPv6\n        uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) {\n            return \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\";\n        }));\n    }\n    if (typeof components.port === \"number\" || typeof components.port === \"string\") {\n        uriTokens.push(\":\");\n        uriTokens.push(String(components.port));\n    }\n    return uriTokens.length ? uriTokens.join(\"\") : undefined;\n}\n\nvar RDS1 = /^\\.\\.?\\//;\nvar RDS2 = /^\\/\\.(\\/|$)/;\nvar RDS3 = /^\\/\\.\\.(\\/|$)/;\nvar RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\nfunction removeDotSegments(input) {\n    var output = [];\n    while (input.length) {\n        if (input.match(RDS1)) {\n            input = input.replace(RDS1, \"\");\n        } else if (input.match(RDS2)) {\n            input = input.replace(RDS2, \"/\");\n        } else if (input.match(RDS3)) {\n            input = input.replace(RDS3, \"/\");\n            output.pop();\n        } else if (input === \".\" || input === \"..\") {\n            input = \"\";\n        } else {\n            var im = input.match(RDS5);\n            if (im) {\n                var s = im[0];\n                input = input.slice(s.length);\n                output.push(s);\n            } else {\n                throw new Error(\"Unexpected dot segment condition\");\n            }\n        }\n    }\n    return output.join(\"\");\n}\n\nfunction serialize(components) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL;\n    var uriTokens = [];\n    //find scheme handler\n    var schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n    //perform scheme specific serialization\n    if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n    if (components.host) {\n        //if host component is an IPv6 address\n        if (protocol.IPV6ADDRESS.test(components.host)) {}\n        //TODO: normalize IPv6 address as per RFC 5952\n\n        //if host component is a domain name\n        else if (options.domainHost || schemeHandler && schemeHandler.domainHost) {\n                //convert IDN via punycode\n                try {\n                    components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host);\n                } catch (e) {\n                    components.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n                }\n            }\n    }\n    //normalize encoding\n    _normalizeComponentEncoding(components, protocol);\n    if (options.reference !== \"suffix\" && components.scheme) {\n        uriTokens.push(components.scheme);\n        uriTokens.push(\":\");\n    }\n    var authority = _recomposeAuthority(components, options);\n    if (authority !== undefined) {\n        if (options.reference !== \"suffix\") {\n            uriTokens.push(\"//\");\n        }\n        uriTokens.push(authority);\n        if (components.path && components.path.charAt(0) !== \"/\") {\n            uriTokens.push(\"/\");\n        }\n    }\n    if (components.path !== undefined) {\n        var s = components.path;\n        if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n            s = removeDotSegments(s);\n        }\n        if (authority === undefined) {\n            s = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n        }\n        uriTokens.push(s);\n    }\n    if (components.query !== undefined) {\n        uriTokens.push(\"?\");\n        uriTokens.push(components.query);\n    }\n    if (components.fragment !== undefined) {\n        uriTokens.push(\"#\");\n        uriTokens.push(components.fragment);\n    }\n    return uriTokens.join(\"\"); //merge tokens into a string\n}\n\nfunction resolveComponents(base, relative) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var skipNormalization = arguments[3];\n\n    var target = {};\n    if (!skipNormalization) {\n        base = parse(serialize(base, options), options); //normalize base components\n        relative = parse(serialize(relative, options), options); //normalize relative components\n    }\n    options = options || {};\n    if (!options.tolerant && relative.scheme) {\n        target.scheme = relative.scheme;\n        //target.authority = relative.authority;\n        target.userinfo = relative.userinfo;\n        target.host = relative.host;\n        target.port = relative.port;\n        target.path = removeDotSegments(relative.path || \"\");\n        target.query = relative.query;\n    } else {\n        if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n            //target.authority = relative.authority;\n            target.userinfo = relative.userinfo;\n            target.host = relative.host;\n            target.port = relative.port;\n            target.path = removeDotSegments(relative.path || \"\");\n            target.query = relative.query;\n        } else {\n            if (!relative.path) {\n                target.path = base.path;\n                if (relative.query !== undefined) {\n                    target.query = relative.query;\n                } else {\n                    target.query = base.query;\n                }\n            } else {\n                if (relative.path.charAt(0) === \"/\") {\n                    target.path = removeDotSegments(relative.path);\n                } else {\n                    if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n                        target.path = \"/\" + relative.path;\n                    } else if (!base.path) {\n                        target.path = relative.path;\n                    } else {\n                        target.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n                    }\n                    target.path = removeDotSegments(target.path);\n                }\n                target.query = relative.query;\n            }\n            //target.authority = base.authority;\n            target.userinfo = base.userinfo;\n            target.host = base.host;\n            target.port = base.port;\n        }\n        target.scheme = base.scheme;\n    }\n    target.fragment = relative.fragment;\n    return target;\n}\n\nfunction resolve(baseURI, relativeURI, options) {\n    var schemelessOptions = assign({ scheme: 'null' }, options);\n    return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n}\n\nfunction normalize(uri, options) {\n    if (typeof uri === \"string\") {\n        uri = serialize(parse(uri, options), options);\n    } else if (typeOf(uri) === \"object\") {\n        uri = parse(serialize(uri, options), options);\n    }\n    return uri;\n}\n\nfunction equal(uriA, uriB, options) {\n    if (typeof uriA === \"string\") {\n        uriA = serialize(parse(uriA, options), options);\n    } else if (typeOf(uriA) === \"object\") {\n        uriA = serialize(uriA, options);\n    }\n    if (typeof uriB === \"string\") {\n        uriB = serialize(parse(uriB, options), options);\n    } else if (typeOf(uriB) === \"object\") {\n        uriB = serialize(uriB, options);\n    }\n    return uriA === uriB;\n}\n\nfunction escapeComponent(str, options) {\n    return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar);\n}\n\nfunction unescapeComponent(str, options) {\n    return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars);\n}\n\nvar handler = {\n    scheme: \"http\",\n    domainHost: true,\n    parse: function parse(components, options) {\n        //report missing host\n        if (!components.host) {\n            components.error = components.error || \"HTTP URIs must have a host.\";\n        }\n        return components;\n    },\n    serialize: function serialize(components, options) {\n        var secure = String(components.scheme).toLowerCase() === \"https\";\n        //normalize the default port\n        if (components.port === (secure ? 443 : 80) || components.port === \"\") {\n            components.port = undefined;\n        }\n        //normalize the empty path\n        if (!components.path) {\n            components.path = \"/\";\n        }\n        //NOTE: We do not parse query strings for HTTP URIs\n        //as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n        //and not the HTTP spec.\n        return components;\n    }\n};\n\nvar handler$1 = {\n    scheme: \"https\",\n    domainHost: handler.domainHost,\n    parse: handler.parse,\n    serialize: handler.serialize\n};\n\nfunction isSecure(wsComponents) {\n    return typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n//RFC 6455\nvar handler$2 = {\n    scheme: \"ws\",\n    domainHost: true,\n    parse: function parse(components, options) {\n        var wsComponents = components;\n        //indicate if the secure flag is set\n        wsComponents.secure = isSecure(wsComponents);\n        //construct resouce name\n        wsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n        wsComponents.path = undefined;\n        wsComponents.query = undefined;\n        return wsComponents;\n    },\n    serialize: function serialize(wsComponents, options) {\n        //normalize the default port\n        if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n            wsComponents.port = undefined;\n        }\n        //ensure scheme matches secure flag\n        if (typeof wsComponents.secure === 'boolean') {\n            wsComponents.scheme = wsComponents.secure ? 'wss' : 'ws';\n            wsComponents.secure = undefined;\n        }\n        //reconstruct path from resource name\n        if (wsComponents.resourceName) {\n            var _wsComponents$resourc = wsComponents.resourceName.split('?'),\n                _wsComponents$resourc2 = slicedToArray(_wsComponents$resourc, 2),\n                path = _wsComponents$resourc2[0],\n                query = _wsComponents$resourc2[1];\n\n            wsComponents.path = path && path !== '/' ? path : undefined;\n            wsComponents.query = query;\n            wsComponents.resourceName = undefined;\n        }\n        //forbid fragment component\n        wsComponents.fragment = undefined;\n        return wsComponents;\n    }\n};\n\nvar handler$3 = {\n    scheme: \"wss\",\n    domainHost: handler$2.domainHost,\n    parse: handler$2.parse,\n    serialize: handler$2.serialize\n};\n\nvar O = {};\nvar isIRI = true;\n//RFC 3986\nvar UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nvar HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nvar PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\";  //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$);  //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$));  //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nvar ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nvar QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nvar VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nvar SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nvar UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nvar PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nvar NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nvar NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nvar NOT_HFVALUE = NOT_HFNAME;\nfunction decodeUnreserved(str) {\n    var decStr = pctDecChars(str);\n    return !decStr.match(UNRESERVED) ? str : decStr;\n}\nvar handler$4 = {\n    scheme: \"mailto\",\n    parse: function parse$$1(components, options) {\n        var mailtoComponents = components;\n        var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(\",\") : [];\n        mailtoComponents.path = undefined;\n        if (mailtoComponents.query) {\n            var unknownHeaders = false;\n            var headers = {};\n            var hfields = mailtoComponents.query.split(\"&\");\n            for (var x = 0, xl = hfields.length; x < xl; ++x) {\n                var hfield = hfields[x].split(\"=\");\n                switch (hfield[0]) {\n                    case \"to\":\n                        var toAddrs = hfield[1].split(\",\");\n                        for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) {\n                            to.push(toAddrs[_x]);\n                        }\n                        break;\n                    case \"subject\":\n                        mailtoComponents.subject = unescapeComponent(hfield[1], options);\n                        break;\n                    case \"body\":\n                        mailtoComponents.body = unescapeComponent(hfield[1], options);\n                        break;\n                    default:\n                        unknownHeaders = true;\n                        headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n                        break;\n                }\n            }\n            if (unknownHeaders) mailtoComponents.headers = headers;\n        }\n        mailtoComponents.query = undefined;\n        for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) {\n            var addr = to[_x2].split(\"@\");\n            addr[0] = unescapeComponent(addr[0]);\n            if (!options.unicodeSupport) {\n                //convert Unicode IDN -> ASCII IDN\n                try {\n                    addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n                } catch (e) {\n                    mailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n                }\n            } else {\n                addr[1] = unescapeComponent(addr[1], options).toLowerCase();\n            }\n            to[_x2] = addr.join(\"@\");\n        }\n        return mailtoComponents;\n    },\n    serialize: function serialize$$1(mailtoComponents, options) {\n        var components = mailtoComponents;\n        var to = toArray(mailtoComponents.to);\n        if (to) {\n            for (var x = 0, xl = to.length; x < xl; ++x) {\n                var toAddr = String(to[x]);\n                var atIdx = toAddr.lastIndexOf(\"@\");\n                var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n                var domain = toAddr.slice(atIdx + 1);\n                //convert IDN via punycode\n                try {\n                    domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain);\n                } catch (e) {\n                    components.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n                }\n                to[x] = localPart + \"@\" + domain;\n            }\n            components.path = to.join(\",\");\n        }\n        var headers = mailtoComponents.headers = mailtoComponents.headers || {};\n        if (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n        if (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n        var fields = [];\n        for (var name in headers) {\n            if (headers[name] !== O[name]) {\n                fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + \"=\" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar));\n            }\n        }\n        if (fields.length) {\n            components.query = fields.join(\"&\");\n        }\n        return components;\n    }\n};\n\nvar URN_PARSE = /^([^\\:]+)\\:(.*)/;\n//RFC 2141\nvar handler$5 = {\n    scheme: \"urn\",\n    parse: function parse$$1(components, options) {\n        var matches = components.path && components.path.match(URN_PARSE);\n        var urnComponents = components;\n        if (matches) {\n            var scheme = options.scheme || urnComponents.scheme || \"urn\";\n            var nid = matches[1].toLowerCase();\n            var nss = matches[2];\n            var urnScheme = scheme + \":\" + (options.nid || nid);\n            var schemeHandler = SCHEMES[urnScheme];\n            urnComponents.nid = nid;\n            urnComponents.nss = nss;\n            urnComponents.path = undefined;\n            if (schemeHandler) {\n                urnComponents = schemeHandler.parse(urnComponents, options);\n            }\n        } else {\n            urnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n        }\n        return urnComponents;\n    },\n    serialize: function serialize$$1(urnComponents, options) {\n        var scheme = options.scheme || urnComponents.scheme || \"urn\";\n        var nid = urnComponents.nid;\n        var urnScheme = scheme + \":\" + (options.nid || nid);\n        var schemeHandler = SCHEMES[urnScheme];\n        if (schemeHandler) {\n            urnComponents = schemeHandler.serialize(urnComponents, options);\n        }\n        var uriComponents = urnComponents;\n        var nss = urnComponents.nss;\n        uriComponents.path = (nid || options.nid) + \":\" + nss;\n        return uriComponents;\n    }\n};\n\nvar UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\n//RFC 4122\nvar handler$6 = {\n    scheme: \"urn:uuid\",\n    parse: function parse(urnComponents, options) {\n        var uuidComponents = urnComponents;\n        uuidComponents.uuid = uuidComponents.nss;\n        uuidComponents.nss = undefined;\n        if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n            uuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n        }\n        return uuidComponents;\n    },\n    serialize: function serialize(uuidComponents, options) {\n        var urnComponents = uuidComponents;\n        //normalize UUID\n        urnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n        return urnComponents;\n    }\n};\n\nSCHEMES[handler.scheme] = handler;\nSCHEMES[handler$1.scheme] = handler$1;\nSCHEMES[handler$2.scheme] = handler$2;\nSCHEMES[handler$3.scheme] = handler$3;\nSCHEMES[handler$4.scheme] = handler$4;\nSCHEMES[handler$5.scheme] = handler$5;\nSCHEMES[handler$6.scheme] = handler$6;\n\nexports.SCHEMES = SCHEMES;\nexports.pctEncChar = pctEncChar;\nexports.pctDecChars = pctDecChars;\nexports.parse = parse;\nexports.removeDotSegments = removeDotSegments;\nexports.serialize = serialize;\nexports.resolveComponents = resolveComponents;\nexports.resolve = resolve;\nexports.normalize = normalize;\nexports.equal = equal;\nexports.escapeComponent = escapeComponent;\nexports.unescapeComponent = unescapeComponent;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=uri.all.js.map\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n","'use strict';\n\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nmodule.exports = function ucs2length(str) {\n  var length = 0\n    , len = str.length\n    , pos = 0\n    , value;\n  while (pos < len) {\n    length++;\n    value = str.charCodeAt(pos++);\n    if (value >= 0xD800 && value <= 0xDBFF && pos < len) {\n      // high surrogate, and there is a next character\n      value = str.charCodeAt(pos);\n      if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\n    }\n  }\n  return length;\n};\n","'use strict';\n\n\nmodule.exports = {\n  copy: copy,\n  checkDataType: checkDataType,\n  checkDataTypes: checkDataTypes,\n  coerceToTypes: coerceToTypes,\n  toHash: toHash,\n  getProperty: getProperty,\n  escapeQuotes: escapeQuotes,\n  equal: require('fast-deep-equal'),\n  ucs2length: require('./ucs2length'),\n  varOccurences: varOccurences,\n  varReplace: varReplace,\n  schemaHasRules: schemaHasRules,\n  schemaHasRulesExcept: schemaHasRulesExcept,\n  schemaUnknownRules: schemaUnknownRules,\n  toQuotedString: toQuotedString,\n  getPathExpr: getPathExpr,\n  getPath: getPath,\n  getData: getData,\n  unescapeFragment: unescapeFragment,\n  unescapeJsonPointer: unescapeJsonPointer,\n  escapeFragment: escapeFragment,\n  escapeJsonPointer: escapeJsonPointer\n};\n\n\nfunction copy(o, to) {\n  to = to || {};\n  for (var key in o) to[key] = o[key];\n  return to;\n}\n\n\nfunction checkDataType(dataType, data, strictNumbers, negate) {\n  var EQUAL = negate ? ' !== ' : ' === '\n    , AND = negate ? ' || ' : ' && '\n    , OK = negate ? '!' : ''\n    , NOT = negate ? '' : '!';\n  switch (dataType) {\n    case 'null': return data + EQUAL + 'null';\n    case 'array': return OK + 'Array.isArray(' + data + ')';\n    case 'object': return '(' + OK + data + AND +\n                          'typeof ' + data + EQUAL + '\"object\"' + AND +\n                          NOT + 'Array.isArray(' + data + '))';\n    case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\n                           NOT + '(' + data + ' % 1)' +\n                           AND + data + EQUAL + data +\n                           (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n    case 'number': return '(typeof ' + data + EQUAL + '\"' + dataType + '\"' +\n                          (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n    default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\n  }\n}\n\n\nfunction checkDataTypes(dataTypes, data, strictNumbers) {\n  switch (dataTypes.length) {\n    case 1: return checkDataType(dataTypes[0], data, strictNumbers, true);\n    default:\n      var code = '';\n      var types = toHash(dataTypes);\n      if (types.array && types.object) {\n        code = types.null ? '(': '(!' + data + ' || ';\n        code += 'typeof ' + data + ' !== \"object\")';\n        delete types.null;\n        delete types.array;\n        delete types.object;\n      }\n      if (types.number) delete types.integer;\n      for (var t in types)\n        code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true);\n\n      return code;\n  }\n}\n\n\nvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\nfunction coerceToTypes(optionCoerceTypes, dataTypes) {\n  if (Array.isArray(dataTypes)) {\n    var types = [];\n    for (var i=0; i<dataTypes.length; i++) {\n      var t = dataTypes[i];\n      if (COERCE_TO_TYPES[t]) types[types.length] = t;\n      else if (optionCoerceTypes === 'array' && t === 'array') types[types.length] = t;\n    }\n    if (types.length) return types;\n  } else if (COERCE_TO_TYPES[dataTypes]) {\n    return [dataTypes];\n  } else if (optionCoerceTypes === 'array' && dataTypes === 'array') {\n    return ['array'];\n  }\n}\n\n\nfunction toHash(arr) {\n  var hash = {};\n  for (var i=0; i<arr.length; i++) hash[arr[i]] = true;\n  return hash;\n}\n\n\nvar IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nvar SINGLE_QUOTE = /'|\\\\/g;\nfunction getProperty(key) {\n  return typeof key == 'number'\n          ? '[' + key + ']'\n          : IDENTIFIER.test(key)\n            ? '.' + key\n            : \"['\" + escapeQuotes(key) + \"']\";\n}\n\n\nfunction escapeQuotes(str) {\n  return str.replace(SINGLE_QUOTE, '\\\\$&')\n            .replace(/\\n/g, '\\\\n')\n            .replace(/\\r/g, '\\\\r')\n            .replace(/\\f/g, '\\\\f')\n            .replace(/\\t/g, '\\\\t');\n}\n\n\nfunction varOccurences(str, dataVar) {\n  dataVar += '[^0-9]';\n  var matches = str.match(new RegExp(dataVar, 'g'));\n  return matches ? matches.length : 0;\n}\n\n\nfunction varReplace(str, dataVar, expr) {\n  dataVar += '([^0-9])';\n  expr = expr.replace(/\\$/g, '$$$$');\n  return str.replace(new RegExp(dataVar, 'g'), expr + '$1');\n}\n\n\nfunction schemaHasRules(schema, rules) {\n  if (typeof schema == 'boolean') return !schema;\n  for (var key in schema) if (rules[key]) return true;\n}\n\n\nfunction schemaHasRulesExcept(schema, rules, exceptKeyword) {\n  if (typeof schema == 'boolean') return !schema && exceptKeyword != 'not';\n  for (var key in schema) if (key != exceptKeyword && rules[key]) return true;\n}\n\n\nfunction schemaUnknownRules(schema, rules) {\n  if (typeof schema == 'boolean') return;\n  for (var key in schema) if (!rules[key]) return key;\n}\n\n\nfunction toQuotedString(str) {\n  return '\\'' + escapeQuotes(str) + '\\'';\n}\n\n\nfunction getPathExpr(currentPath, expr, jsonPointers, isNumber) {\n  var path = jsonPointers // false by default\n              ? '\\'/\\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \\'~0\\').replace(/\\\\//g, \\'~1\\')')\n              : (isNumber ? '\\'[\\' + ' + expr + ' + \\']\\'' : '\\'[\\\\\\'\\' + ' + expr + ' + \\'\\\\\\']\\'');\n  return joinPaths(currentPath, path);\n}\n\n\nfunction getPath(currentPath, prop, jsonPointers) {\n  var path = jsonPointers // false by default\n              ? toQuotedString('/' + escapeJsonPointer(prop))\n              : toQuotedString(getProperty(prop));\n  return joinPaths(currentPath, path);\n}\n\n\nvar JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nvar RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, lvl, paths) {\n  var up, jsonPointer, data, matches;\n  if ($data === '') return 'rootData';\n  if ($data[0] == '/') {\n    if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data);\n    jsonPointer = $data;\n    data = 'rootData';\n  } else {\n    matches = $data.match(RELATIVE_JSON_POINTER);\n    if (!matches) throw new Error('Invalid JSON-pointer: ' + $data);\n    up = +matches[1];\n    jsonPointer = matches[2];\n    if (jsonPointer == '#') {\n      if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\n      return paths[lvl - up];\n    }\n\n    if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\n    data = 'data' + ((lvl - up) || '');\n    if (!jsonPointer) return data;\n  }\n\n  var expr = data;\n  var segments = jsonPointer.split('/');\n  for (var i=0; i<segments.length; i++) {\n    var segment = segments[i];\n    if (segment) {\n      data += getProperty(unescapeJsonPointer(segment));\n      expr += ' && ' + data;\n    }\n  }\n  return expr;\n}\n\n\nfunction joinPaths (a, b) {\n  if (a == '\"\"') return b;\n  return (a + ' + ' + b).replace(/([^\\\\])' \\+ '/g, '$1');\n}\n\n\nfunction unescapeFragment(str) {\n  return unescapeJsonPointer(decodeURIComponent(str));\n}\n\n\nfunction escapeFragment(str) {\n  return encodeURIComponent(escapeJsonPointer(str));\n}\n\n\nfunction escapeJsonPointer(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\n\nfunction unescapeJsonPointer(str) {\n  return str.replace(/~1/g, '/').replace(/~0/g, '~');\n}\n","'use strict';\n\nvar util = require('./util');\n\nmodule.exports = SchemaObject;\n\nfunction SchemaObject(obj) {\n  util.copy(obj, this);\n}\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n  // Legacy support for v0.3.1 and earlier.\n  if (typeof opts == 'function') {\n    cb = opts;\n    opts = {};\n  }\n\n  cb = opts.cb || cb;\n  var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n  var post = cb.post || function() {};\n\n  _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n  additionalItems: true,\n  items: true,\n  contains: true,\n  additionalProperties: true,\n  propertyNames: true,\n  not: true\n};\n\ntraverse.arrayKeywords = {\n  items: true,\n  allOf: true,\n  anyOf: true,\n  oneOf: true\n};\n\ntraverse.propsKeywords = {\n  definitions: true,\n  properties: true,\n  patternProperties: true,\n  dependencies: true\n};\n\ntraverse.skipKeywords = {\n  default: true,\n  enum: true,\n  const: true,\n  required: true,\n  maximum: true,\n  minimum: true,\n  exclusiveMaximum: true,\n  exclusiveMinimum: true,\n  multipleOf: true,\n  maxLength: true,\n  minLength: true,\n  pattern: true,\n  format: true,\n  maxItems: true,\n  minItems: true,\n  uniqueItems: true,\n  maxProperties: true,\n  minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n    pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n    for (var key in schema) {\n      var sch = schema[key];\n      if (Array.isArray(sch)) {\n        if (key in traverse.arrayKeywords) {\n          for (var i=0; i<sch.length; i++)\n            _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n        }\n      } else if (key in traverse.propsKeywords) {\n        if (sch && typeof sch == 'object') {\n          for (var prop in sch)\n            _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n        }\n      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n        _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n      }\n    }\n    post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n  }\n}\n\n\nfunction escapeJsonPtr(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n","'use strict';\n\nvar URI = require('uri-js')\n  , equal = require('fast-deep-equal')\n  , util = require('./util')\n  , SchemaObject = require('./schema_obj')\n  , traverse = require('json-schema-traverse');\n\nmodule.exports = resolve;\n\nresolve.normalizeId = normalizeId;\nresolve.fullPath = getFullPath;\nresolve.url = resolveUrl;\nresolve.ids = resolveIds;\nresolve.inlineRef = inlineRef;\nresolve.schema = resolveSchema;\n\n/**\n * [resolve and compile the references ($ref)]\n * @this   Ajv\n * @param  {Function} compile reference to schema compilation funciton (localCompile)\n * @param  {Object} root object with information about the root schema for the current schema\n * @param  {String} ref reference to resolve\n * @return {Object|Function} schema object (if the schema can be inlined) or validation function\n */\nfunction resolve(compile, root, ref) {\n  /* jshint validthis: true */\n  var refVal = this._refs[ref];\n  if (typeof refVal == 'string') {\n    if (this._refs[refVal]) refVal = this._refs[refVal];\n    else return resolve.call(this, compile, root, refVal);\n  }\n\n  refVal = refVal || this._schemas[ref];\n  if (refVal instanceof SchemaObject) {\n    return inlineRef(refVal.schema, this._opts.inlineRefs)\n            ? refVal.schema\n            : refVal.validate || this._compile(refVal);\n  }\n\n  var res = resolveSchema.call(this, root, ref);\n  var schema, v, baseId;\n  if (res) {\n    schema = res.schema;\n    root = res.root;\n    baseId = res.baseId;\n  }\n\n  if (schema instanceof SchemaObject) {\n    v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId);\n  } else if (schema !== undefined) {\n    v = inlineRef(schema, this._opts.inlineRefs)\n        ? schema\n        : compile.call(this, schema, root, undefined, baseId);\n  }\n\n  return v;\n}\n\n\n/**\n * Resolve schema, its root and baseId\n * @this Ajv\n * @param  {Object} root root object with properties schema, refVal, refs\n * @param  {String} ref  reference to resolve\n * @return {Object} object with properties schema, root, baseId\n */\nfunction resolveSchema(root, ref) {\n  /* jshint validthis: true */\n  var p = URI.parse(ref)\n    , refPath = _getFullPath(p)\n    , baseId = getFullPath(this._getId(root.schema));\n  if (Object.keys(root.schema).length === 0 || refPath !== baseId) {\n    var id = normalizeId(refPath);\n    var refVal = this._refs[id];\n    if (typeof refVal == 'string') {\n      return resolveRecursive.call(this, root, refVal, p);\n    } else if (refVal instanceof SchemaObject) {\n      if (!refVal.validate) this._compile(refVal);\n      root = refVal;\n    } else {\n      refVal = this._schemas[id];\n      if (refVal instanceof SchemaObject) {\n        if (!refVal.validate) this._compile(refVal);\n        if (id == normalizeId(ref))\n          return { schema: refVal, root: root, baseId: baseId };\n        root = refVal;\n      } else {\n        return;\n      }\n    }\n    if (!root.schema) return;\n    baseId = getFullPath(this._getId(root.schema));\n  }\n  return getJsonPointer.call(this, p, baseId, root.schema, root);\n}\n\n\n/* @this Ajv */\nfunction resolveRecursive(root, ref, parsedRef) {\n  /* jshint validthis: true */\n  var res = resolveSchema.call(this, root, ref);\n  if (res) {\n    var schema = res.schema;\n    var baseId = res.baseId;\n    root = res.root;\n    var id = this._getId(schema);\n    if (id) baseId = resolveUrl(baseId, id);\n    return getJsonPointer.call(this, parsedRef, baseId, schema, root);\n  }\n}\n\n\nvar PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']);\n/* @this Ajv */\nfunction getJsonPointer(parsedRef, baseId, schema, root) {\n  /* jshint validthis: true */\n  parsedRef.fragment = parsedRef.fragment || '';\n  if (parsedRef.fragment.slice(0,1) != '/') return;\n  var parts = parsedRef.fragment.split('/');\n\n  for (var i = 1; i < parts.length; i++) {\n    var part = parts[i];\n    if (part) {\n      part = util.unescapeFragment(part);\n      schema = schema[part];\n      if (schema === undefined) break;\n      var id;\n      if (!PREVENT_SCOPE_CHANGE[part]) {\n        id = this._getId(schema);\n        if (id) baseId = resolveUrl(baseId, id);\n        if (schema.$ref) {\n          var $ref = resolveUrl(baseId, schema.$ref);\n          var res = resolveSchema.call(this, root, $ref);\n          if (res) {\n            schema = res.schema;\n            root = res.root;\n            baseId = res.baseId;\n          }\n        }\n      }\n    }\n  }\n  if (schema !== undefined && schema !== root.schema)\n    return { schema: schema, root: root, baseId: baseId };\n}\n\n\nvar SIMPLE_INLINED = util.toHash([\n  'type', 'format', 'pattern',\n  'maxLength', 'minLength',\n  'maxProperties', 'minProperties',\n  'maxItems', 'minItems',\n  'maximum', 'minimum',\n  'uniqueItems', 'multipleOf',\n  'required', 'enum'\n]);\nfunction inlineRef(schema, limit) {\n  if (limit === false) return false;\n  if (limit === undefined || limit === true) return checkNoRef(schema);\n  else if (limit) return countKeys(schema) <= limit;\n}\n\n\nfunction checkNoRef(schema) {\n  var item;\n  if (Array.isArray(schema)) {\n    for (var i=0; i<schema.length; i++) {\n      item = schema[i];\n      if (typeof item == 'object' && !checkNoRef(item)) return false;\n    }\n  } else {\n    for (var key in schema) {\n      if (key == '$ref') return false;\n      item = schema[key];\n      if (typeof item == 'object' && !checkNoRef(item)) return false;\n    }\n  }\n  return true;\n}\n\n\nfunction countKeys(schema) {\n  var count = 0, item;\n  if (Array.isArray(schema)) {\n    for (var i=0; i<schema.length; i++) {\n      item = schema[i];\n      if (typeof item == 'object') count += countKeys(item);\n      if (count == Infinity) return Infinity;\n    }\n  } else {\n    for (var key in schema) {\n      if (key == '$ref') return Infinity;\n      if (SIMPLE_INLINED[key]) {\n        count++;\n      } else {\n        item = schema[key];\n        if (typeof item == 'object') count += countKeys(item) + 1;\n        if (count == Infinity) return Infinity;\n      }\n    }\n  }\n  return count;\n}\n\n\nfunction getFullPath(id, normalize) {\n  if (normalize !== false) id = normalizeId(id);\n  var p = URI.parse(id);\n  return _getFullPath(p);\n}\n\n\nfunction _getFullPath(p) {\n  return URI.serialize(p).split('#')[0] + '#';\n}\n\n\nvar TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n  return id ? id.replace(TRAILING_SLASH_HASH, '') : '';\n}\n\n\nfunction resolveUrl(baseId, id) {\n  id = normalizeId(id);\n  return URI.resolve(baseId, id);\n}\n\n\n/* @this Ajv */\nfunction resolveIds(schema) {\n  var schemaId = normalizeId(this._getId(schema));\n  var baseIds = {'': schemaId};\n  var fullPaths = {'': getFullPath(schemaId, false)};\n  var localRefs = {};\n  var self = this;\n\n  traverse(schema, {allKeys: true}, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n    if (jsonPtr === '') return;\n    var id = self._getId(sch);\n    var baseId = baseIds[parentJsonPtr];\n    var fullPath = fullPaths[parentJsonPtr] + '/' + parentKeyword;\n    if (keyIndex !== undefined)\n      fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex));\n\n    if (typeof id == 'string') {\n      id = baseId = normalizeId(baseId ? URI.resolve(baseId, id) : id);\n\n      var refVal = self._refs[id];\n      if (typeof refVal == 'string') refVal = self._refs[refVal];\n      if (refVal && refVal.schema) {\n        if (!equal(sch, refVal.schema))\n          throw new Error('id \"' + id + '\" resolves to more than one schema');\n      } else if (id != normalizeId(fullPath)) {\n        if (id[0] == '#') {\n          if (localRefs[id] && !equal(sch, localRefs[id]))\n            throw new Error('id \"' + id + '\" resolves to more than one schema');\n          localRefs[id] = sch;\n        } else {\n          self._refs[id] = fullPath;\n        }\n      }\n    }\n    baseIds[jsonPtr] = baseId;\n    fullPaths[jsonPtr] = fullPath;\n  });\n\n  return localRefs;\n}\n","'use strict';\n\nvar resolve = require('./resolve');\n\nmodule.exports = {\n  Validation: errorSubclass(ValidationError),\n  MissingRef: errorSubclass(MissingRefError)\n};\n\n\nfunction ValidationError(errors) {\n  this.message = 'validation failed';\n  this.errors = errors;\n  this.ajv = this.validation = true;\n}\n\n\nMissingRefError.message = function (baseId, ref) {\n  return 'can\\'t resolve reference ' + ref + ' from id ' + baseId;\n};\n\n\nfunction MissingRefError(baseId, ref, message) {\n  this.message = message || MissingRefError.message(baseId, ref);\n  this.missingRef = resolve.url(baseId, ref);\n  this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef));\n}\n\n\nfunction errorSubclass(Subclass) {\n  Subclass.prototype = Object.create(Error.prototype);\n  Subclass.prototype.constructor = Subclass;\n  return Subclass;\n}\n","'use strict';\n\nmodule.exports = function (data, opts) {\n    if (!opts) opts = {};\n    if (typeof opts === 'function') opts = { cmp: opts };\n    var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n    var cmp = opts.cmp && (function (f) {\n        return function (node) {\n            return function (a, b) {\n                var aobj = { key: a, value: node[a] };\n                var bobj = { key: b, value: node[b] };\n                return f(aobj, bobj);\n            };\n        };\n    })(opts.cmp);\n\n    var seen = [];\n    return (function stringify (node) {\n        if (node && node.toJSON && typeof node.toJSON === 'function') {\n            node = node.toJSON();\n        }\n\n        if (node === undefined) return;\n        if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n        if (typeof node !== 'object') return JSON.stringify(node);\n\n        var i, out;\n        if (Array.isArray(node)) {\n            out = '[';\n            for (i = 0; i < node.length; i++) {\n                if (i) out += ',';\n                out += stringify(node[i]) || 'null';\n            }\n            return out + ']';\n        }\n\n        if (node === null) return 'null';\n\n        if (seen.indexOf(node) !== -1) {\n            if (cycles) return JSON.stringify('__cycle__');\n            throw new TypeError('Converting circular structure to JSON');\n        }\n\n        var seenIndex = seen.push(node) - 1;\n        var keys = Object.keys(node).sort(cmp && cmp(node));\n        out = '';\n        for (i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var value = stringify(node[key]);\n\n            if (!value) continue;\n            if (out) out += ',';\n            out += JSON.stringify(key) + ':' + value;\n        }\n        seen.splice(seenIndex, 1);\n        return '{' + out + '}';\n    })(data);\n};\n","'use strict';\nmodule.exports = function generate_validate(it, $keyword, $ruleType) {\n  var out = '';\n  var $async = it.schema.$async === true,\n    $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'),\n    $id = it.self._getId(it.schema);\n  if (it.opts.strictKeywords) {\n    var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords);\n    if ($unknownKwd) {\n      var $keywordsMsg = 'unknown keyword: ' + $unknownKwd;\n      if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg);\n      else throw new Error($keywordsMsg);\n    }\n  }\n  if (it.isTop) {\n    out += ' var validate = ';\n    if ($async) {\n      it.async = true;\n      out += 'async ';\n    }\n    out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \\'use strict\\'; ';\n    if ($id && (it.opts.sourceCode || it.opts.processCode)) {\n      out += ' ' + ('/\\*# sourceURL=' + $id + ' */') + ' ';\n    }\n  }\n  if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) {\n    var $keyword = 'false schema';\n    var $lvl = it.level;\n    var $dataLvl = it.dataLevel;\n    var $schema = it.schema[$keyword];\n    var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n    var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n    var $breakOnError = !it.opts.allErrors;\n    var $errorKeyword;\n    var $data = 'data' + ($dataLvl || '');\n    var $valid = 'valid' + $lvl;\n    if (it.schema === false) {\n      if (it.isTop) {\n        $breakOnError = true;\n      } else {\n        out += ' var ' + ($valid) + ' = false; ';\n      }\n      var $$outStack = $$outStack || [];\n      $$outStack.push(out);\n      out = ''; /* istanbul ignore else */\n      if (it.createErrors !== false) {\n        out += ' { keyword: \\'' + ($errorKeyword || 'false schema') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n        if (it.opts.messages !== false) {\n          out += ' , message: \\'boolean schema is false\\' ';\n        }\n        if (it.opts.verbose) {\n          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n        }\n        out += ' } ';\n      } else {\n        out += ' {} ';\n      }\n      var __err = out;\n      out = $$outStack.pop();\n      if (!it.compositeRule && $breakOnError) {\n        /* istanbul ignore if */\n        if (it.async) {\n          out += ' throw new ValidationError([' + (__err) + ']); ';\n        } else {\n          out += ' validate.errors = [' + (__err) + ']; return false; ';\n        }\n      } else {\n        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n      }\n    } else {\n      if (it.isTop) {\n        if ($async) {\n          out += ' return data; ';\n        } else {\n          out += ' validate.errors = null; return true; ';\n        }\n      } else {\n        out += ' var ' + ($valid) + ' = true; ';\n      }\n    }\n    if (it.isTop) {\n      out += ' }; return validate; ';\n    }\n    return out;\n  }\n  if (it.isTop) {\n    var $top = it.isTop,\n      $lvl = it.level = 0,\n      $dataLvl = it.dataLevel = 0,\n      $data = 'data';\n    it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));\n    it.baseId = it.baseId || it.rootId;\n    delete it.isTop;\n    it.dataPathArr = [\"\"];\n    if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) {\n      var $defaultMsg = 'default is ignored in the schema root';\n      if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n      else throw new Error($defaultMsg);\n    }\n    out += ' var vErrors = null; ';\n    out += ' var errors = 0;     ';\n    out += ' if (rootData === undefined) rootData = data; ';\n  } else {\n    var $lvl = it.level,\n      $dataLvl = it.dataLevel,\n      $data = 'data' + ($dataLvl || '');\n    if ($id) it.baseId = it.resolve.url(it.baseId, $id);\n    if ($async && !it.async) throw new Error('async schema in sync schema');\n    out += ' var errs_' + ($lvl) + ' = errors;';\n  }\n  var $valid = 'valid' + $lvl,\n    $breakOnError = !it.opts.allErrors,\n    $closingBraces1 = '',\n    $closingBraces2 = '';\n  var $errorKeyword;\n  var $typeSchema = it.schema.type,\n    $typeIsArray = Array.isArray($typeSchema);\n  if ($typeSchema && it.opts.nullable && it.schema.nullable === true) {\n    if ($typeIsArray) {\n      if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null');\n    } else if ($typeSchema != 'null') {\n      $typeSchema = [$typeSchema, 'null'];\n      $typeIsArray = true;\n    }\n  }\n  if ($typeIsArray && $typeSchema.length == 1) {\n    $typeSchema = $typeSchema[0];\n    $typeIsArray = false;\n  }\n  if (it.schema.$ref && $refKeywords) {\n    if (it.opts.extendRefs == 'fail') {\n      throw new Error('$ref: validation keywords used in schema at path \"' + it.errSchemaPath + '\" (see option extendRefs)');\n    } else if (it.opts.extendRefs !== true) {\n      $refKeywords = false;\n      it.logger.warn('$ref: keywords ignored in schema at path \"' + it.errSchemaPath + '\"');\n    }\n  }\n  if (it.schema.$comment && it.opts.$comment) {\n    out += ' ' + (it.RULES.all.$comment.code(it, '$comment'));\n  }\n  if ($typeSchema) {\n    if (it.opts.coerceTypes) {\n      var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema);\n    }\n    var $rulesGroup = it.RULES.types[$typeSchema];\n    if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) {\n      var $schemaPath = it.schemaPath + '.type',\n        $errSchemaPath = it.errSchemaPath + '/type';\n      var $schemaPath = it.schemaPath + '.type',\n        $errSchemaPath = it.errSchemaPath + '/type',\n        $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';\n      out += ' if (' + (it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true)) + ') { ';\n      if ($coerceToTypes) {\n        var $dataType = 'dataType' + $lvl,\n          $coerced = 'coerced' + $lvl;\n        out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; var ' + ($coerced) + ' = undefined; ';\n        if (it.opts.coerceTypes == 'array') {\n          out += ' if (' + ($dataType) + ' == \\'object\\' && Array.isArray(' + ($data) + ') && ' + ($data) + '.length == 1) { ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; if (' + (it.util.checkDataType(it.schema.type, $data, it.opts.strictNumbers)) + ') ' + ($coerced) + ' = ' + ($data) + '; } ';\n        }\n        out += ' if (' + ($coerced) + ' !== undefined) ; ';\n        var arr1 = $coerceToTypes;\n        if (arr1) {\n          var $type, $i = -1,\n            l1 = arr1.length - 1;\n          while ($i < l1) {\n            $type = arr1[$i += 1];\n            if ($type == 'string') {\n              out += ' else if (' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\') ' + ($coerced) + ' = \\'\\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \\'\\'; ';\n            } else if ($type == 'number' || $type == 'integer') {\n              out += ' else if (' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \\'string\\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';\n              if ($type == 'integer') {\n                out += ' && !(' + ($data) + ' % 1)';\n              }\n              out += ')) ' + ($coerced) + ' = +' + ($data) + '; ';\n            } else if ($type == 'boolean') {\n              out += ' else if (' + ($data) + ' === \\'false\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \\'true\\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';\n            } else if ($type == 'null') {\n              out += ' else if (' + ($data) + ' === \\'\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';\n            } else if (it.opts.coerceTypes == 'array' && $type == 'array') {\n              out += ' else if (' + ($dataType) + ' == \\'string\\' || ' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; ';\n            }\n          }\n        }\n        out += ' else {   ';\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n          if ($typeIsArray) {\n            out += '' + ($typeSchema.join(\",\"));\n          } else {\n            out += '' + ($typeSchema);\n          }\n          out += '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'should be ';\n            if ($typeIsArray) {\n              out += '' + ($typeSchema.join(\",\"));\n            } else {\n              out += '' + ($typeSchema);\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        out += ' } if (' + ($coerced) + ' !== undefined) {  ';\n        var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n          $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n        out += ' ' + ($data) + ' = ' + ($coerced) + '; ';\n        if (!$dataLvl) {\n          out += 'if (' + ($parentData) + ' !== undefined)';\n        }\n        out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } ';\n      } else {\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n          if ($typeIsArray) {\n            out += '' + ($typeSchema.join(\",\"));\n          } else {\n            out += '' + ($typeSchema);\n          }\n          out += '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'should be ';\n            if ($typeIsArray) {\n              out += '' + ($typeSchema.join(\",\"));\n            } else {\n              out += '' + ($typeSchema);\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n      }\n      out += ' } ';\n    }\n  }\n  if (it.schema.$ref && !$refKeywords) {\n    out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' ';\n    if ($breakOnError) {\n      out += ' } if (errors === ';\n      if ($top) {\n        out += '0';\n      } else {\n        out += 'errs_' + ($lvl);\n      }\n      out += ') { ';\n      $closingBraces2 += '}';\n    }\n  } else {\n    var arr2 = it.RULES;\n    if (arr2) {\n      var $rulesGroup, i2 = -1,\n        l2 = arr2.length - 1;\n      while (i2 < l2) {\n        $rulesGroup = arr2[i2 += 1];\n        if ($shouldUseGroup($rulesGroup)) {\n          if ($rulesGroup.type) {\n            out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers)) + ') { ';\n          }\n          if (it.opts.useDefaults) {\n            if ($rulesGroup.type == 'object' && it.schema.properties) {\n              var $schema = it.schema.properties,\n                $schemaKeys = Object.keys($schema);\n              var arr3 = $schemaKeys;\n              if (arr3) {\n                var $propertyKey, i3 = -1,\n                  l3 = arr3.length - 1;\n                while (i3 < l3) {\n                  $propertyKey = arr3[i3 += 1];\n                  var $sch = $schema[$propertyKey];\n                  if ($sch.default !== undefined) {\n                    var $passData = $data + it.util.getProperty($propertyKey);\n                    if (it.compositeRule) {\n                      if (it.opts.strictDefaults) {\n                        var $defaultMsg = 'default is ignored for: ' + $passData;\n                        if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n                        else throw new Error($defaultMsg);\n                      }\n                    } else {\n                      out += ' if (' + ($passData) + ' === undefined ';\n                      if (it.opts.useDefaults == 'empty') {\n                        out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n                      }\n                      out += ' ) ' + ($passData) + ' = ';\n                      if (it.opts.useDefaults == 'shared') {\n                        out += ' ' + (it.useDefault($sch.default)) + ' ';\n                      } else {\n                        out += ' ' + (JSON.stringify($sch.default)) + ' ';\n                      }\n                      out += '; ';\n                    }\n                  }\n                }\n              }\n            } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) {\n              var arr4 = it.schema.items;\n              if (arr4) {\n                var $sch, $i = -1,\n                  l4 = arr4.length - 1;\n                while ($i < l4) {\n                  $sch = arr4[$i += 1];\n                  if ($sch.default !== undefined) {\n                    var $passData = $data + '[' + $i + ']';\n                    if (it.compositeRule) {\n                      if (it.opts.strictDefaults) {\n                        var $defaultMsg = 'default is ignored for: ' + $passData;\n                        if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n                        else throw new Error($defaultMsg);\n                      }\n                    } else {\n                      out += ' if (' + ($passData) + ' === undefined ';\n                      if (it.opts.useDefaults == 'empty') {\n                        out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n                      }\n                      out += ' ) ' + ($passData) + ' = ';\n                      if (it.opts.useDefaults == 'shared') {\n                        out += ' ' + (it.useDefault($sch.default)) + ' ';\n                      } else {\n                        out += ' ' + (JSON.stringify($sch.default)) + ' ';\n                      }\n                      out += '; ';\n                    }\n                  }\n                }\n              }\n            }\n          }\n          var arr5 = $rulesGroup.rules;\n          if (arr5) {\n            var $rule, i5 = -1,\n              l5 = arr5.length - 1;\n            while (i5 < l5) {\n              $rule = arr5[i5 += 1];\n              if ($shouldUseRule($rule)) {\n                var $code = $rule.code(it, $rule.keyword, $rulesGroup.type);\n                if ($code) {\n                  out += ' ' + ($code) + ' ';\n                  if ($breakOnError) {\n                    $closingBraces1 += '}';\n                  }\n                }\n              }\n            }\n          }\n          if ($breakOnError) {\n            out += ' ' + ($closingBraces1) + ' ';\n            $closingBraces1 = '';\n          }\n          if ($rulesGroup.type) {\n            out += ' } ';\n            if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) {\n              out += ' else { ';\n              var $schemaPath = it.schemaPath + '.type',\n                $errSchemaPath = it.errSchemaPath + '/type';\n              var $$outStack = $$outStack || [];\n              $$outStack.push(out);\n              out = ''; /* istanbul ignore else */\n              if (it.createErrors !== false) {\n                out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n                if ($typeIsArray) {\n                  out += '' + ($typeSchema.join(\",\"));\n                } else {\n                  out += '' + ($typeSchema);\n                }\n                out += '\\' } ';\n                if (it.opts.messages !== false) {\n                  out += ' , message: \\'should be ';\n                  if ($typeIsArray) {\n                    out += '' + ($typeSchema.join(\",\"));\n                  } else {\n                    out += '' + ($typeSchema);\n                  }\n                  out += '\\' ';\n                }\n                if (it.opts.verbose) {\n                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n                }\n                out += ' } ';\n              } else {\n                out += ' {} ';\n              }\n              var __err = out;\n              out = $$outStack.pop();\n              if (!it.compositeRule && $breakOnError) {\n                /* istanbul ignore if */\n                if (it.async) {\n                  out += ' throw new ValidationError([' + (__err) + ']); ';\n                } else {\n                  out += ' validate.errors = [' + (__err) + ']; return false; ';\n                }\n              } else {\n                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n              }\n              out += ' } ';\n            }\n          }\n          if ($breakOnError) {\n            out += ' if (errors === ';\n            if ($top) {\n              out += '0';\n            } else {\n              out += 'errs_' + ($lvl);\n            }\n            out += ') { ';\n            $closingBraces2 += '}';\n          }\n        }\n      }\n    }\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces2) + ' ';\n  }\n  if ($top) {\n    if ($async) {\n      out += ' if (errors === 0) return data;           ';\n      out += ' else throw new ValidationError(vErrors); ';\n    } else {\n      out += ' validate.errors = vErrors; ';\n      out += ' return errors === 0;       ';\n    }\n    out += ' }; return validate;';\n  } else {\n    out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';';\n  }\n\n  function $shouldUseGroup($rulesGroup) {\n    var rules = $rulesGroup.rules;\n    for (var i = 0; i < rules.length; i++)\n      if ($shouldUseRule(rules[i])) return true;\n  }\n\n  function $shouldUseRule($rule) {\n    return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule));\n  }\n\n  function $ruleImplementsSomeKeyword($rule) {\n    var impl = $rule.implements;\n    for (var i = 0; i < impl.length; i++)\n      if (it.schema[impl[i]] !== undefined) return true;\n  }\n  return out;\n}\n","'use strict';\n\nvar resolve = require('./resolve')\n  , util = require('./util')\n  , errorClasses = require('./error_classes')\n  , stableStringify = require('fast-json-stable-stringify');\n\nvar validateGenerator = require('../dotjs/validate');\n\n/**\n * Functions below are used inside compiled validations function\n */\n\nvar ucs2length = util.ucs2length;\nvar equal = require('fast-deep-equal');\n\n// this error is thrown by async schemas to return validation errors via exception\nvar ValidationError = errorClasses.Validation;\n\nmodule.exports = compile;\n\n\n/**\n * Compiles schema to validation function\n * @this   Ajv\n * @param  {Object} schema schema object\n * @param  {Object} root object with information about the root schema for this schema\n * @param  {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution\n * @param  {String} baseId base ID for IDs in the schema\n * @return {Function} validation function\n */\nfunction compile(schema, root, localRefs, baseId) {\n  /* jshint validthis: true, evil: true */\n  /* eslint no-shadow: 0 */\n  var self = this\n    , opts = this._opts\n    , refVal = [ undefined ]\n    , refs = {}\n    , patterns = []\n    , patternsHash = {}\n    , defaults = []\n    , defaultsHash = {}\n    , customRules = [];\n\n  root = root || { schema: schema, refVal: refVal, refs: refs };\n\n  var c = checkCompiling.call(this, schema, root, baseId);\n  var compilation = this._compilations[c.index];\n  if (c.compiling) return (compilation.callValidate = callValidate);\n\n  var formats = this._formats;\n  var RULES = this.RULES;\n\n  try {\n    var v = localCompile(schema, root, localRefs, baseId);\n    compilation.validate = v;\n    var cv = compilation.callValidate;\n    if (cv) {\n      cv.schema = v.schema;\n      cv.errors = null;\n      cv.refs = v.refs;\n      cv.refVal = v.refVal;\n      cv.root = v.root;\n      cv.$async = v.$async;\n      if (opts.sourceCode) cv.source = v.source;\n    }\n    return v;\n  } finally {\n    endCompiling.call(this, schema, root, baseId);\n  }\n\n  /* @this   {*} - custom context, see passContext option */\n  function callValidate() {\n    /* jshint validthis: true */\n    var validate = compilation.validate;\n    var result = validate.apply(this, arguments);\n    callValidate.errors = validate.errors;\n    return result;\n  }\n\n  function localCompile(_schema, _root, localRefs, baseId) {\n    var isRoot = !_root || (_root && _root.schema == _schema);\n    if (_root.schema != root.schema)\n      return compile.call(self, _schema, _root, localRefs, baseId);\n\n    var $async = _schema.$async === true;\n\n    var sourceCode = validateGenerator({\n      isTop: true,\n      schema: _schema,\n      isRoot: isRoot,\n      baseId: baseId,\n      root: _root,\n      schemaPath: '',\n      errSchemaPath: '#',\n      errorPath: '\"\"',\n      MissingRefError: errorClasses.MissingRef,\n      RULES: RULES,\n      validate: validateGenerator,\n      util: util,\n      resolve: resolve,\n      resolveRef: resolveRef,\n      usePattern: usePattern,\n      useDefault: useDefault,\n      useCustomRule: useCustomRule,\n      opts: opts,\n      formats: formats,\n      logger: self.logger,\n      self: self\n    });\n\n    sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode)\n                   + vars(defaults, defaultCode) + vars(customRules, customRuleCode)\n                   + sourceCode;\n\n    if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema);\n    // console.log('\\n\\n\\n *** \\n', JSON.stringify(sourceCode));\n    var validate;\n    try {\n      var makeValidate = new Function(\n        'self',\n        'RULES',\n        'formats',\n        'root',\n        'refVal',\n        'defaults',\n        'customRules',\n        'equal',\n        'ucs2length',\n        'ValidationError',\n        sourceCode\n      );\n\n      validate = makeValidate(\n        self,\n        RULES,\n        formats,\n        root,\n        refVal,\n        defaults,\n        customRules,\n        equal,\n        ucs2length,\n        ValidationError\n      );\n\n      refVal[0] = validate;\n    } catch(e) {\n      self.logger.error('Error compiling schema, function code:', sourceCode);\n      throw e;\n    }\n\n    validate.schema = _schema;\n    validate.errors = null;\n    validate.refs = refs;\n    validate.refVal = refVal;\n    validate.root = isRoot ? validate : _root;\n    if ($async) validate.$async = true;\n    if (opts.sourceCode === true) {\n      validate.source = {\n        code: sourceCode,\n        patterns: patterns,\n        defaults: defaults\n      };\n    }\n\n    return validate;\n  }\n\n  function resolveRef(baseId, ref, isRoot) {\n    ref = resolve.url(baseId, ref);\n    var refIndex = refs[ref];\n    var _refVal, refCode;\n    if (refIndex !== undefined) {\n      _refVal = refVal[refIndex];\n      refCode = 'refVal[' + refIndex + ']';\n      return resolvedRef(_refVal, refCode);\n    }\n    if (!isRoot && root.refs) {\n      var rootRefId = root.refs[ref];\n      if (rootRefId !== undefined) {\n        _refVal = root.refVal[rootRefId];\n        refCode = addLocalRef(ref, _refVal);\n        return resolvedRef(_refVal, refCode);\n      }\n    }\n\n    refCode = addLocalRef(ref);\n    var v = resolve.call(self, localCompile, root, ref);\n    if (v === undefined) {\n      var localSchema = localRefs && localRefs[ref];\n      if (localSchema) {\n        v = resolve.inlineRef(localSchema, opts.inlineRefs)\n            ? localSchema\n            : compile.call(self, localSchema, root, localRefs, baseId);\n      }\n    }\n\n    if (v === undefined) {\n      removeLocalRef(ref);\n    } else {\n      replaceLocalRef(ref, v);\n      return resolvedRef(v, refCode);\n    }\n  }\n\n  function addLocalRef(ref, v) {\n    var refId = refVal.length;\n    refVal[refId] = v;\n    refs[ref] = refId;\n    return 'refVal' + refId;\n  }\n\n  function removeLocalRef(ref) {\n    delete refs[ref];\n  }\n\n  function replaceLocalRef(ref, v) {\n    var refId = refs[ref];\n    refVal[refId] = v;\n  }\n\n  function resolvedRef(refVal, code) {\n    return typeof refVal == 'object' || typeof refVal == 'boolean'\n            ? { code: code, schema: refVal, inline: true }\n            : { code: code, $async: refVal && !!refVal.$async };\n  }\n\n  function usePattern(regexStr) {\n    var index = patternsHash[regexStr];\n    if (index === undefined) {\n      index = patternsHash[regexStr] = patterns.length;\n      patterns[index] = regexStr;\n    }\n    return 'pattern' + index;\n  }\n\n  function useDefault(value) {\n    switch (typeof value) {\n      case 'boolean':\n      case 'number':\n        return '' + value;\n      case 'string':\n        return util.toQuotedString(value);\n      case 'object':\n        if (value === null) return 'null';\n        var valueStr = stableStringify(value);\n        var index = defaultsHash[valueStr];\n        if (index === undefined) {\n          index = defaultsHash[valueStr] = defaults.length;\n          defaults[index] = value;\n        }\n        return 'default' + index;\n    }\n  }\n\n  function useCustomRule(rule, schema, parentSchema, it) {\n    if (self._opts.validateSchema !== false) {\n      var deps = rule.definition.dependencies;\n      if (deps && !deps.every(function(keyword) {\n        return Object.prototype.hasOwnProperty.call(parentSchema, keyword);\n      }))\n        throw new Error('parent schema must have all required keywords: ' + deps.join(','));\n\n      var validateSchema = rule.definition.validateSchema;\n      if (validateSchema) {\n        var valid = validateSchema(schema);\n        if (!valid) {\n          var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors);\n          if (self._opts.validateSchema == 'log') self.logger.error(message);\n          else throw new Error(message);\n        }\n      }\n    }\n\n    var compile = rule.definition.compile\n      , inline = rule.definition.inline\n      , macro = rule.definition.macro;\n\n    var validate;\n    if (compile) {\n      validate = compile.call(self, schema, parentSchema, it);\n    } else if (macro) {\n      validate = macro.call(self, schema, parentSchema, it);\n      if (opts.validateSchema !== false) self.validateSchema(validate, true);\n    } else if (inline) {\n      validate = inline.call(self, it, rule.keyword, schema, parentSchema);\n    } else {\n      validate = rule.definition.validate;\n      if (!validate) return;\n    }\n\n    if (validate === undefined)\n      throw new Error('custom keyword \"' + rule.keyword + '\"failed to compile');\n\n    var index = customRules.length;\n    customRules[index] = validate;\n\n    return {\n      code: 'customRule' + index,\n      validate: validate\n    };\n  }\n}\n\n\n/**\n * Checks if the schema is currently compiled\n * @this   Ajv\n * @param  {Object} schema schema to compile\n * @param  {Object} root root object\n * @param  {String} baseId base schema ID\n * @return {Object} object with properties \"index\" (compilation index) and \"compiling\" (boolean)\n */\nfunction checkCompiling(schema, root, baseId) {\n  /* jshint validthis: true */\n  var index = compIndex.call(this, schema, root, baseId);\n  if (index >= 0) return { index: index, compiling: true };\n  index = this._compilations.length;\n  this._compilations[index] = {\n    schema: schema,\n    root: root,\n    baseId: baseId\n  };\n  return { index: index, compiling: false };\n}\n\n\n/**\n * Removes the schema from the currently compiled list\n * @this   Ajv\n * @param  {Object} schema schema to compile\n * @param  {Object} root root object\n * @param  {String} baseId base schema ID\n */\nfunction endCompiling(schema, root, baseId) {\n  /* jshint validthis: true */\n  var i = compIndex.call(this, schema, root, baseId);\n  if (i >= 0) this._compilations.splice(i, 1);\n}\n\n\n/**\n * Index of schema compilation in the currently compiled list\n * @this   Ajv\n * @param  {Object} schema schema to compile\n * @param  {Object} root root object\n * @param  {String} baseId base schema ID\n * @return {Integer} compilation index\n */\nfunction compIndex(schema, root, baseId) {\n  /* jshint validthis: true */\n  for (var i=0; i<this._compilations.length; i++) {\n    var c = this._compilations[i];\n    if (c.schema == schema && c.root == root && c.baseId == baseId) return i;\n  }\n  return -1;\n}\n\n\nfunction patternCode(i, patterns) {\n  return 'var pattern' + i + ' = new RegExp(' + util.toQuotedString(patterns[i]) + ');';\n}\n\n\nfunction defaultCode(i) {\n  return 'var default' + i + ' = defaults[' + i + '];';\n}\n\n\nfunction refValCode(i, refVal) {\n  return refVal[i] === undefined ? '' : 'var refVal' + i + ' = refVal[' + i + '];';\n}\n\n\nfunction customRuleCode(i) {\n  return 'var customRule' + i + ' = customRules[' + i + '];';\n}\n\n\nfunction vars(arr, statement) {\n  if (!arr.length) return '';\n  var code = '';\n  for (var i=0; i<arr.length; i++)\n    code += statement(i, arr);\n  return code;\n}\n","'use strict';\n\n\nvar Cache = module.exports = function Cache() {\n  this._cache = {};\n};\n\n\nCache.prototype.put = function Cache_put(key, value) {\n  this._cache[key] = value;\n};\n\n\nCache.prototype.get = function Cache_get(key) {\n  return this._cache[key];\n};\n\n\nCache.prototype.del = function Cache_del(key) {\n  delete this._cache[key];\n};\n\n\nCache.prototype.clear = function Cache_clear() {\n  this._cache = {};\n};\n","'use strict';\n\nvar util = require('./util');\n\nvar DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/;\nvar DAYS = [0,31,28,31,30,31,30,31,31,30,31,30,31];\nvar TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d(?::?\\d\\d)?)?$/i;\nvar HOSTNAME = /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i;\nvar URI = /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\nvar URIREF = /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\n// uri-template: https://tools.ietf.org/html/rfc6570\nvar URITEMPLATE = /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i;\n// For the source: https://gist.github.com/dperini/729294\n// For test cases: https://mathiasbynens.be/demo/url-regex\n// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.\n// var URL = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-)*[a-z\\u{00a1}-\\u{ffff}0-9]+)(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-)*[a-z\\u{00a1}-\\u{ffff}0-9]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu;\nvar URL = /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i;\nvar UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\nvar JSON_POINTER = /^(?:\\/(?:[^~/]|~0|~1)*)*$/;\nvar JSON_POINTER_URI_FRAGMENT = /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;\nvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/;\n\n\nmodule.exports = formats;\n\nfunction formats(mode) {\n  mode = mode == 'full' ? 'full' : 'fast';\n  return util.copy(formats[mode]);\n}\n\n\nformats.fast = {\n  // date: http://tools.ietf.org/html/rfc3339#section-5.6\n  date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\n  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n  time: /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n  'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n  uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n  'uri-reference': /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n  'uri-template': URITEMPLATE,\n  url: URL,\n  // email (sources from jsen validator):\n  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\n  email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n  hostname: HOSTNAME,\n  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n  ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n  // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\n  ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n  regex: regex,\n  // uuid: http://tools.ietf.org/html/rfc4122\n  uuid: UUID,\n  // JSON-pointer: https://tools.ietf.org/html/rfc6901\n  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n  'json-pointer': JSON_POINTER,\n  'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n  // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n  'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nformats.full = {\n  date: date,\n  time: time,\n  'date-time': date_time,\n  uri: uri,\n  'uri-reference': URIREF,\n  'uri-template': URITEMPLATE,\n  url: URL,\n  email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n  hostname: HOSTNAME,\n  ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n  ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n  regex: regex,\n  uuid: UUID,\n  'json-pointer': JSON_POINTER,\n  'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n  'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nfunction isLeapYear(year) {\n  // https://tools.ietf.org/html/rfc3339#appendix-C\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n\nfunction date(str) {\n  // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n  var matches = str.match(DATE);\n  if (!matches) return false;\n\n  var year = +matches[1];\n  var month = +matches[2];\n  var day = +matches[3];\n\n  return month >= 1 && month <= 12 && day >= 1 &&\n          day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);\n}\n\n\nfunction time(str, full) {\n  var matches = str.match(TIME);\n  if (!matches) return false;\n\n  var hour = matches[1];\n  var minute = matches[2];\n  var second = matches[3];\n  var timeZone = matches[5];\n  return ((hour <= 23 && minute <= 59 && second <= 59) ||\n          (hour == 23 && minute == 59 && second == 60)) &&\n         (!full || timeZone);\n}\n\n\nvar DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction date_time(str) {\n  // http://tools.ietf.org/html/rfc3339#section-5.6\n  var dateTime = str.split(DATE_TIME_SEPARATOR);\n  return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);\n}\n\n\nvar NOT_URI_FRAGMENT = /\\/|:/;\nfunction uri(str) {\n  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n  return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\n\n\nvar Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n  if (Z_ANCHOR.test(str)) return false;\n  try {\n    new RegExp(str);\n    return true;\n  } catch(e) {\n    return false;\n  }\n}\n","'use strict';\nmodule.exports = function generate_ref(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $async, $refCode;\n  if ($schema == '#' || $schema == '#/') {\n    if (it.isRoot) {\n      $async = it.async;\n      $refCode = 'validate';\n    } else {\n      $async = it.root.schema.$async === true;\n      $refCode = 'root.refVal[0]';\n    }\n  } else {\n    var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);\n    if ($refVal === undefined) {\n      var $message = it.MissingRefError.message(it.baseId, $schema);\n      if (it.opts.missingRefs == 'fail') {\n        it.logger.error($message);\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('$ref') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \\'' + (it.util.escapeQuotes($schema)) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'can\\\\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        if ($breakOnError) {\n          out += ' if (false) { ';\n        }\n      } else if (it.opts.missingRefs == 'ignore') {\n        it.logger.warn($message);\n        if ($breakOnError) {\n          out += ' if (true) { ';\n        }\n      } else {\n        throw new it.MissingRefError(it.baseId, $schema, $message);\n      }\n    } else if ($refVal.inline) {\n      var $it = it.util.copy(it);\n      $it.level++;\n      var $nextValid = 'valid' + $it.level;\n      $it.schema = $refVal.schema;\n      $it.schemaPath = '';\n      $it.errSchemaPath = $schema;\n      var $code = it.validate($it).replace(/validate\\.schema/g, $refVal.code);\n      out += ' ' + ($code) + ' ';\n      if ($breakOnError) {\n        out += ' if (' + ($nextValid) + ') { ';\n      }\n    } else {\n      $async = $refVal.$async === true || (it.async && $refVal.$async !== false);\n      $refCode = $refVal.code;\n    }\n  }\n  if ($refCode) {\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = '';\n    if (it.opts.passContext) {\n      out += ' ' + ($refCode) + '.call(this, ';\n    } else {\n      out += ' ' + ($refCode) + '( ';\n    }\n    out += ' ' + ($data) + ', (dataPath || \\'\\')';\n    if (it.errorPath != '\"\"') {\n      out += ' + ' + (it.errorPath);\n    }\n    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData)  ';\n    var __callValidate = out;\n    out = $$outStack.pop();\n    if ($async) {\n      if (!it.async) throw new Error('async schema referenced by sync schema');\n      if ($breakOnError) {\n        out += ' var ' + ($valid) + '; ';\n      }\n      out += ' try { await ' + (__callValidate) + '; ';\n      if ($breakOnError) {\n        out += ' ' + ($valid) + ' = true; ';\n      }\n      out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ';\n      if ($breakOnError) {\n        out += ' ' + ($valid) + ' = false; ';\n      }\n      out += ' } ';\n      if ($breakOnError) {\n        out += ' if (' + ($valid) + ') { ';\n      }\n    } else {\n      out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';\n      if ($breakOnError) {\n        out += ' else { ';\n      }\n    }\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_allOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $currentBaseId = $it.baseId,\n    $allSchemasEmpty = true;\n  var arr1 = $schema;\n  if (arr1) {\n    var $sch, $i = -1,\n      l1 = arr1.length - 1;\n    while ($i < l1) {\n      $sch = arr1[$i += 1];\n      if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n        $allSchemasEmpty = false;\n        $it.schema = $sch;\n        $it.schemaPath = $schemaPath + '[' + $i + ']';\n        $it.errSchemaPath = $errSchemaPath + '/' + $i;\n        out += '  ' + (it.validate($it)) + ' ';\n        $it.baseId = $currentBaseId;\n        if ($breakOnError) {\n          out += ' if (' + ($nextValid) + ') { ';\n          $closingBraces += '}';\n        }\n      }\n    }\n  }\n  if ($breakOnError) {\n    if ($allSchemasEmpty) {\n      out += ' if (true) { ';\n    } else {\n      out += ' ' + ($closingBraces.slice(0, -1)) + ' ';\n    }\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_anyOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $noEmptySchema = $schema.every(function($sch) {\n    return (it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all));\n  });\n  if ($noEmptySchema) {\n    var $currentBaseId = $it.baseId;\n    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false;  ';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    var arr1 = $schema;\n    if (arr1) {\n      var $sch, $i = -1,\n        l1 = arr1.length - 1;\n      while ($i < l1) {\n        $sch = arr1[$i += 1];\n        $it.schema = $sch;\n        $it.schemaPath = $schemaPath + '[' + $i + ']';\n        $it.errSchemaPath = $errSchemaPath + '/' + $i;\n        out += '  ' + (it.validate($it)) + ' ';\n        $it.baseId = $currentBaseId;\n        out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { ';\n        $closingBraces += '}';\n      }\n    }\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should match some schema in anyOf\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError(vErrors); ';\n      } else {\n        out += ' validate.errors = vErrors; return false; ';\n      }\n    }\n    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n    if (it.opts.allErrors) {\n      out += ' } ';\n    }\n  } else {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_comment(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $schema = it.schema[$keyword];\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $comment = it.util.toQuotedString($schema);\n  if (it.opts.$comment === true) {\n    out += ' console.log(' + ($comment) + ');';\n  } else if (typeof it.opts.$comment == 'function') {\n    out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_const(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!$isData) {\n    out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\n  }\n  out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') {   ';\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('const') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be equal to constant\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' }';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_contains(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $idx = 'i' + $lvl,\n    $dataNxt = $it.dataLevel = it.dataLevel + 1,\n    $nextData = 'data' + $dataNxt,\n    $currentBaseId = it.baseId,\n    $nonEmptySchema = (it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all));\n  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n  if ($nonEmptySchema) {\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n    var $passData = $data + '[' + $idx + ']';\n    $it.dataPathArr[$dataNxt] = $idx;\n    var $code = it.validate($it);\n    $it.baseId = $currentBaseId;\n    if (it.util.varOccurences($code, $nextData) < 2) {\n      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n    } else {\n      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n    }\n    out += ' if (' + ($nextValid) + ') break; }  ';\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {';\n  } else {\n    out += ' if (' + ($data) + '.length == 0) {';\n  }\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('contains') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should contain a valid item\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' } else { ';\n  if ($nonEmptySchema) {\n    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n  }\n  if (it.opts.allErrors) {\n    out += ' } ';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_dependencies(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $schemaDeps = {},\n    $propertyDeps = {},\n    $ownProperties = it.opts.ownProperties;\n  for ($property in $schema) {\n    if ($property == '__proto__') continue;\n    var $sch = $schema[$property];\n    var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;\n    $deps[$property] = $sch;\n  }\n  out += 'var ' + ($errs) + ' = errors;';\n  var $currentErrorPath = it.errorPath;\n  out += 'var missing' + ($lvl) + ';';\n  for (var $property in $propertyDeps) {\n    $deps = $propertyDeps[$property];\n    if ($deps.length) {\n      out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n      if ($ownProperties) {\n        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n      }\n      if ($breakOnError) {\n        out += ' && ( ';\n        var arr1 = $deps;\n        if (arr1) {\n          var $propertyKey, $i = -1,\n            l1 = arr1.length - 1;\n          while ($i < l1) {\n            $propertyKey = arr1[$i += 1];\n            if ($i) {\n              out += ' || ';\n            }\n            var $prop = it.util.getProperty($propertyKey),\n              $useData = $data + $prop;\n            out += ' ( ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n          }\n        }\n        out += ')) {  ';\n        var $propertyPath = 'missing' + $lvl,\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n        }\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'should have ';\n            if ($deps.length == 1) {\n              out += 'property ' + (it.util.escapeQuotes($deps[0]));\n            } else {\n              out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n            }\n            out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n      } else {\n        out += ' ) { ';\n        var arr2 = $deps;\n        if (arr2) {\n          var $propertyKey, i2 = -1,\n            l2 = arr2.length - 1;\n          while (i2 < l2) {\n            $propertyKey = arr2[i2 += 1];\n            var $prop = it.util.getProperty($propertyKey),\n              $missingProperty = it.util.escapeQuotes($propertyKey),\n              $useData = $data + $prop;\n            if (it.opts._errorDataPathProperty) {\n              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n            }\n            out += ' if ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') {  var err =   '; /* istanbul ignore else */\n            if (it.createErrors !== false) {\n              out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n              if (it.opts.messages !== false) {\n                out += ' , message: \\'should have ';\n                if ($deps.length == 1) {\n                  out += 'property ' + (it.util.escapeQuotes($deps[0]));\n                } else {\n                  out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n                }\n                out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n              }\n              if (it.opts.verbose) {\n                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n              }\n              out += ' } ';\n            } else {\n              out += ' {} ';\n            }\n            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n          }\n        }\n      }\n      out += ' }   ';\n      if ($breakOnError) {\n        $closingBraces += '}';\n        out += ' else { ';\n      }\n    }\n  }\n  it.errorPath = $currentErrorPath;\n  var $currentBaseId = $it.baseId;\n  for (var $property in $schemaDeps) {\n    var $sch = $schemaDeps[$property];\n    if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n      out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n      if ($ownProperties) {\n        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n      }\n      out += ') { ';\n      $it.schema = $sch;\n      $it.schemaPath = $schemaPath + it.util.getProperty($property);\n      $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\n      out += '  ' + (it.validate($it)) + ' ';\n      $it.baseId = $currentBaseId;\n      out += ' }  ';\n      if ($breakOnError) {\n        out += ' if (' + ($nextValid) + ') { ';\n        $closingBraces += '}';\n      }\n    }\n  }\n  if ($breakOnError) {\n    out += '   ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_enum(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $i = 'i' + $lvl,\n    $vSchema = 'schema' + $lvl;\n  if (!$isData) {\n    out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';';\n  }\n  out += 'var ' + ($valid) + ';';\n  if ($isData) {\n    out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n  }\n  out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';\n  if ($isData) {\n    out += '  }  ';\n  }\n  out += ' if (!' + ($valid) + ') {   ';\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('enum') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be equal to one of the allowed values\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' }';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_format(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  if (it.opts.format === false) {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n    return out;\n  }\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $unknownFormats = it.opts.unknownFormats,\n    $allowUnknown = Array.isArray($unknownFormats);\n  if ($isData) {\n    var $format = 'format' + $lvl,\n      $isObject = 'isObject' + $lvl,\n      $formatType = 'formatType' + $lvl;\n    out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \\'object\\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \\'string\\'; if (' + ($isObject) + ') { ';\n    if (it.async) {\n      out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; ';\n    }\n    out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if (  ';\n    if ($isData) {\n      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n    }\n    out += ' (';\n    if ($unknownFormats != 'ignore') {\n      out += ' (' + ($schemaValue) + ' && !' + ($format) + ' ';\n      if ($allowUnknown) {\n        out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 ';\n      }\n      out += ') || ';\n    }\n    out += ' (' + ($format) + ' && ' + ($formatType) + ' == \\'' + ($ruleType) + '\\' && !(typeof ' + ($format) + ' == \\'function\\' ? ';\n    if (it.async) {\n      out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';\n    } else {\n      out += ' ' + ($format) + '(' + ($data) + ') ';\n    }\n    out += ' : ' + ($format) + '.test(' + ($data) + '))))) {';\n  } else {\n    var $format = it.formats[$schema];\n    if (!$format) {\n      if ($unknownFormats == 'ignore') {\n        it.logger.warn('unknown format \"' + $schema + '\" ignored in schema at path \"' + it.errSchemaPath + '\"');\n        if ($breakOnError) {\n          out += ' if (true) { ';\n        }\n        return out;\n      } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {\n        if ($breakOnError) {\n          out += ' if (true) { ';\n        }\n        return out;\n      } else {\n        throw new Error('unknown format \"' + $schema + '\" is used in schema at path \"' + it.errSchemaPath + '\"');\n      }\n    }\n    var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;\n    var $formatType = $isObject && $format.type || 'string';\n    if ($isObject) {\n      var $async = $format.async === true;\n      $format = $format.validate;\n    }\n    if ($formatType != $ruleType) {\n      if ($breakOnError) {\n        out += ' if (true) { ';\n      }\n      return out;\n    }\n    if ($async) {\n      if (!it.async) throw new Error('async format in sync schema');\n      var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';\n      out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { ';\n    } else {\n      out += ' if (! ';\n      var $formatRef = 'formats' + it.util.getProperty($schema);\n      if ($isObject) $formatRef += '.validate';\n      if (typeof $format == 'function') {\n        out += ' ' + ($formatRef) + '(' + ($data) + ') ';\n      } else {\n        out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';\n      }\n      out += ') { ';\n    }\n  }\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('format') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format:  ';\n    if ($isData) {\n      out += '' + ($schemaValue);\n    } else {\n      out += '' + (it.util.toQuotedString($schema));\n    }\n    out += '  } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should match format \"';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + (it.util.escapeQuotes($schema));\n      }\n      out += '\"\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + (it.util.toQuotedString($schema));\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' } ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_if(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $thenSch = it.schema['then'],\n    $elseSch = it.schema['else'],\n    $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? (typeof $thenSch == 'object' && Object.keys($thenSch).length > 0) || $thenSch === false : it.util.schemaHasRules($thenSch, it.RULES.all)),\n    $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? (typeof $elseSch == 'object' && Object.keys($elseSch).length > 0) || $elseSch === false : it.util.schemaHasRules($elseSch, it.RULES.all)),\n    $currentBaseId = $it.baseId;\n  if ($thenPresent || $elsePresent) {\n    var $ifClause;\n    $it.createErrors = false;\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true;  ';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    out += '  ' + (it.validate($it)) + ' ';\n    $it.baseId = $currentBaseId;\n    $it.createErrors = true;\n    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }  ';\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    if ($thenPresent) {\n      out += ' if (' + ($nextValid) + ') {  ';\n      $it.schema = it.schema['then'];\n      $it.schemaPath = it.schemaPath + '.then';\n      $it.errSchemaPath = it.errSchemaPath + '/then';\n      out += '  ' + (it.validate($it)) + ' ';\n      $it.baseId = $currentBaseId;\n      out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n      if ($thenPresent && $elsePresent) {\n        $ifClause = 'ifClause' + $lvl;\n        out += ' var ' + ($ifClause) + ' = \\'then\\'; ';\n      } else {\n        $ifClause = '\\'then\\'';\n      }\n      out += ' } ';\n      if ($elsePresent) {\n        out += ' else { ';\n      }\n    } else {\n      out += ' if (!' + ($nextValid) + ') { ';\n    }\n    if ($elsePresent) {\n      $it.schema = it.schema['else'];\n      $it.schemaPath = it.schemaPath + '.else';\n      $it.errSchemaPath = it.errSchemaPath + '/else';\n      out += '  ' + (it.validate($it)) + ' ';\n      $it.baseId = $currentBaseId;\n      out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n      if ($thenPresent && $elsePresent) {\n        $ifClause = 'ifClause' + $lvl;\n        out += ' var ' + ($ifClause) + ' = \\'else\\'; ';\n      } else {\n        $ifClause = '\\'else\\'';\n      }\n      out += ' } ';\n    }\n    out += ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('if') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should match \"\\' + ' + ($ifClause) + ' + \\'\" schema\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError(vErrors); ';\n      } else {\n        out += ' validate.errors = vErrors; return false; ';\n      }\n    }\n    out += ' }   ';\n    if ($breakOnError) {\n      out += ' else { ';\n    }\n  } else {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_items(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $idx = 'i' + $lvl,\n    $dataNxt = $it.dataLevel = it.dataLevel + 1,\n    $nextData = 'data' + $dataNxt,\n    $currentBaseId = it.baseId;\n  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n  if (Array.isArray($schema)) {\n    var $additionalItems = it.schema.additionalItems;\n    if ($additionalItems === false) {\n      out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';\n      var $currErrSchemaPath = $errSchemaPath;\n      $errSchemaPath = it.errSchemaPath + '/additionalItems';\n      out += '  if (!' + ($valid) + ') {   ';\n      var $$outStack = $$outStack || [];\n      $$outStack.push(out);\n      out = ''; /* istanbul ignore else */\n      if (it.createErrors !== false) {\n        out += ' { keyword: \\'' + ('additionalItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } ';\n        if (it.opts.messages !== false) {\n          out += ' , message: \\'should NOT have more than ' + ($schema.length) + ' items\\' ';\n        }\n        if (it.opts.verbose) {\n          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n        }\n        out += ' } ';\n      } else {\n        out += ' {} ';\n      }\n      var __err = out;\n      out = $$outStack.pop();\n      if (!it.compositeRule && $breakOnError) {\n        /* istanbul ignore if */\n        if (it.async) {\n          out += ' throw new ValidationError([' + (__err) + ']); ';\n        } else {\n          out += ' validate.errors = [' + (__err) + ']; return false; ';\n        }\n      } else {\n        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n      }\n      out += ' } ';\n      $errSchemaPath = $currErrSchemaPath;\n      if ($breakOnError) {\n        $closingBraces += '}';\n        out += ' else { ';\n      }\n    }\n    var arr1 = $schema;\n    if (arr1) {\n      var $sch, $i = -1,\n        l1 = arr1.length - 1;\n      while ($i < l1) {\n        $sch = arr1[$i += 1];\n        if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n          out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';\n          var $passData = $data + '[' + $i + ']';\n          $it.schema = $sch;\n          $it.schemaPath = $schemaPath + '[' + $i + ']';\n          $it.errSchemaPath = $errSchemaPath + '/' + $i;\n          $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\n          $it.dataPathArr[$dataNxt] = $i;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          out += ' }  ';\n          if ($breakOnError) {\n            out += ' if (' + ($nextValid) + ') { ';\n            $closingBraces += '}';\n          }\n        }\n      }\n    }\n    if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? (typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0) || $additionalItems === false : it.util.schemaHasRules($additionalItems, it.RULES.all))) {\n      $it.schema = $additionalItems;\n      $it.schemaPath = it.schemaPath + '.additionalItems';\n      $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\n      out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') {  for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n      $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n      var $passData = $data + '[' + $idx + ']';\n      $it.dataPathArr[$dataNxt] = $idx;\n      var $code = it.validate($it);\n      $it.baseId = $currentBaseId;\n      if (it.util.varOccurences($code, $nextData) < 2) {\n        out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n      } else {\n        out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n      }\n      if ($breakOnError) {\n        out += ' if (!' + ($nextValid) + ') break; ';\n      }\n      out += ' } }  ';\n      if ($breakOnError) {\n        out += ' if (' + ($nextValid) + ') { ';\n        $closingBraces += '}';\n      }\n    }\n  } else if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += '  for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n    var $passData = $data + '[' + $idx + ']';\n    $it.dataPathArr[$dataNxt] = $idx;\n    var $code = it.validate($it);\n    $it.baseId = $currentBaseId;\n    if (it.util.varOccurences($code, $nextData) < 2) {\n      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n    } else {\n      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n    }\n    if ($breakOnError) {\n      out += ' if (!' + ($nextValid) + ') break; ';\n    }\n    out += ' }';\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate__limit(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $isMax = $keyword == 'maximum',\n    $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',\n    $schemaExcl = it.schema[$exclusiveKeyword],\n    $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data,\n    $op = $isMax ? '<' : '>',\n    $notOp = $isMax ? '>' : '<',\n    $errorKeyword = undefined;\n  if (!($isData || typeof $schema == 'number' || $schema === undefined)) {\n    throw new Error($keyword + ' must be number');\n  }\n  if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) {\n    throw new Error($exclusiveKeyword + ' must be number or boolean');\n  }\n  if ($isDataExcl) {\n    var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\n      $exclusive = 'exclusive' + $lvl,\n      $exclType = 'exclType' + $lvl,\n      $exclIsNumber = 'exclIsNumber' + $lvl,\n      $opExpr = 'op' + $lvl,\n      $opStr = '\\' + ' + $opExpr + ' + \\'';\n    out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\n    $schemaValueExcl = 'schemaExcl' + $lvl;\n    out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \\'boolean\\' && ' + ($exclType) + ' != \\'undefined\\' && ' + ($exclType) + ' != \\'number\\') { ';\n    var $errorKeyword = $exclusiveKeyword;\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    out += ' } else if ( ';\n    if ($isData) {\n      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n    }\n    out += ' ' + ($exclType) + ' == \\'number\\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\'; ';\n    if ($schema === undefined) {\n      $errorKeyword = $exclusiveKeyword;\n      $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n      $schemaValue = $schemaValueExcl;\n      $isData = $isDataExcl;\n    }\n  } else {\n    var $exclIsNumber = typeof $schemaExcl == 'number',\n      $opStr = $op;\n    if ($exclIsNumber && $isData) {\n      var $opExpr = '\\'' + $opStr + '\\'';\n      out += ' if ( ';\n      if ($isData) {\n        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n      }\n      out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { ';\n    } else {\n      if ($exclIsNumber && $schema === undefined) {\n        $exclusive = true;\n        $errorKeyword = $exclusiveKeyword;\n        $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n        $schemaValue = $schemaExcl;\n        $notOp += '=';\n      } else {\n        if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);\n        if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {\n          $exclusive = true;\n          $errorKeyword = $exclusiveKeyword;\n          $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n          $notOp += '=';\n        } else {\n          $exclusive = false;\n          $opStr += '=';\n        }\n      }\n      var $opExpr = '\\'' + $opStr + '\\'';\n      out += ' if ( ';\n      if ($isData) {\n        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n      }\n      out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { ';\n    }\n  }\n  $errorKeyword = $errorKeyword || $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be ' + ($opStr) + ' ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue);\n      } else {\n        out += '' + ($schemaValue) + '\\'';\n      }\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' } ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate__limitItems(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  var $op = $keyword == 'maxItems' ? '>' : '<';\n  out += 'if ( ';\n  if ($isData) {\n    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n  }\n  out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n  var $errorKeyword = $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should NOT have ';\n      if ($keyword == 'maxItems') {\n        out += 'more';\n      } else {\n        out += 'fewer';\n      }\n      out += ' than ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + ($schema);\n      }\n      out += ' items\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate__limitLength(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  var $op = $keyword == 'maxLength' ? '>' : '<';\n  out += 'if ( ';\n  if ($isData) {\n    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n  }\n  if (it.opts.unicode === false) {\n    out += ' ' + ($data) + '.length ';\n  } else {\n    out += ' ucs2length(' + ($data) + ') ';\n  }\n  out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\n  var $errorKeyword = $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should NOT be ';\n      if ($keyword == 'maxLength') {\n        out += 'longer';\n      } else {\n        out += 'shorter';\n      }\n      out += ' than ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + ($schema);\n      }\n      out += ' characters\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate__limitProperties(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  var $op = $keyword == 'maxProperties' ? '>' : '<';\n  out += 'if ( ';\n  if ($isData) {\n    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n  }\n  out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n  var $errorKeyword = $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should NOT have ';\n      if ($keyword == 'maxProperties') {\n        out += 'more';\n      } else {\n        out += 'fewer';\n      }\n      out += ' than ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + ($schema);\n      }\n      out += ' properties\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_multipleOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  out += 'var division' + ($lvl) + ';if (';\n  if ($isData) {\n    out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\n  }\n  out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\n  if (it.opts.multipleOfPrecision) {\n    out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\n  } else {\n    out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\n  }\n  out += ' ) ';\n  if ($isData) {\n    out += '  )  ';\n  }\n  out += ' ) {   ';\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be multiple of ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue);\n      } else {\n        out += '' + ($schemaValue) + '\\'';\n      }\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_not(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += ' var ' + ($errs) + ' = errors;  ';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    $it.createErrors = false;\n    var $allErrorsOption;\n    if ($it.opts.allErrors) {\n      $allErrorsOption = $it.opts.allErrors;\n      $it.opts.allErrors = false;\n    }\n    out += ' ' + (it.validate($it)) + ' ';\n    $it.createErrors = true;\n    if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' if (' + ($nextValid) + ') {   ';\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should NOT be valid\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n    if (it.opts.allErrors) {\n      out += ' } ';\n    }\n  } else {\n    out += '  var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should NOT be valid\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if ($breakOnError) {\n      out += ' if (false) { ';\n    }\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_oneOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $currentBaseId = $it.baseId,\n    $prevValid = 'prevValid' + $lvl,\n    $passingSchemas = 'passingSchemas' + $lvl;\n  out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; ';\n  var $wasComposite = it.compositeRule;\n  it.compositeRule = $it.compositeRule = true;\n  var arr1 = $schema;\n  if (arr1) {\n    var $sch, $i = -1,\n      l1 = arr1.length - 1;\n    while ($i < l1) {\n      $sch = arr1[$i += 1];\n      if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n        $it.schema = $sch;\n        $it.schemaPath = $schemaPath + '[' + $i + ']';\n        $it.errSchemaPath = $errSchemaPath + '/' + $i;\n        out += '  ' + (it.validate($it)) + ' ';\n        $it.baseId = $currentBaseId;\n      } else {\n        out += ' var ' + ($nextValid) + ' = true; ';\n      }\n      if ($i) {\n        out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { ';\n        $closingBraces += '}';\n      }\n      out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }';\n    }\n  }\n  it.compositeRule = $it.compositeRule = $wasComposite;\n  out += '' + ($closingBraces) + 'if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should match exactly one schema in oneOf\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError(vErrors); ';\n    } else {\n      out += ' validate.errors = vErrors; return false; ';\n    }\n  }\n  out += '} else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\n  if (it.opts.allErrors) {\n    out += ' } ';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_pattern(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);\n  out += 'if ( ';\n  if ($isData) {\n    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n  }\n  out += ' !' + ($regexp) + '.test(' + ($data) + ') ) {   ';\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern:  ';\n    if ($isData) {\n      out += '' + ($schemaValue);\n    } else {\n      out += '' + (it.util.toQuotedString($schema));\n    }\n    out += '  } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should match pattern \"';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + (it.util.escapeQuotes($schema));\n      }\n      out += '\"\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + (it.util.toQuotedString($schema));\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_properties(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $key = 'key' + $lvl,\n    $idx = 'idx' + $lvl,\n    $dataNxt = $it.dataLevel = it.dataLevel + 1,\n    $nextData = 'data' + $dataNxt,\n    $dataProperties = 'dataProperties' + $lvl;\n  var $schemaKeys = Object.keys($schema || {}).filter(notProto),\n    $pProperties = it.schema.patternProperties || {},\n    $pPropertyKeys = Object.keys($pProperties).filter(notProto),\n    $aProperties = it.schema.additionalProperties,\n    $someProperties = $schemaKeys.length || $pPropertyKeys.length,\n    $noAdditional = $aProperties === false,\n    $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\n    $removeAdditional = it.opts.removeAdditional,\n    $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional,\n    $ownProperties = it.opts.ownProperties,\n    $currentBaseId = it.baseId;\n  var $required = it.schema.required;\n  if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) {\n    var $requiredHash = it.util.toHash($required);\n  }\n\n  function notProto(p) {\n    return p !== '__proto__';\n  }\n  out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';\n  if ($ownProperties) {\n    out += ' var ' + ($dataProperties) + ' = undefined;';\n  }\n  if ($checkAdditional) {\n    if ($ownProperties) {\n      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n    } else {\n      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n    }\n    if ($someProperties) {\n      out += ' var isAdditional' + ($lvl) + ' = !(false ';\n      if ($schemaKeys.length) {\n        if ($schemaKeys.length > 8) {\n          out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') ';\n        } else {\n          var arr1 = $schemaKeys;\n          if (arr1) {\n            var $propertyKey, i1 = -1,\n              l1 = arr1.length - 1;\n            while (i1 < l1) {\n              $propertyKey = arr1[i1 += 1];\n              out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\n            }\n          }\n        }\n      }\n      if ($pPropertyKeys.length) {\n        var arr2 = $pPropertyKeys;\n        if (arr2) {\n          var $pProperty, $i = -1,\n            l2 = arr2.length - 1;\n          while ($i < l2) {\n            $pProperty = arr2[$i += 1];\n            out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') ';\n          }\n        }\n      }\n      out += ' ); if (isAdditional' + ($lvl) + ') { ';\n    }\n    if ($removeAdditional == 'all') {\n      out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n    } else {\n      var $currentErrorPath = it.errorPath;\n      var $additionalProperty = '\\' + ' + $key + ' + \\'';\n      if (it.opts._errorDataPathProperty) {\n        it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n      }\n      if ($noAdditional) {\n        if ($removeAdditional) {\n          out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n        } else {\n          out += ' ' + ($nextValid) + ' = false; ';\n          var $currErrSchemaPath = $errSchemaPath;\n          $errSchemaPath = it.errSchemaPath + '/additionalProperties';\n          var $$outStack = $$outStack || [];\n          $$outStack.push(out);\n          out = ''; /* istanbul ignore else */\n          if (it.createErrors !== false) {\n            out += ' { keyword: \\'' + ('additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\n            if (it.opts.messages !== false) {\n              out += ' , message: \\'';\n              if (it.opts._errorDataPathProperty) {\n                out += 'is an invalid additional property';\n              } else {\n                out += 'should NOT have additional properties';\n              }\n              out += '\\' ';\n            }\n            if (it.opts.verbose) {\n              out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n            }\n            out += ' } ';\n          } else {\n            out += ' {} ';\n          }\n          var __err = out;\n          out = $$outStack.pop();\n          if (!it.compositeRule && $breakOnError) {\n            /* istanbul ignore if */\n            if (it.async) {\n              out += ' throw new ValidationError([' + (__err) + ']); ';\n            } else {\n              out += ' validate.errors = [' + (__err) + ']; return false; ';\n            }\n          } else {\n            out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n          }\n          $errSchemaPath = $currErrSchemaPath;\n          if ($breakOnError) {\n            out += ' break; ';\n          }\n        }\n      } else if ($additionalIsSchema) {\n        if ($removeAdditional == 'failing') {\n          out += ' var ' + ($errs) + ' = errors;  ';\n          var $wasComposite = it.compositeRule;\n          it.compositeRule = $it.compositeRule = true;\n          $it.schema = $aProperties;\n          $it.schemaPath = it.schemaPath + '.additionalProperties';\n          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n          var $passData = $data + '[' + $key + ']';\n          $it.dataPathArr[$dataNxt] = $key;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; }  ';\n          it.compositeRule = $it.compositeRule = $wasComposite;\n        } else {\n          $it.schema = $aProperties;\n          $it.schemaPath = it.schemaPath + '.additionalProperties';\n          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n          var $passData = $data + '[' + $key + ']';\n          $it.dataPathArr[$dataNxt] = $key;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          if ($breakOnError) {\n            out += ' if (!' + ($nextValid) + ') break; ';\n          }\n        }\n      }\n      it.errorPath = $currentErrorPath;\n    }\n    if ($someProperties) {\n      out += ' } ';\n    }\n    out += ' }  ';\n    if ($breakOnError) {\n      out += ' if (' + ($nextValid) + ') { ';\n      $closingBraces += '}';\n    }\n  }\n  var $useDefaults = it.opts.useDefaults && !it.compositeRule;\n  if ($schemaKeys.length) {\n    var arr3 = $schemaKeys;\n    if (arr3) {\n      var $propertyKey, i3 = -1,\n        l3 = arr3.length - 1;\n      while (i3 < l3) {\n        $propertyKey = arr3[i3 += 1];\n        var $sch = $schema[$propertyKey];\n        if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n          var $prop = it.util.getProperty($propertyKey),\n            $passData = $data + $prop,\n            $hasDefault = $useDefaults && $sch.default !== undefined;\n          $it.schema = $sch;\n          $it.schemaPath = $schemaPath + $prop;\n          $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\n          $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\n          $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            $code = it.util.varReplace($code, $nextData, $passData);\n            var $useData = $passData;\n          } else {\n            var $useData = $nextData;\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\n          }\n          if ($hasDefault) {\n            out += ' ' + ($code) + ' ';\n          } else {\n            if ($requiredHash && $requiredHash[$propertyKey]) {\n              out += ' if ( ' + ($useData) + ' === undefined ';\n              if ($ownProperties) {\n                out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n              }\n              out += ') { ' + ($nextValid) + ' = false; ';\n              var $currentErrorPath = it.errorPath,\n                $currErrSchemaPath = $errSchemaPath,\n                $missingProperty = it.util.escapeQuotes($propertyKey);\n              if (it.opts._errorDataPathProperty) {\n                it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n              }\n              $errSchemaPath = it.errSchemaPath + '/required';\n              var $$outStack = $$outStack || [];\n              $$outStack.push(out);\n              out = ''; /* istanbul ignore else */\n              if (it.createErrors !== false) {\n                out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n                if (it.opts.messages !== false) {\n                  out += ' , message: \\'';\n                  if (it.opts._errorDataPathProperty) {\n                    out += 'is a required property';\n                  } else {\n                    out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n                  }\n                  out += '\\' ';\n                }\n                if (it.opts.verbose) {\n                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n                }\n                out += ' } ';\n              } else {\n                out += ' {} ';\n              }\n              var __err = out;\n              out = $$outStack.pop();\n              if (!it.compositeRule && $breakOnError) {\n                /* istanbul ignore if */\n                if (it.async) {\n                  out += ' throw new ValidationError([' + (__err) + ']); ';\n                } else {\n                  out += ' validate.errors = [' + (__err) + ']; return false; ';\n                }\n              } else {\n                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n              }\n              $errSchemaPath = $currErrSchemaPath;\n              it.errorPath = $currentErrorPath;\n              out += ' } else { ';\n            } else {\n              if ($breakOnError) {\n                out += ' if ( ' + ($useData) + ' === undefined ';\n                if ($ownProperties) {\n                  out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n                }\n                out += ') { ' + ($nextValid) + ' = true; } else { ';\n              } else {\n                out += ' if (' + ($useData) + ' !== undefined ';\n                if ($ownProperties) {\n                  out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n                }\n                out += ' ) { ';\n              }\n            }\n            out += ' ' + ($code) + ' } ';\n          }\n        }\n        if ($breakOnError) {\n          out += ' if (' + ($nextValid) + ') { ';\n          $closingBraces += '}';\n        }\n      }\n    }\n  }\n  if ($pPropertyKeys.length) {\n    var arr4 = $pPropertyKeys;\n    if (arr4) {\n      var $pProperty, i4 = -1,\n        l4 = arr4.length - 1;\n      while (i4 < l4) {\n        $pProperty = arr4[i4 += 1];\n        var $sch = $pProperties[$pProperty];\n        if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n          $it.schema = $sch;\n          $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\n          $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\n          if ($ownProperties) {\n            out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n          } else {\n            out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n          }\n          out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { ';\n          $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n          var $passData = $data + '[' + $key + ']';\n          $it.dataPathArr[$dataNxt] = $key;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          if ($breakOnError) {\n            out += ' if (!' + ($nextValid) + ') break; ';\n          }\n          out += ' } ';\n          if ($breakOnError) {\n            out += ' else ' + ($nextValid) + ' = true; ';\n          }\n          out += ' }  ';\n          if ($breakOnError) {\n            out += ' if (' + ($nextValid) + ') { ';\n            $closingBraces += '}';\n          }\n        }\n      }\n    }\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_propertyNames(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  out += 'var ' + ($errs) + ' = errors;';\n  if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    var $key = 'key' + $lvl,\n      $idx = 'idx' + $lvl,\n      $i = 'i' + $lvl,\n      $invalidName = '\\' + ' + $key + ' + \\'',\n      $dataNxt = $it.dataLevel = it.dataLevel + 1,\n      $nextData = 'data' + $dataNxt,\n      $dataProperties = 'dataProperties' + $lvl,\n      $ownProperties = it.opts.ownProperties,\n      $currentBaseId = it.baseId;\n    if ($ownProperties) {\n      out += ' var ' + ($dataProperties) + ' = undefined; ';\n    }\n    if ($ownProperties) {\n      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n    } else {\n      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n    }\n    out += ' var startErrs' + ($lvl) + ' = errors; ';\n    var $passData = $key;\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    var $code = it.validate($it);\n    $it.baseId = $currentBaseId;\n    if (it.util.varOccurences($code, $nextData) < 2) {\n      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n    } else {\n      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n    }\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '<errors; ' + ($i) + '++) { vErrors[' + ($i) + '].propertyName = ' + ($key) + '; }   var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('propertyNames') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { propertyName: \\'' + ($invalidName) + '\\' } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'property name \\\\\\'' + ($invalidName) + '\\\\\\' is invalid\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError(vErrors); ';\n      } else {\n        out += ' validate.errors = vErrors; return false; ';\n      }\n    }\n    if ($breakOnError) {\n      out += ' break; ';\n    }\n    out += ' } }';\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_required(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $vSchema = 'schema' + $lvl;\n  if (!$isData) {\n    if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {\n      var $required = [];\n      var arr1 = $schema;\n      if (arr1) {\n        var $property, i1 = -1,\n          l1 = arr1.length - 1;\n        while (i1 < l1) {\n          $property = arr1[i1 += 1];\n          var $propertySch = it.schema.properties[$property];\n          if (!($propertySch && (it.opts.strictKeywords ? (typeof $propertySch == 'object' && Object.keys($propertySch).length > 0) || $propertySch === false : it.util.schemaHasRules($propertySch, it.RULES.all)))) {\n            $required[$required.length] = $property;\n          }\n        }\n      }\n    } else {\n      var $required = $schema;\n    }\n  }\n  if ($isData || $required.length) {\n    var $currentErrorPath = it.errorPath,\n      $loopRequired = $isData || $required.length >= it.opts.loopRequired,\n      $ownProperties = it.opts.ownProperties;\n    if ($breakOnError) {\n      out += ' var missing' + ($lvl) + '; ';\n      if ($loopRequired) {\n        if (!$isData) {\n          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n        }\n        var $i = 'i' + $lvl,\n          $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n        }\n        out += ' var ' + ($valid) + ' = true; ';\n        if ($isData) {\n          out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n        }\n        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';\n        if ($ownProperties) {\n          out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n        }\n        out += '; if (!' + ($valid) + ') break; } ';\n        if ($isData) {\n          out += '  }  ';\n        }\n        out += '  if (!' + ($valid) + ') {   ';\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'';\n            if (it.opts._errorDataPathProperty) {\n              out += 'is a required property';\n            } else {\n              out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        out += ' } else { ';\n      } else {\n        out += ' if ( ';\n        var arr2 = $required;\n        if (arr2) {\n          var $propertyKey, $i = -1,\n            l2 = arr2.length - 1;\n          while ($i < l2) {\n            $propertyKey = arr2[$i += 1];\n            if ($i) {\n              out += ' || ';\n            }\n            var $prop = it.util.getProperty($propertyKey),\n              $useData = $data + $prop;\n            out += ' ( ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n          }\n        }\n        out += ') {  ';\n        var $propertyPath = 'missing' + $lvl,\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n        }\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'';\n            if (it.opts._errorDataPathProperty) {\n              out += 'is a required property';\n            } else {\n              out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        out += ' } else { ';\n      }\n    } else {\n      if ($loopRequired) {\n        if (!$isData) {\n          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n        }\n        var $i = 'i' + $lvl,\n          $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n        }\n        if ($isData) {\n          out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) {  var err =   '; /* istanbul ignore else */\n          if (it.createErrors !== false) {\n            out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n            if (it.opts.messages !== false) {\n              out += ' , message: \\'';\n              if (it.opts._errorDataPathProperty) {\n                out += 'is a required property';\n              } else {\n                out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n              }\n              out += '\\' ';\n            }\n            if (it.opts.verbose) {\n              out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n            }\n            out += ' } ';\n          } else {\n            out += ' {} ';\n          }\n          out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';\n        }\n        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';\n        if ($ownProperties) {\n          out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n        }\n        out += ') {  var err =   '; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'';\n            if (it.opts._errorDataPathProperty) {\n              out += 'is a required property';\n            } else {\n              out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\n        if ($isData) {\n          out += '  }  ';\n        }\n      } else {\n        var arr3 = $required;\n        if (arr3) {\n          var $propertyKey, i3 = -1,\n            l3 = arr3.length - 1;\n          while (i3 < l3) {\n            $propertyKey = arr3[i3 += 1];\n            var $prop = it.util.getProperty($propertyKey),\n              $missingProperty = it.util.escapeQuotes($propertyKey),\n              $useData = $data + $prop;\n            if (it.opts._errorDataPathProperty) {\n              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n            }\n            out += ' if ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') {  var err =   '; /* istanbul ignore else */\n            if (it.createErrors !== false) {\n              out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n              if (it.opts.messages !== false) {\n                out += ' , message: \\'';\n                if (it.opts._errorDataPathProperty) {\n                  out += 'is a required property';\n                } else {\n                  out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n                }\n                out += '\\' ';\n              }\n              if (it.opts.verbose) {\n                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n              }\n              out += ' } ';\n            } else {\n              out += ' {} ';\n            }\n            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n          }\n        }\n      }\n    }\n    it.errorPath = $currentErrorPath;\n  } else if ($breakOnError) {\n    out += ' if (true) {';\n  }\n  return out;\n}\n","'use strict';\nmodule.exports = function generate_uniqueItems(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (($schema || $isData) && it.opts.uniqueItems !== false) {\n    if ($isData) {\n      out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\n    }\n    out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { ';\n    var $itemType = it.schema.items && it.schema.items.type,\n      $typeIsArray = Array.isArray($itemType);\n    if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) {\n      out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } ';\n    } else {\n      out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; ';\n      var $method = 'checkDataType' + ($typeIsArray ? 's' : '');\n      out += ' if (' + (it.util[$method]($itemType, 'item', it.opts.strictNumbers, true)) + ') continue; ';\n      if ($typeIsArray) {\n        out += ' if (typeof item == \\'string\\') item = \\'\"\\' + item; ';\n      }\n      out += ' if (typeof itemIndices[item] == \\'number\\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ';\n    }\n    out += ' } ';\n    if ($isData) {\n      out += '  }  ';\n    }\n    out += ' if (!' + ($valid) + ') {   ';\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema:  ';\n        if ($isData) {\n          out += 'validate.schema' + ($schemaPath);\n        } else {\n          out += '' + ($schema);\n        }\n        out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    out += ' } ';\n    if ($breakOnError) {\n      out += ' else { ';\n    }\n  } else {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  }\n  return out;\n}\n","'use strict';\n\n//all requires must be explicit because browserify won't work with dynamic requires\nmodule.exports = {\n  '$ref': require('./ref'),\n  allOf: require('./allOf'),\n  anyOf: require('./anyOf'),\n  '$comment': require('./comment'),\n  const: require('./const'),\n  contains: require('./contains'),\n  dependencies: require('./dependencies'),\n  'enum': require('./enum'),\n  format: require('./format'),\n  'if': require('./if'),\n  items: require('./items'),\n  maximum: require('./_limit'),\n  minimum: require('./_limit'),\n  maxItems: require('./_limitItems'),\n  minItems: require('./_limitItems'),\n  maxLength: require('./_limitLength'),\n  minLength: require('./_limitLength'),\n  maxProperties: require('./_limitProperties'),\n  minProperties: require('./_limitProperties'),\n  multipleOf: require('./multipleOf'),\n  not: require('./not'),\n  oneOf: require('./oneOf'),\n  pattern: require('./pattern'),\n  properties: require('./properties'),\n  propertyNames: require('./propertyNames'),\n  required: require('./required'),\n  uniqueItems: require('./uniqueItems'),\n  validate: require('./validate')\n};\n","'use strict';\n\nvar ruleModules = require('../dotjs')\n  , toHash = require('./util').toHash;\n\nmodule.exports = function rules() {\n  var RULES = [\n    { type: 'number',\n      rules: [ { 'maximum': ['exclusiveMaximum'] },\n               { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] },\n    { type: 'string',\n      rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },\n    { type: 'array',\n      rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] },\n    { type: 'object',\n      rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames',\n               { 'properties': ['additionalProperties', 'patternProperties'] } ] },\n    { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] }\n  ];\n\n  var ALL = [ 'type', '$comment' ];\n  var KEYWORDS = [\n    '$schema', '$id', 'id', '$data', '$async', 'title',\n    'description', 'default', 'definitions',\n    'examples', 'readOnly', 'writeOnly',\n    'contentMediaType', 'contentEncoding',\n    'additionalItems', 'then', 'else'\n  ];\n  var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];\n  RULES.all = toHash(ALL);\n  RULES.types = toHash(TYPES);\n\n  RULES.forEach(function (group) {\n    group.rules = group.rules.map(function (keyword) {\n      var implKeywords;\n      if (typeof keyword == 'object') {\n        var key = Object.keys(keyword)[0];\n        implKeywords = keyword[key];\n        keyword = key;\n        implKeywords.forEach(function (k) {\n          ALL.push(k);\n          RULES.all[k] = true;\n        });\n      }\n      ALL.push(keyword);\n      var rule = RULES.all[keyword] = {\n        keyword: keyword,\n        code: ruleModules[keyword],\n        implements: implKeywords\n      };\n      return rule;\n    });\n\n    RULES.all.$comment = {\n      keyword: '$comment',\n      code: ruleModules.$comment\n    };\n\n    if (group.type) RULES.types[group.type] = group;\n  });\n\n  RULES.keywords = toHash(ALL.concat(KEYWORDS));\n  RULES.custom = {};\n\n  return RULES;\n};\n","'use strict';\n\nvar KEYWORDS = [\n  'multipleOf',\n  'maximum',\n  'exclusiveMaximum',\n  'minimum',\n  'exclusiveMinimum',\n  'maxLength',\n  'minLength',\n  'pattern',\n  'additionalItems',\n  'maxItems',\n  'minItems',\n  'uniqueItems',\n  'maxProperties',\n  'minProperties',\n  'required',\n  'additionalProperties',\n  'enum',\n  'format',\n  'const'\n];\n\nmodule.exports = function (metaSchema, keywordsJsonPointers) {\n  for (var i=0; i<keywordsJsonPointers.length; i++) {\n    metaSchema = JSON.parse(JSON.stringify(metaSchema));\n    var segments = keywordsJsonPointers[i].split('/');\n    var keywords = metaSchema;\n    var j;\n    for (j=1; j<segments.length; j++)\n      keywords = keywords[segments[j]];\n\n    for (j=0; j<KEYWORDS.length; j++) {\n      var key = KEYWORDS[j];\n      var schema = keywords[key];\n      if (schema) {\n        keywords[key] = {\n          anyOf: [\n            schema,\n            { $ref: 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }\n          ]\n        };\n      }\n    }\n  }\n\n  return metaSchema;\n};\n","'use strict';\n\nvar MissingRefError = require('./error_classes').MissingRef;\n\nmodule.exports = compileAsync;\n\n\n/**\n * Creates validating function for passed schema with asynchronous loading of missing schemas.\n * `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n * @this  Ajv\n * @param {Object}   schema schema object\n * @param {Boolean}  meta optional true to compile meta-schema; this parameter can be skipped\n * @param {Function} callback an optional node-style callback, it is called with 2 parameters: error (or null) and validating function.\n * @return {Promise} promise that resolves with a validating function.\n */\nfunction compileAsync(schema, meta, callback) {\n  /* eslint no-shadow: 0 */\n  /* global Promise */\n  /* jshint validthis: true */\n  var self = this;\n  if (typeof this._opts.loadSchema != 'function')\n    throw new Error('options.loadSchema should be a function');\n\n  if (typeof meta == 'function') {\n    callback = meta;\n    meta = undefined;\n  }\n\n  var p = loadMetaSchemaOf(schema).then(function () {\n    var schemaObj = self._addSchema(schema, undefined, meta);\n    return schemaObj.validate || _compileAsync(schemaObj);\n  });\n\n  if (callback) {\n    p.then(\n      function(v) { callback(null, v); },\n      callback\n    );\n  }\n\n  return p;\n\n\n  function loadMetaSchemaOf(sch) {\n    var $schema = sch.$schema;\n    return $schema && !self.getSchema($schema)\n            ? compileAsync.call(self, { $ref: $schema }, true)\n            : Promise.resolve();\n  }\n\n\n  function _compileAsync(schemaObj) {\n    try { return self._compile(schemaObj); }\n    catch(e) {\n      if (e instanceof MissingRefError) return loadMissingSchema(e);\n      throw e;\n    }\n\n\n    function loadMissingSchema(e) {\n      var ref = e.missingSchema;\n      if (added(ref)) throw new Error('Schema ' + ref + ' is loaded but ' + e.missingRef + ' cannot be resolved');\n\n      var schemaPromise = self._loadingSchemas[ref];\n      if (!schemaPromise) {\n        schemaPromise = self._loadingSchemas[ref] = self._opts.loadSchema(ref);\n        schemaPromise.then(removePromise, removePromise);\n      }\n\n      return schemaPromise.then(function (sch) {\n        if (!added(ref)) {\n          return loadMetaSchemaOf(sch).then(function () {\n            if (!added(ref)) self.addSchema(sch, ref, undefined, meta);\n          });\n        }\n      }).then(function() {\n        return _compileAsync(schemaObj);\n      });\n\n      function removePromise() {\n        delete self._loadingSchemas[ref];\n      }\n\n      function added(ref) {\n        return self._refs[ref] || self._schemas[ref];\n      }\n    }\n  }\n}\n","'use strict';\nmodule.exports = function generate_custom(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $rule = this,\n    $definition = 'definition' + $lvl,\n    $rDef = $rule.definition,\n    $closingBraces = '';\n  var $compile, $inline, $macro, $ruleValidate, $validateCode;\n  if ($isData && $rDef.$data) {\n    $validateCode = 'keywordValidate' + $lvl;\n    var $validateSchema = $rDef.validateSchema;\n    out += ' var ' + ($definition) + ' = RULES.custom[\\'' + ($keyword) + '\\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;';\n  } else {\n    $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);\n    if (!$ruleValidate) return;\n    $schemaValue = 'validate.schema' + $schemaPath;\n    $validateCode = $ruleValidate.code;\n    $compile = $rDef.compile;\n    $inline = $rDef.inline;\n    $macro = $rDef.macro;\n  }\n  var $ruleErrs = $validateCode + '.errors',\n    $i = 'i' + $lvl,\n    $ruleErr = 'ruleErr' + $lvl,\n    $asyncKeyword = $rDef.async;\n  if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema');\n  if (!($inline || $macro)) {\n    out += '' + ($ruleErrs) + ' = null;';\n  }\n  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n  if ($isData && $rDef.$data) {\n    $closingBraces += '}';\n    out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { ';\n    if ($validateSchema) {\n      $closingBraces += '}';\n      out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { ';\n    }\n  }\n  if ($inline) {\n    if ($rDef.statements) {\n      out += ' ' + ($ruleValidate.validate) + ' ';\n    } else {\n      out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; ';\n    }\n  } else if ($macro) {\n    var $it = it.util.copy(it);\n    var $closingBraces = '';\n    $it.level++;\n    var $nextValid = 'valid' + $it.level;\n    $it.schema = $ruleValidate.validate;\n    $it.schemaPath = '';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    var $code = it.validate($it).replace(/validate\\.schema/g, $validateCode);\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' ' + ($code);\n  } else {\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = '';\n    out += '  ' + ($validateCode) + '.call( ';\n    if (it.opts.passContext) {\n      out += 'this';\n    } else {\n      out += 'self';\n    }\n    if ($compile || $rDef.schema === false) {\n      out += ' , ' + ($data) + ' ';\n    } else {\n      out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' ';\n    }\n    out += ' , (dataPath || \\'\\')';\n    if (it.errorPath != '\"\"') {\n      out += ' + ' + (it.errorPath);\n    }\n    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData )  ';\n    var def_callRuleValidate = out;\n    out = $$outStack.pop();\n    if ($rDef.errors === false) {\n      out += ' ' + ($valid) + ' = ';\n      if ($asyncKeyword) {\n        out += 'await ';\n      }\n      out += '' + (def_callRuleValidate) + '; ';\n    } else {\n      if ($asyncKeyword) {\n        $ruleErrs = 'customErrors' + $lvl;\n        out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } ';\n      } else {\n        out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; ';\n      }\n    }\n  }\n  if ($rDef.modifying) {\n    out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];';\n  }\n  out += '' + ($closingBraces);\n  if ($rDef.valid) {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  } else {\n    out += ' if ( ';\n    if ($rDef.valid === undefined) {\n      out += ' !';\n      if ($macro) {\n        out += '' + ($nextValid);\n      } else {\n        out += '' + ($valid);\n      }\n    } else {\n      out += ' ' + (!$rDef.valid) + ' ';\n    }\n    out += ') { ';\n    $errorKeyword = $rule.keyword;\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = '';\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    var def_customError = out;\n    out = $$outStack.pop();\n    if ($inline) {\n      if ($rDef.errors) {\n        if ($rDef.errors != 'full') {\n          out += '  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\n          if (it.opts.verbose) {\n            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n          }\n          out += ' } ';\n        }\n      } else {\n        if ($rDef.errors === false) {\n          out += ' ' + (def_customError) + ' ';\n        } else {\n          out += ' if (' + ($errs) + ' == errors) { ' + (def_customError) + ' } else {  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\n          if (it.opts.verbose) {\n            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n          }\n          out += ' } } ';\n        }\n      }\n    } else if ($macro) {\n      out += '   var err =   '; /* istanbul ignore else */\n      if (it.createErrors !== false) {\n        out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\n        if (it.opts.messages !== false) {\n          out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\n        }\n        if (it.opts.verbose) {\n          out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n        }\n        out += ' } ';\n      } else {\n        out += ' {} ';\n      }\n      out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n      if (!it.compositeRule && $breakOnError) {\n        /* istanbul ignore if */\n        if (it.async) {\n          out += ' throw new ValidationError(vErrors); ';\n        } else {\n          out += ' validate.errors = vErrors; return false; ';\n        }\n      }\n    } else {\n      if ($rDef.errors === false) {\n        out += ' ' + (def_customError) + ' ';\n      } else {\n        out += ' if (Array.isArray(' + ($ruleErrs) + ')) { if (vErrors === null) vErrors = ' + ($ruleErrs) + '; else vErrors = vErrors.concat(' + ($ruleErrs) + '); errors = vErrors.length;  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + ';  ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\";  ';\n        if (it.opts.verbose) {\n          out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n        }\n        out += ' } } else { ' + (def_customError) + ' } ';\n      }\n    }\n    out += ' } ';\n    if ($breakOnError) {\n      out += ' else { ';\n    }\n  }\n  return out;\n}\n","'use strict';\n\nvar metaSchema = require('./refs/json-schema-draft-07.json');\n\nmodule.exports = {\n  $id: 'https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js',\n  definitions: {\n    simpleTypes: metaSchema.definitions.simpleTypes\n  },\n  type: 'object',\n  dependencies: {\n    schema: ['validate'],\n    $data: ['validate'],\n    statements: ['inline'],\n    valid: {not: {required: ['macro']}}\n  },\n  properties: {\n    type: metaSchema.properties.type,\n    schema: {type: 'boolean'},\n    statements: {type: 'boolean'},\n    dependencies: {\n      type: 'array',\n      items: {type: 'string'}\n    },\n    metaSchema: {type: 'object'},\n    modifying: {type: 'boolean'},\n    valid: {type: 'boolean'},\n    $data: {type: 'boolean'},\n    async: {type: 'boolean'},\n    errors: {\n      anyOf: [\n        {type: 'boolean'},\n        {const: 'full'}\n      ]\n    }\n  }\n};\n","'use strict';\n\nvar IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i;\nvar customRuleCode = require('./dotjs/custom');\nvar definitionSchema = require('./definition_schema');\n\nmodule.exports = {\n  add: addKeyword,\n  get: getKeyword,\n  remove: removeKeyword,\n  validate: validateKeyword\n};\n\n\n/**\n * Define custom keyword\n * @this  Ajv\n * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords).\n * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.\n * @return {Ajv} this for method chaining\n */\nfunction addKeyword(keyword, definition) {\n  /* jshint validthis: true */\n  /* eslint no-shadow: 0 */\n  var RULES = this.RULES;\n  if (RULES.keywords[keyword])\n    throw new Error('Keyword ' + keyword + ' is already defined');\n\n  if (!IDENTIFIER.test(keyword))\n    throw new Error('Keyword ' + keyword + ' is not a valid identifier');\n\n  if (definition) {\n    this.validateKeyword(definition, true);\n\n    var dataType = definition.type;\n    if (Array.isArray(dataType)) {\n      for (var i=0; i<dataType.length; i++)\n        _addRule(keyword, dataType[i], definition);\n    } else {\n      _addRule(keyword, dataType, definition);\n    }\n\n    var metaSchema = definition.metaSchema;\n    if (metaSchema) {\n      if (definition.$data && this._opts.$data) {\n        metaSchema = {\n          anyOf: [\n            metaSchema,\n            { '$ref': 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }\n          ]\n        };\n      }\n      definition.validateSchema = this.compile(metaSchema, true);\n    }\n  }\n\n  RULES.keywords[keyword] = RULES.all[keyword] = true;\n\n\n  function _addRule(keyword, dataType, definition) {\n    var ruleGroup;\n    for (var i=0; i<RULES.length; i++) {\n      var rg = RULES[i];\n      if (rg.type == dataType) {\n        ruleGroup = rg;\n        break;\n      }\n    }\n\n    if (!ruleGroup) {\n      ruleGroup = { type: dataType, rules: [] };\n      RULES.push(ruleGroup);\n    }\n\n    var rule = {\n      keyword: keyword,\n      definition: definition,\n      custom: true,\n      code: customRuleCode,\n      implements: definition.implements\n    };\n    ruleGroup.rules.push(rule);\n    RULES.custom[keyword] = rule;\n  }\n\n  return this;\n}\n\n\n/**\n * Get keyword\n * @this  Ajv\n * @param {String} keyword pre-defined or custom keyword.\n * @return {Object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise.\n */\nfunction getKeyword(keyword) {\n  /* jshint validthis: true */\n  var rule = this.RULES.custom[keyword];\n  return rule ? rule.definition : this.RULES.keywords[keyword] || false;\n}\n\n\n/**\n * Remove keyword\n * @this  Ajv\n * @param {String} keyword pre-defined or custom keyword.\n * @return {Ajv} this for method chaining\n */\nfunction removeKeyword(keyword) {\n  /* jshint validthis: true */\n  var RULES = this.RULES;\n  delete RULES.keywords[keyword];\n  delete RULES.all[keyword];\n  delete RULES.custom[keyword];\n  for (var i=0; i<RULES.length; i++) {\n    var rules = RULES[i].rules;\n    for (var j=0; j<rules.length; j++) {\n      if (rules[j].keyword == keyword) {\n        rules.splice(j, 1);\n        break;\n      }\n    }\n  }\n  return this;\n}\n\n\n/**\n * Validate keyword definition\n * @this  Ajv\n * @param {Object} definition keyword definition object.\n * @param {Boolean} throwError true to throw exception if definition is invalid\n * @return {boolean} validation result\n */\nfunction validateKeyword(definition, throwError) {\n  validateKeyword.errors = null;\n  var v = this._validateKeyword = this._validateKeyword\n                                  || this.compile(definitionSchema, true);\n\n  if (v(definition)) return true;\n  validateKeyword.errors = v.errors;\n  if (throwError)\n    throw new Error('custom keyword definition is invalid: '  + this.errorsText(v.errors));\n  else\n    return false;\n}\n","'use strict';\n\nvar compileSchema = require('./compile')\n  , resolve = require('./compile/resolve')\n  , Cache = require('./cache')\n  , SchemaObject = require('./compile/schema_obj')\n  , stableStringify = require('fast-json-stable-stringify')\n  , formats = require('./compile/formats')\n  , rules = require('./compile/rules')\n  , $dataMetaSchema = require('./data')\n  , util = require('./compile/util');\n\nmodule.exports = Ajv;\n\nAjv.prototype.validate = validate;\nAjv.prototype.compile = compile;\nAjv.prototype.addSchema = addSchema;\nAjv.prototype.addMetaSchema = addMetaSchema;\nAjv.prototype.validateSchema = validateSchema;\nAjv.prototype.getSchema = getSchema;\nAjv.prototype.removeSchema = removeSchema;\nAjv.prototype.addFormat = addFormat;\nAjv.prototype.errorsText = errorsText;\n\nAjv.prototype._addSchema = _addSchema;\nAjv.prototype._compile = _compile;\n\nAjv.prototype.compileAsync = require('./compile/async');\nvar customKeyword = require('./keyword');\nAjv.prototype.addKeyword = customKeyword.add;\nAjv.prototype.getKeyword = customKeyword.get;\nAjv.prototype.removeKeyword = customKeyword.remove;\nAjv.prototype.validateKeyword = customKeyword.validate;\n\nvar errorClasses = require('./compile/error_classes');\nAjv.ValidationError = errorClasses.Validation;\nAjv.MissingRefError = errorClasses.MissingRef;\nAjv.$dataMetaSchema = $dataMetaSchema;\n\nvar META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema';\n\nvar META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ];\nvar META_SUPPORT_DATA = ['/properties'];\n\n/**\n * Creates validator instance.\n * Usage: `Ajv(opts)`\n * @param {Object} opts optional options\n * @return {Object} ajv instance\n */\nfunction Ajv(opts) {\n  if (!(this instanceof Ajv)) return new Ajv(opts);\n  opts = this._opts = util.copy(opts) || {};\n  setLogger(this);\n  this._schemas = {};\n  this._refs = {};\n  this._fragments = {};\n  this._formats = formats(opts.format);\n\n  this._cache = opts.cache || new Cache;\n  this._loadingSchemas = {};\n  this._compilations = [];\n  this.RULES = rules();\n  this._getId = chooseGetId(opts);\n\n  opts.loopRequired = opts.loopRequired || Infinity;\n  if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;\n  if (opts.serialize === undefined) opts.serialize = stableStringify;\n  this._metaOpts = getMetaSchemaOptions(this);\n\n  if (opts.formats) addInitialFormats(this);\n  if (opts.keywords) addInitialKeywords(this);\n  addDefaultMetaSchema(this);\n  if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta);\n  if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}});\n  addInitialSchemas(this);\n}\n\n\n\n/**\n * Validate data using schema\n * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize.\n * @this   Ajv\n * @param  {String|Object} schemaKeyRef key, ref or schema object\n * @param  {Any} data to be validated\n * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).\n */\nfunction validate(schemaKeyRef, data) {\n  var v;\n  if (typeof schemaKeyRef == 'string') {\n    v = this.getSchema(schemaKeyRef);\n    if (!v) throw new Error('no schema with key or ref \"' + schemaKeyRef + '\"');\n  } else {\n    var schemaObj = this._addSchema(schemaKeyRef);\n    v = schemaObj.validate || this._compile(schemaObj);\n  }\n\n  var valid = v(data);\n  if (v.$async !== true) this.errors = v.errors;\n  return valid;\n}\n\n\n/**\n * Create validating function for passed schema.\n * @this   Ajv\n * @param  {Object} schema schema object\n * @param  {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords.\n * @return {Function} validating function\n */\nfunction compile(schema, _meta) {\n  var schemaObj = this._addSchema(schema, undefined, _meta);\n  return schemaObj.validate || this._compile(schemaObj);\n}\n\n\n/**\n * Adds schema to the instance.\n * @this   Ajv\n * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.\n * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.\n * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n * @return {Ajv} this for method chaining\n */\nfunction addSchema(schema, key, _skipValidation, _meta) {\n  if (Array.isArray(schema)){\n    for (var i=0; i<schema.length; i++) this.addSchema(schema[i], undefined, _skipValidation, _meta);\n    return this;\n  }\n  var id = this._getId(schema);\n  if (id !== undefined && typeof id != 'string')\n    throw new Error('schema id must be string');\n  key = resolve.normalizeId(key || id);\n  checkUnique(this, key);\n  this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true);\n  return this;\n}\n\n\n/**\n * Add schema that will be used to validate other schemas\n * options in META_IGNORE_OPTIONS are alway set to false\n * @this   Ajv\n * @param {Object} schema schema object\n * @param {String} key optional schema key\n * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema\n * @return {Ajv} this for method chaining\n */\nfunction addMetaSchema(schema, key, skipValidation) {\n  this.addSchema(schema, key, skipValidation, true);\n  return this;\n}\n\n\n/**\n * Validate schema\n * @this   Ajv\n * @param {Object} schema schema to validate\n * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid\n * @return {Boolean} true if schema is valid\n */\nfunction validateSchema(schema, throwOrLogError) {\n  var $schema = schema.$schema;\n  if ($schema !== undefined && typeof $schema != 'string')\n    throw new Error('$schema must be a string');\n  $schema = $schema || this._opts.defaultMeta || defaultMeta(this);\n  if (!$schema) {\n    this.logger.warn('meta-schema not available');\n    this.errors = null;\n    return true;\n  }\n  var valid = this.validate($schema, schema);\n  if (!valid && throwOrLogError) {\n    var message = 'schema is invalid: ' + this.errorsText();\n    if (this._opts.validateSchema == 'log') this.logger.error(message);\n    else throw new Error(message);\n  }\n  return valid;\n}\n\n\nfunction defaultMeta(self) {\n  var meta = self._opts.meta;\n  self._opts.defaultMeta = typeof meta == 'object'\n                            ? self._getId(meta) || meta\n                            : self.getSchema(META_SCHEMA_ID)\n                              ? META_SCHEMA_ID\n                              : undefined;\n  return self._opts.defaultMeta;\n}\n\n\n/**\n * Get compiled schema from the instance by `key` or `ref`.\n * @this   Ajv\n * @param  {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).\n * @return {Function} schema validating function (with property `schema`).\n */\nfunction getSchema(keyRef) {\n  var schemaObj = _getSchemaObj(this, keyRef);\n  switch (typeof schemaObj) {\n    case 'object': return schemaObj.validate || this._compile(schemaObj);\n    case 'string': return this.getSchema(schemaObj);\n    case 'undefined': return _getSchemaFragment(this, keyRef);\n  }\n}\n\n\nfunction _getSchemaFragment(self, ref) {\n  var res = resolve.schema.call(self, { schema: {} }, ref);\n  if (res) {\n    var schema = res.schema\n      , root = res.root\n      , baseId = res.baseId;\n    var v = compileSchema.call(self, schema, root, undefined, baseId);\n    self._fragments[ref] = new SchemaObject({\n      ref: ref,\n      fragment: true,\n      schema: schema,\n      root: root,\n      baseId: baseId,\n      validate: v\n    });\n    return v;\n  }\n}\n\n\nfunction _getSchemaObj(self, keyRef) {\n  keyRef = resolve.normalizeId(keyRef);\n  return self._schemas[keyRef] || self._refs[keyRef] || self._fragments[keyRef];\n}\n\n\n/**\n * Remove cached schema(s).\n * If no parameter is passed all schemas but meta-schemas are removed.\n * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n * @this   Ajv\n * @param  {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object\n * @return {Ajv} this for method chaining\n */\nfunction removeSchema(schemaKeyRef) {\n  if (schemaKeyRef instanceof RegExp) {\n    _removeAllSchemas(this, this._schemas, schemaKeyRef);\n    _removeAllSchemas(this, this._refs, schemaKeyRef);\n    return this;\n  }\n  switch (typeof schemaKeyRef) {\n    case 'undefined':\n      _removeAllSchemas(this, this._schemas);\n      _removeAllSchemas(this, this._refs);\n      this._cache.clear();\n      return this;\n    case 'string':\n      var schemaObj = _getSchemaObj(this, schemaKeyRef);\n      if (schemaObj) this._cache.del(schemaObj.cacheKey);\n      delete this._schemas[schemaKeyRef];\n      delete this._refs[schemaKeyRef];\n      return this;\n    case 'object':\n      var serialize = this._opts.serialize;\n      var cacheKey = serialize ? serialize(schemaKeyRef) : schemaKeyRef;\n      this._cache.del(cacheKey);\n      var id = this._getId(schemaKeyRef);\n      if (id) {\n        id = resolve.normalizeId(id);\n        delete this._schemas[id];\n        delete this._refs[id];\n      }\n  }\n  return this;\n}\n\n\nfunction _removeAllSchemas(self, schemas, regex) {\n  for (var keyRef in schemas) {\n    var schemaObj = schemas[keyRef];\n    if (!schemaObj.meta && (!regex || regex.test(keyRef))) {\n      self._cache.del(schemaObj.cacheKey);\n      delete schemas[keyRef];\n    }\n  }\n}\n\n\n/* @this   Ajv */\nfunction _addSchema(schema, skipValidation, meta, shouldAddSchema) {\n  if (typeof schema != 'object' && typeof schema != 'boolean')\n    throw new Error('schema should be object or boolean');\n  var serialize = this._opts.serialize;\n  var cacheKey = serialize ? serialize(schema) : schema;\n  var cached = this._cache.get(cacheKey);\n  if (cached) return cached;\n\n  shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false;\n\n  var id = resolve.normalizeId(this._getId(schema));\n  if (id && shouldAddSchema) checkUnique(this, id);\n\n  var willValidate = this._opts.validateSchema !== false && !skipValidation;\n  var recursiveMeta;\n  if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema)))\n    this.validateSchema(schema, true);\n\n  var localRefs = resolve.ids.call(this, schema);\n\n  var schemaObj = new SchemaObject({\n    id: id,\n    schema: schema,\n    localRefs: localRefs,\n    cacheKey: cacheKey,\n    meta: meta\n  });\n\n  if (id[0] != '#' && shouldAddSchema) this._refs[id] = schemaObj;\n  this._cache.put(cacheKey, schemaObj);\n\n  if (willValidate && recursiveMeta) this.validateSchema(schema, true);\n\n  return schemaObj;\n}\n\n\n/* @this   Ajv */\nfunction _compile(schemaObj, root) {\n  if (schemaObj.compiling) {\n    schemaObj.validate = callValidate;\n    callValidate.schema = schemaObj.schema;\n    callValidate.errors = null;\n    callValidate.root = root ? root : callValidate;\n    if (schemaObj.schema.$async === true)\n      callValidate.$async = true;\n    return callValidate;\n  }\n  schemaObj.compiling = true;\n\n  var currentOpts;\n  if (schemaObj.meta) {\n    currentOpts = this._opts;\n    this._opts = this._metaOpts;\n  }\n\n  var v;\n  try { v = compileSchema.call(this, schemaObj.schema, root, schemaObj.localRefs); }\n  catch(e) {\n    delete schemaObj.validate;\n    throw e;\n  }\n  finally {\n    schemaObj.compiling = false;\n    if (schemaObj.meta) this._opts = currentOpts;\n  }\n\n  schemaObj.validate = v;\n  schemaObj.refs = v.refs;\n  schemaObj.refVal = v.refVal;\n  schemaObj.root = v.root;\n  return v;\n\n\n  /* @this   {*} - custom context, see passContext option */\n  function callValidate() {\n    /* jshint validthis: true */\n    var _validate = schemaObj.validate;\n    var result = _validate.apply(this, arguments);\n    callValidate.errors = _validate.errors;\n    return result;\n  }\n}\n\n\nfunction chooseGetId(opts) {\n  switch (opts.schemaId) {\n    case 'auto': return _get$IdOrId;\n    case 'id': return _getId;\n    default: return _get$Id;\n  }\n}\n\n/* @this   Ajv */\nfunction _getId(schema) {\n  if (schema.$id) this.logger.warn('schema $id ignored', schema.$id);\n  return schema.id;\n}\n\n/* @this   Ajv */\nfunction _get$Id(schema) {\n  if (schema.id) this.logger.warn('schema id ignored', schema.id);\n  return schema.$id;\n}\n\n\nfunction _get$IdOrId(schema) {\n  if (schema.$id && schema.id && schema.$id != schema.id)\n    throw new Error('schema $id is different from id');\n  return schema.$id || schema.id;\n}\n\n\n/**\n * Convert array of error message objects to string\n * @this   Ajv\n * @param  {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used.\n * @param  {Object} options optional options with properties `separator` and `dataVar`.\n * @return {String} human readable string with all errors descriptions\n */\nfunction errorsText(errors, options) {\n  errors = errors || this.errors;\n  if (!errors) return 'No errors';\n  options = options || {};\n  var separator = options.separator === undefined ? ', ' : options.separator;\n  var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\n\n  var text = '';\n  for (var i=0; i<errors.length; i++) {\n    var e = errors[i];\n    if (e) text += dataVar + e.dataPath + ' ' + e.message + separator;\n  }\n  return text.slice(0, -separator.length);\n}\n\n\n/**\n * Add custom format\n * @this   Ajv\n * @param {String} name format name\n * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)\n * @return {Ajv} this for method chaining\n */\nfunction addFormat(name, format) {\n  if (typeof format == 'string') format = new RegExp(format);\n  this._formats[name] = format;\n  return this;\n}\n\n\nfunction addDefaultMetaSchema(self) {\n  var $dataSchema;\n  if (self._opts.$data) {\n    $dataSchema = require('./refs/data.json');\n    self.addMetaSchema($dataSchema, $dataSchema.$id, true);\n  }\n  if (self._opts.meta === false) return;\n  var metaSchema = require('./refs/json-schema-draft-07.json');\n  if (self._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA);\n  self.addMetaSchema(metaSchema, META_SCHEMA_ID, true);\n  self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID;\n}\n\n\nfunction addInitialSchemas(self) {\n  var optsSchemas = self._opts.schemas;\n  if (!optsSchemas) return;\n  if (Array.isArray(optsSchemas)) self.addSchema(optsSchemas);\n  else for (var key in optsSchemas) self.addSchema(optsSchemas[key], key);\n}\n\n\nfunction addInitialFormats(self) {\n  for (var name in self._opts.formats) {\n    var format = self._opts.formats[name];\n    self.addFormat(name, format);\n  }\n}\n\n\nfunction addInitialKeywords(self) {\n  for (var name in self._opts.keywords) {\n    var keyword = self._opts.keywords[name];\n    self.addKeyword(name, keyword);\n  }\n}\n\n\nfunction checkUnique(self, id) {\n  if (self._schemas[id] || self._refs[id])\n    throw new Error('schema with key or id \"' + id + '\" already exists');\n}\n\n\nfunction getMetaSchemaOptions(self) {\n  var metaOpts = util.copy(self._opts);\n  for (var i=0; i<META_IGNORE_OPTIONS.length; i++)\n    delete metaOpts[META_IGNORE_OPTIONS[i]];\n  return metaOpts;\n}\n\n\nfunction setLogger(self) {\n  var logger = self._opts.logger;\n  if (logger === false) {\n    self.logger = {log: noop, warn: noop, error: noop};\n  } else {\n    if (logger === undefined) logger = console;\n    if (!(typeof logger == 'object' && logger.log && logger.warn && logger.error))\n      throw new Error('logger must implement log, warn and error methods');\n    self.logger = logger;\n  }\n}\n\n\nfunction noop() {}\n","import { mergeCapabilities, Protocol, } from \"../shared/protocol.js\";\nimport { CreateMessageResultSchema, ElicitResultSchema, EmptyResultSchema, InitializedNotificationSchema, InitializeRequestSchema, LATEST_PROTOCOL_VERSION, ListRootsResultSchema, McpError, ErrorCode, SUPPORTED_PROTOCOL_VERSIONS, } from \"../types.js\";\nimport Ajv from \"ajv\";\n/**\n * An MCP server on top of a pluggable transport.\n *\n * This server will automatically respond to the initialization flow as initiated from the client.\n *\n * To use with custom types, extend the base Request/Notification/Result types and pass them as type parameters:\n *\n * ```typescript\n * // Custom schemas\n * const CustomRequestSchema = RequestSchema.extend({...})\n * const CustomNotificationSchema = NotificationSchema.extend({...})\n * const CustomResultSchema = ResultSchema.extend({...})\n *\n * // Type aliases\n * type CustomRequest = z.infer<typeof CustomRequestSchema>\n * type CustomNotification = z.infer<typeof CustomNotificationSchema>\n * type CustomResult = z.infer<typeof CustomResultSchema>\n *\n * // Create typed server\n * const server = new Server<CustomRequest, CustomNotification, CustomResult>({\n *   name: \"CustomServer\",\n *   version: \"1.0.0\"\n * })\n * ```\n */\nexport class Server extends Protocol {\n    /**\n     * Initializes this server with the given name and version information.\n     */\n    constructor(_serverInfo, options) {\n        var _a;\n        super(options);\n        this._serverInfo = _serverInfo;\n        this._capabilities = (_a = options === null || options === void 0 ? void 0 : options.capabilities) !== null && _a !== void 0 ? _a : {};\n        this._instructions = options === null || options === void 0 ? void 0 : options.instructions;\n        this.setRequestHandler(InitializeRequestSchema, (request) => this._oninitialize(request));\n        this.setNotificationHandler(InitializedNotificationSchema, () => { var _a; return (_a = this.oninitialized) === null || _a === void 0 ? void 0 : _a.call(this); });\n    }\n    /**\n     * Registers new capabilities. This can only be called before connecting to a transport.\n     *\n     * The new capabilities will be merged with any existing capabilities previously given (e.g., at initialization).\n     */\n    registerCapabilities(capabilities) {\n        if (this.transport) {\n            throw new Error(\"Cannot register capabilities after connecting to transport\");\n        }\n        this._capabilities = mergeCapabilities(this._capabilities, capabilities);\n    }\n    assertCapabilityForMethod(method) {\n        var _a, _b, _c;\n        switch (method) {\n            case \"sampling/createMessage\":\n                if (!((_a = this._clientCapabilities) === null || _a === void 0 ? void 0 : _a.sampling)) {\n                    throw new Error(`Client does not support sampling (required for ${method})`);\n                }\n                break;\n            case \"elicitation/create\":\n                if (!((_b = this._clientCapabilities) === null || _b === void 0 ? void 0 : _b.elicitation)) {\n                    throw new Error(`Client does not support elicitation (required for ${method})`);\n                }\n                break;\n            case \"roots/list\":\n                if (!((_c = this._clientCapabilities) === null || _c === void 0 ? void 0 : _c.roots)) {\n                    throw new Error(`Client does not support listing roots (required for ${method})`);\n                }\n                break;\n            case \"ping\":\n                // No specific capability required for ping\n                break;\n        }\n    }\n    assertNotificationCapability(method) {\n        switch (method) {\n            case \"notifications/message\":\n                if (!this._capabilities.logging) {\n                    throw new Error(`Server does not support logging (required for ${method})`);\n                }\n                break;\n            case \"notifications/resources/updated\":\n            case \"notifications/resources/list_changed\":\n                if (!this._capabilities.resources) {\n                    throw new Error(`Server does not support notifying about resources (required for ${method})`);\n                }\n                break;\n            case \"notifications/tools/list_changed\":\n                if (!this._capabilities.tools) {\n                    throw new Error(`Server does not support notifying of tool list changes (required for ${method})`);\n                }\n                break;\n            case \"notifications/prompts/list_changed\":\n                if (!this._capabilities.prompts) {\n                    throw new Error(`Server does not support notifying of prompt list changes (required for ${method})`);\n                }\n                break;\n            case \"notifications/cancelled\":\n                // Cancellation notifications are always allowed\n                break;\n            case \"notifications/progress\":\n                // Progress notifications are always allowed\n                break;\n        }\n    }\n    assertRequestHandlerCapability(method) {\n        switch (method) {\n            case \"sampling/createMessage\":\n                if (!this._capabilities.sampling) {\n                    throw new Error(`Server does not support sampling (required for ${method})`);\n                }\n                break;\n            case \"logging/setLevel\":\n                if (!this._capabilities.logging) {\n                    throw new Error(`Server does not support logging (required for ${method})`);\n                }\n                break;\n            case \"prompts/get\":\n            case \"prompts/list\":\n                if (!this._capabilities.prompts) {\n                    throw new Error(`Server does not support prompts (required for ${method})`);\n                }\n                break;\n            case \"resources/list\":\n            case \"resources/templates/list\":\n            case \"resources/read\":\n                if (!this._capabilities.resources) {\n                    throw new Error(`Server does not support resources (required for ${method})`);\n                }\n                break;\n            case \"tools/call\":\n            case \"tools/list\":\n                if (!this._capabilities.tools) {\n                    throw new Error(`Server does not support tools (required for ${method})`);\n                }\n                break;\n            case \"ping\":\n            case \"initialize\":\n                // No specific capability required for these methods\n                break;\n        }\n    }\n    async _oninitialize(request) {\n        const requestedVersion = request.params.protocolVersion;\n        this._clientCapabilities = request.params.capabilities;\n        this._clientVersion = request.params.clientInfo;\n        const protocolVersion = SUPPORTED_PROTOCOL_VERSIONS.includes(requestedVersion)\n            ? requestedVersion\n            : LATEST_PROTOCOL_VERSION;\n        return {\n            protocolVersion,\n            capabilities: this.getCapabilities(),\n            serverInfo: this._serverInfo,\n            ...(this._instructions && { instructions: this._instructions }),\n        };\n    }\n    /**\n     * After initialization has completed, this will be populated with the client's reported capabilities.\n     */\n    getClientCapabilities() {\n        return this._clientCapabilities;\n    }\n    /**\n     * After initialization has completed, this will be populated with information about the client's name and version.\n     */\n    getClientVersion() {\n        return this._clientVersion;\n    }\n    getCapabilities() {\n        return this._capabilities;\n    }\n    async ping() {\n        return this.request({ method: \"ping\" }, EmptyResultSchema);\n    }\n    async createMessage(params, options) {\n        return this.request({ method: \"sampling/createMessage\", params }, CreateMessageResultSchema, options);\n    }\n    async elicitInput(params, options) {\n        const result = await this.request({ method: \"elicitation/create\", params }, ElicitResultSchema, options);\n        // Validate the response content against the requested schema if action is \"accept\"\n        if (result.action === \"accept\" && result.content) {\n            try {\n                const ajv = new Ajv();\n                const validate = ajv.compile(params.requestedSchema);\n                const isValid = validate(result.content);\n                if (!isValid) {\n                    throw new McpError(ErrorCode.InvalidParams, `Elicitation response content does not match requested schema: ${ajv.errorsText(validate.errors)}`);\n                }\n            }\n            catch (error) {\n                if (error instanceof McpError) {\n                    throw error;\n                }\n                throw new McpError(ErrorCode.InternalError, `Error validating elicitation response: ${error}`);\n            }\n        }\n        return result;\n    }\n    async listRoots(params, options) {\n        return this.request({ method: \"roots/list\", params }, ListRootsResultSchema, options);\n    }\n    async sendLoggingMessage(params) {\n        return this.notification({ method: \"notifications/message\", params });\n    }\n    async sendResourceUpdated(params) {\n        return this.notification({\n            method: \"notifications/resources/updated\",\n            params,\n        });\n    }\n    async sendResourceListChanged() {\n        return this.notification({\n            method: \"notifications/resources/list_changed\",\n        });\n    }\n    async sendToolListChanged() {\n        return this.notification({ method: \"notifications/tools/list_changed\" });\n    }\n    async sendPromptListChanged() {\n        return this.notification({ method: \"notifications/prompts/list_changed\" });\n    }\n}\n//# sourceMappingURL=index.js.map","export var McpZodTypeKind;\n(function (McpZodTypeKind) {\n    McpZodTypeKind[\"Completable\"] = \"McpCompletable\";\n})(McpZodTypeKind || (McpZodTypeKind = {}));\nexport class Completable {\n    // ZodType compatibility properties\n    get _output() {\n        return this._wrappedType._output;\n    }\n    get _input() {\n        return this._wrappedType._input;\n    }\n    get def() {\n        return this._wrappedType.def;\n    }\n    get type() {\n        return this._wrappedType.type;\n    }\n    get _zod() {\n        return this._wrappedType._zod;\n    }\n    get \"~standard\"() {\n        return this._wrappedType[\"~standard\"];\n    }\n    constructor(type, complete) {\n        this._wrappedType = type;\n        this._def = {\n            type: type._def.type,\n            complete,\n            typeName: McpZodTypeKind.Completable,\n            wrappedType: type,\n        };\n    }\n    // Core parsing methods\n    parse(input) {\n        return this._wrappedType.parse(input);\n    }\n    safeParse(input) {\n        return this._wrappedType.safeParse(input);\n    }\n    parseAsync(input) {\n        return this._wrappedType.parseAsync(input);\n    }\n    safeParseAsync(input) {\n        return this._wrappedType.safeParseAsync(input);\n    }\n    // Schema manipulation methods\n    optional() {\n        return new Completable(this._wrappedType.optional(), this._def.complete);\n    }\n    nullable() {\n        return new Completable(this._wrappedType.nullable(), this._def.complete);\n    }\n    nullish() {\n        return new Completable(this._wrappedType.nullish(), this._def.complete);\n    }\n    nonoptional() {\n        return new Completable(this._wrappedType.nonoptional(), this._def.complete);\n    }\n    array() {\n        return this._wrappedType.array();\n    }\n    or(schema) {\n        return this._wrappedType.or(schema);\n    }\n    and(schema) {\n        return this._wrappedType.and(schema);\n    }\n    // Transformation methods\n    transform(transformer) {\n        return this._wrappedType.transform(transformer);\n    }\n    default(defaultValue) {\n        return new Completable(this._wrappedType.default(defaultValue), this._def.complete);\n    }\n    catch(catchValue) {\n        return new Completable(this._wrappedType.catch(catchValue), this._def.complete);\n    }\n    pipe(schema) {\n        return this._wrappedType.pipe(schema);\n    }\n    // Additional ZodType v4 methods\n    register(registry, ...meta) {\n        return this._wrappedType.register(registry, ...meta);\n    }\n    spa(input) {\n        return this._wrappedType.spa(input);\n    }\n    overwrite(overrides) {\n        return new Completable(this._wrappedType.overwrite(overrides), this._def.complete);\n    }\n    prefault(prefaultValue) {\n        return new Completable(this._wrappedType.prefault(prefaultValue), this._def.complete);\n    }\n    // Refinement methods\n    refine(refinement, message) {\n        return this._wrappedType.refine(refinement, message);\n    }\n    superRefine(refinement) {\n        return this._wrappedType.superRefine(refinement);\n    }\n    // Utility methods\n    readonly() {\n        return this._wrappedType.readonly();\n    }\n    describe(description) {\n        return new Completable(this._wrappedType.describe(description), this._def.complete);\n    }\n    meta(meta) {\n        return this._wrappedType.meta(meta);\n    }\n    brand() {\n        return this._wrappedType.brand();\n    }\n    check(check) {\n        return this._wrappedType.check(check);\n    }\n    clone() {\n        return new Completable(this._wrappedType.clone(), this._def.complete);\n    }\n    // Status check methods\n    isOptional() {\n        return this._wrappedType.isOptional();\n    }\n    isNullable() {\n        return this._wrappedType.isNullable();\n    }\n    // Utility getters\n    get description() {\n        return this._wrappedType.description;\n    }\n    // Completable-specific methods\n    unwrap() {\n        return this._def.wrappedType;\n    }\n    async complete(value, context) {\n        return this._def.complete(value, context);\n    }\n}\nCompletable.create = (type, complete) => {\n    return new Completable(type, complete);\n};\nexport function completable(schema, complete) {\n    return Completable.create(schema, complete);\n}\n//# sourceMappingURL=completable.js.map","// Claude-authored implementation of RFC 6570 URI Templates\nconst MAX_TEMPLATE_LENGTH = 1000000; // 1MB\nconst MAX_VARIABLE_LENGTH = 1000000; // 1MB\nconst MAX_TEMPLATE_EXPRESSIONS = 10000;\nconst MAX_REGEX_LENGTH = 1000000; // 1MB\nexport class UriTemplate {\n    /**\n     * Returns true if the given string contains any URI template expressions.\n     * A template expression is a sequence of characters enclosed in curly braces,\n     * like {foo} or {?bar}.\n     */\n    static isTemplate(str) {\n        // Look for any sequence of characters between curly braces\n        // that isn't just whitespace\n        return /\\{[^}\\s]+\\}/.test(str);\n    }\n    static validateLength(str, max, context) {\n        if (str.length > max) {\n            throw new Error(`${context} exceeds maximum length of ${max} characters (got ${str.length})`);\n        }\n    }\n    get variableNames() {\n        return this.parts.flatMap((part) => typeof part === 'string' ? [] : part.names);\n    }\n    constructor(template) {\n        UriTemplate.validateLength(template, MAX_TEMPLATE_LENGTH, \"Template\");\n        this.template = template;\n        this.parts = this.parse(template);\n    }\n    toString() {\n        return this.template;\n    }\n    parse(template) {\n        const parts = [];\n        let currentText = \"\";\n        let i = 0;\n        let expressionCount = 0;\n        while (i < template.length) {\n            if (template[i] === \"{\") {\n                if (currentText) {\n                    parts.push(currentText);\n                    currentText = \"\";\n                }\n                const end = template.indexOf(\"}\", i);\n                if (end === -1)\n                    throw new Error(\"Unclosed template expression\");\n                expressionCount++;\n                if (expressionCount > MAX_TEMPLATE_EXPRESSIONS) {\n                    throw new Error(`Template contains too many expressions (max ${MAX_TEMPLATE_EXPRESSIONS})`);\n                }\n                const expr = template.slice(i + 1, end);\n                const operator = this.getOperator(expr);\n                const exploded = expr.includes(\"*\");\n                const names = this.getNames(expr);\n                const name = names[0];\n                // Validate variable name length\n                for (const name of names) {\n                    UriTemplate.validateLength(name, MAX_VARIABLE_LENGTH, \"Variable name\");\n                }\n                parts.push({ name, operator, names, exploded });\n                i = end + 1;\n            }\n            else {\n                currentText += template[i];\n                i++;\n            }\n        }\n        if (currentText) {\n            parts.push(currentText);\n        }\n        return parts;\n    }\n    getOperator(expr) {\n        const operators = [\"+\", \"#\", \".\", \"/\", \"?\", \"&\"];\n        return operators.find((op) => expr.startsWith(op)) || \"\";\n    }\n    getNames(expr) {\n        const operator = this.getOperator(expr);\n        return expr\n            .slice(operator.length)\n            .split(\",\")\n            .map((name) => name.replace(\"*\", \"\").trim())\n            .filter((name) => name.length > 0);\n    }\n    encodeValue(value, operator) {\n        UriTemplate.validateLength(value, MAX_VARIABLE_LENGTH, \"Variable value\");\n        if (operator === \"+\" || operator === \"#\") {\n            return encodeURI(value);\n        }\n        return encodeURIComponent(value);\n    }\n    expandPart(part, variables) {\n        if (part.operator === \"?\" || part.operator === \"&\") {\n            const pairs = part.names\n                .map((name) => {\n                const value = variables[name];\n                if (value === undefined)\n                    return \"\";\n                const encoded = Array.isArray(value)\n                    ? value.map((v) => this.encodeValue(v, part.operator)).join(\",\")\n                    : this.encodeValue(value.toString(), part.operator);\n                return `${name}=${encoded}`;\n            })\n                .filter((pair) => pair.length > 0);\n            if (pairs.length === 0)\n                return \"\";\n            const separator = part.operator === \"?\" ? \"?\" : \"&\";\n            return separator + pairs.join(\"&\");\n        }\n        if (part.names.length > 1) {\n            const values = part.names\n                .map((name) => variables[name])\n                .filter((v) => v !== undefined);\n            if (values.length === 0)\n                return \"\";\n            return values.map((v) => (Array.isArray(v) ? v[0] : v)).join(\",\");\n        }\n        const value = variables[part.name];\n        if (value === undefined)\n            return \"\";\n        const values = Array.isArray(value) ? value : [value];\n        const encoded = values.map((v) => this.encodeValue(v, part.operator));\n        switch (part.operator) {\n            case \"\":\n                return encoded.join(\",\");\n            case \"+\":\n                return encoded.join(\",\");\n            case \"#\":\n                return \"#\" + encoded.join(\",\");\n            case \".\":\n                return \".\" + encoded.join(\".\");\n            case \"/\":\n                return \"/\" + encoded.join(\"/\");\n            default:\n                return encoded.join(\",\");\n        }\n    }\n    expand(variables) {\n        let result = \"\";\n        let hasQueryParam = false;\n        for (const part of this.parts) {\n            if (typeof part === \"string\") {\n                result += part;\n                continue;\n            }\n            const expanded = this.expandPart(part, variables);\n            if (!expanded)\n                continue;\n            // Convert ? to & if we already have a query parameter\n            if ((part.operator === \"?\" || part.operator === \"&\") && hasQueryParam) {\n                result += expanded.replace(\"?\", \"&\");\n            }\n            else {\n                result += expanded;\n            }\n            if (part.operator === \"?\" || part.operator === \"&\") {\n                hasQueryParam = true;\n            }\n        }\n        return result;\n    }\n    escapeRegExp(str) {\n        return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    }\n    partToRegExp(part) {\n        const patterns = [];\n        // Validate variable name length for matching\n        for (const name of part.names) {\n            UriTemplate.validateLength(name, MAX_VARIABLE_LENGTH, \"Variable name\");\n        }\n        if (part.operator === \"?\" || part.operator === \"&\") {\n            for (let i = 0; i < part.names.length; i++) {\n                const name = part.names[i];\n                const prefix = i === 0 ? \"\\\\\" + part.operator : \"&\";\n                patterns.push({\n                    pattern: prefix + this.escapeRegExp(name) + \"=([^&]+)\",\n                    name,\n                });\n            }\n            return patterns;\n        }\n        let pattern;\n        const name = part.name;\n        switch (part.operator) {\n            case \"\":\n                pattern = part.exploded ? \"([^/]+(?:,[^/]+)*)\" : \"([^/,]+)\";\n                break;\n            case \"+\":\n            case \"#\":\n                pattern = \"(.+)\";\n                break;\n            case \".\":\n                pattern = \"\\\\.([^/,]+)\";\n                break;\n            case \"/\":\n                pattern = \"/\" + (part.exploded ? \"([^/]+(?:,[^/]+)*)\" : \"([^/,]+)\");\n                break;\n            default:\n                pattern = \"([^/]+)\";\n        }\n        patterns.push({ pattern, name });\n        return patterns;\n    }\n    match(uri) {\n        UriTemplate.validateLength(uri, MAX_TEMPLATE_LENGTH, \"URI\");\n        let pattern = \"^\";\n        const names = [];\n        for (const part of this.parts) {\n            if (typeof part === \"string\") {\n                pattern += this.escapeRegExp(part);\n            }\n            else {\n                const patterns = this.partToRegExp(part);\n                for (const { pattern: partPattern, name } of patterns) {\n                    pattern += partPattern;\n                    names.push({ name, exploded: part.exploded });\n                }\n            }\n        }\n        pattern += \"$\";\n        UriTemplate.validateLength(pattern, MAX_REGEX_LENGTH, \"Generated regex pattern\");\n        const regex = new RegExp(pattern);\n        const match = uri.match(regex);\n        if (!match)\n            return null;\n        const result = {};\n        for (let i = 0; i < names.length; i++) {\n            const { name, exploded } = names[i];\n            const value = match[i + 1];\n            const cleanName = name.replace(\"*\", \"\");\n            if (exploded && value.includes(\",\")) {\n                result[cleanName] = value.split(\",\");\n            }\n            else {\n                result[cleanName] = value;\n            }\n        }\n        return result;\n    }\n}\n//# sourceMappingURL=uriTemplate.js.map","import { Server } from \"./index.js\";\nimport { z, } from \"zod\";\nimport { McpError, ErrorCode, ListResourceTemplatesRequestSchema, ReadResourceRequestSchema, ListToolsRequestSchema, CallToolRequestSchema, ListResourcesRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, CompleteRequestSchema, } from \"../types.js\";\nimport { Completable } from \"./completable.js\";\nimport { UriTemplate } from \"../shared/uriTemplate.js\";\n/**\n * High-level MCP server that provides a simpler API for working with resources, tools, and prompts.\n * For advanced usage (like sending notifications or setting custom request handlers), use the underlying\n * Server instance available via the `server` property.\n */\nexport class McpServer {\n    constructor(serverInfo, options) {\n        this._registeredResources = {};\n        this._registeredResourceTemplates = {};\n        this._registeredTools = {};\n        this._registeredPrompts = {};\n        this._toolHandlersInitialized = false;\n        this._completionHandlerInitialized = false;\n        this._resourceHandlersInitialized = false;\n        this._promptHandlersInitialized = false;\n        this.server = new Server(serverInfo, options);\n    }\n    /**\n     * Attaches to the given transport, starts it, and starts listening for messages.\n     *\n     * The `server` object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.\n     */\n    async connect(transport) {\n        return await this.server.connect(transport);\n    }\n    /**\n     * Closes the connection.\n     */\n    async close() {\n        await this.server.close();\n    }\n    setToolRequestHandlers() {\n        if (this._toolHandlersInitialized) {\n            return;\n        }\n        this.server.assertCanSetRequestHandler(ListToolsRequestSchema.shape.method.value);\n        this.server.assertCanSetRequestHandler(CallToolRequestSchema.shape.method.value);\n        this.server.registerCapabilities({\n            tools: {\n                listChanged: true,\n            },\n        });\n        this.server.setRequestHandler(ListToolsRequestSchema, () => ({\n            tools: Object.entries(this._registeredTools)\n                .filter(([, tool]) => tool.enabled)\n                .map(([name, tool]) => {\n                const toolDefinition = {\n                    name,\n                    title: tool.title,\n                    description: tool.description,\n                    inputSchema: tool.inputSchema\n                        ? safeToJSONSchema(tool.inputSchema)\n                        : EMPTY_OBJECT_JSON_SCHEMA,\n                    annotations: tool.annotations,\n                };\n                if (tool.outputSchema) {\n                    toolDefinition.outputSchema = safeToJSONSchema(tool.outputSchema);\n                }\n                return toolDefinition;\n            }),\n        }));\n        this.server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {\n            const tool = this._registeredTools[request.params.name];\n            if (!tool) {\n                throw new McpError(ErrorCode.InvalidParams, `Tool ${request.params.name} not found`);\n            }\n            if (!tool.enabled) {\n                throw new McpError(ErrorCode.InvalidParams, `Tool ${request.params.name} disabled`);\n            }\n            let result;\n            if (tool.inputSchema) {\n                const parseResult = await tool.inputSchema.safeParseAsync(request.params.arguments);\n                if (!parseResult.success) {\n                    throw new McpError(ErrorCode.InvalidParams, `Invalid arguments for tool ${request.params.name}: ${parseResult.error.message}`);\n                }\n                const args = parseResult.data;\n                const cb = tool.callback;\n                try {\n                    result = await Promise.resolve(cb(args, extra));\n                }\n                catch (error) {\n                    result = {\n                        content: [\n                            {\n                                type: \"text\",\n                                text: error instanceof Error ? error.message : String(error),\n                            },\n                        ],\n                        isError: true,\n                    };\n                }\n            }\n            else {\n                const cb = tool.callback;\n                try {\n                    result = await Promise.resolve(cb(extra));\n                }\n                catch (error) {\n                    result = {\n                        content: [\n                            {\n                                type: \"text\",\n                                text: error instanceof Error ? error.message : String(error),\n                            },\n                        ],\n                        isError: true,\n                    };\n                }\n            }\n            if (tool.outputSchema && !result.isError) {\n                if (!result.structuredContent) {\n                    throw new McpError(ErrorCode.InvalidParams, `Tool ${request.params.name} has an output schema but no structured content was provided`);\n                }\n                // if the tool has an output schema, validate structured content\n                const parseResult = await tool.outputSchema.safeParseAsync(result.structuredContent);\n                if (!parseResult.success) {\n                    throw new McpError(ErrorCode.InvalidParams, `Invalid structured content for tool ${request.params.name}: ${parseResult.error.message}`);\n                }\n            }\n            return result;\n        });\n        this._toolHandlersInitialized = true;\n    }\n    setCompletionRequestHandler() {\n        if (this._completionHandlerInitialized) {\n            return;\n        }\n        this.server.assertCanSetRequestHandler(CompleteRequestSchema.shape.method.value);\n        this.server.registerCapabilities({\n            completions: {},\n        });\n        this.server.setRequestHandler(CompleteRequestSchema, async (request) => {\n            switch (request.params.ref.type) {\n                case \"ref/prompt\":\n                    return this.handlePromptCompletion(request, request.params.ref);\n                case \"ref/resource\":\n                    return this.handleResourceCompletion(request, request.params.ref);\n                default:\n                    throw new McpError(ErrorCode.InvalidParams, `Invalid completion reference: ${request.params.ref}`);\n            }\n        });\n        this._completionHandlerInitialized = true;\n    }\n    async handlePromptCompletion(request, ref) {\n        const prompt = this._registeredPrompts[ref.name];\n        if (!prompt) {\n            throw new McpError(ErrorCode.InvalidParams, `Prompt ${ref.name} not found`);\n        }\n        if (!prompt.enabled) {\n            throw new McpError(ErrorCode.InvalidParams, `Prompt ${ref.name} disabled`);\n        }\n        if (!prompt.argsSchema) {\n            return EMPTY_COMPLETION_RESULT;\n        }\n        const field = prompt.argsSchema.shape[request.params.argument.name];\n        if (!(field instanceof Completable)) {\n            return EMPTY_COMPLETION_RESULT;\n        }\n        const suggestions = await field.complete(request.params.argument.value, request.params.context);\n        return createCompletionResult(suggestions);\n    }\n    async getFieldCompletions(field, request) {\n        if (!field) {\n            return EMPTY_COMPLETION_RESULT;\n        }\n        if (!(field instanceof Completable)) {\n            return EMPTY_COMPLETION_RESULT;\n        }\n        const suggestions = await field.complete(request.params.argument.value, request.params.context);\n        return createCompletionResult(suggestions);\n    }\n    async handleResourceCompletion(request, ref) {\n        const template = Object.values(this._registeredResourceTemplates).find((t) => t.resourceTemplate.uriTemplate.toString() === ref.uri);\n        if (!template) {\n            if (this._registeredResources[ref.uri]) {\n                // Attempting to autocomplete a fixed resource URI is not an error in the spec (but probably should be).\n                return EMPTY_COMPLETION_RESULT;\n            }\n            throw new McpError(ErrorCode.InvalidParams, `Resource template ${request.params.ref.uri} not found`);\n        }\n        const completer = template.resourceTemplate.completeCallback(request.params.argument.name);\n        if (!completer) {\n            return EMPTY_COMPLETION_RESULT;\n        }\n        const suggestions = await completer(request.params.argument.value, request.params.context);\n        return createCompletionResult(suggestions);\n    }\n    setResourceRequestHandlers() {\n        if (this._resourceHandlersInitialized) {\n            return;\n        }\n        this.server.assertCanSetRequestHandler(ListResourcesRequestSchema.shape.method.value);\n        this.server.assertCanSetRequestHandler(ListResourceTemplatesRequestSchema.shape.method.value);\n        this.server.assertCanSetRequestHandler(ReadResourceRequestSchema.shape.method.value);\n        this.server.registerCapabilities({\n            resources: {\n                listChanged: true,\n            },\n        });\n        this.server.setRequestHandler(ListResourcesRequestSchema, async (request, extra) => {\n            const resources = Object.entries(this._registeredResources)\n                .filter(([_, resource]) => resource.enabled)\n                .map(([uri, resource]) => ({\n                uri,\n                name: resource.name,\n                ...resource.metadata,\n            }));\n            const templateResources = [];\n            for (const template of Object.values(this._registeredResourceTemplates)) {\n                if (!template.resourceTemplate.listCallback) {\n                    continue;\n                }\n                const result = await template.resourceTemplate.listCallback(extra);\n                for (const resource of result.resources) {\n                    templateResources.push({\n                        ...template.metadata,\n                        // the defined resource metadata should override the template metadata if present\n                        ...resource,\n                    });\n                }\n            }\n            return { resources: [...resources, ...templateResources] };\n        });\n        this.server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => {\n            const resourceTemplates = Object.entries(this._registeredResourceTemplates).map(([name, template]) => ({\n                name,\n                uriTemplate: template.resourceTemplate.uriTemplate.toString(),\n                ...template.metadata,\n            }));\n            return { resourceTemplates };\n        });\n        this.server.setRequestHandler(ReadResourceRequestSchema, async (request, extra) => {\n            const uri = new URL(request.params.uri);\n            // First check for exact resource match\n            const resource = this._registeredResources[uri.toString()];\n            if (resource) {\n                if (!resource.enabled) {\n                    throw new McpError(ErrorCode.InvalidParams, `Resource ${uri} disabled`);\n                }\n                return resource.readCallback(uri, extra);\n            }\n            // Then check templates\n            for (const template of Object.values(this._registeredResourceTemplates)) {\n                const variables = template.resourceTemplate.uriTemplate.match(uri.toString());\n                if (variables) {\n                    return template.readCallback(uri, variables, extra);\n                }\n            }\n            throw new McpError(ErrorCode.InvalidParams, `Resource ${uri} not found`);\n        });\n        this.setCompletionRequestHandler();\n        this._resourceHandlersInitialized = true;\n    }\n    setPromptRequestHandlers() {\n        if (this._promptHandlersInitialized) {\n            return;\n        }\n        this.server.assertCanSetRequestHandler(ListPromptsRequestSchema.shape.method.value);\n        this.server.assertCanSetRequestHandler(GetPromptRequestSchema.shape.method.value);\n        this.server.registerCapabilities({\n            prompts: {\n                listChanged: true,\n            },\n        });\n        this.server.setRequestHandler(ListPromptsRequestSchema, () => ({\n            prompts: Object.entries(this._registeredPrompts)\n                .filter(([, prompt]) => prompt.enabled)\n                .map(([name, prompt]) => {\n                return {\n                    name,\n                    title: prompt.title,\n                    description: prompt.description,\n                    arguments: prompt.argsSchema\n                        ? promptArgumentsFromSchema(prompt.argsSchema)\n                        : undefined,\n                };\n            }),\n        }));\n        this.server.setRequestHandler(GetPromptRequestSchema, async (request, extra) => {\n            const prompt = this._registeredPrompts[request.params.name];\n            if (!prompt) {\n                throw new McpError(ErrorCode.InvalidParams, `Prompt ${request.params.name} not found`);\n            }\n            if (!prompt.enabled) {\n                throw new McpError(ErrorCode.InvalidParams, `Prompt ${request.params.name} disabled`);\n            }\n            if (prompt.argsSchema) {\n                const parseResult = await prompt.argsSchema.safeParseAsync(request.params.arguments);\n                if (!parseResult.success) {\n                    throw new McpError(ErrorCode.InvalidParams, `Invalid arguments for prompt ${request.params.name}: ${parseResult.error.message}`);\n                }\n                const args = parseResult.data;\n                const cb = prompt.callback;\n                return await Promise.resolve(cb(args, extra));\n            }\n            else {\n                const cb = prompt.callback;\n                return await Promise.resolve(cb(extra));\n            }\n        });\n        this.setCompletionRequestHandler();\n        this._promptHandlersInitialized = true;\n    }\n    resource(name, uriOrTemplate, ...rest) {\n        let metadata;\n        if (typeof rest[0] === \"object\") {\n            metadata = rest.shift();\n        }\n        const readCallback = rest[0];\n        if (typeof uriOrTemplate === \"string\") {\n            if (this._registeredResources[uriOrTemplate]) {\n                throw new Error(`Resource ${uriOrTemplate} is already registered`);\n            }\n            const registeredResource = this._createRegisteredResource(name, undefined, uriOrTemplate, metadata, readCallback);\n            this.setResourceRequestHandlers();\n            this.sendResourceListChanged();\n            return registeredResource;\n        }\n        else {\n            if (this._registeredResourceTemplates[name]) {\n                throw new Error(`Resource template ${name} is already registered`);\n            }\n            const registeredResourceTemplate = this._createRegisteredResourceTemplate(name, undefined, uriOrTemplate, metadata, readCallback);\n            this.setResourceRequestHandlers();\n            this.sendResourceListChanged();\n            return registeredResourceTemplate;\n        }\n    }\n    registerResource(name, uriOrTemplate, config, readCallback) {\n        if (typeof uriOrTemplate === \"string\") {\n            if (this._registeredResources[uriOrTemplate]) {\n                throw new Error(`Resource ${uriOrTemplate} is already registered`);\n            }\n            const registeredResource = this._createRegisteredResource(name, config.title, uriOrTemplate, config, readCallback);\n            this.setResourceRequestHandlers();\n            this.sendResourceListChanged();\n            return registeredResource;\n        }\n        else {\n            if (this._registeredResourceTemplates[name]) {\n                throw new Error(`Resource template ${name} is already registered`);\n            }\n            const registeredResourceTemplate = this._createRegisteredResourceTemplate(name, config.title, uriOrTemplate, config, readCallback);\n            this.setResourceRequestHandlers();\n            this.sendResourceListChanged();\n            return registeredResourceTemplate;\n        }\n    }\n    _createRegisteredResource(name, title, uri, metadata, readCallback) {\n        const registeredResource = {\n            name,\n            title,\n            metadata,\n            readCallback,\n            enabled: true,\n            disable: () => registeredResource.update({ enabled: false }),\n            enable: () => registeredResource.update({ enabled: true }),\n            remove: () => registeredResource.update({ uri: null }),\n            update: (updates) => {\n                if (typeof updates.uri !== \"undefined\" && updates.uri !== uri) {\n                    delete this._registeredResources[uri];\n                    if (updates.uri)\n                        this._registeredResources[updates.uri] = registeredResource;\n                }\n                if (typeof updates.name !== \"undefined\")\n                    registeredResource.name = updates.name;\n                if (typeof updates.title !== \"undefined\")\n                    registeredResource.title = updates.title;\n                if (typeof updates.metadata !== \"undefined\")\n                    registeredResource.metadata = updates.metadata;\n                if (typeof updates.callback !== \"undefined\")\n                    registeredResource.readCallback = updates.callback;\n                if (typeof updates.enabled !== \"undefined\")\n                    registeredResource.enabled = updates.enabled;\n                this.sendResourceListChanged();\n            },\n        };\n        this._registeredResources[uri] = registeredResource;\n        return registeredResource;\n    }\n    _createRegisteredResourceTemplate(name, title, template, metadata, readCallback) {\n        const registeredResourceTemplate = {\n            resourceTemplate: template,\n            title,\n            metadata,\n            readCallback,\n            enabled: true,\n            disable: () => registeredResourceTemplate.update({ enabled: false }),\n            enable: () => registeredResourceTemplate.update({ enabled: true }),\n            remove: () => registeredResourceTemplate.update({ name: null }),\n            update: (updates) => {\n                if (typeof updates.name !== \"undefined\" && updates.name !== name) {\n                    delete this._registeredResourceTemplates[name];\n                    if (updates.name)\n                        this._registeredResourceTemplates[updates.name] =\n                            registeredResourceTemplate;\n                }\n                if (typeof updates.title !== \"undefined\")\n                    registeredResourceTemplate.title = updates.title;\n                if (typeof updates.template !== \"undefined\")\n                    registeredResourceTemplate.resourceTemplate = updates.template;\n                if (typeof updates.metadata !== \"undefined\")\n                    registeredResourceTemplate.metadata = updates.metadata;\n                if (typeof updates.callback !== \"undefined\")\n                    registeredResourceTemplate.readCallback = updates.callback;\n                if (typeof updates.enabled !== \"undefined\")\n                    registeredResourceTemplate.enabled = updates.enabled;\n                this.sendResourceListChanged();\n            },\n        };\n        this._registeredResourceTemplates[name] = registeredResourceTemplate;\n        return registeredResourceTemplate;\n    }\n    _createRegisteredPrompt(name, title, description, argsSchema, callback) {\n        const registeredPrompt = {\n            title,\n            description,\n            argsSchema: argsSchema === undefined ? undefined : z.object(argsSchema),\n            callback,\n            enabled: true,\n            disable: () => registeredPrompt.update({ enabled: false }),\n            enable: () => registeredPrompt.update({ enabled: true }),\n            remove: () => registeredPrompt.update({ name: null }),\n            update: (updates) => {\n                if (typeof updates.name !== \"undefined\" && updates.name !== name) {\n                    delete this._registeredPrompts[name];\n                    if (updates.name)\n                        this._registeredPrompts[updates.name] = registeredPrompt;\n                }\n                if (typeof updates.title !== \"undefined\")\n                    registeredPrompt.title = updates.title;\n                if (typeof updates.description !== \"undefined\")\n                    registeredPrompt.description = updates.description;\n                if (typeof updates.argsSchema !== \"undefined\")\n                    registeredPrompt.argsSchema = z.object(updates.argsSchema);\n                if (typeof updates.callback !== \"undefined\")\n                    registeredPrompt.callback = updates.callback;\n                if (typeof updates.enabled !== \"undefined\")\n                    registeredPrompt.enabled = updates.enabled;\n                this.sendPromptListChanged();\n            },\n        };\n        this._registeredPrompts[name] = registeredPrompt;\n        return registeredPrompt;\n    }\n    _createRegisteredTool(name, title, description, inputSchema, outputSchema, annotations, callback) {\n        const registeredTool = {\n            title,\n            description,\n            inputSchema: inputSchema === undefined\n                ? undefined\n                : isZodTypeLike(inputSchema)\n                    ? inputSchema\n                    : z.object(inputSchema),\n            outputSchema: outputSchema === undefined\n                ? undefined\n                : isZodTypeLike(outputSchema)\n                    ? outputSchema\n                    : z.object(outputSchema),\n            annotations,\n            callback,\n            enabled: true,\n            disable: () => registeredTool.update({ enabled: false }),\n            enable: () => registeredTool.update({ enabled: true }),\n            remove: () => registeredTool.update({ name: null }),\n            update: (updates) => {\n                if (typeof updates.name !== \"undefined\" && updates.name !== name) {\n                    delete this._registeredTools[name];\n                    if (updates.name)\n                        this._registeredTools[updates.name] = registeredTool;\n                }\n                if (typeof updates.title !== \"undefined\")\n                    registeredTool.title = updates.title;\n                if (typeof updates.description !== \"undefined\")\n                    registeredTool.description = updates.description;\n                if (typeof updates.paramsSchema !== \"undefined\")\n                    registeredTool.inputSchema = z.object(updates.paramsSchema);\n                if (typeof updates.callback !== \"undefined\")\n                    registeredTool.callback = updates.callback;\n                if (typeof updates.annotations !== \"undefined\")\n                    registeredTool.annotations = updates.annotations;\n                if (typeof updates.enabled !== \"undefined\")\n                    registeredTool.enabled = updates.enabled;\n                this.sendToolListChanged();\n            },\n        };\n        this._registeredTools[name] = registeredTool;\n        this.setToolRequestHandlers();\n        this.sendToolListChanged();\n        return registeredTool;\n    }\n    /**\n     * tool() implementation. Parses arguments passed to overrides defined above.\n     */\n    tool(name, ...rest) {\n        if (this._registeredTools[name]) {\n            throw new Error(`Tool ${name} is already registered`);\n        }\n        let description;\n        let inputSchema;\n        let outputSchema;\n        let annotations;\n        // Tool properties are passed as separate arguments, with omissions allowed.\n        // Support for this style is frozen as of protocol version 2025-03-26. Future additions\n        // to tool definition should *NOT* be added.\n        if (typeof rest[0] === \"string\") {\n            description = rest.shift();\n        }\n        // Handle the different overload combinations\n        if (rest.length > 1) {\n            // We have at least one more arg before the callback\n            const firstArg = rest[0];\n            if (isZodRawShape(firstArg)) {\n                // We have a params schema as the first arg\n                inputSchema = rest.shift();\n                // Check if the next arg is potentially annotations\n                if (rest.length > 1 &&\n                    typeof rest[0] === \"object\" &&\n                    rest[0] !== null &&\n                    !isZodRawShape(rest[0])) {\n                    // Case: tool(name, paramsSchema, annotations, cb)\n                    // Or: tool(name, description, paramsSchema, annotations, cb)\n                    annotations = rest.shift();\n                }\n            }\n            else if (typeof firstArg === \"object\" && firstArg !== null) {\n                // Not a ZodRawShape, so must be annotations in this position\n                // Case: tool(name, annotations, cb)\n                // Or: tool(name, description, annotations, cb)\n                annotations = rest.shift();\n            }\n        }\n        const callback = rest[0];\n        return this._createRegisteredTool(name, undefined, description, inputSchema, outputSchema, annotations, callback);\n    }\n    /**\n     * Registers a tool with a config object and callback.\n     */\n    registerTool(name, config, cb) {\n        if (this._registeredTools[name]) {\n            throw new Error(`Tool ${name} is already registered`);\n        }\n        const { title, description, inputSchema, outputSchema, annotations } = config;\n        return this._createRegisteredTool(name, title, description, inputSchema, outputSchema, annotations, cb);\n    }\n    prompt(name, ...rest) {\n        if (this._registeredPrompts[name]) {\n            throw new Error(`Prompt ${name} is already registered`);\n        }\n        let description;\n        if (typeof rest[0] === \"string\") {\n            description = rest.shift();\n        }\n        let argsSchema;\n        if (rest.length > 1) {\n            argsSchema = rest.shift();\n        }\n        const cb = rest[0];\n        const registeredPrompt = this._createRegisteredPrompt(name, undefined, description, argsSchema, cb);\n        this.setPromptRequestHandlers();\n        this.sendPromptListChanged();\n        return registeredPrompt;\n    }\n    /**\n     * Registers a prompt with a config object and callback.\n     */\n    registerPrompt(name, config, cb) {\n        if (this._registeredPrompts[name]) {\n            throw new Error(`Prompt ${name} is already registered`);\n        }\n        const { title, description, argsSchema } = config;\n        const registeredPrompt = this._createRegisteredPrompt(name, title, description, argsSchema, cb);\n        this.setPromptRequestHandlers();\n        this.sendPromptListChanged();\n        return registeredPrompt;\n    }\n    /**\n     * Checks if the server is connected to a transport.\n     * @returns True if the server is connected\n     */\n    isConnected() {\n        return this.server.transport !== undefined;\n    }\n    /**\n     * Sends a resource list changed event to the client, if connected.\n     */\n    sendResourceListChanged() {\n        if (this.isConnected()) {\n            this.server.sendResourceListChanged();\n        }\n    }\n    /**\n     * Sends a tool list changed event to the client, if connected.\n     */\n    sendToolListChanged() {\n        if (this.isConnected()) {\n            this.server.sendToolListChanged();\n        }\n    }\n    /**\n     * Sends a prompt list changed event to the client, if connected.\n     */\n    sendPromptListChanged() {\n        if (this.isConnected()) {\n            this.server.sendPromptListChanged();\n        }\n    }\n}\n/**\n * A resource template combines a URI pattern with optional functionality to enumerate\n * all resources matching that pattern.\n */\nexport class ResourceTemplate {\n    constructor(uriTemplate, _callbacks) {\n        this._callbacks = _callbacks;\n        this._uriTemplate =\n            typeof uriTemplate === \"string\"\n                ? new UriTemplate(uriTemplate)\n                : uriTemplate;\n    }\n    /**\n     * Gets the URI template pattern.\n     */\n    get uriTemplate() {\n        return this._uriTemplate;\n    }\n    /**\n     * Gets the list callback, if one was provided.\n     */\n    get listCallback() {\n        return this._callbacks.list;\n    }\n    /**\n     * Gets the callback for completing a specific URI template variable, if one was provided.\n     */\n    completeCallback(variable) {\n        var _a;\n        return (_a = this._callbacks.complete) === null || _a === void 0 ? void 0 : _a[variable];\n    }\n}\nconst EMPTY_OBJECT_JSON_SCHEMA = {\n    type: \"object\",\n    properties: {},\n};\n// Helper to safely generate JSON schema from Zod schemas\nfunction safeToJSONSchema(schema) {\n    try {\n        if (!schema)\n            return EMPTY_OBJECT_JSON_SCHEMA;\n        return z.toJSONSchema(schema);\n    }\n    catch (error) {\n        console.error(\"JSON Schema generation failed:\", error);\n        return EMPTY_OBJECT_JSON_SCHEMA;\n    }\n}\n// Helper to check if an object is a Zod schema (ZodRawShape)\nfunction isZodRawShape(obj) {\n    if (typeof obj !== \"object\" || obj === null)\n        return false;\n    const isEmptyObject = Object.keys(obj).length === 0;\n    // Filter out the ~standard property when checking values (Zod v4 compatibility)\n    const filteredValues = Object.entries(obj)\n        .filter(([key]) => key !== \"~standard\")\n        .map(([, value]) => value);\n    // Check if object is empty or at least one property (excluding ~standard) is a ZodType instance\n    // Note: use heuristic check to avoid instanceof failure across different Zod versions\n    return isEmptyObject || filteredValues.some(isZodTypeLike);\n}\nfunction isZodTypeLike(value) {\n    return (value !== null &&\n        typeof value === \"object\" &&\n        \"parse\" in value &&\n        typeof value.parse === \"function\" &&\n        \"safeParse\" in value &&\n        typeof value.safeParse === \"function\");\n}\nfunction promptArgumentsFromSchema(schema) {\n    return Object.entries(schema.shape).map(([name, field]) => {\n        var _a, _b, _c;\n        return ({\n            name,\n            description: field.description,\n            required: !((_c = (_b = (_a = field).isOptional) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : false),\n        });\n    });\n}\nfunction createCompletionResult(suggestions) {\n    const filteredSuggestions = suggestions.filter((s) => s !== undefined);\n    return {\n        completion: {\n            values: filteredSuggestions.slice(0, 100),\n            total: filteredSuggestions.length,\n            hasMore: filteredSuggestions.length > 100,\n        },\n    };\n}\nconst EMPTY_COMPLETION_RESULT = {\n    completion: {\n        values: [],\n        hasMore: false,\n    },\n};\n//# sourceMappingURL=mcp.js.map","/**\n * MCP Lifecycle Events System\n *\n * This module provides lifecycle event hooks for MCP servers, allowing applications\n * to perform initialization, cleanup, and other lifecycle-related operations at\n * specific points in the MCP protocol flow.\n */\n\n/**\n * Base context interface shared by all lifecycle events\n */\nexport interface McpLifecycleBaseContext {\n  /** Get a parsed flag value by name */\n  getFlag(name: string): any;\n  /** MCP logger instance for this context */\n  logger: any;\n  /** Server information */\n  serverInfo: {\n    name: string;\n    version: string;\n    description?: string;\n  };\n}\n\n/**\n * Context provided during the MCP initialize request\n * This is called when a client sends the \"initialize\" request\n */\nexport interface McpInitializeContext extends McpLifecycleBaseContext {\n  /** Client information from the initialize request */\n  clientInfo: {\n    name: string;\n    version: string;\n    title?: string;\n  };\n  /** Protocol version being used */\n  protocolVersion: string;\n  /** Client capabilities */\n  clientCapabilities: Record<string, any>;\n}\n\n/**\n * Context provided after the MCP initialized notification\n * This is called when a client sends the \"initialized\" notification\n */\nexport interface McpInitializedContext extends McpLifecycleBaseContext {\n  /** Client information from the previous initialize request */\n  clientInfo: {\n    name: string;\n    version: string;\n    title?: string;\n  };\n  /** Protocol version being used */\n  protocolVersion: string;\n}\n\n/**\n * Context provided during server shutdown\n * This is called when the MCP server is being shut down\n */\nexport interface McpShutdownContext extends McpLifecycleBaseContext {\n  /** Reason for shutdown */\n  reason: \"client_disconnect\" | \"server_shutdown\" | \"error\" | \"signal\";\n  /** Optional error if shutdown was due to an error */\n  error?: Error;\n}\n\n/**\n * Lifecycle event handlers interface\n */\nexport interface McpLifecycleEvents {\n  /**\n   * Called when a client sends an \"initialize\" request\n   * This is the first lifecycle event and is ideal for:\n   * - Database connection setup\n   * - Resource initialization\n   * - Configuration validation\n   * - Authentication setup\n   */\n  onInitialize?: (context: McpInitializeContext) => Promise<void>;\n\n  /**\n   * Called when a client sends an \"initialized\" notification\n   * This indicates the client is ready for normal operations\n   * This is ideal for:\n   * - Final setup steps\n   * - Background task initialization\n   * - Health checks\n   */\n  onInitialized?: (context: McpInitializedContext) => Promise<void>;\n\n  /**\n   * Called when the MCP server is shutting down\n   * This is ideal for:\n   * - Database connection cleanup\n   * - Resource disposal\n   * - Graceful shutdown procedures\n   */\n  onShutdown?: (context: McpShutdownContext) => Promise<void>;\n}\n\n/**\n * Internal state tracking for lifecycle events\n */\nexport interface McpLifecycleState {\n  /** Whether the initialize event has been called */\n  initialized: boolean;\n  /** Whether the initialized event has been called */\n  ready: boolean;\n  /** Whether shutdown has been initiated */\n  shuttingDown: boolean;\n  /** Stored client info from initialize */\n  clientInfo?: {\n    name: string;\n    version: string;\n    title?: string;\n  };\n  /** Protocol version being used */\n  protocolVersion?: string;\n  /** Client capabilities */\n  clientCapabilities?: Record<string, any>;\n}\n\n/**\n * Lifecycle manager class for handling MCP lifecycle events\n */\nexport class McpLifecycleManager {\n  private state: McpLifecycleState = {\n    initialized: false,\n    ready: false,\n    shuttingDown: false,\n  };\n\n  private parsedArgs: any = {};\n\n  constructor(\n    private events: McpLifecycleEvents,\n    private logger: any,\n    private serverInfo: { name: string; version: string; description?: string },\n    private argParser?: any,\n  ) {}\n\n  /**\n   * Set the parsed arguments for flag access\n   */\n  setParsedArgs(parsedArgs: any): void {\n    this.parsedArgs = parsedArgs;\n  }\n\n  /**\n   * Get a flag value from parsed arguments or environment variables\n   */\n  private getFlag(name: string): any {\n    // First try parsed arguments if available\n    if (this.parsedArgs && this.parsedArgs[name] !== undefined) {\n      return this.parsedArgs[name];\n    }\n\n    // Fall back to environment variables if arg parser is available\n    if (this.argParser) {\n      const flagDef = this.argParser.getFlagDefinition(name);\n      if (flagDef) {\n        // Try environment variable\n        if (flagDef.env && process.env[flagDef.env]) {\n          return process.env[flagDef.env];\n        }\n        // Fall back to default value\n        return flagDef.defaultValue;\n      }\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Handle the initialize request\n   */\n  async handleInitialize(\n    clientInfo: { name: string; version: string; title?: string },\n    protocolVersion: string,\n    clientCapabilities: Record<string, any>,\n  ): Promise<void> {\n    if (this.state.initialized) {\n      this.logger.mcpError(\"Initialize called multiple times\");\n      return;\n    }\n\n    this.state.clientInfo = clientInfo;\n    this.state.protocolVersion = protocolVersion;\n    this.state.clientCapabilities = clientCapabilities;\n    this.state.initialized = true;\n\n    if (this.events.onInitialize) {\n      const context: McpInitializeContext = {\n        getFlag: (name: string) => this.getFlag(name),\n        logger: this.logger,\n        serverInfo: this.serverInfo,\n        clientInfo,\n        protocolVersion,\n        clientCapabilities,\n      };\n\n      try {\n        await this.events.onInitialize(context);\n        this.logger.mcpError(\"Lifecycle onInitialize completed successfully\");\n      } catch (error) {\n        this.logger.mcpError(\n          `Lifecycle onInitialize failed: ${error instanceof Error ? error.message : String(error)}`,\n        );\n        throw error;\n      }\n    }\n  }\n\n  /**\n   * Handle the initialized notification\n   */\n  async handleInitialized(): Promise<void> {\n    if (!this.state.initialized) {\n      this.logger.mcpError(\"Initialized called before initialize\");\n      return;\n    }\n\n    if (this.state.ready) {\n      this.logger.mcpError(\"Initialized called multiple times\");\n      return;\n    }\n\n    this.state.ready = true;\n\n    if (this.events.onInitialized && this.state.clientInfo) {\n      const context: McpInitializedContext = {\n        getFlag: (name: string) => this.getFlag(name),\n        logger: this.logger,\n        serverInfo: this.serverInfo,\n        clientInfo: this.state.clientInfo,\n        protocolVersion: this.state.protocolVersion!,\n      };\n\n      try {\n        await this.events.onInitialized(context);\n        this.logger.mcpError(\"Lifecycle onInitialized completed successfully\");\n      } catch (error) {\n        this.logger.mcpError(\n          `Lifecycle onInitialized failed: ${error instanceof Error ? error.message : String(error)}`,\n        );\n        throw error;\n      }\n    }\n  }\n\n  /**\n   * Handle server shutdown\n   */\n  async handleShutdown(\n    reason: \"client_disconnect\" | \"server_shutdown\" | \"error\" | \"signal\",\n    error?: Error,\n  ): Promise<void> {\n    if (this.state.shuttingDown) {\n      return; // Already shutting down\n    }\n\n    this.state.shuttingDown = true;\n\n    if (this.events.onShutdown) {\n      const context: McpShutdownContext = {\n        getFlag: (name: string) => this.getFlag(name),\n        logger: this.logger,\n        serverInfo: this.serverInfo,\n        reason,\n        error,\n      };\n\n      try {\n        await this.events.onShutdown(context);\n        this.logger.mcpError(\"Lifecycle onShutdown completed successfully\");\n      } catch (shutdownError) {\n        this.logger.mcpError(\n          `Lifecycle onShutdown failed: ${shutdownError instanceof Error ? shutdownError.message : String(shutdownError)}`,\n        );\n        // Don't throw during shutdown - just log the error\n      }\n    }\n  }\n\n  /**\n   * Get current lifecycle state\n   */\n  getState(): Readonly<McpLifecycleState> {\n    return { ...this.state };\n  }\n\n  /**\n   * Check if the server is ready for operations\n   */\n  isReady(): boolean {\n    return this.state.ready && !this.state.shuttingDown;\n  }\n}\n","import { JSONRPCMessageSchema } from \"../types.js\";\n/**\n * Buffers a continuous stdio stream into discrete JSON-RPC messages.\n */\nexport class ReadBuffer {\n    append(chunk) {\n        this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;\n    }\n    readMessage() {\n        if (!this._buffer) {\n            return null;\n        }\n        const index = this._buffer.indexOf(\"\\n\");\n        if (index === -1) {\n            return null;\n        }\n        const line = this._buffer.toString(\"utf8\", 0, index).replace(/\\r$/, '');\n        this._buffer = this._buffer.subarray(index + 1);\n        return deserializeMessage(line);\n    }\n    clear() {\n        this._buffer = undefined;\n    }\n}\nexport function deserializeMessage(line) {\n    return JSONRPCMessageSchema.parse(JSON.parse(line));\n}\nexport function serializeMessage(message) {\n    return JSON.stringify(message) + \"\\n\";\n}\n//# sourceMappingURL=stdio.js.map","import process from \"node:process\";\nimport { ReadBuffer, serializeMessage } from \"../shared/stdio.js\";\n/**\n * Server transport for stdio: this communicates with a MCP client by reading from the current process' stdin and writing to stdout.\n *\n * This transport is only available in Node.js environments.\n */\nexport class StdioServerTransport {\n    constructor(_stdin = process.stdin, _stdout = process.stdout) {\n        this._stdin = _stdin;\n        this._stdout = _stdout;\n        this._readBuffer = new ReadBuffer();\n        this._started = false;\n        // Arrow functions to bind `this` properly, while maintaining function identity.\n        this._ondata = (chunk) => {\n            this._readBuffer.append(chunk);\n            this.processReadBuffer();\n        };\n        this._onerror = (error) => {\n            var _a;\n            (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);\n        };\n    }\n    /**\n     * Starts listening for messages on stdin.\n     */\n    async start() {\n        if (this._started) {\n            throw new Error(\"StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.\");\n        }\n        this._started = true;\n        this._stdin.on(\"data\", this._ondata);\n        this._stdin.on(\"error\", this._onerror);\n    }\n    processReadBuffer() {\n        var _a, _b;\n        while (true) {\n            try {\n                const message = this._readBuffer.readMessage();\n                if (message === null) {\n                    break;\n                }\n                (_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, message);\n            }\n            catch (error) {\n                (_b = this.onerror) === null || _b === void 0 ? void 0 : _b.call(this, error);\n            }\n        }\n    }\n    async close() {\n        var _a;\n        // Remove our event listeners first\n        this._stdin.off(\"data\", this._ondata);\n        this._stdin.off(\"error\", this._onerror);\n        // Check if we were the only data listener\n        const remainingDataListeners = this._stdin.listenerCount('data');\n        if (remainingDataListeners === 0) {\n            // Only pause stdin if we were the only listener\n            // This prevents interfering with other parts of the application that might be using stdin\n            this._stdin.pause();\n        }\n        // Clear the buffer and notify closure\n        this._readBuffer.clear();\n        (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);\n    }\n    send(message) {\n        return new Promise((resolve) => {\n            const json = serializeMessage(message);\n            if (this._stdout.write(json)) {\n                resolve();\n            }\n            else {\n                this._stdout.once(\"drain\", resolve);\n            }\n        });\n    }\n}\n//# sourceMappingURL=stdio.js.map","/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n  b:  1,\n  kb: 1 << 10,\n  mb: 1 << 20,\n  gb: 1 << 30,\n  tb: Math.pow(1024, 4),\n  pb: Math.pow(1024, 5),\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n *  case: [string],\n *  decimalPlaces: [number]\n *  fixedDecimals: [boolean]\n *  thousandsSeparator: [string]\n *  unitSeparator: [string]\n *  }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n  if (typeof value === 'string') {\n    return parse(value);\n  }\n\n  if (typeof value === 'number') {\n    return format(value, options);\n  }\n\n  return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n  if (!Number.isFinite(value)) {\n    return null;\n  }\n\n  var mag = Math.abs(value);\n  var thousandsSeparator = (options && options.thousandsSeparator) || '';\n  var unitSeparator = (options && options.unitSeparator) || '';\n  var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n  var fixedDecimals = Boolean(options && options.fixedDecimals);\n  var unit = (options && options.unit) || '';\n\n  if (!unit || !map[unit.toLowerCase()]) {\n    if (mag >= map.pb) {\n      unit = 'PB';\n    } else if (mag >= map.tb) {\n      unit = 'TB';\n    } else if (mag >= map.gb) {\n      unit = 'GB';\n    } else if (mag >= map.mb) {\n      unit = 'MB';\n    } else if (mag >= map.kb) {\n      unit = 'KB';\n    } else {\n      unit = 'B';\n    }\n  }\n\n  var val = value / map[unit.toLowerCase()];\n  var str = val.toFixed(decimalPlaces);\n\n  if (!fixedDecimals) {\n    str = str.replace(formatDecimalsRegExp, '$1');\n  }\n\n  if (thousandsSeparator) {\n    str = str.split('.').map(function (s, i) {\n      return i === 0\n        ? s.replace(formatThousandsRegExp, thousandsSeparator)\n        : s\n    }).join('.');\n  }\n\n  return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n  if (typeof val === 'number' && !isNaN(val)) {\n    return val;\n  }\n\n  if (typeof val !== 'string') {\n    return null;\n  }\n\n  // Test if the string passed is valid\n  var results = parseRegExp.exec(val);\n  var floatValue;\n  var unit = 'b';\n\n  if (!results) {\n    // Nothing could be extracted from the given string\n    floatValue = parseInt(val, 10);\n    unit = 'b'\n  } else {\n    // Retrieve the value and the unit\n    floatValue = parseFloat(results[1]);\n    unit = results[4].toLowerCase();\n  }\n\n  if (isNaN(floatValue)) {\n    return null;\n  }\n\n  return Math.floor(map[unit] * floatValue);\n}\n","/*!\n * depd\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = depd\n\n/**\n * Create deprecate for namespace in caller.\n */\n\nfunction depd (namespace) {\n  if (!namespace) {\n    throw new TypeError('argument namespace is required')\n  }\n\n  function deprecate (message) {\n    // no-op in browser\n  }\n\n  deprecate._file = undefined\n  deprecate._ignored = true\n  deprecate._namespace = namespace\n  deprecate._traced = false\n  deprecate._warned = Object.create(null)\n\n  deprecate.function = wrapfunction\n  deprecate.property = wrapproperty\n\n  return deprecate\n}\n\n/**\n * Return a wrapped function in a deprecation message.\n *\n * This is a no-op version of the wrapper, which does nothing but call\n * validation.\n */\n\nfunction wrapfunction (fn, message) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('argument fn must be a function')\n  }\n\n  return fn\n}\n\n/**\n * Wrap property in a deprecation message.\n *\n * This is a no-op version of the wrapper, which does nothing but call\n * validation.\n */\n\nfunction wrapproperty (obj, prop, message) {\n  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n    throw new TypeError('argument obj must be object')\n  }\n\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n\n  if (!descriptor) {\n    throw new TypeError('must call property on owner object')\n  }\n\n  if (!descriptor.configurable) {\n    throw new TypeError('property must be configurable')\n  }\n}\n","'use strict'\n/* eslint no-proto: 0 */\nmodule.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)\n\nfunction setProtoOf (obj, proto) {\n  obj.__proto__ = proto\n  return obj\n}\n\nfunction mixinProperties (obj, proto) {\n  for (var prop in proto) {\n    if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n      obj[prop] = proto[prop]\n    }\n  }\n  return obj\n}\n","/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar codes = require('./codes.json')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status\n\n// status code to message map\nstatus.message = codes\n\n// status message (lower-case) to code map\nstatus.code = createMessageToStatusCodeMap(codes)\n\n// array of status codes\nstatus.codes = createStatusCodeList(codes)\n\n// status codes for redirects\nstatus.redirect = {\n  300: true,\n  301: true,\n  302: true,\n  303: true,\n  305: true,\n  307: true,\n  308: true\n}\n\n// status codes for empty bodies\nstatus.empty = {\n  204: true,\n  205: true,\n  304: true\n}\n\n// status codes for when you should retry the request\nstatus.retry = {\n  502: true,\n  503: true,\n  504: true\n}\n\n/**\n * Create a map of message to status code.\n * @private\n */\n\nfunction createMessageToStatusCodeMap (codes) {\n  var map = {}\n\n  Object.keys(codes).forEach(function forEachCode (code) {\n    var message = codes[code]\n    var status = Number(code)\n\n    // populate map\n    map[message.toLowerCase()] = status\n  })\n\n  return map\n}\n\n/**\n * Create a list of all status codes.\n * @private\n */\n\nfunction createStatusCodeList (codes) {\n  return Object.keys(codes).map(function mapCode (code) {\n    return Number(code)\n  })\n}\n\n/**\n * Get the status code for given message.\n * @private\n */\n\nfunction getStatusCode (message) {\n  var msg = message.toLowerCase()\n\n  if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {\n    throw new Error('invalid status message: \"' + message + '\"')\n  }\n\n  return status.code[msg]\n}\n\n/**\n * Get the status message for given code.\n * @private\n */\n\nfunction getStatusMessage (code) {\n  if (!Object.prototype.hasOwnProperty.call(status.message, code)) {\n    throw new Error('invalid status code: ' + code)\n  }\n\n  return status.message[code]\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status (code) {\n  if (typeof code === 'number') {\n    return getStatusMessage(code)\n  }\n\n  if (typeof code !== 'string') {\n    throw new TypeError('code must be a number or string')\n  }\n\n  // '403'\n  var n = parseInt(code, 10)\n  if (!isNaN(n)) {\n    return getStatusMessage(n)\n  }\n\n  return getStatusCode(code)\n}\n","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n","/*!\n * toidentifier\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = toIdentifier\n\n/**\n * Trasform the given string into a JavaScript identifier\n *\n * @param {string} str\n * @returns {string}\n * @public\n */\n\nfunction toIdentifier (str) {\n  return str\n    .split(' ')\n    .map(function (token) {\n      return token.slice(0, 1).toUpperCase() + token.slice(1)\n    })\n    .join('')\n    .replace(/[^ _0-9a-z]/gi, '')\n}\n","/*!\n * http-errors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('http-errors')\nvar setPrototypeOf = require('setprototypeof')\nvar statuses = require('statuses')\nvar inherits = require('inherits')\nvar toIdentifier = require('toidentifier')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createError\nmodule.exports.HttpError = createHttpErrorConstructor()\nmodule.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError)\n\n// Populate exports for all constructors\npopulateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)\n\n/**\n * Get the code class of a status code.\n * @private\n */\n\nfunction codeClass (status) {\n  return Number(String(status).charAt(0) + '00')\n}\n\n/**\n * Create a new HTTP Error.\n *\n * @returns {Error}\n * @public\n */\n\nfunction createError () {\n  // so much arity going on ~_~\n  var err\n  var msg\n  var status = 500\n  var props = {}\n  for (var i = 0; i < arguments.length; i++) {\n    var arg = arguments[i]\n    var type = typeof arg\n    if (type === 'object' && arg instanceof Error) {\n      err = arg\n      status = err.status || err.statusCode || status\n    } else if (type === 'number' && i === 0) {\n      status = arg\n    } else if (type === 'string') {\n      msg = arg\n    } else if (type === 'object') {\n      props = arg\n    } else {\n      throw new TypeError('argument #' + (i + 1) + ' unsupported type ' + type)\n    }\n  }\n\n  if (typeof status === 'number' && (status < 400 || status >= 600)) {\n    deprecate('non-error status code; use only 4xx or 5xx status codes')\n  }\n\n  if (typeof status !== 'number' ||\n    (!statuses.message[status] && (status < 400 || status >= 600))) {\n    status = 500\n  }\n\n  // constructor\n  var HttpError = createError[status] || createError[codeClass(status)]\n\n  if (!err) {\n    // create error\n    err = HttpError\n      ? new HttpError(msg)\n      : new Error(msg || statuses.message[status])\n    Error.captureStackTrace(err, createError)\n  }\n\n  if (!HttpError || !(err instanceof HttpError) || err.status !== status) {\n    // add properties to generic error\n    err.expose = status < 500\n    err.status = err.statusCode = status\n  }\n\n  for (var key in props) {\n    if (key !== 'status' && key !== 'statusCode') {\n      err[key] = props[key]\n    }\n  }\n\n  return err\n}\n\n/**\n * Create HTTP error abstract base class.\n * @private\n */\n\nfunction createHttpErrorConstructor () {\n  function HttpError () {\n    throw new TypeError('cannot construct abstract class')\n  }\n\n  inherits(HttpError, Error)\n\n  return HttpError\n}\n\n/**\n * Create a constructor for a client error.\n * @private\n */\n\nfunction createClientErrorConstructor (HttpError, name, code) {\n  var className = toClassName(name)\n\n  function ClientError (message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code]\n    var err = new Error(msg)\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ClientError)\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ClientError.prototype)\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    })\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    })\n\n    return err\n  }\n\n  inherits(ClientError, HttpError)\n  nameFunc(ClientError, className)\n\n  ClientError.prototype.status = code\n  ClientError.prototype.statusCode = code\n  ClientError.prototype.expose = true\n\n  return ClientError\n}\n\n/**\n * Create function to test is a value is a HttpError.\n * @private\n */\n\nfunction createIsHttpErrorFunction (HttpError) {\n  return function isHttpError (val) {\n    if (!val || typeof val !== 'object') {\n      return false\n    }\n\n    if (val instanceof HttpError) {\n      return true\n    }\n\n    return val instanceof Error &&\n      typeof val.expose === 'boolean' &&\n      typeof val.statusCode === 'number' && val.status === val.statusCode\n  }\n}\n\n/**\n * Create a constructor for a server error.\n * @private\n */\n\nfunction createServerErrorConstructor (HttpError, name, code) {\n  var className = toClassName(name)\n\n  function ServerError (message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code]\n    var err = new Error(msg)\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ServerError)\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ServerError.prototype)\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    })\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    })\n\n    return err\n  }\n\n  inherits(ServerError, HttpError)\n  nameFunc(ServerError, className)\n\n  ServerError.prototype.status = code\n  ServerError.prototype.statusCode = code\n  ServerError.prototype.expose = false\n\n  return ServerError\n}\n\n/**\n * Set the name of a function, if possible.\n * @private\n */\n\nfunction nameFunc (func, name) {\n  var desc = Object.getOwnPropertyDescriptor(func, 'name')\n\n  if (desc && desc.configurable) {\n    desc.value = name\n    Object.defineProperty(func, 'name', desc)\n  }\n}\n\n/**\n * Populate the exports object with constructors for every error class.\n * @private\n */\n\nfunction populateConstructorExports (exports, codes, HttpError) {\n  codes.forEach(function forEachCode (code) {\n    var CodeError\n    var name = toIdentifier(statuses.message[code])\n\n    switch (codeClass(code)) {\n      case 400:\n        CodeError = createClientErrorConstructor(HttpError, name, code)\n        break\n      case 500:\n        CodeError = createServerErrorConstructor(HttpError, name, code)\n        break\n    }\n\n    if (CodeError) {\n      // export the constructor\n      exports[code] = CodeError\n      exports[name] = CodeError\n    }\n  })\n}\n\n/**\n * Get a class name from a name identifier.\n * @private\n */\n\nfunction toClassName (name) {\n  return name.substr(-5) !== 'Error'\n    ? name + 'Error'\n    : name\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    var arr = new Uint8Array(1)\n    var proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  var buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  var valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  var b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(\n      value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n    )\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  var length = byteLength(string, encoding) | 0\n  var buf = createBuffer(length)\n\n  var actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  var buf = createBuffer(length)\n  for (var i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    var copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  var buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    var buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        Buffer.from(buf).copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  var len = string.length\n  var mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  var strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (var i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    var len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n  var alphabet = '0123456789abcdef'\n  var table = new Array(256)\n  for (var i = 0; i < 16; ++i) {\n    var i16 = i * 16\n    for (var j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue\n  if (key === 'SlowBuffer' || key === 'Buffer') continue\n  safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n  Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n    }\n    return Buffer(value, encodingOrOffset, length)\n  }\n}\n\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    var buf = Buffer(size)\n    if (!fill || fill.length === 0) {\n      buf.fill(0)\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n    return buf\n  }\n}\n\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\n\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  }\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n  }\n}\n\nmodule.exports = safer\n","\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n    this.encoder = encoder;\n    this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n    if (this.addBOM) {\n        str = BOMChar + str;\n        this.addBOM = false;\n    }\n\n    return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n    this.decoder = decoder;\n    this.pass = false;\n    this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n    var res = this.decoder.write(buf);\n    if (this.pass || !res)\n        return res;\n\n    if (res[0] === BOMChar) {\n        res = res.slice(1);\n        if (typeof this.options.stripBOM === 'function')\n            this.options.stripBOM();\n    }\n\n    this.pass = true;\n    return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n    return this.decoder.end();\n}\n\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n    // Encodings\n    utf8:   { type: \"_internal\", bomAware: true},\n    cesu8:  { type: \"_internal\", bomAware: true},\n    unicode11utf8: \"utf8\",\n\n    ucs2:   { type: \"_internal\", bomAware: true},\n    utf16le: \"ucs2\",\n\n    binary: { type: \"_internal\" },\n    base64: { type: \"_internal\" },\n    hex:    { type: \"_internal\" },\n\n    // Codec.\n    _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n    this.enc = codecOptions.encodingName;\n    this.bomAware = codecOptions.bomAware;\n\n    if (this.enc === \"base64\")\n        this.encoder = InternalEncoderBase64;\n    else if (this.enc === \"cesu8\") {\n        this.enc = \"utf8\"; // Use utf8 for decoding.\n        this.encoder = InternalEncoderCesu8;\n\n        // Add decoder for versions of Node not supporting CESU-8\n        if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') {\n            this.decoder = InternalDecoderCesu8;\n            this.defaultCharUnicode = iconv.defaultCharUnicode;\n        }\n    }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n    StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n    this.decoder = new StringDecoder(codec.enc);\n}\n\nInternalDecoder.prototype.write = function(buf) {\n    if (!Buffer.isBuffer(buf)) {\n        buf = Buffer.from(buf);\n    }\n\n    return this.decoder.write(buf);\n}\n\nInternalDecoder.prototype.end = function() {\n    return this.decoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n    this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n    return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n    this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n    str = this.prevStr + str;\n    var completeQuads = str.length - (str.length % 4);\n    this.prevStr = str.slice(completeQuads);\n    str = str.slice(0, completeQuads);\n\n    return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n    return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n    for (var i = 0; i < str.length; i++) {\n        var charCode = str.charCodeAt(i);\n        // Naive implementation, but it works because CESU-8 is especially easy\n        // to convert from UTF-16 (which all JS strings are encoded in).\n        if (charCode < 0x80)\n            buf[bufIdx++] = charCode;\n        else if (charCode < 0x800) {\n            buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n        else { // charCode will always be < 0x10000 in javascript.\n            buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n            buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n    }\n    return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n    this.acc = 0;\n    this.contBytes = 0;\n    this.accBytes = 0;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n        res = '';\n    for (var i = 0; i < buf.length; i++) {\n        var curByte = buf[i];\n        if ((curByte & 0xC0) !== 0x80) { // Leading byte\n            if (contBytes > 0) { // Previous code is invalid\n                res += this.defaultCharUnicode;\n                contBytes = 0;\n            }\n\n            if (curByte < 0x80) { // Single-byte code\n                res += String.fromCharCode(curByte);\n            } else if (curByte < 0xE0) { // Two-byte code\n                acc = curByte & 0x1F;\n                contBytes = 1; accBytes = 1;\n            } else if (curByte < 0xF0) { // Three-byte code\n                acc = curByte & 0x0F;\n                contBytes = 2; accBytes = 1;\n            } else { // Four or more are not supported for CESU-8.\n                res += this.defaultCharUnicode;\n            }\n        } else { // Continuation byte\n            if (contBytes > 0) { // We're waiting for it.\n                acc = (acc << 6) | (curByte & 0x3f);\n                contBytes--; accBytes++;\n                if (contBytes === 0) {\n                    // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n                    if (accBytes === 2 && acc < 0x80 && acc > 0)\n                        res += this.defaultCharUnicode;\n                    else if (accBytes === 3 && acc < 0x800)\n                        res += this.defaultCharUnicode;\n                    else\n                        // Actually add character.\n                        res += String.fromCharCode(acc);\n                }\n            } else { // Unexpected continuation byte\n                res += this.defaultCharUnicode;\n            }\n        }\n    }\n    this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n    return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n    var res = 0;\n    if (this.contBytes > 0)\n        res += this.defaultCharUnicode;\n    return res;\n}\n","'use strict';\n\nvar Buffer = require('safer-buffer').Buffer;\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec;\n\nfunction Utf32Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n    this.bomAware = true;\n    this.isLE = codecOptions.isLE;\n}\n\nexports.utf32le = { type: '_utf32', isLE: true };\nexports.utf32be = { type: '_utf32', isLE: false };\n\n// Aliases\nexports.ucs4le = 'utf32le';\nexports.ucs4be = 'utf32be';\n\nUtf32Codec.prototype.encoder = Utf32Encoder;\nUtf32Codec.prototype.decoder = Utf32Decoder;\n\n// -- Encoding\n\nfunction Utf32Encoder(options, codec) {\n    this.isLE = codec.isLE;\n    this.highSurrogate = 0;\n}\n\nUtf32Encoder.prototype.write = function(str) {\n    var src = Buffer.from(str, 'ucs2');\n    var dst = Buffer.alloc(src.length * 2);\n    var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;\n    var offset = 0;\n\n    for (var i = 0; i < src.length; i += 2) {\n        var code = src.readUInt16LE(i);\n        var isHighSurrogate = (0xD800 <= code && code < 0xDC00);\n        var isLowSurrogate = (0xDC00 <= code && code < 0xE000);\n\n        if (this.highSurrogate) {\n            if (isHighSurrogate || !isLowSurrogate) {\n                // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n                // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n                // (technically wrong, but expected by some applications, like Windows file names).\n                write32.call(dst, this.highSurrogate, offset);\n                offset += 4;\n            }\n            else {\n                // Create 32-bit value from high and low surrogates;\n                var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000;\n\n                write32.call(dst, codepoint, offset);\n                offset += 4;\n                this.highSurrogate = 0;\n\n                continue;\n            }\n        }\n\n        if (isHighSurrogate)\n            this.highSurrogate = code;\n        else {\n            // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n            // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n            // unpaired high surrogates.\n            write32.call(dst, code, offset);\n            offset += 4;\n            this.highSurrogate = 0;\n        }\n    }\n\n    if (offset < dst.length)\n        dst = dst.slice(0, offset);\n\n    return dst;\n};\n\nUtf32Encoder.prototype.end = function() {\n    // Treat any leftover high surrogate as a semi-valid independent character.\n    if (!this.highSurrogate)\n        return;\n\n    var buf = Buffer.alloc(4);\n\n    if (this.isLE)\n        buf.writeUInt32LE(this.highSurrogate, 0);\n    else\n        buf.writeUInt32BE(this.highSurrogate, 0);\n\n    this.highSurrogate = 0;\n\n    return buf;\n};\n\n// -- Decoding\n\nfunction Utf32Decoder(options, codec) {\n    this.isLE = codec.isLE;\n    this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);\n    this.overflow = [];\n}\n\nUtf32Decoder.prototype.write = function(src) {\n    if (src.length === 0)\n        return '';\n\n    var i = 0;\n    var codepoint = 0;\n    var dst = Buffer.alloc(src.length + 4);\n    var offset = 0;\n    var isLE = this.isLE;\n    var overflow = this.overflow;\n    var badChar = this.badChar;\n\n    if (overflow.length > 0) {\n        for (; i < src.length && overflow.length < 4; i++)\n            overflow.push(src[i]);\n        \n        if (overflow.length === 4) {\n            // NOTE: codepoint is a signed int32 and can be negative.\n            // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n            if (isLE) {\n                codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24);\n            } else {\n                codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24);\n            }\n            overflow.length = 0;\n\n            offset = _writeCodepoint(dst, offset, codepoint, badChar);\n        }\n    }\n\n    // Main loop. Should be as optimized as possible.\n    for (; i < src.length - 3; i += 4) {\n        // NOTE: codepoint is a signed int32 and can be negative.\n        if (isLE) {\n            codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24);\n        } else {\n            codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24);\n        }\n        offset = _writeCodepoint(dst, offset, codepoint, badChar);\n    }\n\n    // Keep overflowing bytes.\n    for (; i < src.length; i++) {\n        overflow.push(src[i]);\n    }\n\n    return dst.slice(0, offset).toString('ucs2');\n};\n\nfunction _writeCodepoint(dst, offset, codepoint, badChar) {\n    // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n    if (codepoint < 0 || codepoint > 0x10FFFF) {\n        // Not a valid Unicode codepoint\n        codepoint = badChar;\n    } \n\n    // Ephemeral Planes: Write high surrogate.\n    if (codepoint >= 0x10000) {\n        codepoint -= 0x10000;\n\n        var high = 0xD800 | (codepoint >> 10);\n        dst[offset++] = high & 0xff;\n        dst[offset++] = high >> 8;\n\n        // Low surrogate is written below.\n        var codepoint = 0xDC00 | (codepoint & 0x3FF);\n    }\n\n    // Write BMP char or low surrogate.\n    dst[offset++] = codepoint & 0xff;\n    dst[offset++] = codepoint >> 8;\n\n    return offset;\n};\n\nUtf32Decoder.prototype.end = function() {\n    this.overflow.length = 0;\n};\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec;\nexports.ucs4 = 'utf32';\n\nfunction Utf32AutoCodec(options, iconv) {\n    this.iconv = iconv;\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder;\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder;\n\n// -- Encoding\n\nfunction Utf32AutoEncoder(options, codec) {\n    options = options || {};\n\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n\n    this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options);\n}\n\nUtf32AutoEncoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n};\n\nUtf32AutoEncoder.prototype.end = function() {\n    return this.encoder.end();\n};\n\n// -- Decoding\n\nfunction Utf32AutoDecoder(options, codec) {\n    this.decoder = null;\n    this.initialBufs = [];\n    this.initialBufsLen = 0;\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf32AutoDecoder.prototype.write = function(buf) {\n    if (!this.decoder) { \n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBufs.push(buf);\n        this.initialBufsLen += buf.length;\n\n        if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.write(buf);\n};\n\nUtf32AutoDecoder.prototype.end = function() {\n    if (!this.decoder) {\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        var trail = this.decoder.end();\n        if (trail)\n            resStr += trail;\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.end();\n};\n\nfunction detectEncoding(bufs, defaultEncoding) {\n    var b = [];\n    var charsProcessed = 0;\n    var invalidLE = 0, invalidBE = 0;   // Number of invalid chars when decoded as LE or BE.\n    var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE.\n\n    outer_loop:\n    for (var i = 0; i < bufs.length; i++) {\n        var buf = bufs[i];\n        for (var j = 0; j < buf.length; j++) {\n            b.push(buf[j]);\n            if (b.length === 4) {\n                if (charsProcessed === 0) {\n                    // Check BOM first.\n                    if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n                        return 'utf-32le';\n                    }\n                    if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n                        return 'utf-32be';\n                    }\n                }\n\n                if (b[0] !== 0 || b[1] > 0x10) invalidBE++;\n                if (b[3] !== 0 || b[2] > 0x10) invalidLE++;\n\n                if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;\n                if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;\n\n                b.length = 0;\n                charsProcessed++;\n\n                if (charsProcessed >= 100) {\n                    break outer_loop;\n                }\n            }\n        }\n    }\n\n    // Make decisions.\n    if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE)  return 'utf-32be';\n    if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE)  return 'utf-32le';\n\n    // Couldn't decide (likely all zeros or not enough data).\n    return defaultEncoding || 'utf-32le';\n}\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n    var buf = Buffer.from(str, 'ucs2');\n    for (var i = 0; i < buf.length; i += 2) {\n        var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n    }\n    return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n    this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n    if (buf.length == 0)\n        return '';\n\n    var buf2 = Buffer.alloc(buf.length + 1),\n        i = 0, j = 0;\n\n    if (this.overflowByte !== -1) {\n        buf2[0] = buf[0];\n        buf2[1] = this.overflowByte;\n        i = 1; j = 2;\n    }\n\n    for (; i < buf.length-1; i += 2, j+= 2) {\n        buf2[j] = buf[i+1];\n        buf2[j+1] = buf[i];\n    }\n\n    this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n    return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n    this.overflowByte = -1;\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n    options = options || {};\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n    this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n    this.decoder = null;\n    this.initialBufs = [];\n    this.initialBufsLen = 0;\n\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n    if (!this.decoder) {\n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBufs.push(buf);\n        this.initialBufsLen += buf.length;\n        \n        if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n    if (!this.decoder) {\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        var trail = this.decoder.end();\n        if (trail)\n            resStr += trail;\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n    return this.decoder.end();\n}\n\nfunction detectEncoding(bufs, defaultEncoding) {\n    var b = [];\n    var charsProcessed = 0;\n    var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE.\n\n    outer_loop:\n    for (var i = 0; i < bufs.length; i++) {\n        var buf = bufs[i];\n        for (var j = 0; j < buf.length; j++) {\n            b.push(buf[j]);\n            if (b.length === 2) {\n                if (charsProcessed === 0) {\n                    // Check BOM first.\n                    if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le';\n                    if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be';\n                }\n\n                if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;\n                if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;\n\n                b.length = 0;\n                charsProcessed++;\n\n                if (charsProcessed >= 100) {\n                    break outer_loop;\n                }\n            }\n        }\n    }\n\n    // Make decisions.\n    // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n    // So, we count ASCII as if it was LE or BE, and decide from that.\n    if (asciiCharsBE > asciiCharsLE) return 'utf-16be';\n    if (asciiCharsBE < asciiCharsLE) return 'utf-16le';\n\n    // Couldn't decide (likely all zeros or not enough data).\n    return defaultEncoding || 'utf-16le';\n}\n\n\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n    this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n    // Naive implementation.\n    // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n    return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n        return \"+\" + (chunk === '+' ? '' : \n            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n            + \"-\";\n    }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n    base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n    minusChar = '-'.charCodeAt(0),\n    andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '+'\n            if (buf[i] == plusChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64Chars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n                    res += \"+\";\n                } else {\n                    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\");\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus is absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\");\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n//  * Base64 part is started by \"&\" instead of \"+\"\n//  * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n//  * In Base64, \",\" is used instead of \"/\"\n//  * Base64 must not be used to represent direct characters.\n//  * No implicit shift back from Base64 (should always end with '-')\n//  * String must end in non-shifted position.\n//  * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = Buffer.alloc(6);\n    this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n    var inBase64 = this.inBase64,\n        base64Accum = this.base64Accum,\n        base64AccumIdx = this.base64AccumIdx,\n        buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n    for (var i = 0; i < str.length; i++) {\n        var uChar = str.charCodeAt(i);\n        if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n            if (inBase64) {\n                if (base64AccumIdx > 0) {\n                    bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n                    base64AccumIdx = 0;\n                }\n\n                buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n                inBase64 = false;\n            }\n\n            if (!inBase64) {\n                buf[bufIdx++] = uChar; // Write direct character\n\n                if (uChar === andChar)  // Ampersand -> '&-'\n                    buf[bufIdx++] = minusChar;\n            }\n\n        } else { // Non-direct character\n            if (!inBase64) {\n                buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n                inBase64 = true;\n            }\n            if (inBase64) {\n                base64Accum[base64AccumIdx++] = uChar >> 8;\n                base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n                if (base64AccumIdx == base64Accum.length) {\n                    bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n                    base64AccumIdx = 0;\n                }\n            }\n        }\n    }\n\n    this.inBase64 = inBase64;\n    this.base64AccumIdx = base64AccumIdx;\n\n    return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n    var buf = Buffer.alloc(10), bufIdx = 0;\n    if (this.inBase64) {\n        if (this.base64AccumIdx > 0) {\n            bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n            this.base64AccumIdx = 0;\n        }\n\n        buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n        this.inBase64 = false;\n    }\n\n    return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n    // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '&'\n            if (buf[i] == andChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n                    res += \"&\";\n                } else {\n                    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\").replace(/,/g, '/');\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus may be absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\").replace(/,/g, '/');\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n    if (!codecOptions)\n        throw new Error(\"SBCS codec is called without the data.\")\n    \n    // Prepare char buffer for decoding.\n    if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n        throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n    \n    if (codecOptions.chars.length === 128) {\n        var asciiString = \"\";\n        for (var i = 0; i < 128; i++)\n            asciiString += String.fromCharCode(i);\n        codecOptions.chars = asciiString + codecOptions.chars;\n    }\n\n    this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n    \n    // Encoding buffer.\n    var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n    for (var i = 0; i < codecOptions.chars.length; i++)\n        encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n    this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n    this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length);\n    for (var i = 0; i < str.length; i++)\n        buf[i] = this.encodeBuf[str.charCodeAt(i)];\n    \n    return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n    this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n    // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n    var decodeBuf = this.decodeBuf;\n    var newBuf = Buffer.alloc(buf.length*2);\n    var idx1 = 0, idx2 = 0;\n    for (var i = 0; i < buf.length; i++) {\n        idx1 = buf[i]*2; idx2 = i*2;\n        newBuf[idx2] = decodeBuf[idx1];\n        newBuf[idx2+1] = decodeBuf[idx1+1];\n    }\n    return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n","\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n    // Not supported by iconv, not sure why.\n    \"10029\": \"maccenteuro\",\n    \"maccenteuro\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"ÄĀāÉĄÖÜáąČäčĆćéŹźĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņŃ¬√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\"\n    },\n\n    \"808\": \"cp808\",\n    \"ibm808\": \"cp808\",\n    \"cp808\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ \"\n    },\n\n    \"mik\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n    },\n\n    \"cp720\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\\x80\\x81éâ\\x84à\\x86çêëèïî\\x8d\\x8e\\x8f\\x90\\u0651\\u0652ô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650≈°∙·√ⁿ²■\\u00a0\"\n    },\n\n    // Aliases of generated encodings.\n    \"ascii8bit\": \"ascii\",\n    \"usascii\": \"ascii\",\n    \"ansix34\": \"ascii\",\n    \"ansix341968\": \"ascii\",\n    \"ansix341986\": \"ascii\",\n    \"csascii\": \"ascii\",\n    \"cp367\": \"ascii\",\n    \"ibm367\": \"ascii\",\n    \"isoir6\": \"ascii\",\n    \"iso646us\": \"ascii\",\n    \"iso646irv\": \"ascii\",\n    \"us\": \"ascii\",\n\n    \"latin1\": \"iso88591\",\n    \"latin2\": \"iso88592\",\n    \"latin3\": \"iso88593\",\n    \"latin4\": \"iso88594\",\n    \"latin5\": \"iso88599\",\n    \"latin6\": \"iso885910\",\n    \"latin7\": \"iso885913\",\n    \"latin8\": \"iso885914\",\n    \"latin9\": \"iso885915\",\n    \"latin10\": \"iso885916\",\n\n    \"csisolatin1\": \"iso88591\",\n    \"csisolatin2\": \"iso88592\",\n    \"csisolatin3\": \"iso88593\",\n    \"csisolatin4\": \"iso88594\",\n    \"csisolatincyrillic\": \"iso88595\",\n    \"csisolatinarabic\": \"iso88596\",\n    \"csisolatingreek\" : \"iso88597\",\n    \"csisolatinhebrew\": \"iso88598\",\n    \"csisolatin5\": \"iso88599\",\n    \"csisolatin6\": \"iso885910\",\n\n    \"l1\": \"iso88591\",\n    \"l2\": \"iso88592\",\n    \"l3\": \"iso88593\",\n    \"l4\": \"iso88594\",\n    \"l5\": \"iso88599\",\n    \"l6\": \"iso885910\",\n    \"l7\": \"iso885913\",\n    \"l8\": \"iso885914\",\n    \"l9\": \"iso885915\",\n    \"l10\": \"iso885916\",\n\n    \"isoir14\": \"iso646jp\",\n    \"isoir57\": \"iso646cn\",\n    \"isoir100\": \"iso88591\",\n    \"isoir101\": \"iso88592\",\n    \"isoir109\": \"iso88593\",\n    \"isoir110\": \"iso88594\",\n    \"isoir144\": \"iso88595\",\n    \"isoir127\": \"iso88596\",\n    \"isoir126\": \"iso88597\",\n    \"isoir138\": \"iso88598\",\n    \"isoir148\": \"iso88599\",\n    \"isoir157\": \"iso885910\",\n    \"isoir166\": \"tis620\",\n    \"isoir179\": \"iso885913\",\n    \"isoir199\": \"iso885914\",\n    \"isoir203\": \"iso885915\",\n    \"isoir226\": \"iso885916\",\n\n    \"cp819\": \"iso88591\",\n    \"ibm819\": \"iso88591\",\n\n    \"cyrillic\": \"iso88595\",\n\n    \"arabic\": \"iso88596\",\n    \"arabic8\": \"iso88596\",\n    \"ecma114\": \"iso88596\",\n    \"asmo708\": \"iso88596\",\n\n    \"greek\" : \"iso88597\",\n    \"greek8\" : \"iso88597\",\n    \"ecma118\" : \"iso88597\",\n    \"elot928\" : \"iso88597\",\n\n    \"hebrew\": \"iso88598\",\n    \"hebrew8\": \"iso88598\",\n\n    \"turkish\": \"iso88599\",\n    \"turkish8\": \"iso88599\",\n\n    \"thai\": \"iso885911\",\n    \"thai8\": \"iso885911\",\n\n    \"celtic\": \"iso885914\",\n    \"celtic8\": \"iso885914\",\n    \"isoceltic\": \"iso885914\",\n\n    \"tis6200\": \"tis620\",\n    \"tis62025291\": \"tis620\",\n    \"tis62025330\": \"tis620\",\n\n    \"10000\": \"macroman\",\n    \"10006\": \"macgreek\",\n    \"10007\": \"maccyrillic\",\n    \"10079\": \"maciceland\",\n    \"10081\": \"macturkish\",\n\n    \"cspc8codepage437\": \"cp437\",\n    \"cspc775baltic\": \"cp775\",\n    \"cspc850multilingual\": \"cp850\",\n    \"cspcp852\": \"cp852\",\n    \"cspc862latinhebrew\": \"cp862\",\n    \"cpgr\": \"cp869\",\n\n    \"msee\": \"cp1250\",\n    \"mscyrl\": \"cp1251\",\n    \"msansi\": \"cp1252\",\n    \"msgreek\": \"cp1253\",\n    \"msturk\": \"cp1254\",\n    \"mshebr\": \"cp1255\",\n    \"msarab\": \"cp1256\",\n    \"winbaltrim\": \"cp1257\",\n\n    \"cp20866\": \"koi8r\",\n    \"20866\": \"koi8r\",\n    \"ibm878\": \"koi8r\",\n    \"cskoi8r\": \"koi8r\",\n\n    \"cp21866\": \"koi8u\",\n    \"21866\": \"koi8u\",\n    \"ibm1168\": \"koi8u\",\n\n    \"strk10482002\": \"rk1048\",\n\n    \"tcvn5712\": \"tcvn\",\n    \"tcvn57121\": \"tcvn\",\n\n    \"gb198880\": \"iso646cn\",\n    \"cn\": \"iso646cn\",\n\n    \"csiso14jisc6220ro\": \"iso646jp\",\n    \"jisc62201969ro\": \"iso646jp\",\n    \"jp\": \"iso646jp\",\n\n    \"cshproman8\": \"hproman8\",\n    \"r8\": \"hproman8\",\n    \"roman8\": \"hproman8\",\n    \"xroman8\": \"hproman8\",\n    \"ibm1051\": \"hproman8\",\n\n    \"mac\": \"macintosh\",\n    \"csmacintosh\": \"macintosh\",\n};\n\n","\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n  \"437\": \"cp437\",\n  \"737\": \"cp737\",\n  \"775\": \"cp775\",\n  \"850\": \"cp850\",\n  \"852\": \"cp852\",\n  \"855\": \"cp855\",\n  \"856\": \"cp856\",\n  \"857\": \"cp857\",\n  \"858\": \"cp858\",\n  \"860\": \"cp860\",\n  \"861\": \"cp861\",\n  \"862\": \"cp862\",\n  \"863\": \"cp863\",\n  \"864\": \"cp864\",\n  \"865\": \"cp865\",\n  \"866\": \"cp866\",\n  \"869\": \"cp869\",\n  \"874\": \"windows874\",\n  \"922\": \"cp922\",\n  \"1046\": \"cp1046\",\n  \"1124\": \"cp1124\",\n  \"1125\": \"cp1125\",\n  \"1129\": \"cp1129\",\n  \"1133\": \"cp1133\",\n  \"1161\": \"cp1161\",\n  \"1162\": \"cp1162\",\n  \"1163\": \"cp1163\",\n  \"1250\": \"windows1250\",\n  \"1251\": \"windows1251\",\n  \"1252\": \"windows1252\",\n  \"1253\": \"windows1253\",\n  \"1254\": \"windows1254\",\n  \"1255\": \"windows1255\",\n  \"1256\": \"windows1256\",\n  \"1257\": \"windows1257\",\n  \"1258\": \"windows1258\",\n  \"28591\": \"iso88591\",\n  \"28592\": \"iso88592\",\n  \"28593\": \"iso88593\",\n  \"28594\": \"iso88594\",\n  \"28595\": \"iso88595\",\n  \"28596\": \"iso88596\",\n  \"28597\": \"iso88597\",\n  \"28598\": \"iso88598\",\n  \"28599\": \"iso88599\",\n  \"28600\": \"iso885910\",\n  \"28601\": \"iso885911\",\n  \"28603\": \"iso885913\",\n  \"28604\": \"iso885914\",\n  \"28605\": \"iso885915\",\n  \"28606\": \"iso885916\",\n  \"windows874\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"win874\": \"windows874\",\n  \"cp874\": \"windows874\",\n  \"windows1250\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n  },\n  \"win1250\": \"windows1250\",\n  \"cp1250\": \"windows1250\",\n  \"windows1251\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"win1251\": \"windows1251\",\n  \"cp1251\": \"windows1251\",\n  \"windows1252\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"win1252\": \"windows1252\",\n  \"cp1252\": \"windows1252\",\n  \"windows1253\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n  },\n  \"win1253\": \"windows1253\",\n  \"cp1253\": \"windows1253\",\n  \"windows1254\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n  },\n  \"win1254\": \"windows1254\",\n  \"cp1254\": \"windows1254\",\n  \"windows1255\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n  },\n  \"win1255\": \"windows1255\",\n  \"cp1255\": \"windows1255\",\n  \"windows1256\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے\"\n  },\n  \"win1256\": \"windows1256\",\n  \"cp1256\": \"windows1256\",\n  \"windows1257\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\"\n  },\n  \"win1257\": \"windows1257\",\n  \"cp1257\": \"windows1257\",\n  \"windows1258\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"win1258\": \"windows1258\",\n  \"cp1258\": \"windows1258\",\n  \"iso88591\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"cp28591\": \"iso88591\",\n  \"iso88592\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n  },\n  \"cp28592\": \"iso88592\",\n  \"iso88593\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" Ħ˘£¤�Ĥ§¨İŞĞĴ­�Ż°ħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙\"\n  },\n  \"cp28593\": \"iso88593\",\n  \"iso88594\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ĄĸŖ¤ĨĻ§¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖ×ØŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙\"\n  },\n  \"cp28594\": \"iso88594\",\n  \"iso88595\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ\"\n  },\n  \"cp28595\": \"iso88595\",\n  \"iso88596\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������\"\n  },\n  \"cp28596\": \"iso88596\",\n  \"iso88597\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n  },\n  \"cp28597\": \"iso88597\",\n  \"iso88598\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n  },\n  \"cp28598\": \"iso88598\",\n  \"iso88599\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n  },\n  \"cp28599\": \"iso88599\",\n  \"iso885910\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ĄĒĢĪĨĶ§ĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ\"\n  },\n  \"cp28600\": \"iso885910\",\n  \"iso885911\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"cp28601\": \"iso885911\",\n  \"iso885913\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’\"\n  },\n  \"cp28603\": \"iso885913\",\n  \"iso885914\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ\"\n  },\n  \"cp28604\": \"iso885914\",\n  \"iso885915\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"cp28605\": \"iso885915\",\n  \"iso885916\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ĄąŁ€„Š§š©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ\"\n  },\n  \"cp28606\": \"iso885916\",\n  \"cp437\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm437\": \"cp437\",\n  \"csibm437\": \"cp437\",\n  \"cp737\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm737\": \"cp737\",\n  \"csibm737\": \"cp737\",\n  \"cp775\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ \"\n  },\n  \"ibm775\": \"cp775\",\n  \"csibm775\": \"cp775\",\n  \"cp850\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm850\": \"cp850\",\n  \"csibm850\": \"cp850\",\n  \"cp852\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘę¬źČş«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ \"\n  },\n  \"ibm852\": \"cp852\",\n  \"csibm852\": \"cp852\",\n  \"cp855\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ \"\n  },\n  \"ibm855\": \"cp855\",\n  \"csibm855\": \"cp855\",\n  \"cp856\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm856\": \"cp856\",\n  \"csibm856\": \"cp856\",\n  \"cp857\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞğ¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm857\": \"cp857\",\n  \"csibm857\": \"cp857\",\n  \"cp858\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm858\": \"cp858\",\n  \"csibm858\": \"cp858\",\n  \"cp860\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñÑªº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm860\": \"cp860\",\n  \"csibm860\": \"cp860\",\n  \"cp861\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm861\": \"cp861\",\n  \"csibm861\": \"cp861\",\n  \"cp862\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm862\": \"cp862\",\n  \"csibm862\": \"cp862\",\n  \"cp863\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm863\": \"cp863\",\n  \"csibm863\": \"cp863\",\n  \"cp864\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�\"\n  },\n  \"ibm864\": \"cp864\",\n  \"csibm864\": \"cp864\",\n  \"cp865\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñÑªº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm865\": \"cp865\",\n  \"csibm865\": \"cp865\",\n  \"cp866\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \"\n  },\n  \"ibm866\": \"cp866\",\n  \"csibm866\": \"cp866\",\n  \"cp869\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ \"\n  },\n  \"ibm869\": \"cp869\",\n  \"csibm869\": \"cp869\",\n  \"cp922\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖ×ØÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ\"\n  },\n  \"ibm922\": \"cp922\",\n  \"csibm922\": \"cp922\",\n  \"cp1046\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ﺈ×÷ﹱ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�\"\n  },\n  \"ibm1046\": \"cp1046\",\n  \"csibm1046\": \"cp1046\",\n  \"cp1124\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ\"\n  },\n  \"ibm1124\": \"cp1124\",\n  \"csibm1124\": \"cp1124\",\n  \"cp1125\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ \"\n  },\n  \"ibm1125\": \"cp1125\",\n  \"csibm1125\": \"cp1125\",\n  \"cp1129\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"ibm1129\": \"cp1129\",\n  \"csibm1129\": \"cp1129\",\n  \"cp1133\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�\"\n  },\n  \"ibm1133\": \"cp1133\",\n  \"csibm1133\": \"cp1133\",\n  \"cp1161\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ \"\n  },\n  \"ibm1161\": \"cp1161\",\n  \"csibm1161\": \"cp1161\",\n  \"cp1162\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€…‘’“”•–— กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"ibm1162\": \"cp1162\",\n  \"csibm1162\": \"cp1162\",\n  \"cp1163\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"ibm1163\": \"cp1163\",\n  \"csibm1163\": \"cp1163\",\n  \"maccroatian\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\"\n  },\n  \"maccyrillic\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n  },\n  \"macgreek\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"Ä¹²É³ÖÜ΅àâä΄¨çéèêë£™îï•½‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\"\n  },\n  \"maciceland\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macroman\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macromania\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macthai\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู﻿​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����\"\n  },\n  \"macturkish\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macukraine\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n  },\n  \"koi8r\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8u\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8ru\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8t\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"armscii8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�\"\n  },\n  \"rk1048\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"tcvn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000ÚỤ\\u0003ỪỬỮ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010ỨỰỲỶỸÝỴ\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ\"\n  },\n  \"georgianacademy\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"georgianps\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"pt154\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"viscii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001Ẳ\\u0003\\u0004ẴẪ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013Ỷ\\u0015\\u0016\\u0017\\u0018Ỹ\\u001a\\u001b\\u001c\\u001dỴ\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ\"\n  },\n  \"iso646cn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"iso646jp\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"hproman8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�\"\n  },\n  \"macintosh\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"ascii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"tis620\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  }\n}","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n    GB18030_CODE = -2,\n    SEQ_START  = -10,\n    NODE_START = -1000,\n    UNASSIGNED_NODE = new Array(0x100),\n    DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n    UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n    this.encodingName = codecOptions.encodingName;\n    if (!codecOptions)\n        throw new Error(\"DBCS codec is called without the data.\")\n    if (!codecOptions.table)\n        throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n    // Load tables.\n    var mappingTable = codecOptions.table();\n\n\n    // Decode tables: MBCS -> Unicode.\n\n    // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n    // Trie root is decodeTables[0].\n    // Values: >=  0 -> unicode character code. can be > 0xFFFF\n    //         == UNASSIGNED -> unknown/unassigned sequence.\n    //         == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n    //         <= NODE_START -> index of the next node in our trie to process next byte.\n    //         <= SEQ_START  -> index of the start of a character code sequence, in decodeTableSeq.\n    this.decodeTables = [];\n    this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n    this.decodeTableSeq = [];\n\n    // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n    for (var i = 0; i < mappingTable.length; i++)\n        this._addDecodeChunk(mappingTable[i]);\n\n    // Load & create GB18030 tables when needed.\n    if (typeof codecOptions.gb18030 === 'function') {\n        this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n        // Add GB18030 common decode nodes.\n        var commonThirdByteNodeIdx = this.decodeTables.length;\n        this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n        var commonFourthByteNodeIdx = this.decodeTables.length;\n        this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n        // Fill out the tree\n        var firstByteNode = this.decodeTables[0];\n        for (var i = 0x81; i <= 0xFE; i++) {\n            var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]];\n            for (var j = 0x30; j <= 0x39; j++) {\n                if (secondByteNode[j] === UNASSIGNED) {\n                    secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;\n                } else if (secondByteNode[j] > NODE_START) {\n                    throw new Error(\"gb18030 decode tables conflict at byte 2\");\n                }\n\n                var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];\n                for (var k = 0x81; k <= 0xFE; k++) {\n                    if (thirdByteNode[k] === UNASSIGNED) {\n                        thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;\n                    } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n                        continue;\n                    } else if (thirdByteNode[k] > NODE_START) {\n                        throw new Error(\"gb18030 decode tables conflict at byte 3\");\n                    }\n\n                    var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];\n                    for (var l = 0x30; l <= 0x39; l++) {\n                        if (fourthByteNode[l] === UNASSIGNED)\n                            fourthByteNode[l] = GB18030_CODE;\n                    }\n                }\n            }\n        }\n    }\n\n    this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n    \n    // Encode tables: Unicode -> DBCS.\n\n    // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n    // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n    // Values: >=  0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n    //         == UNASSIGNED -> no conversion found. Output a default char.\n    //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n    this.encodeTable = [];\n    \n    // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n    // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n    // means end of sequence (needed when one sequence is a strict subsequence of another).\n    // Objects are kept separately from encodeTable to increase performance.\n    this.encodeTableSeq = [];\n\n    // Some chars can be decoded, but need not be encoded.\n    var skipEncodeChars = {};\n    if (codecOptions.encodeSkipVals)\n        for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n            var val = codecOptions.encodeSkipVals[i];\n            if (typeof val === 'number')\n                skipEncodeChars[val] = true;\n            else\n                for (var j = val.from; j <= val.to; j++)\n                    skipEncodeChars[j] = true;\n        }\n        \n    // Use decode trie to recursively fill out encode tables.\n    this._fillEncodeTable(0, 0, skipEncodeChars);\n\n    // Add more encoding pairs when needed.\n    if (codecOptions.encodeAdd) {\n        for (var uChar in codecOptions.encodeAdd)\n            if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n                this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n    }\n\n    this.defCharSB  = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n    var bytes = [];\n    for (; addr > 0; addr >>>= 8)\n        bytes.push(addr & 0xFF);\n    if (bytes.length == 0)\n        bytes.push(0);\n\n    var node = this.decodeTables[0];\n    for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n        var val = node[bytes[i]];\n\n        if (val == UNASSIGNED) { // Create new node.\n            node[bytes[i]] = NODE_START - this.decodeTables.length;\n            this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n        }\n        else if (val <= NODE_START) { // Existing node.\n            node = this.decodeTables[NODE_START - val];\n        }\n        else\n            throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n    }\n    return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n    // First element of chunk is the hex mbcs code where we start.\n    var curAddr = parseInt(chunk[0], 16);\n\n    // Choose the decoding node where we'll write our chars.\n    var writeTable = this._getDecodeTrieNode(curAddr);\n    curAddr = curAddr & 0xFF;\n\n    // Write all other elements of the chunk to the table.\n    for (var k = 1; k < chunk.length; k++) {\n        var part = chunk[k];\n        if (typeof part === \"string\") { // String, write as-is.\n            for (var l = 0; l < part.length;) {\n                var code = part.charCodeAt(l++);\n                if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n                    var codeTrail = part.charCodeAt(l++);\n                    if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n                        writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n                    else\n                        throw new Error(\"Incorrect surrogate pair in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n                }\n                else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n                    var len = 0xFFF - code + 2;\n                    var seq = [];\n                    for (var m = 0; m < len; m++)\n                        seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n                    writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n                    this.decodeTableSeq.push(seq);\n                }\n                else\n                    writeTable[curAddr++] = code; // Basic char\n            }\n        } \n        else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n            var charCode = writeTable[curAddr - 1] + 1;\n            for (var l = 0; l < part; l++)\n                writeTable[curAddr++] = charCode++;\n        }\n        else\n            throw new Error(\"Incorrect type '\" + typeof part + \"' given in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n    }\n    if (curAddr > 0xFF)\n        throw new Error(\"Incorrect chunk in \"  + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n    var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n    if (this.encodeTable[high] === undefined)\n        this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n    return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n    if (bucket[low] <= SEQ_START)\n        this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n    else if (bucket[low] == UNASSIGNED)\n        bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n    \n    // Get the root of character tree according to first character of the sequence.\n    var uCode = seq[0];\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n\n    var node;\n    if (bucket[low] <= SEQ_START) {\n        // There's already a sequence with  - use it.\n        node = this.encodeTableSeq[SEQ_START-bucket[low]];\n    }\n    else {\n        // There was no sequence object - allocate a new one.\n        node = {};\n        if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n        bucket[low] = SEQ_START - this.encodeTableSeq.length;\n        this.encodeTableSeq.push(node);\n    }\n\n    // Traverse the character tree, allocating new nodes as needed.\n    for (var j = 1; j < seq.length-1; j++) {\n        var oldVal = node[uCode];\n        if (typeof oldVal === 'object')\n            node = oldVal;\n        else {\n            node = node[uCode] = {}\n            if (oldVal !== undefined)\n                node[DEF_CHAR] = oldVal\n        }\n    }\n\n    // Set the leaf to given dbcsCode.\n    uCode = seq[seq.length-1];\n    node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n    var node = this.decodeTables[nodeIdx];\n    var hasValues = false;\n    var subNodeEmpty = {};\n    for (var i = 0; i < 0x100; i++) {\n        var uCode = node[i];\n        var mbCode = prefix + i;\n        if (skipEncodeChars[mbCode])\n            continue;\n\n        if (uCode >= 0) {\n            this._setEncodeChar(uCode, mbCode);\n            hasValues = true;\n        } else if (uCode <= NODE_START) {\n            var subNodeIdx = NODE_START - uCode;\n            if (!subNodeEmpty[subNodeIdx]) {  // Skip empty subtrees (they are too large in gb18030).\n                var newPrefix = (mbCode << 8) >>> 0;  // NOTE: '>>> 0' keeps 32-bit num positive.\n                if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))\n                    hasValues = true;\n                else\n                    subNodeEmpty[subNodeIdx] = true;\n            }\n        } else if (uCode <= SEQ_START) {\n            this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n            hasValues = true;\n        }\n    }\n    return hasValues;\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n    // Encoder state\n    this.leadSurrogate = -1;\n    this.seqObj = undefined;\n    \n    // Static data\n    this.encodeTable = codec.encodeTable;\n    this.encodeTableSeq = codec.encodeTableSeq;\n    this.defaultCharSingleByte = codec.defCharSB;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n    var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n        leadSurrogate = this.leadSurrogate,\n        seqObj = this.seqObj, nextChar = -1,\n        i = 0, j = 0;\n\n    while (true) {\n        // 0. Get next character.\n        if (nextChar === -1) {\n            if (i == str.length) break;\n            var uCode = str.charCodeAt(i++);\n        }\n        else {\n            var uCode = nextChar;\n            nextChar = -1;    \n        }\n\n        // 1. Handle surrogates.\n        if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n            if (uCode < 0xDC00) { // We've got lead surrogate.\n                if (leadSurrogate === -1) {\n                    leadSurrogate = uCode;\n                    continue;\n                } else {\n                    leadSurrogate = uCode;\n                    // Double lead surrogate found.\n                    uCode = UNASSIGNED;\n                }\n            } else { // We've got trail surrogate.\n                if (leadSurrogate !== -1) {\n                    uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n                    leadSurrogate = -1;\n                } else {\n                    // Incomplete surrogate pair - only trail surrogate found.\n                    uCode = UNASSIGNED;\n                }\n                \n            }\n        }\n        else if (leadSurrogate !== -1) {\n            // Incomplete surrogate pair - only lead surrogate found.\n            nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n            leadSurrogate = -1;\n        }\n\n        // 2. Convert uCode character.\n        var dbcsCode = UNASSIGNED;\n        if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n            var resCode = seqObj[uCode];\n            if (typeof resCode === 'object') { // Sequence continues.\n                seqObj = resCode;\n                continue;\n\n            } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n                dbcsCode = resCode;\n\n            } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n                // Try default character for this sequence\n                resCode = seqObj[DEF_CHAR];\n                if (resCode !== undefined) {\n                    dbcsCode = resCode; // Found. Write it.\n                    nextChar = uCode; // Current character will be written too in the next iteration.\n\n                } else {\n                    // TODO: What if we have no default? (resCode == undefined)\n                    // Then, we should write first char of the sequence as-is and try the rest recursively.\n                    // Didn't do it for now because no encoding has this situation yet.\n                    // Currently, just skip the sequence and write current char.\n                }\n            }\n            seqObj = undefined;\n        }\n        else if (uCode >= 0) {  // Regular character\n            var subtable = this.encodeTable[uCode >> 8];\n            if (subtable !== undefined)\n                dbcsCode = subtable[uCode & 0xFF];\n            \n            if (dbcsCode <= SEQ_START) { // Sequence start\n                seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n                continue;\n            }\n\n            if (dbcsCode == UNASSIGNED && this.gb18030) {\n                // Use GB18030 algorithm to find character(s) to write.\n                var idx = findIdx(this.gb18030.uChars, uCode);\n                if (idx != -1) {\n                    var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n                    newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n                    newBuf[j++] = 0x30 + dbcsCode;\n                    continue;\n                }\n            }\n        }\n\n        // 3. Write dbcsCode character.\n        if (dbcsCode === UNASSIGNED)\n            dbcsCode = this.defaultCharSingleByte;\n        \n        if (dbcsCode < 0x100) {\n            newBuf[j++] = dbcsCode;\n        }\n        else if (dbcsCode < 0x10000) {\n            newBuf[j++] = dbcsCode >> 8;   // high byte\n            newBuf[j++] = dbcsCode & 0xFF; // low byte\n        }\n        else if (dbcsCode < 0x1000000) {\n            newBuf[j++] = dbcsCode >> 16;\n            newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        } else {\n            newBuf[j++] = dbcsCode >>> 24;\n            newBuf[j++] = (dbcsCode >>> 16) & 0xFF;\n            newBuf[j++] = (dbcsCode >>> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        }\n    }\n\n    this.seqObj = seqObj;\n    this.leadSurrogate = leadSurrogate;\n    return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n    if (this.leadSurrogate === -1 && this.seqObj === undefined)\n        return; // All clean. Most often case.\n\n    var newBuf = Buffer.alloc(10), j = 0;\n\n    if (this.seqObj) { // We're in the sequence.\n        var dbcsCode = this.seqObj[DEF_CHAR];\n        if (dbcsCode !== undefined) { // Write beginning of the sequence.\n            if (dbcsCode < 0x100) {\n                newBuf[j++] = dbcsCode;\n            }\n            else {\n                newBuf[j++] = dbcsCode >> 8;   // high byte\n                newBuf[j++] = dbcsCode & 0xFF; // low byte\n            }\n        } else {\n            // See todo above.\n        }\n        this.seqObj = undefined;\n    }\n\n    if (this.leadSurrogate !== -1) {\n        // Incomplete surrogate pair - only lead surrogate found.\n        newBuf[j++] = this.defaultCharSingleByte;\n        this.leadSurrogate = -1;\n    }\n    \n    return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n    // Decoder state\n    this.nodeIdx = 0;\n    this.prevBytes = [];\n\n    // Static data\n    this.decodeTables = codec.decodeTables;\n    this.decodeTableSeq = codec.decodeTableSeq;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n    var newBuf = Buffer.alloc(buf.length*2),\n        nodeIdx = this.nodeIdx, \n        prevBytes = this.prevBytes, prevOffset = this.prevBytes.length,\n        seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence.\n        uCode;\n\n    for (var i = 0, j = 0; i < buf.length; i++) {\n        var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset];\n\n        // Lookup in current trie node.\n        var uCode = this.decodeTables[nodeIdx][curByte];\n\n        if (uCode >= 0) { \n            // Normal character, just use it.\n        }\n        else if (uCode === UNASSIGNED) { // Unknown char.\n            // TODO: Callback with seq.\n            uCode = this.defaultCharUnicode.charCodeAt(0);\n            i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n        }\n        else if (uCode === GB18030_CODE) {\n            if (i >= 3) {\n                var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30);\n            } else {\n                var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + \n                          (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + \n                          (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + \n                          (curByte-0x30);\n            }\n            var idx = findIdx(this.gb18030.gbChars, ptr);\n            uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n        }\n        else if (uCode <= NODE_START) { // Go to next trie node.\n            nodeIdx = NODE_START - uCode;\n            continue;\n        }\n        else if (uCode <= SEQ_START) { // Output a sequence of chars.\n            var seq = this.decodeTableSeq[SEQ_START - uCode];\n            for (var k = 0; k < seq.length - 1; k++) {\n                uCode = seq[k];\n                newBuf[j++] = uCode & 0xFF;\n                newBuf[j++] = uCode >> 8;\n            }\n            uCode = seq[seq.length-1];\n        }\n        else\n            throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n        // Write the character to buffer, handling higher planes using surrogate pair.\n        if (uCode >= 0x10000) { \n            uCode -= 0x10000;\n            var uCodeLead = 0xD800 | (uCode >> 10);\n            newBuf[j++] = uCodeLead & 0xFF;\n            newBuf[j++] = uCodeLead >> 8;\n\n            uCode = 0xDC00 | (uCode & 0x3FF);\n        }\n        newBuf[j++] = uCode & 0xFF;\n        newBuf[j++] = uCode >> 8;\n\n        // Reset trie node.\n        nodeIdx = 0; seqStart = i+1;\n    }\n\n    this.nodeIdx = nodeIdx;\n    this.prevBytes = (seqStart >= 0)\n        ? Array.prototype.slice.call(buf, seqStart)\n        : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));\n\n    return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n    var ret = '';\n\n    // Try to parse all remaining chars.\n    while (this.prevBytes.length > 0) {\n        // Skip 1 character in the buffer.\n        ret += this.defaultCharUnicode;\n        var bytesArr = this.prevBytes.slice(1);\n\n        // Parse remaining as usual.\n        this.prevBytes = [];\n        this.nodeIdx = 0;\n        if (bytesArr.length > 0)\n            ret += this.write(bytesArr);\n    }\n\n    this.prevBytes = [];\n    this.nodeIdx = 0;\n    return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n    if (table[0] > val)\n        return -1;\n\n    var l = 0, r = table.length;\n    while (l < r-1) { // always table[l] <= val < table[r]\n        var mid = l + ((r-l+1) >> 1);\n        if (table[mid] <= val)\n            l = mid;\n        else\n            r = mid;\n    }\n    return l;\n}\n\n","\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n    \n    // == Japanese/ShiftJIS ====================================================\n    // All japanese encodings are based on JIS X set of standards:\n    // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.\n    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n    //              Has several variations in 1978, 1983, 1990 and 1997.\n    // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n    // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n    //              2 planes, first is superset of 0208, second - revised 0212.\n    //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n    // Byte encodings are:\n    //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n    //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n    //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n    //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.\n    //               0x00-0x7F       - lower part of 0201\n    //               0x8E, 0xA1-0xDF - upper part of 0201\n    //               (0xA1-0xFE)x2   - 0208 plane (94x94).\n    //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n    //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n    //               Used as-is in ISO2022 family.\n    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n    //                0201-1976 Roman, 0208-1978, 0208-1983.\n    //  * ISO2022-JP-1: Adds esc seq for 0212-1990.\n    //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n    //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n    //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n    //\n    // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n    //\n    // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n    'shiftjis': {\n        type: '_dbcs',\n        table: function() { return require('./tables/shiftjis.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n        encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n    },\n    'csshiftjis': 'shiftjis',\n    'mskanji': 'shiftjis',\n    'sjis': 'shiftjis',\n    'windows31j': 'shiftjis',\n    'ms31j': 'shiftjis',\n    'xsjis': 'shiftjis',\n    'windows932': 'shiftjis',\n    'ms932': 'shiftjis',\n    '932': 'shiftjis',\n    'cp932': 'shiftjis',\n\n    'eucjp': {\n        type: '_dbcs',\n        table: function() { return require('./tables/eucjp.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n    },\n\n    // TODO: KDDI extension to Shift_JIS\n    // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n    // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n    // == Chinese/GBK ==========================================================\n    // http://en.wikipedia.org/wiki/GBK\n    // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n    // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n    'gb2312': 'cp936',\n    'gb231280': 'cp936',\n    'gb23121980': 'cp936',\n    'csgb2312': 'cp936',\n    'csiso58gb231280': 'cp936',\n    'euccn': 'cp936',\n\n    // Microsoft's CP936 is a subset and approximation of GBK.\n    'windows936': 'cp936',\n    'ms936': 'cp936',\n    '936': 'cp936',\n    'cp936': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json') },\n    },\n\n    // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n    'gbk': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n    },\n    'xgbk': 'gbk',\n    'isoir58': 'gbk',\n\n    // GB18030 is an algorithmic extension of GBK.\n    // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n    // http://icu-project.org/docs/papers/gb18030.html\n    // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n    // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n    'gb18030': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n        gb18030: function() { return require('./tables/gb18030-ranges.json') },\n        encodeSkipVals: [0x80],\n        encodeAdd: {'€': 0xA2E3},\n    },\n\n    'chinese': 'gb18030',\n\n\n    // == Korean ===============================================================\n    // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n    'windows949': 'cp949',\n    'ms949': 'cp949',\n    '949': 'cp949',\n    'cp949': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp949.json') },\n    },\n\n    'cseuckr': 'cp949',\n    'csksc56011987': 'cp949',\n    'euckr': 'cp949',\n    'isoir149': 'cp949',\n    'korean': 'cp949',\n    'ksc56011987': 'cp949',\n    'ksc56011989': 'cp949',\n    'ksc5601': 'cp949',\n\n\n    // == Big5/Taiwan/Hong Kong ================================================\n    // There are lots of tables for Big5 and cp950. Please see the following links for history:\n    // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n    // Variations, in roughly number of defined chars:\n    //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n    //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n    //  * Big5-2003 (Taiwan standard) almost superset of cp950.\n    //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n    //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n    //    Plus, it has 4 combining sequences.\n    //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n    //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n    //    Implementations are not consistent within browsers; sometimes labeled as just big5.\n    //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n    //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n    //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n    //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n    //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n    // \n    // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n    // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n    'windows950': 'cp950',\n    'ms950': 'cp950',\n    '950': 'cp950',\n    'cp950': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json') },\n    },\n\n    // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n    'big5': 'big5hkscs',\n    'big5hkscs': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n        encodeSkipVals: [\n            // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n            // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n            // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n            0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n            0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n            0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n            0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n            0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n            // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n            0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce,\n        ],\n    },\n\n    'cnbig5': 'big5hkscs',\n    'csbig5': 'big5hkscs',\n    'xxbig5': 'big5hkscs',\n};\n","\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n    require(\"./internal\"),\n    require(\"./utf32\"),\n    require(\"./utf16\"),\n    require(\"./utf7\"),\n    require(\"./sbcs-codec\"),\n    require(\"./sbcs-data\"),\n    require(\"./sbcs-data-generated\"),\n    require(\"./dbcs-codec\"),\n    require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it.\nfor (var i = 0; i < modules.length; i++) {\n    var module = modules[i];\n    for (var enc in module)\n        if (Object.prototype.hasOwnProperty.call(module, enc))\n            exports[enc] = module[enc];\n}\n","\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), \n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function(stream_module) {\n    var Transform = stream_module.Transform;\n\n    // == Encoder stream =======================================================\n\n    function IconvLiteEncoderStream(conv, options) {\n        this.conv = conv;\n        options = options || {};\n        options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n        Transform.call(this, options);\n    }\n\n    IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n        constructor: { value: IconvLiteEncoderStream }\n    });\n\n    IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n        if (typeof chunk != 'string')\n            return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n        try {\n            var res = this.conv.write(chunk);\n            if (res && res.length) this.push(res);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteEncoderStream.prototype._flush = function(done) {\n        try {\n            var res = this.conv.end();\n            if (res && res.length) this.push(res);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteEncoderStream.prototype.collect = function(cb) {\n        var chunks = [];\n        this.on('error', cb);\n        this.on('data', function(chunk) { chunks.push(chunk); });\n        this.on('end', function() {\n            cb(null, Buffer.concat(chunks));\n        });\n        return this;\n    }\n\n\n    // == Decoder stream =======================================================\n\n    function IconvLiteDecoderStream(conv, options) {\n        this.conv = conv;\n        options = options || {};\n        options.encoding = this.encoding = 'utf8'; // We output strings.\n        Transform.call(this, options);\n    }\n\n    IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n        constructor: { value: IconvLiteDecoderStream }\n    });\n\n    IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n        if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array))\n            return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n        try {\n            var res = this.conv.write(chunk);\n            if (res && res.length) this.push(res, this.encoding);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteDecoderStream.prototype._flush = function(done) {\n        try {\n            var res = this.conv.end();\n            if (res && res.length) this.push(res, this.encoding);                \n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteDecoderStream.prototype.collect = function(cb) {\n        var res = '';\n        this.on('error', cb);\n        this.on('data', function(chunk) { res += chunk; });\n        this.on('end', function() {\n            cb(null, res);\n        });\n        return this;\n    }\n\n    return {\n        IconvLiteEncoderStream: IconvLiteEncoderStream,\n        IconvLiteDecoderStream: IconvLiteDecoderStream,\n    };\n};\n","\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n    iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '�';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n    str = \"\" + (str || \"\"); // Ensure string.\n\n    var encoder = iconv.getEncoder(encoding, options);\n\n    var res = encoder.write(str);\n    var trail = encoder.end();\n    \n    return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n    if (typeof buf === 'string') {\n        if (!iconv.skipDecodeWarning) {\n            console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n            iconv.skipDecodeWarning = true;\n        }\n\n        buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n    }\n\n    var decoder = iconv.getDecoder(encoding, options);\n\n    var res = decoder.write(buf);\n    var trail = decoder.end();\n\n    return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n    try {\n        iconv.getCodec(enc);\n        return true;\n    } catch (e) {\n        return false;\n    }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n    if (!iconv.encodings)\n        iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n    \n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    var enc = iconv._canonicalizeEncoding(encoding);\n\n    // Traverse iconv.encodings to find actual codec.\n    var codecOptions = {};\n    while (true) {\n        var codec = iconv._codecDataCache[enc];\n        if (codec)\n            return codec;\n\n        var codecDef = iconv.encodings[enc];\n\n        switch (typeof codecDef) {\n            case \"string\": // Direct alias to other encoding.\n                enc = codecDef;\n                break;\n\n            case \"object\": // Alias with options. Can be layered.\n                for (var key in codecDef)\n                    codecOptions[key] = codecDef[key];\n\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n                \n                enc = codecDef.type;\n                break;\n\n            case \"function\": // Codec itself.\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n\n                // The codec function must load all tables and return object with .encoder and .decoder methods.\n                // It'll be called only once (for each different options object).\n                codec = new codecDef(codecOptions, iconv);\n\n                iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n                return codec;\n\n            default:\n                throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n        }\n    }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        encoder = new codec.encoder(options, codec);\n\n    if (codec.bomAware && options && options.addBOM)\n        encoder = new bomHandling.PrependBOM(encoder, options);\n\n    return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        decoder = new codec.decoder(options, codec);\n\n    if (codec.bomAware && !(options && options.stripBOM === false))\n        decoder = new bomHandling.StripBOM(decoder, options);\n\n    return decoder;\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\niconv.enableStreamingAPI = function enableStreamingAPI(stream_module) {\n    if (iconv.supportsStreams)\n        return;\n\n    // Dependency-inject stream module to create IconvLite stream classes.\n    var streams = require(\"./streams\")(stream_module);\n\n    // Not public API yet, but expose the stream classes.\n    iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;\n    iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;\n\n    // Streaming API.\n    iconv.encodeStream = function encodeStream(encoding, options) {\n        return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n    }\n\n    iconv.decodeStream = function decodeStream(encoding, options) {\n        return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n    }\n\n    iconv.supportsStreams = true;\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar stream_module;\ntry {\n    stream_module = require(\"stream\");\n} catch (e) {}\n\nif (stream_module && stream_module.Transform) {\n    iconv.enableStreamingAPI(stream_module);\n\n} else {\n    // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n    iconv.encodeStream = iconv.decodeStream = function() {\n        throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\");\n    };\n}\n\nif (\"Ā\" != \"\\u0100\") {\n    console.error(\"iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n","/*!\n * unpipe\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = unpipe\n\n/**\n * Determine if there are Node.js pipe-like data listeners.\n * @private\n */\n\nfunction hasPipeDataListeners(stream) {\n  var listeners = stream.listeners('data')\n\n  for (var i = 0; i < listeners.length; i++) {\n    if (listeners[i].name === 'ondata') {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Unpipe a stream from all destinations.\n *\n * @param {object} stream\n * @public\n */\n\nfunction unpipe(stream) {\n  if (!stream) {\n    throw new TypeError('argument stream is required')\n  }\n\n  if (typeof stream.unpipe === 'function') {\n    // new-style\n    stream.unpipe()\n    return\n  }\n\n  // Node.js 0.8 hack\n  if (!hasPipeDataListeners(stream)) {\n    return\n  }\n\n  var listener\n  var listeners = stream.listeners('close')\n\n  for (var i = 0; i < listeners.length; i++) {\n    listener = listeners[i]\n\n    if (listener.name !== 'cleanup' && listener.name !== 'onclose') {\n      continue\n    }\n\n    // invoke the listener\n    listener.call(stream)\n  }\n}\n","/*!\n * raw-body\n * Copyright(c) 2013-2014 Jonathan Ong\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar bytes = require('bytes')\nvar createError = require('http-errors')\nvar iconv = require('iconv-lite')\nvar unpipe = require('unpipe')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getRawBody\n\n/**\n * Module variables.\n * @private\n */\n\nvar ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /\n\n/**\n * Get the decoder for a given encoding.\n *\n * @param {string} encoding\n * @private\n */\n\nfunction getDecoder (encoding) {\n  if (!encoding) return null\n\n  try {\n    return iconv.getDecoder(encoding)\n  } catch (e) {\n    // error getting decoder\n    if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e\n\n    // the encoding was not found\n    throw createError(415, 'specified encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    })\n  }\n}\n\n/**\n * Get the raw body of a stream (typically HTTP).\n *\n * @param {object} stream\n * @param {object|string|function} [options]\n * @param {function} [callback]\n * @public\n */\n\nfunction getRawBody (stream, options, callback) {\n  var done = callback\n  var opts = options || {}\n\n  // light validation\n  if (stream === undefined) {\n    throw new TypeError('argument stream is required')\n  } else if (typeof stream !== 'object' || stream === null || typeof stream.on !== 'function') {\n    throw new TypeError('argument stream must be a stream')\n  }\n\n  if (options === true || typeof options === 'string') {\n    // short cut for encoding\n    opts = {\n      encoding: options\n    }\n  }\n\n  if (typeof options === 'function') {\n    done = options\n    opts = {}\n  }\n\n  // validate callback is a function, if provided\n  if (done !== undefined && typeof done !== 'function') {\n    throw new TypeError('argument callback must be a function')\n  }\n\n  // require the callback without promises\n  if (!done && !global.Promise) {\n    throw new TypeError('argument callback is required')\n  }\n\n  // get encoding\n  var encoding = opts.encoding !== true\n    ? opts.encoding\n    : 'utf-8'\n\n  // convert the limit to an integer\n  var limit = bytes.parse(opts.limit)\n\n  // convert the expected length to an integer\n  var length = opts.length != null && !isNaN(opts.length)\n    ? parseInt(opts.length, 10)\n    : null\n\n  if (done) {\n    // classic callback style\n    return readStream(stream, encoding, length, limit, wrap(done))\n  }\n\n  return new Promise(function executor (resolve, reject) {\n    readStream(stream, encoding, length, limit, function onRead (err, buf) {\n      if (err) return reject(err)\n      resolve(buf)\n    })\n  })\n}\n\n/**\n * Halt a stream.\n *\n * @param {Object} stream\n * @private\n */\n\nfunction halt (stream) {\n  // unpipe everything from the stream\n  unpipe(stream)\n\n  // pause stream\n  if (typeof stream.pause === 'function') {\n    stream.pause()\n  }\n}\n\n/**\n * Read the data from the stream.\n *\n * @param {object} stream\n * @param {string} encoding\n * @param {number} length\n * @param {number} limit\n * @param {function} callback\n * @public\n */\n\nfunction readStream (stream, encoding, length, limit, callback) {\n  var complete = false\n  var sync = true\n\n  // check the length and limit options.\n  // note: we intentionally leave the stream paused,\n  // so users should handle the stream themselves.\n  if (limit !== null && length !== null && length > limit) {\n    return done(createError(413, 'request entity too large', {\n      expected: length,\n      length: length,\n      limit: limit,\n      type: 'entity.too.large'\n    }))\n  }\n\n  // streams1: assert request encoding is buffer.\n  // streams2+: assert the stream encoding is buffer.\n  //   stream._decoder: streams1\n  //   state.encoding: streams2\n  //   state.decoder: streams2, specifically < 0.10.6\n  var state = stream._readableState\n  if (stream._decoder || (state && (state.encoding || state.decoder))) {\n    // developer error\n    return done(createError(500, 'stream encoding should not be set', {\n      type: 'stream.encoding.set'\n    }))\n  }\n\n  if (typeof stream.readable !== 'undefined' && !stream.readable) {\n    return done(createError(500, 'stream is not readable', {\n      type: 'stream.not.readable'\n    }))\n  }\n\n  var received = 0\n  var decoder\n\n  try {\n    decoder = getDecoder(encoding)\n  } catch (err) {\n    return done(err)\n  }\n\n  var buffer = decoder\n    ? ''\n    : []\n\n  // attach listeners\n  stream.on('aborted', onAborted)\n  stream.on('close', cleanup)\n  stream.on('data', onData)\n  stream.on('end', onEnd)\n  stream.on('error', onEnd)\n\n  // mark sync section complete\n  sync = false\n\n  function done () {\n    var args = new Array(arguments.length)\n\n    // copy arguments\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n\n    // mark complete\n    complete = true\n\n    if (sync) {\n      process.nextTick(invokeCallback)\n    } else {\n      invokeCallback()\n    }\n\n    function invokeCallback () {\n      cleanup()\n\n      if (args[0]) {\n        // halt the stream on error\n        halt(stream)\n      }\n\n      callback.apply(null, args)\n    }\n  }\n\n  function onAborted () {\n    if (complete) return\n\n    done(createError(400, 'request aborted', {\n      code: 'ECONNABORTED',\n      expected: length,\n      length: length,\n      received: received,\n      type: 'request.aborted'\n    }))\n  }\n\n  function onData (chunk) {\n    if (complete) return\n\n    received += chunk.length\n\n    if (limit !== null && received > limit) {\n      done(createError(413, 'request entity too large', {\n        limit: limit,\n        received: received,\n        type: 'entity.too.large'\n      }))\n    } else if (decoder) {\n      buffer += decoder.write(chunk)\n    } else {\n      buffer.push(chunk)\n    }\n  }\n\n  function onEnd (err) {\n    if (complete) return\n    if (err) return done(err)\n\n    if (length !== null && received !== length) {\n      done(createError(400, 'request size did not match content length', {\n        expected: length,\n        length: length,\n        received: received,\n        type: 'request.size.invalid'\n      }))\n    } else {\n      var string = decoder\n        ? buffer + (decoder.end() || '')\n        : Buffer.concat(buffer)\n      done(null, string)\n    }\n  }\n\n  function cleanup () {\n    buffer = null\n\n    stream.removeListener('aborted', onAborted)\n    stream.removeListener('data', onData)\n    stream.removeListener('end', onEnd)\n    stream.removeListener('error', onEnd)\n    stream.removeListener('close', cleanup)\n  }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n  try {\n    return require('async_hooks')\n  } catch (e) {\n    return {}\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n  var res\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null)\n}\n","/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter     = token \"=\" ( token / quoted-string )\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext        = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text      = %x80-FF\n * quoted-pair   = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/ // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text    = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type       = token\n * subtype    = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || !TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  var string = type\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!TOKEN_REGEXP.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  var header = typeof string === 'object'\n    ? getcontenttype(string)\n    : string\n\n  if (typeof header !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = header.indexOf(';')\n  var type = index !== -1\n    ? header.slice(0, index).trim()\n    : header.trim()\n\n  if (!TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid media type')\n  }\n\n  var obj = new ContentType(type.toLowerCase())\n\n  // parse parameters\n  if (index !== -1) {\n    var key\n    var match\n    var value\n\n    PARAM_REGEXP.lastIndex = index\n\n    while ((match = PARAM_REGEXP.exec(header))) {\n      if (match.index !== index) {\n        throw new TypeError('invalid parameter format')\n      }\n\n      index += match[0].length\n      key = match[1].toLowerCase()\n      value = match[2]\n\n      if (value.charCodeAt(0) === 0x22 /* \" */) {\n        // remove quotes\n        value = value.slice(1, -1)\n\n        // remove escapes\n        if (value.indexOf('\\\\') !== -1) {\n          value = value.replace(QESC_REGEXP, '$1')\n        }\n      }\n\n      obj.parameters[key] = value\n    }\n\n    if (index !== header.length) {\n      throw new TypeError('invalid parameter format')\n    }\n  }\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n  var header\n\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    header = obj.getHeader('content-type')\n  } else if (typeof obj.headers === 'object') {\n    // req-like\n    header = obj.headers && obj.headers['content-type']\n  }\n\n  if (typeof header !== 'string') {\n    throw new TypeError('content-type header is missing from object')\n  }\n\n  return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (TOKEN_REGEXP.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n  this.parameters = Object.create(null)\n  this.type = type\n}\n","import { randomUUID } from \"node:crypto\";\nimport { JSONRPCMessageSchema } from \"../types.js\";\nimport getRawBody from \"raw-body\";\nimport contentType from \"content-type\";\nimport { URL } from 'url';\nconst MAXIMUM_MESSAGE_SIZE = \"4mb\";\n/**\n * Server transport for SSE: this will send messages over an SSE connection and receive messages from HTTP POST requests.\n *\n * This transport is only available in Node.js environments.\n */\nexport class SSEServerTransport {\n    /**\n     * Creates a new SSE server transport, which will direct the client to POST messages to the relative or absolute URL identified by `_endpoint`.\n     */\n    constructor(_endpoint, res, options) {\n        this._endpoint = _endpoint;\n        this.res = res;\n        this._sessionId = randomUUID();\n        this._options = options || { enableDnsRebindingProtection: false };\n    }\n    /**\n     * Validates request headers for DNS rebinding protection.\n     * @returns Error message if validation fails, undefined if validation passes.\n     */\n    validateRequestHeaders(req) {\n        // Skip validation if protection is not enabled\n        if (!this._options.enableDnsRebindingProtection) {\n            return undefined;\n        }\n        // Validate Host header if allowedHosts is configured\n        if (this._options.allowedHosts && this._options.allowedHosts.length > 0) {\n            const hostHeader = req.headers.host;\n            if (!hostHeader || !this._options.allowedHosts.includes(hostHeader)) {\n                return `Invalid Host header: ${hostHeader}`;\n            }\n        }\n        // Validate Origin header if allowedOrigins is configured\n        if (this._options.allowedOrigins && this._options.allowedOrigins.length > 0) {\n            const originHeader = req.headers.origin;\n            if (!originHeader || !this._options.allowedOrigins.includes(originHeader)) {\n                return `Invalid Origin header: ${originHeader}`;\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Handles the initial SSE connection request.\n     *\n     * This should be called when a GET request is made to establish the SSE stream.\n     */\n    async start() {\n        if (this._sseResponse) {\n            throw new Error(\"SSEServerTransport already started! If using Server class, note that connect() calls start() automatically.\");\n        }\n        this.res.writeHead(200, {\n            \"Content-Type\": \"text/event-stream\",\n            \"Cache-Control\": \"no-cache, no-transform\",\n            Connection: \"keep-alive\",\n        });\n        // Send the endpoint event\n        // Use a dummy base URL because this._endpoint is relative.\n        // This allows using URL/URLSearchParams for robust parameter handling.\n        const dummyBase = 'http://localhost'; // Any valid base works\n        const endpointUrl = new URL(this._endpoint, dummyBase);\n        endpointUrl.searchParams.set('sessionId', this._sessionId);\n        // Reconstruct the relative URL string (pathname + search + hash)\n        const relativeUrlWithSession = endpointUrl.pathname + endpointUrl.search + endpointUrl.hash;\n        this.res.write(`event: endpoint\\ndata: ${relativeUrlWithSession}\\n\\n`);\n        this._sseResponse = this.res;\n        this.res.on(\"close\", () => {\n            var _a;\n            this._sseResponse = undefined;\n            (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);\n        });\n    }\n    /**\n     * Handles incoming POST messages.\n     *\n     * This should be called when a POST request is made to send a message to the server.\n     */\n    async handlePostMessage(req, res, parsedBody) {\n        var _a, _b, _c, _d;\n        if (!this._sseResponse) {\n            const message = \"SSE connection not established\";\n            res.writeHead(500).end(message);\n            throw new Error(message);\n        }\n        // Validate request headers for DNS rebinding protection\n        const validationError = this.validateRequestHeaders(req);\n        if (validationError) {\n            res.writeHead(403).end(validationError);\n            (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, new Error(validationError));\n            return;\n        }\n        const authInfo = req.auth;\n        const requestInfo = { headers: req.headers };\n        let body;\n        try {\n            const ct = contentType.parse((_b = req.headers[\"content-type\"]) !== null && _b !== void 0 ? _b : \"\");\n            if (ct.type !== \"application/json\") {\n                throw new Error(`Unsupported content-type: ${ct.type}`);\n            }\n            body = parsedBody !== null && parsedBody !== void 0 ? parsedBody : await getRawBody(req, {\n                limit: MAXIMUM_MESSAGE_SIZE,\n                encoding: (_c = ct.parameters.charset) !== null && _c !== void 0 ? _c : \"utf-8\",\n            });\n        }\n        catch (error) {\n            res.writeHead(400).end(String(error));\n            (_d = this.onerror) === null || _d === void 0 ? void 0 : _d.call(this, error);\n            return;\n        }\n        try {\n            await this.handleMessage(typeof body === 'string' ? JSON.parse(body) : body, { requestInfo, authInfo });\n        }\n        catch (_e) {\n            res.writeHead(400).end(`Invalid message: ${body}`);\n            return;\n        }\n        res.writeHead(202).end(\"Accepted\");\n    }\n    /**\n     * Handle a client message, regardless of how it arrived. This can be used to inform the server of messages that arrive via a means different than HTTP POST.\n     */\n    async handleMessage(message, extra) {\n        var _a, _b;\n        let parsedMessage;\n        try {\n            parsedMessage = JSONRPCMessageSchema.parse(message);\n        }\n        catch (error) {\n            (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);\n            throw error;\n        }\n        (_b = this.onmessage) === null || _b === void 0 ? void 0 : _b.call(this, parsedMessage, extra);\n    }\n    async close() {\n        var _a, _b;\n        (_a = this._sseResponse) === null || _a === void 0 ? void 0 : _a.end();\n        this._sseResponse = undefined;\n        (_b = this.onclose) === null || _b === void 0 ? void 0 : _b.call(this);\n    }\n    async send(message) {\n        if (!this._sseResponse) {\n            throw new Error(\"Not connected\");\n        }\n        this._sseResponse.write(`event: message\\ndata: ${JSON.stringify(message)}\\n\\n`);\n    }\n    /**\n     * Returns the session ID for this transport.\n     *\n     * This can be used to route incoming POST requests.\n     */\n    get sessionId() {\n        return this._sessionId;\n    }\n}\n//# sourceMappingURL=sse.js.map","import { isInitializeRequest, isJSONRPCError, isJSONRPCRequest, isJSONRPCResponse, JSONRPCMessageSchema, SUPPORTED_PROTOCOL_VERSIONS, DEFAULT_NEGOTIATED_PROTOCOL_VERSION } from \"../types.js\";\nimport getRawBody from \"raw-body\";\nimport contentType from \"content-type\";\nimport { randomUUID } from \"node:crypto\";\nconst MAXIMUM_MESSAGE_SIZE = \"4mb\";\n/**\n * Server transport for Streamable HTTP: this implements the MCP Streamable HTTP transport specification.\n * It supports both SSE streaming and direct HTTP responses.\n *\n * Usage example:\n *\n * ```typescript\n * // Stateful mode - server sets the session ID\n * const statefulTransport = new StreamableHTTPServerTransport({\n *   sessionIdGenerator: () => randomUUID(),\n * });\n *\n * // Stateless mode - explicitly set session ID to undefined\n * const statelessTransport = new StreamableHTTPServerTransport({\n *   sessionIdGenerator: undefined,\n * });\n *\n * // Using with pre-parsed request body\n * app.post('/mcp', (req, res) => {\n *   transport.handleRequest(req, res, req.body);\n * });\n * ```\n *\n * In stateful mode:\n * - Session ID is generated and included in response headers\n * - Session ID is always included in initialization responses\n * - Requests with invalid session IDs are rejected with 404 Not Found\n * - Non-initialization requests without a session ID are rejected with 400 Bad Request\n * - State is maintained in-memory (connections, message history)\n *\n * In stateless mode:\n * - No Session ID is included in any responses\n * - No session validation is performed\n */\nexport class StreamableHTTPServerTransport {\n    constructor(options) {\n        var _a, _b;\n        this._started = false;\n        this._streamMapping = new Map();\n        this._requestToStreamMapping = new Map();\n        this._requestResponseMap = new Map();\n        this._initialized = false;\n        this._enableJsonResponse = false;\n        this._standaloneSseStreamId = '_GET_stream';\n        this.sessionIdGenerator = options.sessionIdGenerator;\n        this._enableJsonResponse = (_a = options.enableJsonResponse) !== null && _a !== void 0 ? _a : false;\n        this._eventStore = options.eventStore;\n        this._onsessioninitialized = options.onsessioninitialized;\n        this._onsessionclosed = options.onsessionclosed;\n        this._allowedHosts = options.allowedHosts;\n        this._allowedOrigins = options.allowedOrigins;\n        this._enableDnsRebindingProtection = (_b = options.enableDnsRebindingProtection) !== null && _b !== void 0 ? _b : false;\n    }\n    /**\n     * Starts the transport. This is required by the Transport interface but is a no-op\n     * for the Streamable HTTP transport as connections are managed per-request.\n     */\n    async start() {\n        if (this._started) {\n            throw new Error(\"Transport already started\");\n        }\n        this._started = true;\n    }\n    /**\n     * Validates request headers for DNS rebinding protection.\n     * @returns Error message if validation fails, undefined if validation passes.\n     */\n    validateRequestHeaders(req) {\n        // Skip validation if protection is not enabled\n        if (!this._enableDnsRebindingProtection) {\n            return undefined;\n        }\n        // Validate Host header if allowedHosts is configured\n        if (this._allowedHosts && this._allowedHosts.length > 0) {\n            const hostHeader = req.headers.host;\n            if (!hostHeader || !this._allowedHosts.includes(hostHeader)) {\n                return `Invalid Host header: ${hostHeader}`;\n            }\n        }\n        // Validate Origin header if allowedOrigins is configured\n        if (this._allowedOrigins && this._allowedOrigins.length > 0) {\n            const originHeader = req.headers.origin;\n            if (!originHeader || !this._allowedOrigins.includes(originHeader)) {\n                return `Invalid Origin header: ${originHeader}`;\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Handles an incoming HTTP request, whether GET or POST\n     */\n    async handleRequest(req, res, parsedBody) {\n        var _a;\n        // Validate request headers for DNS rebinding protection\n        const validationError = this.validateRequestHeaders(req);\n        if (validationError) {\n            res.writeHead(403).end(JSON.stringify({\n                jsonrpc: \"2.0\",\n                error: {\n                    code: -32000,\n                    message: validationError\n                },\n                id: null\n            }));\n            (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, new Error(validationError));\n            return;\n        }\n        if (req.method === \"POST\") {\n            await this.handlePostRequest(req, res, parsedBody);\n        }\n        else if (req.method === \"GET\") {\n            await this.handleGetRequest(req, res);\n        }\n        else if (req.method === \"DELETE\") {\n            await this.handleDeleteRequest(req, res);\n        }\n        else {\n            await this.handleUnsupportedRequest(res);\n        }\n    }\n    /**\n     * Handles GET requests for SSE stream\n     */\n    async handleGetRequest(req, res) {\n        // The client MUST include an Accept header, listing text/event-stream as a supported content type.\n        const acceptHeader = req.headers.accept;\n        if (!(acceptHeader === null || acceptHeader === void 0 ? void 0 : acceptHeader.includes(\"text/event-stream\"))) {\n            res.writeHead(406).end(JSON.stringify({\n                jsonrpc: \"2.0\",\n                error: {\n                    code: -32000,\n                    message: \"Not Acceptable: Client must accept text/event-stream\"\n                },\n                id: null\n            }));\n            return;\n        }\n        // If an Mcp-Session-Id is returned by the server during initialization,\n        // clients using the Streamable HTTP transport MUST include it\n        // in the Mcp-Session-Id header on all of their subsequent HTTP requests.\n        if (!this.validateSession(req, res)) {\n            return;\n        }\n        if (!this.validateProtocolVersion(req, res)) {\n            return;\n        }\n        // Handle resumability: check for Last-Event-ID header\n        if (this._eventStore) {\n            const lastEventId = req.headers['last-event-id'];\n            if (lastEventId) {\n                await this.replayEvents(lastEventId, res);\n                return;\n            }\n        }\n        // The server MUST either return Content-Type: text/event-stream in response to this HTTP GET,\n        // or else return HTTP 405 Method Not Allowed\n        const headers = {\n            \"Content-Type\": \"text/event-stream\",\n            \"Cache-Control\": \"no-cache, no-transform\",\n            Connection: \"keep-alive\",\n        };\n        // After initialization, always include the session ID if we have one\n        if (this.sessionId !== undefined) {\n            headers[\"mcp-session-id\"] = this.sessionId;\n        }\n        // Check if there's already an active standalone SSE stream for this session\n        if (this._streamMapping.get(this._standaloneSseStreamId) !== undefined) {\n            // Only one GET SSE stream is allowed per session\n            res.writeHead(409).end(JSON.stringify({\n                jsonrpc: \"2.0\",\n                error: {\n                    code: -32000,\n                    message: \"Conflict: Only one SSE stream is allowed per session\"\n                },\n                id: null\n            }));\n            return;\n        }\n        // We need to send headers immediately as messages will arrive much later,\n        // otherwise the client will just wait for the first message\n        res.writeHead(200, headers).flushHeaders();\n        // Assign the response to the standalone SSE stream\n        this._streamMapping.set(this._standaloneSseStreamId, res);\n        // Set up close handler for client disconnects\n        res.on(\"close\", () => {\n            this._streamMapping.delete(this._standaloneSseStreamId);\n        });\n    }\n    /**\n     * Replays events that would have been sent after the specified event ID\n     * Only used when resumability is enabled\n     */\n    async replayEvents(lastEventId, res) {\n        var _a, _b;\n        if (!this._eventStore) {\n            return;\n        }\n        try {\n            const headers = {\n                \"Content-Type\": \"text/event-stream\",\n                \"Cache-Control\": \"no-cache, no-transform\",\n                Connection: \"keep-alive\",\n            };\n            if (this.sessionId !== undefined) {\n                headers[\"mcp-session-id\"] = this.sessionId;\n            }\n            res.writeHead(200, headers).flushHeaders();\n            const streamId = await ((_a = this._eventStore) === null || _a === void 0 ? void 0 : _a.replayEventsAfter(lastEventId, {\n                send: async (eventId, message) => {\n                    var _a;\n                    if (!this.writeSSEEvent(res, message, eventId)) {\n                        (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, new Error(\"Failed replay events\"));\n                        res.end();\n                    }\n                }\n            }));\n            this._streamMapping.set(streamId, res);\n        }\n        catch (error) {\n            (_b = this.onerror) === null || _b === void 0 ? void 0 : _b.call(this, error);\n        }\n    }\n    /**\n     * Writes an event to the SSE stream with proper formatting\n     */\n    writeSSEEvent(res, message, eventId) {\n        let eventData = `event: message\\n`;\n        // Include event ID if provided - this is important for resumability\n        if (eventId) {\n            eventData += `id: ${eventId}\\n`;\n        }\n        eventData += `data: ${JSON.stringify(message)}\\n\\n`;\n        return res.write(eventData);\n    }\n    /**\n     * Handles unsupported requests (PUT, PATCH, etc.)\n     */\n    async handleUnsupportedRequest(res) {\n        res.writeHead(405, {\n            \"Allow\": \"GET, POST, DELETE\"\n        }).end(JSON.stringify({\n            jsonrpc: \"2.0\",\n            error: {\n                code: -32000,\n                message: \"Method not allowed.\"\n            },\n            id: null\n        }));\n    }\n    /**\n     * Handles POST requests containing JSON-RPC messages\n     */\n    async handlePostRequest(req, res, parsedBody) {\n        var _a, _b, _c, _d, _e;\n        try {\n            // Validate the Accept header\n            const acceptHeader = req.headers.accept;\n            // The client MUST include an Accept header, listing both application/json and text/event-stream as supported content types.\n            if (!(acceptHeader === null || acceptHeader === void 0 ? void 0 : acceptHeader.includes(\"application/json\")) || !acceptHeader.includes(\"text/event-stream\")) {\n                res.writeHead(406).end(JSON.stringify({\n                    jsonrpc: \"2.0\",\n                    error: {\n                        code: -32000,\n                        message: \"Not Acceptable: Client must accept both application/json and text/event-stream\"\n                    },\n                    id: null\n                }));\n                return;\n            }\n            const ct = req.headers[\"content-type\"];\n            if (!ct || !ct.includes(\"application/json\")) {\n                res.writeHead(415).end(JSON.stringify({\n                    jsonrpc: \"2.0\",\n                    error: {\n                        code: -32000,\n                        message: \"Unsupported Media Type: Content-Type must be application/json\"\n                    },\n                    id: null\n                }));\n                return;\n            }\n            const authInfo = req.auth;\n            const requestInfo = { headers: req.headers };\n            let rawMessage;\n            if (parsedBody !== undefined) {\n                rawMessage = parsedBody;\n            }\n            else {\n                const parsedCt = contentType.parse(ct);\n                const body = await getRawBody(req, {\n                    limit: MAXIMUM_MESSAGE_SIZE,\n                    encoding: (_a = parsedCt.parameters.charset) !== null && _a !== void 0 ? _a : \"utf-8\",\n                });\n                rawMessage = JSON.parse(body.toString());\n            }\n            let messages;\n            // handle batch and single messages\n            if (Array.isArray(rawMessage)) {\n                messages = rawMessage.map(msg => JSONRPCMessageSchema.parse(msg));\n            }\n            else {\n                messages = [JSONRPCMessageSchema.parse(rawMessage)];\n            }\n            // Check if this is an initialization request\n            // https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/lifecycle/\n            const isInitializationRequest = messages.some(isInitializeRequest);\n            if (isInitializationRequest) {\n                // If it's a server with session management and the session ID is already set we should reject the request\n                // to avoid re-initialization.\n                if (this._initialized && this.sessionId !== undefined) {\n                    res.writeHead(400).end(JSON.stringify({\n                        jsonrpc: \"2.0\",\n                        error: {\n                            code: -32600,\n                            message: \"Invalid Request: Server already initialized\"\n                        },\n                        id: null\n                    }));\n                    return;\n                }\n                if (messages.length > 1) {\n                    res.writeHead(400).end(JSON.stringify({\n                        jsonrpc: \"2.0\",\n                        error: {\n                            code: -32600,\n                            message: \"Invalid Request: Only one initialization request is allowed\"\n                        },\n                        id: null\n                    }));\n                    return;\n                }\n                this.sessionId = (_b = this.sessionIdGenerator) === null || _b === void 0 ? void 0 : _b.call(this);\n                this._initialized = true;\n                // If we have a session ID and an onsessioninitialized handler, call it immediately\n                // This is needed in cases where the server needs to keep track of multiple sessions\n                if (this.sessionId && this._onsessioninitialized) {\n                    await Promise.resolve(this._onsessioninitialized(this.sessionId));\n                }\n            }\n            if (!isInitializationRequest) {\n                // If an Mcp-Session-Id is returned by the server during initialization,\n                // clients using the Streamable HTTP transport MUST include it \n                // in the Mcp-Session-Id header on all of their subsequent HTTP requests.\n                if (!this.validateSession(req, res)) {\n                    return;\n                }\n                // Mcp-Protocol-Version header is required for all requests after initialization.\n                if (!this.validateProtocolVersion(req, res)) {\n                    return;\n                }\n            }\n            // check if it contains requests\n            const hasRequests = messages.some(isJSONRPCRequest);\n            if (!hasRequests) {\n                // if it only contains notifications or responses, return 202\n                res.writeHead(202).end();\n                // handle each message\n                for (const message of messages) {\n                    (_c = this.onmessage) === null || _c === void 0 ? void 0 : _c.call(this, message, { authInfo, requestInfo });\n                }\n            }\n            else if (hasRequests) {\n                // The default behavior is to use SSE streaming\n                // but in some cases server will return JSON responses\n                const streamId = randomUUID();\n                if (!this._enableJsonResponse) {\n                    const headers = {\n                        \"Content-Type\": \"text/event-stream\",\n                        \"Cache-Control\": \"no-cache\",\n                        Connection: \"keep-alive\",\n                    };\n                    // After initialization, always include the session ID if we have one\n                    if (this.sessionId !== undefined) {\n                        headers[\"mcp-session-id\"] = this.sessionId;\n                    }\n                    res.writeHead(200, headers);\n                }\n                // Store the response for this request to send messages back through this connection\n                // We need to track by request ID to maintain the connection\n                for (const message of messages) {\n                    if (isJSONRPCRequest(message)) {\n                        this._streamMapping.set(streamId, res);\n                        this._requestToStreamMapping.set(message.id, streamId);\n                    }\n                }\n                // Set up close handler for client disconnects\n                res.on(\"close\", () => {\n                    this._streamMapping.delete(streamId);\n                });\n                // handle each message\n                for (const message of messages) {\n                    (_d = this.onmessage) === null || _d === void 0 ? void 0 : _d.call(this, message, { authInfo, requestInfo });\n                }\n                // The server SHOULD NOT close the SSE stream before sending all JSON-RPC responses\n                // This will be handled by the send() method when responses are ready\n            }\n        }\n        catch (error) {\n            // return JSON-RPC formatted error\n            res.writeHead(400).end(JSON.stringify({\n                jsonrpc: \"2.0\",\n                error: {\n                    code: -32700,\n                    message: \"Parse error\",\n                    data: String(error)\n                },\n                id: null\n            }));\n            (_e = this.onerror) === null || _e === void 0 ? void 0 : _e.call(this, error);\n        }\n    }\n    /**\n     * Handles DELETE requests to terminate sessions\n     */\n    async handleDeleteRequest(req, res) {\n        var _a;\n        if (!this.validateSession(req, res)) {\n            return;\n        }\n        if (!this.validateProtocolVersion(req, res)) {\n            return;\n        }\n        await Promise.resolve((_a = this._onsessionclosed) === null || _a === void 0 ? void 0 : _a.call(this, this.sessionId));\n        await this.close();\n        res.writeHead(200).end();\n    }\n    /**\n     * Validates session ID for non-initialization requests\n     * Returns true if the session is valid, false otherwise\n     */\n    validateSession(req, res) {\n        if (this.sessionIdGenerator === undefined) {\n            // If the sessionIdGenerator ID is not set, the session management is disabled\n            // and we don't need to validate the session ID\n            return true;\n        }\n        if (!this._initialized) {\n            // If the server has not been initialized yet, reject all requests\n            res.writeHead(400).end(JSON.stringify({\n                jsonrpc: \"2.0\",\n                error: {\n                    code: -32000,\n                    message: \"Bad Request: Server not initialized\"\n                },\n                id: null\n            }));\n            return false;\n        }\n        const sessionId = req.headers[\"mcp-session-id\"];\n        if (!sessionId) {\n            // Non-initialization requests without a session ID should return 400 Bad Request\n            res.writeHead(400).end(JSON.stringify({\n                jsonrpc: \"2.0\",\n                error: {\n                    code: -32000,\n                    message: \"Bad Request: Mcp-Session-Id header is required\"\n                },\n                id: null\n            }));\n            return false;\n        }\n        else if (Array.isArray(sessionId)) {\n            res.writeHead(400).end(JSON.stringify({\n                jsonrpc: \"2.0\",\n                error: {\n                    code: -32000,\n                    message: \"Bad Request: Mcp-Session-Id header must be a single value\"\n                },\n                id: null\n            }));\n            return false;\n        }\n        else if (sessionId !== this.sessionId) {\n            // Reject requests with invalid session ID with 404 Not Found\n            res.writeHead(404).end(JSON.stringify({\n                jsonrpc: \"2.0\",\n                error: {\n                    code: -32001,\n                    message: \"Session not found\"\n                },\n                id: null\n            }));\n            return false;\n        }\n        return true;\n    }\n    validateProtocolVersion(req, res) {\n        var _a;\n        let protocolVersion = (_a = req.headers[\"mcp-protocol-version\"]) !== null && _a !== void 0 ? _a : DEFAULT_NEGOTIATED_PROTOCOL_VERSION;\n        if (Array.isArray(protocolVersion)) {\n            protocolVersion = protocolVersion[protocolVersion.length - 1];\n        }\n        if (!SUPPORTED_PROTOCOL_VERSIONS.includes(protocolVersion)) {\n            res.writeHead(400).end(JSON.stringify({\n                jsonrpc: \"2.0\",\n                error: {\n                    code: -32000,\n                    message: `Bad Request: Unsupported protocol version (supported versions: ${SUPPORTED_PROTOCOL_VERSIONS.join(\", \")})`\n                },\n                id: null\n            }));\n            return false;\n        }\n        return true;\n    }\n    async close() {\n        var _a;\n        // Close all SSE connections\n        this._streamMapping.forEach((response) => {\n            response.end();\n        });\n        this._streamMapping.clear();\n        // Clear any pending responses\n        this._requestResponseMap.clear();\n        (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);\n    }\n    async send(message, options) {\n        let requestId = options === null || options === void 0 ? void 0 : options.relatedRequestId;\n        if (isJSONRPCResponse(message) || isJSONRPCError(message)) {\n            // If the message is a response, use the request ID from the message\n            requestId = message.id;\n        }\n        // Check if this message should be sent on the standalone SSE stream (no request ID)\n        // Ignore notifications from tools (which have relatedRequestId set)\n        // Those will be sent via dedicated response SSE streams\n        if (requestId === undefined) {\n            // For standalone SSE streams, we can only send requests and notifications\n            if (isJSONRPCResponse(message) || isJSONRPCError(message)) {\n                throw new Error(\"Cannot send a response on a standalone SSE stream unless resuming a previous client request\");\n            }\n            const standaloneSse = this._streamMapping.get(this._standaloneSseStreamId);\n            if (standaloneSse === undefined) {\n                // The spec says the server MAY send messages on the stream, so it's ok to discard if no stream\n                return;\n            }\n            // Generate and store event ID if event store is provided\n            let eventId;\n            if (this._eventStore) {\n                // Stores the event and gets the generated event ID\n                eventId = await this._eventStore.storeEvent(this._standaloneSseStreamId, message);\n            }\n            // Send the message to the standalone SSE stream\n            this.writeSSEEvent(standaloneSse, message, eventId);\n            return;\n        }\n        // Get the response for this request\n        const streamId = this._requestToStreamMapping.get(requestId);\n        const response = this._streamMapping.get(streamId);\n        if (!streamId) {\n            throw new Error(`No connection established for request ID: ${String(requestId)}`);\n        }\n        if (!this._enableJsonResponse) {\n            // For SSE responses, generate event ID if event store is provided\n            let eventId;\n            if (this._eventStore) {\n                eventId = await this._eventStore.storeEvent(streamId, message);\n            }\n            if (response) {\n                // Write the event to the response stream\n                this.writeSSEEvent(response, message, eventId);\n            }\n        }\n        if (isJSONRPCResponse(message) || isJSONRPCError(message)) {\n            this._requestResponseMap.set(requestId, message);\n            const relatedIds = Array.from(this._requestToStreamMapping.entries())\n                .filter(([_, streamId]) => this._streamMapping.get(streamId) === response)\n                .map(([id]) => id);\n            // Check if we have responses for all requests using this connection\n            const allResponsesReady = relatedIds.every(id => this._requestResponseMap.has(id));\n            if (allResponsesReady) {\n                if (!response) {\n                    throw new Error(`No connection established for request ID: ${String(requestId)}`);\n                }\n                if (this._enableJsonResponse) {\n                    // All responses ready, send as JSON\n                    const headers = {\n                        'Content-Type': 'application/json',\n                    };\n                    if (this.sessionId !== undefined) {\n                        headers['mcp-session-id'] = this.sessionId;\n                    }\n                    const responses = relatedIds\n                        .map(id => this._requestResponseMap.get(id));\n                    response.writeHead(200, headers);\n                    if (responses.length === 1) {\n                        response.end(JSON.stringify(responses[0]));\n                    }\n                    else {\n                        response.end(JSON.stringify(responses));\n                    }\n                }\n                else {\n                    // End the SSE stream\n                    response.end();\n                }\n                // Clean up\n                for (const id of relatedIds) {\n                    this._requestResponseMap.delete(id);\n                    this._requestToStreamMapping.delete(id);\n                }\n            }\n        }\n    }\n}\n//# sourceMappingURL=streamableHttp.js.map","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nfunction getLineColFromPtr(string, ptr) {\n    let lines = string.slice(0, ptr).split(/\\r\\n|\\n|\\r/g);\n    return [lines.length, lines.pop().length + 1];\n}\nfunction makeCodeBlock(string, line, column) {\n    let lines = string.split(/\\r\\n|\\n|\\r/g);\n    let codeblock = '';\n    let numberLen = (Math.log10(line + 1) | 0) + 1;\n    for (let i = line - 1; i <= line + 1; i++) {\n        let l = lines[i - 1];\n        if (!l)\n            continue;\n        codeblock += i.toString().padEnd(numberLen, ' ');\n        codeblock += ':  ';\n        codeblock += l;\n        codeblock += '\\n';\n        if (i === line) {\n            codeblock += ' '.repeat(numberLen + column + 2);\n            codeblock += '^\\n';\n        }\n    }\n    return codeblock;\n}\nexport class TomlError extends Error {\n    line;\n    column;\n    codeblock;\n    constructor(message, options) {\n        const [line, column] = getLineColFromPtr(options.toml, options.ptr);\n        const codeblock = makeCodeBlock(options.toml, line, column);\n        super(`Invalid TOML document: ${message}\\n\\n${codeblock}`, options);\n        this.line = line;\n        this.column = column;\n        this.codeblock = codeblock;\n    }\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { TomlError } from './error.js';\nexport function indexOfNewline(str, start = 0, end = str.length) {\n    let idx = str.indexOf('\\n', start);\n    if (str[idx - 1] === '\\r')\n        idx--;\n    return idx <= end ? idx : -1;\n}\nexport function skipComment(str, ptr) {\n    for (let i = ptr; i < str.length; i++) {\n        let c = str[i];\n        if (c === '\\n')\n            return i;\n        if (c === '\\r' && str[i + 1] === '\\n')\n            return i + 1;\n        if ((c < '\\x20' && c !== '\\t') || c === '\\x7f') {\n            throw new TomlError('control characters are not allowed in comments', {\n                toml: str,\n                ptr: ptr,\n            });\n        }\n    }\n    return str.length;\n}\nexport function skipVoid(str, ptr, banNewLines, banComments) {\n    let c;\n    while ((c = str[ptr]) === ' ' || c === '\\t' || (!banNewLines && (c === '\\n' || c === '\\r' && str[ptr + 1] === '\\n')))\n        ptr++;\n    return banComments || c !== '#'\n        ? ptr\n        : skipVoid(str, skipComment(str, ptr), banNewLines);\n}\nexport function skipUntil(str, ptr, sep, end, banNewLines = false) {\n    if (!end) {\n        ptr = indexOfNewline(str, ptr);\n        return ptr < 0 ? str.length : ptr;\n    }\n    for (let i = ptr; i < str.length; i++) {\n        let c = str[i];\n        if (c === '#') {\n            i = indexOfNewline(str, i);\n        }\n        else if (c === sep) {\n            return i + 1;\n        }\n        else if (c === end || (banNewLines && (c === '\\n' || (c === '\\r' && str[i + 1] === '\\n')))) {\n            return i;\n        }\n    }\n    throw new TomlError('cannot find end of structure', {\n        toml: str,\n        ptr: ptr\n    });\n}\nexport function getStringEnd(str, seek) {\n    let first = str[seek];\n    let target = first === str[seek + 1] && str[seek + 1] === str[seek + 2]\n        ? str.slice(seek, seek + 3)\n        : first;\n    seek += target.length - 1;\n    do\n        seek = str.indexOf(target, ++seek);\n    while (seek > -1 && first !== \"'\" && str[seek - 1] === '\\\\' && (str[seek - 2] !== '\\\\' || str[seek - 3] === '\\\\'));\n    if (seek > -1) {\n        seek += target.length;\n        if (target.length > 1) {\n            if (str[seek] === first)\n                seek++;\n            if (str[seek] === first)\n                seek++;\n        }\n    }\n    return seek;\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nlet DATE_TIME_RE = /^(\\d{4}-\\d{2}-\\d{2})?[T ]?(?:(\\d{2}):\\d{2}:\\d{2}(?:\\.\\d+)?)?(Z|[-+]\\d{2}:\\d{2})?$/i;\nexport class TomlDate extends Date {\n    #hasDate = false;\n    #hasTime = false;\n    #offset = null;\n    constructor(date) {\n        let hasDate = true;\n        let hasTime = true;\n        let offset = 'Z';\n        if (typeof date === 'string') {\n            let match = date.match(DATE_TIME_RE);\n            if (match) {\n                if (!match[1]) {\n                    hasDate = false;\n                    date = `0000-01-01T${date}`;\n                }\n                hasTime = !!match[2];\n                // Make sure to use T instead of a space. Breaks in case of extreme values otherwise.\n                hasTime && date[10] === ' ' && (date = date.replace(' ', 'T'));\n                // Do not allow rollover hours.\n                if (match[2] && +match[2] > 23) {\n                    date = '';\n                }\n                else {\n                    offset = match[3] || null;\n                    date = date.toUpperCase();\n                    if (!offset && hasTime)\n                        date += 'Z';\n                }\n            }\n            else {\n                date = '';\n            }\n        }\n        super(date);\n        if (!isNaN(this.getTime())) {\n            this.#hasDate = hasDate;\n            this.#hasTime = hasTime;\n            this.#offset = offset;\n        }\n    }\n    isDateTime() {\n        return this.#hasDate && this.#hasTime;\n    }\n    isLocal() {\n        return !this.#hasDate || !this.#hasTime || !this.#offset;\n    }\n    isDate() {\n        return this.#hasDate && !this.#hasTime;\n    }\n    isTime() {\n        return this.#hasTime && !this.#hasDate;\n    }\n    isValid() {\n        return this.#hasDate || this.#hasTime;\n    }\n    toISOString() {\n        let iso = super.toISOString();\n        // Local Date\n        if (this.isDate())\n            return iso.slice(0, 10);\n        // Local Time\n        if (this.isTime())\n            return iso.slice(11, 23);\n        // Local DateTime\n        if (this.#offset === null)\n            return iso.slice(0, -1);\n        // Offset DateTime\n        if (this.#offset === 'Z')\n            return iso;\n        // This part is quite annoying: JS strips the original timezone from the ISO string representation\n        // Instead of using a \"modified\" date and \"Z\", we restore the representation \"as authored\"\n        let offset = (+(this.#offset.slice(1, 3)) * 60) + +(this.#offset.slice(4, 6));\n        offset = this.#offset[0] === '-' ? offset : -offset;\n        let offsetDate = new Date(this.getTime() - (offset * 60e3));\n        return offsetDate.toISOString().slice(0, -1) + this.#offset;\n    }\n    static wrapAsOffsetDateTime(jsDate, offset = 'Z') {\n        let date = new TomlDate(jsDate);\n        date.#offset = offset;\n        return date;\n    }\n    static wrapAsLocalDateTime(jsDate) {\n        let date = new TomlDate(jsDate);\n        date.#offset = null;\n        return date;\n    }\n    static wrapAsLocalDate(jsDate) {\n        let date = new TomlDate(jsDate);\n        date.#hasTime = false;\n        date.#offset = null;\n        return date;\n    }\n    static wrapAsLocalTime(jsDate) {\n        let date = new TomlDate(jsDate);\n        date.#hasDate = false;\n        date.#offset = null;\n        return date;\n    }\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { skipVoid } from './util.js';\nimport { TomlDate } from './date.js';\nimport { TomlError } from './error.js';\nlet INT_REGEX = /^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\\d(_?\\d)*))$/;\nlet FLOAT_REGEX = /^[+-]?\\d(_?\\d)*(\\.\\d(_?\\d)*)?([eE][+-]?\\d(_?\\d)*)?$/;\nlet LEADING_ZERO = /^[+-]?0[0-9_]/;\nlet ESCAPE_REGEX = /^[0-9a-f]{4,8}$/i;\nlet ESC_MAP = {\n    b: '\\b',\n    t: '\\t',\n    n: '\\n',\n    f: '\\f',\n    r: '\\r',\n    '\"': '\"',\n    '\\\\': '\\\\',\n};\nexport function parseString(str, ptr = 0, endPtr = str.length) {\n    let isLiteral = str[ptr] === '\\'';\n    let isMultiline = str[ptr++] === str[ptr] && str[ptr] === str[ptr + 1];\n    if (isMultiline) {\n        endPtr -= 2;\n        if (str[ptr += 2] === '\\r')\n            ptr++;\n        if (str[ptr] === '\\n')\n            ptr++;\n    }\n    let tmp = 0;\n    let isEscape;\n    let parsed = '';\n    let sliceStart = ptr;\n    while (ptr < endPtr - 1) {\n        let c = str[ptr++];\n        if (c === '\\n' || (c === '\\r' && str[ptr] === '\\n')) {\n            if (!isMultiline) {\n                throw new TomlError('newlines are not allowed in strings', {\n                    toml: str,\n                    ptr: ptr - 1,\n                });\n            }\n        }\n        else if ((c < '\\x20' && c !== '\\t') || c === '\\x7f') {\n            throw new TomlError('control characters are not allowed in strings', {\n                toml: str,\n                ptr: ptr - 1,\n            });\n        }\n        if (isEscape) {\n            isEscape = false;\n            if (c === 'u' || c === 'U') {\n                // Unicode escape\n                let code = str.slice(ptr, (ptr += (c === 'u' ? 4 : 8)));\n                if (!ESCAPE_REGEX.test(code)) {\n                    throw new TomlError('invalid unicode escape', {\n                        toml: str,\n                        ptr: tmp,\n                    });\n                }\n                try {\n                    parsed += String.fromCodePoint(parseInt(code, 16));\n                }\n                catch {\n                    throw new TomlError('invalid unicode escape', {\n                        toml: str,\n                        ptr: tmp,\n                    });\n                }\n            }\n            else if (isMultiline && (c === '\\n' || c === ' ' || c === '\\t' || c === '\\r')) {\n                // Multiline escape\n                ptr = skipVoid(str, ptr - 1, true);\n                if (str[ptr] !== '\\n' && str[ptr] !== '\\r') {\n                    throw new TomlError('invalid escape: only line-ending whitespace may be escaped', {\n                        toml: str,\n                        ptr: tmp,\n                    });\n                }\n                ptr = skipVoid(str, ptr);\n            }\n            else if (c in ESC_MAP) {\n                // Classic escape\n                parsed += ESC_MAP[c];\n            }\n            else {\n                throw new TomlError('unrecognized escape sequence', {\n                    toml: str,\n                    ptr: tmp,\n                });\n            }\n            sliceStart = ptr;\n        }\n        else if (!isLiteral && c === '\\\\') {\n            tmp = ptr - 1;\n            isEscape = true;\n            parsed += str.slice(sliceStart, tmp);\n        }\n    }\n    return parsed + str.slice(sliceStart, endPtr - 1);\n}\nexport function parseValue(value, toml, ptr, integersAsBigInt) {\n    // Constant values\n    if (value === 'true')\n        return true;\n    if (value === 'false')\n        return false;\n    if (value === '-inf')\n        return -Infinity;\n    if (value === 'inf' || value === '+inf')\n        return Infinity;\n    if (value === 'nan' || value === '+nan' || value === '-nan')\n        return NaN;\n    // Avoid FP representation of -0\n    if (value === '-0')\n        return integersAsBigInt ? 0n : 0;\n    // Numbers\n    let isInt = INT_REGEX.test(value);\n    if (isInt || FLOAT_REGEX.test(value)) {\n        if (LEADING_ZERO.test(value)) {\n            throw new TomlError('leading zeroes are not allowed', {\n                toml: toml,\n                ptr: ptr,\n            });\n        }\n        value = value.replace(/_/g, '');\n        let numeric = +value;\n        if (isNaN(numeric)) {\n            throw new TomlError('invalid number', {\n                toml: toml,\n                ptr: ptr,\n            });\n        }\n        if (isInt) {\n            if ((isInt = !Number.isSafeInteger(numeric)) && !integersAsBigInt) {\n                throw new TomlError('integer value cannot be represented losslessly', {\n                    toml: toml,\n                    ptr: ptr,\n                });\n            }\n            if (isInt || integersAsBigInt === true)\n                numeric = BigInt(value);\n        }\n        return numeric;\n    }\n    const date = new TomlDate(value);\n    if (!date.isValid()) {\n        throw new TomlError('invalid value', {\n            toml: toml,\n            ptr: ptr,\n        });\n    }\n    return date;\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseString, parseValue } from './primitive.js';\nimport { parseArray, parseInlineTable } from './struct.js';\nimport { indexOfNewline, skipVoid, skipUntil, skipComment, getStringEnd } from './util.js';\nimport { TomlError } from './error.js';\nfunction sliceAndTrimEndOf(str, startPtr, endPtr, allowNewLines) {\n    let value = str.slice(startPtr, endPtr);\n    let commentIdx = value.indexOf('#');\n    if (commentIdx > -1) {\n        // The call to skipComment allows to \"validate\" the comment\n        // (absence of control characters)\n        skipComment(str, commentIdx);\n        value = value.slice(0, commentIdx);\n    }\n    let trimmed = value.trimEnd();\n    if (!allowNewLines) {\n        let newlineIdx = value.indexOf('\\n', trimmed.length);\n        if (newlineIdx > -1) {\n            throw new TomlError('newlines are not allowed in inline tables', {\n                toml: str,\n                ptr: startPtr + newlineIdx\n            });\n        }\n    }\n    return [trimmed, commentIdx];\n}\nexport function extractValue(str, ptr, end, depth, integersAsBigInt) {\n    if (depth === 0) {\n        throw new TomlError('document contains excessively nested structures. aborting.', {\n            toml: str,\n            ptr: ptr\n        });\n    }\n    let c = str[ptr];\n    if (c === '[' || c === '{') {\n        let [value, endPtr] = c === '['\n            ? parseArray(str, ptr, depth, integersAsBigInt)\n            : parseInlineTable(str, ptr, depth, integersAsBigInt);\n        let newPtr = end ? skipUntil(str, endPtr, ',', end) : endPtr;\n        if (endPtr - newPtr && end === '}') {\n            let nextNewLine = indexOfNewline(str, endPtr, newPtr);\n            if (nextNewLine > -1) {\n                throw new TomlError('newlines are not allowed in inline tables', {\n                    toml: str,\n                    ptr: nextNewLine\n                });\n            }\n        }\n        return [value, newPtr];\n    }\n    let endPtr;\n    if (c === '\"' || c === \"'\") {\n        endPtr = getStringEnd(str, ptr);\n        let parsed = parseString(str, ptr, endPtr);\n        if (end) {\n            endPtr = skipVoid(str, endPtr, end !== ']');\n            if (str[endPtr] && str[endPtr] !== ',' && str[endPtr] !== end && str[endPtr] !== '\\n' && str[endPtr] !== '\\r') {\n                throw new TomlError('unexpected character encountered', {\n                    toml: str,\n                    ptr: endPtr,\n                });\n            }\n            endPtr += (+(str[endPtr] === ','));\n        }\n        return [parsed, endPtr];\n    }\n    endPtr = skipUntil(str, ptr, ',', end);\n    let slice = sliceAndTrimEndOf(str, ptr, endPtr - (+(str[endPtr - 1] === ',')), end === ']');\n    if (!slice[0]) {\n        throw new TomlError('incomplete key-value declaration: no value specified', {\n            toml: str,\n            ptr: ptr\n        });\n    }\n    if (end && slice[1] > -1) {\n        endPtr = skipVoid(str, ptr + slice[1]);\n        endPtr += +(str[endPtr] === ',');\n    }\n    return [\n        parseValue(slice[0], str, ptr, integersAsBigInt),\n        endPtr,\n    ];\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseString } from './primitive.js';\nimport { extractValue } from './extract.js';\nimport { getStringEnd, indexOfNewline, skipComment, skipVoid } from './util.js';\nimport { TomlError } from './error.js';\nlet KEY_PART_RE = /^[a-zA-Z0-9-_]+[ \\t]*$/;\nexport function parseKey(str, ptr, end = '=') {\n    let dot = ptr - 1;\n    let parsed = [];\n    let endPtr = str.indexOf(end, ptr);\n    if (endPtr < 0) {\n        throw new TomlError('incomplete key-value: cannot find end of key', {\n            toml: str,\n            ptr: ptr,\n        });\n    }\n    do {\n        let c = str[ptr = ++dot];\n        // If it's whitespace, ignore\n        if (c !== ' ' && c !== '\\t') {\n            // If it's a string\n            if (c === '\"' || c === '\\'') {\n                if (c === str[ptr + 1] && c === str[ptr + 2]) {\n                    throw new TomlError('multiline strings are not allowed in keys', {\n                        toml: str,\n                        ptr: ptr,\n                    });\n                }\n                let eos = getStringEnd(str, ptr);\n                if (eos < 0) {\n                    throw new TomlError('unfinished string encountered', {\n                        toml: str,\n                        ptr: ptr,\n                    });\n                }\n                dot = str.indexOf('.', eos);\n                let strEnd = str.slice(eos, dot < 0 || dot > endPtr ? endPtr : dot);\n                let newLine = indexOfNewline(strEnd);\n                if (newLine > -1) {\n                    throw new TomlError('newlines are not allowed in keys', {\n                        toml: str,\n                        ptr: ptr + dot + newLine,\n                    });\n                }\n                if (strEnd.trimStart()) {\n                    throw new TomlError('found extra tokens after the string part', {\n                        toml: str,\n                        ptr: eos,\n                    });\n                }\n                if (endPtr < eos) {\n                    endPtr = str.indexOf(end, eos);\n                    if (endPtr < 0) {\n                        throw new TomlError('incomplete key-value: cannot find end of key', {\n                            toml: str,\n                            ptr: ptr,\n                        });\n                    }\n                }\n                parsed.push(parseString(str, ptr, eos));\n            }\n            else {\n                // Normal raw key part consumption and validation\n                dot = str.indexOf('.', ptr);\n                let part = str.slice(ptr, dot < 0 || dot > endPtr ? endPtr : dot);\n                if (!KEY_PART_RE.test(part)) {\n                    throw new TomlError('only letter, numbers, dashes and underscores are allowed in keys', {\n                        toml: str,\n                        ptr: ptr,\n                    });\n                }\n                parsed.push(part.trimEnd());\n            }\n        }\n        // Until there's no more dot\n    } while (dot + 1 && dot < endPtr);\n    return [parsed, skipVoid(str, endPtr + 1, true, true)];\n}\nexport function parseInlineTable(str, ptr, depth, integersAsBigInt) {\n    let res = {};\n    let seen = new Set();\n    let c;\n    let comma = 0;\n    ptr++;\n    while ((c = str[ptr++]) !== '}' && c) {\n        let err = { toml: str, ptr: ptr - 1 };\n        if (c === '\\n') {\n            throw new TomlError('newlines are not allowed in inline tables', err);\n        }\n        else if (c === '#') {\n            throw new TomlError('inline tables cannot contain comments', err);\n        }\n        else if (c === ',') {\n            throw new TomlError('expected key-value, found comma', err);\n        }\n        else if (c !== ' ' && c !== '\\t') {\n            let k;\n            let t = res;\n            let hasOwn = false;\n            let [key, keyEndPtr] = parseKey(str, ptr - 1);\n            for (let i = 0; i < key.length; i++) {\n                if (i)\n                    t = hasOwn ? t[k] : (t[k] = {});\n                k = key[i];\n                if ((hasOwn = Object.hasOwn(t, k)) && (typeof t[k] !== 'object' || seen.has(t[k]))) {\n                    throw new TomlError('trying to redefine an already defined value', {\n                        toml: str,\n                        ptr: ptr,\n                    });\n                }\n                if (!hasOwn && k === '__proto__') {\n                    Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });\n                }\n            }\n            if (hasOwn) {\n                throw new TomlError('trying to redefine an already defined value', {\n                    toml: str,\n                    ptr: ptr,\n                });\n            }\n            let [value, valueEndPtr] = extractValue(str, keyEndPtr, '}', depth - 1, integersAsBigInt);\n            seen.add(value);\n            t[k] = value;\n            ptr = valueEndPtr;\n            comma = str[ptr - 1] === ',' ? ptr - 1 : 0;\n        }\n    }\n    if (comma) {\n        throw new TomlError('trailing commas are not allowed in inline tables', {\n            toml: str,\n            ptr: comma,\n        });\n    }\n    if (!c) {\n        throw new TomlError('unfinished table encountered', {\n            toml: str,\n            ptr: ptr,\n        });\n    }\n    return [res, ptr];\n}\nexport function parseArray(str, ptr, depth, integersAsBigInt) {\n    let res = [];\n    let c;\n    ptr++;\n    while ((c = str[ptr++]) !== ']' && c) {\n        if (c === ',') {\n            throw new TomlError('expected value, found comma', {\n                toml: str,\n                ptr: ptr - 1,\n            });\n        }\n        else if (c === '#')\n            ptr = skipComment(str, ptr);\n        else if (c !== ' ' && c !== '\\t' && c !== '\\n' && c !== '\\r') {\n            let e = extractValue(str, ptr - 1, ']', depth - 1, integersAsBigInt);\n            res.push(e[0]);\n            ptr = e[1];\n        }\n    }\n    if (!c) {\n        throw new TomlError('unfinished array encountered', {\n            toml: str,\n            ptr: ptr,\n        });\n    }\n    return [res, ptr];\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseKey } from './struct.js';\nimport { extractValue } from './extract.js';\nimport { skipVoid } from './util.js';\nimport { TomlError } from './error.js';\nfunction peekTable(key, table, meta, type) {\n    let t = table;\n    let m = meta;\n    let k;\n    let hasOwn = false;\n    let state;\n    for (let i = 0; i < key.length; i++) {\n        if (i) {\n            t = hasOwn ? t[k] : (t[k] = {});\n            m = (state = m[k]).c;\n            if (type === 0 /* Type.DOTTED */ && (state.t === 1 /* Type.EXPLICIT */ || state.t === 2 /* Type.ARRAY */)) {\n                return null;\n            }\n            if (state.t === 2 /* Type.ARRAY */) {\n                let l = t.length - 1;\n                t = t[l];\n                m = m[l].c;\n            }\n        }\n        k = key[i];\n        if ((hasOwn = Object.hasOwn(t, k)) && m[k]?.t === 0 /* Type.DOTTED */ && m[k]?.d) {\n            return null;\n        }\n        if (!hasOwn) {\n            if (k === '__proto__') {\n                Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });\n                Object.defineProperty(m, k, { enumerable: true, configurable: true, writable: true });\n            }\n            m[k] = {\n                t: i < key.length - 1 && type === 2 /* Type.ARRAY */\n                    ? 3 /* Type.ARRAY_DOTTED */\n                    : type,\n                d: false,\n                i: 0,\n                c: {},\n            };\n        }\n    }\n    state = m[k];\n    if (state.t !== type && !(type === 1 /* Type.EXPLICIT */ && state.t === 3 /* Type.ARRAY_DOTTED */)) {\n        // Bad key type!\n        return null;\n    }\n    if (type === 2 /* Type.ARRAY */) {\n        if (!state.d) {\n            state.d = true;\n            t[k] = [];\n        }\n        t[k].push(t = {});\n        state.c[state.i++] = (state = { t: 1 /* Type.EXPLICIT */, d: false, i: 0, c: {} });\n    }\n    if (state.d) {\n        // Redefining a table!\n        return null;\n    }\n    state.d = true;\n    if (type === 1 /* Type.EXPLICIT */) {\n        t = hasOwn ? t[k] : (t[k] = {});\n    }\n    else if (type === 0 /* Type.DOTTED */ && hasOwn) {\n        return null;\n    }\n    return [k, t, state.c];\n}\nexport function parse(toml, { maxDepth = 1000, integersAsBigInt } = {}) {\n    let res = {};\n    let meta = {};\n    let tbl = res;\n    let m = meta;\n    for (let ptr = skipVoid(toml, 0); ptr < toml.length;) {\n        if (toml[ptr] === '[') {\n            let isTableArray = toml[++ptr] === '[';\n            let k = parseKey(toml, ptr += +isTableArray, ']');\n            if (isTableArray) {\n                if (toml[k[1] - 1] !== ']') {\n                    throw new TomlError('expected end of table declaration', {\n                        toml: toml,\n                        ptr: k[1] - 1,\n                    });\n                }\n                k[1]++;\n            }\n            let p = peekTable(k[0], res, meta, isTableArray ? 2 /* Type.ARRAY */ : 1 /* Type.EXPLICIT */);\n            if (!p) {\n                throw new TomlError('trying to redefine an already defined table or value', {\n                    toml: toml,\n                    ptr: ptr,\n                });\n            }\n            m = p[2];\n            tbl = p[1];\n            ptr = k[1];\n        }\n        else {\n            let k = parseKey(toml, ptr);\n            let p = peekTable(k[0], tbl, m, 0 /* Type.DOTTED */);\n            if (!p) {\n                throw new TomlError('trying to redefine an already defined table or value', {\n                    toml: toml,\n                    ptr: ptr,\n                });\n            }\n            let v = extractValue(toml, k[1], void 0, maxDepth, integersAsBigInt);\n            p[1][p[0]] = v[0];\n            ptr = v[1];\n        }\n        ptr = skipVoid(toml, ptr, true);\n        if (toml[ptr] && toml[ptr] !== '\\n' && toml[ptr] !== '\\r') {\n            throw new TomlError('each key-value declaration must be followed by an end-of-line', {\n                toml: toml,\n                ptr: ptr\n            });\n        }\n        ptr = skipVoid(toml, ptr);\n    }\n    return res;\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nlet BARE_KEY = /^[a-z0-9-_]+$/i;\nfunction extendedTypeOf(obj) {\n    let type = typeof obj;\n    if (type === 'object') {\n        if (Array.isArray(obj))\n            return 'array';\n        if (obj instanceof Date)\n            return 'date';\n    }\n    return type;\n}\nfunction isArrayOfTables(obj) {\n    for (let i = 0; i < obj.length; i++) {\n        if (extendedTypeOf(obj[i]) !== 'object')\n            return false;\n    }\n    return obj.length != 0;\n}\nfunction formatString(s) {\n    return JSON.stringify(s).replace(/\\x7f/g, '\\\\u007f');\n}\nfunction stringifyValue(val, type, depth, numberAsFloat) {\n    if (depth === 0) {\n        throw new Error('Could not stringify the object: maximum object depth exceeded');\n    }\n    if (type === 'number') {\n        if (isNaN(val))\n            return 'nan';\n        if (val === Infinity)\n            return 'inf';\n        if (val === -Infinity)\n            return '-inf';\n        if (numberAsFloat && Number.isInteger(val))\n            return val.toFixed(1);\n        return val.toString();\n    }\n    if (type === 'bigint' || type === 'boolean') {\n        return val.toString();\n    }\n    if (type === 'string') {\n        return formatString(val);\n    }\n    if (type === 'date') {\n        if (isNaN(val.getTime())) {\n            throw new TypeError('cannot serialize invalid date');\n        }\n        return val.toISOString();\n    }\n    if (type === 'object') {\n        return stringifyInlineTable(val, depth, numberAsFloat);\n    }\n    if (type === 'array') {\n        return stringifyArray(val, depth, numberAsFloat);\n    }\n}\nfunction stringifyInlineTable(obj, depth, numberAsFloat) {\n    let keys = Object.keys(obj);\n    if (keys.length === 0)\n        return '{}';\n    let res = '{ ';\n    for (let i = 0; i < keys.length; i++) {\n        let k = keys[i];\n        if (i)\n            res += ', ';\n        res += BARE_KEY.test(k) ? k : formatString(k);\n        res += ' = ';\n        res += stringifyValue(obj[k], extendedTypeOf(obj[k]), depth - 1, numberAsFloat);\n    }\n    return res + ' }';\n}\nfunction stringifyArray(array, depth, numberAsFloat) {\n    if (array.length === 0)\n        return '[]';\n    let res = '[ ';\n    for (let i = 0; i < array.length; i++) {\n        if (i)\n            res += ', ';\n        if (array[i] === null || array[i] === void 0) {\n            throw new TypeError('arrays cannot contain null or undefined values');\n        }\n        res += stringifyValue(array[i], extendedTypeOf(array[i]), depth - 1, numberAsFloat);\n    }\n    return res + ' ]';\n}\nfunction stringifyArrayTable(array, key, depth, numberAsFloat) {\n    if (depth === 0) {\n        throw new Error('Could not stringify the object: maximum object depth exceeded');\n    }\n    let res = '';\n    for (let i = 0; i < array.length; i++) {\n        res += `[[${key}]]\\n`;\n        res += stringifyTable(array[i], key, depth, numberAsFloat);\n        res += '\\n\\n';\n    }\n    return res;\n}\nfunction stringifyTable(obj, prefix, depth, numberAsFloat) {\n    if (depth === 0) {\n        throw new Error('Could not stringify the object: maximum object depth exceeded');\n    }\n    let preamble = '';\n    let tables = '';\n    let keys = Object.keys(obj);\n    for (let i = 0; i < keys.length; i++) {\n        let k = keys[i];\n        if (obj[k] !== null && obj[k] !== void 0) {\n            let type = extendedTypeOf(obj[k]);\n            if (type === 'symbol' || type === 'function') {\n                throw new TypeError(`cannot serialize values of type '${type}'`);\n            }\n            let key = BARE_KEY.test(k) ? k : formatString(k);\n            if (type === 'array' && isArrayOfTables(obj[k])) {\n                tables += stringifyArrayTable(obj[k], prefix ? `${prefix}.${key}` : key, depth - 1, numberAsFloat);\n            }\n            else if (type === 'object') {\n                let tblKey = prefix ? `${prefix}.${key}` : key;\n                tables += `[${tblKey}]\\n`;\n                tables += stringifyTable(obj[k], tblKey, depth - 1, numberAsFloat);\n                tables += '\\n\\n';\n            }\n            else {\n                preamble += key;\n                preamble += ' = ';\n                preamble += stringifyValue(obj[k], type, depth, numberAsFloat);\n                preamble += '\\n';\n            }\n        }\n    }\n    return `${preamble}\\n${tables}`.trim();\n}\nexport function stringify(obj, { maxDepth = 1000, numbersAsFloat = false } = {}) {\n    if (extendedTypeOf(obj) !== 'object') {\n        throw new TypeError('stringify can only be called with an object');\n    }\n    return stringifyTable(obj, '', maxDepth, numbersAsFloat);\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parse } from './parse.js';\nimport { stringify } from './stringify.js';\nimport { TomlDate } from './date.js';\nimport { TomlError } from './error.js';\nexport default { parse, stringify, TomlDate, TomlError };\nexport { parse, stringify, TomlDate, TomlError };\n"],"names":["RESET","BOLD","DIM","UNDERLINE","BLACK","RED","GREEN","YELLOW","BLUE","MAGENTA","CYAN","WHITE","GRAY","supportsColor","isBrowser","colorEnabled","format","type","createTomlPlugin","createYamlPlugin","createTomlPluginAsync","createYamlPluginAsync","chalk","path","fs","z","data","pattern","pathWithVariables","normalizedPath","description","currentDir","_a","properties","required","keyword","_b","getTsconfig","createPathsMatcher","extensions","testPath","_throwForDuplicateFlags","fileURLToPath","identifiedFinalParser","createRegExp","anyOf","oneOrMore","char","index","property","isRequired","createMcpLogger","args","McpServer","ResourceTemplate","McpLifecycleManager","_c","StdioServerTransport","SSEServerTransport","StreamableHTTPServerTransport","sessionId","tomlModule","yamlModule","ErrorCode","jsonrpcNotification","global","exports","this","HEXDIG$$","PCT_ENCODED$","UNRESERVED$$","ucs2encode","basicToDigit","digitToBasic","adapt","decode","encode","toUnicode","toASCII","decodeUnreserved","parse","base","serialize","ucs2length","require$$0","require$$1","rules","util","jsonSchemaTraverseModule","require$$2","require$$3","require$$4","ref","self","stringify","$id","$schema","$rulesGroup","$rule","require$$5","validate","localRefs","baseId","v","refVal","schema","compile","cacheModule","Cache","URL","$sch","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","dataType","definition","i","Ajv","ajv","McpZodTypeKind","name","value","encoded","values","title","process","bytesModule","bytes","codes","status","inherits_browserModule","statuses","module","len","len2","buffer","ieee754","Buffer","byteLength","bomHandling","stream_module","streams","getRawBody","contentType","MAXIMUM_MESSAGE_SIZE","randomUUID","streamId","endPtr"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7kBA,aAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkCb,YAAY;AA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","x_google_ignoreList":[0,1,2,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,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118]}