@alcyone-labs/arg-parser 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +150 -24
  2. package/dist/index.cjs +21863 -2500
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.min.mjs +14541 -1827
  5. package/dist/index.min.mjs.map +1 -1
  6. package/dist/index.mjs +21865 -2502
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/src/ArgParser.d.ts +2 -10
  9. package/dist/src/ArgParser.d.ts.map +1 -1
  10. package/dist/src/ArgParserBase.d.ts.map +1 -1
  11. package/dist/src/mcp-integration.d.ts.map +1 -1
  12. package/dist/src/types.d.ts +11 -0
  13. package/dist/src/types.d.ts.map +1 -1
  14. package/package.json +25 -5
  15. package/dist/examples/fuzzy-demo.d.ts +0 -8
  16. package/dist/examples/fuzzy-demo.d.ts.map +0 -1
  17. package/dist/examples/fuzzy-test-example.d.ts +0 -8
  18. package/dist/examples/fuzzy-test-example.d.ts.map +0 -1
  19. package/dist/examples/fzf-search-cli.d.ts +0 -8
  20. package/dist/examples/fzf-search-cli.d.ts.map +0 -1
  21. package/dist/examples/getting-started.d.ts +0 -27
  22. package/dist/examples/getting-started.d.ts.map +0 -1
  23. package/dist/examples/mcp-preset-transports.d.ts +0 -19
  24. package/dist/examples/mcp-preset-transports.d.ts.map +0 -1
  25. package/dist/examples/simple-cli.d.ts +0 -26
  26. package/dist/examples/simple-cli.d.ts.map +0 -1
  27. package/dist/examples/v1.1.0-showcase.d.ts +0 -16
  28. package/dist/examples/v1.1.0-showcase.d.ts.map +0 -1
  29. package/dist/examples/with-env-example.d.ts +0 -3
  30. package/dist/examples/with-env-example.d.ts.map +0 -1
  31. package/dist/index-6G9StDO_.js +0 -6445
  32. package/dist/index-6G9StDO_.js.map +0 -1
  33. package/dist/index-CqU7Fj3C.cjs +0 -6444
  34. package/dist/index-CqU7Fj3C.cjs.map +0 -1
  35. package/dist/index-Dx_q1msW.js +0 -4682
  36. package/dist/index-Dx_q1msW.js.map +0 -1
  37. package/dist/sse-B5Jf_YpG.cjs +0 -121
  38. package/dist/sse-B5Jf_YpG.cjs.map +0 -1
  39. package/dist/sse-BDL3h2Ll.js +0 -121
  40. package/dist/sse-BDL3h2Ll.js.map +0 -1
  41. package/dist/sse-DSjLfGFo.js +0 -107
  42. package/dist/sse-DSjLfGFo.js.map +0 -1
  43. package/dist/stdio-Cf19UQO7.js +0 -70
  44. package/dist/stdio-Cf19UQO7.js.map +0 -1
  45. package/dist/stdio-DESvSONI.cjs +0 -94
  46. package/dist/stdio-DESvSONI.cjs.map +0 -1
  47. package/dist/stdio-DLOResWr.js +0 -94
  48. package/dist/stdio-DLOResWr.js.map +0 -1
  49. package/dist/streamableHttp-DXIdDSbF.js +0 -342
  50. package/dist/streamableHttp-DXIdDSbF.js.map +0 -1
  51. package/dist/streamableHttp-DsXlAnqJ.cjs +0 -456
  52. package/dist/streamableHttp-DsXlAnqJ.cjs.map +0 -1
  53. package/dist/streamableHttp-Vd4Qsgko.js +0 -456
  54. package/dist/streamableHttp-Vd4Qsgko.js.map +0 -1
  55. package/dist/types-DSxPEImy.cjs +0 -943
  56. package/dist/types-DSxPEImy.cjs.map +0 -1
  57. package/dist/types-DdsPVLQ5.js +0 -846
  58. package/dist/types-DdsPVLQ5.js.map +0 -1
  59. package/dist/types-DpK81FWv.js +0 -944
  60. package/dist/types-DpK81FWv.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.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":["zodFlagSchema","z","val","value","obj","newObj","_FlagManager","options","initialFlags","__privateAdd","__flags","_throwForDuplicateFlags","__privateSet","flag","parsedFromZod","resolvedType","inputTypeFromZod","safeFlag","__privateGet","processedFlag","flags","name","FlagManager","ArgParserError","message","cmdChain","_ArgParserBase","_ArgParserBase_instances","_appName","_appCommandName","_subCommandName","_parameters","_handler","_description","_handleErrors","_parentParser","_lastParseResult","_inheritParentFlags","_subCommands","_flagManager","_fuzzyMode","helpFlag","_value","_parsedArgs","sub","arg","output","_parseOptions","allowedValues","v","chalk","validationResult","subCommandConfig","subParser","parentFlags","parentFlag","handler","filePath","dir","path","fs","outputObject","__privateMethod","_buildRecursiveJson_fn","jsonString","plainText","_buildRecursiveString_fn","error","_printRecursiveToConsole_fn","processArgs","originalProcessArgs","_handleGlobalChecks_fn","identifiedFinalParser","identifiedCommandChain","identifiedParserChain","_identifyCommandChainAndParsers_fn","_a","_handleSaveToEnvFlag_fn","finalArgs","handlerToExecute","_validateMandatoryFlags_fn","_applyDefaultValues_fn","_prepareAndExecuteHandler_fn","displayErrorAndExit_fn","argsToParse","currentParser","accumulatedParentArgs","commandChainSoFar","parentParser","subCommandIndex","subCommandName","i","potentialSubCommand","argsForCurrentLevel","currentLevelArgs","firstUnconsumedIndex","parseFlags_fn","_b","combinedArgsFromThisAndParents","unknownCommand","finalParseResultArgs","nextParser","nextArgs","nextCommandChain","combinedArgsForNextLevel","cyan","green","white","red","dim","rootAppName","current","helpTitle","help","indent","level","nameA","nameB","actualSubParserInstance","subHelp","subFlags","f","a","b","flagOptions","opt","flagDesc","subSubCommandNames","localFlags","flagA","flagB","optionsText","isMandatory","mandatoryIndicator","descriptionLines","metaLines","typeName","maxOptionLength","formattedOptions","line","chain","parserChainSoFar","nextParserChain","isRootCliParser","_enableFuzzyMode_fn","fuzzyIndex","withEnvIndex","envConfigArgs","_loadEnvFile_fn","mergedArgs","_mergeEnvConfigWithArgs_fn","_identifiedParserChain","remainingArgs","accumulatedArgs","parsingSteps","rootSubCommandIndex","rootArgsSlice","rootParsedArgs","_c","e","_d","nextSubCommandIndex","currentLevelArgsSlice","stepInfo","currentLevelParsedArgs","_e","step","parserNameForLog","_f","helpFlagDefinition","helpOptions","parserChain","commandChain","finalMandatoryFlagsMissing","checkedFlagNames","parsersToValidate","immediateChild","parser","currentCommandChain","flagIsInheritedByChild","currentFlagIsMissing","finalParser","flagName","skipHandlers","args","inputArgs","inputArgsStr","finalParserWhoseHandlerWillRun","finalParserFlags","handlerArgs","handlerResult","consumedIndices","flagToCheck","regex","createRegExp","anyOf","option","oneOrMore","char","itemToCheck","matches","index","nextIndex","nextValueExists","nextValue","nextValueIsFlag","subCommand","commandNameToSuggest","visited","subIndent","flagIndent","subCommandParsers","addLine","config","subCommands","_generateDefaultEnvFileName_fn","baseName","word","saveToEnvIndex","nextArg","_saveToEnvFile_fn","ext","format","allFlags","seenFlagNames","parsedArgs","content","_generateEnvFormat_fn","_generateYamlFormat_fn","_generateJsonFormat_fn","_generateTomlFormat_fn","fileContent","rawConfig","_parseEnvFile_fn","_parseYamlFile_fn","_parseJsonFile_fn","_parseTomlFile_fn","_convertConfigToFlagValues_fn","parsed","dotenv","result","envKey","envValue","yaml","_meta","toml","configKey","configValue","convertedValue","_convertValueToFlagType_fn","flagType","lowerValue","numValue","envConfig","existingFlags","flagPart","flagValue","longFlag","item","lines","isSet","_getTypeString_fn","envVarName","defaultVal","prefix","comments","yamlContent","metadata","tomlContent","type","ArgParserBase","mapArgParserFlagToZodSchema","zodSchema","flagTypeOpt","flagEnum","itemSchema","literalSchemas","description","defaultValue","generateMcpToolsFromArgParser","rootParser","tools","visitedParsers","buildToolsRecursively","commandPathParts","typedRootParser","typedCurrentParser","appName","currentParserDescription","currentParserHandler","currentParserFlags","subCommandsMap","currentParserSubCommands","currentParserCommandName","currentParserCommandNameOrAppName","effectiveCommandName","toolName","zodProperties","hasHelpFlag","flagSchema","inputSchema","outputSchema","customSchema","tool","mcpInputArgs","helpParser","pathParts","part","subCmd","helpText","argv","parserFlags","flagDef","isFlagOnly","allowMultiple","flagTypeName","originalArgvLength","parseResult","errorDetails","errPayload","handlerResponse","currentArgs","resolvedParentArgs","cmdName","subCmdInfo","finalParserTyped","finalHandler","handlerToCall","handlerContext","handlerError","errorMsg","subCmdObj","nextPathParts","p","_ArgParser","_ArgParser_instances","serverInfo","toolOptions","McpServer","server","acc","t","toolConfig","transports","startPromises","transportConfig","promise","_startSingleTransport_fn","transportType","transportOptions","anyResult","optionsOrToolOptions","defaultTransports","defaultTransport","mcpHandler","ctx","mcpParser","transportConfigs","mcpSubParser","originalParser","originalFlags","newParser","StdioServerTransport","transport","SSEServerTransport","express","app","port","_req","res","resolve","StreamableHTTPServerTransport","req","sessionId","ArgParser","ArgParserFuzzyTester","commandPaths","results","commandPath","pathResults","paths","currentPath","allPaths","depth","newPath","targetParser","validCombinations","flagArgs","fullArgs","randomArgs","errorCases","errorArgs","command","combinations","mandatoryFlags","optionalFlags","mandatoryArgs","j","flag1Args","flag2Args","availableFlags","invalidArgs","mode","values","count","randomIndex","testStrings","expectError","startTime","originalArgs","testResult","executionTime","totalTests","successfulTests","r","failedTests","coverageByPath","pathKey","errorTypes","errorType"],"mappings":"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"}
