@alcyone-labs/arg-parser 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +460 -1179
- package/dist/assets/.dxtignore.template +38 -0
- package/dist/assets/logo_1_small.jpg +0 -0
- package/dist/assets/tsdown.dxt.config.ts +37 -0
- package/dist/index.cjs +23702 -2315
- package/dist/index.cjs.map +1 -1
- package/dist/index.min.mjs +16360 -1725
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +23694 -2315
- package/dist/index.mjs.map +1 -1
- package/dist/src/config/ConfigurationManager.d.ts +74 -0
- package/dist/src/config/ConfigurationManager.d.ts.map +1 -0
- package/dist/src/config/plugins/ConfigPlugin.d.ts +60 -0
- package/dist/src/config/plugins/ConfigPlugin.d.ts.map +1 -0
- package/dist/src/config/plugins/ConfigPluginRegistry.d.ts +72 -0
- package/dist/src/config/plugins/ConfigPluginRegistry.d.ts.map +1 -0
- package/dist/src/config/plugins/TomlConfigPlugin.d.ts +30 -0
- package/dist/src/config/plugins/TomlConfigPlugin.d.ts.map +1 -0
- package/dist/src/config/plugins/YamlConfigPlugin.d.ts +29 -0
- package/dist/src/config/plugins/YamlConfigPlugin.d.ts.map +1 -0
- package/dist/src/config/plugins/index.d.ts +5 -0
- package/dist/src/config/plugins/index.d.ts.map +1 -0
- package/dist/src/core/ArgParser.d.ts +332 -0
- package/dist/src/core/ArgParser.d.ts.map +1 -0
- package/dist/src/{ArgParserBase.d.ts → core/ArgParserBase.d.ts} +84 -3
- package/dist/src/core/ArgParserBase.d.ts.map +1 -0
- package/dist/src/core/FlagManager.d.ts.map +1 -0
- package/dist/src/{types.d.ts → core/types.d.ts} +40 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/dxt/DxtGenerator.d.ts +115 -0
- package/dist/src/dxt/DxtGenerator.d.ts.map +1 -0
- package/dist/src/index.d.ts +10 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/mcp/ArgParserMcp.d.ts +21 -0
- package/dist/src/mcp/ArgParserMcp.d.ts.map +1 -0
- package/dist/src/mcp/mcp-integration.d.ts +83 -0
- package/dist/src/mcp/mcp-integration.d.ts.map +1 -0
- package/dist/src/mcp/mcp-notifications.d.ts +138 -0
- package/dist/src/mcp/mcp-notifications.d.ts.map +1 -0
- package/dist/src/mcp/mcp-prompts.d.ts +132 -0
- package/dist/src/mcp/mcp-prompts.d.ts.map +1 -0
- package/dist/src/mcp/mcp-resources.d.ts +133 -0
- package/dist/src/mcp/mcp-resources.d.ts.map +1 -0
- package/dist/src/testing/fuzzy-test-cli.d.ts +5 -0
- package/dist/src/testing/fuzzy-test-cli.d.ts.map +1 -0
- package/dist/src/{fuzzy-tester.d.ts → testing/fuzzy-tester.d.ts} +1 -1
- package/dist/src/testing/fuzzy-tester.d.ts.map +1 -0
- package/package.json +51 -17
- package/dist/examples/fuzzy-demo.d.ts +0 -8
- package/dist/examples/fuzzy-demo.d.ts.map +0 -1
- package/dist/examples/fuzzy-test-example.d.ts +0 -8
- package/dist/examples/fuzzy-test-example.d.ts.map +0 -1
- package/dist/examples/fzf-search-cli.d.ts +0 -8
- package/dist/examples/fzf-search-cli.d.ts.map +0 -1
- package/dist/examples/getting-started.d.ts +0 -27
- package/dist/examples/getting-started.d.ts.map +0 -1
- package/dist/examples/mcp-preset-transports.d.ts +0 -19
- package/dist/examples/mcp-preset-transports.d.ts.map +0 -1
- package/dist/examples/simple-cli.d.ts +0 -26
- package/dist/examples/simple-cli.d.ts.map +0 -1
- package/dist/examples/v1.1.0-showcase.d.ts +0 -16
- package/dist/examples/v1.1.0-showcase.d.ts.map +0 -1
- package/dist/examples/with-env-example.d.ts +0 -3
- package/dist/examples/with-env-example.d.ts.map +0 -1
- package/dist/index-6G9StDO_.js +0 -6445
- package/dist/index-6G9StDO_.js.map +0 -1
- package/dist/index-CqU7Fj3C.cjs +0 -6444
- package/dist/index-CqU7Fj3C.cjs.map +0 -1
- package/dist/index-Dx_q1msW.js +0 -4682
- package/dist/index-Dx_q1msW.js.map +0 -1
- package/dist/src/ArgParser.d.ts +0 -156
- package/dist/src/ArgParser.d.ts.map +0 -1
- package/dist/src/ArgParserBase.d.ts.map +0 -1
- package/dist/src/FlagManager.d.ts.map +0 -1
- package/dist/src/fuzzy-test-cli.d.ts +0 -5
- package/dist/src/fuzzy-test-cli.d.ts.map +0 -1
- package/dist/src/fuzzy-tester.d.ts.map +0 -1
- package/dist/src/mcp-integration.d.ts +0 -31
- package/dist/src/mcp-integration.d.ts.map +0 -1
- package/dist/src/types.d.ts.map +0 -1
- package/dist/sse-B5Jf_YpG.cjs +0 -121
- package/dist/sse-B5Jf_YpG.cjs.map +0 -1
- package/dist/sse-BDL3h2Ll.js +0 -121
- package/dist/sse-BDL3h2Ll.js.map +0 -1
- package/dist/sse-DSjLfGFo.js +0 -107
- package/dist/sse-DSjLfGFo.js.map +0 -1
- package/dist/stdio-Cf19UQO7.js +0 -70
- package/dist/stdio-Cf19UQO7.js.map +0 -1
- package/dist/stdio-DESvSONI.cjs +0 -94
- package/dist/stdio-DESvSONI.cjs.map +0 -1
- package/dist/stdio-DLOResWr.js +0 -94
- package/dist/stdio-DLOResWr.js.map +0 -1
- package/dist/streamableHttp-DXIdDSbF.js +0 -342
- package/dist/streamableHttp-DXIdDSbF.js.map +0 -1
- package/dist/streamableHttp-DsXlAnqJ.cjs +0 -456
- package/dist/streamableHttp-DsXlAnqJ.cjs.map +0 -1
- package/dist/streamableHttp-Vd4Qsgko.js +0 -456
- package/dist/streamableHttp-Vd4Qsgko.js.map +0 -1
- package/dist/types-DSxPEImy.cjs +0 -943
- package/dist/types-DSxPEImy.cjs.map +0 -1
- package/dist/types-DdsPVLQ5.js +0 -846
- package/dist/types-DdsPVLQ5.js.map +0 -1
- package/dist/types-DpK81FWv.js +0 -944
- package/dist/types-DpK81FWv.js.map +0 -1
- /package/dist/src/{FlagManager.d.ts → core/FlagManager.d.ts} +0 -0
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/types.ts","../src/FlagManager.ts","../src/ArgParserBase.ts","../src/mcp-integration.ts","../src/ArgParser.ts","../src/fuzzy-tester.ts"],"sourcesContent":["import { z } 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\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 .describe(\"Textual description for help messages.\"),\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.function().args(z.string()).returns(z.any()), // Custom parser function (value: string) => any\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 or string literal) or a custom parser function. Defaults to 'string'.\",\n ),\n mandatory: z\n .union([z.boolean(), z.function().args(z.any()).returns(z.boolean())]) // `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 .function()\n .args(z.any().optional(), z.any().optional()) // value, parsedArgs?\n .returns(\n z.union([\n z.boolean(),\n z.string(),\n z.void(),\n z.promise(z.union([z.boolean(), z.string(), z.void()])),\n ]),\n )\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 })\n .passthrough() // Allow unrecognized properties, they won't be validated or processed beyond alias handling.\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) // Custom parser function\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 * 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};\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};\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 \"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};\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 * 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}\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 { 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 };\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 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 chalk from \"chalk\";\nimport { anyOf, char, createRegExp, oneOrMore } from \"magic-regexp\";\nimport * as yaml from \"js-yaml\";\nimport * as toml from \"@iarna/toml\";\nimport * as dotenv from \"dotenv\";\nimport { FlagManager } from \"./FlagManager\";\nimport type {\n IFlag,\n IHandlerContext,\n ISubCommand,\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 * 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\ninterface 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\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 #parentParser?: ArgParserBase;\n #lastParseResult: TParsedArgs<ProcessedFlag[]> = {};\n #inheritParentFlags: boolean = false;\n #subCommands: Map<string, ISubCommand> = new Map();\n #flagManager: FlagManager;\n #fuzzyMode: boolean = false;\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.#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 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 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 _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 value = (flag[\"type\"] as Function)(value as string);\n } else if (typeof flag[\"type\"] === \"object\") {\n value = new (flag[\"type\"] as ObjectConstructor)(value);\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 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 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 (!subCommandConfig || !(subCommandConfig.parser instanceof ArgParserBase)) {\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 #_handleGlobalChecks(\n processArgs: string[],\n options?: IParseOptions,\n ): boolean {\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 if (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(0 as never);\n }\n return true;\n }\n\n if (processArgs.includes(\"--s-debug-print\")) {\n this.printAll(\"ArgParser.full.json\");\n if (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(0);\n }\n return true;\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(chalk.red(\"Error: --s-with-env requires a file path argument\"));\n if (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(1);\n }\n return true;\n }\n\n const filePath = processArgs[withEnvIndex + 1];\n if (!filePath || filePath.startsWith(\"-\")) {\n console.error(chalk.red(\"Error: --s-with-env requires a file path argument\"));\n if (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(1);\n }\n return true;\n }\n\n try {\n // Identify the final parser and parser chain for loading configuration\n const { finalParser: identifiedFinalParser, parserChain: identifiedParserChain } =\n this.#_identifyCommandChainAndParsers(processArgs, this, [], [this]);\n\n const envConfigArgs = identifiedFinalParser.#_loadEnvFile(filePath, identifiedParserChain);\n if (envConfigArgs) {\n // Merge environment configuration with process args\n // CLI args take precedence over file configuration\n const mergedArgs = identifiedFinalParser.#_mergeEnvConfigWithArgs(envConfigArgs, processArgs);\n\n // Replace the original processArgs array contents\n processArgs.length = 0;\n processArgs.push(...mergedArgs);\n }\n } catch (error) {\n console.error(chalk.red(`Error loading environment file: ${error instanceof Error ? error.message : String(error)}`));\n if (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(1);\n }\n return true;\n }\n }\n\n\n\n const { finalParser: identifiedFinalParser } =\n this.#_identifyCommandChainAndParsers(processArgs, this, [], [this]);\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 } = 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 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 if (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(0);\n }\n return true;\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 console.log(identifiedFinalParser.helpText());\n if (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(0 as never);\n }\n return true;\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\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 (immediateChild.#inheritParentFlags && immediateChild.#flagManager.hasFlag(flag[\"name\"])) {\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\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) ? inputArgs.join(' ') : inputArgs;\n\n console.log(`[--s-enable-fuzzy] handler() skipped for command chain: ${commandChain.join(' ') || '(root)'}`);\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 } 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 parse(\n processArgs: string[],\n options?: IParseOptions,\n ): TParsedArgsWithRouting<any> {\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 = 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 if (this.#_handleGlobalChecks(processArgs, options)) {\n return {} as TParsedArgsWithRouting<any>;\n }\n\n try {\n const {\n finalParser: identifiedFinalParser,\n commandChain: identifiedCommandChain,\n parserChain: identifiedParserChain,\n } = this.#_identifyCommandChainAndParsers(processArgs, this, [], [this]);\n\n // Check for --s-save-to-env flag at the final parser level\n if (identifiedFinalParser.#_handleSaveToEnvFlag(processArgs, identifiedParserChain)) {\n return {} as TParsedArgsWithRouting<any>;\n }\n\n const { finalArgs, handlerToExecute } = this._parseRecursive(\n processArgs,\n this,\n {},\n [],\n options,\n undefined,\n );\n\n // Set command chain in final args\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 return finalArgs;\n } catch (error) {\n if (error instanceof ArgParserError) {\n if (this.#handleErrors) {\n this.#displayErrorAndExit(error);\n return {} as TParsedArgsWithRouting<any>;\n } else {\n throw error;\n }\n } else {\n throw error;\n }\n }\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 _parseRecursive(\n argsToParse: string[],\n currentParser: ArgParserBase,\n accumulatedParentArgs: TParsedArgs<any>,\n commandChainSoFar: string[],\n options?: IParseOptions,\n parentParser?: ArgParserBase,\n ): 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 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 (!subCommandConfig || !(subCommandConfig.parser instanceof ArgParserBase)) {\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 this._parseRecursive(\n nextArgs,\n nextParser,\n combinedArgsForNextLevel,\n nextCommandChain,\n options,\n currentParser,\n );\n }\n\n #parseFlags(\n args: string[],\n options?: IParseOptions,\n ): {\n parsedArgs: TParsedArgs<ProcessedFlag[]>;\n firstUnconsumedIndex: number;\n } {\n const flags = this.#flagManager.flags;\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 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 this._addToOutput(flagToCheck, true, output, options);\n } else if (nextValueExists && !nextValueIsFlag) {\n this._addToOutput(flagToCheck, nextValue, output, options);\n consumedIndices.add(nextIndex);\n } else if (flagToCheck[\"type\"] === Boolean) {\n 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 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 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 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): void {\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 (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(1 as never);\n } else {\n throw error;\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 (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 (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 /**\n * Generates a default environment file name based on the app name\n */\n #_generateDefaultEnvFileName(): string {\n let baseName = \"config\";\n\n if (this.#appCommandName) {\n baseName = this.#appCommandName;\n } else if (this.#appName && this.#appName !== \"Argument Parser\") {\n baseName = this.#appName;\n }\n\n // Convert to a safe filename format (PascalCase for .env files)\n baseName = baseName\n .split(/[\\s-_]+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\"\");\n\n return `${baseName}.env`;\n }\n\n\n\n /**\n * Handles the --s-save-to-env system flag at the final parser level\n */\n #_handleSaveToEnvFlag(processArgs: string[], parserChain: ArgParserBase[]): boolean {\n const saveToEnvIndex = processArgs.findIndex(arg => arg === \"--s-save-to-env\");\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 try {\n this.#_saveToEnvFile(filePath, processArgs, parserChain);\n console.log(chalk.green(`Environment configuration saved to: ${filePath}`));\n if (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(0);\n }\n return true;\n } catch (error) {\n console.error(chalk.red(`Error saving environment file: ${error instanceof Error ? error.message : String(error)}`));\n if (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(1);\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Saves the current parser's flags and their values to an environment file\n * in the specified format based on file extension.\n */\n #_saveToEnvFile(filePath: string, processArgs: string[], parserChain: ArgParserBase[]): void {\n // Determine file format based on extension\n const ext = path.extname(filePath).toLowerCase();\n let format: 'env' | 'yaml' | 'json' | 'toml';\n\n if (ext === '.yaml' || ext === '.yml') {\n format = 'yaml';\n } else if (ext === '.json' || ext === '.jsonc') {\n format = 'json';\n } else if (ext === '.toml' || ext === '.tml') {\n format = 'toml';\n } else {\n format = 'env'; // Default to .env format for no extension or unknown extensions\n }\n\n // Get all flags from the parser chain (current parser and inherited ones from parent chain)\n const allFlags: ProcessedFlag[] = [];\n const seenFlagNames = new Set<string>();\n\n // Start from the final parser (this) and work backwards through the chain\n // This ensures that the final parser's flags take precedence over parent flags\n for (let i = parserChain.length - 1; i >= 0; i--) {\n const parser = parserChain[i];\n for (const flag of parser.#flagManager.flags) {\n if (!seenFlagNames.has(flag[\"name\"])) {\n allFlags.push(flag);\n seenFlagNames.add(flag[\"name\"]);\n }\n }\n }\n\n const flags = allFlags;\n\n // Parse current arguments to see which flags are set\n const { parsedArgs } = this.#parseFlags(processArgs.filter(arg =>\n arg !== '--s-save-to-env' && arg !== filePath\n ));\n\n // Generate content based on format\n let content: string;\n switch (format) {\n case 'env':\n content = this.#_generateEnvFormat(flags, parsedArgs);\n break;\n case 'yaml':\n content = this.#_generateYamlFormat(flags, parsedArgs);\n break;\n case 'json':\n content = this.#_generateJsonFormat(flags, parsedArgs);\n break;\n case 'toml':\n content = this.#_generateTomlFormat(flags, parsedArgs);\n break;\n }\n\n // Ensure directory exists\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Write file\n fs.writeFileSync(filePath, content, 'utf8');\n }\n\n /**\n * Loads configuration from an environment file in various formats\n */\n #_loadEnvFile(filePath: string, parserChain: ArgParserBase[]): Record<string, any> {\n if (!fs.existsSync(filePath)) {\n throw new Error(`Configuration file not found: ${filePath}`);\n }\n\n // Determine file format based on extension\n const ext = path.extname(filePath).toLowerCase();\n let format: 'env' | 'yaml' | 'json' | 'toml';\n\n if (ext === '.yaml' || ext === '.yml') {\n format = 'yaml';\n } else if (ext === '.json' || ext === '.jsonc') {\n format = 'json';\n } else if (ext === '.toml' || ext === '.tml') {\n format = 'toml';\n } else {\n format = 'env'; // Default to .env format for no extension or unknown extensions\n }\n\n // Load and parse the file\n const fileContent = fs.readFileSync(filePath, 'utf8');\n let rawConfig: Record<string, any>;\n\n switch (format) {\n case 'env':\n rawConfig = this.#_parseEnvFile(fileContent);\n break;\n case 'yaml':\n rawConfig = this.#_parseYamlFile(fileContent);\n break;\n case 'json':\n rawConfig = this.#_parseJsonFile(fileContent);\n break;\n case 'toml':\n rawConfig = this.#_parseTomlFile(fileContent);\n break;\n }\n\n // Convert the raw configuration to match flag names and types\n return this.#_convertConfigToFlagValues(rawConfig, parserChain);\n }\n\n /**\n * Parses .env file content using dotenv\n */\n #_parseEnvFile(content: string): Record<string, any> {\n const parsed = dotenv.parse(content);\n const result: Record<string, any> = {};\n\n // Convert environment variable names back to flag names\n for (const [envKey, envValue] of Object.entries(parsed)) {\n // Convert UPPER_CASE_WITH_UNDERSCORES back to lowercase-with-dashes\n const flagName = envKey.toLowerCase().replace(/_/g, '-');\n\n // Parse the value based on its content\n if (envValue === 'true') {\n result[flagName] = true;\n } else if (envValue === 'false') {\n result[flagName] = false;\n } else if (/^-?\\d+$/.test(envValue)) {\n result[flagName] = parseInt(envValue, 10);\n } else if (/^-?\\d*\\.\\d+$/.test(envValue)) {\n result[flagName] = parseFloat(envValue);\n } else if (envValue.includes(',')) {\n // Handle comma-separated arrays\n result[flagName] = envValue.split(',').map(v => v.trim());\n } else {\n result[flagName] = envValue;\n }\n }\n\n return result;\n }\n\n /**\n * Parses YAML file content\n */\n #_parseYamlFile(content: string): Record<string, any> {\n const parsed = yaml.load(content) as any;\n if (typeof parsed !== 'object' || parsed === null) {\n throw new Error('YAML file must contain an object at the root level');\n }\n\n // Remove metadata if present\n const { _meta, ...config } = parsed;\n return config;\n }\n\n /**\n * Parses JSON file content\n */\n #_parseJsonFile(content: string): Record<string, any> {\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\n // Remove metadata if present\n const { _meta, ...config } = parsed;\n return config;\n }\n\n /**\n * Parses TOML file content\n */\n #_parseTomlFile(content: string): Record<string, any> {\n const parsed = toml.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\n return parsed;\n }\n\n /**\n * Converts raw configuration values to match flag types and validates them\n */\n #_convertConfigToFlagValues(rawConfig: Record<string, any>, parserChain: ArgParserBase[]): Record<string, any> {\n const result: Record<string, any> = {};\n\n // Get all flags from the parser chain\n const allFlags: ProcessedFlag[] = [];\n const seenFlagNames = new Set<string>();\n\n // Start from the final parser and work backwards through the chain\n for (let i = parserChain.length - 1; i >= 0; i--) {\n const parser = parserChain[i];\n for (const flag of parser.#flagManager.flags) {\n if (!seenFlagNames.has(flag[\"name\"])) {\n allFlags.push(flag);\n seenFlagNames.add(flag[\"name\"]);\n }\n }\n }\n\n // Convert and validate each configuration value\n for (const [configKey, configValue] of Object.entries(rawConfig)) {\n const flag = allFlags.find(f => f[\"name\"] === configKey);\n\n if (!flag) {\n console.warn(chalk.yellow(`Warning: Configuration key '${configKey}' does not match any known flag. Ignoring.`));\n continue;\n }\n\n try {\n const convertedValue = this.#_convertValueToFlagType(configValue, flag);\n result[configKey] = convertedValue;\n } catch (error) {\n console.error(chalk.red(`Error converting configuration value for '${configKey}': ${error instanceof Error ? error.message : String(error)}`));\n if (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(1);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Converts a configuration value to match the expected flag type\n */\n #_convertValueToFlagType(value: any, flag: ProcessedFlag): any {\n const flagType = flag[\"type\"];\n\n // Handle null/undefined\n if (value === null || value === undefined) {\n return value;\n }\n\n // Handle array flags first (before type-specific handling)\n if (flagType === Array || flag[\"allowMultiple\"]) {\n if (Array.isArray(value)) return value;\n if (typeof value === 'string') {\n // Split comma-separated values\n return value.split(',').map(v => v.trim());\n }\n return [value];\n }\n\n // Handle boolean flags\n if (flagType === Boolean) {\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') {\n const lowerValue = value.toLowerCase();\n if (lowerValue === 'true' || lowerValue === '1' || lowerValue === 'yes') return true;\n if (lowerValue === 'false' || lowerValue === '0' || lowerValue === 'no') return false;\n }\n throw new Error(`Cannot convert '${value}' to boolean for flag '${flag[\"name\"]}'`);\n }\n\n // Handle string flags\n if (flagType === String) {\n return String(value);\n }\n\n // Handle number flags\n if (flagType === Number) {\n const numValue = Number(value);\n if (isNaN(numValue)) {\n throw new Error(`Cannot convert '${value}' to number for flag '${flag[\"name\"]}'`);\n }\n return numValue;\n }\n\n // Handle enum validation\n if (flag[\"enum\"] && flag[\"enum\"].length > 0) {\n if (!flag[\"enum\"].includes(value)) {\n throw new Error(`Value '${value}' is not allowed for flag '${flag[\"name\"]}'. Allowed values: ${flag[\"enum\"].join(', ')}`);\n }\n }\n\n return value;\n }\n\n /**\n * Merges environment configuration with command line arguments\n * CLI arguments take precedence over file configuration\n */\n #_mergeEnvConfigWithArgs(envConfig: Record<string, any>, processArgs: string[]): string[] {\n const result = [...processArgs];\n\n // Remove --s-with-env and its file path from the arguments\n const withEnvIndex = result.findIndex(arg => arg === \"--s-with-env\");\n if (withEnvIndex !== -1) {\n result.splice(withEnvIndex, 2); // Remove both --s-with-env and the file path\n }\n\n // Convert environment configuration to command line arguments\n // Only add flags that are not already present in the command line\n const existingFlags = new Set<string>();\n\n // Identify existing flags in command line arguments\n for (let i = 0; i < result.length; i++) {\n const arg = result[i];\n if (arg.startsWith('-')) {\n existingFlags.add(arg);\n // Also handle ligature format (--flag=value)\n if (arg.includes('=')) {\n const flagPart = arg.split('=')[0];\n existingFlags.add(flagPart);\n }\n }\n }\n\n // Add environment configuration as command line arguments\n for (const [flagName, flagValue] of Object.entries(envConfig)) {\n const longFlag = `--${flagName}`;\n\n // Skip if flag is already present in command line\n if (existingFlags.has(longFlag)) {\n continue;\n }\n\n // Add the flag and its value\n if (typeof flagValue === 'boolean') {\n if (flagValue) {\n result.push(longFlag);\n }\n // Don't add false boolean flags\n } else if (Array.isArray(flagValue)) {\n // Add multiple values for array flags\n for (const item of flagValue) {\n result.push(longFlag, String(item));\n }\n } else {\n result.push(longFlag, String(flagValue));\n }\n }\n\n return result;\n }\n\n /**\n * Generates environment file content in Bash .env format\n */\n #_generateEnvFormat(flags: ProcessedFlag[], parsedArgs: TParsedArgs<any>): string {\n const lines: string[] = [];\n lines.push('# Environment configuration generated by ArgParser');\n lines.push('# Format: Bash .env style');\n lines.push('');\n\n for (const flag of flags) {\n if (flag[\"name\"] === 'help') continue; // Skip help flag\n\n const flagValue = parsedArgs[flag[\"name\"]];\n const isSet = flagValue !== undefined && flagValue !== null;\n const isMandatory = typeof flag[\"mandatory\"] === 'function' ? false : (flag[\"mandatory\"] ?? false);\n\n // Add comment with flag information\n lines.push(`# ${flag[\"name\"]}: ${Array.isArray(flag[\"description\"]) ? flag[\"description\"].join(' | ') : flag[\"description\"]}`);\n lines.push(`# Options: ${flag[\"options\"].join(', ')}`);\n lines.push(`# Type: ${this.#_getTypeString(flag[\"type\"])}`);\n if (flag[\"defaultValue\"] !== undefined) {\n lines.push(`# Default: ${JSON.stringify(flag[\"defaultValue\"])}`);\n }\n if (flag[\"enum\"] && flag[\"enum\"].length > 0) {\n lines.push(`# Allowed values: ${flag[\"enum\"].join(', ')}`);\n }\n\n // Generate the environment variable line\n const envVarName = flag[\"name\"].toUpperCase().replace(/[^A-Z0-9_]/g, '_');\n let envValue = '';\n\n if (isSet) {\n if (Array.isArray(flagValue)) {\n envValue = flagValue.join(',');\n } else if (typeof flagValue === 'boolean') {\n envValue = flagValue ? 'true' : 'false';\n } else {\n envValue = String(flagValue);\n }\n lines.push(`${envVarName}=\"${envValue}\"`);\n } else {\n // Comment out unset optional flags\n const defaultVal = flag[\"defaultValue\"] !== undefined ? String(flag[\"defaultValue\"]) : '';\n const prefix = isMandatory ? '' : '# ';\n lines.push(`${prefix}${envVarName}=\"${defaultVal}\"`);\n }\n\n lines.push(''); // Empty line between flags\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Generates environment file content in YAML format\n */\n #_generateYamlFormat(flags: ProcessedFlag[], parsedArgs: TParsedArgs<any>): string {\n const config: any = {};\n const comments: string[] = [];\n\n comments.push('# Environment configuration generated by ArgParser');\n comments.push('# Format: YAML');\n comments.push('');\n\n for (const flag of flags) {\n if (flag[\"name\"] === 'help') continue; // Skip help flag\n\n const flagValue = parsedArgs[flag[\"name\"]];\n const isSet = flagValue !== undefined && flagValue !== null;\n const isMandatory = typeof flag[\"mandatory\"] === 'function' ? false : (flag[\"mandatory\"] ?? false);\n\n // Add flag information as comments\n comments.push(`# ${flag[\"name\"]}: ${Array.isArray(flag[\"description\"]) ? flag[\"description\"].join(' | ') : flag[\"description\"]}`);\n comments.push(`# Options: ${flag[\"options\"].join(', ')}`);\n comments.push(`# Type: ${this.#_getTypeString(flag[\"type\"])}`);\n if (flag[\"defaultValue\"] !== undefined) {\n comments.push(`# Default: ${JSON.stringify(flag[\"defaultValue\"])}`);\n }\n if (flag[\"enum\"] && flag[\"enum\"].length > 0) {\n comments.push(`# Allowed values: ${flag[\"enum\"].join(', ')}`);\n }\n\n if (isSet) {\n config[flag[\"name\"]] = flagValue;\n } else if (isMandatory) {\n config[flag[\"name\"]] = flag[\"defaultValue\"] !== undefined ? flag[\"defaultValue\"] : null;\n }\n // Optional unset flags are omitted from YAML but documented in comments\n\n comments.push('');\n }\n\n const yamlContent = yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n sortKeys: true\n });\n\n return comments.join('\\n') + '\\n' + yamlContent;\n }\n\n /**\n * Generates environment file content in JSON format\n */\n #_generateJsonFormat(flags: ProcessedFlag[], parsedArgs: TParsedArgs<any>): string {\n const config: any = {};\n const metadata: any = {\n _meta: {\n generated_by: 'ArgParser',\n format: 'JSON',\n flags_info: {}\n }\n };\n\n for (const flag of flags) {\n if (flag[\"name\"] === 'help') continue; // Skip help flag\n\n const flagValue = parsedArgs[flag[\"name\"]];\n const isSet = flagValue !== undefined && flagValue !== null;\n const isMandatory = typeof flag[\"mandatory\"] === 'function' ? false : (flag[\"mandatory\"] ?? false);\n\n // Store flag metadata\n metadata._meta.flags_info[flag[\"name\"]] = {\n description: Array.isArray(flag[\"description\"]) ? flag[\"description\"].join(' | ') : flag[\"description\"],\n options: flag[\"options\"],\n type: this.#_getTypeString(flag[\"type\"]),\n mandatory: isMandatory,\n defaultValue: flag[\"defaultValue\"],\n enum: flag[\"enum\"] && flag[\"enum\"].length > 0 ? flag[\"enum\"] : undefined\n };\n\n if (isSet) {\n config[flag[\"name\"]] = flagValue;\n } else if (isMandatory) {\n config[flag[\"name\"]] = flag[\"defaultValue\"] !== undefined ? flag[\"defaultValue\"] : null;\n }\n // Optional unset flags are omitted but documented in metadata\n }\n\n const result = { ...metadata, ...config };\n return JSON.stringify(result, null, 2);\n }\n\n /**\n * Generates environment file content in TOML format\n */\n #_generateTomlFormat(flags: ProcessedFlag[], parsedArgs: TParsedArgs<any>): string {\n const config: any = {};\n const lines: string[] = [];\n\n lines.push('# Environment configuration generated by ArgParser');\n lines.push('# Format: TOML');\n lines.push('');\n\n for (const flag of flags) {\n if (flag[\"name\"] === 'help') continue; // Skip help flag\n\n const flagValue = parsedArgs[flag[\"name\"]];\n const isSet = flagValue !== undefined && flagValue !== null;\n const isMandatory = typeof flag[\"mandatory\"] === 'function' ? false : (flag[\"mandatory\"] ?? false);\n\n // Add flag information as comments\n lines.push(`# ${flag[\"name\"]}: ${Array.isArray(flag[\"description\"]) ? flag[\"description\"].join(' | ') : flag[\"description\"]}`);\n lines.push(`# Options: ${flag[\"options\"].join(', ')}`);\n lines.push(`# Type: ${this.#_getTypeString(flag[\"type\"])}`);\n if (flag[\"defaultValue\"] !== undefined) {\n lines.push(`# Default: ${JSON.stringify(flag[\"defaultValue\"])}`);\n }\n if (flag[\"enum\"] && flag[\"enum\"].length > 0) {\n lines.push(`# Allowed values: ${flag[\"enum\"].join(', ')}`);\n }\n\n if (isSet) {\n config[flag[\"name\"]] = flagValue;\n } else if (isMandatory) {\n config[flag[\"name\"]] = flag[\"defaultValue\"] !== undefined ? flag[\"defaultValue\"] : null;\n }\n // Optional unset flags are omitted from TOML but documented in comments\n\n lines.push('');\n }\n\n const tomlContent = toml.stringify(config);\n return lines.join('\\n') + '\\n' + tomlContent;\n }\n\n /**\n * Helper method to get a string representation of a flag's type\n */\n #_getTypeString(type: any): string {\n if (typeof type === 'function') {\n return type.name || 'custom function';\n } else if (typeof type === 'string') {\n return type;\n } else if (typeof type === 'object' && type) {\n try {\n return (type as any).constructor?.name || 'object';\n } catch {\n return 'object';\n }\n }\n return 'unknown';\n }\n}\n","import { z } from \"zod\";\nimport type { ZodRawShape, ZodTypeAny } from \"zod\";\nimport { ArgParserBase } from \"./ArgParserBase\";\nimport type { IFlag, IHandlerContext, ProcessedFlag, TParsedArgs } from \"./\";\n\n// Assuming these types are correctly exported from src/index.ts\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}\n\nfunction mapArgParserFlagToZodSchema(flag: IFlag | ProcessedFlag): ZodTypeAny {\n let zodSchema: ZodTypeAny;\n const flagTypeOpt = flag[\"type\"];\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 console.warn(\n `[MCP Integration] 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 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\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\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\n toolName = toolName.replace(/[^a-zA-Z0-9_-]/g, \"_\");\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: ZodRawShape = {};\n const hasHelpFlag = flags.some(flag => flag[\"name\"] === \"help\");\n\n for (const flag of flags) {\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[\"name\"] !== \"help\" && 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 if (options?.outputSchemaMap && options.outputSchemaMap[toolName]) {\n const customSchema = options.outputSchemaMap[toolName];\n outputSchema =\n typeof customSchema === \"object\" && !customSchema._def\n ? z.object(customSchema as unknown as ZodRawShape)\n : customSchema;\n } else if (options?.defaultOutputSchema) {\n outputSchema = options.defaultOutputSchema;\n }\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 // 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 ? (helpParser as any).getSubCommand(part) : undefined;\n if (subCmd && subCmd.parser) {\n helpParser = subCmd.parser;\n } else {\n break;\n }\n }\n\n const helpText = (helpParser as any).helpText ? (helpParser as any).helpText() : \"Help not available\";\n\n if (options?.outputSchemaMap?.[toolName]) {\n return {\n success: true,\n help: helpText,\n files: [],\n commandExecuted: null,\n stderrOutput: null,\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 // ArgParser instance (rootParser) should be configured with handleErrors: false in its constructor.\n const parseResult = (await rootParser.parse(\n argv,\n )) as IParseExecutionResult;\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 if (options?.outputSchemaMap?.[toolName]) {\n // Return structured data directly when custom output schema is defined\n return {\n error: errPayload.message,\n files: [],\n commandExecuted: null,\n stderrOutput: errPayload.details?.stderr || null,\n };\n }\n return {\n success: false,\n message: errPayload.message,\n data: errPayload.details,\n };\n }\n\n let handlerResponse = parseResult[\"handlerResponse\"];\n if (handlerResponse === undefined && parseResult[\"$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 = parseResult[\"$commandChain\"]!;\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 resolvedParentArgs = { ...currentArgs };\n currentArgs = currentArgs[cmdName] || {};\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 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 if (finalParser && finalHandler) {\n const handlerToCall = finalHandler as Function;\n const handlerContext: IHandlerContext<any, any> = {\n args: currentArgs,\n commandChain: chain,\n parser: finalParser,\n parentArgs: resolvedParentArgs,\n };\n try {\n handlerResponse = await handlerToCall(handlerContext);\n } catch (handlerError: any) {\n const errorMsg = `Handler error: ${handlerError.message || String(handlerError)}`;\n if (options?.outputSchemaMap?.[toolName]) {\n // Return an object matching the expected output schema with error populated\n return {\n error: errorMsg,\n files: [],\n commandExecuted: null,\n stderrOutput: null,\n };\n }\n return { success: false, message: errorMsg };\n }\n }\n }\n\n if (options?.outputSchemaMap?.[toolName]) {\n // Return structured data directly when custom output schema is defined\n return handlerResponse;\n }\n return { success: true, data: handlerResponse };\n } catch (e: any) {\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 let errorDetails: any = e;\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 errorDetails = { details: e };\n } else {\n // Other types of errors (parsing errors, etc.)\n errorMsg = `MCP tool exec failed: ${e.message || String(e)}`;\n }\n\n if (options?.outputSchemaMap?.[toolName]) {\n // Return an object matching the expected output schema with error populated\n return {\n error: errorMsg,\n files: [],\n commandExecuted: null,\n stderrOutput: errorDetails?.stderr || null,\n };\n }\n return {\n success: false,\n message: errorMsg,\n data: errorDetails\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","import { ArgParserBase } from \"./ArgParserBase\";\nimport {\n generateMcpToolsFromArgParser,\n} from \"./mcp-integration\";\nimport type { GenerateMcpToolsOptions, IMcpToolStructure } from \"./mcp-integration\";\nimport type { IHandlerContext } from \"./types\";\n\n/**\n * Configuration for a single MCP transport\n */\nexport type McpTransportConfig = {\n type: \"stdio\" | \"sse\" | \"streamable-http\";\n port?: number;\n host?: string;\n path?: string;\n sessionIdGenerator?: () => string;\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 * 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 /**\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 return generateMcpToolsFromArgParser(this, options);\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 * @returns Configured MCP server instance\n */\n public createMcpServer(\n serverInfo: {\n name: string;\n version: string;\n description?: string;\n },\n toolOptions?: GenerateMcpToolsOptions,\n ): any {\n // Dynamic import to avoid circular dependencies\n const { McpServer } = require(\"@modelcontextprotocol/sdk/server/mcp.js\");\n\n const server = new McpServer({\n id: serverInfo.name,\n version: serverInfo.version,\n name: serverInfo.name,\n description: serverInfo.description,\n });\n\n const tools = this.toMcpTools(toolOptions);\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 uniqueTools.forEach((tool) => {\n const toolConfig: any = {\n description: tool.description || \"No description provided.\",\n inputSchema: (tool.inputSchema as any).shape || tool.inputSchema,\n };\n\n if (tool.outputSchema) {\n toolConfig.outputSchema = (tool.outputSchema as any).shape || tool.outputSchema;\n }\n\n server.registerTool(tool.name, toolConfig, tool.execute);\n });\n\n return server;\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(serverInfo, \"stdio\", {}, toolOptions);\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 }>,\n toolOptions?: GenerateMcpToolsOptions,\n ): Promise<void> {\n const server = this.createMcpServer(serverInfo, toolOptions);\n const startPromises: Promise<void>[] = [];\n\n for (const transportConfig of transports) {\n const promise = this.#_startSingleTransport(server, serverInfo, transportConfig);\n startPromises.push(promise);\n }\n\n await Promise.all(startPromises);\n console.error(`[${serverInfo.name}] All MCP transports started successfully`);\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 } = {},\n toolOptions?: GenerateMcpToolsOptions,\n ): Promise<void> {\n const server = this.createMcpServer(serverInfo, toolOptions);\n await this.#_startSingleTransport(server, serverInfo, {\n type: transportType,\n ...transportOptions,\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 },\n ): Promise<void> {\n switch (transportConfig.type) {\n case \"stdio\": {\n const { StdioServerTransport } = await import(\"@modelcontextprotocol/sdk/server/stdio.js\");\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(`[${serverInfo.name}] MCP Server started with stdio transport`);\n break;\n }\n\n case \"sse\": {\n const { SSEServerTransport } = await import(\"@modelcontextprotocol/sdk/server/sse.js\");\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(`[${serverInfo.name}] MCP Server listening on http://${transportConfig.host || \"localhost\"}:${port}${path} (SSE)`);\n resolve();\n });\n });\n break;\n }\n\n case \"streamable-http\": {\n const { StreamableHTTPServerTransport } = await import(\"@modelcontextprotocol/sdk/server/streamableHttp.js\");\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 || \"/mcp\";\n\n const transports: { [sessionId: string]: any } = {};\n\n app.all(path, async (req: any, res: any) => {\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: transportConfig.sessionIdGenerator || (() => Math.random().toString(36).substring(7)),\n onsessioninitialized: (sessionId: string) => {\n transports[sessionId] = transport;\n }\n });\n\n transport.onclose = () => {\n if (transport.sessionId) {\n delete transports[transport.sessionId];\n }\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 console.error(`[${serverInfo.name}] MCP Server listening on http://${transportConfig.host || \"localhost\"}:${port}${path} (HTTP)`);\n resolve();\n });\n });\n break;\n }\n\n default:\n throw new Error(`Unsupported transport type: ${transportConfig.type}`);\n }\n }\n\n /**\n * Override parse() to handle async handlers properly\n * This allows ArgParser to work with async handlers while keeping\n * backwards compatibility for synchronous usage\n */\n public parse(processArgs: string[], options?: any): any {\n // First, call the parent parse method to get the basic parsing done\n const result = super.parse(processArgs, options);\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 // Check if there's an async handler that needs to be awaited\n if (anyResult._asyncHandlerPromise) {\n // Return a promise for async handlers\n return this.parseAsync(processArgs, options);\n }\n\n return result;\n }\n\n /**\n * Async version of parse for when async handlers are detected\n */\n public async parseAsync(processArgs: string[], options?: any): Promise<any> {\n // First, call the parent parse method to get the basic parsing done\n const result = super.parse(processArgs, options);\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 // 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 } 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\n * @param options Optional configuration including preset transports and tool options\n * @returns This ArgParserWithMcp instance for chaining\n */\n public addMcpSubCommand(\n subCommandName: string | undefined,\n serverInfo: {\n name: string;\n version: string;\n description?: string;\n },\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\n * @param toolOptions Optional MCP tool generation options (backward compatibility)\n * @returns This ArgParserWithMcp instance for chaining\n * @deprecated Use the options parameter instead for better configurability\n */\n public addMcpSubCommand(\n subCommandName: string | undefined,\n serverInfo: {\n name: string;\n version: string;\n description?: string;\n },\n toolOptions?: GenerateMcpToolsOptions,\n ): this;\n\n public addMcpSubCommand(\n subCommandName: string | undefined = \"mcp-server\",\n serverInfo: {\n name: string;\n version: string;\n description?: string;\n },\n optionsOrToolOptions?: (McpSubCommandOptions & { toolOptions?: GenerateMcpToolsOptions }) | GenerateMcpToolsOptions,\n ): this {\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 & { toolOptions?: GenerateMcpToolsOptions };\n\n if (optionsOrToolOptions &&\n (typeof optionsOrToolOptions === 'object') &&\n ('includeSubCommands' in optionsOrToolOptions || 'toolNamePrefix' in optionsOrToolOptions || 'toolNameSuffix' in optionsOrToolOptions)) {\n // This is the old GenerateMcpToolsOptions format\n options = { toolOptions: optionsOrToolOptions as GenerateMcpToolsOptions };\n } else {\n // This is the new options format or undefined\n options = (optionsOrToolOptions as McpSubCommandOptions & { toolOptions?: GenerateMcpToolsOptions }) || {};\n }\n\n const { defaultTransports, defaultTransport, toolOptions } = options;\n\n const mcpHandler = async (ctx: IHandlerContext): Promise<void> => {\n if (!ctx.parentParser) {\n console.error(\n \"[MCP Server] Critical: MCP server handler called without a parent parser context.\",\n );\n process.exit(1);\n }\n\n console.error(`[${serverInfo.name}] Starting MCP Server...`);\n\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 const transports = ctx.args[\"transports\"] as string;\n\n if (transports) {\n // Parse multiple transports configuration from CLI\n try {\n const transportConfigs = JSON.parse(transports);\n await mcpParser.startMcpServerWithMultipleTransports(serverInfo, transportConfigs, toolOptions);\n } catch (error: any) {\n console.error(\"❌ Error parsing transports configuration:\", error.message);\n console.error(\"Expected JSON format: '[{\\\"type\\\":\\\"stdio\\\"},{\\\"type\\\":\\\"sse\\\",\\\"port\\\":3001}]'\");\n process.exit(1);\n }\n } else if (defaultTransports && defaultTransports.length > 0) {\n // Use preset multiple transports configuration\n await mcpParser.startMcpServerWithMultipleTransports(serverInfo, defaultTransports, toolOptions);\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 );\n } else {\n // Single transport mode from CLI flags (backwards compatibility)\n const transportType = (ctx.args[\"transport\"] as \"stdio\" | \"sse\" | \"streamable-http\") || \"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 await mcpParser.startMcpServerWithTransport(serverInfo, transportType, transportOptions, toolOptions);\n }\n\n // Keep the process alive\n return new Promise(() => {});\n };\n\n // Create sub-command parser with transport options\n const mcpSubParser = new ArgParserBase({}, [\n {\n name: \"transport\",\n description: \"Transport type for MCP server (single transport mode)\",\n options: [\"--transport\", \"-t\"],\n type: \"string\",\n enum: [\"stdio\", \"sse\", \"streamable-http\"],\n defaultValue: \"stdio\",\n },\n {\n name: \"transports\",\n description: \"Multiple transports configuration as JSON array (overrides single transport)\",\n options: [\"--transports\"],\n type: \"string\",\n },\n {\n name: \"port\",\n description: \"Port number for HTTP-based transports (single transport mode)\",\n options: [\"--port\", \"-p\"],\n type: \"number\",\n defaultValue: 3000,\n },\n {\n name: \"host\",\n description: \"Host address for HTTP-based transports (single transport mode)\",\n options: [\"--host\"],\n type: \"string\",\n defaultValue: \"localhost\",\n },\n {\n name: \"path\",\n description: \"Path for HTTP-based transports (single transport mode)\",\n options: [\"--path\"],\n type: \"string\",\n defaultValue: \"/mcp\",\n },\n ]);\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 });\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 */\n public static withMcp<T = any>(\n options?: ConstructorParameters<typeof ArgParserBase>[0],\n initialFlags?: ConstructorParameters<typeof ArgParserBase>[1],\n ): ArgParser<T> {\n return new ArgParser<T>(options as any, initialFlags);\n }\n\n /**\n * Convert an existing ArgParserBase instance to ArgParser with MCP\n * This allows upgrading existing parsers to support MCP\n */\n public static fromArgParser<T = any>(\n parser: ArgParserBase<T>,\n ): ArgParser<T> {\n const originalParser = parser as any;\n\n // Create new instance with the same configuration as the original\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 type { ArgParserBase } from \"./ArgParserBase\";\nimport type { ProcessedFlag, ISubCommand } from \"./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 => console.log(` ${path.join(' ') || '(root)'}`));\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(subCommand.parser, newPath, allPaths, depth + 1);\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(f =>\n f['name'] !== 'help' &&\n (typeof f['mandatory'] === 'boolean' ? f['mandatory'] : false)\n );\n const optionalFlags = flags.filter(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) { // 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(flag: ProcessedFlag, mode: 'valid' | 'invalid' | 'random'): 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(flag: ProcessedFlag, mode: 'valid' | 'invalid' | 'random'): string[] {\n const count = flag['allowMultiple'] && mode !== 'invalid' ?\n Math.floor(Math.random() * 3) + 1 : 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(flag: ProcessedFlag, mode: 'valid' | 'invalid' | 'random'): 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 ? Date.now() - startTime : 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 ? Date.now() - startTime : 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(commandPaths: string[][], results: TestResult[]): 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 for (const path of commandPaths) {\n const pathKey = path.join(' ') || '(root)';\n const pathResults = results.filter(r => \n 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"],"names":["_throwForDuplicateFlags","identifiedFinalParser","path","sessionId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","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/core/types.ts","../src/core/FlagManager.ts","../src/dxt/DxtGenerator.ts","../src/config/plugins/ConfigPlugin.ts","../src/config/plugins/ConfigPluginRegistry.ts","../src/config/ConfigurationManager.ts","../src/mcp/mcp-resources.ts","../src/mcp/mcp-prompts.ts","../src/mcp/mcp-notifications.ts","../src/core/ArgParserBase.ts","../src/mcp/mcp-integration.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/@modelcontextprotocol+sdk@1.15.1/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.15.1/node_modules/@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/@modelcontextprotocol+sdk@1.15.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js","../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.15.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.15.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.15.1/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.15.1/node_modules/@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/@modelcontextprotocol+sdk@1.15.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sse.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.15.1/node_modules/@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","import { z } 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\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 .describe(\"Textual description for help messages.\"),\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.function().args(z.string()).returns(z.any()), // Custom parser function (value: string) => any\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 or string literal) or a custom parser function. Defaults to 'string'.\",\n ),\n mandatory: z\n .union([z.boolean(), z.function().args(z.any()).returns(z.boolean())]) // `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 .function()\n .args(z.any().optional(), z.any().optional()) // value, parsedArgs?\n .returns(\n z.union([\n z.boolean(),\n z.string(),\n z.void(),\n z.promise(z.union([z.boolean(), z.string(), z.void()])),\n ]),\n )\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 })\n .passthrough() // Allow unrecognized properties, they won't be validated or processed beyond alias handling.\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) // Custom parser function\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 * 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};\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};\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 \"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\n/**\n * Generic type for the collection of processed flags that an ArgParser instance manages.\n */\nexport type FlagsArray = readonly ProcessedFlag[];\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 */\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 * 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 { 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 };\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 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 chalk from \"@alcyone-labs/simple-chalk\";\nimport type { ParseResult } from \"../core/types\";\n\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(exitCode: number, message?: string, type?: ParseResult['type'], data?: any): 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 (this.argParserInstance.getAutoExit() && typeof process === \"object\" && typeof process.exit === \"function\") {\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(processArgs: string[], buildDxtIndex: number): Promise<boolean | ParseResult> {\n try {\n // Check if we're in test mode (vitest/jest environment)\n const isTestMode = 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 if (isTestMode) {\n // In test mode, generate a mock DXT package structure\n return await this.handleTestModeDxtGeneration(processArgs, buildDxtIndex);\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(chalk.red(`Error: Entry point file not found: ${entryPointFile}`));\n return this._handleExit(1, \"Entry point file not found\", \"error\");\n }\n\n console.log(chalk.cyan(`\\n🔧 Building DXT package for entry point: ${path.basename(entryPointFile)}`));\n\n // Build the DXT package using TSDown\n await this.buildDxtWithTsdown(entryPointFile);\n\n console.log(chalk.green(`\\n✅ DXT package generation completed!`));\n\n return this._handleExit(0, \"DXT package generation completed\", \"success\", { entryPoint: entryPointFile });\n } catch (error) {\n console.error(chalk.red(`Error generating DXT package: ${error instanceof Error ? error.message : String(error)}`));\n return this._handleExit(1, `Error generating DXT package: ${error instanceof Error ? error.message : String(error)}`, \"error\");\n }\n }\n\n /**\n * Handles DXT generation in test mode by creating mock DXT package structure\n */\n private async handleTestModeDxtGeneration(processArgs: string[], buildDxtIndex: number): 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(path.join(buildDir, 'manifest.json'), JSON.stringify(manifest, null, 2));\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(path.join(buildDir, 'package.json'), JSON.stringify(packageJson, null, 2));\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(path.join(buildDir, 'build-dxt-package.sh'), buildScript);\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(1, `Test mode DXT generation failed: ${error instanceof Error ? error.message : String(error)}`, \"error\");\n }\n }\n\n /**\n * Generates a DXT package for the unified MCP server\n * Now supports both withMcp() configuration and legacy addMcpSubCommand()\n */\n public async generateDxtPackage(mcpSubCommand?: any, outputDir?: string): Promise<void> {\n // Extract server information (now supports withMcp() configuration)\n const serverInfo = this.extractMcpServerInfo(mcpSubCommand);\n\n // Generate tools for the unified MCP server (includes both CLI-generated and manual tools)\n const tools = this.generateMcpToolsForDxt(mcpSubCommand);\n\n // Use provided output directory or default\n const finalOutputDir = outputDir || './dxt-packages';\n\n // Create build-ready folder instead of ZIP file\n const folderName = `${serverInfo.name.replace(/[^a-zA-Z0-9_-]/g, \"_\")}-dxt`;\n const buildDir = path.join(finalOutputDir, folderName);\n\n // Ensure build directory exists\n if (!fs.existsSync(buildDir)) {\n fs.mkdirSync(buildDir, { recursive: true });\n }\n\n // Create server directory\n const serverDir = path.join(buildDir, 'server');\n if (!fs.existsSync(serverDir)) {\n fs.mkdirSync(serverDir, { recursive: true });\n }\n\n // Add logo if available and get the filename\n const logoFilename = await this.addLogoToFolder(buildDir, serverInfo);\n\n // Create manifest.json (after logo to get correct filename)\n const manifest = this.createDxtManifest(serverInfo, tools, mcpSubCommand, logoFilename);\n\n // Validate manifest before creating files\n this.validateDxtManifest(manifest);\n\n // Write manifest.json\n fs.writeFileSync(path.join(buildDir, 'manifest.json'), JSON.stringify(manifest, null, 2));\n\n // Add original CLI source for handler execution\n this.addOriginalCliToFolder(buildDir);\n\n // Bundle the original CLI using TSDown for autonomous execution\n const bundledCliPath = await this.bundleOriginalCliWithTsdown(serverDir);\n\n // Create a complete server entry point\n const serverScript = this.createServerScript(serverInfo, bundledCliPath);\n const serverScriptPath = path.join(serverDir, 'index.mjs');\n fs.writeFileSync(serverScriptPath, serverScript);\n\n // Make the server script executable (required for MCP)\n try {\n fs.chmodSync(serverScriptPath, 0o755);\n } catch (error) {\n console.warn('⚠ Could not set executable permission on server script:', error instanceof Error ? error.message : String(error));\n }\n\n // Create package.json for the DXT package\n const packageJson = this.createDxtPackageJson(serverInfo);\n fs.writeFileSync(path.join(buildDir, 'package.json'), JSON.stringify(packageJson, null, 2));\n\n // Add README with installation instructions\n const readme = this.createDxtReadme(serverInfo);\n fs.writeFileSync(path.join(buildDir, 'README.md'), readme);\n\n // Add simple build script for DXT packaging\n const buildScript = this.createSimpleBuildScript(serverInfo);\n fs.writeFileSync(path.join(buildDir, 'build-dxt.sh'), buildScript);\n\n // Add .dxtignore file to exclude build artifacts\n const dxtIgnore = this.createDxtIgnore();\n fs.writeFileSync(path.join(buildDir, '.dxtignore'), dxtIgnore);\n\n // Make build script executable\n try {\n fs.chmodSync(path.join(buildDir, 'build-dxt.sh'), 0o755);\n } catch (error) {\n // Ignore chmod errors on Windows\n }\n\n console.log(chalk.green(` ✓ Generated DXT package folder: ${folderName}`));\n console.log(chalk.gray(` Server: ${serverInfo.name} v${serverInfo.version}`));\n console.log(chalk.gray(` Tools: ${tools.length} tool(s)`));\n console.log(chalk.gray(` Location: ${buildDir}`));\n\n // Provide clear instructions for manual DXT package creation\n console.log(chalk.cyan(`\\n📦 Creating DXT package using Anthropic's dxt pack...`));\n console.log(chalk.cyan(`\\n📋 Manual steps to create your DXT package:`));\n console.log(chalk.white(` cd ${path.relative(process.cwd(), buildDir)}`));\n console.log(chalk.white(` ./build-dxt.sh`));\n }\n\n /**\n * Reads package.json to extract fallback information for DXT manifest\n */\n private readPackageJsonInfo(): { author?: any; repository?: any; license?: string; homepage?: string } | null {\n try {\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n if (fs.existsSync(packageJsonPath)) {\n const packageContent = fs.readFileSync(packageJsonPath, \"utf-8\");\n const packageData = JSON.parse(packageContent);\n \n return {\n author: packageData.author,\n repository: packageData.repository,\n license: packageData.license,\n homepage: packageData.homepage\n };\n }\n } catch (error) {\n // Silently ignore package.json read errors\n }\n return null;\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 = (this.argParserInstance as any).getDescription?.() || \"MCP server generated from ArgParser\";\n\n const defaultInfo = {\n name: appCommandName || appName?.toLowerCase().replace(/[^a-zA-Z0-9_-]/g, \"_\") || \"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(mcpSubCommand?: any): 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 = (this.argParserInstance as any).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(toolOptions);\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 (this.argParserInstance.getHandler && this.argParserInstance.getHandler()) {\n const appName = this.argParserInstance.getAppName() || \"main\";\n const commandName = this.argParserInstance.getAppCommandName() || appName.toLowerCase().replace(/[^a-zA-Z0-9_-]/g, \"_\");\n\n tools.push({\n name: commandName,\n description: this.argParserInstance.getDescription() || `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 = this.argParserInstance.getAppCommandName() || this.argParserInstance.getAppName()?.toLowerCase().replace(/[^a-zA-Z0-9_-]/g, \"_\") || \"main\";\n tools.push({\n name: `${commandName}_${name}`,\n description: (subCmd as any).description || `Execute ${name} subcommand`\n });\n }\n }\n\n return tools.length > 0 ? tools : [{\n name: \"main\",\n description: \"Main command tool\"\n }];\n } catch (error) {\n console.warn(chalk.yellow(`Warning: Could not generate detailed tool list: ${error instanceof Error ? error.message : String(error)}`));\n return [{\n name: \"main\",\n description: \"Main command tool\"\n }];\n }\n }\n\n private createDxtManifest(serverInfo: any, tools: Array<{ name: string; description?: string }>, mcpSubCommand?: any, logoFilename?: string): any {\n // Get fallback information from package.json\n const packageInfo = this.readPackageJsonInfo();\n\n // Parse author information\n let author = serverInfo.author;\n if (!author && packageInfo?.author) {\n if (typeof packageInfo.author === 'string') {\n // Parse \"Name <email>\" format\n const match = packageInfo.author.match(/^([^<]+?)(?:\\s*<([^>]+)>)?$/);\n if (match) {\n author = {\n name: match[1].trim(),\n email: match[2]?.trim()\n };\n } else {\n author = { name: packageInfo.author };\n }\n } else {\n author = packageInfo.author;\n }\n }\n\n // Ensure we have required author field\n if (!author) {\n throw new Error(\"DXT manifest requires author information. Please provide it via withMcp() serverInfo.author, addMcpSubCommand serverInfo.author, or in package.json\");\n }\n\n // Generate CLI arguments from flags\n const cliArgs = this.generateCliArgsForDxt(mcpSubCommand);\n\n // Generate environment variables and user config\n const { envVars, userConfig } = this.generateEnvAndUserConfig();\n\n // Build the DXT-compliant manifest (remove id field and ensure tools only have name/description)\n const manifest: any = {\n dxt_version: \"0.1\",\n name: serverInfo.name,\n version: serverInfo.version,\n description: serverInfo.description || \"MCP server generated from ArgParser\",\n author: author,\n server: {\n type: \"node\",\n entry_point: \"server/index.mjs\",\n mcp_config: {\n command: \"node\",\n args: [\"${__dirname}/server/index.mjs\", ...cliArgs],\n env: envVars\n }\n },\n tools: tools.map(tool => ({\n name: tool.name,\n description: tool.description\n }))\n };\n\n // Add icon reference if logo was successfully added\n if (logoFilename) {\n manifest.icon = logoFilename;\n }\n\n // Add optional fields if available\n if (userConfig && Object.keys(userConfig).length > 0) {\n manifest.user_config = userConfig;\n }\n\n if (serverInfo.repository || packageInfo?.repository) {\n manifest.repository = serverInfo.repository || packageInfo?.repository;\n }\n\n if (serverInfo.license || packageInfo?.license) {\n manifest.license = serverInfo.license || packageInfo?.license;\n }\n\n if (serverInfo.homepage || packageInfo?.homepage) {\n manifest.homepage = serverInfo.homepage || packageInfo?.homepage;\n }\n\n return manifest;\n }\n\n private validateDxtManifest(manifest: any): void {\n const errors: string[] = [];\n\n // Required fields\n if (!manifest.dxt_version) errors.push(\"Missing required field: dxt_version\");\n if (!manifest.name) errors.push(\"Missing required field: name\");\n if (!manifest.version) errors.push(\"Missing required field: version\");\n if (!manifest.server) errors.push(\"Missing required field: server\");\n if (!manifest.author) errors.push(\"Missing required field: author\");\n\n // Server configuration validation\n if (manifest.server) {\n if (!manifest.server.type) errors.push(\"Missing required field: server.type\");\n if (!manifest.server.entry_point) errors.push(\"Missing required field: server.entry_point\");\n if (!manifest.server.mcp_config) errors.push(\"Missing required field: server.mcp_config\");\n\n if (manifest.server.mcp_config) {\n if (!manifest.server.mcp_config.command) errors.push(\"Missing required field: server.mcp_config.command\");\n if (!manifest.server.mcp_config.args || !Array.isArray(manifest.server.mcp_config.args)) {\n errors.push(\"Missing or invalid field: server.mcp_config.args (must be array)\");\n }\n }\n }\n\n // Author validation\n if (manifest.author && typeof manifest.author === 'object') {\n if (!manifest.author.name) errors.push(\"Missing required field: author.name\");\n }\n\n // DXT version validation\n if (manifest.dxt_version && manifest.dxt_version !== \"0.1\") {\n errors.push(\"Unsupported dxt_version: only '0.1' is currently supported\");\n }\n\n if (errors.length > 0) {\n throw new Error(`DXT manifest validation failed:\\n${errors.map(e => ` - ${e}`).join('\\n')}`);\n }\n }\n\n private createServerScript(serverInfo: any, bundledCliPath?: string | null): string {\n // Use bundled CLI if available, otherwise fall back to original\n const cliImportPath = bundledCliPath || 'original-cli.mjs';\n\n return `#!/usr/bin/env node\n\n// Generated MCP server for ${serverInfo.name}\n// This server uses @alcyone-labs/arg-parser's built-in MCP functionality for full protocol compliance\n\n// FIRST: Set up MCP-safe logging to prevent STDOUT contamination\nimport { createMcpLogger } from '@alcyone-labs/simple-mcp-logger';\n\n// Auto-detect MCP mode and hijack console to prevent protocol corruption\nconst mcpLogger = createMcpLogger('${serverInfo.name}');\nglobalThis.console = mcpLogger;\n\n// Now import the CLI which already has MCP functionality configured\nimport originalCli from './${cliImportPath}';\n\n// Server configuration\nconst serverInfo = ${JSON.stringify(serverInfo, null, 2)};\n\n// Use mcpError for debugging output (safe STDERR, visible in client logs)\nconsole.error(\\`MCP Server: \\${serverInfo.name} v\\${serverInfo.version}\\`);\nconsole.error(\\`Description: \\${serverInfo.description}\\`);\nconsole.error(\\`Generated from @alcyone-labs/arg-parser with built-in MCP functionality\\`);\n${bundledCliPath ? 'console.error(`Using bundled CLI for autonomous execution`);' : ''}\n\n// The original CLI has MCP functionality configured via withMcp() or addMcpSubCommand()\n// We use the centralized --s-mcp-serve system flag to start the unified MCP server\n\n// Start the MCP server using the library's built-in centralized serving\n// This works with both withMcp() configuration and legacy addMcpSubCommand() setups\noriginalCli.parse(['--s-mcp-serve']);\n`;\n }\n\n private createDxtPackageJson(serverInfo: any): any {\n // Use proper npm version for production DXT packages\n // Only use local file path for development when LOCAL_BUILD=1 is set\n const useLocalBuild = process.env['LOCAL_BUILD'] === '1';\n const argParserDependency = useLocalBuild ? \"file:../../arg-parser-local.tgz\" : \"^1.3.0\";\n\n // Read the original package.json to get all dependencies\n let originalDependencies = {};\n try {\n const originalPackageJsonPath = path.join(process.cwd(), \"package.json\");\n if (fs.existsSync(originalPackageJsonPath)) {\n const originalPackageJson = JSON.parse(fs.readFileSync(originalPackageJsonPath, 'utf8'));\n originalDependencies = originalPackageJson.dependencies || {};\n }\n } catch (error) {\n console.warn('⚠ Could not read original package.json for dependencies:', error instanceof Error ? error.message : String(error));\n }\n\n // Merge original dependencies with required MCP dependencies\n const dependencies = {\n ...originalDependencies,\n \"@alcyone-labs/arg-parser\": argParserDependency,\n \"@alcyone-labs/simple-mcp-logger\": \"^1.0.0\",\n \"@modelcontextprotocol/sdk\": \"^1.15.0\",\n \"zod\": \"^3.22.4\"\n };\n\n // Add dev dependencies for building\n const devDependencies = {\n \"tsup\": \"^8.3.5\"\n };\n\n // Remove any file: dependencies except for arg-parser in local build mode\n Object.keys(dependencies).forEach(key => {\n const depValue = dependencies[key as keyof typeof dependencies];\n if (key !== \"@alcyone-labs/arg-parser\" && typeof depValue === 'string' && depValue.startsWith('file:')) {\n delete (dependencies as any)[key];\n console.warn(`⚠ Removed file: dependency ${key} from DXT package (not suitable for distribution)`);\n }\n });\n\n return {\n name: serverInfo.name,\n version: serverInfo.version,\n description: serverInfo.description,\n main: \"server/index.mjs\",\n type: \"module\",\n scripts: {\n start: \"node server/index.mjs\",\n \"build-dxt\": \"./build-dxt.sh\"\n },\n dependencies,\n devDependencies,\n engines: {\n node: \">=22.0.0\"\n },\n author: serverInfo.author,\n license: serverInfo.license || \"MIT\",\n repository: serverInfo.repository\n };\n }\n\n /**\n * Creates a .dxtignore file to exclude build artifacts and unnecessary files\n */\n private createDxtIgnore(): string {\n return `# DXT ignore file - exclude these files from the DXT package\n# Generated by @alcyone-labs/arg-parser\n\n# Build artifacts and logs\n*.log\n*.tmp\ntemp-dxt-build/\n\n# Build scripts (not needed in final package)\nbuild-dxt.sh\narg-parser-local.tgz\ntsup.config.autonomous.js\ntsdown.config.mjs\n\n# Original files (replaced by bundled autonomous build)\nserver/index.original.mjs\nserver/*.autonomous.mjs\n\n# NOTE: server/original-cli.mjs is NOT excluded because it's needed for the MCP server to function\n# The bundled version (if created) will be server/original-cli.bundled.mjs\n\n# NOTE: node_modules/ is NOT excluded because TSDown bundling may not be 100% autonomous\n# If bundling is successful, node_modules won't be needed, but we include it as fallback\n# The bundled server/index.mjs should be fully autonomous and not require node_modules\n\n# Development files\n.git/\n.gitignore\n.env\n.env.*\n\n# OS files\n.DS_Store\nThumbs.db\n\n# IDE files\n.vscode/\n.idea/\n*.swp\n*.swo\n`;\n }\n\n /**\n * Creates a simple build script that uses TSDown bundling and Anthropic's dxt pack\n */\n private createSimpleBuildScript(serverInfo: any): string {\n return `#!/bin/bash\n\n# Simple DXT Build Script for ${serverInfo.name}\n# Generated by @alcyone-labs/arg-parser with TSDown bundling\n\nset -e\n\necho \"📦 Creating DXT package for ${serverInfo.name}...\"\n\n# Step 1: Make server executable (required for MCP)\necho \"🔧 Making server executable...\"\nchmod +x server/index.mjs\n\n# Step 2: Handle local development dependencies\nif grep -q \"file:.*arg-parser-local.tgz\" package.json; then\n echo \"🔧 Checking for local package tarball...\"\n\n # Check if the tarball exists in the parent directory\n if [ -f \"../../arg-parser-local.tgz\" ]; then\n echo \"✅ Found local package tarball: ../../arg-parser-local.tgz\"\n else\n echo \"⚠️ Local tarball not found, falling back to npm registry\"\n echo \"💡 To use local build, run: cd /path/to/arg-parser && npm pack && cp *.tgz examples/community/canny-cli/\"\n\n # Replace with npm version\n sed -i.bak 's|\"file:.*arg-parser-local.tgz\"|\"^1.3.0\"|g' package.json 2>/dev/null || \\\\\n sed -i 's|\"file:.*arg-parser-local.tgz\"|\"^1.3.0\"|g' package.json\n fi\nfi\n\n# Step 3: Install dependencies (for runtime only, bundling was done during generation)\necho \"📦 Installing dependencies...\"\nnpm install\n\n# Step 4: Validate manifest\necho \"🔍 Validating DXT manifest...\"\nif command -v npx >/dev/null 2>&1; then\n if npx @anthropic-ai/dxt validate manifest.json; then\n echo \"✅ DXT manifest validation passed\"\n else\n echo \"❌ DXT manifest validation failed\"\n exit 1\n fi\nelse\n echo \"⚠️ npx not found, skipping DXT validation\"\nfi\n\n# Step 5: Create DXT package using Anthropic's official packer\necho \"📦 Creating DXT package...\"\nif command -v npx >/dev/null 2>&1; then\n # Use dxt pack directly with .dxtignore for clean packaging\n npx @anthropic-ai/dxt pack . \"${serverInfo.name}.dxt\"\nelse\n # Fallback to standard zip if npx not available\n echo \"⚠️ npx not found, using zip fallback\"\n zip -r \"${serverInfo.name}.dxt\" . -x \"node_modules/*\" \"*.log\" \".git/*\" \"build-dxt.sh\" \"temp-dxt-build/*\"\nfi\n\n# Step 6: Sign the DXT package (optional)\necho \"🔐 Signing DXT package...\"\nif command -v npx >/dev/null 2>&1 && command -v openssl >/dev/null 2>&1; then\n if npx @anthropic-ai/dxt sign \"${serverInfo.name}.dxt\" --self-signed; then\n echo \"✅ DXT package signed successfully\"\n else\n echo \"⚠️ DXT signing failed, but package is still usable\"\n fi\nelse\n echo \"⚠️ npx or openssl not found, skipping DXT signing\"\nfi\n\necho \"✅ DXT package created: ${serverInfo.name}.dxt\"\necho \"🎯 This package includes bundled CLI with all dependencies!\"\necho \"\"\necho \"🎉 Installation Instructions:\"\necho \"You can now take the file '${serverInfo.name}.dxt' and install it on Claude Desktop\"\necho \"or supporting applications by using drag & drop on the Extensions Settings page,\"\necho \"or directly pointing the file selector to this file.\"\necho \"\"\necho \"📁 DXT file location: $(pwd)/${serverInfo.name}.dxt\"\n`;\n }\n\n\n\n private createDxtReadme(serverInfo: any): string {\n return `# ${serverInfo.name}\n\n${serverInfo.description}\n\n## Installation\n\nThis is a Desktop Extension (DXT) package generated from @alcyone-labs/arg-parser.\n\n### Automatic Installation\nOpen this .dxt file with Claude Desktop or other DXT-compatible applications for single-click installation.\n\n### Manual Installation\n1. Extract the .dxt file (it's a ZIP archive)\n2. Run \\`npm install\\` to install dependencies\n3. Start the server with \\`npm start\\`\n\n## Tools\n\nThis MCP server provides the following tools:\n${this.generateMcpToolsForDxt().map(tool => `- **${tool.name}**: ${tool.description}`).join('\\n')}\n\n## Building DXT Packages\n\nTo rebuild the DXT package:\n\n### Prerequisites\n- Node.js 18+ installed\n- npm package manager\n\n### Build Steps\n\n\\`\\`\\`bash\n# 1. Install dependencies\nnpm install\n\n# 2. Build DXT package\nnpm run build-dxt\n# or\n./build-dxt.sh\n\n# 3. The build script will:\n# - Install dependencies\n# - Validate the manifest\n# - Create the DXT package using Anthropic's official packer\n# - Sign the package (optional)\n\\`\\`\\`\n\n### Manual Build Process\n\nIf the automated build script doesn't work, you can build manually:\n\n\\`\\`\\`bash\n# 1. Install dependencies\nnpm install\n\n# 2. Create DXT package\nnpx @anthropic-ai/dxt pack . ${serverInfo.name}.dxt\n\n# 2. Update manifest.json\n# Change \"entry_point\" from \"server/index.js\" to \"dist-autonomous/server.cjs\"\n\n# 3. Create new DXT with bundled server\n# Replace server/index.js with dist-autonomous/server.cjs\n# Remove package.json dependencies (optional)\n\\`\\`\\`\n\n### Result\nThe resulting DXT package will be completely autonomous and won't require \\`npm install\\`.\n\n## Generated Information\n\n- **Generator**: @alcyone-labs/arg-parser v1.3.0\n- **Generated**: ${new Date().toISOString()}\n- **DXT Version**: 0.1\n\n## Note\n\nThis is a simplified DXT package. For full functionality and the latest features, use the original CLI directly.\nFor autonomous packages, follow the build instructions above.\n`;\n }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n /**\n * Maps ArgParser flag types to DXT user config types\n */\n private mapFlagTypeToUserConfigType(flagType: any): string {\n // Handle constructor functions (processed flags)\n if (typeof flagType === 'function') {\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 // Custom function types default to string\n return 'string';\n }\n\n // Handle string literals (raw flag definitions)\n switch (String(flagType).toLowerCase()) {\n case 'string': return 'string';\n case 'number': return 'number';\n case 'boolean': return 'boolean';\n case 'table': return 'array';\n case 'array': return 'array';\n case 'object': return 'object';\n default: return 'string';\n }\n }\n\n /**\n * Generates CLI arguments for DXT manifest based on ArgParser flags\n */\n private generateCliArgsForDxt(_mcpSubCommand?: any): string[] {\n const args: string[] = [];\n\n // Use the centralized --s-mcp-serve system flag instead of individual subcommands\n // This works across all ArgParser CLIs regardless of their MCP subcommand names\n args.push(\"--s-mcp-serve\");\n\n // Note: Flag arguments are NOT added here - they should be passed via environment variables\n // The mcp_config.args should only contain the system flag for MCP servers\n // Tool parameters are passed via MCP tool arguments, not CLI arguments\n\n return args;\n }\n\n /**\n * Generates environment variables and user config for DXT manifest\n */\n private generateEnvAndUserConfig(): { envVars: Record<string, string>, userConfig: Record<string, any> } {\n const envVars: Record<string, string> = {};\n const userConfig: Record<string, any> = {};\n\n // Check main parser flags\n const flags = this.argParserInstance.flags || [];\n for (const flag of flags) {\n const flagName = flag['name'];\n\n // Skip help and mcp flags\n if (flagName === 'help' || flagName === 'mcp') continue;\n\n // Handle flags with environment variable mapping\n if ((flag as any)['env']) {\n const envVarName = (flag as any)['env'];\n envVars[envVarName] = `\\${user_config.${envVarName}}`;\n\n userConfig[envVarName] = {\n type: this.mapFlagTypeToUserConfigType(flag['type']),\n title: this.generateUserConfigTitle(envVarName),\n description: flag['description'] || `${envVarName} environment variable`,\n required: true, // Always require env vars in user_config for better UX\n sensitive: this.isSensitiveField(envVarName)\n };\n }\n }\n\n // 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 flagName = flag['name'];\n\n // Skip help and system flags\n if (flagName === 'help' || flagName.startsWith('s-')) continue;\n\n // Handle flags with environment variable mapping\n if ((flag as any)['env']) {\n const envVarName = (flag as any)['env'];\n\n // Only add if not already present (avoid duplicates)\n if (!envVars[envVarName]) {\n envVars[envVarName] = `\\${user_config.${envVarName}}`;\n\n userConfig[envVarName] = {\n type: this.mapFlagTypeToUserConfigType(flag['type']),\n title: this.generateUserConfigTitle(envVarName),\n description: flag['description'] || `${envVarName} environment variable`,\n required: true, // Always require env vars in user_config for better UX\n sensitive: this.isSensitiveField(envVarName)\n };\n }\n }\n }\n }\n }\n\n return { envVars, userConfig };\n }\n\n /**\n * Generates a user-friendly title for user config fields\n */\n private generateUserConfigTitle(flagName: string): string {\n return flagName\n .split(/[-_]/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n }\n\n /**\n * Checks if a field should be marked as sensitive in user config\n */\n private isSensitiveField(fieldName: string): boolean {\n const sensitivePatterns = [\n /key/i, /token/i, /secret/i, /password/i, /auth/i, /credential/i\n ];\n\n return sensitivePatterns.some(pattern => pattern.test(fieldName));\n }\n\n\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(buildDir: string, serverInfo?: any): 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 (customLogo.startsWith('http://') || customLogo.startsWith('https://')) {\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 filename from URL or use default\n const urlPath = new URL(customLogo).pathname;\n const urlFilename = path.basename(urlPath);\n if (urlFilename && urlFilename.includes('.')) {\n logoFilename = urlFilename;\n }\n console.log('✓ Downloaded logo from URL');\n } else {\n console.warn(`⚠ Failed to download logo: HTTP ${response.status}`);\n }\n } catch (error) {\n console.warn('⚠ Failed to download logo from URL:', error instanceof Error ? error.message : String(error));\n }\n } else {\n // Try to read logo from local file path\n const logoPath = path.resolve(customLogo);\n if (fs.existsSync(logoPath)) {\n logoBuffer = fs.readFileSync(logoPath);\n logoFilename = path.basename(logoPath);\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(currentDir, '..', 'docs', 'MCP', 'icons', 'logo_1_small.jpg');\n }\n\n // If still not found, try relative to process.cwd()\n if (!fs.existsSync(logoPath)) {\n logoPath = path.join(process.cwd(), 'docs', 'MCP', 'icons', 'logo_1_small.jpg');\n }\n\n if (fs.existsSync(logoPath)) {\n logoBuffer = fs.readFileSync(logoPath);\n logoFilename = 'logo.jpg'; // Use default filename\n console.log('✓ Added default logo to build folder');\n } else {\n console.warn('⚠ No logo found (custom or default), build folder will be created without icon');\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('⚠ Failed to add logo to build folder:', error instanceof Error ? error.message : String(error));\n return undefined;\n }\n }\n\n\n\n /**\n * Processes CLI source code to replace global console with MCP-compliant Logger\n */\n private processCliSourceForMcp(cliSource: string): string {\n // Add global console replacement at the top of the file\n const consoleReplacement = `import { createMcpLogger } from '@alcyone-labs/arg-parser';\n\n// Replace global console with MCP-compliant logger for DXT packages\nconst mcpLogger = createMcpLogger('[CLI]');\nconst originalConsole = globalThis.console;\nglobalThis.console = {\n ...originalConsole,\n log: (...args) => mcpLogger.info(...args),\n info: (...args) => mcpLogger.info(...args),\n warn: (...args) => mcpLogger.warn(...args),\n debug: (...args) => mcpLogger.debug(...args),\n // Keep error/trace/etc as-is since they use stderr (MCP-compliant)\n error: originalConsole.error,\n trace: originalConsole.trace,\n assert: originalConsole.assert,\n clear: originalConsole.clear,\n count: originalConsole.count,\n countReset: originalConsole.countReset,\n dir: originalConsole.dir,\n dirxml: originalConsole.dirxml,\n group: originalConsole.group,\n groupCollapsed: originalConsole.groupCollapsed,\n groupEnd: originalConsole.groupEnd,\n table: originalConsole.table,\n time: originalConsole.time,\n timeEnd: originalConsole.timeEnd,\n timeLog: originalConsole.timeLog,\n timeStamp: originalConsole.timeStamp,\n};\n\n`;\n\n // Add the console replacement at the beginning of the file\n // Find the last import statement to insert after it\n const lines = cliSource.split('\\n');\n let lastImportIndex = -1;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (line.startsWith('import ') && line.includes('from')) {\n lastImportIndex = i;\n } else if (line && !line.startsWith('//') && !line.startsWith('/*') && lastImportIndex >= 0) {\n // Found first non-import, non-comment line after imports\n break;\n }\n }\n\n if (lastImportIndex >= 0) {\n // Insert after the last import\n lines.splice(lastImportIndex + 1, 0, '', ...consoleReplacement.trim().split('\\n'));\n return lines.join('\\n');\n } else {\n // No imports found, add at the beginning\n return consoleReplacement + cliSource;\n }\n }\n\n /**\n * Adds the original CLI source to the build folder for handler execution\n */\n private addOriginalCliToFolder(buildDir: string): void {\n try {\n // Try to find the original CLI file\n // This is a heuristic approach - we look for common CLI file patterns\n const appCommandName = this.argParserInstance.getAppCommandName();\n const appName = this.argParserInstance.getAppName();\n\n const possibleCliFiles = [\n // Current working directory common patterns\n path.join(process.cwd(), 'index.js'),\n path.join(process.cwd(), 'index.mjs'),\n path.join(process.cwd(), 'cli.js'),\n path.join(process.cwd(), 'cli.mjs'),\n path.join(process.cwd(), 'main.js'),\n path.join(process.cwd(), 'main.mjs'),\n // Look for files with the app command name\n path.join(process.cwd(), `${appCommandName}.js`),\n path.join(process.cwd(), `${appCommandName}.mjs`),\n // Look for files with the app command name (sanitized)\n path.join(process.cwd(), `${appCommandName.replace(/[^a-zA-Z0-9-]/g, '-')}.js`),\n path.join(process.cwd(), `${appCommandName.replace(/[^a-zA-Z0-9-]/g, '-')}.mjs`),\n // Look for files with app name patterns\n path.join(process.cwd(), `${appName.toLowerCase().replace(/\\s+/g, '-')}-cli.js`),\n path.join(process.cwd(), `${appName.toLowerCase().replace(/\\s+/g, '-')}-cli.mjs`),\n // Look for files with first word of app name + cli\n path.join(process.cwd(), `${appName.split(' ')[0].toLowerCase()}-cli.js`),\n path.join(process.cwd(), `${appName.split(' ')[0].toLowerCase()}-cli.mjs`),\n ];\n\n let cliSourcePath = null;\n for (const filePath of possibleCliFiles) {\n if (fs.existsSync(filePath)) {\n cliSourcePath = filePath;\n break;\n }\n }\n\n if (cliSourcePath) {\n let cliSource = fs.readFileSync(cliSourcePath, 'utf8');\n\n // Fix import paths to use the installed package instead of relative paths\n cliSource = cliSource.replace(\n /import\\s*{\\s*([^}]+)\\s*}\\s*from\\s*['\"][^'\"]*\\/dist\\/index\\.mjs['\"];?/g,\n \"import { $1 } from '@alcyone-labs/arg-parser';\"\n );\n\n // Also handle default imports\n cliSource = cliSource.replace(\n /import\\s+(\\w+)\\s+from\\s*['\"][^'\"]*\\/dist\\/index\\.mjs['\"];?/g,\n \"import $1 from '@alcyone-labs/arg-parser';\"\n );\n\n // Replace console calls with MCP-compliant Logger calls\n cliSource = this.processCliSourceForMcp(cliSource);\n\n // Modify the CLI source to export the parser instance\n // Find the parser instance (usually assigned to 'cli' or similar variable)\n const parserVariableMatch = cliSource.match(/const\\s+(\\w+)\\s*=\\s*ArgParser\\.withMcp\\(/);\n if (parserVariableMatch) {\n const parserVariable = parserVariableMatch[1];\n\n // Simple approach: just add the export at the end\n // The original CLI execution logic will remain intact\n cliSource += `\n\n// Export the parser instance for MCP server use\nexport default ${parserVariable};\n\n// Add debugging for main execution\nconsole.error('[MCP-DEBUG] CLI source loaded, checking execution context...');\nconsole.error('[MCP-DEBUG] import.meta.url:', import.meta.url);\nconsole.error('[MCP-DEBUG] process.argv[1]:', process.argv[1]);\n\n// Ensure MCP server processes don't exit prematurely\nconsole.error('[MCP-DEBUG] Process argv:', process.argv);\nconsole.error('[MCP-DEBUG] Checking for serve command...');\n\nif (process.argv.includes('serve')) {\n console.error('[MCP-DEBUG] Detected serve command, setting up MCP server lifecycle...');\n\n // Override the original parse method to handle async MCP server\n const originalParse = ${parserVariable}.parse;\n ${parserVariable}.parse = async function(args) {\n console.error('[MCP-DEBUG] Starting parse with args:', args);\n\n try {\n const result = originalParse.call(this, args);\n console.error('[MCP-DEBUG] Parse result:', typeof result, result?.constructor?.name);\n\n // If result is a Promise (MCP server), await it and keep process alive\n if (result && typeof result.then === 'function') {\n console.error('[MCP-DEBUG] Detected Promise result, awaiting...');\n const mcpResult = await result;\n console.error('[MCP-DEBUG] MCP server started, keeping process alive...');\n\n // Keep the process alive indefinitely for MCP server\n const keepAlive = setInterval(() => {\n // Do nothing, just keep the event loop alive\n }, 30000);\n\n // Handle graceful shutdown\n process.on('SIGINT', () => {\n console.error('[MCP-INFO] Received SIGINT, shutting down gracefully...');\n clearInterval(keepAlive);\n process.exit(0);\n });\n\n process.on('SIGTERM', () => {\n console.error('[MCP-INFO] Received SIGTERM, shutting down gracefully...');\n clearInterval(keepAlive);\n process.exit(0);\n });\n\n return mcpResult;\n } else {\n console.error('[MCP-DEBUG] Non-Promise result, returning normally');\n return result;\n }\n } catch (error) {\n console.error('[MCP-ERROR] Error in parse:', error);\n throw error;\n }\n };\n}\n`;\n } else {\n console.warn('⚠ Could not find ArgParser instance in CLI source, MCP server may not work properly');\n }\n\n // Create server directory if it doesn't exist\n const serverDir = path.join(buildDir, 'server');\n if (!fs.existsSync(serverDir)) {\n fs.mkdirSync(serverDir, { recursive: true });\n }\n\n // Write the fixed CLI source to the build folder\n fs.writeFileSync(path.join(serverDir, 'original-cli.mjs'), cliSource);\n console.log(`✓ Added original CLI source to build folder: ${path.basename(cliSourcePath)}`);\n } else {\n console.warn('⚠ Original CLI source not found, handlers may not work properly');\n console.warn(' Searched for:', possibleCliFiles.map(f => path.basename(f)).join(', '));\n }\n } catch (error) {\n console.warn('⚠ Failed to add original CLI source:', error instanceof Error ? error.message : String(error));\n }\n }\n\n /**\n * Builds a complete DXT package using TSDown CLI for autonomous execution\n */\n private async buildDxtWithTsdown(entryPointFile: string): Promise<void> {\n try {\n console.log(chalk.cyan('🔧 Building DXT package with TSDown...'));\n\n // Get the directory containing the entry point\n const entryDir = path.dirname(entryPointFile);\n const entryFileName = path.basename(entryPointFile);\n\n console.log(chalk.gray(`Entry point: ${entryPointFile}`));\n console.log(chalk.gray(`Working directory: ${entryDir}`));\n\n // Copy .dxtignore template\n const dxtIgnorePath = this.getDxtIgnoreTemplatePath();\n if (fs.existsSync(dxtIgnorePath)) {\n fs.copyFileSync(dxtIgnorePath, path.join(entryDir, '.dxtignore'));\n }\n\n // Run TSDown build from the entry point directory\n const originalCwd = process.cwd();\n try {\n process.chdir(entryDir);\n\n // Dynamic import TSDown to handle optional dependency\n const { build } = await import('tsdown');\n\n console.log(chalk.gray(`Building with TSDown: ${entryFileName}`));\n\n // Use TSDown build method with configuration options directly\n const buildConfig = {\n entry: [entryFileName],\n outDir: \"dxt\",\n format: [\"esm\"],\n target: \"node22\",\n noExternal: () => true,\n minify: false,\n sourcemap: false,\n clean: false,\n silent: process.env['NO_SILENCE'] !== '1',\n copy: [\n // Copy logo from assets - try multiple possible locations\n ...((() => {\n const possibleLogoPaths = [\n // From built library assets\n path.join(path.dirname(new URL(import.meta.url).pathname), '..', 'assets', 'logo_1_small.jpg'),\n // From node_modules\n path.join(process.cwd(), 'node_modules', '@alcyone-labs', 'arg-parser', 'dist', 'assets', 'logo_1_small.jpg'),\n // From package root dist/assets (for local build)\n path.join(process.cwd(), 'dist', 'assets', 'logo_1_small.jpg'),\n // From library root (development)\n path.join(process.cwd(), '..', '..', '..', 'docs', 'MCP', 'icons', 'logo_1_small.jpg'),\n ];\n\n for (const logoPath of possibleLogoPaths) {\n if (fs.existsSync(logoPath)) {\n console.log(chalk.gray(`Found logo at: ${logoPath}`));\n return [{ from: logoPath, to: 'logo.jpg' }];\n }\n }\n console.log(chalk.yellow('⚠ Logo not found in any expected location'));\n return []; // No logo found\n })())\n ],\n external: [\n // Node.js built-ins only - everything else should be bundled for true autonomy\n \"stream\", \"fs\", \"path\", \"url\", \"util\", \"events\", \"child_process\",\n \"os\", \"tty\", \"process\", \"crypto\", \"http\", \"https\", \"net\", \"zlib\",\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(path.join('dxt', 'tsdown.config.dxt.ts'), configContent);\n console.log(chalk.gray('📝 Debug config written to dxt/tsdown.config.dxt.ts'));\n }\n\n await build(buildConfig as any);\n\n console.log(chalk.green('✅ TSDown bundling completed'));\n\n // Manual logo copy since TSDown's copy option doesn't work programmatically\n await this.copyLogoManually();\n\n // Copy manifest and logo to the dxt output directory\n await this.setupDxtPackageFiles(entryPointFile);\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(chalk.gray('To complete the process, run: npx @anthropic-ai/dxt pack dxt/'));\n // await this.packDxtPackage();\n\n } finally {\n process.chdir(originalCwd);\n }\n\n } catch (error) {\n throw new Error(`TSDown DXT build failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n /**\n * Bundles the original CLI using TSDown for autonomous execution (legacy method)\n */\n private async bundleOriginalCliWithTsdown(serverDir: string): Promise<string | null> {\n try {\n // Dynamic import TSDown to handle optional dependency\n const { build } = await import('tsdown');\n\n console.log(chalk.cyan('🔧 Bundling CLI with TSDown for autonomous execution...'));\n\n // Copy TSDown config to the server directory for use\n const configContent = this.getTsdownConfigContent();\n const localConfigPath = path.join(serverDir, 'tsdown.config.mjs');\n fs.writeFileSync(localConfigPath, configContent);\n\n // Set up entry point and output directory\n const originalCliPath = path.join(serverDir, 'original-cli.mjs');\n if (!fs.existsSync(originalCliPath)) {\n console.warn(chalk.yellow('⚠ Original CLI not found, skipping TSDown bundling'));\n return null;\n }\n\n // Configure TSDown build options for true autonomous bundling\n const buildOptions = {\n entry: ['original-cli.mjs'], // Use relative path since we'll chdir to serverDir\n outDir: '.', // Output to current directory (serverDir)\n format: \"esm\" as const,\n target: \"node22\",\n // Bundle EVERYTHING except Node.js built-ins for true autonomy\n noExternal: (id: string) => {\n // Bundle all other npm packages by default\n if (!id.startsWith('node:') && !this.isNodeBuiltin(id)) return true;\n\n return false; // Don't bundle Node.js built-ins\n },\n minify: false,\n sourcemap: false,\n clean: false,\n outExtension: () => ({ js: '.bundled.mjs' }),\n alias: {\n // Alias chalk to SimpleChalk for autonomous builds\n chalk: path.resolve(process.cwd(), \"node_modules/@alcyone-labs/arg-parser/dist/SimpleChalk.mjs\"),\n },\n external: [\n // Only Node.js built-ins - everything else gets bundled for true autonomy\n \"node:stream\", \"node:fs\", \"node:path\", \"node:url\", \"node:util\",\n \"node:events\", \"node:child_process\", \"node:os\", \"node:tty\",\n \"node:process\", \"node:crypto\", \"node:http\", \"node:https\",\n \"node:net\", \"node:zlib\", \"node:fs/promises\", \"node:timers\",\n \"stream\", \"fs\", \"path\", \"url\", \"util\", \"events\", \"child_process\",\n \"os\", \"tty\", \"process\", \"crypto\", \"http\", \"https\", \"net\", \"zlib\",\n \"fs/promises\", \"timers\", \"timers/promises\", \"perf_hooks\", \"async_hooks\",\n \"inspector\", \"v8\", \"vm\", \"assert\", \"constants\", \"module\", \"repl\",\n \"string_decoder\", \"punycode\", \"domain\", \"querystring\", \"readline\",\n \"worker_threads\", \"cluster\", \"dgram\", \"dns\", \"buffer\"\n ],\n platform: \"node\" as const,\n plugins: [],\n // Resolve local dependencies properly\n resolve: {\n alias: {\n // Handle local monorepo dependencies\n '@alcyone-labs/arg-parser': path.resolve(process.cwd()),\n }\n }\n };\n\n // Run TSDown build from the server directory to resolve dependencies correctly\n const originalCwd = process.cwd();\n try {\n process.chdir(serverDir);\n await build(buildOptions);\n } finally {\n process.chdir(originalCwd);\n }\n\n // TSDown creates files based on the entry name, check for various possible outputs\n const possibleBundledFiles = [\n 'original-cli.bundled.mjs',\n 'original-cli.js',\n 'original-cli.mjs'\n ];\n\n let bundledPath: string | null = null;\n let bundledFileName: string | null = null;\n\n for (const fileName of possibleBundledFiles) {\n const filePath = path.join(serverDir, fileName);\n if (fs.existsSync(filePath) && fileName !== 'original-cli.mjs') { // Don't use the original file\n bundledPath = filePath;\n bundledFileName = fileName;\n break;\n }\n }\n\n if (bundledPath && bundledFileName) {\n console.log(chalk.green(`✅ TSDown bundling completed successfully: ${bundledFileName}`));\n\n // Rename to our expected bundled name if needed\n const expectedBundledPath = path.join(serverDir, 'original-cli.bundled.mjs');\n if (bundledPath !== expectedBundledPath) {\n fs.renameSync(bundledPath, expectedBundledPath);\n bundledFileName = 'original-cli.bundled.mjs';\n }\n\n // Clean up the temporary config file\n try {\n fs.unlinkSync(localConfigPath);\n } catch (error) {\n // Ignore cleanup errors\n }\n\n // Make the bundled file executable\n try {\n fs.chmodSync(expectedBundledPath, 0o755);\n } catch (error) {\n console.warn('⚠ Could not set executable permission on bundled file:', error instanceof Error ? error.message : String(error));\n }\n\n return bundledFileName;\n } else {\n console.warn(chalk.yellow('⚠ TSDown bundling failed, bundled file not found'));\n return null;\n }\n\n } catch (error) {\n console.warn(chalk.yellow(`⚠ TSDown bundling failed: ${error instanceof Error ? error.message : String(error)}`));\n console.log(chalk.gray(' Falling back to non-bundled approach'));\n return null;\n }\n }\n\n /**\n * Checks if a module ID is a Node.js built-in\n */\n private isNodeBuiltin(id: string): boolean {\n const nodeBuiltins = [\n 'stream', 'fs', 'path', 'url', 'util', 'events', 'child_process',\n 'os', 'tty', 'process', 'crypto', 'http', 'https', 'net', 'zlib',\n 'fs/promises', 'timers', 'timers/promises', 'perf_hooks', 'async_hooks',\n 'inspector', 'v8', 'vm', 'assert', 'constants', 'module', 'repl',\n 'string_decoder', 'punycode', 'domain', 'querystring', 'readline',\n 'worker_threads', 'cluster', 'dgram', 'dns', 'buffer'\n ];\n\n return nodeBuiltins.includes(id) || id.startsWith('node:');\n }\n\n /**\n * Gets the TSDown configuration content as a string\n */\n private getTsdownConfigContent(): string {\n // Try to find the config in the assets directory first (relative to the built library)\n const currentDir = path.dirname(new URL(import.meta.url).pathname);\n const assetsConfigPath = path.join(currentDir, '..', 'assets', 'tsdown.dxt.config.ts');\n\n if (fs.existsSync(assetsConfigPath)) {\n try {\n const content = fs.readFileSync(assetsConfigPath, 'utf-8');\n // Convert TypeScript config to ES module format\n return content\n .replace('/// <reference types=\"tsdown\" />', '')\n .replace('import { defineConfig } from \"tsdown/config\";', 'import { defineConfig } from \"tsdown\";')\n .replace('export default defineConfig(', 'export default defineConfig(');\n } catch (error) {\n console.warn(chalk.yellow('⚠ Could not read TSDown config from assets, using fallback'));\n }\n }\n\n // Fallback to the root directory\n const rootConfigPath = path.join(process.cwd(), 'tsdown.dxt.config.ts');\n if (fs.existsSync(rootConfigPath)) {\n try {\n const content = fs.readFileSync(rootConfigPath, 'utf-8');\n return content\n .replace('/// <reference types=\"tsdown\" />', '')\n .replace('import { defineConfig } from \"tsdown/config\";', 'import { defineConfig } from \"tsdown\";');\n } catch (error) {\n console.warn(chalk.yellow('⚠ Could not read TSDown config from root, using default'));\n }\n }\n\n // Default configuration as fallback\n return `import { defineConfig } from \"tsdown\";\nimport path from \"path\";\n\nexport default defineConfig({\n outDir: \"server\",\n format: [\"esm\", \"module\"],\n target: \"node22\",\n noExternal: () => true,\n minify: false,\n sourcemap: false,\n clean: false,\n alias: {\n chalk: path.resolve(process.cwd(), \"node_modules/@alcyone-labs/arg-parser/dist/SimpleChalk.mjs\"),\n },\n external: [\n \"stream\", \"fs\", \"path\", \"url\", \"util\", \"events\", \"child_process\",\n \"os\", \"tty\", \"process\", \"crypto\", \"http\", \"https\", \"net\", \"zlib\",\n ],\n platform: \"node\",\n plugins: [],\n});`;\n }\n\n\n\n /**\n * Gets the path to the .dxtignore template file in assets\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(path.dirname(new URL(import.meta.url).pathname), '..', 'assets', '.dxtignore.template'),\n\n // 2. From node_modules/@alcyone-labs/arg-parser/dist/assets (when installed via npm)\n path.join(process.cwd(), 'node_modules', '@alcyone-labs', 'arg-parser', 'dist', 'assets', '.dxtignore.template'),\n\n // 3. From the root directory (development/local build)\n path.join(process.cwd(), '.dxtignore.template'),\n\n // 4. From the library root (when using local file dependency)\n path.join(process.cwd(), '..', '..', '..', '.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 dxt output directory\n */\n private async setupDxtPackageFiles(entryPointFile: string): Promise<void> {\n const dxtDir = './dxt';\n if (!fs.existsSync(dxtDir)) {\n throw new Error('TSDown output directory (dxt) not found');\n }\n\n // Read package.json for project information\n const packageJsonPath = path.join(process.cwd(), '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(chalk.yellow(`Warning: Could not generate unified tool list: ${error instanceof Error ? error.message : String(error)}`));\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: this.mapFlagTypeToJsonSchema(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) {\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 name: commandName || packageInfo.name || 'cli-tool',\n description: packageInfo.description || this.argParserInstance.getDescription() || 'CLI tool'\n }];\n }\n\n // Extract environment variables and user config from the ArgParser instance\n const envVars: Record<string, string> = {};\n const userConfig: Record<string, any> = {};\n\n // Get all flags from the main ArgParser to find environment variables\n const mainFlags = this.argParserInstance.flags;\n for (const flag of mainFlags) {\n const envVar = (flag as any).env || (flag as any).envVar;\n if (envVar) {\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 userConfig[envVar] = {\n type: \"string\",\n title: envVar.replace(/_/g, ' ').replace(/\\b\\w/g, (l: string) => l.toUpperCase()),\n description: flag.description || `${envVar} environment variable`,\n required: true, // Always require env vars in user_config for better UX\n sensitive: true // Assume env vars are sensitive\n };\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]) { // Only add if not already present\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 userConfig[envVar] = {\n type: \"string\",\n title: envVar.replace(/_/g, ' ').replace(/\\b\\w/g, (l: string) => l.toUpperCase()),\n description: flag.description || `${envVar} environment variable`,\n required: true, // Always require env vars in user_config for better UX\n sensitive: true // Assume env vars are sensitive\n };\n }\n }\n }\n }\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 const entryFileName = path.basename(entryPointFile);\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: serverInfo.description || packageInfo.description || 'MCP server generated by @alcyone-labs/arg-parser',\n author: serverInfo.author || {\n name: packageInfo.author?.name || packageInfo.author || '@alcyone-labs/arg-parser',\n ...(packageInfo.author?.email && { email: packageInfo.author.email }),\n url: packageInfo.author?.url || packageInfo.homepage || packageInfo.repository?.url || '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 ],\n env: envVars\n }\n },\n tools: tools,\n icon: \"logo.jpg\",\n ...(Object.keys(userConfig).length > 0 && { user_config: userConfig }),\n repository: {\n type: \"git\",\n url: packageInfo.repository?.url || 'https://github.com/alcyone-labs/arg-parser'\n },\n license: packageInfo.license || 'MIT'\n };\n\n fs.writeFileSync(path.join(dxtDir, 'manifest.json'), JSON.stringify(manifest, null, 2));\n\n console.log(chalk.gray('✅ DXT package files set up'));\n }\n\n /**\n * Maps ArgParser flag types to JSON Schema types\n */\n private mapFlagTypeToJsonSchema(flagType: any): string {\n if (typeof flagType === 'function') {\n const typeName = flagType.name.toLowerCase();\n switch (typeName) {\n case 'string': return 'string';\n case 'number': return 'number';\n case 'boolean': return 'boolean';\n case 'array': return 'array';\n default: return 'string';\n }\n }\n\n const typeStr = String(flagType).toLowerCase();\n switch (typeStr) {\n case 'string': return 'string';\n case 'number': return 'number';\n case 'boolean': return 'boolean';\n case 'array': return 'array';\n default: return 'string';\n }\n }\n\n /**\n * Manually copy logo since TSDown's copy option doesn't work programmatically\n */\n private async copyLogoManually(): Promise<void> {\n const dxtDir = './dxt';\n if (!fs.existsSync(dxtDir)) {\n console.warn(chalk.yellow('⚠ DXT directory not found, skipping logo copy'));\n return;\n }\n\n const possibleLogoPaths = [\n // From built library assets\n path.join(path.dirname(new URL(import.meta.url).pathname), '..', 'assets', 'logo_1_small.jpg'),\n // From node_modules\n path.join(process.cwd(), 'node_modules', '@alcyone-labs', 'arg-parser', 'dist', 'assets', 'logo_1_small.jpg'),\n // From package root dist/assets (for local build)\n path.join(process.cwd(), 'dist', 'assets', 'logo_1_small.jpg'),\n // From library root (development)\n path.join(process.cwd(), '..', '..', '..', 'docs', 'MCP', 'icons', 'logo_1_small.jpg'),\n ];\n\n for (const logoPath of possibleLogoPaths) {\n if (fs.existsSync(logoPath)) {\n try {\n fs.copyFileSync(logoPath, path.join(dxtDir, 'logo.jpg'));\n console.log(chalk.gray(`✅ Logo copied from: ${logoPath}`));\n return;\n } catch (error) {\n console.warn(chalk.yellow(`⚠ Failed to copy logo from ${logoPath}: ${error}`));\n }\n }\n }\n\n console.warn(chalk.yellow('⚠ Logo not found in any expected location'));\n }\n}\n","/**\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(config: Record<string, any>, flags: any[], parsedArgs: any): 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(`Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n \n generate(_config: Record<string, any>, flags: any[], parsedArgs: any): 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] = 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 ((value.startsWith('\"') && value.endsWith('\"')) || \n (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n value = value.slice(1, -1);\n }\n \n config[key] = value;\n }\n }\n }\n \n return config;\n }\n \n generate(_config: Record<string, any>, flags: any[], parsedArgs: any): 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 = 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 { JsonConfigPlugin, EnvConfigPlugin } 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(`Failed to enable TOML plugin: ${error instanceof Error ? error.message : String(error)}`);\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(`Failed to enable YAML plugin: ${error instanceof Error ? error.message : String(error)}`);\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((word: string) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\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(processArgs: string[], parserChain: any[]): boolean {\n const saveToEnvIndex = processArgs.findIndex(arg => arg === \"--s-save-to-env\");\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(filePath: string, _processArgs: string[], parserChain: any[]): 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(chalk.yellow(\"No parsed arguments available. Run the command first to generate configuration.\"));\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(chalk.gray(`Flags saved: ${Object.keys(parsedArgs.args).length}`));\n } catch (error) {\n console.error(chalk.red(`❌ Failed to save configuration: ${error instanceof Error ? error.message : String(error)}`));\n throw new Error(`Failed to save configuration: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n /**\n * Loads configuration from an environment file\n */\n public loadEnvFile(filePath: string, parserChain: any[]): 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(chalk.yellow(`Warning: Could not load config file ${filePath}: ${error instanceof Error ? error.message : String(error)}`));\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 ((value.startsWith('\"') && value.endsWith('\"')) || \n (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\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('YAML plugin not available, using simple parser. Install js-yaml and enable YAML plugin for full support.');\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 = (arrayValue.startsWith('\"') && arrayValue.endsWith('\"')) ||\n (arrayValue.startsWith(\"'\") && arrayValue.endsWith(\"'\"))\n ? arrayValue.slice(1, -1) : 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 ((value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\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(`Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`);\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('TOML plugin not available, using simple parser. Install smol-toml and enable TOML plugin for full support.');\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 ((value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\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(rawConfig: Record<string, any>, parserChain: any[]): 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(f => f['name'].toLowerCase() === key.toLowerCase());\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(chalk.yellow(`Warning: Could not convert config value for flag '${key}': ${error instanceof Error ? error.message : String(error)}`));\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(`Cannot convert '${value}' to number for flag '${flag['name']}'`);\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 (lower === 'true' || lower === '1' || lower === 'yes' || lower === 'on') return true;\n if (lower === 'false' || lower === '0' || lower === 'no' || lower === 'off') return false;\n }\n throw new Error(`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(`Cannot convert '${value}' to table for flag '${flag['name']}'`);\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(`Custom type conversion failed for flag '${flag['name']}': ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n return String(value);\n }\n }\n\n /**\n * Merges environment configuration with command line arguments\n */\n public mergeEnvConfigWithArgs(envConfig: Record<string, any>, processArgs: string[]): 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(flags: ProcessedFlag[], parsedArgs: TParsedArgs<any>): 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(flags: ProcessedFlag[], parsedArgs: TParsedArgs<any>): 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(` - ${typeof item === 'string' && item.includes(' ') ? `\"${item}\"` : item}`);\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(flags: ProcessedFlag[], parsedArgs: TParsedArgs<any>): 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(flags: ProcessedFlag[], parsedArgs: TParsedArgs<any>): 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.map(item =>\n typeof item === 'string' ? `\"${item}\"` : String(item)\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","/**\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(uri: string): { 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(`Invalid URI template '${config.uriTemplate}': ${error instanceof Error ? error.message : String(error)}`);\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 = (basePath: string = \"\"): 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('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 uri: uri.href,\n text: content,\n mimeType: \"text/plain\"\n }]\n };\n } catch (error) {\n throw new Error(`Failed to read file '${fullPath}': ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n});\n\n/**\n * Helper function to create JSON data resource\n */\nexport const createJsonResource = (name: string, data: any): 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 uri: uri.href,\n text: JSON.stringify(data, null, 2),\n mimeType: \"application/json\"\n }]\n })\n});\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 = (args: any) => 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(`Invalid arguments for prompt '${name}': ${error.message}`);\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.enum([\"security\", \"performance\", \"style\", \"bugs\", \"general\"]).optional().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 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 * 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.enum([\"brief\", \"medium\", \"detailed\"]).optional().describe(\"Summary length\"),\n style: z.enum([\"bullet-points\", \"paragraph\", \"executive\"]).optional().describe(\"Summary style\")\n }),\n handler: ({ text, length, style }) => {\n const lengthInstruction = length === \"brief\" ? \"in 1-2 sentences\" : \n length === \"detailed\" ? \"in detail with key points\" : \n \"concisely\";\n \n const styleInstruction = style === \"bullet-points\" ? \"as bullet points\" :\n style === \"executive\" ? \"as an executive summary\" :\n \"in paragraph form\";\n\n return {\n description: `Summarization prompt for ${length || 'medium'} ${style || 'paragraph'} summary`,\n messages: [{\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 * 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.string().optional().describe(\"Source language (auto-detect if not specified)\"),\n tone: z.enum([\"formal\", \"casual\", \"professional\"]).optional().describe(\"Translation tone\")\n }),\n handler: ({ text, targetLanguage, sourceLanguage, tone }) => {\n const sourceInstruction = sourceLanguage ? `from ${sourceLanguage}` : \"(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 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 * 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.enum([\"jsdoc\", \"sphinx\", \"markdown\", \"inline\"]).optional().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 ? \" Include usage examples.\" : \"\";\n\n return {\n description: `Documentation prompt for ${language || 'code'}${styleInstruction}`,\n messages: [{\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 * 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(type: McpChangeType, action: 'added' | 'removed' | 'updated', entityName?: string): 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(client: McpClientSubscription, type: McpChangeType): void {\n try {\n // Send MCP notification using the connection\n if (client.connection && typeof client.connection.sendNotification === 'function') {\n client.connection.sendNotification(`notifications/${type}/list_changed`, {});\n }\n } catch (error) {\n console.error(`Error sending notification to client ${client.clientId}:`, error);\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): (type: McpChangeType, action: 'added' | 'removed' | 'updated', entityName?: string) => void {\n const pending = new Map<string, { type: McpChangeType; action: 'added' | 'removed' | 'updated'; entityName?: string }>();\n let timeoutId: NodeJS.Timeout | null = null;\n\n return (type: McpChangeType, action: 'added' | 'removed' | 'updated', entityName?: string) => {\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(prefix: string = '[MCP]'): McpChangeListener {\n return (event: McpChangeEvent) => {\n const entityInfo = event.entityName ? ` (${event.entityName})` : '';\n console.log(`${prefix} ${event.type} ${event.action}${entityInfo} at ${event.timestamp.toISOString()}`);\n };\n}\n\n/**\n * Default global notifications manager instance\n */\nexport const globalNotificationsManager = new McpNotificationsManager();\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport chalk from \"@alcyone-labs/simple-chalk\";\nimport { anyOf, char, createRegExp, oneOrMore } from \"magic-regexp\";\n\n\nimport { FlagManager } from \"./FlagManager\";\nimport { DxtGenerator } from \"../dxt/DxtGenerator\";\nimport { ConfigurationManager } from \"../config/ConfigurationManager\";\nimport type {\n IFlag,\n IHandlerContext,\n ISubCommand,\n ProcessedFlag,\n TParsedArgs,\n ParseResult,\n} from \"./types\";\nimport { McpResourcesManager, McpResourceConfig } from \"../mcp/mcp-resources.js\";\nimport { McpPromptsManager, McpPromptConfig } from \"../mcp/mcp-prompts.js\";\nimport { McpNotificationsManager, McpChangeType } from \"../mcp/mcp-notifications.js\";\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\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 // MCP-related managers\n #mcpResourcesManager: McpResourcesManager = new McpResourcesManager();\n #mcpPromptsManager: McpPromptsManager = new McpPromptsManager();\n #mcpNotificationsManager: McpNotificationsManager = 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(exitCode: number, message?: string, type?: ParseResult['type'], data?: any): 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 (this.#autoExit && typeof process === \"object\" && typeof process.exit === \"function\") {\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 _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 value = (flag[\"type\"] as Function)(value as string);\n } else if (typeof flag[\"type\"] === \"object\") {\n value = new (flag[\"type\"] as ObjectConstructor)(value);\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 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 (!subCommandConfig || !(subCommandConfig.parser instanceof ArgParserBase)) {\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(chalk.red(\"Error: --s-with-env requires a file path argument\"));\n return this._handleExit(1, \"--s-with-env requires a file path argument\", \"error\");\n }\n\n const filePath = processArgs[withEnvIndex + 1];\n if (!filePath || filePath.startsWith(\"-\")) {\n console.error(chalk.red(\"Error: --s-with-env requires a file path argument\"));\n return this._handleExit(1, \"--s-with-env requires a file path argument\", \"error\");\n }\n\n try {\n // Identify the final parser and parser chain for loading configuration\n const { finalParser: identifiedFinalParser, parserChain: identifiedParserChain } =\n this.#_identifyCommandChainAndParsers(processArgs, this, [], [this]);\n\n const envConfigArgs = identifiedFinalParser.#configurationManager.loadEnvFile(filePath, identifiedParserChain);\n if (envConfigArgs) {\n // Merge environment configuration with process args\n // CLI args take precedence over file configuration\n const mergedArgs = identifiedFinalParser.#configurationManager.mergeEnvConfigWithArgs(envConfigArgs, processArgs);\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(arg => arg === \"--s-with-env\");\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(chalk.red(`Error loading environment file: ${error instanceof Error ? error.message : String(error)}`));\n return this._handleExit(1, `Error loading environment file: ${error instanceof Error ? error.message : String(error)}`, \"error\");\n }\n }\n\n const { finalParser: identifiedFinalParser } =\n this.#_identifyCommandChainAndParsers(processArgs, this, [], [this]);\n\n const buildDxtIndex = processArgs.findIndex(arg => (arg ?? \"\").toLowerCase() === \"--s-build-dxt\");\n if (buildDxtIndex !== -1) {\n const dxtResult = await this.#_handleBuildDxtFlag(processArgs, buildDxtIndex);\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 const mcpServeIndex = processArgs.findIndex(arg => arg === \"--s-mcp-serve\");\n if (mcpServeIndex !== -1) {\n const mcpServeResult = await this.#_handleMcpServeFlag(processArgs, mcpServeIndex);\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 } = 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 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 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\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 (immediateChild.#inheritParentFlags && immediateChild.#flagManager.hasFlag(flag[\"name\"])) {\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\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) ? inputArgs.join(' ') : inputArgs;\n\n console.log(`[--s-enable-fuzzy] handler() skipped for command chain: ${commandChain.join(' ') || '(root)'}`);\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 (handlerResult && typeof handlerResult === 'object' && !Array.isArray(handlerResult)) {\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 async parse(\n processArgs: string[],\n options?: IParseOptions,\n ): Promise<TParsedArgsWithRouting<any> | ParseResult> {\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 = 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(processArgs, options);\n if (globalCheckResult !== false) {\n // If it's a ParseResult, return it; otherwise return empty object for backward compatibility\n return globalCheckResult === true ? {} as TParsedArgsWithRouting<any> : 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(processArgs, identifiedParserChain);\n if (saveToEnvResult !== false) {\n return saveToEnvResult === true ? {} as TParsedArgsWithRouting<any> : saveToEnvResult;\n }\n\n const { finalArgs, handlerToExecute } = 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 (handlerResult && typeof handlerResult === 'object' && !Array.isArray(handlerResult)) {\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 ? {} as TParsedArgsWithRouting<any> : 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 _parseRecursive(\n argsToParse: string[],\n currentParser: ArgParserBase,\n accumulatedParentArgs: TParsedArgs<any>,\n commandChainSoFar: string[],\n options?: IParseOptions,\n parentParser?: ArgParserBase,\n ): 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 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 (!subCommandConfig || !(subCommandConfig.parser instanceof ArgParserBase)) {\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 this._parseRecursive(\n nextArgs,\n nextParser,\n combinedArgsForNextLevel,\n nextCommandChain,\n options,\n currentParser,\n );\n }\n\n #parseFlags(\n args: string[],\n options?: IParseOptions,\n ): {\n parsedArgs: TParsedArgs<ProcessedFlag[]>;\n firstUnconsumedIndex: number;\n } {\n const flags = this.#flagManager.flags;\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 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 this._addToOutput(flagToCheck, true, output, options);\n } else if (nextValueExists && !nextValueIsFlag) {\n this._addToOutput(flagToCheck, nextValue, output, options);\n consumedIndices.add(nextIndex);\n } else if (flagToCheck[\"type\"] === Boolean) {\n 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 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 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 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 (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 (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\n\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('resources', 'added', config.name);\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(listener: (event: { type: McpChangeType; action: string; entityName?: string }) => void): this {\n this.#mcpNotificationsManager.addGlobalListener(listener);\n return this;\n }\n\n /**\n * Remove a change listener for MCP entities\n */\n offMcpChange(listener: (event: { type: McpChangeType; action: string; entityName?: string }) => void): 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(processArgs: string[], parserChain: ArgParserBase[]): boolean | ParseResult {\n try {\n const result = this.#configurationManager.handleSaveToEnvFlag(processArgs, parserChain);\n if (result) {\n // Configuration was saved successfully\n return this._handleExit(0, \"Configuration saved successfully\", \"success\");\n }\n return result;\n } catch (error) {\n // Configuration save failed\n return this._handleExit(1, error instanceof Error ? error.message : String(error), \"error\");\n }\n }\n\n /**\n * Handles the --s-build-dxt system flag to generate DXT packages for MCP servers\n */\n async #_handleBuildDxtFlag(processArgs: string[], buildDxtIndex: number): Promise<boolean | ParseResult> {\n return await this.#dxtGenerator.handleBuildDxtFlag(processArgs, buildDxtIndex);\n }\n\n /**\n * Handles the --s-mcp-serve system flag to start all MCP servers\n */\n async #_handleMcpServeFlag(processArgs: string[], _mcpServeIndex: number): Promise<boolean | ParseResult> {\n // Setup MCP logger with console hijacking\n let mcpLogger: any;\n try {\n // Try to import simple-mcp-logger if available\n const mcpLoggerModule = await (Function('return import(\"@alcyone-labs/simple-mcp-logger\")')());\n mcpLogger = mcpLoggerModule.createMcpLogger(\"MCP Serve\");\n // Hijack console globally to prevent STDOUT contamination in MCP mode\n (globalThis as any).console = mcpLogger;\n } catch {\n // Fallback if simple-mcp-logger is not available\n mcpLogger = {\n mcpError: (message: string) => console.error(`[MCP Serve] ${message}`)\n };\n }\n\n try {\n mcpLogger.mcpError(\"Starting --s-mcp-serve system flag handler - console hijacked for MCP safety\");\n\n // Get MCP server configuration - prefer withMcp() config, fallback to addMcpSubCommand() config\n const mcpServerConfig = this.#_getMcpServerConfiguration();\n\n if (!mcpServerConfig) {\n mcpLogger.mcpError(\"No MCP server configuration found. Use withMcp() or addMcpSubCommand() to configure MCP server.\");\n return this._handleExit(1, \"No MCP server configuration found\", \"error\");\n }\n\n mcpLogger.mcpError(`Found MCP server configuration: ${mcpServerConfig.serverInfo?.name || 'unnamed'}`);\n\n // Parse transport options from command line arguments\n const transportOptions = this.#_parseMcpTransportOptions(processArgs);\n mcpLogger.mcpError(`Transport options: ${JSON.stringify(transportOptions)}`);\n\n // Start the unified MCP server\n try {\n mcpLogger.mcpError(\"Starting unified MCP server with all tools\");\n await this.#_startUnifiedMcpServer(mcpServerConfig, transportOptions);\n mcpLogger.mcpError(\"Successfully started unified MCP server\");\n } catch (error) {\n mcpLogger.mcpError(`Failed to start unified MCP server: ${error instanceof Error ? error.message : String(error)}`);\n return this._handleExit(1, `Failed to start MCP server: ${error instanceof Error ? error.message : String(error)}`, \"error\");\n }\n\n mcpLogger.mcpError(\"MCP server started successfully, keeping process alive\");\n\n // Keep the process alive indefinitely\n return new Promise(() => {});\n\n } catch (error) {\n mcpLogger.mcpError(`Error in --s-mcp-serve handler: ${error instanceof Error ? error.message : String(error)}`);\n if (error instanceof Error && error.stack) {\n mcpLogger.mcpError(`Stack trace: ${error.stack}`);\n }\n return this._handleExit(1, `MCP serve failed: ${error instanceof Error ? error.message : String(error)}`, \"error\");\n }\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 }\n ): Promise<void> {\n // We need to cast this to ArgParser to access MCP methods\n const mcpParser = this as any;\n\n if (!mcpParser.createMcpServer || !mcpParser.startMcpServerWithTransport || !mcpParser.startMcpServerWithMultipleTransports) {\n throw new Error(\"MCP server methods not available. This parser may not support MCP functionality.\");\n }\n\n const { serverInfo, toolOptions, defaultTransports, defaultTransport } = mcpServerConfig;\n\n // Determine which transport configuration to use\n if (transportOptions.transports) {\n // Multiple transports specified via CLI\n try {\n const transportConfigs = JSON.parse(transportOptions.transports);\n await mcpParser.startMcpServerWithMultipleTransports(serverInfo, transportConfigs, toolOptions);\n } catch (error: any) {\n throw new Error(`Error parsing transports configuration: ${error.message}. Expected JSON format: '[{\"type\":\"stdio\"},{\"type\":\"sse\",\"port\":3001}]'`);\n }\n } else if (defaultTransports && defaultTransports.length > 0) {\n // Use preset multiple transports configuration\n await mcpParser.startMcpServerWithMultipleTransports(serverInfo, defaultTransports, toolOptions);\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 );\n } else {\n // Single transport mode from CLI flags or defaults\n const transportType = (transportOptions.transportType as \"stdio\" | \"sse\" | \"streamable-http\") || \"stdio\";\n const finalTransportOptions = {\n port: transportOptions.port,\n host: transportOptions.host || \"localhost\",\n path: transportOptions.path || \"/mcp\",\n };\n\n await mcpParser.startMcpServerWithTransport(serverInfo, transportType, finalTransportOptions, toolOptions);\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 = (subCommand.parser as ArgParserBase).#_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 } {\n const options: {\n transportType?: string;\n port?: number;\n host?: string;\n path?: string;\n transports?: string;\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 // 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(`Warning: ${arg} is deprecated. Use --s-mcp-${arg.slice(2)} instead.`);\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 (arg === \"--transports\" && nextArg && !nextArg.startsWith(\"-\")) {\n options.transports = nextArg;\n i++;\n }\n break;\n }\n }\n\n return options;\n }\n\n\n\n\n\n\n\n\n\n\n\n}\n","import { z } from \"zod\";\nimport type { ZodRawShape, ZodTypeAny } from \"zod\";\nimport { ArgParserBase } from \"../core/ArgParserBase\";\nimport type { IFlag, IHandlerContext, ProcessedFlag, TParsedArgs } from \"../core/types\";\nimport { createMcpLogger } from \"@alcyone-labs/simple-mcp-logger\";\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}\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 return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `Error: ${errorMessage}`\n }\n ]\n };\n}\n\n/**\n * Convert ArgParser flag type to JSON Schema type\n */\nfunction mapFlagTypeToJsonSchemaType(flagType: string): string {\n switch (flagType) {\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 default:\n return 'string'; // Default fallback\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 const property: any = {\n type: mapFlagTypeToJsonSchemaType(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 }\n\n // Handle array items\n if (flag.type === 'array' && (flag as any).itemType) {\n property.items = {\n type: mapFlagTypeToJsonSchemaType((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(flags: readonly (IFlag | ProcessedFlag)[]): {\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(flags: readonly (IFlag | ProcessedFlag)[]): ZodTypeAny {\n const zodProperties: ZodRawShape = {};\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(mcpResponse: any): SimplifiedToolResponse {\n // Handle responses that are already in simplified format\n if (typeof mcpResponse === 'object' && mcpResponse !== null && 'success' in mcpResponse) {\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 let zodSchema: ZodTypeAny;\n const flagTypeOpt = flag[\"type\"];\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(`Flag '${flag[\"name\"]}' has an unknown type '${typeName}'. Defaulting to z.string().`);\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 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\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\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\n toolName = toolName.replace(/[^a-zA-Z0-9_-]/g, \"_\");\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: ZodRawShape = {};\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 if (options?.outputSchemaMap && options.outputSchemaMap[toolName]) {\n const customSchema = options.outputSchemaMap[toolName];\n outputSchema =\n typeof customSchema === \"object\" && !customSchema._def\n ? z.object(customSchema as unknown as ZodRawShape)\n : customSchema;\n } else if (options?.defaultOutputSchema) {\n outputSchema = options.defaultOutputSchema;\n }\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 // 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 ? (helpParser as any).getSubCommand(part) : undefined;\n if (subCmd && subCmd.parser) {\n helpParser = subCmd.parser;\n } else {\n break;\n }\n }\n\n const helpText = (helpParser as any).helpText ? (helpParser as any).helpText() : \"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 // ArgParser instance (rootParser) should be configured with handleErrors: false in its constructor.\n const parseResult = (await rootParser.parse(\n argv,\n )) as IParseExecutionResult;\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 // 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(error instanceof Error ? error : new Error(String(error)));\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 = 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 handlerContext: IHandlerContext<any, any> = {\n args: cleanArgs,\n commandChain: chain,\n parser: finalParser,\n parentArgs: resolvedParentArgs,\n isMcp: true,\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 (handlerResponse && typeof handlerResponse === 'object') {\n // If handler already returned MCP format with content field, use it\n if (handlerResponse.content && Array.isArray(handlerResponse.content)) {\n return handlerResponse;\n } else {\n // Handler returned plain data, wrap it in MCP format\n if (options?.outputSchemaMap?.[toolName]) {\n // Return structured data with both content and structuredContent when custom output schema is defined\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(handlerResponse, null, 2)\n }\n ],\n structuredContent: handlerResponse\n };\n } else {\n return createMcpSuccessResponse(handlerResponse);\n }\n }\n }\n\n // For non-object responses, wrap in MCP format\n const defaultResponse = handlerResponse || { success: true };\n if (options?.outputSchemaMap?.[toolName] && typeof defaultResponse === 'object') {\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(defaultResponse, null, 2)\n }\n ],\n structuredContent: defaultResponse\n };\n }\n return createMcpSuccessResponse(defaultResponse);\n } catch (e: any) {\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 // 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(mcpInputArgs: Record<string, any>): 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","import { ArgParserBase, type IArgParserParams } from \"./ArgParserBase\";\nimport {\n generateMcpToolsFromArgParser,\n convertFlagsToZodSchema,\n createMcpSuccessResponse,\n createMcpErrorResponse,\n} from \"../mcp/mcp-integration\";\nimport type { GenerateMcpToolsOptions, IMcpToolStructure } from \"../mcp/mcp-integration\";\nimport type { IHandlerContext, ParseResult, IFlag } from \"./types\";\nimport { createMcpLogger } from \"@alcyone-labs/simple-mcp-logger\";\n\n/**\n * Configuration for a single MCP transport\n */\nexport type McpTransportConfig = {\n type: \"stdio\" | \"sse\" | \"streamable-http\";\n port?: number;\n host?: string;\n path?: string;\n sessionIdGenerator?: () => string;\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\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 /** Logo/icon for DXT manifest - can be a local file path or URL */\n logo?: string;\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 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\n/**\n * Combined options for withMcp() method\n */\nexport type WithMcpOptions<THandlerReturn = any> = IArgParserParams<THandlerReturn> & {\n /** MCP-specific server configuration */\n mcp?: McpServerOptions;\n};\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 /** Tool name (must be unique within the server) */\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 /** Tool name (CLI subcommand name & MCP tool name) */\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};\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\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 /**\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 * 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 if (this._tools.has(toolConfig.name)) {\n throw new Error(`Tool with name '${toolConfig.name}' already exists`);\n }\n\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 if (!Array.isArray(toolConfig.flags)) {\n throw new Error('Tool flags must be an array');\n }\n\n // Store the tool configuration\n this._tools.set(toolConfig.name, toolConfig);\n\n // Register the tool as a CLI subcommand\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 appName: `${this.getAppName()} ${toolConfig.name}`,\n description: toolConfig.description || `Execute ${toolConfig.name} tool`,\n handler: toolConfig.handler,\n }, toolConfig.flags);\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 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 if (this._mcpTools.has(toolConfig.name)) {\n throw new Error(`MCP tool with name '${toolConfig.name}' already exists`);\n }\n\n this._mcpTools.set(toolConfig.name, toolConfig);\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 = [...unifiedToolNames, ...legacyMcpToolNames, ...cliToolNames];\n const duplicates = allToolNames.filter((name, index) => allToolNames.indexOf(name) !== index);\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(`Unified tool '${toolName}' is not registered as CLI subcommand`);\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(toolName: string, args: any = {}): 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 // Generate tools from CLI structure (legacy approach)\n const cliTools = generateMcpToolsFromArgParser(this, options);\n\n // Convert unified tools to MCP tool structures\n const unifiedTools: IMcpToolStructure[] = Array.from(this._tools.values()).map(toolConfig => ({\n name: toolConfig.name,\n description: toolConfig.description || `Executes the ${toolConfig.name} tool.`,\n inputSchema: convertFlagsToZodSchema(toolConfig.flags),\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('return import(\"@alcyone-labs/simple-mcp-logger\")')());\n mcpLogger = mcpLoggerModule.createMcpLogger(`MCP-Tool-${toolConfig.name}`);\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[]) => originalConsole.error(`[${toolConfig.name}]`, ...args),\n info: (...args: any[]) => originalConsole.error(`[${toolConfig.name}]`, ...args),\n warn: (...args: any[]) => originalConsole.error(`[${toolConfig.name}]`, ...args),\n error: (...args: any[]) => originalConsole.error(`[${toolConfig.name}]`, ...args),\n debug: (...args: any[]) => 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(`[MCP Tool] '${toolConfig.name}' executed successfully in ${executionTime}ms`);\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\n return result;\n } else {\n // Wrap in standard MCP response format\n return createMcpSuccessResponse(result);\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 // Convert legacy MCP tools to MCP tool structures (deprecated)\n const legacyMcpTools: IMcpToolStructure[] = Array.from(this._mcpTools.values()).map(toolConfig => ({\n name: toolConfig.name,\n description: toolConfig.description || `Executes the ${toolConfig.name} tool.`,\n inputSchema: toolConfig.inputSchema || { type: \"object\", properties: {} },\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(`[MCP Tool] '${toolConfig.name}' (legacy) executed successfully in ${executionTime}ms`);\n }\n\n if (result && typeof result === 'object' && 'content' in result) {\n return result;\n } else {\n return createMcpSuccessResponse(result);\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) ? 'unified' :\n legacyMcpTools.find(t => t.name === tool.name) ? 'legacy MCP' : 'CLI-generated';\n console.warn(`[MCP Tool Registration] ${toolSource} tool '${tool.name}' overrides other tool definitions`);\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 * @returns Configured MCP server instance\n */\n public async createMcpServer(\n serverInfo: DxtServerInfo,\n toolOptions?: GenerateMcpToolsOptions,\n ): Promise<any> {\n const logger = createMcpLogger(\"MCP Server Creation\");\n\n try {\n logger.mcpError(`Creating MCP server: ${serverInfo.name} v${serverInfo.version}`);\n\n // Dynamic import to avoid circular dependencies and support ES modules\n const { McpServer } = await import(\"@modelcontextprotocol/sdk/server/mcp.js\");\n logger.mcpError(\"Successfully imported McpServer from SDK\");\n\n const server = new McpServer({\n id: serverInfo.name,\n version: serverInfo.version,\n name: serverInfo.name,\n description: serverInfo.description,\n });\n\n logger.mcpError(\"Successfully created McpServer instance\");\n\n // Note: We now register actual resources and prompts below, so no need for internal handlers\n logger.mcpError(\"MCP server will register actual resources and prompts for full capability support\");\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(`After deduplication: ${uniqueTools.length} unique tools`);\n\n // Register tools\n uniqueTools.forEach((tool) => {\n logger.mcpError(`Registering tool: ${tool.name}`);\n const toolConfig: any = {\n description: tool.description || \"No description provided.\",\n inputSchema: (tool.inputSchema as any).shape || tool.inputSchema,\n };\n\n // WORKAROUND: Don't register output schema with MCP SDK due to bug\n // The output schema will be handled in our response processing instead\n // if (tool.outputSchema) {\n // toolConfig.outputSchema = (tool.outputSchema as any).shape || tool.outputSchema;\n // }\n\n server.registerTool(tool.name, toolConfig, tool.execute);\n });\n\n logger.mcpError(\"Successfully registered all tools with MCP server\");\n\n // TODO: Register resources (temporarily disabled due to MCP SDK type compatibility issues)\n const resources = this.getMcpResources();\n logger.mcpError(`Found ${resources.length} MCP resources (registration temporarily disabled)`);\n\n // Note: Resource registration will be implemented in a future update once MCP SDK types are resolved\n if (resources.length > 0) {\n logger.mcpError(\"Resource registration is temporarily disabled due to MCP SDK type compatibility\");\n logger.mcpError(\"Resources are stored and will be available once SDK integration is completed\");\n }\n\n logger.mcpError(\"Resource registration step completed (temporarily disabled)\");\n\n // TODO: Register prompts (temporarily disabled due to MCP SDK type compatibility issues)\n const prompts = this.getMcpPrompts();\n logger.mcpError(`Found ${prompts.length} MCP prompts (registration temporarily disabled)`);\n\n // Note: Prompt registration will be implemented in a future update once MCP SDK types are resolved\n if (prompts.length > 0) {\n logger.mcpError(\"Prompt registration is temporarily disabled due to MCP SDK type compatibility\");\n logger.mcpError(\"Prompts are stored and will be available once SDK integration is completed\");\n }\n\n logger.mcpError(\"Prompt registration step completed (temporarily disabled)\");\n\n // Set up change notifications\n this.setupMcpChangeNotifications(server);\n logger.mcpError(\"Successfully set up MCP change notifications\");\n\n return server;\n\n } catch (error) {\n logger.mcpError(`Error creating MCP server: ${error instanceof Error ? error.message : String(error)}`);\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(`MCP ${event.type} ${event.action}: ${event.entityName || 'unknown'}`);\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(serverInfo, \"stdio\", {}, toolOptions);\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 }>,\n toolOptions?: GenerateMcpToolsOptions,\n ): Promise<void> {\n const server = await this.createMcpServer(serverInfo, toolOptions);\n const startPromises: Promise<void>[] = [];\n\n for (const transportConfig of transports) {\n const promise = this.#_startSingleTransport(server, serverInfo, transportConfig);\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 } = {},\n toolOptions?: GenerateMcpToolsOptions,\n ): Promise<void> {\n const server = await this.createMcpServer(serverInfo, toolOptions);\n await this.#_startSingleTransport(server, serverInfo, {\n type: transportType,\n ...transportOptions,\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 },\n ): Promise<void> {\n const logger = createMcpLogger(\"MCP Transport\");\n\n try {\n logger.mcpError(`Starting ${transportConfig.type} transport for server: ${serverInfo.name}`);\n\n switch (transportConfig.type) {\n case \"stdio\": {\n logger.mcpError(\"Importing StdioServerTransport from SDK\");\n const { StdioServerTransport } = await import(\"@modelcontextprotocol/sdk/server/stdio.js\");\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(\"@modelcontextprotocol/sdk/server/sse.js\");\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(`[${serverInfo.name}] MCP Server listening on http://${transportConfig.host || \"localhost\"}:${port}${path} (SSE)`);\n resolve();\n });\n });\n break;\n }\n\n case \"streamable-http\": {\n const { StreamableHTTPServerTransport } = await import(\"@modelcontextprotocol/sdk/server/streamableHttp.js\");\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 || \"/mcp\";\n\n const transports: { [sessionId: string]: any } = {};\n\n app.all(path, async (req: any, res: any) => {\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: transportConfig.sessionIdGenerator || (() => Math.random().toString(36).substring(7)),\n onsessioninitialized: (sessionId: string) => {\n transports[sessionId] = transport;\n }\n });\n\n transport.onclose = () => {\n if (transport.sessionId) {\n delete transports[transport.sessionId];\n }\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(`Unsupported transport type: ${transportConfig.type}`);\n throw new Error(`Unsupported transport type: ${transportConfig.type}`);\n }\n\n logger.mcpError(`Successfully started ${transportConfig.type} transport`);\n\n } catch (error) {\n logger.mcpError(`Error starting ${transportConfig.type} transport: ${error instanceof Error ? error.message : String(error)}`);\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 // Call the base class parse method directly to avoid any override issues\n let result = await ArgParserBase.prototype.parse.call(this, processArgs, options);\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 (result && typeof result === 'object' && 'success' in result && 'exitCode' in result) {\n const parseResult = result as ParseResult;\n if (parseResult.shouldExit && typeof process === \"object\" && typeof process.exit === \"function\") {\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\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 (handlerResult && typeof handlerResult === 'object' && !Array.isArray(handlerResult)) {\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?: (McpSubCommandOptions & { toolOptions?: GenerateMcpToolsOptions }) | 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 & { toolOptions?: GenerateMcpToolsOptions };\n\n if (optionsOrToolOptions &&\n (typeof optionsOrToolOptions === 'object') &&\n ('includeSubCommands' in optionsOrToolOptions || 'toolNamePrefix' in optionsOrToolOptions || 'toolNameSuffix' in optionsOrToolOptions)) {\n // This is the old GenerateMcpToolsOptions format\n options = { toolOptions: optionsOrToolOptions as GenerateMcpToolsOptions };\n } else {\n // This is the new options format or undefined\n options = (optionsOrToolOptions as McpSubCommandOptions & { toolOptions?: GenerateMcpToolsOptions }) || {};\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 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(\"MCP handler started - console hijacked for MCP safety\");\n logger.mcpError(`Handler context args: ${JSON.stringify(ctx.args)}`);\n\n if (!ctx.parentParser) {\n logger.mcpError(\"Critical: MCP server handler called without a parent parser context.\");\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(`Multiple transports specified via CLI: ${transports}`);\n // Parse multiple transports configuration from CLI\n try {\n const transportConfigs = JSON.parse(transports);\n logger.mcpError(`Parsed transport configs: ${JSON.stringify(transportConfigs)}`);\n await mcpParser.startMcpServerWithMultipleTransports(serverInfo, transportConfigs, toolOptions);\n } catch (error: any) {\n logger.mcpError(`Error parsing transports configuration: ${error.message}`);\n logger.mcpError(\"Expected JSON format: '[{\\\"type\\\":\\\"stdio\\\"},{\\\"type\\\":\\\"sse\\\",\\\"port\\\":3001}]'\");\n process.exit(1);\n }\n } else if (defaultTransports && defaultTransports.length > 0) {\n logger.mcpError(`Using preset multiple transports: ${JSON.stringify(defaultTransports)}`);\n // Use preset multiple transports configuration\n await mcpParser.startMcpServerWithMultipleTransports(serverInfo, defaultTransports, toolOptions);\n } else if (defaultTransport) {\n logger.mcpError(`Using preset single transport: ${JSON.stringify(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 );\n } else {\n // Single transport mode from CLI flags (backwards compatibility)\n const transportType = (ctx.args[\"transport\"] as \"stdio\" | \"sse\" | \"streamable-http\") || \"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(`Using single transport mode: ${transportType} with options: ${JSON.stringify(transportOptions)}`);\n await mcpParser.startMcpServerWithTransport(serverInfo, transportType, transportOptions, toolOptions);\n }\n\n logger.mcpError(\"MCP server setup completed, keeping process alive\");\n // Keep the process alive\n return new Promise(() => {});\n\n } catch (error) {\n logger.mcpError(`Error in MCP handler: ${error instanceof Error ? error.message : String(error)}`);\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>(\n parser: ArgParserBase<T>,\n ): 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<THandlerReturn = any> extends ArgParser<THandlerReturn> {\n constructor(params?: IArgParserParams<THandlerReturn>, initialFlags?: IFlag[]) {\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(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(`Failed to parse TOML: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n \n generate(_config: Record<string, any>, flags: any[], parsedArgs: any): 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] = 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(`Failed to generate TOML: ${error instanceof Error ? error.message : String(error)}`);\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 ((value.startsWith('\"') && value.endsWith('\"')) || \n (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\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('TOML plugin not available:', error instanceof Error ? error.message : String(error));\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('TOML plugin not available:', error instanceof Error ? error.message : String(error));\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(`Failed to parse YAML: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n \n generate(_config: Record<string, any>, flags: any[], parsedArgs: any): 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] = 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(`Failed to generate YAML: ${error instanceof Error ? error.message : String(error)}`);\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 ((value.startsWith('\"') && value.endsWith('\"')) || \n (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\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('YAML plugin not available:', error instanceof Error ? error.message : String(error));\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('YAML plugin not available:', error instanceof Error ? error.message : String(error));\n return null;\n }\n}\n","import type { ArgParserBase } from \"../core/ArgParserBase\";\nimport type { ProcessedFlag, ISubCommand } 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 => console.log(` ${path.join(' ') || '(root)'}`));\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(subCommand.parser, newPath, allPaths, depth + 1);\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(f =>\n f['name'] !== 'help' &&\n (typeof f['mandatory'] === 'boolean' ? f['mandatory'] : false)\n );\n const optionalFlags = flags.filter(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) { // 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(flag: ProcessedFlag, mode: 'valid' | 'invalid' | 'random'): 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(flag: ProcessedFlag, mode: 'valid' | 'invalid' | 'random'): string[] {\n const count = flag['allowMultiple'] && mode !== 'invalid' ?\n Math.floor(Math.random() * 3) + 1 : 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(flag: ProcessedFlag, mode: 'valid' | 'invalid' | 'random'): 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 ? Date.now() - startTime : 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 ? Date.now() - startTime : 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(commandPaths: string[][], results: TestResult[]): 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 for (const path of commandPaths) {\n const pathKey = path.join(' ') || '(root)';\n const pathResults = results.filter(r => \n 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\n .object({\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})\n .passthrough();\nconst BaseRequestParamsSchema = z\n .object({\n _meta: z.optional(RequestMetaSchema),\n})\n .passthrough();\nexport const RequestSchema = z.object({\n method: z.string(),\n params: z.optional(BaseRequestParamsSchema),\n});\nconst BaseNotificationParamsSchema = z\n .object({\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();\nexport const NotificationSchema = z.object({\n method: z.string(),\n params: z.optional(BaseNotificationParamsSchema),\n});\nexport const ResultSchema = z\n .object({\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 * 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 .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: RequestIdSchema,\n})\n .merge(RequestSchema)\n .strict();\nexport const isJSONRPCRequest = (value) => JSONRPCRequestSchema.safeParse(value).success;\n/**\n * A notification which does not expect a response.\n */\nexport const JSONRPCNotificationSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n})\n .merge(NotificationSchema)\n .strict();\nexport const isJSONRPCNotification = (value) => JSONRPCNotificationSchema.safeParse(value).success;\n/**\n * A successful (non-error) response to a request.\n */\nexport const JSONRPCResponseSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: RequestIdSchema,\n result: ResultSchema,\n})\n .strict();\nexport const isJSONRPCResponse = (value) => JSONRPCResponseSchema.safeParse(value).success;\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\n .object({\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})\n .strict();\nexport const isJSONRPCError = (value) => JSONRPCErrorSchema.safeParse(value).success;\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 = ResultSchema.strict();\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 */\nexport const BaseMetadataSchema = z\n .object({\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 .passthrough();\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) => InitializeRequestSchema.safeParse(value).success;\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) => InitializedNotificationSchema.safeParse(value).success;\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.merge(ProgressSchema).extend({\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\n .object({\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.object({}).passthrough()),\n})\n .passthrough();\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});\nexport const BlobResourceContentsSchema = ResourceContentsSchema.extend({\n /**\n * A base64-encoded string representing the binary data of the item.\n */\n blob: z.string().base64(),\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\n .object({\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 must be provided.\n */\n required: z.optional(z.boolean()),\n})\n .passthrough();\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())),\n }),\n});\n/**\n * Text provided to or from an LLM.\n */\nexport const TextContentSchema = z\n .object({\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.object({}).passthrough()),\n})\n .passthrough();\n/**\n * An image provided to or from an LLM.\n */\nexport const ImageContentSchema = z\n .object({\n type: z.literal(\"image\"),\n /**\n * The base64-encoded image data.\n */\n data: z.string().base64(),\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.object({}).passthrough()),\n})\n .passthrough();\n/**\n * An Audio provided to or from an LLM.\n */\nexport const AudioContentSchema = z\n .object({\n type: z.literal(\"audio\"),\n /**\n * The base64-encoded audio data.\n */\n data: z.string().base64(),\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.object({}).passthrough()),\n})\n .passthrough();\n/**\n * The contents of a resource, embedded into a prompt or tool call result.\n */\nexport const EmbeddedResourceSchema = z\n .object({\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.object({}).passthrough()),\n})\n .passthrough();\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\n .object({\n role: z.enum([\"user\", \"assistant\"]),\n content: ContentBlockSchema,\n})\n .passthrough();\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\n .object({\n type: z.literal(\"object\"),\n properties: z.optional(z.object({}).passthrough()),\n required: z.optional(z.array(z.string())),\n })\n .passthrough(),\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.object({\n type: z.literal(\"object\"),\n properties: z.optional(z.object({}).passthrough()),\n required: z.optional(z.array(z.string())),\n })\n .passthrough()),\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.object({}).passthrough().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.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\n .object({\n /**\n * A hint for a model name.\n */\n name: z.string().optional(),\n})\n .passthrough();\n/**\n * The server's preferences for model selection, requested of the client during sampling.\n */\nexport const ModelPreferencesSchema = z\n .object({\n /**\n * Optional hints to use for model selection.\n */\n hints: z.optional(z.array(ModelHintSchema)),\n /**\n * How much to prioritize cost when selecting a model.\n */\n costPriority: z.optional(z.number().min(0).max(1)),\n /**\n * How much to prioritize sampling speed (latency) when selecting a model.\n */\n speedPriority: z.optional(z.number().min(0).max(1)),\n /**\n * How much to prioritize intelligence and capabilities when selecting a model.\n */\n intelligencePriority: z.optional(z.number().min(0).max(1)),\n})\n .passthrough();\n/**\n * Describes a message issued to or received from an LLM API.\n */\nexport const SamplingMessageSchema = z\n .object({\n role: z.enum([\"user\", \"assistant\"]),\n content: z.union([TextContentSchema, ImageContentSchema, AudioContentSchema]),\n})\n .passthrough();\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.object({}).passthrough()),\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\n .object({\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 .passthrough();\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\n .object({\n type: z.literal(\"object\"),\n properties: z.record(z.string(), PrimitiveSchemaDefinitionSchema),\n required: z.optional(z.array(z.string())),\n })\n .passthrough(),\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 = RequestSchema.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.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._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, { ...options, relatedRequestId: request.id }),\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 var _a;\n await ((_a = this._transport) === null || _a === void 0 ? void 0 : _a.close());\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\", { timeout }));\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.send(jsonrpcRequest, { relatedRequestId, resumptionToken, onresumptiontoken }).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 if (!this._transport) {\n throw new Error(\"Not connected\");\n }\n this.assertNotificationCapability(notification.method);\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 const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n if (def.description) {\n try {\n return {\n ...jsonSchema,\n ...JSON.parse(def.description),\n };\n }\n catch { }\n }\n return jsonSchema;\n};\nexport const defaultOptions = {\n name: undefined,\n $refStrategy: \"root\",\n basePath: [\"#\"],\n effectStrategy: \"input\",\n pipeStrategy: \"all\",\n dateStrategy: \"format:date-time\",\n mapStrategy: \"entries\",\n removeAdditionalStrategy: \"passthrough\",\n allowedAdditionalProperties: true,\n rejectedAdditionalProperties: false,\n definitionPath: \"definitions\",\n target: \"jsonSchema7\",\n strictUnions: false,\n definitions: {},\n errorMessages: false,\n markdownDescription: false,\n patternStrategy: \"escape\",\n applyRegexFlags: false,\n emailStrategy: \"format:email\",\n base64Strategy: \"contentEncoding:base64\",\n nameStrategy: \"ref\",\n openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n ? {\n ...defaultOptions,\n name: options,\n }\n : {\n ...defaultOptions,\n ...options,\n });\n","import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n const _options = getDefaultOptions(options);\n const currentPath = _options.name !== undefined\n ? [..._options.basePath, _options.definitionPath, _options.name]\n : _options.basePath;\n return {\n ..._options,\n flags: { hasReferencedOpenAiAnyType: false },\n currentPath: currentPath,\n propertyPath: undefined,\n seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n def._def,\n {\n def: def._def,\n path: [..._options.basePath, _options.definitionPath, name],\n // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n jsonSchema: undefined,\n },\n ])),\n };\n};\n","export function addErrorMessage(res, key, errorMessage, refs) {\n if (!refs?.errorMessages)\n return;\n if (errorMessage) {\n res.errorMessage = {\n ...res.errorMessage,\n [key]: errorMessage,\n };\n }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n res[key] = value;\n addErrorMessage(res, key, errorMessage, refs);\n}\n","export const getRelativePath = (pathA, pathB) => {\n let i = 0;\n for (; i < pathA.length && i < pathB.length; i++) {\n if (pathA[i] !== pathB[i])\n break;\n }\n return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n","import { getRelativePath } from \"../getRelativePath.js\";\nexport function parseAnyDef(refs) {\n if (refs.target !== \"openAi\") {\n return {};\n }\n const anyDefinitionPath = [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ];\n refs.flags.hasReferencedOpenAiAnyType = true;\n return {\n $ref: refs.$refStrategy === \"relative\"\n ? getRelativePath(anyDefinitionPath, refs.currentPath)\n : anyDefinitionPath.join(\"/\"),\n };\n}\n","import { ZodFirstPartyTypeKind } from \"zod\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n const res = {\n type: \"array\",\n };\n if (def.type?._def &&\n def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n res.items = parseDef(def.type._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n }\n if (def.minLength) {\n setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n }\n if (def.maxLength) {\n setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n }\n if (def.exactLength) {\n setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n }\n return res;\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n const res = {\n type: \"integer\",\n format: \"int64\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n","export function parseBooleanDef() {\n return {\n type: \"boolean\",\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n return parseDef(_def.type._def, refs);\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n const strategy = overrideDateStrategy ?? refs.dateStrategy;\n if (Array.isArray(strategy)) {\n return {\n anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n };\n }\n switch (strategy) {\n case \"string\":\n case \"format:date-time\":\n return {\n type: \"string\",\n format: \"date-time\",\n };\n case \"format:date\":\n return {\n type: \"string\",\n format: \"date\",\n };\n case \"integer\":\n return integerDateParser(def, refs);\n }\n}\nconst integerDateParser = (def, refs) => {\n const res = {\n type: \"integer\",\n format: \"unix-time\",\n };\n if (refs.target === \"openApi3\") {\n return res;\n }\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n }\n }\n return res;\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n return {\n ...parseDef(_def.innerType._def, refs),\n default: _def.defaultValue(),\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseEffectsDef(_def, refs) {\n return refs.effectStrategy === \"input\"\n ? parseDef(_def.schema._def, refs)\n : parseAnyDef(refs);\n}\n","export function parseEnumDef(def) {\n return {\n type: \"string\",\n enum: Array.from(def.values),\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n if (\"type\" in type && type.type === \"string\")\n return false;\n return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n const allOf = [\n parseDef(def.left._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n }),\n parseDef(def.right._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n }),\n ].filter((x) => !!x);\n let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n ? { unevaluatedProperties: false }\n : undefined;\n const mergedAllOf = [];\n // If either of the schemas is an allOf, merge them into a single allOf\n allOf.forEach((schema) => {\n if (isJsonSchema7AllOfType(schema)) {\n mergedAllOf.push(...schema.allOf);\n if (schema.unevaluatedProperties === undefined) {\n // If one of the schemas has no unevaluatedProperties set,\n // the merged schema should also have no unevaluatedProperties set\n unevaluatedProperties = undefined;\n }\n }\n else {\n let nestedSchema = schema;\n if (\"additionalProperties\" in schema &&\n schema.additionalProperties === false) {\n const { additionalProperties, ...rest } = schema;\n nestedSchema = rest;\n }\n else {\n // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n unevaluatedProperties = undefined;\n }\n mergedAllOf.push(nestedSchema);\n }\n });\n return mergedAllOf.length\n ? {\n allOf: mergedAllOf,\n ...unevaluatedProperties,\n }\n : undefined;\n}\n","export function parseLiteralDef(def, refs) {\n const parsedType = typeof def.value;\n if (parsedType !== \"bigint\" &&\n parsedType !== \"number\" &&\n parsedType !== \"boolean\" &&\n parsedType !== \"string\") {\n return {\n type: Array.isArray(def.value) ? \"array\" : \"object\",\n };\n }\n if (refs.target === \"openApi3\") {\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n enum: [def.value],\n };\n }\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n const: def.value,\n };\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n const res = {\n type: \"string\",\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n break;\n case \"endsWith\":\n addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"includes\": {\n addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n /* c8 ignore next */\n ((_) => { })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\"\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n if (schema.format || schema.anyOf?.some((x) => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { format: schema.errorMessage.format },\n }),\n });\n delete schema.format;\n if (schema.errorMessage) {\n delete schema.errorMessage.format;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.anyOf.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"format\", value, message, refs);\n }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { pattern: schema.errorMessage.pattern },\n }),\n });\n delete schema.pattern;\n if (schema.errorMessage) {\n delete schema.errorMessage.pattern;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n // Currently handled flags\n const flags = {\n i: regex.flags.includes(\"i\"),\n m: regex.flags.includes(\"m\"),\n s: regex.flags.includes(\"s\"), // `.` matches newlines\n };\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n }\n else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n }\n else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n }\n else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n }\n else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n }\n else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n }\n else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n }\n catch {\n console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n return regex.source;\n }\n return pattern;\n}\n","import { ZodFirstPartyTypeKind, } from \"zod\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseRecordDef(def, refs) {\n if (refs.target === \"openAi\") {\n console.warn(\"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\");\n }\n if (refs.target === \"openApi3\" &&\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n type: \"object\",\n required: def.keyType._def.values,\n properties: def.keyType._def.values.reduce((acc, key) => ({\n ...acc,\n [key]: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", key],\n }) ?? parseAnyDef(refs),\n }), {}),\n additionalProperties: refs.rejectedAdditionalProperties,\n };\n }\n const schema = {\n type: \"object\",\n additionalProperties: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n }) ?? refs.allowedAdditionalProperties,\n };\n if (refs.target === \"openApi3\") {\n return schema;\n }\n if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.checks?.length) {\n const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values,\n },\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.type._def.checks?.length) {\n const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n return schema;\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseMapDef(def, refs) {\n if (refs.mapStrategy === \"record\") {\n return parseRecordDef(def, refs);\n }\n const keys = parseDef(def.keyType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n }) || parseAnyDef(refs);\n const values = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n }) || parseAnyDef(refs);\n return {\n type: \"array\",\n maxItems: 125,\n items: {\n type: \"array\",\n items: [keys, values],\n minItems: 2,\n maxItems: 2,\n },\n };\n}\n","export function parseNativeEnumDef(def) {\n const object = def.values;\n const actualKeys = Object.keys(def.values).filter((key) => {\n return typeof object[object[key]] !== \"number\";\n });\n const actualValues = actualKeys.map((key) => object[key]);\n const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n return {\n type: parsedTypes.length === 1\n ? parsedTypes[0] === \"string\"\n ? \"string\"\n : \"number\"\n : [\"string\", \"number\"],\n enum: actualValues,\n };\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseNeverDef(refs) {\n return refs.target === \"openAi\"\n ? undefined\n : {\n not: parseAnyDef({\n ...refs,\n currentPath: [...refs.currentPath, \"not\"],\n }),\n };\n}\n","export function parseNullDef(refs) {\n return refs.target === \"openApi3\"\n ? {\n enum: [\"null\"],\n nullable: true,\n }\n : {\n type: \"null\",\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n ZodString: \"string\",\n ZodNumber: \"number\",\n ZodBigInt: \"integer\",\n ZodBoolean: \"boolean\",\n ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n if (refs.target === \"openApi3\")\n return asAnyOf(def, refs);\n const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n if (options.every((x) => x._def.typeName in primitiveMappings &&\n (!x._def.checks || !x._def.checks.length))) {\n // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n const types = options.reduce((types, x) => {\n const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n return type && !types.includes(type) ? [...types, type] : types;\n }, []);\n return {\n type: types.length > 1 ? types : types[0],\n };\n }\n else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n // all options literals\n const types = options.reduce((acc, x) => {\n const type = typeof x._def.value;\n switch (type) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return [...acc, type];\n case \"bigint\":\n return [...acc, \"integer\"];\n case \"object\":\n if (x._def.value === null)\n return [...acc, \"null\"];\n case \"symbol\":\n case \"undefined\":\n case \"function\":\n default:\n return acc;\n }\n }, []);\n if (types.length === options.length) {\n // all the literals are primitive, as far as null can be considered primitive\n const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n return {\n type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n enum: options.reduce((acc, x) => {\n return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n }, []),\n };\n }\n }\n else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n return {\n type: \"string\",\n enum: options.reduce((acc, x) => [\n ...acc,\n ...x._def.values.filter((x) => !acc.includes(x)),\n ], []),\n };\n }\n return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n const anyOf = (def.options instanceof Map\n ? Array.from(def.options.values())\n : def.options)\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n }))\n .filter((x) => !!x &&\n (!refs.strictUnions ||\n (typeof x === \"object\" && Object.keys(x).length > 0)));\n return anyOf.length ? { anyOf } : undefined;\n};\n","import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n if (refs.target === \"openApi3\") {\n return {\n type: primitiveMappings[def.innerType._def.typeName],\n nullable: true,\n };\n }\n return {\n type: [\n primitiveMappings[def.innerType._def.typeName],\n \"null\",\n ],\n };\n }\n if (refs.target === \"openApi3\") {\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath],\n });\n if (base && \"$ref\" in base)\n return { allOf: [base], nullable: true };\n return base && { ...base, nullable: true };\n }\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n });\n return base && { anyOf: [base, { type: \"null\" }] };\n}\n","import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n const res = {\n type: \"number\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"int\":\n res.type = \"integer\";\n addErrorMessage(res, \"type\", check.message, refs);\n break;\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseObjectDef(def, refs) {\n const forceOptionalIntoNullable = refs.target === \"openAi\";\n const result = {\n type: \"object\",\n properties: {},\n };\n const required = [];\n const shape = def.shape();\n for (const propName in shape) {\n let propDef = shape[propName];\n if (propDef === undefined || propDef._def === undefined) {\n continue;\n }\n let propOptional = safeIsOptional(propDef);\n if (propOptional && forceOptionalIntoNullable) {\n if (propDef._def.typeName === \"ZodOptional\") {\n propDef = propDef._def.innerType;\n }\n if (!propDef.isNullable()) {\n propDef = propDef.nullable();\n }\n propOptional = false;\n }\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", propName],\n propertyPath: [...refs.currentPath, \"properties\", propName],\n });\n if (parsedDef === undefined) {\n continue;\n }\n result.properties[propName] = parsedDef;\n if (!propOptional) {\n required.push(propName);\n }\n }\n if (required.length) {\n result.required = required;\n }\n const additionalProperties = decideAdditionalProperties(def, refs);\n if (additionalProperties !== undefined) {\n result.additionalProperties = additionalProperties;\n }\n return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n if (def.catchall._def.typeName !== \"ZodNever\") {\n return parseDef(def.catchall._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n });\n }\n switch (def.unknownKeys) {\n case \"passthrough\":\n return refs.allowedAdditionalProperties;\n case \"strict\":\n return refs.rejectedAdditionalProperties;\n case \"strip\":\n return refs.removeAdditionalStrategy === \"strict\"\n ? refs.allowedAdditionalProperties\n : refs.rejectedAdditionalProperties;\n }\n}\nfunction safeIsOptional(schema) {\n try {\n return schema.isOptional();\n }\n catch {\n return true;\n }\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport const parseOptionalDef = (def, refs) => {\n if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n return parseDef(def.innerType._def, refs);\n }\n const innerSchema = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n });\n return innerSchema\n ? {\n anyOf: [\n {\n not: parseAnyDef(refs),\n },\n innerSchema,\n ],\n }\n : parseAnyDef(refs);\n};\n","import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n if (refs.pipeStrategy === \"input\") {\n return parseDef(def.in._def, refs);\n }\n else if (refs.pipeStrategy === \"output\") {\n return parseDef(def.out._def, refs);\n }\n const a = parseDef(def.in._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n });\n const b = parseDef(def.out._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n });\n return {\n allOf: [a, b].filter((x) => x !== undefined),\n };\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n return parseDef(def.type._def, refs);\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n const items = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n const schema = {\n type: \"array\",\n uniqueItems: true,\n items,\n };\n if (def.minSize) {\n setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n }\n if (def.maxSize) {\n setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n }\n return schema;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n if (def.rest) {\n return {\n type: \"array\",\n minItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n additionalItems: parseDef(def.rest._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalItems\"],\n }),\n };\n }\n else {\n return {\n type: \"array\",\n minItems: def.items.length,\n maxItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n };\n }\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n return {\n not: parseAnyDef(refs),\n };\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n return parseAnyDef(refs);\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import { ZodFirstPartyTypeKind } from \"zod\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n switch (typeName) {\n case ZodFirstPartyTypeKind.ZodString:\n return parseStringDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNumber:\n return parseNumberDef(def, refs);\n case ZodFirstPartyTypeKind.ZodObject:\n return parseObjectDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBigInt:\n return parseBigintDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBoolean:\n return parseBooleanDef();\n case ZodFirstPartyTypeKind.ZodDate:\n return parseDateDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUndefined:\n return parseUndefinedDef(refs);\n case ZodFirstPartyTypeKind.ZodNull:\n return parseNullDef(refs);\n case ZodFirstPartyTypeKind.ZodArray:\n return parseArrayDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUnion:\n case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n return parseUnionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodIntersection:\n return parseIntersectionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodTuple:\n return parseTupleDef(def, refs);\n case ZodFirstPartyTypeKind.ZodRecord:\n return parseRecordDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLiteral:\n return parseLiteralDef(def, refs);\n case ZodFirstPartyTypeKind.ZodEnum:\n return parseEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNativeEnum:\n return parseNativeEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNullable:\n return parseNullableDef(def, refs);\n case ZodFirstPartyTypeKind.ZodOptional:\n return parseOptionalDef(def, refs);\n case ZodFirstPartyTypeKind.ZodMap:\n return parseMapDef(def, refs);\n case ZodFirstPartyTypeKind.ZodSet:\n return parseSetDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLazy:\n return () => def.getter()._def;\n case ZodFirstPartyTypeKind.ZodPromise:\n return parsePromiseDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNaN:\n case ZodFirstPartyTypeKind.ZodNever:\n return parseNeverDef(refs);\n case ZodFirstPartyTypeKind.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind.ZodAny:\n return parseAnyDef(refs);\n case ZodFirstPartyTypeKind.ZodUnknown:\n return parseUnknownDef(refs);\n case ZodFirstPartyTypeKind.ZodDefault:\n return parseDefaultDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBranded:\n return parseBrandedDef(def, refs);\n case ZodFirstPartyTypeKind.ZodReadonly:\n return parseReadonlyDef(def, refs);\n case ZodFirstPartyTypeKind.ZodCatch:\n return parseCatchDef(def, refs);\n case ZodFirstPartyTypeKind.ZodPipeline:\n return parsePipelineDef(def, refs);\n case ZodFirstPartyTypeKind.ZodFunction:\n case ZodFirstPartyTypeKind.ZodVoid:\n case ZodFirstPartyTypeKind.ZodSymbol:\n return undefined;\n default:\n /* c8 ignore next */\n return ((_) => undefined)(typeName);\n }\n};\n","import { ignoreOverride } from \"./Options.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n const seenItem = refs.seen.get(def);\n if (refs.override) {\n const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n if (seenSchema !== undefined) {\n return seenSchema;\n }\n }\n const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n refs.seen.set(def, newItem);\n const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n const jsonSchema = typeof jsonSchemaOrGetter === \"function\"\n ? parseDef(jsonSchemaOrGetter(), refs)\n : jsonSchemaOrGetter;\n if (jsonSchema) {\n addMeta(def, refs, jsonSchema);\n }\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n newItem.jsonSchema = jsonSchema;\n return postProcessResult;\n }\n newItem.jsonSchema = jsonSchema;\n return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n switch (refs.$refStrategy) {\n case \"root\":\n return { $ref: item.path.join(\"/\") };\n case \"relative\":\n return { $ref: getRelativePath(refs.currentPath, item.path) };\n case \"none\":\n case \"seen\": {\n if (item.path.length < refs.currentPath.length &&\n item.path.every((value, index) => refs.currentPath[index] === value)) {\n console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n return parseAnyDef(refs);\n }\n return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n }\n }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n if (def.description) {\n jsonSchema.description = def.description;\n if (refs.markdownDescription) {\n jsonSchema.markdownDescription = def.description;\n }\n }\n return jsonSchema;\n};\n","import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n const refs = getRefs(options);\n let definitions = typeof options === \"object\" && options.definitions\n ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n ...acc,\n [name]: parseDef(schema._def, {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, true) ?? parseAnyDef(refs),\n }), {})\n : undefined;\n const name = typeof options === \"string\"\n ? options\n : options?.nameStrategy === \"title\"\n ? undefined\n : options?.name;\n const main = parseDef(schema._def, name === undefined\n ? refs\n : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, false) ?? parseAnyDef(refs);\n const title = typeof options === \"object\" &&\n options.name !== undefined &&\n options.nameStrategy === \"title\"\n ? options.name\n : undefined;\n if (title !== undefined) {\n main.title = title;\n }\n if (refs.flags.hasReferencedOpenAiAnyType) {\n if (!definitions) {\n definitions = {};\n }\n if (!definitions[refs.openAiAnyTypeName]) {\n definitions[refs.openAiAnyTypeName] = {\n // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n items: {\n $ref: refs.$refStrategy === \"relative\"\n ? \"1\"\n : [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ].join(\"/\"),\n },\n };\n }\n }\n const combined = name === undefined\n ? definitions\n ? {\n ...main,\n [refs.definitionPath]: definitions,\n }\n : main\n : {\n $ref: [\n ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n refs.definitionPath,\n name,\n ].join(\"/\"),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main,\n },\n };\n if (refs.target === \"jsonSchema7\") {\n combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n }\n if (refs.target === \"openAi\" &&\n (\"anyOf\" in combined ||\n \"oneOf\" in combined ||\n \"allOf\" in combined ||\n (\"type\" in combined && Array.isArray(combined.type)))) {\n console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n }\n return combined;\n};\nexport { zodToJsonSchema };\n","import { ZodType, } from \"zod\";\nexport var McpZodTypeKind;\n(function (McpZodTypeKind) {\n McpZodTypeKind[\"Completable\"] = \"McpCompletable\";\n})(McpZodTypeKind || (McpZodTypeKind = {}));\nexport class Completable extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nCompletable.create = (type, params) => {\n return new Completable({\n type,\n typeName: McpZodTypeKind.Completable,\n complete: params.complete,\n ...processCreateParams(params),\n });\n};\n/**\n * Wraps a Zod type to provide autocompletion capabilities. Useful for, e.g., prompt arguments in MCP.\n */\nexport function completable(schema, complete) {\n return Completable.create(schema, { ...schema._def, complete });\n}\n// Not sure why this isn't exported from Zod:\n// https://github.com/colinhacks/zod/blob/f7ad26147ba291cb3fb257545972a8e00e767470/src/types.ts#L130\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n var _a, _b;\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message !== null && message !== void 0 ? message : ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: (_a = message !== null && message !== void 0 ? message : required_error) !== null && _a !== void 0 ? _a : ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\n//# sourceMappingURL=completable.js.map","import { Server } from \"./index.js\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\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).filter(([, tool]) => tool.enabled).map(([name, tool]) => {\n const toolDefinition = {\n name,\n title: tool.title,\n description: tool.description,\n inputSchema: tool.inputSchema\n ? zodToJsonSchema(tool.inputSchema, {\n strictUnions: true,\n })\n : EMPTY_OBJECT_JSON_SCHEMA,\n annotations: tool.annotations,\n };\n if (tool.outputSchema) {\n toolDefinition.outputSchema = zodToJsonSchema(tool.outputSchema, { strictUnions: true });\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 def = field._def;\n const suggestions = await def.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).filter(([_, resource]) => resource.enabled).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).filter(([, prompt]) => prompt.enabled).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] = 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 ? undefined : z.object(inputSchema),\n outputSchema: outputSchema === undefined ? undefined : 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 && typeof rest[0] === \"object\" && rest[0] !== null && !(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 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 // Check if object is empty or at least one property is a ZodType instance\n // Note: use heuristic check to avoid instanceof failure across different Zod versions\n return isEmptyObject || Object.values(obj).some(isZodTypeLike);\n}\nfunction isZodTypeLike(value) {\n return value !== null &&\n typeof value === 'object' &&\n 'parse' in value && typeof value.parse === 'function' &&\n 'safeParse' in value && typeof value.safeParse === 'function';\n}\nfunction promptArgumentsFromSchema(schema) {\n return Object.entries(schema.shape).map(([name, field]) => ({\n name,\n description: field.description,\n required: !field.isOptional(),\n }));\n}\nfunction createCompletionResult(suggestions) {\n return {\n completion: {\n values: suggestions.slice(0, 100),\n total: suggestions.length,\n hasMore: suggestions.length > 100,\n },\n };\n}\nconst EMPTY_COMPLETION_RESULT = {\n completion: {\n values: [],\n hasMore: false,\n },\n};\n//# sourceMappingURL=mcp.js.map","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\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\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\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\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","data","chalk","description","dependencies","pattern","mainFlags","properties","required","tools","createTomlPlugin","createYamlPlugin","createTomlPluginAsync","createYamlPluginAsync","_throwForDuplicateFlags","identifiedFinalParser","anyOf","index","logger","args","McpServer","StdioServerTransport","SSEServerTransport","path","StreamableHTTPServerTransport","sessionId","tomlModule","yamlModule","ErrorCode","_a","_b","global","this","exports","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","keyword","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","addFormat","ajv","allOf","additionalProperties","types","x","items","definitions","name","title","McpZodTypeKind","process","bytesModule","bytes","codes","status","inherits_browserModule","statuses","len","len2","buffer","ieee754","Buffer","byteLength","bomHandling","stream_module","streams","getRawBody","contentType","MAXIMUM_MESSAGE_SIZE","streamId","endPtr"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7kBA,aAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","x_google_ignoreList":[0,1,2,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146]}
|