1
+ {"version":3,"file":"index.min.mjs","sources":["../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/constants.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/errors.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/utils.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/fattr.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/decoder.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/index.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/entryHeader.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/mainHeader.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/index.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/deflater.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/inflater.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/zipcrypto.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/index.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/zipEntry.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/zipFile.js","../node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/adm-zip.js","../src/types.ts","../src/FlagManager.ts","../src/ArgParserBase.ts","../src/mcp-integration.ts","../src/ArgParser.ts","../src/fuzzy-tester.ts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.13.1/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.13.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.13.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/Options.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/Refs.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/errorMessages.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/any.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/array.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/date.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/default.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/record.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/map.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/never.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/null.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/union.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/number.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/object.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/set.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/selectParser.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/parseDef.js","../node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.67/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.13.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.13.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.13.1/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.13.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.13.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sse.js","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.13.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/streamableHttp.js"],"sourcesContent":["module.exports = {\n /* The local file header */\n LOCHDR : 30, // LOC header size\n LOCSIG : 0x04034b50, // \"PK\\003\\004\"\n LOCVER : 4,\t// version needed to extract\n LOCFLG : 6, // general purpose bit flag\n LOCHOW : 8, // compression method\n LOCTIM : 10, // modification time (2 bytes time, 2 bytes date)\n LOCCRC : 14, // uncompressed file crc-32 value\n LOCSIZ : 18, // compressed size\n LOCLEN : 22, // uncompressed size\n LOCNAM : 26, // filename length\n LOCEXT : 28, // extra field length\n\n /* The Data descriptor */\n EXTSIG : 0x08074b50, // \"PK\\007\\008\"\n EXTHDR : 16, // EXT header size\n EXTCRC : 4, // uncompressed file crc-32 value\n EXTSIZ : 8, // compressed size\n EXTLEN : 12, // uncompressed size\n\n /* The central directory file header */\n CENHDR : 46, // CEN header size\n CENSIG : 0x02014b50, // \"PK\\001\\002\"\n CENVEM : 4, // version made by\n CENVER : 6, // version needed to extract\n CENFLG : 8, // encrypt, decrypt flags\n CENHOW : 10, // compression method\n CENTIM : 12, // modification time (2 bytes time, 2 bytes date)\n CENCRC : 16, // uncompressed file crc-32 value\n CENSIZ : 20, // compressed size\n CENLEN : 24, // uncompressed size\n CENNAM : 28, // filename length\n CENEXT : 30, // extra field length\n CENCOM : 32, // file comment length\n CENDSK : 34, // volume number start\n CENATT : 36, // internal file attributes\n CENATX : 38, // external file attributes (host system dependent)\n CENOFF : 42, // LOC header offset\n\n /* The entries in the end of central directory */\n ENDHDR : 22, // END header size\n ENDSIG : 0x06054b50, // \"PK\\005\\006\"\n ENDSUB : 8, // number of entries on this disk\n ENDTOT : 10, // total number of entries\n ENDSIZ : 12, // central directory size in bytes\n ENDOFF : 16, // offset of first CEN header\n ENDCOM : 20, // zip file comment length\n\n END64HDR : 20, // zip64 END header size\n END64SIG : 0x07064b50, // zip64 Locator signature, \"PK\\006\\007\"\n END64START : 4, // number of the disk with the start of the zip64\n END64OFF : 8, // relative offset of the zip64 end of central directory\n END64NUMDISKS : 16, // total number of disks\n\n ZIP64SIG : 0x06064b50, // zip64 signature, \"PK\\006\\006\"\n ZIP64HDR : 56, // zip64 record minimum size\n ZIP64LEAD : 12, // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE\n ZIP64SIZE : 4, // zip64 size of the central directory record\n ZIP64VEM : 12, // zip64 version made by\n ZIP64VER : 14, // zip64 version needed to extract\n ZIP64DSK : 16, // zip64 number of this disk\n ZIP64DSKDIR : 20, // number of the disk with the start of the record directory\n ZIP64SUB : 24, // number of entries on this disk\n ZIP64TOT : 32, // total number of entries\n ZIP64SIZB : 40, // zip64 central directory size in bytes\n ZIP64OFF : 48, // offset of start of central directory with respect to the starting disk number\n ZIP64EXTRA : 56, // extensible data sector\n\n /* Compression methods */\n STORED : 0, // no compression\n SHRUNK : 1, // shrunk\n REDUCED1 : 2, // reduced with compression factor 1\n REDUCED2 : 3, // reduced with compression factor 2\n REDUCED3 : 4, // reduced with compression factor 3\n REDUCED4 : 5, // reduced with compression factor 4\n IMPLODED : 6, // imploded\n // 7 reserved for Tokenizing compression algorithm\n DEFLATED : 8, // deflated\n ENHANCED_DEFLATED: 9, // enhanced deflated\n PKWARE : 10,// PKWare DCL imploded\n // 11 reserved by PKWARE\n BZIP2 : 12, // compressed using BZIP2\n // 13 reserved by PKWARE\n LZMA : 14, // LZMA\n // 15-17 reserved by PKWARE\n IBM_TERSE : 18, // compressed using IBM TERSE\n IBM_LZ77 : 19, // IBM LZ77 z\n AES_ENCRYPT : 99, // WinZIP AES encryption method\n\n /* General purpose bit flag */\n // values can obtained with expression 2**bitnr\n FLG_ENC : 1, // Bit 0: encrypted file\n FLG_COMP1 : 2, // Bit 1, compression option\n FLG_COMP2 : 4, // Bit 2, compression option\n FLG_DESC : 8, // Bit 3, data descriptor\n FLG_ENH : 16, // Bit 4, enhanced deflating\n FLG_PATCH : 32, // Bit 5, indicates that the file is compressed patched data.\n FLG_STR : 64, // Bit 6, strong encryption (patented)\n // Bits 7-10: Currently unused.\n FLG_EFS : 2048, // Bit 11: Language encoding flag (EFS)\n // Bit 12: Reserved by PKWARE for enhanced compression.\n // Bit 13: encrypted the Central Directory (patented).\n // Bits 14-15: Reserved by PKWARE.\n FLG_MSK : 4096, // mask header values\n\n /* Load type */\n FILE : 2,\n BUFFER : 1,\n NONE : 0,\n\n /* 4.5 Extensible data fields */\n EF_ID : 0,\n EF_SIZE : 2,\n\n /* Header IDs */\n ID_ZIP64 : 0x0001,\n ID_AVINFO : 0x0007,\n ID_PFS : 0x0008,\n ID_OS2 : 0x0009,\n ID_NTFS : 0x000a,\n ID_OPENVMS : 0x000c,\n ID_UNIX : 0x000d,\n ID_FORK : 0x000e,\n ID_PATCH : 0x000f,\n ID_X509_PKCS7 : 0x0014,\n ID_X509_CERTID_F : 0x0015,\n ID_X509_CERTID_C : 0x0016,\n ID_STRONGENC : 0x0017,\n ID_RECORD_MGT : 0x0018,\n ID_X509_PKCS7_RL : 0x0019,\n ID_IBM1 : 0x0065,\n ID_IBM2 : 0x0066,\n ID_POSZIP : 0x4690,\n\n EF_ZIP64_OR_32 : 0xffffffff,\n EF_ZIP64_OR_16 : 0xffff,\n EF_ZIP64_SUNCOMP : 0,\n EF_ZIP64_SCOMP : 8,\n EF_ZIP64_RHO : 16,\n EF_ZIP64_DSN : 24\n};\n","const errors = {\n /* Header error messages */\n INVALID_LOC: \"Invalid LOC header (bad signature)\",\n INVALID_CEN: \"Invalid CEN header (bad signature)\",\n INVALID_END: \"Invalid END header (bad signature)\",\n\n /* Descriptor */\n DESCRIPTOR_NOT_EXIST: \"No descriptor present\",\n DESCRIPTOR_UNKNOWN: \"Unknown descriptor format\",\n DESCRIPTOR_FAULTY: \"Descriptor data is malformed\",\n\n /* ZipEntry error messages*/\n NO_DATA: \"Nothing to decompress\",\n BAD_CRC: \"CRC32 checksum failed {0}\",\n FILE_IN_THE_WAY: \"There is a file in the way: {0}\",\n UNKNOWN_METHOD: \"Invalid/unsupported compression method\",\n\n /* Inflater error messages */\n AVAIL_DATA: \"inflate::Available inflate data did not terminate\",\n INVALID_DISTANCE: \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\n TO_MANY_CODES: \"inflate::Dynamic block code description: too many length or distance codes\",\n INVALID_REPEAT_LEN: \"inflate::Dynamic block code description: repeat more than specified lengths\",\n INVALID_REPEAT_FIRST: \"inflate::Dynamic block code description: repeat lengths with no first length\",\n INCOMPLETE_CODES: \"inflate::Dynamic block code description: code lengths codes incomplete\",\n INVALID_DYN_DISTANCE: \"inflate::Dynamic block code description: invalid distance code lengths\",\n INVALID_CODES_LEN: \"inflate::Dynamic block code description: invalid literal/length code lengths\",\n INVALID_STORE_BLOCK: \"inflate::Stored block length did not match one's complement\",\n INVALID_BLOCK_TYPE: \"inflate::Invalid block type (type == 3)\",\n\n /* ADM-ZIP error messages */\n CANT_EXTRACT_FILE: \"Could not extract the file\",\n CANT_OVERRIDE: \"Target file already exists\",\n DISK_ENTRY_TOO_LARGE: \"Number of disk entries is too large\",\n NO_ZIP: \"No zip file was loaded\",\n NO_ENTRY: \"Entry doesn't exist\",\n DIRECTORY_CONTENT_ERROR: \"A directory cannot have content\",\n FILE_NOT_FOUND: 'File not found: \"{0}\"',\n NOT_IMPLEMENTED: \"Not implemented\",\n INVALID_FILENAME: \"Invalid filename\",\n INVALID_FORMAT: \"Invalid or unsupported zip format. No END header found\",\n INVALID_PASS_PARAM: \"Incompatible password parameter\",\n WRONG_PASSWORD: \"Wrong Password\",\n\n /* ADM-ZIP */\n COMMENT_TOO_LONG: \"Comment is too long\", // Comment can be max 65535 bytes long (NOTE: some non-US characters may take more space)\n EXTRA_FIELD_PARSE_ERROR: \"Extra field parsing error\"\n};\n\n// template\nfunction E(message) {\n return function (...args) {\n if (args.length) { // Allow {0} .. {9} arguments in error message, based on argument number\n message = message.replace(/\\{(\\d)\\}/g, (_, n) => args[n] || '');\n }\n\n return new Error('ADM-ZIP: ' + message);\n };\n}\n\n// Init errors with template\nfor (const msg of Object.keys(errors)) {\n exports[msg] = E(errors[msg]);\n}\n","const fsystem = require(\"fs\");\nconst pth = require(\"path\");\nconst Constants = require(\"./constants\");\nconst Errors = require(\"./errors\");\nconst isWin = typeof process === \"object\" && \"win32\" === process.platform;\n\nconst is_Obj = (obj) => typeof obj === \"object\" && obj !== null;\n\n// generate CRC32 lookup table\nconst crcTable = new Uint32Array(256).map((t, c) => {\n for (let k = 0; k < 8; k++) {\n if ((c & 1) !== 0) {\n c = 0xedb88320 ^ (c >>> 1);\n } else {\n c >>>= 1;\n }\n }\n return c >>> 0;\n});\n\n// UTILS functions\n\nfunction Utils(opts) {\n this.sep = pth.sep;\n this.fs = fsystem;\n\n if (is_Obj(opts)) {\n // custom filesystem\n if (is_Obj(opts.fs) && typeof opts.fs.statSync === \"function\") {\n this.fs = opts.fs;\n }\n }\n}\n\nmodule.exports = Utils;\n\n// INSTANTIABLE functions\n\nUtils.prototype.makeDir = function (/*String*/ folder) {\n const self = this;\n\n // Sync - make directories tree\n function mkdirSync(/*String*/ fpath) {\n let resolvedPath = fpath.split(self.sep)[0];\n fpath.split(self.sep).forEach(function (name) {\n if (!name || name.substr(-1, 1) === \":\") return;\n resolvedPath += self.sep + name;\n var stat;\n try {\n stat = self.fs.statSync(resolvedPath);\n } catch (e) {\n self.fs.mkdirSync(resolvedPath);\n }\n if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY(`\"${resolvedPath}\"`);\n });\n }\n\n mkdirSync(folder);\n};\n\nUtils.prototype.writeFileTo = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr) {\n const self = this;\n if (self.fs.existsSync(path)) {\n if (!overwrite) return false; // cannot overwrite\n\n var stat = self.fs.statSync(path);\n if (stat.isDirectory()) {\n return false;\n }\n }\n var folder = pth.dirname(path);\n if (!self.fs.existsSync(folder)) {\n self.makeDir(folder);\n }\n\n var fd;\n try {\n fd = self.fs.openSync(path, \"w\", 0o666); // 0666\n } catch (e) {\n self.fs.chmodSync(path, 0o666);\n fd = self.fs.openSync(path, \"w\", 0o666);\n }\n if (fd) {\n try {\n self.fs.writeSync(fd, content, 0, content.length, 0);\n } finally {\n self.fs.closeSync(fd);\n }\n }\n self.fs.chmodSync(path, attr || 0o666);\n return true;\n};\n\nUtils.prototype.writeFileToAsync = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr, /*Function*/ callback) {\n if (typeof attr === \"function\") {\n callback = attr;\n attr = undefined;\n }\n\n const self = this;\n\n self.fs.exists(path, function (exist) {\n if (exist && !overwrite) return callback(false);\n\n self.fs.stat(path, function (err, stat) {\n if (exist && stat.isDirectory()) {\n return callback(false);\n }\n\n var folder = pth.dirname(path);\n self.fs.exists(folder, function (exists) {\n if (!exists) self.makeDir(folder);\n\n self.fs.open(path, \"w\", 0o666, function (err, fd) {\n if (err) {\n self.fs.chmod(path, 0o666, function () {\n self.fs.open(path, \"w\", 0o666, function (err, fd) {\n self.fs.write(fd, content, 0, content.length, 0, function () {\n self.fs.close(fd, function () {\n self.fs.chmod(path, attr || 0o666, function () {\n callback(true);\n });\n });\n });\n });\n });\n } else if (fd) {\n self.fs.write(fd, content, 0, content.length, 0, function () {\n self.fs.close(fd, function () {\n self.fs.chmod(path, attr || 0o666, function () {\n callback(true);\n });\n });\n });\n } else {\n self.fs.chmod(path, attr || 0o666, function () {\n callback(true);\n });\n }\n });\n });\n });\n });\n};\n\nUtils.prototype.findFiles = function (/*String*/ path) {\n const self = this;\n\n function findSync(/*String*/ dir, /*RegExp*/ pattern, /*Boolean*/ recursive) {\n if (typeof pattern === \"boolean\") {\n recursive = pattern;\n pattern = undefined;\n }\n let files = [];\n self.fs.readdirSync(dir).forEach(function (file) {\n const path = pth.join(dir, file);\n const stat = self.fs.statSync(path);\n\n if (!pattern || pattern.test(path)) {\n files.push(pth.normalize(path) + (stat.isDirectory() ? self.sep : \"\"));\n }\n\n if (stat.isDirectory() && recursive) files = files.concat(findSync(path, pattern, recursive));\n });\n return files;\n }\n\n return findSync(path, undefined, true);\n};\n\n/**\n * Callback for showing if everything was done.\n *\n * @callback filelistCallback\n * @param {Error} err - Error object\n * @param {string[]} list - was request fully completed\n */\n\n/**\n *\n * @param {string} dir\n * @param {filelistCallback} cb\n */\nUtils.prototype.findFilesAsync = function (dir, cb) {\n const self = this;\n let results = [];\n self.fs.readdir(dir, function (err, list) {\n if (err) return cb(err);\n let list_length = list.length;\n if (!list_length) return cb(null, results);\n list.forEach(function (file) {\n file = pth.join(dir, file);\n self.fs.stat(file, function (err, stat) {\n if (err) return cb(err);\n if (stat) {\n results.push(pth.normalize(file) + (stat.isDirectory() ? self.sep : \"\"));\n if (stat.isDirectory()) {\n self.findFilesAsync(file, function (err, res) {\n if (err) return cb(err);\n results = results.concat(res);\n if (!--list_length) cb(null, results);\n });\n } else {\n if (!--list_length) cb(null, results);\n }\n }\n });\n });\n });\n};\n\nUtils.prototype.getAttributes = function () {};\n\nUtils.prototype.setAttributes = function () {};\n\n// STATIC functions\n\n// crc32 single update (it is part of crc32)\nUtils.crc32update = function (crc, byte) {\n return crcTable[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n};\n\nUtils.crc32 = function (buf) {\n if (typeof buf === \"string\") {\n buf = Buffer.from(buf, \"utf8\");\n }\n\n let len = buf.length;\n let crc = ~0;\n for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]);\n // xor and cast as uint32 number\n return ~crc >>> 0;\n};\n\nUtils.methodToString = function (/*Number*/ method) {\n switch (method) {\n case Constants.STORED:\n return \"STORED (\" + method + \")\";\n case Constants.DEFLATED:\n return \"DEFLATED (\" + method + \")\";\n default:\n return \"UNSUPPORTED (\" + method + \")\";\n }\n};\n\n/**\n * removes \"..\" style path elements\n * @param {string} path - fixable path\n * @returns string - fixed filepath\n */\nUtils.canonical = function (/*string*/ path) {\n if (!path) return \"\";\n // trick normalize think path is absolute\n const safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n return pth.join(\".\", safeSuffix);\n};\n\n/**\n * fix file names in achive\n * @param {string} path - fixable path\n * @returns string - fixed filepath\n */\n\nUtils.zipnamefix = function (path) {\n if (!path) return \"\";\n // trick normalize think path is absolute\n const safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n return pth.posix.join(\".\", safeSuffix);\n};\n\n/**\n *\n * @param {Array} arr\n * @param {function} callback\n * @returns\n */\nUtils.findLast = function (arr, callback) {\n if (!Array.isArray(arr)) throw new TypeError(\"arr is not array\");\n\n const len = arr.length >>> 0;\n for (let i = len - 1; i >= 0; i--) {\n if (callback(arr[i], i, arr)) {\n return arr[i];\n }\n }\n return void 0;\n};\n\n// make abolute paths taking prefix as root folder\nUtils.sanitize = function (/*string*/ prefix, /*string*/ name) {\n prefix = pth.resolve(pth.normalize(prefix));\n var parts = name.split(\"/\");\n for (var i = 0, l = parts.length; i < l; i++) {\n var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));\n if (path.indexOf(prefix) === 0) {\n return path;\n }\n }\n return pth.normalize(pth.join(prefix, pth.basename(name)));\n};\n\n// converts buffer, Uint8Array, string types to buffer\nUtils.toBuffer = function toBuffer(/*buffer, Uint8Array, string*/ input, /* function */ encoder) {\n if (Buffer.isBuffer(input)) {\n return input;\n } else if (input instanceof Uint8Array) {\n return Buffer.from(input);\n } else {\n // expect string all other values are invalid and return empty buffer\n return typeof input === \"string\" ? encoder(input) : Buffer.alloc(0);\n }\n};\n\nUtils.readBigUInt64LE = function (/*Buffer*/ buffer, /*int*/ index) {\n var slice = Buffer.from(buffer.slice(index, index + 8));\n slice.swap64();\n\n return parseInt(`0x${slice.toString(\"hex\")}`);\n};\n\nUtils.fromDOS2Date = function (val) {\n return new Date(((val >> 25) & 0x7f) + 1980, Math.max(((val >> 21) & 0x0f) - 1, 0), Math.max((val >> 16) & 0x1f, 1), (val >> 11) & 0x1f, (val >> 5) & 0x3f, (val & 0x1f) << 1);\n};\n\nUtils.fromDate2DOS = function (val) {\n let date = 0;\n let time = 0;\n if (val.getFullYear() > 1979) {\n date = (((val.getFullYear() - 1980) & 0x7f) << 9) | ((val.getMonth() + 1) << 5) | val.getDate();\n time = (val.getHours() << 11) | (val.getMinutes() << 5) | (val.getSeconds() >> 1);\n }\n return (date << 16) | time;\n};\n\nUtils.isWin = isWin; // Do we have windows system\nUtils.crcTable = crcTable;\n","const pth = require(\"path\");\n\nmodule.exports = function (/*String*/ path, /*Utils object*/ { fs }) {\n var _path = path || \"\",\n _obj = newAttr(),\n _stat = null;\n\n function newAttr() {\n return {\n directory: false,\n readonly: false,\n hidden: false,\n executable: false,\n mtime: 0,\n atime: 0\n };\n }\n\n if (_path && fs.existsSync(_path)) {\n _stat = fs.statSync(_path);\n _obj.directory = _stat.isDirectory();\n _obj.mtime = _stat.mtime;\n _obj.atime = _stat.atime;\n _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner\n _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right\n _obj.hidden = pth.basename(_path)[0] === \".\";\n } else {\n console.warn(\"Invalid path: \" + _path);\n }\n\n return {\n get directory() {\n return _obj.directory;\n },\n\n get readOnly() {\n return _obj.readonly;\n },\n\n get hidden() {\n return _obj.hidden;\n },\n\n get mtime() {\n return _obj.mtime;\n },\n\n get atime() {\n return _obj.atime;\n },\n\n get executable() {\n return _obj.executable;\n },\n\n decodeAttributes: function () {},\n\n encodeAttributes: function () {},\n\n toJSON: function () {\n return {\n path: _path,\n isDirectory: _obj.directory,\n isReadOnly: _obj.readonly,\n isHidden: _obj.hidden,\n isExecutable: _obj.executable,\n mTime: _obj.mtime,\n aTime: _obj.atime\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n","module.exports = {\n efs: true,\n encode: (data) => Buffer.from(data, \"utf8\"),\n decode: (data) => data.toString(\"utf8\")\n};\n","module.exports = require(\"./utils\");\nmodule.exports.Constants = require(\"./constants\");\nmodule.exports.Errors = require(\"./errors\");\nmodule.exports.FileAttr = require(\"./fattr\");\nmodule.exports.decoder = require(\"./decoder\");\n","var Utils = require(\"../util\"),\n Constants = Utils.Constants;\n\n/* The central directory file header */\nmodule.exports = function () {\n var _verMade = 20, // v2.0\n _version = 10, // v1.0\n _flags = 0,\n _method = 0,\n _time = 0,\n _crc = 0,\n _compressedSize = 0,\n _size = 0,\n _fnameLen = 0,\n _extraLen = 0,\n _comLen = 0,\n _diskStart = 0,\n _inattr = 0,\n _attr = 0,\n _offset = 0;\n\n _verMade |= Utils.isWin ? 0x0a00 : 0x0300;\n\n // Set EFS flag since filename and comment fields are all by default encoded using UTF-8.\n // Without it file names may be corrupted for other apps when file names use unicode chars\n _flags |= Constants.FLG_EFS;\n\n const _localHeader = {\n extraLen: 0\n };\n\n // casting\n const uint32 = (val) => Math.max(0, val) >>> 0;\n const uint16 = (val) => Math.max(0, val) & 0xffff;\n const uint8 = (val) => Math.max(0, val) & 0xff;\n\n _time = Utils.fromDate2DOS(new Date());\n\n return {\n get made() {\n return _verMade;\n },\n set made(val) {\n _verMade = val;\n },\n\n get version() {\n return _version;\n },\n set version(val) {\n _version = val;\n },\n\n get flags() {\n return _flags;\n },\n set flags(val) {\n _flags = val;\n },\n\n get flags_efs() {\n return (_flags & Constants.FLG_EFS) > 0;\n },\n set flags_efs(val) {\n if (val) {\n _flags |= Constants.FLG_EFS;\n } else {\n _flags &= ~Constants.FLG_EFS;\n }\n },\n\n get flags_desc() {\n return (_flags & Constants.FLG_DESC) > 0;\n },\n set flags_desc(val) {\n if (val) {\n _flags |= Constants.FLG_DESC;\n } else {\n _flags &= ~Constants.FLG_DESC;\n }\n },\n\n get method() {\n return _method;\n },\n set method(val) {\n switch (val) {\n case Constants.STORED:\n this.version = 10;\n case Constants.DEFLATED:\n default:\n this.version = 20;\n }\n _method = val;\n },\n\n get time() {\n return Utils.fromDOS2Date(this.timeval);\n },\n set time(val) {\n this.timeval = Utils.fromDate2DOS(val);\n },\n\n get timeval() {\n return _time;\n },\n set timeval(val) {\n _time = uint32(val);\n },\n\n get timeHighByte() {\n return uint8(_time >>> 8);\n },\n get crc() {\n return _crc;\n },\n set crc(val) {\n _crc = uint32(val);\n },\n\n get compressedSize() {\n return _compressedSize;\n },\n set compressedSize(val) {\n _compressedSize = uint32(val);\n },\n\n get size() {\n return _size;\n },\n set size(val) {\n _size = uint32(val);\n },\n\n get fileNameLength() {\n return _fnameLen;\n },\n set fileNameLength(val) {\n _fnameLen = val;\n },\n\n get extraLength() {\n return _extraLen;\n },\n set extraLength(val) {\n _extraLen = val;\n },\n\n get extraLocalLength() {\n return _localHeader.extraLen;\n },\n set extraLocalLength(val) {\n _localHeader.extraLen = val;\n },\n\n get commentLength() {\n return _comLen;\n },\n set commentLength(val) {\n _comLen = val;\n },\n\n get diskNumStart() {\n return _diskStart;\n },\n set diskNumStart(val) {\n _diskStart = uint32(val);\n },\n\n get inAttr() {\n return _inattr;\n },\n set inAttr(val) {\n _inattr = uint32(val);\n },\n\n get attr() {\n return _attr;\n },\n set attr(val) {\n _attr = uint32(val);\n },\n\n // get Unix file permissions\n get fileAttr() {\n return (_attr || 0) >> 16 & 0xfff;\n },\n\n get offset() {\n return _offset;\n },\n set offset(val) {\n _offset = uint32(val);\n },\n\n get encrypted() {\n return (_flags & Constants.FLG_ENC) === Constants.FLG_ENC;\n },\n\n get centralHeaderSize() {\n return Constants.CENHDR + _fnameLen + _extraLen + _comLen;\n },\n\n get realDataOffset() {\n return _offset + Constants.LOCHDR + _localHeader.fnameLen + _localHeader.extraLen;\n },\n\n get localHeader() {\n return _localHeader;\n },\n\n loadLocalHeaderFromBinary: function (/*Buffer*/ input) {\n var data = input.slice(_offset, _offset + Constants.LOCHDR);\n // 30 bytes and should start with \"PK\\003\\004\"\n if (data.readUInt32LE(0) !== Constants.LOCSIG) {\n throw Utils.Errors.INVALID_LOC();\n }\n\n // version needed to extract\n _localHeader.version = data.readUInt16LE(Constants.LOCVER);\n // general purpose bit flag\n _localHeader.flags = data.readUInt16LE(Constants.LOCFLG);\n // compression method\n _localHeader.method = data.readUInt16LE(Constants.LOCHOW);\n // modification time (2 bytes time, 2 bytes date)\n _localHeader.time = data.readUInt32LE(Constants.LOCTIM);\n // uncompressed file crc-32 valu\n _localHeader.crc = data.readUInt32LE(Constants.LOCCRC);\n // compressed size\n _localHeader.compressedSize = data.readUInt32LE(Constants.LOCSIZ);\n // uncompressed size\n _localHeader.size = data.readUInt32LE(Constants.LOCLEN);\n // filename length\n _localHeader.fnameLen = data.readUInt16LE(Constants.LOCNAM);\n // extra field length\n _localHeader.extraLen = data.readUInt16LE(Constants.LOCEXT);\n\n // read extra data\n const extraStart = _offset + Constants.LOCHDR + _localHeader.fnameLen;\n const extraEnd = extraStart + _localHeader.extraLen;\n return input.slice(extraStart, extraEnd);\n },\n\n loadFromBinary: function (/*Buffer*/ data) {\n // data should be 46 bytes and start with \"PK 01 02\"\n if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {\n throw Utils.Errors.INVALID_CEN();\n }\n // version made by\n _verMade = data.readUInt16LE(Constants.CENVEM);\n // version needed to extract\n _version = data.readUInt16LE(Constants.CENVER);\n // encrypt, decrypt flags\n _flags = data.readUInt16LE(Constants.CENFLG);\n // compression method\n _method = data.readUInt16LE(Constants.CENHOW);\n // modification time (2 bytes time, 2 bytes date)\n _time = data.readUInt32LE(Constants.CENTIM);\n // uncompressed file crc-32 value\n _crc = data.readUInt32LE(Constants.CENCRC);\n // compressed size\n _compressedSize = data.readUInt32LE(Constants.CENSIZ);\n // uncompressed size\n _size = data.readUInt32LE(Constants.CENLEN);\n // filename length\n _fnameLen = data.readUInt16LE(Constants.CENNAM);\n // extra field length\n _extraLen = data.readUInt16LE(Constants.CENEXT);\n // file comment length\n _comLen = data.readUInt16LE(Constants.CENCOM);\n // volume number start\n _diskStart = data.readUInt16LE(Constants.CENDSK);\n // internal file attributes\n _inattr = data.readUInt16LE(Constants.CENATT);\n // external file attributes\n _attr = data.readUInt32LE(Constants.CENATX);\n // LOC header offset\n _offset = data.readUInt32LE(Constants.CENOFF);\n },\n\n localHeaderToBinary: function () {\n // LOC header size (30 bytes)\n var data = Buffer.alloc(Constants.LOCHDR);\n // \"PK\\003\\004\"\n data.writeUInt32LE(Constants.LOCSIG, 0);\n // version needed to extract\n data.writeUInt16LE(_version, Constants.LOCVER);\n // general purpose bit flag\n data.writeUInt16LE(_flags, Constants.LOCFLG);\n // compression method\n data.writeUInt16LE(_method, Constants.LOCHOW);\n // modification time (2 bytes time, 2 bytes date)\n data.writeUInt32LE(_time, Constants.LOCTIM);\n // uncompressed file crc-32 value\n data.writeUInt32LE(_crc, Constants.LOCCRC);\n // compressed size\n data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);\n // uncompressed size\n data.writeUInt32LE(_size, Constants.LOCLEN);\n // filename length\n data.writeUInt16LE(_fnameLen, Constants.LOCNAM);\n // extra field length\n data.writeUInt16LE(_localHeader.extraLen, Constants.LOCEXT);\n return data;\n },\n\n centralHeaderToBinary: function () {\n // CEN header size (46 bytes)\n var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);\n // \"PK\\001\\002\"\n data.writeUInt32LE(Constants.CENSIG, 0);\n // version made by\n data.writeUInt16LE(_verMade, Constants.CENVEM);\n // version needed to extract\n data.writeUInt16LE(_version, Constants.CENVER);\n // encrypt, decrypt flags\n data.writeUInt16LE(_flags, Constants.CENFLG);\n // compression method\n data.writeUInt16LE(_method, Constants.CENHOW);\n // modification time (2 bytes time, 2 bytes date)\n data.writeUInt32LE(_time, Constants.CENTIM);\n // uncompressed file crc-32 value\n data.writeUInt32LE(_crc, Constants.CENCRC);\n // compressed size\n data.writeUInt32LE(_compressedSize, Constants.CENSIZ);\n // uncompressed size\n data.writeUInt32LE(_size, Constants.CENLEN);\n // filename length\n data.writeUInt16LE(_fnameLen, Constants.CENNAM);\n // extra field length\n data.writeUInt16LE(_extraLen, Constants.CENEXT);\n // file comment length\n data.writeUInt16LE(_comLen, Constants.CENCOM);\n // volume number start\n data.writeUInt16LE(_diskStart, Constants.CENDSK);\n // internal file attributes\n data.writeUInt16LE(_inattr, Constants.CENATT);\n // external file attributes\n data.writeUInt32LE(_attr, Constants.CENATX);\n // LOC header offset\n data.writeUInt32LE(_offset, Constants.CENOFF);\n return data;\n },\n\n toJSON: function () {\n const bytes = function (nr) {\n return nr + \" bytes\";\n };\n\n return {\n made: _verMade,\n version: _version,\n flags: _flags,\n method: Utils.methodToString(_method),\n time: this.time,\n crc: \"0x\" + _crc.toString(16).toUpperCase(),\n compressedSize: bytes(_compressedSize),\n size: bytes(_size),\n fileNameLength: bytes(_fnameLen),\n extraLength: bytes(_extraLen),\n commentLength: bytes(_comLen),\n diskNumStart: _diskStart,\n inAttr: _inattr,\n attr: _attr,\n offset: _offset,\n centralHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n","var Utils = require(\"../util\"),\n Constants = Utils.Constants;\n\n/* The entries in the end of central directory */\nmodule.exports = function () {\n var _volumeEntries = 0,\n _totalEntries = 0,\n _size = 0,\n _offset = 0,\n _commentLength = 0;\n\n return {\n get diskEntries() {\n return _volumeEntries;\n },\n set diskEntries(/*Number*/ val) {\n _volumeEntries = _totalEntries = val;\n },\n\n get totalEntries() {\n return _totalEntries;\n },\n set totalEntries(/*Number*/ val) {\n _totalEntries = _volumeEntries = val;\n },\n\n get size() {\n return _size;\n },\n set size(/*Number*/ val) {\n _size = val;\n },\n\n get offset() {\n return _offset;\n },\n set offset(/*Number*/ val) {\n _offset = val;\n },\n\n get commentLength() {\n return _commentLength;\n },\n set commentLength(/*Number*/ val) {\n _commentLength = val;\n },\n\n get mainHeaderSize() {\n return Constants.ENDHDR + _commentLength;\n },\n\n loadFromBinary: function (/*Buffer*/ data) {\n // data should be 22 bytes and start with \"PK 05 06\"\n // or be 56+ bytes and start with \"PK 06 06\" for Zip64\n if (\n (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) &&\n (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)\n ) {\n throw Utils.Errors.INVALID_END();\n }\n\n if (data.readUInt32LE(0) === Constants.ENDSIG) {\n // number of entries on this volume\n _volumeEntries = data.readUInt16LE(Constants.ENDSUB);\n // total number of entries\n _totalEntries = data.readUInt16LE(Constants.ENDTOT);\n // central directory size in bytes\n _size = data.readUInt32LE(Constants.ENDSIZ);\n // offset of first CEN header\n _offset = data.readUInt32LE(Constants.ENDOFF);\n // zip file comment length\n _commentLength = data.readUInt16LE(Constants.ENDCOM);\n } else {\n // number of entries on this volume\n _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);\n // total number of entries\n _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);\n // central directory size in bytes\n _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZE);\n // offset of first CEN header\n _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);\n\n _commentLength = 0;\n }\n },\n\n toBinary: function () {\n var b = Buffer.alloc(Constants.ENDHDR + _commentLength);\n // \"PK 05 06\" signature\n b.writeUInt32LE(Constants.ENDSIG, 0);\n b.writeUInt32LE(0, 4);\n // number of entries on this volume\n b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);\n // total number of entries\n b.writeUInt16LE(_totalEntries, Constants.ENDTOT);\n // central directory size in bytes\n b.writeUInt32LE(_size, Constants.ENDSIZ);\n // offset of first CEN header\n b.writeUInt32LE(_offset, Constants.ENDOFF);\n // zip file comment length\n b.writeUInt16LE(_commentLength, Constants.ENDCOM);\n // fill comment memory with spaces so no garbage is left there\n b.fill(\" \", Constants.ENDHDR);\n\n return b;\n },\n\n toJSON: function () {\n // creates 0x0000 style output\n const offset = function (nr, len) {\n let offs = nr.toString(16).toUpperCase();\n while (offs.length < len) offs = \"0\" + offs;\n return \"0x\" + offs;\n };\n\n return {\n diskEntries: _volumeEntries,\n totalEntries: _totalEntries,\n size: _size + \" bytes\",\n offset: offset(_offset, 4),\n commentLength: _commentLength\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n// Misspelled\n","exports.EntryHeader = require(\"./entryHeader\");\nexports.MainHeader = require(\"./mainHeader\");\n","module.exports = function (/*Buffer*/ inbuf) {\n var zlib = require(\"zlib\");\n\n var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };\n\n return {\n deflate: function () {\n return zlib.deflateRawSync(inbuf, opts);\n },\n\n deflateAsync: function (/*Function*/ callback) {\n var tmp = zlib.createDeflateRaw(opts),\n parts = [],\n total = 0;\n tmp.on(\"data\", function (data) {\n parts.push(data);\n total += data.length;\n });\n tmp.on(\"end\", function () {\n var buf = Buffer.alloc(total),\n written = 0;\n buf.fill(0);\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n part.copy(buf, written);\n written += part.length;\n }\n callback && callback(buf);\n });\n tmp.end(inbuf);\n }\n };\n};\n","const version = +(process.versions ? process.versions.node : \"\").split(\".\")[0] || 0;\n\nmodule.exports = function (/*Buffer*/ inbuf, /*number*/ expectedLength) {\n var zlib = require(\"zlib\");\n const option = version >= 15 && expectedLength > 0 ? { maxOutputLength: expectedLength } : {};\n\n return {\n inflate: function () {\n return zlib.inflateRawSync(inbuf, option);\n },\n\n inflateAsync: function (/*Function*/ callback) {\n var tmp = zlib.createInflateRaw(option),\n parts = [],\n total = 0;\n tmp.on(\"data\", function (data) {\n parts.push(data);\n total += data.length;\n });\n tmp.on(\"end\", function () {\n var buf = Buffer.alloc(total),\n written = 0;\n buf.fill(0);\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n part.copy(buf, written);\n written += part.length;\n }\n callback && callback(buf);\n });\n tmp.end(inbuf);\n }\n };\n};\n","\"use strict\";\n\n// node crypt, we use it for generate salt\n// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst { randomFillSync } = require(\"crypto\");\nconst Errors = require(\"../util/errors\");\n\n// generate CRC32 lookup table\nconst crctable = new Uint32Array(256).map((t, crc) => {\n for (let j = 0; j < 8; j++) {\n if (0 !== (crc & 1)) {\n crc = (crc >>> 1) ^ 0xedb88320;\n } else {\n crc >>>= 1;\n }\n }\n return crc >>> 0;\n});\n\n// C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)\nconst uMul = (a, b) => Math.imul(a, b) >>> 0;\n\n// crc32 byte single update (actually same function is part of utils.crc32 function :) )\nconst crc32update = (pCrc32, bval) => {\n return crctable[(pCrc32 ^ bval) & 0xff] ^ (pCrc32 >>> 8);\n};\n\n// function for generating salt for encrytion header\nconst genSalt = () => {\n if (\"function\" === typeof randomFillSync) {\n return randomFillSync(Buffer.alloc(12));\n } else {\n // fallback if function is not defined\n return genSalt.node();\n }\n};\n\n// salt generation with node random function (mainly as fallback)\ngenSalt.node = () => {\n const salt = Buffer.alloc(12);\n const len = salt.length;\n for (let i = 0; i < len; i++) salt[i] = (Math.random() * 256) & 0xff;\n return salt;\n};\n\n// general config\nconst config = {\n genSalt\n};\n\n// Class Initkeys handles same basic ops with keys\nfunction Initkeys(pw) {\n const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);\n this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);\n for (let i = 0; i < pass.length; i++) {\n this.updateKeys(pass[i]);\n }\n}\n\nInitkeys.prototype.updateKeys = function (byteValue) {\n const keys = this.keys;\n keys[0] = crc32update(keys[0], byteValue);\n keys[1] += keys[0] & 0xff;\n keys[1] = uMul(keys[1], 134775813) + 1;\n keys[2] = crc32update(keys[2], keys[1] >>> 24);\n return byteValue;\n};\n\nInitkeys.prototype.next = function () {\n const k = (this.keys[2] | 2) >>> 0; // key\n return (uMul(k, k ^ 1) >> 8) & 0xff; // decode\n};\n\nfunction make_decrypter(/*Buffer*/ pwd) {\n // 1. Stage initialize key\n const keys = new Initkeys(pwd);\n\n // return decrypter function\n return function (/*Buffer*/ data) {\n // result - we create new Buffer for results\n const result = Buffer.alloc(data.length);\n let pos = 0;\n // process input data\n for (let c of data) {\n //c ^= keys.next();\n //result[pos++] = c; // decode & Save Value\n result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte\n }\n return result;\n };\n}\n\nfunction make_encrypter(/*Buffer*/ pwd) {\n // 1. Stage initialize key\n const keys = new Initkeys(pwd);\n\n // return encrypting function, result and pos is here so we dont have to merge buffers later\n return function (/*Buffer*/ data, /*Buffer*/ result, /* Number */ pos = 0) {\n // result - we create new Buffer for results\n if (!result) result = Buffer.alloc(data.length);\n // process input data\n for (let c of data) {\n const k = keys.next(); // save key byte\n result[pos++] = c ^ k; // save val\n keys.updateKeys(c); // update keys with decoded byte\n }\n return result;\n };\n}\n\nfunction decrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd) {\n if (!data || !Buffer.isBuffer(data) || data.length < 12) {\n return Buffer.alloc(0);\n }\n\n // 1. We Initialize and generate decrypting function\n const decrypter = make_decrypter(pwd);\n\n // 2. decrypt salt what is always 12 bytes and is a part of file content\n const salt = decrypter(data.slice(0, 12));\n\n // if bit 3 (0x08) of the general-purpose flags field is set, check salt[11] with the high byte of the header time\n // 2 byte data block (as per Info-Zip spec), otherwise check with the high byte of the header entry\n const verifyByte = (header.flags & 0x8) === 0x8 ? header.timeHighByte : header.crc >>> 24;\n\n //3. does password meet expectations\n if (salt[11] !== verifyByte) {\n throw Errors.WRONG_PASSWORD();\n }\n\n // 4. decode content\n return decrypter(data.slice(12));\n}\n\n// lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality\nfunction _salter(data) {\n if (Buffer.isBuffer(data) && data.length >= 12) {\n // be aware - currently salting buffer data is modified\n config.genSalt = function () {\n return data.slice(0, 12);\n };\n } else if (data === \"node\") {\n // test salt generation with node random function\n config.genSalt = genSalt.node;\n } else {\n // if value is not acceptable config gets reset.\n config.genSalt = genSalt;\n }\n}\n\nfunction encrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd, /*Boolean*/ oldlike = false) {\n // 1. test data if data is not Buffer we make buffer from it\n if (data == null) data = Buffer.alloc(0);\n // if data is not buffer be make buffer from it\n if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString());\n\n // 2. We Initialize and generate encrypting function\n const encrypter = make_encrypter(pwd);\n\n // 3. generate salt (12-bytes of random data)\n const salt = config.genSalt();\n salt[11] = (header.crc >>> 24) & 0xff;\n\n // old implementations (before PKZip 2.04g) used two byte check\n if (oldlike) salt[10] = (header.crc >>> 16) & 0xff;\n\n // 4. create output\n const result = Buffer.alloc(data.length + 12);\n encrypter(salt, result);\n\n // finally encode content\n return encrypter(data, result, 12);\n}\n\nmodule.exports = { decrypt, encrypt, _salter };\n","exports.Deflater = require(\"./deflater\");\nexports.Inflater = require(\"./inflater\");\nexports.ZipCrypto = require(\"./zipcrypto\");\n","var Utils = require(\"./util\"),\n Headers = require(\"./headers\"),\n Constants = Utils.Constants,\n Methods = require(\"./methods\");\n\nmodule.exports = function (/** object */ options, /*Buffer*/ input) {\n var _centralHeader = new Headers.EntryHeader(),\n _entryName = Buffer.alloc(0),\n _comment = Buffer.alloc(0),\n _isDirectory = false,\n uncompressedData = null,\n _extra = Buffer.alloc(0),\n _extralocal = Buffer.alloc(0),\n _efs = true;\n\n // assign options\n const opts = options;\n\n const decoder = typeof opts.decoder === \"object\" ? opts.decoder : Utils.decoder;\n _efs = decoder.hasOwnProperty(\"efs\") ? decoder.efs : false;\n\n function getCompressedDataFromZip() {\n //if (!input || !Buffer.isBuffer(input)) {\n if (!input || !(input instanceof Uint8Array)) {\n return Buffer.alloc(0);\n }\n _extralocal = _centralHeader.loadLocalHeaderFromBinary(input);\n return input.slice(_centralHeader.realDataOffset, _centralHeader.realDataOffset + _centralHeader.compressedSize);\n }\n\n function crc32OK(data) {\n // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the local header is written\n if (!_centralHeader.flags_desc) {\n if (Utils.crc32(data) !== _centralHeader.localHeader.crc) {\n return false;\n }\n } else {\n const descriptor = {};\n const dataEndOffset = _centralHeader.realDataOffset + _centralHeader.compressedSize;\n // no descriptor after compressed data, instead new local header\n if (input.readUInt32LE(dataEndOffset) == Constants.LOCSIG || input.readUInt32LE(dataEndOffset) == Constants.CENSIG) {\n throw Utils.Errors.DESCRIPTOR_NOT_EXIST();\n }\n\n // get decriptor data\n if (input.readUInt32LE(dataEndOffset) == Constants.EXTSIG) {\n // descriptor with signature\n descriptor.crc = input.readUInt32LE(dataEndOffset + Constants.EXTCRC);\n descriptor.compressedSize = input.readUInt32LE(dataEndOffset + Constants.EXTSIZ);\n descriptor.size = input.readUInt32LE(dataEndOffset + Constants.EXTLEN);\n } else if (input.readUInt16LE(dataEndOffset + 12) === 0x4b50) {\n // descriptor without signature (we check is new header starting where we expect)\n descriptor.crc = input.readUInt32LE(dataEndOffset + Constants.EXTCRC - 4);\n descriptor.compressedSize = input.readUInt32LE(dataEndOffset + Constants.EXTSIZ - 4);\n descriptor.size = input.readUInt32LE(dataEndOffset + Constants.EXTLEN - 4);\n } else {\n throw Utils.Errors.DESCRIPTOR_UNKNOWN();\n }\n\n // check data integrity\n if (descriptor.compressedSize !== _centralHeader.compressedSize || descriptor.size !== _centralHeader.size || descriptor.crc !== _centralHeader.crc) {\n throw Utils.Errors.DESCRIPTOR_FAULTY();\n }\n if (Utils.crc32(data) !== descriptor.crc) {\n return false;\n }\n\n // @TODO: zip64 bit descriptor fields\n // if bit 3 is set and any value in local header \"zip64 Extended information\" extra field are set 0 (place holder)\n // then 64-bit descriptor format is used instead of 32-bit\n // central header - \"zip64 Extended information\" extra field should store real values and not place holders\n }\n return true;\n }\n\n function decompress(/*Boolean*/ async, /*Function*/ callback, /*String, Buffer*/ pass) {\n if (typeof callback === \"undefined\" && typeof async === \"string\") {\n pass = async;\n async = void 0;\n }\n if (_isDirectory) {\n if (async && callback) {\n callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR()); //si added error.\n }\n return Buffer.alloc(0);\n }\n\n var compressedData = getCompressedDataFromZip();\n\n if (compressedData.length === 0) {\n // File is empty, nothing to decompress.\n if (async && callback) callback(compressedData);\n return compressedData;\n }\n\n if (_centralHeader.encrypted) {\n if (\"string\" !== typeof pass && !Buffer.isBuffer(pass)) {\n throw Utils.Errors.INVALID_PASS_PARAM();\n }\n compressedData = Methods.ZipCrypto.decrypt(compressedData, _centralHeader, pass);\n }\n\n var data = Buffer.alloc(_centralHeader.size);\n\n switch (_centralHeader.method) {\n case Utils.Constants.STORED:\n compressedData.copy(data);\n if (!crc32OK(data)) {\n if (async && callback) callback(data, Utils.Errors.BAD_CRC()); //si added error\n throw Utils.Errors.BAD_CRC();\n } else {\n //si added otherwise did not seem to return data.\n if (async && callback) callback(data);\n return data;\n }\n case Utils.Constants.DEFLATED:\n var inflater = new Methods.Inflater(compressedData, _centralHeader.size);\n if (!async) {\n const result = inflater.inflate(data);\n result.copy(data, 0);\n if (!crc32OK(data)) {\n throw Utils.Errors.BAD_CRC(`\"${decoder.decode(_entryName)}\"`);\n }\n return data;\n } else {\n inflater.inflateAsync(function (result) {\n result.copy(result, 0);\n if (callback) {\n if (!crc32OK(result)) {\n callback(result, Utils.Errors.BAD_CRC()); //si added error\n } else {\n callback(result);\n }\n }\n });\n }\n break;\n default:\n if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD());\n throw Utils.Errors.UNKNOWN_METHOD();\n }\n }\n\n function compress(/*Boolean*/ async, /*Function*/ callback) {\n if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n // no data set or the data wasn't changed to require recompression\n if (async && callback) callback(getCompressedDataFromZip());\n return getCompressedDataFromZip();\n }\n\n if (uncompressedData.length && !_isDirectory) {\n var compressedData;\n // Local file header\n switch (_centralHeader.method) {\n case Utils.Constants.STORED:\n _centralHeader.compressedSize = _centralHeader.size;\n\n compressedData = Buffer.alloc(uncompressedData.length);\n uncompressedData.copy(compressedData);\n\n if (async && callback) callback(compressedData);\n return compressedData;\n default:\n case Utils.Constants.DEFLATED:\n var deflater = new Methods.Deflater(uncompressedData);\n if (!async) {\n var deflated = deflater.deflate();\n _centralHeader.compressedSize = deflated.length;\n return deflated;\n } else {\n deflater.deflateAsync(function (data) {\n compressedData = Buffer.alloc(data.length);\n _centralHeader.compressedSize = data.length;\n data.copy(compressedData);\n callback && callback(compressedData);\n });\n }\n deflater = null;\n break;\n }\n } else if (async && callback) {\n callback(Buffer.alloc(0));\n } else {\n return Buffer.alloc(0);\n }\n }\n\n function readUInt64LE(buffer, offset) {\n return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);\n }\n\n function parseExtra(data) {\n try {\n var offset = 0;\n var signature, size, part;\n while (offset + 4 < data.length) {\n signature = data.readUInt16LE(offset);\n offset += 2;\n size = data.readUInt16LE(offset);\n offset += 2;\n part = data.slice(offset, offset + size);\n offset += size;\n if (Constants.ID_ZIP64 === signature) {\n parseZip64ExtendedInformation(part);\n }\n }\n } catch (error) {\n throw Utils.Errors.EXTRA_FIELD_PARSE_ERROR();\n }\n }\n\n //Override header field values with values from the ZIP64 extra field\n function parseZip64ExtendedInformation(data) {\n var size, compressedSize, offset, diskNumStart;\n\n if (data.length >= Constants.EF_ZIP64_SCOMP) {\n size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n if (_centralHeader.size === Constants.EF_ZIP64_OR_32) {\n _centralHeader.size = size;\n }\n }\n if (data.length >= Constants.EF_ZIP64_RHO) {\n compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n if (_centralHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n _centralHeader.compressedSize = compressedSize;\n }\n }\n if (data.length >= Constants.EF_ZIP64_DSN) {\n offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n if (_centralHeader.offset === Constants.EF_ZIP64_OR_32) {\n _centralHeader.offset = offset;\n }\n }\n if (data.length >= Constants.EF_ZIP64_DSN + 4) {\n diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n if (_centralHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n _centralHeader.diskNumStart = diskNumStart;\n }\n }\n }\n\n return {\n get entryName() {\n return decoder.decode(_entryName);\n },\n get rawEntryName() {\n return _entryName;\n },\n set entryName(val) {\n _entryName = Utils.toBuffer(val, decoder.encode);\n var lastChar = _entryName[_entryName.length - 1];\n _isDirectory = lastChar === 47 || lastChar === 92;\n _centralHeader.fileNameLength = _entryName.length;\n },\n\n get efs() {\n if (typeof _efs === \"function\") {\n return _efs(this.entryName);\n } else {\n return _efs;\n }\n },\n\n get extra() {\n return _extra;\n },\n set extra(val) {\n _extra = val;\n _centralHeader.extraLength = val.length;\n parseExtra(val);\n },\n\n get comment() {\n return decoder.decode(_comment);\n },\n set comment(val) {\n _comment = Utils.toBuffer(val, decoder.encode);\n _centralHeader.commentLength = _comment.length;\n if (_comment.length > 0xffff) throw Utils.Errors.COMMENT_TOO_LONG();\n },\n\n get name() {\n var n = decoder.decode(_entryName);\n return _isDirectory\n ? n\n .substr(n.length - 1)\n .split(\"/\")\n .pop()\n : n.split(\"/\").pop();\n },\n get isDirectory() {\n return _isDirectory;\n },\n\n getCompressedData: function () {\n return compress(false, null);\n },\n\n getCompressedDataAsync: function (/*Function*/ callback) {\n compress(true, callback);\n },\n\n setData: function (value) {\n uncompressedData = Utils.toBuffer(value, Utils.decoder.encode);\n if (!_isDirectory && uncompressedData.length) {\n _centralHeader.size = uncompressedData.length;\n _centralHeader.method = Utils.Constants.DEFLATED;\n _centralHeader.crc = Utils.crc32(value);\n _centralHeader.changed = true;\n } else {\n // folders and blank files should be stored\n _centralHeader.method = Utils.Constants.STORED;\n }\n },\n\n getData: function (pass) {\n if (_centralHeader.changed) {\n return uncompressedData;\n } else {\n return decompress(false, null, pass);\n }\n },\n\n getDataAsync: function (/*Function*/ callback, pass) {\n if (_centralHeader.changed) {\n callback(uncompressedData);\n } else {\n decompress(true, callback, pass);\n }\n },\n\n set attr(attr) {\n _centralHeader.attr = attr;\n },\n get attr() {\n return _centralHeader.attr;\n },\n\n set header(/*Buffer*/ data) {\n _centralHeader.loadFromBinary(data);\n },\n\n get header() {\n return _centralHeader;\n },\n\n packCentralHeader: function () {\n _centralHeader.flags_efs = this.efs;\n _centralHeader.extraLength = _extra.length;\n // 1. create header (buffer)\n var header = _centralHeader.centralHeaderToBinary();\n var addpos = Utils.Constants.CENHDR;\n // 2. add file name\n _entryName.copy(header, addpos);\n addpos += _entryName.length;\n // 3. add extra data\n _extra.copy(header, addpos);\n addpos += _centralHeader.extraLength;\n // 4. add file comment\n _comment.copy(header, addpos);\n return header;\n },\n\n packLocalHeader: function () {\n let addpos = 0;\n _centralHeader.flags_efs = this.efs;\n _centralHeader.extraLocalLength = _extralocal.length;\n // 1. construct local header Buffer\n const localHeaderBuf = _centralHeader.localHeaderToBinary();\n // 2. localHeader - crate header buffer\n const localHeader = Buffer.alloc(localHeaderBuf.length + _entryName.length + _centralHeader.extraLocalLength);\n // 2.1 add localheader\n localHeaderBuf.copy(localHeader, addpos);\n addpos += localHeaderBuf.length;\n // 2.2 add file name\n _entryName.copy(localHeader, addpos);\n addpos += _entryName.length;\n // 2.3 add extra field\n _extralocal.copy(localHeader, addpos);\n addpos += _extralocal.length;\n\n return localHeader;\n },\n\n toJSON: function () {\n const bytes = function (nr) {\n return \"<\" + ((nr && nr.length + \" bytes buffer\") || \"null\") + \">\";\n };\n\n return {\n entryName: this.entryName,\n name: this.name,\n comment: this.comment,\n isDirectory: this.isDirectory,\n header: _centralHeader.toJSON(),\n compressedData: bytes(input),\n data: bytes(uncompressedData)\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n","const ZipEntry = require(\"./zipEntry\");\nconst Headers = require(\"./headers\");\nconst Utils = require(\"./util\");\n\nmodule.exports = function (/*Buffer|null*/ inBuffer, /** object */ options) {\n var entryList = [],\n entryTable = {},\n _comment = Buffer.alloc(0),\n mainHeader = new Headers.MainHeader(),\n loadedEntries = false;\n var password = null;\n const temporary = new Set();\n\n // assign options\n const opts = options;\n\n const { noSort, decoder } = opts;\n\n if (inBuffer) {\n // is a memory buffer\n readMainHeader(opts.readEntries);\n } else {\n // none. is a new file\n loadedEntries = true;\n }\n\n function makeTemporaryFolders() {\n const foldersList = new Set();\n\n // Make list of all folders in file\n for (const elem of Object.keys(entryTable)) {\n const elements = elem.split(\"/\");\n elements.pop(); // filename\n if (!elements.length) continue; // no folders\n for (let i = 0; i < elements.length; i++) {\n const sub = elements.slice(0, i + 1).join(\"/\") + \"/\";\n foldersList.add(sub);\n }\n }\n\n // create missing folders as temporary\n for (const elem of foldersList) {\n if (!(elem in entryTable)) {\n const tempfolder = new ZipEntry(opts);\n tempfolder.entryName = elem;\n tempfolder.attr = 0x10;\n tempfolder.temporary = true;\n entryList.push(tempfolder);\n entryTable[tempfolder.entryName] = tempfolder;\n temporary.add(tempfolder);\n }\n }\n }\n\n function readEntries() {\n loadedEntries = true;\n entryTable = {};\n if (mainHeader.diskEntries > (inBuffer.length - mainHeader.offset) / Utils.Constants.CENHDR) {\n throw Utils.Errors.DISK_ENTRY_TOO_LARGE();\n }\n entryList = new Array(mainHeader.diskEntries); // total number of entries\n var index = mainHeader.offset; // offset of first CEN header\n for (var i = 0; i < entryList.length; i++) {\n var tmp = index,\n entry = new ZipEntry(opts, inBuffer);\n entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n\n entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n if (entry.header.extraLength) {\n entry.extra = inBuffer.slice(tmp, (tmp += entry.header.extraLength));\n }\n\n if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);\n\n index += entry.header.centralHeaderSize;\n\n entryList[i] = entry;\n entryTable[entry.entryName] = entry;\n }\n temporary.clear();\n makeTemporaryFolders();\n }\n\n function readMainHeader(/*Boolean*/ readNow) {\n var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size\n max = Math.max(0, i - 0xffff), // 0xFFFF is the max zip file comment length\n n = max,\n endStart = inBuffer.length,\n endOffset = -1, // Start offset of the END header\n commentEnd = 0;\n\n // option to search header form entire file\n const trailingSpace = typeof opts.trailingSpace === \"boolean\" ? opts.trailingSpace : false;\n if (trailingSpace) max = 0;\n\n for (i; i >= n; i--) {\n if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'\n if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {\n // \"PK\\005\\006\"\n endOffset = i;\n commentEnd = i;\n endStart = i + Utils.Constants.ENDHDR;\n // We already found a regular signature, let's look just a bit further to check if there's any zip64 signature\n n = i - Utils.Constants.END64HDR;\n continue;\n }\n\n if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {\n // Found a zip64 signature, let's continue reading the whole zip64 record\n n = max;\n continue;\n }\n\n if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {\n // Found the zip64 record, let's determine it's size\n endOffset = i;\n endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;\n break;\n }\n }\n\n if (endOffset == -1) throw Utils.Errors.INVALID_FORMAT();\n\n mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));\n if (mainHeader.commentLength) {\n _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);\n }\n if (readNow) readEntries();\n }\n\n function sortEntries() {\n if (entryList.length > 1 && !noSort) {\n entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));\n }\n }\n\n return {\n /**\n * Returns an array of ZipEntry objects existent in the current opened archive\n * @return Array\n */\n get entries() {\n if (!loadedEntries) {\n readEntries();\n }\n return entryList.filter((e) => !temporary.has(e));\n },\n\n /**\n * Archive comment\n * @return {String}\n */\n get comment() {\n return decoder.decode(_comment);\n },\n set comment(val) {\n _comment = Utils.toBuffer(val, decoder.encode);\n mainHeader.commentLength = _comment.length;\n },\n\n getEntryCount: function () {\n if (!loadedEntries) {\n return mainHeader.diskEntries;\n }\n\n return entryList.length;\n },\n\n forEach: function (callback) {\n this.entries.forEach(callback);\n },\n\n /**\n * Returns a reference to the entry with the given name or null if entry is inexistent\n *\n * @param entryName\n * @return ZipEntry\n */\n getEntry: function (/*String*/ entryName) {\n if (!loadedEntries) {\n readEntries();\n }\n return entryTable[entryName] || null;\n },\n\n /**\n * Adds the given entry to the entry list\n *\n * @param entry\n */\n setEntry: function (/*ZipEntry*/ entry) {\n if (!loadedEntries) {\n readEntries();\n }\n entryList.push(entry);\n entryTable[entry.entryName] = entry;\n mainHeader.totalEntries = entryList.length;\n },\n\n /**\n * Removes the file with the given name from the entry list.\n *\n * If the entry is a directory, then all nested files and directories will be removed\n * @param entryName\n * @returns {void}\n */\n deleteFile: function (/*String*/ entryName, withsubfolders = true) {\n if (!loadedEntries) {\n readEntries();\n }\n const entry = entryTable[entryName];\n const list = this.getEntryChildren(entry, withsubfolders).map((child) => child.entryName);\n\n list.forEach(this.deleteEntry);\n },\n\n /**\n * Removes the entry with the given name from the entry list.\n *\n * @param {string} entryName\n * @returns {void}\n */\n deleteEntry: function (/*String*/ entryName) {\n if (!loadedEntries) {\n readEntries();\n }\n const entry = entryTable[entryName];\n const index = entryList.indexOf(entry);\n if (index >= 0) {\n entryList.splice(index, 1);\n delete entryTable[entryName];\n mainHeader.totalEntries = entryList.length;\n }\n },\n\n /**\n * Iterates and returns all nested files and directories of the given entry\n *\n * @param entry\n * @return Array\n */\n getEntryChildren: function (/*ZipEntry*/ entry, subfolders = true) {\n if (!loadedEntries) {\n readEntries();\n }\n if (typeof entry === \"object\") {\n if (entry.isDirectory && subfolders) {\n const list = [];\n const name = entry.entryName;\n\n for (const zipEntry of entryList) {\n if (zipEntry.entryName.startsWith(name)) {\n list.push(zipEntry);\n }\n }\n return list;\n } else {\n return [entry];\n }\n }\n return [];\n },\n\n /**\n * How many child elements entry has\n *\n * @param {ZipEntry} entry\n * @return {integer}\n */\n getChildCount: function (entry) {\n if (entry && entry.isDirectory) {\n const list = this.getEntryChildren(entry);\n return list.includes(entry) ? list.length - 1 : list.length;\n }\n return 0;\n },\n\n /**\n * Returns the zip file\n *\n * @return Buffer\n */\n compressToBuffer: function () {\n if (!loadedEntries) {\n readEntries();\n }\n sortEntries();\n\n const dataBlock = [];\n const headerBlocks = [];\n let totalSize = 0;\n let dindex = 0;\n\n mainHeader.size = 0;\n mainHeader.offset = 0;\n let totalEntries = 0;\n\n for (const entry of this.entries) {\n // compress data and set local and entry header accordingly. Reason why is called first\n const compressedData = entry.getCompressedData();\n entry.header.offset = dindex;\n\n // 1. construct local header\n const localHeader = entry.packLocalHeader();\n\n // 2. offsets\n const dataLength = localHeader.length + compressedData.length;\n dindex += dataLength;\n\n // 3. store values in sequence\n dataBlock.push(localHeader);\n dataBlock.push(compressedData);\n\n // 4. construct central header\n const centralHeader = entry.packCentralHeader();\n headerBlocks.push(centralHeader);\n // 5. update main header\n mainHeader.size += centralHeader.length;\n totalSize += dataLength + centralHeader.length;\n totalEntries++;\n }\n\n totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n // point to end of data and beginning of central directory first record\n mainHeader.offset = dindex;\n mainHeader.totalEntries = totalEntries;\n\n dindex = 0;\n const outBuffer = Buffer.alloc(totalSize);\n // write data blocks\n for (const content of dataBlock) {\n content.copy(outBuffer, dindex);\n dindex += content.length;\n }\n\n // write central directory entries\n for (const content of headerBlocks) {\n content.copy(outBuffer, dindex);\n dindex += content.length;\n }\n\n // write main header\n const mh = mainHeader.toBinary();\n if (_comment) {\n _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n }\n mh.copy(outBuffer, dindex);\n\n // Since we update entry and main header offsets,\n // they are no longer valid and we have to reset content\n // (Issue 64)\n\n inBuffer = outBuffer;\n loadedEntries = false;\n\n return outBuffer;\n },\n\n toAsyncBuffer: function (/*Function*/ onSuccess, /*Function*/ onFail, /*Function*/ onItemStart, /*Function*/ onItemEnd) {\n try {\n if (!loadedEntries) {\n readEntries();\n }\n sortEntries();\n\n const dataBlock = [];\n const centralHeaders = [];\n let totalSize = 0;\n let dindex = 0;\n let totalEntries = 0;\n\n mainHeader.size = 0;\n mainHeader.offset = 0;\n\n const compress2Buffer = function (entryLists) {\n if (entryLists.length > 0) {\n const entry = entryLists.shift();\n const name = entry.entryName + entry.extra.toString();\n if (onItemStart) onItemStart(name);\n entry.getCompressedDataAsync(function (compressedData) {\n if (onItemEnd) onItemEnd(name);\n entry.header.offset = dindex;\n\n // 1. construct local header\n const localHeader = entry.packLocalHeader();\n\n // 2. offsets\n const dataLength = localHeader.length + compressedData.length;\n dindex += dataLength;\n\n // 3. store values in sequence\n dataBlock.push(localHeader);\n dataBlock.push(compressedData);\n\n // central header\n const centalHeader = entry.packCentralHeader();\n centralHeaders.push(centalHeader);\n mainHeader.size += centalHeader.length;\n totalSize += dataLength + centalHeader.length;\n totalEntries++;\n\n compress2Buffer(entryLists);\n });\n } else {\n totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n // point to end of data and beginning of central directory first record\n mainHeader.offset = dindex;\n mainHeader.totalEntries = totalEntries;\n\n dindex = 0;\n const outBuffer = Buffer.alloc(totalSize);\n dataBlock.forEach(function (content) {\n content.copy(outBuffer, dindex); // write data blocks\n dindex += content.length;\n });\n centralHeaders.forEach(function (content) {\n content.copy(outBuffer, dindex); // write central directory entries\n dindex += content.length;\n });\n\n const mh = mainHeader.toBinary();\n if (_comment) {\n _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n }\n\n mh.copy(outBuffer, dindex); // write main header\n\n // Since we update entry and main header offsets, they are no\n // longer valid and we have to reset content using our new buffer\n // (Issue 64)\n\n inBuffer = outBuffer;\n loadedEntries = false;\n\n onSuccess(outBuffer);\n }\n };\n\n compress2Buffer(Array.from(this.entries));\n } catch (e) {\n onFail(e);\n }\n }\n };\n};\n","const Utils = require(\"./util\");\nconst pth = require(\"path\");\nconst ZipEntry = require(\"./zipEntry\");\nconst ZipFile = require(\"./zipFile\");\n\nconst get_Bool = (...val) => Utils.findLast(val, (c) => typeof c === \"boolean\");\nconst get_Str = (...val) => Utils.findLast(val, (c) => typeof c === \"string\");\nconst get_Fun = (...val) => Utils.findLast(val, (c) => typeof c === \"function\");\n\nconst defaultOptions = {\n // option \"noSort\" : if true it disables files sorting\n noSort: false,\n // read entries during load (initial loading may be slower)\n readEntries: false,\n // default method is none\n method: Utils.Constants.NONE,\n // file system\n fs: null\n};\n\nmodule.exports = function (/**String*/ input, /** object */ options) {\n let inBuffer = null;\n\n // create object based default options, allowing them to be overwritten\n const opts = Object.assign(Object.create(null), defaultOptions);\n\n // test input variable\n if (input && \"object\" === typeof input) {\n // if value is not buffer we accept it to be object with options\n if (!(input instanceof Uint8Array)) {\n Object.assign(opts, input);\n input = opts.input ? opts.input : undefined;\n if (opts.input) delete opts.input;\n }\n\n // if input is buffer\n if (Buffer.isBuffer(input)) {\n inBuffer = input;\n opts.method = Utils.Constants.BUFFER;\n input = undefined;\n }\n }\n\n // assign options\n Object.assign(opts, options);\n\n // instanciate utils filesystem\n const filetools = new Utils(opts);\n\n if (typeof opts.decoder !== \"object\" || typeof opts.decoder.encode !== \"function\" || typeof opts.decoder.decode !== \"function\") {\n opts.decoder = Utils.decoder;\n }\n\n // if input is file name we retrieve its content\n if (input && \"string\" === typeof input) {\n // load zip file\n if (filetools.fs.existsSync(input)) {\n opts.method = Utils.Constants.FILE;\n opts.filename = input;\n inBuffer = filetools.fs.readFileSync(input);\n } else {\n throw Utils.Errors.INVALID_FILENAME();\n }\n }\n\n // create variable\n const _zip = new ZipFile(inBuffer, opts);\n\n const { canonical, sanitize, zipnamefix } = Utils;\n\n function getEntry(/**Object*/ entry) {\n if (entry && _zip) {\n var item;\n // If entry was given as a file name\n if (typeof entry === \"string\") item = _zip.getEntry(pth.posix.normalize(entry));\n // if entry was given as a ZipEntry object\n if (typeof entry === \"object\" && typeof entry.entryName !== \"undefined\" && typeof entry.header !== \"undefined\") item = _zip.getEntry(entry.entryName);\n\n if (item) {\n return item;\n }\n }\n return null;\n }\n\n function fixPath(zipPath) {\n const { join, normalize, sep } = pth.posix;\n // convert windows file separators and normalize\n return join(\".\", normalize(sep + zipPath.split(\"\\\\\").join(sep) + sep));\n }\n\n function filenameFilter(filterfn) {\n if (filterfn instanceof RegExp) {\n // if filter is RegExp wrap it\n return (function (rx) {\n return function (filename) {\n return rx.test(filename);\n };\n })(filterfn);\n } else if (\"function\" !== typeof filterfn) {\n // if filter is not function we will replace it\n return () => true;\n }\n return filterfn;\n }\n\n // keep last character on folders\n const relativePath = (local, entry) => {\n let lastChar = entry.slice(-1);\n lastChar = lastChar === filetools.sep ? filetools.sep : \"\";\n return pth.relative(local, entry) + lastChar;\n };\n\n return {\n /**\n * Extracts the given entry from the archive and returns the content as a Buffer object\n * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n * @param {Buffer|string} [pass] - password\n * @return Buffer or Null in case of error\n */\n readFile: function (entry, pass) {\n var item = getEntry(entry);\n return (item && item.getData(pass)) || null;\n },\n\n /**\n * Returns how many child elements has on entry (directories) on files it is always 0\n * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n * @returns {integer}\n */\n childCount: function (entry) {\n const item = getEntry(entry);\n if (item) {\n return _zip.getChildCount(item);\n }\n },\n\n /**\n * Asynchronous readFile\n * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n * @param {callback} callback\n *\n * @return Buffer or Null in case of error\n */\n readFileAsync: function (entry, callback) {\n var item = getEntry(entry);\n if (item) {\n item.getDataAsync(callback);\n } else {\n callback(null, \"getEntry failed for:\" + entry);\n }\n },\n\n /**\n * Extracts the given entry from the archive and returns the content as plain text in the given encoding\n * @param {ZipEntry|string} entry - ZipEntry object or String with the full path of the entry\n * @param {string} encoding - Optional. If no encoding is specified utf8 is used\n *\n * @return String\n */\n readAsText: function (entry, encoding) {\n var item = getEntry(entry);\n if (item) {\n var data = item.getData();\n if (data && data.length) {\n return data.toString(encoding || \"utf8\");\n }\n }\n return \"\";\n },\n\n /**\n * Asynchronous readAsText\n * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n * @param {callback} callback\n * @param {string} [encoding] - Optional. If no encoding is specified utf8 is used\n *\n * @return String\n */\n readAsTextAsync: function (entry, callback, encoding) {\n var item = getEntry(entry);\n if (item) {\n item.getDataAsync(function (data, err) {\n if (err) {\n callback(data, err);\n return;\n }\n\n if (data && data.length) {\n callback(data.toString(encoding || \"utf8\"));\n } else {\n callback(\"\");\n }\n });\n } else {\n callback(\"\");\n }\n },\n\n /**\n * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory\n *\n * @param {ZipEntry|string} entry\n * @returns {void}\n */\n deleteFile: function (entry, withsubfolders = true) {\n // @TODO: test deleteFile\n var item = getEntry(entry);\n if (item) {\n _zip.deleteFile(item.entryName, withsubfolders);\n }\n },\n\n /**\n * Remove the entry from the file or directory without affecting any nested entries\n *\n * @param {ZipEntry|string} entry\n * @returns {void}\n */\n deleteEntry: function (entry) {\n // @TODO: test deleteEntry\n var item = getEntry(entry);\n if (item) {\n _zip.deleteEntry(item.entryName);\n }\n },\n\n /**\n * Adds a comment to the zip. The zip must be rewritten after adding the comment.\n *\n * @param {string} comment\n */\n addZipComment: function (comment) {\n // @TODO: test addZipComment\n _zip.comment = comment;\n },\n\n /**\n * Returns the zip comment\n *\n * @return String\n */\n getZipComment: function () {\n return _zip.comment || \"\";\n },\n\n /**\n * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment\n * The comment cannot exceed 65535 characters in length\n *\n * @param {ZipEntry} entry\n * @param {string} comment\n */\n addZipEntryComment: function (entry, comment) {\n var item = getEntry(entry);\n if (item) {\n item.comment = comment;\n }\n },\n\n /**\n * Returns the comment of the specified entry\n *\n * @param {ZipEntry} entry\n * @return String\n */\n getZipEntryComment: function (entry) {\n var item = getEntry(entry);\n if (item) {\n return item.comment || \"\";\n }\n return \"\";\n },\n\n /**\n * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content\n *\n * @param {ZipEntry} entry\n * @param {Buffer} content\n */\n updateFile: function (entry, content) {\n var item = getEntry(entry);\n if (item) {\n item.setData(content);\n }\n },\n\n /**\n * Adds a file from the disk to the archive\n *\n * @param {string} localPath File to add to zip\n * @param {string} [zipPath] Optional path inside the zip\n * @param {string} [zipName] Optional name for the file\n * @param {string} [comment] Optional file comment\n */\n addLocalFile: function (localPath, zipPath, zipName, comment) {\n if (filetools.fs.existsSync(localPath)) {\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n // p - local file name\n const p = pth.win32.basename(pth.win32.normalize(localPath));\n\n // add file name into zippath\n zipPath += zipName ? zipName : p;\n\n // read file attributes\n const _attr = filetools.fs.statSync(localPath);\n\n // get file content\n const data = _attr.isFile() ? filetools.fs.readFileSync(localPath) : Buffer.alloc(0);\n\n // if folder\n if (_attr.isDirectory()) zipPath += filetools.sep;\n\n // add file into zip file\n this.addFile(zipPath, data, comment, _attr);\n } else {\n throw Utils.Errors.FILE_NOT_FOUND(localPath);\n }\n },\n\n /**\n * Callback for showing if everything was done.\n *\n * @callback doneCallback\n * @param {Error} err - Error object\n * @param {boolean} done - was request fully completed\n */\n\n /**\n * Adds a file from the disk to the archive\n *\n * @param {(object|string)} options - options object, if it is string it us used as localPath.\n * @param {string} options.localPath - Local path to the file.\n * @param {string} [options.comment] - Optional file comment.\n * @param {string} [options.zipPath] - Optional path inside the zip\n * @param {string} [options.zipName] - Optional name for the file\n * @param {doneCallback} callback - The callback that handles the response.\n */\n addLocalFileAsync: function (options, callback) {\n options = typeof options === \"object\" ? options : { localPath: options };\n const localPath = pth.resolve(options.localPath);\n const { comment } = options;\n let { zipPath, zipName } = options;\n const self = this;\n\n filetools.fs.stat(localPath, function (err, stats) {\n if (err) return callback(err, false);\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n // p - local file name\n const p = pth.win32.basename(pth.win32.normalize(localPath));\n // add file name into zippath\n zipPath += zipName ? zipName : p;\n\n if (stats.isFile()) {\n filetools.fs.readFile(localPath, function (err, data) {\n if (err) return callback(err, false);\n self.addFile(zipPath, data, comment, stats);\n return setImmediate(callback, undefined, true);\n });\n } else if (stats.isDirectory()) {\n zipPath += filetools.sep;\n self.addFile(zipPath, Buffer.alloc(0), comment, stats);\n return setImmediate(callback, undefined, true);\n }\n });\n },\n\n /**\n * Adds a local directory and all its nested files and directories to the archive\n *\n * @param {string} localPath - local path to the folder\n * @param {string} [zipPath] - optional path inside zip\n * @param {(RegExp|function)} [filter] - optional RegExp or Function if files match will be included.\n */\n addLocalFolder: function (localPath, zipPath, filter) {\n // Prepare filter\n filter = filenameFilter(filter);\n\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n // normalize the path first\n localPath = pth.normalize(localPath);\n\n if (filetools.fs.existsSync(localPath)) {\n const items = filetools.findFiles(localPath);\n const self = this;\n\n if (items.length) {\n for (const filepath of items) {\n const p = pth.join(zipPath, relativePath(localPath, filepath));\n if (filter(p)) {\n self.addLocalFile(filepath, pth.dirname(p));\n }\n }\n }\n } else {\n throw Utils.Errors.FILE_NOT_FOUND(localPath);\n }\n },\n\n /**\n * Asynchronous addLocalFolder\n * @param {string} localPath\n * @param {callback} callback\n * @param {string} [zipPath] optional path inside zip\n * @param {RegExp|function} [filter] optional RegExp or Function if files match will\n * be included.\n */\n addLocalFolderAsync: function (localPath, callback, zipPath, filter) {\n // Prepare filter\n filter = filenameFilter(filter);\n\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n // normalize the path first\n localPath = pth.normalize(localPath);\n\n var self = this;\n filetools.fs.open(localPath, \"r\", function (err) {\n if (err && err.code === \"ENOENT\") {\n callback(undefined, Utils.Errors.FILE_NOT_FOUND(localPath));\n } else if (err) {\n callback(undefined, err);\n } else {\n var items = filetools.findFiles(localPath);\n var i = -1;\n\n var next = function () {\n i += 1;\n if (i < items.length) {\n var filepath = items[i];\n var p = relativePath(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n p = p\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix\n if (filter(p)) {\n filetools.fs.stat(filepath, function (er0, stats) {\n if (er0) callback(undefined, er0);\n if (stats.isFile()) {\n filetools.fs.readFile(filepath, function (er1, data) {\n if (er1) {\n callback(undefined, er1);\n } else {\n self.addFile(zipPath + p, data, \"\", stats);\n next();\n }\n });\n } else {\n self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", stats);\n next();\n }\n });\n } else {\n process.nextTick(() => {\n next();\n });\n }\n } else {\n callback(true, undefined);\n }\n };\n\n next();\n }\n });\n },\n\n /**\n * Adds a local directory and all its nested files and directories to the archive\n *\n * @param {object | string} options - options object, if it is string it us used as localPath.\n * @param {string} options.localPath - Local path to the folder.\n * @param {string} [options.zipPath] - optional path inside zip.\n * @param {RegExp|function} [options.filter] - optional RegExp or Function if files match will be included.\n * @param {function|string} [options.namefix] - optional function to help fix filename\n * @param {doneCallback} callback - The callback that handles the response.\n *\n */\n addLocalFolderAsync2: function (options, callback) {\n const self = this;\n options = typeof options === \"object\" ? options : { localPath: options };\n localPath = pth.resolve(fixPath(options.localPath));\n let { zipPath, filter, namefix } = options;\n\n if (filter instanceof RegExp) {\n filter = (function (rx) {\n return function (filename) {\n return rx.test(filename);\n };\n })(filter);\n } else if (\"function\" !== typeof filter) {\n filter = function () {\n return true;\n };\n }\n\n // fix ZipPath\n zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n // Check Namefix function\n if (namefix == \"latin1\") {\n namefix = (str) =>\n str\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix (latin1 characers only)\n }\n\n if (typeof namefix !== \"function\") namefix = (str) => str;\n\n // internal, create relative path + fix the name\n const relPathFix = (entry) => pth.join(zipPath, namefix(relativePath(localPath, entry)));\n const fileNameFix = (entry) => pth.win32.basename(pth.win32.normalize(namefix(entry)));\n\n filetools.fs.open(localPath, \"r\", function (err) {\n if (err && err.code === \"ENOENT\") {\n callback(undefined, Utils.Errors.FILE_NOT_FOUND(localPath));\n } else if (err) {\n callback(undefined, err);\n } else {\n filetools.findFilesAsync(localPath, function (err, fileEntries) {\n if (err) return callback(err);\n fileEntries = fileEntries.filter((dir) => filter(relPathFix(dir)));\n if (!fileEntries.length) callback(undefined, false);\n\n setImmediate(\n fileEntries.reverse().reduce(function (next, entry) {\n return function (err, done) {\n if (err || done === false) return setImmediate(next, err, false);\n\n self.addLocalFileAsync(\n {\n localPath: entry,\n zipPath: pth.dirname(relPathFix(entry)),\n zipName: fileNameFix(entry)\n },\n next\n );\n };\n }, callback)\n );\n });\n }\n });\n },\n\n /**\n * Adds a local directory and all its nested files and directories to the archive\n *\n * @param {string} localPath - path where files will be extracted\n * @param {object} props - optional properties\n * @param {string} [props.zipPath] - optional path inside zip\n * @param {RegExp|function} [props.filter] - optional RegExp or Function if files match will be included.\n * @param {function|string} [props.namefix] - optional function to help fix filename\n */\n addLocalFolderPromise: function (localPath, props) {\n return new Promise((resolve, reject) => {\n this.addLocalFolderAsync2(Object.assign({ localPath }, props), (err, done) => {\n if (err) reject(err);\n if (done) resolve(this);\n });\n });\n },\n\n /**\n * Allows you to create a entry (file or directory) in the zip file.\n * If you want to create a directory the entryName must end in / and a null buffer should be provided.\n * Comment and attributes are optional\n *\n * @param {string} entryName\n * @param {Buffer | string} content - file content as buffer or utf8 coded string\n * @param {string} [comment] - file comment\n * @param {number | object} [attr] - number as unix file permissions, object as filesystem Stats object\n */\n addFile: function (entryName, content, comment, attr) {\n entryName = zipnamefix(entryName);\n let entry = getEntry(entryName);\n const update = entry != null;\n\n // prepare new entry\n if (!update) {\n entry = new ZipEntry(opts);\n entry.entryName = entryName;\n }\n entry.comment = comment || \"\";\n\n const isStat = \"object\" === typeof attr && attr instanceof filetools.fs.Stats;\n\n // last modification time from file stats\n if (isStat) {\n entry.header.time = attr.mtime;\n }\n\n // Set file attribute\n var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)\n\n // extended attributes field for Unix\n // set file type either S_IFDIR / S_IFREG\n let unix = entry.isDirectory ? 0x4000 : 0x8000;\n\n if (isStat) {\n // File attributes from file stats\n unix |= 0xfff & attr.mode;\n } else if (\"number\" === typeof attr) {\n // attr from given attr values\n unix |= 0xfff & attr;\n } else {\n // Default values:\n unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)\n }\n\n fileattr = (fileattr | (unix << 16)) >>> 0; // add attributes\n\n entry.attr = fileattr;\n\n entry.setData(content);\n if (!update) _zip.setEntry(entry);\n\n return entry;\n },\n\n /**\n * Returns an array of ZipEntry objects representing the files and folders inside the archive\n *\n * @param {string} [password]\n * @returns Array\n */\n getEntries: function (password) {\n _zip.password = password;\n return _zip ? _zip.entries : [];\n },\n\n /**\n * Returns a ZipEntry object representing the file or folder specified by ``name``.\n *\n * @param {string} name\n * @return ZipEntry\n */\n getEntry: function (/**String*/ name) {\n return getEntry(name);\n },\n\n getEntryCount: function () {\n return _zip.getEntryCount();\n },\n\n forEach: function (callback) {\n return _zip.forEach(callback);\n },\n\n /**\n * Extracts the given entry to the given targetPath\n * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted\n *\n * @param {string|ZipEntry} entry - ZipEntry object or String with the full path of the entry\n * @param {string} targetPath - Target folder where to write the file\n * @param {boolean} [maintainEntryPath=true] - If maintainEntryPath is true and the entry is inside a folder, the entry folder will be created in targetPath as well. Default is TRUE\n * @param {boolean} [overwrite=false] - If the file already exists at the target path, the file will be overwriten if this is true.\n * @param {boolean} [keepOriginalPermission=false] - The file will be set as the permission from the entry if this is true.\n * @param {string} [outFileName] - String If set will override the filename of the extracted file (Only works if the entry is a file)\n *\n * @return Boolean\n */\n extractEntryTo: function (entry, targetPath, maintainEntryPath, overwrite, keepOriginalPermission, outFileName) {\n overwrite = get_Bool(false, overwrite);\n keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n maintainEntryPath = get_Bool(true, maintainEntryPath);\n outFileName = get_Str(keepOriginalPermission, outFileName);\n\n var item = getEntry(entry);\n if (!item) {\n throw Utils.Errors.NO_ENTRY();\n }\n\n var entryName = canonical(item.entryName);\n\n var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));\n\n if (item.isDirectory) {\n var children = _zip.getEntryChildren(item);\n children.forEach(function (child) {\n if (child.isDirectory) return;\n var content = child.getData();\n if (!content) {\n throw Utils.Errors.CANT_EXTRACT_FILE();\n }\n var name = canonical(child.entryName);\n var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name));\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;\n filetools.writeFileTo(childName, content, overwrite, fileAttr);\n });\n return true;\n }\n\n var content = item.getData(_zip.password);\n if (!content) throw Utils.Errors.CANT_EXTRACT_FILE();\n\n if (filetools.fs.existsSync(target) && !overwrite) {\n throw Utils.Errors.CANT_OVERRIDE();\n }\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n filetools.writeFileTo(target, content, overwrite, fileAttr);\n\n return true;\n },\n\n /**\n * Test the archive\n * @param {string} [pass]\n */\n test: function (pass) {\n if (!_zip) {\n return false;\n }\n\n for (var entry in _zip.entries) {\n try {\n if (entry.isDirectory) {\n continue;\n }\n var content = _zip.entries[entry].getData(pass);\n if (!content) {\n return false;\n }\n } catch (err) {\n return false;\n }\n }\n return true;\n },\n\n /**\n * Extracts the entire archive to the given location\n *\n * @param {string} targetPath Target location\n * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.\n * Default is FALSE\n * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.\n * Default is FALSE\n * @param {string|Buffer} [pass] password\n */\n extractAllTo: function (targetPath, overwrite, keepOriginalPermission, pass) {\n keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n pass = get_Str(keepOriginalPermission, pass);\n overwrite = get_Bool(false, overwrite);\n if (!_zip) throw Utils.Errors.NO_ZIP();\n\n _zip.entries.forEach(function (entry) {\n var entryName = sanitize(targetPath, canonical(entry.entryName));\n if (entry.isDirectory) {\n filetools.makeDir(entryName);\n return;\n }\n var content = entry.getData(pass);\n if (!content) {\n throw Utils.Errors.CANT_EXTRACT_FILE();\n }\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n filetools.writeFileTo(entryName, content, overwrite, fileAttr);\n try {\n filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);\n } catch (err) {\n throw Utils.Errors.CANT_EXTRACT_FILE();\n }\n });\n },\n\n /**\n * Asynchronous extractAllTo\n *\n * @param {string} targetPath Target location\n * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.\n * Default is FALSE\n * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.\n * Default is FALSE\n * @param {function} callback The callback will be executed when all entries are extracted successfully or any error is thrown.\n */\n extractAllToAsync: function (targetPath, overwrite, keepOriginalPermission, callback) {\n callback = get_Fun(overwrite, keepOriginalPermission, callback);\n keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n overwrite = get_Bool(false, overwrite);\n if (!callback) {\n return new Promise((resolve, reject) => {\n this.extractAllToAsync(targetPath, overwrite, keepOriginalPermission, function (err) {\n if (err) {\n reject(err);\n } else {\n resolve(this);\n }\n });\n });\n }\n if (!_zip) {\n callback(Utils.Errors.NO_ZIP());\n return;\n }\n\n targetPath = pth.resolve(targetPath);\n // convert entryName to\n const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName)));\n const getError = (msg, file) => new Error(msg + ': \"' + file + '\"');\n\n // separate directories from files\n const dirEntries = [];\n const fileEntries = [];\n _zip.entries.forEach((e) => {\n if (e.isDirectory) {\n dirEntries.push(e);\n } else {\n fileEntries.push(e);\n }\n });\n\n // Create directory entries first synchronously\n // this prevents race condition and assures folders are there before writing files\n for (const entry of dirEntries) {\n const dirPath = getPath(entry);\n // The reverse operation for attr depend on method addFile()\n const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n try {\n filetools.makeDir(dirPath);\n if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr);\n // in unix timestamp will change if files are later added to folder, but still\n filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);\n } catch (er) {\n callback(getError(\"Unable to create folder\", dirPath));\n }\n }\n\n fileEntries.reverse().reduce(function (next, entry) {\n return function (err) {\n if (err) {\n next(err);\n } else {\n const entryName = pth.normalize(canonical(entry.entryName));\n const filePath = sanitize(targetPath, entryName);\n entry.getDataAsync(function (content, err_1) {\n if (err_1) {\n next(err_1);\n } else if (!content) {\n next(Utils.Errors.CANT_EXTRACT_FILE());\n } else {\n // The reverse operation for attr depend on method addFile()\n const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {\n if (!succ) {\n next(getError(\"Unable to write file\", filePath));\n }\n filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function (err_2) {\n if (err_2) {\n next(getError(\"Unable to set times\", filePath));\n } else {\n next();\n }\n });\n });\n }\n });\n }\n };\n }, callback)();\n },\n\n /**\n * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip\n *\n * @param {string} targetFileName\n * @param {function} callback\n */\n writeZip: function (targetFileName, callback) {\n if (arguments.length === 1) {\n if (typeof targetFileName === \"function\") {\n callback = targetFileName;\n targetFileName = \"\";\n }\n }\n\n if (!targetFileName && opts.filename) {\n targetFileName = opts.filename;\n }\n if (!targetFileName) return;\n\n var zipData = _zip.compressToBuffer();\n if (zipData) {\n var ok = filetools.writeFileTo(targetFileName, zipData, true);\n if (typeof callback === \"function\") callback(!ok ? new Error(\"failed\") : null, \"\");\n }\n },\n\n /**\n *\n * @param {string} targetFileName\n * @param {object} [props]\n * @param {boolean} [props.overwrite=true] If the file already exists at the target path, the file will be overwriten if this is true.\n * @param {boolean} [props.perm] The file will be set as the permission from the entry if this is true.\n\n * @returns {Promise<void>}\n */\n writeZipPromise: function (/**String*/ targetFileName, /* object */ props) {\n const { overwrite, perm } = Object.assign({ overwrite: true }, props);\n\n return new Promise((resolve, reject) => {\n // find file name\n if (!targetFileName && opts.filename) targetFileName = opts.filename;\n if (!targetFileName) reject(\"ADM-ZIP: ZIP File Name Missing\");\n\n this.toBufferPromise().then((zipData) => {\n const ret = (done) => (done ? resolve(done) : reject(\"ADM-ZIP: Wasn't able to write zip file\"));\n filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);\n }, reject);\n });\n },\n\n /**\n * @returns {Promise<Buffer>} A promise to the Buffer.\n */\n toBufferPromise: function () {\n return new Promise((resolve, reject) => {\n _zip.toAsyncBuffer(resolve, reject);\n });\n },\n\n /**\n * Returns the content of the entire zip file as a Buffer object\n *\n * @prop {function} [onSuccess]\n * @prop {function} [onFail]\n * @prop {function} [onItemStart]\n * @prop {function} [onItemEnd]\n * @returns {Buffer}\n */\n toBuffer: function (onSuccess, onFail, onItemStart, onItemEnd) {\n if (typeof onSuccess === \"function\") {\n _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);\n return null;\n }\n return _zip.compressToBuffer();\n }\n };\n};\n","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 /** 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 * 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 AdmZip from \"adm-zip\";\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 const { finalParser: identifiedFinalParser } =\n this.#_identifyCommandChainAndParsers(processArgs, this, [], [this]);\n\n const saveDxtIndex = processArgs.findIndex(arg => (arg ?? \"\").toLowerCase() === \"--s-save-dxt\");\n if (saveDxtIndex !== -1) {\n if (this.#_handleSaveDxtFlag(processArgs, saveDxtIndex)) {\n return true;\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 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 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 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 /**\n * Handles the --s-save-DXT system flag to generate DXT packages for MCP servers\n */\n #_handleSaveDxtFlag(processArgs: string[], saveDxtIndex: number): boolean {\n try {\n // Find all MCP subcommands\n const mcpSubCommands = Array.from(this.#subCommands.values()).filter(\n (subCmd: any) => subCmd.isMcp === true\n );\n\n if (mcpSubCommands.length === 0) {\n console.log(chalk.yellow(\"No MCP servers found in this ArgParser instance.\"));\n console.log(chalk.gray(\"Use addMcpSubCommand() to add MCP server functionality.\"));\n if (typeof process === \"object\" && typeof process.exit === \"function\") {\n process.exit(0);\n }\n return true;\n }\n\n // Get optional directory parameter\n let outputDir = \".\";\n if (saveDxtIndex + 1 < processArgs.length) {\n const nextArg = processArgs[saveDxtIndex + 1];\n if (nextArg && !nextArg.startsWith(\"-\")) {\n outputDir = nextArg;\n }\n }\n\n // Ensure output directory exists\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n console.log(chalk.cyan(`\\n🔧 Generating DXT packages for ${mcpSubCommands.length} MCP server(s)...`));\n\n // Generate DXT package for each MCP server\n for (const subCmd of mcpSubCommands) {\n this.#_generateDxtPackage(subCmd as any, outputDir);\n }\n\n console.log(chalk.green(`\\n✅ DXT package generation completed!`));\n console.log(chalk.gray(`Output directory: ${path.resolve(outputDir)}`));\n\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 generating DXT packages: ${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 * Generates a DXT package for a single MCP server\n */\n #_generateDxtPackage(mcpSubCommand: any, outputDir: string): void {\n // Extract server information from the MCP subcommand\n const serverInfo = this.#_extractMcpServerInfo(mcpSubCommand);\n\n // Generate tools for this MCP server\n const tools = this.#_generateMcpToolsForDxt(mcpSubCommand);\n\n // Create manifest.json\n const manifest = this.#_createDxtManifest(serverInfo, tools);\n\n // Create DXT zip file\n const zip = new AdmZip();\n\n // Add manifest.json to zip\n zip.addFile(\"manifest.json\", Buffer.from(JSON.stringify(manifest, null, 2)));\n\n // Create a simple server entry point\n const serverScript = this.#_createServerScript(serverInfo);\n zip.addFile(\"server/index.js\", Buffer.from(serverScript));\n\n // Write the DXT file\n const dxtFileName = `${serverInfo.name.replace(/[^a-zA-Z0-9_-]/g, \"_\")}.dxt`;\n const dxtFilePath = path.join(outputDir, dxtFileName);\n\n zip.writeZip(dxtFilePath);\n\n console.log(chalk.green(` ✓ Generated: ${dxtFileName}`));\n console.log(chalk.gray(` Server: ${serverInfo.name} v${serverInfo.version}`));\n console.log(chalk.gray(` Tools: ${tools.length} tool(s)`));\n }\n\n /**\n * Extracts server information from MCP subcommand\n */\n #_extractMcpServerInfo(mcpSubCommand: any): { name: string; version: string; description?: string } {\n // Use the stored server info if available\n if (mcpSubCommand.mcpServerInfo) {\n return mcpSubCommand.mcpServerInfo;\n }\n\n // Fallback to default info\n const defaultInfo = {\n name: mcpSubCommand.name || \"mcp-server\",\n version: \"1.0.0\",\n description: mcpSubCommand.description || \"MCP server generated from ArgParser\"\n };\n\n return defaultInfo;\n }\n\n /**\n * Generates MCP tools for DXT manifest\n */\n #_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 as any).toMcpTools === 'function') {\n // Use the actual MCP tool generation\n const toolOptions = mcpSubCommand?.mcpToolOptions;\n const mcpTools = (this 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\n const tools: Array<{ name: string; description?: string }> = [];\n\n // Add main command tool if there's a handler\n if (this.#handler) {\n const appName = this.#appName || \"main\";\n const commandName = this.#appCommandName || appName.toLowerCase().replace(/[^a-zA-Z0-9_-]/g, \"_\");\n\n tools.push({\n name: commandName,\n description: this.#description || `Execute ${appName} command`\n });\n }\n\n // Add subcommand tools (excluding MCP subcommands to avoid recursion)\n for (const [name, subCmd] of this.#subCommands) {\n if (!(subCmd as any).isMcp) {\n const commandName = this.#appCommandName || this.#appName?.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 /**\n * Creates DXT manifest.json structure\n */\n #_createDxtManifest(serverInfo: { name: string; version: string; description?: string }, tools: Array<{ name: string; description?: string }>): any {\n return {\n name: serverInfo.name,\n version: serverInfo.version,\n description: serverInfo.description || \"MCP server generated from ArgParser\",\n server: {\n entry_point: \"server/index.js\",\n runtime: \"node\",\n transport: \"stdio\"\n },\n tools: tools,\n metadata: {\n generator: \"@alcyone-labs/arg-parser\",\n generator_version: \"1.2.0\",\n generated_at: new Date().toISOString()\n }\n };\n }\n\n /**\n * Creates a simple server script for the DXT package\n */\n #_createServerScript(serverInfo: { name: string; version: string; description?: string }): string {\n return `#!/usr/bin/env node\n\n// Generated MCP server for ${serverInfo.name}\n// This is a placeholder server script for the DXT package\n// In a real implementation, this would contain the actual MCP server code\n\nconsole.error(\"MCP Server: ${serverInfo.name} v${serverInfo.version}\");\nconsole.error(\"This is a generated DXT package from @alcyone-labs/arg-parser\");\nconsole.error(\"To use this server, you would need to implement the actual MCP server logic\");\n\n// Basic MCP server structure\nconst server = {\n name: \"${serverInfo.name}\",\n version: \"${serverInfo.version}\",\n description: \"${serverInfo.description || \"Generated MCP server\"}\"\n};\n\n// Export for potential use\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = server;\n}\n`;\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 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 if (options?.outputSchemaMap?.[toolName]) {\n // Return structured data with both content and structuredContent when custom output schema is defined\n const errorData = {\n error: errPayload.message,\n files: [],\n commandExecuted: null,\n stderrOutput: errPayload.details?.stderr || null,\n };\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(errorData, null, 2)\n }\n ],\n structuredContent: errorData\n };\n }\n return {\n success: false,\n message: errPayload.message,\n data: errPayload.details,\n };\n }\n\n let handlerResponse = parseResult[\"handlerResponse\"];\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 const handlerContext: IHandlerContext<any, any> = {\n args: currentArgs,\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 const errorMsg = `Handler error: ${handlerError.message || String(handlerError)}`;\n if (options?.outputSchemaMap?.[toolName]) {\n // Return structured data with both content and structuredContent when custom output schema is defined\n const errorData = {\n error: errorMsg,\n files: [],\n commandExecuted: null,\n stderrOutput: null,\n };\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(errorData, null, 2)\n }\n ],\n structuredContent: errorData\n };\n }\n return { success: false, message: errorMsg };\n }\n }\n }\n\n if (options?.outputSchemaMap?.[toolName]) {\n // When there's a custom output schema, ensure both content and structuredContent are provided\n if (handlerResponse && typeof handlerResponse === 'object') {\n // If handler already returned MCP format with content field\n if (handlerResponse.content && Array.isArray(handlerResponse.content)) {\n // Handler already returned MCP format - use it as structured content\n // The output schema should match the entire response structure\n return {\n content: handlerResponse.content,\n structuredContent: handlerResponse\n };\n } else {\n // Handler returned plain structured data, wrap it in MCP format\n return {\n content: [\n {\n type: \"text\",\n text: typeof handlerResponse === 'string' ? handlerResponse : JSON.stringify(handlerResponse, null, 2)\n }\n ],\n structuredContent: handlerResponse\n };\n }\n }\n\n // Fallback for non-object responses\n return {\n content: [\n {\n type: \"text\",\n text: String(handlerResponse)\n }\n ],\n structuredContent: handlerResponse\n };\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 structured data with both content and structuredContent when custom output schema is defined\n const errorData = {\n error: errorMsg,\n files: [],\n commandExecuted: null,\n stderrOutput: errorDetails?.stderr || null,\n };\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(errorData, null, 2)\n }\n ],\n structuredContent: errorData\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 async createMcpServer(\n serverInfo: {\n name: string;\n version: string;\n description?: string;\n },\n toolOptions?: GenerateMcpToolsOptions,\n ): Promise<any> {\n // Dynamic import to avoid circular dependencies and support ES modules\n const { McpServer } = await import(\"@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 // 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 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 = 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 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 = 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 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 public parse(processArgs: string[], options?: any): any {\n const result = super.parse(processArgs, options);\n\n const anyResult = result as any;\n if (anyResult._fuzzyModePreventedExecution) {\n return result;\n }\n\n if (anyResult._asyncHandlerPromise) {\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 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 public static withMcp<T = any>(\n options?: ConstructorParameters<typeof ArgParserBase>[0],\n initialFlags?: ConstructorParameters<typeof ArgParserBase>[1],\n ): ArgParser<T> {\n // Ensure handleErrors is false for MCP compatibility unless explicitly overridden\n const mcpOptions = {\n handleErrors: false,\n ...options,\n };\n return new ArgParser<T>(mcpOptions as any, initialFlags);\n }\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 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","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\", \"reject\", \"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 this._transport = transport;\n this._transport.onclose = () => {\n this._onclose();\n };\n this._transport.onerror = (error) => {\n this._onerror(error);\n };\n this._transport.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 };\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};\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 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 function parseAnyDef() {\n return {};\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\";\nexport function parseEffectsDef(_def, refs) {\n return refs.effectStrategy === \"input\"\n ? parseDef(_def.schema._def, refs)\n : {};\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\";\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 }) ?? {},\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\";\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 }) || {};\n const values = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n }) || {};\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","export function parseNeverDef() {\n return {\n not: {},\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 { ZodOptional } from \"zod\";\nimport { 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 instanceof 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\";\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: {},\n },\n innerSchema,\n ],\n }\n : {};\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","export function parseUndefinedDef() {\n return {\n not: {},\n };\n}\n","export function parseUnknownDef() {\n return {};\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();\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();\n case ZodFirstPartyTypeKind.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind.ZodAny:\n return parseAnyDef();\n case ZodFirstPartyTypeKind.ZodUnknown:\n return parseUnknownDef();\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\";\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 {};\n }\n return refs.$refStrategy === \"seen\" ? {} : undefined;\n }\n }\n};\nconst 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};\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\";\nconst zodToJsonSchema = (schema, options) => {\n const refs = getRefs(options);\n const 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) ?? {},\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) ?? {};\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 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) {\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 /**\n * Registers a resource with a config object and callback.\n * For static resources, use a URI string. For dynamic resources, use a ResourceTemplate.\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};\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) {\n this._endpoint = _endpoint;\n this.res = res;\n this._sessionId = randomUUID();\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;\n if (!this._sseResponse) {\n const message = \"SSE connection not established\";\n res.writeHead(500).end(message);\n throw new Error(message);\n }\n const authInfo = req.auth;\n let body;\n try {\n const ct = contentType.parse((_a = req.headers[\"content-type\"]) !== null && _a !== void 0 ? _a : \"\");\n if (ct.type !== \"application/json\") {\n throw new Error(`Unsupported content-type: ${ct}`);\n }\n body = parsedBody !== null && parsedBody !== void 0 ? parsedBody : await getRawBody(req, {\n limit: MAXIMUM_MESSAGE_SIZE,\n encoding: (_b = ct.parameters.charset) !== null && _b !== void 0 ? _b : \"utf-8\",\n });\n }\n catch (error) {\n res.writeHead(400).end(String(error));\n (_c = this.onerror) === null || _c === void 0 ? void 0 : _c.call(this, error);\n return;\n }\n try {\n await this.handleMessage(typeof body === 'string' ? JSON.parse(body) : body, { authInfo });\n }\n catch (_d) {\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;\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 }\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 * Handles an incoming HTTP request, whether GET or POST\n */\n async handleRequest(req, res, parsedBody) {\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 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 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 });\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 });\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 if (!this.validateSession(req, res)) {\n return;\n }\n if (!this.validateProtocolVersion(req, res)) {\n return;\n }\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"],"names":["constants","errors","E","message","args","_","n","msg","exports","fsystem","require$$0","pth","require$$1","Constants","require$$2","Errors","require$$3","isWin","is_Obj","obj","crcTable","t","c","k","Utils","opts","utils","folder","self","mkdirSync","fpath","resolvedPath","name","stat","path","content","overwrite","attr","fd","callback","exist","err","exists","findSync","dir","pattern","recursive","files","file","cb","results","list","list_length","res","crc","byte","buf","len","off","method","safeSuffix","arr","i","prefix","parts","l","input","encoder","buffer","index","slice","val","date","time","fattr","fs","_path","_obj","newAttr","_stat","decoder","data","utilModule","require$$4","entryHeader","_verMade","_version","_flags","_method","_time","_crc","_compressedSize","_size","_fnameLen","_extraLen","_comLen","_diskStart","_inattr","_attr","_offset","_localHeader","uint32","uint8","extraStart","extraEnd","bytes","nr","mainHeader","_volumeEntries","_totalEntries","_commentLength","b","offset","offs","headers","deflater","inbuf","zlib","tmp","total","written","part","version","inflater","expectedLength","option","randomFillSync","crctable","j","uMul","a","crc32update","pCrc32","bval","genSalt","salt","config","Initkeys","pw","pass","byteValue","keys","make_decrypter","pwd","result","pos","make_encrypter","decrypt","header","decrypter","verifyByte","_salter","encrypt","oldlike","encrypter","zipcrypto","methods","Headers","Methods","zipEntry","options","_centralHeader","_entryName","_comment","_isDirectory","uncompressedData","_extra","_extralocal","_efs","getCompressedDataFromZip","crc32OK","descriptor","dataEndOffset","decompress","async","compressedData","compress","deflated","readUInt64LE","parseExtra","signature","size","parseZip64ExtendedInformation","compressedSize","diskNumStart","lastChar","value","addpos","localHeaderBuf","localHeader","ZipEntry","zipFile","inBuffer","entryList","entryTable","loadedEntries","temporary","noSort","readMainHeader","makeTemporaryFolders","foldersList","elem","elements","sub","tempfolder","readEntries","entry","readNow","max","endStart","endOffset","commentEnd","sortEntries","e","entryName","withsubfolders","child","subfolders","dataBlock","headerBlocks","totalSize","dindex","totalEntries","dataLength","centralHeader","outBuffer","mh","onSuccess","onFail","onItemStart","onItemEnd","centralHeaders","compress2Buffer","entryLists","centalHeader","ZipFile","get_Bool","get_Str","get_Fun","defaultOptions","admZip","filetools","_zip","canonical","sanitize","zipnamefix","getEntry","item","fixPath","zipPath","join","normalize","sep","filenameFilter","filterfn","rx","filename","relativePath","local","encoding","comment","localPath","zipName","p","stats","filter","items","filepath","next","er0","er1","namefix","str","relPathFix","fileNameFix","fileEntries","done","props","resolve","reject","update","isStat","fileattr","unix","password","targetPath","maintainEntryPath","keepOriginalPermission","outFileName","target","children","childName","fileAttr","getPath","getError","dirEntries","dirPath","dirAttr","filePath","err_1","succ","err_2","targetFileName","zipData","ok","perm","ret","zodFlagSchema","z","newObj","_FlagManager","initialFlags","__privateAdd","__flags","_throwForDuplicateFlags","__privateSet","flag","parsedFromZod","resolvedType","inputTypeFromZod","safeFlag","__privateGet","processedFlag","flags","FlagManager","ArgParserError","cmdChain","_ArgParserBase","_ArgParserBase_instances","_appName","_appCommandName","_subCommandName","_parameters","_handler","_description","_handleErrors","_parentParser","_lastParseResult","_inheritParentFlags","_subCommands","_flagManager","_fuzzyMode","helpFlag","_value","_parsedArgs","arg","output","_parseOptions","allowedValues","v","chalk","validationResult","subCommandConfig","subParser","parentFlags","parentFlag","handler","outputObject","__privateMethod","_buildRecursiveJson_fn","jsonString","plainText","_buildRecursiveString_fn","error","_printRecursiveToConsole_fn","processArgs","originalProcessArgs","_handleGlobalChecks_fn","identifiedFinalParser","identifiedCommandChain","identifiedParserChain","_identifyCommandChainAndParsers_fn","_a","_handleSaveToEnvFlag_fn","finalArgs","handlerToExecute","_validateMandatoryFlags_fn","_applyDefaultValues_fn","_prepareAndExecuteHandler_fn","displayErrorAndExit_fn","argsToParse","currentParser","accumulatedParentArgs","commandChainSoFar","parentParser","subCommandIndex","subCommandName","potentialSubCommand","argsForCurrentLevel","currentLevelArgs","firstUnconsumedIndex","parseFlags_fn","_b","combinedArgsFromThisAndParents","unknownCommand","finalParseResultArgs","nextParser","nextArgs","nextCommandChain","combinedArgsForNextLevel","cyan","green","white","red","dim","rootAppName","current","helpTitle","help","indent","level","nameA","nameB","actualSubParserInstance","subHelp","subFlags","f","flagOptions","opt","flagDesc","subSubCommandNames","localFlags","flagA","flagB","optionsText","isMandatory","mandatoryIndicator","descriptionLines","metaLines","typeName","maxOptionLength","formattedOptions","line","chain","parserChainSoFar","nextParserChain","isRootCliParser","_enableFuzzyMode_fn","fuzzyIndex","withEnvIndex","envConfigArgs","_loadEnvFile_fn","mergedArgs","_mergeEnvConfigWithArgs_fn","saveDxtIndex","_handleSaveDxtFlag_fn","_identifiedParserChain","remainingArgs","accumulatedArgs","parsingSteps","rootSubCommandIndex","rootArgsSlice","rootParsedArgs","_c","_d","nextSubCommandIndex","currentLevelArgsSlice","stepInfo","currentLevelParsedArgs","_e","step","parserNameForLog","_f","helpFlagDefinition","helpOptions","parserChain","commandChain","finalMandatoryFlagsMissing","checkedFlagNames","parsersToValidate","immediateChild","parser","currentCommandChain","flagIsInheritedByChild","currentFlagIsMissing","finalParser","flagName","skipHandlers","inputArgs","inputArgsStr","finalParserWhoseHandlerWillRun","finalParserFlags","handlerArgs","handlerResult","consumedIndices","flagToCheck","regex","createRegExp","anyOf","oneOrMore","char","itemToCheck","matches","nextIndex","nextValueExists","nextValue","nextValueIsFlag","subCommand","commandNameToSuggest","visited","subIndent","flagIndent","subCommandParsers","addLine","subCommands","_generateDefaultEnvFileName_fn","baseName","word","saveToEnvIndex","nextArg","_saveToEnvFile_fn","ext","format","allFlags","seenFlagNames","parsedArgs","_generateEnvFormat_fn","_generateYamlFormat_fn","_generateJsonFormat_fn","_generateTomlFormat_fn","fileContent","rawConfig","_parseEnvFile_fn","_parseYamlFile_fn","_parseJsonFile_fn","_parseTomlFile_fn","_convertConfigToFlagValues_fn","parsed","dotenv","envKey","envValue","yaml","_meta","toml","configKey","configValue","convertedValue","_convertValueToFlagType_fn","flagType","lowerValue","numValue","envConfig","existingFlags","flagPart","flagValue","longFlag","lines","isSet","_getTypeString_fn","envVarName","defaultVal","comments","yamlContent","metadata","tomlContent","type","mcpSubCommands","subCmd","outputDir","_generateDxtPackage_fn","mcpSubCommand","serverInfo","_extractMcpServerInfo_fn","tools","_generateMcpToolsForDxt_fn","manifest","_createDxtManifest_fn","zip","AdmZip","serverScript","_createServerScript_fn","dxtFileName","dxtFilePath","toolOptions","tool","appName","commandName","ArgParserBase","mapArgParserFlagToZodSchema","zodSchema","flagTypeOpt","flagEnum","itemSchema","literalSchemas","description","defaultValue","generateMcpToolsFromArgParser","rootParser","visitedParsers","buildToolsRecursively","commandPathParts","typedRootParser","typedCurrentParser","currentParserDescription","currentParserHandler","currentParserFlags","subCommandsMap","currentParserSubCommands","currentParserCommandName","currentParserCommandNameOrAppName","effectiveCommandName","toolName","zodProperties","hasHelpFlag","flagSchema","inputSchema","outputSchema","customSchema","mcpInputArgs","helpParser","pathParts","helpText","helpData","argv","parserFlags","flagDef","isFlagOnly","allowMultiple","flagTypeName","originalArgvLength","parseResult","errorDetails","errPayload","errorData","handlerResponse","appCommandName","currentArgs","resolvedParentArgs","cmdName","subCmdInfo","finalParserTyped","finalHandler","handlerToCall","handlerContext","handlerError","errorMsg","subCmdObj","nextPathParts","_ArgParser","_ArgParser_instances","McpServer","mcp","server","acc","toolConfig","transports","startPromises","transportConfig","promise","_startSingleTransport_fn","transportType","transportOptions","anyResult","optionsOrToolOptions","defaultTransports","defaultTransport","mcpHandler","ctx","mcpParser","transportConfigs","mcpSubParser","mcpOptions","originalParser","originalFlags","newParser","StdioServerTransport","stdio","transport","SSEServerTransport","sse","express","app","port","_req","StreamableHTTPServerTransport","streamableHttp","req","sessionId","ArgParser","ArgParserFuzzyTester","commandPaths","commandPath","pathResults","paths","currentPath","allPaths","depth","newPath","targetParser","validCombinations","flagArgs","fullArgs","randomArgs","errorCases","errorArgs","command","combinations","mandatoryFlags","optionalFlags","mandatoryArgs","flag1Args","flag2Args","availableFlags","invalidArgs","mode","values","count","randomIndex","testStrings","expectError","startTime","originalArgs","testResult","executionTime","totalTests","successfulTests","r","failedTests","coverageByPath","pathKey","errorTypes","errorType","LATEST_PROTOCOL_VERSION","DEFAULT_NEGOTIATED_PROTOCOL_VERSION","SUPPORTED_PROTOCOL_VERSIONS","JSONRPC_VERSION","ProgressTokenSchema","CursorSchema","RequestMetaSchema","BaseRequestParamsSchema","RequestSchema","BaseNotificationParamsSchema","NotificationSchema","ResultSchema","RequestIdSchema","JSONRPCRequestSchema","isJSONRPCRequest","JSONRPCNotificationSchema","isJSONRPCNotification","JSONRPCResponseSchema","isJSONRPCResponse","ErrorCode","JSONRPCErrorSchema","isJSONRPCError","JSONRPCMessageSchema","EmptyResultSchema","CancelledNotificationSchema","BaseMetadataSchema","ImplementationSchema","ClientCapabilitiesSchema","InitializeRequestSchema","isInitializeRequest","ServerCapabilitiesSchema","InitializeResultSchema","InitializedNotificationSchema","PingRequestSchema","ProgressSchema","ProgressNotificationSchema","PaginatedRequestSchema","PaginatedResultSchema","ResourceContentsSchema","TextResourceContentsSchema","BlobResourceContentsSchema","ResourceSchema","ResourceTemplateSchema","ListResourcesRequestSchema","ListResourcesResultSchema","ListResourceTemplatesRequestSchema","ListResourceTemplatesResultSchema","ReadResourceRequestSchema","ReadResourceResultSchema","ResourceListChangedNotificationSchema","SubscribeRequestSchema","UnsubscribeRequestSchema","ResourceUpdatedNotificationSchema","PromptArgumentSchema","PromptSchema","ListPromptsRequestSchema","ListPromptsResultSchema","GetPromptRequestSchema","TextContentSchema","ImageContentSchema","AudioContentSchema","EmbeddedResourceSchema","ResourceLinkSchema","ContentBlockSchema","PromptMessageSchema","GetPromptResultSchema","PromptListChangedNotificationSchema","ToolAnnotationsSchema","ToolSchema","ListToolsRequestSchema","ListToolsResultSchema","CallToolResultSchema","CallToolRequestSchema","ToolListChangedNotificationSchema","LoggingLevelSchema","SetLevelRequestSchema","LoggingMessageNotificationSchema","ModelHintSchema","ModelPreferencesSchema","SamplingMessageSchema","CreateMessageRequestSchema","CreateMessageResultSchema","BooleanSchemaSchema","StringSchemaSchema","NumberSchemaSchema","EnumSchemaSchema","PrimitiveSchemaDefinitionSchema","ElicitRequestSchema","ElicitResultSchema","ResourceTemplateReferenceSchema","PromptReferenceSchema","CompleteRequestSchema","CompleteResultSchema","RootSchema","ListRootsRequestSchema","ListRootsResultSchema","RootsListChangedNotificationSchema","McpError","code","DEFAULT_REQUEST_TIMEOUT_MSEC","Protocol","_options","notification","controller","_request","messageId","timeout","maxTotalTimeout","onTimeout","resetTimeoutOnProgress","info","totalElapsed","extra","responseHandlers","request","abortController","fullExtra","resultSchema","progressToken","params","responseHandler","timeoutInfo","response","relatedRequestId","resumptionToken","onresumptiontoken","jsonrpcRequest","cancel","reason","timeoutHandler","jsonrpcNotification","requestSchema","notificationSchema","mergeCapabilities","base","additional","key","global","factory","this","merge","_len","sets","_key","xl","x","subexp","typeOf","o","toUpperCase","toArray","assign","source","buildExps","isIRI","ALPHA$$","DIGIT$$","HEXDIG$$","PCT_ENCODED$","GEN_DELIMS$$","SUB_DELIMS$$","RESERVED$$","UCSCHAR$$","IPRIVATE$$","UNRESERVED$$","DEC_OCTET_RELAXED$","IPV4ADDRESS$","H16$","LS32$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","IPV6ADDRESS$","ZONEID$","PCHAR$","URI_PROTOCOL","IRI_PROTOCOL","slicedToArray","sliceIterator","_arr","_n","_i","_s","toConsumableArray","arr2","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","floor","stringFromCharCode","error$1","map","array","fn","length","mapDomain","string","labels","encoded","ucs2decode","counter","ucs2encode","basicToDigit","codePoint","digitToBasic","digit","adapt","delta","numPoints","firstTime","decode","inputLength","bias","basic","oldi","w","baseMinusT","out","encode","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","_currentValue2","basicLength","handledCPCount","m","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","currentValue","handledCPCountPlusOne","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_iterator3","_step3","_currentValue","q","qMinusT","toUnicode","toASCII","punycode","SCHEMES","pctEncChar","chr","pctDecChars","newStr","il","c2","c3","_normalizeComponentEncoding","components","protocol","decodeUnreserved","decStr","_stripLeadingZeros","_normalizeIPv4","host","_matches","address","_normalizeIPv6","_matches2","zone","_address$toLowerCase$","_address$toLowerCase$2","last","first","firstFields","lastFields","isLastFieldIPv4Address","fieldCount","lastFieldsStart","fields","allZeroFields","field","lastLongest","longestZeroFields","newHost","newFirst","newLast","URI_PARSE","NO_MATCH_IS_UNDEFINED","parse","uriString","schemeHandler","_recomposeAuthority","uriTokens","$1","$2","RDS1","RDS2","RDS3","RDS5","removeDotSegments","im","s","serialize","authority","resolveComponents","relative","skipNormalization","baseURI","relativeURI","schemelessOptions","uri","equal","uriA","uriB","escapeComponent","unescapeComponent","secure","handler$1","isSecure","wsComponents","handler$2","_wsComponents$resourc","_wsComponents$resourc2","query","handler$3","O","ATEXT$$","QTEXT$$","VCHAR$$","SOME_DELIMS$$","UNRESERVED","PCT_ENCODED","NOT_LOCAL_PART","NOT_HFNAME","NOT_HFVALUE","handler$4","mailtoComponents","to","unknownHeaders","hfields","hfield","toAddrs","_x","_xl","_x2","_xl2","addr","toAddr","atIdx","localPart","domain","URN_PARSE","handler$5","urnComponents","scheme","nid","nss","urnScheme","uriComponents","UUID","handler$6","uuidComponents","fastDeepEqual","ucs2length","util","copy","checkDataType","checkDataTypes","coerceToTypes","toHash","getProperty","escapeQuotes","varOccurences","varReplace","schemaHasRules","schemaHasRulesExcept","schemaUnknownRules","toQuotedString","getPathExpr","getData","unescapeFragment","unescapeJsonPointer","escapeFragment","escapeJsonPointer","dataType","strictNumbers","negate","EQUAL","AND","OK","NOT","dataTypes","types","COERCE_TO_TYPES","optionCoerceTypes","hash","IDENTIFIER","SINGLE_QUOTE","dataVar","expr","schema","rules","exceptKeyword","jsonPointers","isNumber","joinPaths","prop","JSON_POINTER","RELATIVE_JSON_POINTER","$data","lvl","up","jsonPointer","segments","segment","schema_obj","SchemaObject","traverse","jsonSchemaTraverseModule","pre","post","_traverse","jsonPtr","rootSchema","parentJsonPtr","parentKeyword","parentSchema","keyIndex","sch","escapeJsonPtr","URI","resolve_1","normalizeId","getFullPath","resolveUrl","resolveIds","inlineRef","resolveSchema","compile","root","ref","refVal","baseId","refPath","_getFullPath","id","resolveRecursive","getJsonPointer","parsedRef","PREVENT_SCOPE_CHANGE","$ref","SIMPLE_INLINED","limit","checkNoRef","countKeys","TRAILING_SLASH_HASH","schemaId","baseIds","fullPaths","localRefs","fullPath","error_classes","errorSubclass","ValidationError","MissingRefError","Subclass","fastJsonStableStringify","cycles","cmp","node","aobj","bobj","seen","stringify","seenIndex","validate","it","$keyword","$ruleType","$async","$refKeywords","$id","$unknownKwd","$keywordsMsg","$lvl","$dataLvl","$schema","$schemaPath","$errSchemaPath","$breakOnError","$errorKeyword","$valid","$$outStack","__err","$top","$defaultMsg","$closingBraces1","$closingBraces2","$typeSchema","$typeIsArray","$coerceToTypes","$rulesGroup","$shouldUseGroup","$method","$dataType","$coerced","arr1","$type","$i","l1","$parentData","$parentDataProperty","i2","l2","$schemaKeys","arr3","$propertyKey","i3","l3","$sch","$passData","arr4","l4","arr5","$rule","i5","l5","$shouldUseRule","$code","$ruleImplementsSomeKeyword","impl","errorClasses","stableStringify","validateGenerator","require$$5","compile_1","refs","patterns","patternsHash","defaults","defaultsHash","customRules","checkCompiling","compilation","callValidate","formats","RULES","localCompile","cv","endCompiling","_schema","_root","isRoot","sourceCode","resolveRef","usePattern","useDefault","useCustomRule","vars","refValCode","patternCode","defaultCode","customRuleCode","makeValidate","refIndex","_refVal","refCode","resolvedRef","rootRefId","addLocalRef","localSchema","removeLocalRef","replaceLocalRef","refId","regexStr","valueStr","rule","deps","keyword","validateSchema","valid","inline","macro","compIndex","statement","Cache","cacheModule","DATE","DAYS","TIME","HOSTNAME","URIREF","URITEMPLATE","URL","JSON_POINTER_URI_FRAGMENT","formats_1","date_time","isLeapYear","year","month","day","full","hour","minute","second","timeZone","DATE_TIME_SEPARATOR","dateTime","NOT_URI_FRAGMENT","Z_ANCHOR","$refCode","$refVal","$message","$it","$nextValid","__callValidate","allOf","$closingBraces","$currentBaseId","$allSchemasEmpty","$errs","$noEmptySchema","$wasComposite","$comment","_const","$isData","contains","$idx","$dataNxt","$nextData","$nonEmptySchema","dependencies","$schemaDeps","$propertyDeps","$ownProperties","$property","$deps","$currentErrorPath","$prop","$useData","$propertyPath","$missingProperty","_enum","$vSchema","$schemaValue","$unknownFormats","$allowUnknown","$format","$isObject","$formatType","$formatRef","_if","$thenSch","$elseSch","$thenPresent","$elsePresent","$ifClause","$additionalItems","$currErrSchemaPath","_limit","$isMax","$exclusiveKeyword","$schemaExcl","$isDataExcl","$op","$notOp","$schemaValueExcl","$exclusive","$exclType","$exclIsNumber","$opExpr","$opStr","_limitItems","_limitLength","_limitProperties","multipleOf","not","$allErrorsOption","oneOf","$prevValid","$passingSchemas","$regexp","properties","$key","$dataProperties","notProto","$pProperties","$pPropertyKeys","$aProperties","$someProperties","$noAdditional","$additionalIsSchema","$removeAdditional","$checkAdditional","$required","$requiredHash","i1","$pProperty","$additionalProperty","$useDefaults","$hasDefault","i4","propertyNames","$invalidName","required","$propertySch","$loopRequired","uniqueItems","$itemType","dotjs","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","ruleModules","ALL","KEYWORDS","TYPES","group","implKeywords","metaSchema","keywordsJsonPointers","keywords","compileAsync","meta","loadMetaSchemaOf","schemaObj","_compileAsync","loadMissingSchema","added","schemaPromise","removePromise","custom","$definition","$rDef","$compile","$inline","$macro","$ruleValidate","$validateCode","$validateSchema","$ruleErrs","$ruleErr","$asyncKeyword","def_callRuleValidate","def_customError","definition_schema","definitionSchema","addKeyword","getKeyword","removeKeyword","validateKeyword","definition","_addRule","ruleGroup","rg","throwError","compileSchema","$dataMetaSchema","ajv","Ajv","addSchema","addMetaSchema","getSchema","removeSchema","addFormat","errorsText","_addSchema","_compile","customKeyword","META_SCHEMA_ID","META_IGNORE_OPTIONS","META_SUPPORT_DATA","setLogger","chooseGetId","getMetaSchemaOptions","addInitialFormats","addInitialKeywords","addDefaultMetaSchema","addInitialSchemas","schemaKeyRef","_skipValidation","checkUnique","skipValidation","throwOrLogError","defaultMeta","keyRef","_getSchemaObj","_getSchemaFragment","_removeAllSchemas","cacheKey","schemas","shouldAddSchema","cached","willValidate","recursiveMeta","currentOpts","_validate","_get$IdOrId","_getId","_get$Id","separator","text","$dataSchema","optsSchemas","metaOpts","logger","noop","Server","_serverInfo","capabilities","requestedVersion","ignoreOverride","getDefaultOptions","getRefs","def","addErrorMessage","errorMessage","setResponseValueAndErrors","parseAnyDef","parseArrayDef","ZodFirstPartyTypeKind","parseDef","parseBigintDef","check","parseBooleanDef","parseBrandedDef","_def","parseCatchDef","parseDateDef","overrideDateStrategy","strategy","integerDateParser","parseDefaultDef","parseEffectsDef","parseEnumDef","isJsonSchema7AllOfType","parseIntersectionDef","unevaluatedProperties","mergedAllOf","nestedSchema","additionalProperties","rest","parseLiteralDef","parsedType","emojiRegex","zodPatterns","parseStringDef","addPattern","escapeLiteralCheckValue","literal","escapeNonAlphaNumeric","ALPHA_NUMERIC","stringifyRegExpWithFlags","isEscaped","inCharGroup","inCharRange","parseRecordDef","keyType","parseMapDef","parseNativeEnumDef","object","actualValues","parsedTypes","parseNeverDef","parseNullDef","primitiveMappings","parseUnionDef","asAnyOf","uniqueTypes","parseNullableDef","parseNumberDef","parseObjectDef","forceOptionalIntoNullable","shape","propName","propDef","propOptional","safeIsOptional","ZodOptional","parsedDef","decideAdditionalProperties","parseOptionalDef","innerSchema","parsePipelineDef","parsePromiseDef","parseSetDef","parseTupleDef","parseUndefinedDef","parseUnknownDef","parseReadonlyDef","selectParser","forceResolution","seenItem","overrideResult","seenSchema","get$ref","newItem","jsonSchemaOrGetter","jsonSchema","addMeta","postProcessResult","getRelativePath","pathA","pathB","zodToJsonSchema","definitions","main","title","combined","McpZodTypeKind","Completable","ZodType","processCreateParams","errorMap","invalid_type_error","required_error","iss","toolDefinition","EMPTY_OBJECT_JSON_SCHEMA","prompt","EMPTY_COMPLETION_RESULT","suggestions","createCompletionResult","template","completer","resources","resource","templateResources","variables","promptArgumentsFromSchema","uriOrTemplate","readCallback","registeredResource","registeredResourceTemplate","updates","argsSchema","registeredPrompt","annotations","registeredTool","firstArg","isZodRawShape","isZodTypeLike","ReadBuffer","chunk","deserializeMessage","serializeMessage","_stdin","process","_stdout","json","bytesModule","formatThousandsRegExp","formatDecimalsRegExp","parseRegExp","mag","thousandsSeparator","unitSeparator","decimalPlaces","fixedDecimals","unit","floatValue","browser","depd","namespace","deprecate","wrapfunction","wrapproperty","setprototypeof","setProtoOf","mixinProperties","proto","codes","statuses","status","createMessageToStatusCodeMap","createStatusCodeList","getStatusCode","getStatusMessage","inherits_browserModule","ctor","superCtor","TempCtor","toidentifier","toIdentifier","token","setPrototypeOf","inherits","module","createError","createHttpErrorConstructor","createIsHttpErrorFunction","populateConstructorExports","codeClass","HttpError","createClientErrorConstructor","className","toClassName","ClientError","nameFunc","createServerErrorConstructor","ServerError","func","desc","CodeError","base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","curByte","tripletToBase64","num","encodeChunk","start","end","extraBytes","maxChunkLength","len2","ieee754","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","rt","base64","customInspectSymbol","Buffer","SlowBuffer","K_MAX_LENGTH","typedArraySupport","createBuffer","encodingOrOffset","allocUnsafe","from","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","fromObject","assertSize","alloc","fill","checked","actual","fromArrayLike","arrayView","byteOffset","numberIsNaN","y","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","found","hexWrite","remaining","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","firstByte","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","hexSliceLookupTable","newBuf","checkOffset","noAssert","mul","checkInt","min","maxBytes","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","hi","lo","src","dst","alphabet","table","i16","safer","Safer","safer_1","BOMChar","bomHandling","PrependBOMWrapper","StripBOMWrapper","copyProps","SafeBuffer","isEncoding","_normalizeEncoding","enc","retried","normalizeEncoding","nenc","string_decoder","StringDecoder","nb","utf16Text","utf16End","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","utf8End","utf8Text","utf8CheckByte","utf8CheckIncomplete","utf8CheckExtraBytes","internal","InternalCodec","codecOptions","iconv","InternalEncoderBase64","InternalEncoderCesu8","InternalDecoderCesu8","InternalEncoder","InternalDecoder","codec","completeQuads","bufIdx","charCode","contBytes","accBytes","utf32","Utf32Codec","Utf32Encoder","Utf32Decoder","write32","isHighSurrogate","isLowSurrogate","codepoint","overflow","badChar","_writeCodepoint","high","Utf32AutoCodec","Utf32AutoEncoder","Utf32AutoDecoder","detectEncoding","resStr","trail","bufs","defaultEncoding","charsProcessed","invalidLE","invalidBE","bmpCharsLE","bmpCharsBE","outer_loop","utf16","Utf16BECodec","Utf16BEEncoder","Utf16BEDecoder","buf2","Utf16Codec","Utf16Encoder","Utf16Decoder","asciiCharsLE","asciiCharsBE","utf7","Utf7Codec","Utf7Encoder","Utf7Decoder","nonDirectChars","base64Regex","base64Chars","plusChar","minusChar","andChar","lastI","inBase64","base64Accum","b64str","canBeDecoded","Utf7IMAPCodec","Utf7IMAPEncoder","Utf7IMAPDecoder","base64AccumIdx","uChar","base64IMAPChars","sbcsCodec","SBCSCodec","asciiString","encodeBuf","SBCSEncoder","SBCSDecoder","decodeBuf","idx1","idx2","sbcsData","sbcsDataGenerated","dbcsCodec","DBCSCodec","UNASSIGNED","GB18030_CODE","SEQ_START","NODE_START","UNASSIGNED_NODE","DEF_CHAR","mappingTable","commonThirdByteNodeIdx","commonFourthByteNodeIdx","firstByteNode","secondByteNode","thirdByteNode","fourthByteNode","skipEncodeChars","DBCSEncoder","DBCSDecoder","curAddr","writeTable","codeTrail","seq","uCode","dbcsCode","bucket","low","oldVal","nodeIdx","hasValues","subNodeEmpty","mbCode","subNodeIdx","newPrefix","seqObj","nextChar","resCode","subtable","idx","findIdx","prevBytes","prevOffset","seqStart","ptr","uCodeLead","bytesArr","mid","dbcsData","modules","streams","stream_module","Transform","IconvLiteEncoderStream","conv","chunks","IconvLiteDecoderStream","codecDef","unpipe_1","unpipe","hasPipeDataListeners","stream","listeners","listener","asyncHooks","tryRequireAsyncHooks","rawBody","getRawBody","ICONV_ENCODING_MESSAGE_REGEXP","getDecoder","readStream","wrap","halt","complete","sync","state","received","onAborted","cleanup","onData","onEnd","invokeCallback","PARAM_REGEXP","TEXT_REGEXP","TOKEN_REGEXP","QESC_REGEXP","QUOTE_REGEXP","TYPE_REGEXP","contentType","parameters","param","qstring","getcontenttype","ContentType","match","MAXIMUM_MESSAGE_SIZE","_endpoint","randomUUID","dummyBase","endpointUrl","relativeUrlWithSession","parsedBody","authInfo","body","ct","parsedMessage","acceptHeader","lastEventId","streamId","eventId","eventData","rawMessage","parsedCt","messages","isInitializationRequest","hasRequests","protocolVersion","requestId","standaloneSse","relatedIds","responses"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBC7kBAs7D,KAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,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]}