@sapphire/lexure 1.1.8-next.8aee4b20 → 1.1.8-next.8bfb0191
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.cjs
CHANGED
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/ArgumentStream.ts","../../src/lib/lexer/streams/parameters/BaseParameter.ts","../../src/lib/lexer/streams/parameters/QuotedParameter.ts","../../src/lib/lexer/streams/parameters/WordParameter.ts","../../src/lib/lexer/streams/raw/TokenStream.ts","../../src/lib/lexer/streams/ParameterStream.ts","../../src/lib/lexer/Lexer.ts","../../src/lib/parser/ParserResult.ts","../../src/lib/parser/strategies/EmptyStrategy.ts","../../src/lib/parser/Parser.ts","../../src/lib/parser/strategies/PrefixedStrategy.ts","../../src/lib/util/util.ts"],"names":["TokenType","Option"],"mappings":"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","sourcesContent":["import { Option, Result } from '@sapphire/result';\nimport type { Parameter } from './lexer/streams/ParameterStream';\nimport type { ParserResult } from './parser/ParserResult';\n\nexport class ArgumentStream {\n\tpublic readonly results: ParserResult;\n\tpublic state: ArgumentStream.State;\n\n\tpublic constructor(results: ParserResult) {\n\t\tthis.results = results;\n\t\tthis.state = { used: new Set(), position: 0 };\n\t}\n\n\t/**\n\t * Whether or not all ordered parameters were used.\n\t */\n\tpublic get finished() {\n\t\treturn this.used === this.length;\n\t}\n\n\t/**\n\t * The amount of ordered parameters.\n\t */\n\tpublic get length() {\n\t\treturn this.results.ordered.length;\n\t}\n\n\t/**\n\t * The remaining amount of ordered parameters.\n\t */\n\tpublic get remaining() {\n\t\treturn this.length - this.used;\n\t}\n\n\t/**\n\t * The amount of ordered parameters that have been used.\n\t */\n\tpublic get used() {\n\t\treturn this.state.used.size;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '1' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '2' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '3' }\n\t *\n\t * console.log(args.single());\n\t * // None\n\t * ```\n\t *\n\t * @returns The value, if any.\n\t */\n\tpublic single(): Option<string> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tthis.state.used.add(this.state.position);\n\t\treturn Option.some(this.results.ordered[this.state.position++].value);\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link singleMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number) ? Option.none : Option.some(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 1 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 2 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 3 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // None\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic singleMap<T>(predicate: (value: string) => Option<T>, useAnyways = false): Option<T> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleMap}.\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, useAnyways = false): Promise<Option<T>> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Finds and retrieves the next unused parameter and transforms it.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link singleParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 2 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 3 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Err { error: null }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's transformed value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the transformation failed. Defaults to `false`.\n\t * @returns The transformed value, if any.\n\t */\n\tpublic singleParse<T, E>(predicate: (value: string) => Result<T, E>, useAnyways = false): Result<T, E | null> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, useAnyways = false): Promise<Result<T, E | null>> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic find(predicate: (value: string) => boolean, from = this.state.position): Option<string> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link find}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link findMap}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link findParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Suppose args are from 'ba 1 cc'.\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Err {\n\t * // error: [\n\t * // 'Could not parse ba to a number',\n\t * // 'Could not parse cc to a number'\n\t * // ]\n\t * // }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findParse<T, E>(predicate: (value: string) => Result<T, E>, from = this.state.position): Result<T, E[]> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMapAsync} that returns the errors on failure.\n\t * @note This is an asynchronous variant of {@link findParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, from = this.state.position): Promise<Result<T, E[]>> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Retrieves multiple unused parameters.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many().unwrap()));\n\t * // '1 2 3'\n\t * ```\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many(2).unwrap()));\n\t * // '1 2'\n\t * ```\n\t *\n\t * @param limit The maximum amount of parameters to retrieve, defaults to `Infinity`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The unused parameters within the range.\n\t */\n\tpublic many(limit = Infinity, from = this.state.position): Option<Parameter[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: Parameter[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\t// If the current parameter was already used, skip:\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\t// Mark current parameter as used, and push it to the resulting array:\n\t\t\tthis.state.used.add(i);\n\t\t\tparameters.push(this.results.ordered[i]);\n\n\t\t\t// If the parameters reached the limit, break the loop:\n\t\t\tif (parameters.length >= limit) break;\n\t\t}\n\n\t\treturn parameters.length ? Option.some(parameters) : Option.none;\n\t}\n\n\tpublic filter(predicate: (value: string) => boolean, from = this.state.position): Option<string[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic filterMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\t/**\n\t * Checks whether any of the flags were given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--f --g':\n\t *\n\t * console.log(args.flag('f'));\n\t * // true\n\t *\n\t * console.log(args.flag('g', 'h'));\n\t * // true\n\t *\n\t * console.log(args.flag('h'));\n\t * // false\n\t * ```\n\t *\n\t * @param keys The names of the flags to check.\n\t * @returns Whether or not any of the flags were given.\n\t */\n\tpublic flag(...keys: readonly string[]): boolean {\n\t\treturn keys.some((key) => this.results.flags.has(key));\n\t}\n\n\t/**\n\t * Gets the last value of any option. When there are multiple names, the last value of the last found name is given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: '1' }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: '3' }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The last value of the option, if any.\n\t */\n\tpublic option(...keys: readonly string[]): Option<string> {\n\t\treturn this.options(...keys).map((values) => values.at(-1)!);\n\t}\n\n\t/**\n\t * Gets all values from all options.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: ['1', '1'] }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: ['2', '3'] }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The values from all the options concatenated, if any.\n\t */\n\tpublic options(...keys: readonly string[]): Option<readonly string[]> {\n\t\tconst entries: string[] = [];\n\t\tfor (const key of keys) {\n\t\t\tconst values = this.results.options.get(key);\n\t\t\tif (values) entries.push(...values);\n\t\t}\n\n\t\treturn entries.length ? Option.some(entries) : Option.none;\n\t}\n\n\tpublic save(): ArgumentStream.State {\n\t\treturn {\n\t\t\tused: new Set(this.state.used),\n\t\t\tposition: this.state.position\n\t\t};\n\t}\n\n\tpublic restore(state: ArgumentStream.State) {\n\t\tthis.state = state;\n\t}\n\n\tpublic reset() {\n\t\tthis.restore({ used: new Set(), position: 0 });\n\t}\n}\n\nexport namespace ArgumentStream {\n\texport interface State {\n\t\tused: Set<number>;\n\t\tposition: number;\n\t}\n}\n","export abstract class BaseParameter {\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(separators: readonly string[]) {\n\t\tthis.separators = separators;\n\t}\n\n\tpublic get leading(): string {\n\t\treturn this.separators.join('');\n\t}\n\n\tpublic abstract get raw(): string;\n}\n","import type { QuotedToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class QuotedParameter extends BaseParameter {\n\tpublic readonly value: string;\n\tpublic readonly open: string;\n\tpublic readonly close: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<QuotedToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t\tthis.open = part.open;\n\t\tthis.close = part.close;\n\t}\n\n\tpublic get raw() {\n\t\treturn `${this.open}${this.value}${this.close}`;\n\t}\n}\n","import type { WordToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class WordParameter extends BaseParameter {\n\tpublic readonly value: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<WordToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t}\n\n\tpublic get raw() {\n\t\treturn this.value;\n\t}\n}\n","import type { Lexer } from '../../Lexer';\n\nexport class TokenStream implements Iterable<Token> {\n\tprivate readonly input: string;\n\tprivate readonly quotes: readonly [string, string][];\n\tprivate readonly separator: string;\n\tprivate position = 0;\n\n\tpublic constructor(lexer: Lexer, input: string) {\n\t\tthis.quotes = lexer.quotes;\n\t\tthis.separator = lexer.separator;\n\t\tthis.input = input;\n\t}\n\n\tpublic get finished() {\n\t\treturn this.position >= this.input.length;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Token> {\n\t\twhile (!this.finished) {\n\t\t\tyield this.getPossibleSeparator() ?? this.getPossibleQuotedArgument() ?? this.getParameter();\n\t\t}\n\t}\n\n\tprivate getPossibleSeparator(): SeparatorToken | null {\n\t\tif (this.input.startsWith(this.separator, this.position)) {\n\t\t\tthis.position += this.separator.length;\n\t\t\treturn { type: TokenType.Separator, value: this.separator };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getPossibleQuotedArgument(): QuotedToken | null {\n\t\tfor (const [open, close] of this.quotes) {\n\t\t\tif (!this.input.startsWith(open, this.position)) continue;\n\n\t\t\tconst end = this.input.indexOf(close, this.position + open.length);\n\t\t\tif (end === -1) continue;\n\n\t\t\tconst value = this.input.slice(this.position + open.length, end);\n\t\t\tthis.position = end + close.length;\n\n\t\t\treturn { type: TokenType.Quoted, value, open, close };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getParameter(): WordToken {\n\t\tconst index = this.input.indexOf(this.separator, this.position);\n\t\tconst value = index === -1 ? this.input.slice(this.position) : this.input.slice(this.position, index);\n\t\tthis.position += value.length;\n\t\treturn { type: TokenType.Parameter, value };\n\t}\n}\n\nexport enum TokenType {\n\tParameter,\n\tQuoted,\n\tSeparator\n}\n\nexport type Token = WordToken | QuotedToken | SeparatorToken;\n\nexport interface WordToken {\n\treadonly type: TokenType.Parameter;\n\treadonly value: string;\n}\n\nexport interface QuotedToken {\n\treadonly type: TokenType.Quoted;\n\treadonly value: string;\n\treadonly open: string;\n\treadonly close: string;\n}\n\nexport interface SeparatorToken {\n\treadonly type: TokenType.Separator;\n\treadonly value: string;\n}\n","import { QuotedParameter } from './parameters/QuotedParameter';\nimport { WordParameter } from './parameters/WordParameter';\nimport { TokenType, type Token } from './raw/TokenStream';\n\nexport class ParameterStream {\n\tprivate readonly stream: Iterable<Token>;\n\tprivate separators: string[] = [];\n\n\tpublic constructor(stream: Iterable<Token>) {\n\t\tthis.stream = stream;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Parameter, string[]> {\n\t\tfor (const part of this.stream) {\n\t\t\tif (part.type === TokenType.Separator) {\n\t\t\t\tthis.separators.push(part.value);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tyield part.type === TokenType.Quoted ? new QuotedParameter(this.separators, part) : new WordParameter(this.separators, part);\n\t\t\tthis.separators = [];\n\t\t}\n\n\t\treturn this.separators;\n\t}\n}\n\nexport type Parameter = QuotedParameter | WordParameter;\n","import { ParameterStream } from './streams/ParameterStream';\nimport { TokenStream } from './streams/raw/TokenStream';\n\nexport class Lexer {\n\tpublic readonly quotes: readonly [open: string, close: string][];\n\tpublic readonly separator: string;\n\n\tpublic constructor(options: Lexer.Options = {}) {\n\t\tthis.quotes = options.quotes ?? [];\n\t\tthis.separator = options.separator ?? ' ';\n\t}\n\n\tpublic run(input: string) {\n\t\treturn new ParameterStream(this.raw(input));\n\t}\n\n\tpublic raw(input: string) {\n\t\treturn new TokenStream(this, input);\n\t}\n}\n\nexport namespace Lexer {\n\texport interface Options {\n\t\tseparator?: string;\n\t\tquotes?: readonly [open: string, close: string][];\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { Parser } from './Parser';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\n\nexport class ParserResult {\n\tpublic readonly ordered: Parameter[] = [];\n\tpublic readonly flags = new Set<string>();\n\tpublic readonly options = new Map<string, string[]>();\n\tprivate readonly strategy: IUnorderedStrategy;\n\n\tpublic constructor(parser: Parser) {\n\t\tthis.strategy = parser.strategy;\n\t}\n\n\tpublic parse(parameters: Iterable<Parameter>) {\n\t\tfor (const parameter of parameters) {\n\t\t\tthis.parsePossibleFlag(parameter) || this.parsePossibleOptions(parameter) || this.parseOrdered(parameter);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprivate parsePossibleFlag(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchFlag(parameter.value)\n\t\t\t.inspect((value) => this.flags.add(value))\n\t\t\t.isSome();\n\t}\n\n\tprivate parsePossibleOptions(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchOption(parameter.value)\n\t\t\t.inspect(([key, value]) => {\n\t\t\t\tconst existing = this.options.get(key);\n\t\t\t\tif (existing) existing.push(value);\n\t\t\t\telse this.options.set(key, [value]);\n\t\t\t})\n\t\t\t.isSome();\n\t}\n\n\tprivate parseOrdered(parameter: Parameter): boolean {\n\t\tthis.ordered.push(parameter);\n\t\treturn true;\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class EmptyStrategy implements IUnorderedStrategy {\n\tpublic matchFlag(): Option<string> {\n\t\treturn Option.none;\n\t}\n\n\tpublic matchOption(): Option<readonly [key: string, value: string]> {\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\nimport { ParserResult } from './ParserResult';\nimport { EmptyStrategy } from './strategies/EmptyStrategy';\n\nexport class Parser {\n\tpublic strategy: IUnorderedStrategy;\n\n\tpublic constructor(strategy?: IUnorderedStrategy) {\n\t\tthis.strategy = strategy ?? new EmptyStrategy();\n\t}\n\n\tpublic setUnorderedStrategy(strategy: IUnorderedStrategy) {\n\t\tthis.strategy = strategy;\n\t\treturn this;\n\t}\n\n\tpublic run(input: Iterable<Parameter>): ParserResult {\n\t\treturn new ParserResult(this).parse(input);\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class PrefixedStrategy implements IUnorderedStrategy {\n\tpublic readonly prefixes: readonly string[];\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(prefixes: readonly string[], separators: readonly string[]) {\n\t\tthis.prefixes = prefixes;\n\t\tthis.separators = separators;\n\t}\n\n\tpublic matchFlag(input: string): Option<string> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\t// If the separator is present, return None:\n\t\tif (this.separators.some((x) => input.includes(x, prefix.length))) return Option.none;\n\n\t\treturn Option.some(input.slice(prefix.length));\n\t}\n\n\tpublic matchOption(input: string): Option<readonly [key: string, value: string]> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\tfor (const separator of this.separators) {\n\t\t\tconst index = input.indexOf(separator, prefix.length + 1);\n\n\t\t\t// If the separator is missing, skip:\n\t\t\tif (index === -1) continue;\n\n\t\t\t// If the separator is present, but has no value, return None:\n\t\t\tif (index + separator.length === input.length) return Option.none;\n\n\t\t\tconst key = input.slice(prefix.length, index);\n\t\t\tconst value = input.slice(index + separator.length);\n\t\t\treturn Option.some([key, value] as const);\n\t\t}\n\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\n\n/**\n * Joins the parameters by their `leading` value, using the `value` property.\n * @seealso {@link joinRaw} for the version using `raw` instead of `value`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function join(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].value;\n\n\tlet output = parameters[0].value;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.value;\n\t}\n\n\treturn output;\n}\n\n/**\n * Joins the parameters by their `leading` value, using the `raw` property.\n * @seealso {@link join} for the version using `value` instead of `raw`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function joinRaw(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].raw;\n\n\tlet output = parameters[0].raw;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.raw;\n\t}\n\n\treturn output;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/ArgumentStream.ts","../../src/lib/lexer/streams/parameters/BaseParameter.ts","../../src/lib/lexer/streams/parameters/QuotedParameter.ts","../../src/lib/lexer/streams/parameters/WordParameter.ts","../../src/lib/lexer/streams/raw/TokenStream.ts","../../src/lib/lexer/streams/ParameterStream.ts","../../src/lib/lexer/Lexer.ts","../../src/lib/parser/ParserResult.ts","../../src/lib/parser/strategies/EmptyStrategy.ts","../../src/lib/parser/Parser.ts","../../src/lib/parser/strategies/PrefixedStrategy.ts","../../src/lib/util/util.ts"],"names":["Option","result","Result","TokenType"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Option, Result } from '@sapphire/result';\nimport type { Parameter } from './lexer/streams/ParameterStream';\nimport type { ParserResult } from './parser/ParserResult';\n\nexport class ArgumentStream {\n\tpublic readonly results: ParserResult;\n\tpublic state: ArgumentStream.State;\n\n\tpublic constructor(results: ParserResult) {\n\t\tthis.results = results;\n\t\tthis.state = { used: new Set(), position: 0 };\n\t}\n\n\t/**\n\t * Whether or not all ordered parameters were used.\n\t */\n\tpublic get finished() {\n\t\treturn this.used === this.length;\n\t}\n\n\t/**\n\t * The amount of ordered parameters.\n\t */\n\tpublic get length() {\n\t\treturn this.results.ordered.length;\n\t}\n\n\t/**\n\t * The remaining amount of ordered parameters.\n\t */\n\tpublic get remaining() {\n\t\treturn this.length - this.used;\n\t}\n\n\t/**\n\t * The amount of ordered parameters that have been used.\n\t */\n\tpublic get used() {\n\t\treturn this.state.used.size;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '1' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '2' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '3' }\n\t *\n\t * console.log(args.single());\n\t * // None\n\t * ```\n\t *\n\t * @returns The value, if any.\n\t */\n\tpublic single(): Option<string> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tthis.state.used.add(this.state.position);\n\t\treturn Option.some(this.results.ordered[this.state.position++].value);\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link singleMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number) ? Option.none : Option.some(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 1 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 2 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 3 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // None\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic singleMap<T>(predicate: (value: string) => Option<T>, useAnyways = false): Option<T> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleMap}.\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, useAnyways = false): Promise<Option<T>> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Finds and retrieves the next unused parameter and transforms it.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link singleParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 2 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 3 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Err { error: null }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's transformed value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the transformation failed. Defaults to `false`.\n\t * @returns The transformed value, if any.\n\t */\n\tpublic singleParse<T, E>(predicate: (value: string) => Result<T, E>, useAnyways = false): Result<T, E | null> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, useAnyways = false): Promise<Result<T, E | null>> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic find(predicate: (value: string) => boolean, from = this.state.position): Option<string> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link find}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link findMap}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link findParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Suppose args are from 'ba 1 cc'.\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Err {\n\t * // error: [\n\t * // 'Could not parse ba to a number',\n\t * // 'Could not parse cc to a number'\n\t * // ]\n\t * // }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findParse<T, E>(predicate: (value: string) => Result<T, E>, from = this.state.position): Result<T, E[]> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMapAsync} that returns the errors on failure.\n\t * @note This is an asynchronous variant of {@link findParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, from = this.state.position): Promise<Result<T, E[]>> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Retrieves multiple unused parameters.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many().unwrap()));\n\t * // '1 2 3'\n\t * ```\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many(2).unwrap()));\n\t * // '1 2'\n\t * ```\n\t *\n\t * @param limit The maximum amount of parameters to retrieve, defaults to `Infinity`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The unused parameters within the range.\n\t */\n\tpublic many(limit = Infinity, from = this.state.position): Option<Parameter[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: Parameter[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\t// If the current parameter was already used, skip:\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\t// Mark current parameter as used, and push it to the resulting array:\n\t\t\tthis.state.used.add(i);\n\t\t\tparameters.push(this.results.ordered[i]);\n\n\t\t\t// If the parameters reached the limit, break the loop:\n\t\t\tif (parameters.length >= limit) break;\n\t\t}\n\n\t\treturn parameters.length ? Option.some(parameters) : Option.none;\n\t}\n\n\tpublic filter(predicate: (value: string) => boolean, from = this.state.position): Option<string[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic filterMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\t/**\n\t * Checks whether any of the flags were given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--f --g':\n\t *\n\t * console.log(args.flag('f'));\n\t * // true\n\t *\n\t * console.log(args.flag('g', 'h'));\n\t * // true\n\t *\n\t * console.log(args.flag('h'));\n\t * // false\n\t * ```\n\t *\n\t * @param keys The names of the flags to check.\n\t * @returns Whether or not any of the flags were given.\n\t */\n\tpublic flag(...keys: readonly string[]): boolean {\n\t\treturn keys.some((key) => this.results.flags.has(key));\n\t}\n\n\t/**\n\t * Gets the last value of any option. When there are multiple names, the last value of the last found name is given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: '1' }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: '3' }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The last value of the option, if any.\n\t */\n\tpublic option(...keys: readonly string[]): Option<string> {\n\t\treturn this.options(...keys).map((values) => values.at(-1)!);\n\t}\n\n\t/**\n\t * Gets all values from all options.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: ['1', '1'] }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: ['2', '3'] }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The values from all the options concatenated, if any.\n\t */\n\tpublic options(...keys: readonly string[]): Option<readonly string[]> {\n\t\tconst entries: string[] = [];\n\t\tfor (const key of keys) {\n\t\t\tconst values = this.results.options.get(key);\n\t\t\tif (values) entries.push(...values);\n\t\t}\n\n\t\treturn entries.length ? Option.some(entries) : Option.none;\n\t}\n\n\tpublic save(): ArgumentStream.State {\n\t\treturn {\n\t\t\tused: new Set(this.state.used),\n\t\t\tposition: this.state.position\n\t\t};\n\t}\n\n\tpublic restore(state: ArgumentStream.State) {\n\t\tthis.state = state;\n\t}\n\n\tpublic reset() {\n\t\tthis.restore({ used: new Set(), position: 0 });\n\t}\n}\n\nexport namespace ArgumentStream {\n\texport interface State {\n\t\tused: Set<number>;\n\t\tposition: number;\n\t}\n}\n","export abstract class BaseParameter {\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(separators: readonly string[]) {\n\t\tthis.separators = separators;\n\t}\n\n\tpublic get leading(): string {\n\t\treturn this.separators.join('');\n\t}\n\n\tpublic abstract get raw(): string;\n}\n","import type { QuotedToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class QuotedParameter extends BaseParameter {\n\tpublic readonly value: string;\n\tpublic readonly open: string;\n\tpublic readonly close: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<QuotedToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t\tthis.open = part.open;\n\t\tthis.close = part.close;\n\t}\n\n\tpublic get raw() {\n\t\treturn `${this.open}${this.value}${this.close}`;\n\t}\n}\n","import type { WordToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class WordParameter extends BaseParameter {\n\tpublic readonly value: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<WordToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t}\n\n\tpublic get raw() {\n\t\treturn this.value;\n\t}\n}\n","import type { Lexer } from '../../Lexer';\n\nexport class TokenStream implements Iterable<Token> {\n\tprivate readonly input: string;\n\tprivate readonly quotes: readonly [string, string][];\n\tprivate readonly separator: string;\n\tprivate position = 0;\n\n\tpublic constructor(lexer: Lexer, input: string) {\n\t\tthis.quotes = lexer.quotes;\n\t\tthis.separator = lexer.separator;\n\t\tthis.input = input;\n\t}\n\n\tpublic get finished() {\n\t\treturn this.position >= this.input.length;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Token> {\n\t\twhile (!this.finished) {\n\t\t\tyield this.getPossibleSeparator() ?? this.getPossibleQuotedArgument() ?? this.getParameter();\n\t\t}\n\t}\n\n\tprivate getPossibleSeparator(): SeparatorToken | null {\n\t\tif (this.input.startsWith(this.separator, this.position)) {\n\t\t\tthis.position += this.separator.length;\n\t\t\treturn { type: TokenType.Separator, value: this.separator };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getPossibleQuotedArgument(): QuotedToken | null {\n\t\tfor (const [open, close] of this.quotes) {\n\t\t\tif (!this.input.startsWith(open, this.position)) continue;\n\n\t\t\tconst end = this.input.indexOf(close, this.position + open.length);\n\t\t\tif (end === -1) continue;\n\n\t\t\tconst value = this.input.slice(this.position + open.length, end);\n\t\t\tthis.position = end + close.length;\n\n\t\t\treturn { type: TokenType.Quoted, value, open, close };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getParameter(): WordToken {\n\t\tconst index = this.input.indexOf(this.separator, this.position);\n\t\tconst value = index === -1 ? this.input.slice(this.position) : this.input.slice(this.position, index);\n\t\tthis.position += value.length;\n\t\treturn { type: TokenType.Parameter, value };\n\t}\n}\n\nexport enum TokenType {\n\tParameter,\n\tQuoted,\n\tSeparator\n}\n\nexport type Token = WordToken | QuotedToken | SeparatorToken;\n\nexport interface WordToken {\n\treadonly type: TokenType.Parameter;\n\treadonly value: string;\n}\n\nexport interface QuotedToken {\n\treadonly type: TokenType.Quoted;\n\treadonly value: string;\n\treadonly open: string;\n\treadonly close: string;\n}\n\nexport interface SeparatorToken {\n\treadonly type: TokenType.Separator;\n\treadonly value: string;\n}\n","import { QuotedParameter } from './parameters/QuotedParameter';\nimport { WordParameter } from './parameters/WordParameter';\nimport { TokenType, type Token } from './raw/TokenStream';\n\nexport class ParameterStream {\n\tprivate readonly stream: Iterable<Token>;\n\tprivate separators: string[] = [];\n\n\tpublic constructor(stream: Iterable<Token>) {\n\t\tthis.stream = stream;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Parameter, string[]> {\n\t\tfor (const part of this.stream) {\n\t\t\tif (part.type === TokenType.Separator) {\n\t\t\t\tthis.separators.push(part.value);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tyield part.type === TokenType.Quoted ? new QuotedParameter(this.separators, part) : new WordParameter(this.separators, part);\n\t\t\tthis.separators = [];\n\t\t}\n\n\t\treturn this.separators;\n\t}\n}\n\nexport type Parameter = QuotedParameter | WordParameter;\n","import { ParameterStream } from './streams/ParameterStream';\nimport { TokenStream } from './streams/raw/TokenStream';\n\nexport class Lexer {\n\tpublic readonly quotes: readonly [open: string, close: string][];\n\tpublic readonly separator: string;\n\n\tpublic constructor(options: Lexer.Options = {}) {\n\t\tthis.quotes = options.quotes ?? [];\n\t\tthis.separator = options.separator ?? ' ';\n\t}\n\n\tpublic run(input: string) {\n\t\treturn new ParameterStream(this.raw(input));\n\t}\n\n\tpublic raw(input: string) {\n\t\treturn new TokenStream(this, input);\n\t}\n}\n\nexport namespace Lexer {\n\texport interface Options {\n\t\tseparator?: string;\n\t\tquotes?: readonly [open: string, close: string][];\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { Parser } from './Parser';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\n\nexport class ParserResult {\n\tpublic readonly ordered: Parameter[] = [];\n\tpublic readonly flags = new Set<string>();\n\tpublic readonly options = new Map<string, string[]>();\n\tprivate readonly strategy: IUnorderedStrategy;\n\n\tpublic constructor(parser: Parser) {\n\t\tthis.strategy = parser.strategy;\n\t}\n\n\tpublic parse(parameters: Iterable<Parameter>) {\n\t\tfor (const parameter of parameters) {\n\t\t\tthis.parsePossibleFlag(parameter) || this.parsePossibleOptions(parameter) || this.parseOrdered(parameter);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprivate parsePossibleFlag(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchFlag(parameter.value)\n\t\t\t.inspect((value) => this.flags.add(value))\n\t\t\t.isSome();\n\t}\n\n\tprivate parsePossibleOptions(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchOption(parameter.value)\n\t\t\t.inspect(([key, value]) => {\n\t\t\t\tconst existing = this.options.get(key);\n\t\t\t\tif (existing) existing.push(value);\n\t\t\t\telse this.options.set(key, [value]);\n\t\t\t})\n\t\t\t.isSome();\n\t}\n\n\tprivate parseOrdered(parameter: Parameter): boolean {\n\t\tthis.ordered.push(parameter);\n\t\treturn true;\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class EmptyStrategy implements IUnorderedStrategy {\n\tpublic matchFlag(): Option<string> {\n\t\treturn Option.none;\n\t}\n\n\tpublic matchOption(): Option<readonly [key: string, value: string]> {\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\nimport { ParserResult } from './ParserResult';\nimport { EmptyStrategy } from './strategies/EmptyStrategy';\n\nexport class Parser {\n\tpublic strategy: IUnorderedStrategy;\n\n\tpublic constructor(strategy?: IUnorderedStrategy) {\n\t\tthis.strategy = strategy ?? new EmptyStrategy();\n\t}\n\n\tpublic setUnorderedStrategy(strategy: IUnorderedStrategy) {\n\t\tthis.strategy = strategy;\n\t\treturn this;\n\t}\n\n\tpublic run(input: Iterable<Parameter>): ParserResult {\n\t\treturn new ParserResult(this).parse(input);\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class PrefixedStrategy implements IUnorderedStrategy {\n\tpublic readonly prefixes: readonly string[];\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(prefixes: readonly string[], separators: readonly string[]) {\n\t\tthis.prefixes = prefixes;\n\t\tthis.separators = separators;\n\t}\n\n\tpublic matchFlag(input: string): Option<string> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\t// If the separator is present, return None:\n\t\tif (this.separators.some((x) => input.includes(x, prefix.length))) return Option.none;\n\n\t\treturn Option.some(input.slice(prefix.length));\n\t}\n\n\tpublic matchOption(input: string): Option<readonly [key: string, value: string]> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\tfor (const separator of this.separators) {\n\t\t\tconst index = input.indexOf(separator, prefix.length + 1);\n\n\t\t\t// If the separator is missing, skip:\n\t\t\tif (index === -1) continue;\n\n\t\t\t// If the separator is present, but has no value, return None:\n\t\t\tif (index + separator.length === input.length) return Option.none;\n\n\t\t\tconst key = input.slice(prefix.length, index);\n\t\t\tconst value = input.slice(index + separator.length);\n\t\t\treturn Option.some([key, value] as const);\n\t\t}\n\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\n\n/**\n * Joins the parameters by their `leading` value, using the `value` property.\n * @seealso {@link joinRaw} for the version using `raw` instead of `value`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function join(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].value;\n\n\tlet output = parameters[0].value;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.value;\n\t}\n\n\treturn output;\n}\n\n/**\n * Joins the parameters by their `leading` value, using the `raw` property.\n * @seealso {@link join} for the version using `value` instead of `raw`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function joinRaw(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].raw;\n\n\tlet output = parameters[0].raw;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.raw;\n\t}\n\n\treturn output;\n}\n"]}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -837,5 +837,5 @@ function joinRaw(parameters) {
|
|
|
837
837
|
__name(joinRaw, "joinRaw");
|
|
838
838
|
|
|
839
839
|
export { ArgumentStream, BaseParameter, EmptyStrategy, Lexer, ParameterStream, Parser, ParserResult, PrefixedStrategy, QuotedParameter, TokenStream, TokenType, WordParameter, join, joinRaw };
|
|
840
|
-
//# sourceMappingURL=
|
|
840
|
+
//# sourceMappingURL=index.mjs.map
|
|
841
841
|
//# sourceMappingURL=index.mjs.map
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/ArgumentStream.ts","../../src/lib/lexer/streams/parameters/BaseParameter.ts","../../src/lib/lexer/streams/parameters/QuotedParameter.ts","../../src/lib/lexer/streams/parameters/WordParameter.ts","../../src/lib/lexer/streams/raw/TokenStream.ts","../../src/lib/lexer/streams/ParameterStream.ts","../../src/lib/lexer/Lexer.ts","../../src/lib/parser/ParserResult.ts","../../src/lib/parser/strategies/EmptyStrategy.ts","../../src/lib/parser/Parser.ts","../../src/lib/parser/strategies/PrefixedStrategy.ts","../../src/lib/util/util.ts"],"names":["TokenType","Option"],"mappings":"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","sourcesContent":["import { Option, Result } from '@sapphire/result';\nimport type { Parameter } from './lexer/streams/ParameterStream';\nimport type { ParserResult } from './parser/ParserResult';\n\nexport class ArgumentStream {\n\tpublic readonly results: ParserResult;\n\tpublic state: ArgumentStream.State;\n\n\tpublic constructor(results: ParserResult) {\n\t\tthis.results = results;\n\t\tthis.state = { used: new Set(), position: 0 };\n\t}\n\n\t/**\n\t * Whether or not all ordered parameters were used.\n\t */\n\tpublic get finished() {\n\t\treturn this.used === this.length;\n\t}\n\n\t/**\n\t * The amount of ordered parameters.\n\t */\n\tpublic get length() {\n\t\treturn this.results.ordered.length;\n\t}\n\n\t/**\n\t * The remaining amount of ordered parameters.\n\t */\n\tpublic get remaining() {\n\t\treturn this.length - this.used;\n\t}\n\n\t/**\n\t * The amount of ordered parameters that have been used.\n\t */\n\tpublic get used() {\n\t\treturn this.state.used.size;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '1' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '2' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '3' }\n\t *\n\t * console.log(args.single());\n\t * // None\n\t * ```\n\t *\n\t * @returns The value, if any.\n\t */\n\tpublic single(): Option<string> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tthis.state.used.add(this.state.position);\n\t\treturn Option.some(this.results.ordered[this.state.position++].value);\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link singleMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number) ? Option.none : Option.some(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 1 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 2 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 3 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // None\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic singleMap<T>(predicate: (value: string) => Option<T>, useAnyways = false): Option<T> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleMap}.\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, useAnyways = false): Promise<Option<T>> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Finds and retrieves the next unused parameter and transforms it.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link singleParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 2 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 3 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Err { error: null }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's transformed value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the transformation failed. Defaults to `false`.\n\t * @returns The transformed value, if any.\n\t */\n\tpublic singleParse<T, E>(predicate: (value: string) => Result<T, E>, useAnyways = false): Result<T, E | null> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, useAnyways = false): Promise<Result<T, E | null>> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic find(predicate: (value: string) => boolean, from = this.state.position): Option<string> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link find}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link findMap}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link findParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Suppose args are from 'ba 1 cc'.\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Err {\n\t * // error: [\n\t * // 'Could not parse ba to a number',\n\t * // 'Could not parse cc to a number'\n\t * // ]\n\t * // }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findParse<T, E>(predicate: (value: string) => Result<T, E>, from = this.state.position): Result<T, E[]> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMapAsync} that returns the errors on failure.\n\t * @note This is an asynchronous variant of {@link findParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, from = this.state.position): Promise<Result<T, E[]>> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Retrieves multiple unused parameters.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many().unwrap()));\n\t * // '1 2 3'\n\t * ```\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many(2).unwrap()));\n\t * // '1 2'\n\t * ```\n\t *\n\t * @param limit The maximum amount of parameters to retrieve, defaults to `Infinity`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The unused parameters within the range.\n\t */\n\tpublic many(limit = Infinity, from = this.state.position): Option<Parameter[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: Parameter[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\t// If the current parameter was already used, skip:\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\t// Mark current parameter as used, and push it to the resulting array:\n\t\t\tthis.state.used.add(i);\n\t\t\tparameters.push(this.results.ordered[i]);\n\n\t\t\t// If the parameters reached the limit, break the loop:\n\t\t\tif (parameters.length >= limit) break;\n\t\t}\n\n\t\treturn parameters.length ? Option.some(parameters) : Option.none;\n\t}\n\n\tpublic filter(predicate: (value: string) => boolean, from = this.state.position): Option<string[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic filterMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\t/**\n\t * Checks whether any of the flags were given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--f --g':\n\t *\n\t * console.log(args.flag('f'));\n\t * // true\n\t *\n\t * console.log(args.flag('g', 'h'));\n\t * // true\n\t *\n\t * console.log(args.flag('h'));\n\t * // false\n\t * ```\n\t *\n\t * @param keys The names of the flags to check.\n\t * @returns Whether or not any of the flags were given.\n\t */\n\tpublic flag(...keys: readonly string[]): boolean {\n\t\treturn keys.some((key) => this.results.flags.has(key));\n\t}\n\n\t/**\n\t * Gets the last value of any option. When there are multiple names, the last value of the last found name is given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: '1' }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: '3' }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The last value of the option, if any.\n\t */\n\tpublic option(...keys: readonly string[]): Option<string> {\n\t\treturn this.options(...keys).map((values) => values.at(-1)!);\n\t}\n\n\t/**\n\t * Gets all values from all options.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: ['1', '1'] }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: ['2', '3'] }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The values from all the options concatenated, if any.\n\t */\n\tpublic options(...keys: readonly string[]): Option<readonly string[]> {\n\t\tconst entries: string[] = [];\n\t\tfor (const key of keys) {\n\t\t\tconst values = this.results.options.get(key);\n\t\t\tif (values) entries.push(...values);\n\t\t}\n\n\t\treturn entries.length ? Option.some(entries) : Option.none;\n\t}\n\n\tpublic save(): ArgumentStream.State {\n\t\treturn {\n\t\t\tused: new Set(this.state.used),\n\t\t\tposition: this.state.position\n\t\t};\n\t}\n\n\tpublic restore(state: ArgumentStream.State) {\n\t\tthis.state = state;\n\t}\n\n\tpublic reset() {\n\t\tthis.restore({ used: new Set(), position: 0 });\n\t}\n}\n\nexport namespace ArgumentStream {\n\texport interface State {\n\t\tused: Set<number>;\n\t\tposition: number;\n\t}\n}\n","export abstract class BaseParameter {\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(separators: readonly string[]) {\n\t\tthis.separators = separators;\n\t}\n\n\tpublic get leading(): string {\n\t\treturn this.separators.join('');\n\t}\n\n\tpublic abstract get raw(): string;\n}\n","import type { QuotedToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class QuotedParameter extends BaseParameter {\n\tpublic readonly value: string;\n\tpublic readonly open: string;\n\tpublic readonly close: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<QuotedToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t\tthis.open = part.open;\n\t\tthis.close = part.close;\n\t}\n\n\tpublic get raw() {\n\t\treturn `${this.open}${this.value}${this.close}`;\n\t}\n}\n","import type { WordToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class WordParameter extends BaseParameter {\n\tpublic readonly value: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<WordToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t}\n\n\tpublic get raw() {\n\t\treturn this.value;\n\t}\n}\n","import type { Lexer } from '../../Lexer';\n\nexport class TokenStream implements Iterable<Token> {\n\tprivate readonly input: string;\n\tprivate readonly quotes: readonly [string, string][];\n\tprivate readonly separator: string;\n\tprivate position = 0;\n\n\tpublic constructor(lexer: Lexer, input: string) {\n\t\tthis.quotes = lexer.quotes;\n\t\tthis.separator = lexer.separator;\n\t\tthis.input = input;\n\t}\n\n\tpublic get finished() {\n\t\treturn this.position >= this.input.length;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Token> {\n\t\twhile (!this.finished) {\n\t\t\tyield this.getPossibleSeparator() ?? this.getPossibleQuotedArgument() ?? this.getParameter();\n\t\t}\n\t}\n\n\tprivate getPossibleSeparator(): SeparatorToken | null {\n\t\tif (this.input.startsWith(this.separator, this.position)) {\n\t\t\tthis.position += this.separator.length;\n\t\t\treturn { type: TokenType.Separator, value: this.separator };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getPossibleQuotedArgument(): QuotedToken | null {\n\t\tfor (const [open, close] of this.quotes) {\n\t\t\tif (!this.input.startsWith(open, this.position)) continue;\n\n\t\t\tconst end = this.input.indexOf(close, this.position + open.length);\n\t\t\tif (end === -1) continue;\n\n\t\t\tconst value = this.input.slice(this.position + open.length, end);\n\t\t\tthis.position = end + close.length;\n\n\t\t\treturn { type: TokenType.Quoted, value, open, close };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getParameter(): WordToken {\n\t\tconst index = this.input.indexOf(this.separator, this.position);\n\t\tconst value = index === -1 ? this.input.slice(this.position) : this.input.slice(this.position, index);\n\t\tthis.position += value.length;\n\t\treturn { type: TokenType.Parameter, value };\n\t}\n}\n\nexport enum TokenType {\n\tParameter,\n\tQuoted,\n\tSeparator\n}\n\nexport type Token = WordToken | QuotedToken | SeparatorToken;\n\nexport interface WordToken {\n\treadonly type: TokenType.Parameter;\n\treadonly value: string;\n}\n\nexport interface QuotedToken {\n\treadonly type: TokenType.Quoted;\n\treadonly value: string;\n\treadonly open: string;\n\treadonly close: string;\n}\n\nexport interface SeparatorToken {\n\treadonly type: TokenType.Separator;\n\treadonly value: string;\n}\n","import { QuotedParameter } from './parameters/QuotedParameter';\nimport { WordParameter } from './parameters/WordParameter';\nimport { TokenType, type Token } from './raw/TokenStream';\n\nexport class ParameterStream {\n\tprivate readonly stream: Iterable<Token>;\n\tprivate separators: string[] = [];\n\n\tpublic constructor(stream: Iterable<Token>) {\n\t\tthis.stream = stream;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Parameter, string[]> {\n\t\tfor (const part of this.stream) {\n\t\t\tif (part.type === TokenType.Separator) {\n\t\t\t\tthis.separators.push(part.value);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tyield part.type === TokenType.Quoted ? new QuotedParameter(this.separators, part) : new WordParameter(this.separators, part);\n\t\t\tthis.separators = [];\n\t\t}\n\n\t\treturn this.separators;\n\t}\n}\n\nexport type Parameter = QuotedParameter | WordParameter;\n","import { ParameterStream } from './streams/ParameterStream';\nimport { TokenStream } from './streams/raw/TokenStream';\n\nexport class Lexer {\n\tpublic readonly quotes: readonly [open: string, close: string][];\n\tpublic readonly separator: string;\n\n\tpublic constructor(options: Lexer.Options = {}) {\n\t\tthis.quotes = options.quotes ?? [];\n\t\tthis.separator = options.separator ?? ' ';\n\t}\n\n\tpublic run(input: string) {\n\t\treturn new ParameterStream(this.raw(input));\n\t}\n\n\tpublic raw(input: string) {\n\t\treturn new TokenStream(this, input);\n\t}\n}\n\nexport namespace Lexer {\n\texport interface Options {\n\t\tseparator?: string;\n\t\tquotes?: readonly [open: string, close: string][];\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { Parser } from './Parser';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\n\nexport class ParserResult {\n\tpublic readonly ordered: Parameter[] = [];\n\tpublic readonly flags = new Set<string>();\n\tpublic readonly options = new Map<string, string[]>();\n\tprivate readonly strategy: IUnorderedStrategy;\n\n\tpublic constructor(parser: Parser) {\n\t\tthis.strategy = parser.strategy;\n\t}\n\n\tpublic parse(parameters: Iterable<Parameter>) {\n\t\tfor (const parameter of parameters) {\n\t\t\tthis.parsePossibleFlag(parameter) || this.parsePossibleOptions(parameter) || this.parseOrdered(parameter);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprivate parsePossibleFlag(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchFlag(parameter.value)\n\t\t\t.inspect((value) => this.flags.add(value))\n\t\t\t.isSome();\n\t}\n\n\tprivate parsePossibleOptions(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchOption(parameter.value)\n\t\t\t.inspect(([key, value]) => {\n\t\t\t\tconst existing = this.options.get(key);\n\t\t\t\tif (existing) existing.push(value);\n\t\t\t\telse this.options.set(key, [value]);\n\t\t\t})\n\t\t\t.isSome();\n\t}\n\n\tprivate parseOrdered(parameter: Parameter): boolean {\n\t\tthis.ordered.push(parameter);\n\t\treturn true;\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class EmptyStrategy implements IUnorderedStrategy {\n\tpublic matchFlag(): Option<string> {\n\t\treturn Option.none;\n\t}\n\n\tpublic matchOption(): Option<readonly [key: string, value: string]> {\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\nimport { ParserResult } from './ParserResult';\nimport { EmptyStrategy } from './strategies/EmptyStrategy';\n\nexport class Parser {\n\tpublic strategy: IUnorderedStrategy;\n\n\tpublic constructor(strategy?: IUnorderedStrategy) {\n\t\tthis.strategy = strategy ?? new EmptyStrategy();\n\t}\n\n\tpublic setUnorderedStrategy(strategy: IUnorderedStrategy) {\n\t\tthis.strategy = strategy;\n\t\treturn this;\n\t}\n\n\tpublic run(input: Iterable<Parameter>): ParserResult {\n\t\treturn new ParserResult(this).parse(input);\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class PrefixedStrategy implements IUnorderedStrategy {\n\tpublic readonly prefixes: readonly string[];\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(prefixes: readonly string[], separators: readonly string[]) {\n\t\tthis.prefixes = prefixes;\n\t\tthis.separators = separators;\n\t}\n\n\tpublic matchFlag(input: string): Option<string> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\t// If the separator is present, return None:\n\t\tif (this.separators.some((x) => input.includes(x, prefix.length))) return Option.none;\n\n\t\treturn Option.some(input.slice(prefix.length));\n\t}\n\n\tpublic matchOption(input: string): Option<readonly [key: string, value: string]> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\tfor (const separator of this.separators) {\n\t\t\tconst index = input.indexOf(separator, prefix.length + 1);\n\n\t\t\t// If the separator is missing, skip:\n\t\t\tif (index === -1) continue;\n\n\t\t\t// If the separator is present, but has no value, return None:\n\t\t\tif (index + separator.length === input.length) return Option.none;\n\n\t\t\tconst key = input.slice(prefix.length, index);\n\t\t\tconst value = input.slice(index + separator.length);\n\t\t\treturn Option.some([key, value] as const);\n\t\t}\n\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\n\n/**\n * Joins the parameters by their `leading` value, using the `value` property.\n * @seealso {@link joinRaw} for the version using `raw` instead of `value`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function join(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].value;\n\n\tlet output = parameters[0].value;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.value;\n\t}\n\n\treturn output;\n}\n\n/**\n * Joins the parameters by their `leading` value, using the `raw` property.\n * @seealso {@link join} for the version using `value` instead of `raw`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function joinRaw(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].raw;\n\n\tlet output = parameters[0].raw;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.raw;\n\t}\n\n\treturn output;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/ArgumentStream.ts","../../src/lib/lexer/streams/parameters/BaseParameter.ts","../../src/lib/lexer/streams/parameters/QuotedParameter.ts","../../src/lib/lexer/streams/parameters/WordParameter.ts","../../src/lib/lexer/streams/raw/TokenStream.ts","../../src/lib/lexer/streams/ParameterStream.ts","../../src/lib/lexer/Lexer.ts","../../src/lib/parser/ParserResult.ts","../../src/lib/parser/strategies/EmptyStrategy.ts","../../src/lib/parser/Parser.ts","../../src/lib/parser/strategies/PrefixedStrategy.ts","../../src/lib/util/util.ts"],"names":["TokenType","Option"],"mappings":";;;;;;AAIO,IAAM,eAAA,GAAN,MAAM,eAAe,CAAA;AAAA,EAIpB,YAAY,OAAuB,EAAA;AAH1C,IAAgB,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;AAChB,IAAO,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAGN,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA,CAAA;AACf,IAAA,IAAA,CAAK,QAAQ,EAAE,IAAA,sBAAU,GAAI,EAAA,EAAG,UAAU,CAAE,EAAA,CAAA;AAAA,GAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,QAAW,GAAA;AACrB,IAAO,OAAA,IAAA,CAAK,SAAS,IAAK,CAAA,MAAA,CAAA;AAAA,GAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,MAAS,GAAA;AACnB,IAAO,OAAA,IAAA,CAAK,QAAQ,OAAQ,CAAA,MAAA,CAAA;AAAA,GAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,SAAY,GAAA;AACtB,IAAO,OAAA,IAAA,CAAK,SAAS,IAAK,CAAA,IAAA,CAAA;AAAA,GAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,IAAO,GAAA;AACjB,IAAO,OAAA,IAAA,CAAK,MAAM,IAAK,CAAA,IAAA,CAAA;AAAA,GACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBO,MAAyB,GAAA;AAC/B,IAAI,IAAA,IAAA,CAAK,QAAU,EAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAEjC,IAAA,OAAO,KAAK,KAAM,CAAA,IAAA,CAAK,IAAI,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAG,EAAA;AAChD,MAAA,EAAE,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,KACd;AAEA,IAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,MAAM,QAAQ,CAAA,CAAA;AACvC,IAAO,OAAA,MAAA,CAAO,KAAK,IAAK,CAAA,OAAA,CAAQ,QAAQ,IAAK,CAAA,KAAA,CAAM,QAAU,EAAA,CAAA,CAAE,KAAK,CAAA,CAAA;AAAA,GACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkCO,SAAA,CAAa,SAAyC,EAAA,UAAA,GAAa,KAAkB,EAAA;AAC3F,IAAI,IAAA,IAAA,CAAK,QAAU,EAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAEjC,IAAA,OAAO,KAAK,KAAM,CAAA,IAAA,CAAK,IAAI,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAG,EAAA;AAChD,MAAA,EAAE,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,KACd;AAEA,IAAM,MAAA,MAAA,GAAS,UAAU,IAAK,CAAA,OAAA,CAAQ,QAAQ,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAA,CAAE,KAAK,CAAA,CAAA;AACxE,IAAI,IAAA,MAAA,CAAO,MAAO,EAAA,IAAK,UAAY,EAAA;AAClC,MAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,MAAM,QAAQ,CAAA,CAAA;AACvC,MAAA,EAAE,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,KACd;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,cAAA,CAAkB,SAAkD,EAAA,UAAA,GAAa,KAA2B,EAAA;AACxH,IAAI,IAAA,IAAA,CAAK,QAAU,EAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAEjC,IAAA,OAAO,KAAK,KAAM,CAAA,IAAA,CAAK,IAAI,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAG,EAAA;AAChD,MAAA,EAAE,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,KACd;AAEA,IAAM,MAAA,MAAA,GAAS,MAAM,SAAA,CAAU,IAAK,CAAA,OAAA,CAAQ,QAAQ,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAA,CAAE,KAAK,CAAA,CAAA;AAC9E,IAAI,IAAA,MAAA,CAAO,MAAO,EAAA,IAAK,UAAY,EAAA;AAClC,MAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,MAAM,QAAQ,CAAA,CAAA;AACvC,MAAA,EAAE,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,KACd;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsCO,WAAA,CAAkB,SAA4C,EAAA,UAAA,GAAa,KAA4B,EAAA;AAC7G,IAAA,IAAI,IAAK,CAAA,QAAA,EAAiB,OAAA,MAAA,CAAO,IAAI,IAAI,CAAA,CAAA;AAEzC,IAAA,OAAO,KAAK,KAAM,CAAA,IAAA,CAAK,IAAI,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAG,EAAA;AAChD,MAAA,EAAE,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,KACd;AAEA,IAAM,MAAA,MAAA,GAAS,UAAU,IAAK,CAAA,OAAA,CAAQ,QAAQ,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAA,CAAE,KAAK,CAAA,CAAA;AACxE,IAAI,IAAA,MAAA,CAAO,IAAK,EAAA,IAAK,UAAY,EAAA;AAChC,MAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,MAAM,QAAQ,CAAA,CAAA;AACvC,MAAA,EAAE,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,KACd;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAa,gBAAA,CAAuB,SAAqD,EAAA,UAAA,GAAa,KAAqC,EAAA;AAC1I,IAAA,IAAI,IAAK,CAAA,QAAA,EAAiB,OAAA,MAAA,CAAO,IAAI,IAAI,CAAA,CAAA;AAEzC,IAAA,OAAO,KAAK,KAAM,CAAA,IAAA,CAAK,IAAI,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAG,EAAA;AAChD,MAAA,EAAE,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,KACd;AAEA,IAAM,MAAA,MAAA,GAAS,MAAM,SAAA,CAAU,IAAK,CAAA,OAAA,CAAQ,QAAQ,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAA,CAAE,KAAK,CAAA,CAAA;AAC9E,IAAI,IAAA,MAAA,CAAO,IAAK,EAAA,IAAK,UAAY,EAAA;AAChC,MAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,MAAM,QAAQ,CAAA,CAAA;AACvC,MAAA,EAAE,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,KACd;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,IAAK,CAAA,SAAA,EAAuC,IAAO,GAAA,IAAA,CAAK,MAAM,QAA0B,EAAA;AAC9F,IAAA,KAAA,IAAS,IAAI,IAAM,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACxC,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAE5B,MAAA,MAAM,SAAY,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAE,CAAA,KAAA,CAAA;AAC1C,MAAI,IAAA,SAAA,CAAU,SAAS,CAAG,EAAA;AACzB,QAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACrB,QAAO,OAAA,MAAA,CAAO,KAAK,SAAS,CAAA,CAAA;AAAA,OAC7B;AAAA,KACD;AAEA,IAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAAA,GACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAa,SAAU,CAAA,SAAA,EAAgD,IAAO,GAAA,IAAA,CAAK,MAAM,QAAmC,EAAA;AAC3H,IAAA,KAAA,IAAS,IAAI,IAAM,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACxC,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAE5B,MAAA,MAAM,SAAY,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAE,CAAA,KAAA,CAAA;AAC1C,MAAI,IAAA,MAAM,SAAU,CAAA,SAAS,CAAG,EAAA;AAC/B,QAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACrB,QAAO,OAAA,MAAA,CAAO,KAAK,SAAS,CAAA,CAAA;AAAA,OAC7B;AAAA,KACD;AAEA,IAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAAA,GACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBO,OAAW,CAAA,SAAA,EAAyC,IAAO,GAAA,IAAA,CAAK,MAAM,QAAqB,EAAA;AACjG,IAAA,KAAA,IAAS,IAAI,IAAM,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACxC,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAE5B,MAAA,MAAM,SAAY,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAE,CAAA,KAAA,CAAA;AAC1C,MAAM,MAAA,MAAA,GAAS,UAAU,SAAS,CAAA,CAAA;AAClC,MAAI,IAAA,MAAA,CAAO,QAAU,EAAA;AACpB,QAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACrB,QAAO,OAAA,MAAA,CAAA;AAAA,OACR;AAAA,KACD;AAEA,IAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAAA,GACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,MAAa,YAAgB,CAAA,SAAA,EAAkD,IAAO,GAAA,IAAA,CAAK,MAAM,QAA8B,EAAA;AAC9H,IAAA,KAAA,IAAS,IAAI,IAAM,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACxC,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAE5B,MAAA,MAAM,SAAY,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAE,CAAA,KAAA,CAAA;AAC1C,MAAM,MAAA,MAAA,GAAS,MAAM,SAAA,CAAU,SAAS,CAAA,CAAA;AACxC,MAAI,IAAA,MAAA,CAAO,QAAU,EAAA;AACpB,QAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACrB,QAAO,OAAA,MAAA,CAAA;AAAA,OACR;AAAA,KACD;AAEA,IAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAAA,GACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuCO,SAAgB,CAAA,SAAA,EAA4C,IAAO,GAAA,IAAA,CAAK,MAAM,QAA0B,EAAA;AAC9G,IAAA,MAAM,SAAc,EAAC,CAAA;AACrB,IAAA,KAAA,IAAS,IAAI,IAAM,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACxC,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAE5B,MAAA,MAAM,SAAY,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAE,CAAA,KAAA,CAAA;AAC1C,MAAM,MAAA,MAAA,GAAS,UAAU,SAAS,CAAA,CAAA;AAClC,MAAI,IAAA,MAAA,CAAO,MAAQ,EAAA;AAClB,QAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACrB,QAAO,OAAA,MAAA,CAAA;AAAA,OACR;AAEA,MAAO,MAAA,CAAA,IAAA,CAAK,MAAO,CAAA,SAAA,EAAW,CAAA,CAAA;AAAA,KAC/B;AAEA,IAAO,OAAA,MAAA,CAAO,IAAI,MAAM,CAAA,CAAA;AAAA,GACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAa,cAAqB,CAAA,SAAA,EAAqD,IAAO,GAAA,IAAA,CAAK,MAAM,QAAmC,EAAA;AAC3I,IAAA,MAAM,SAAc,EAAC,CAAA;AACrB,IAAA,KAAA,IAAS,IAAI,IAAM,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACxC,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAE5B,MAAA,MAAM,SAAY,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAE,CAAA,KAAA,CAAA;AAC1C,MAAM,MAAA,MAAA,GAAS,MAAM,SAAA,CAAU,SAAS,CAAA,CAAA;AACxC,MAAI,IAAA,MAAA,CAAO,MAAQ,EAAA;AAClB,QAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACrB,QAAO,OAAA,MAAA,CAAA;AAAA,OACR;AAEA,MAAO,MAAA,CAAA,IAAA,CAAK,MAAO,CAAA,SAAA,EAAW,CAAA,CAAA;AAAA,KAC/B;AAEA,IAAO,OAAA,MAAA,CAAO,IAAI,MAAM,CAAA,CAAA;AAAA,GACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBO,KAAK,KAAQ,GAAA,QAAA,EAAU,IAAO,GAAA,IAAA,CAAK,MAAM,QAA+B,EAAA;AAC9E,IAAI,IAAA,IAAA,CAAK,QAAU,EAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAEjC,IAAA,MAAM,aAA0B,EAAC,CAAA;AACjC,IAAA,KAAA,IAAS,IAAI,IAAM,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AAExC,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAG5B,MAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACrB,MAAA,UAAA,CAAW,IAAK,CAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAGvC,MAAI,IAAA,UAAA,CAAW,UAAU,KAAO,EAAA,MAAA;AAAA,KACjC;AAEA,IAAA,OAAO,WAAW,MAAS,GAAA,MAAA,CAAO,IAAK,CAAA,UAAU,IAAI,MAAO,CAAA,IAAA,CAAA;AAAA,GAC7D;AAAA,EAEO,MAAO,CAAA,SAAA,EAAuC,IAAO,GAAA,IAAA,CAAK,MAAM,QAA4B,EAAA;AAClG,IAAI,IAAA,IAAA,CAAK,QAAU,EAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAEjC,IAAA,MAAM,aAAuB,EAAC,CAAA;AAC9B,IAAA,KAAA,IAAS,IAAI,IAAM,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACxC,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAE5B,MAAA,MAAM,SAAY,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAE,CAAA,KAAA,CAAA;AAC1C,MAAI,IAAA,SAAA,CAAU,SAAS,CAAG,EAAA;AACzB,QAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACrB,QAAA,UAAA,CAAW,KAAK,SAAS,CAAA,CAAA;AAAA,OAC1B;AAAA,KACD;AAEA,IAAO,OAAA,MAAA,CAAO,KAAK,UAAU,CAAA,CAAA;AAAA,GAC9B;AAAA,EAEA,MAAa,WAAY,CAAA,SAAA,EAAgD,IAAO,GAAA,IAAA,CAAK,MAAM,QAAqC,EAAA;AAC/H,IAAI,IAAA,IAAA,CAAK,QAAU,EAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAEjC,IAAA,MAAM,aAAuB,EAAC,CAAA;AAC9B,IAAA,KAAA,IAAS,IAAI,IAAM,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACxC,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAE5B,MAAA,MAAM,SAAY,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAE,CAAA,KAAA,CAAA;AAC1C,MAAI,IAAA,MAAM,SAAU,CAAA,SAAS,CAAG,EAAA;AAC/B,QAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACrB,QAAA,UAAA,CAAW,KAAK,SAAS,CAAA,CAAA;AAAA,OAC1B;AAAA,KACD;AAEA,IAAO,OAAA,MAAA,CAAO,KAAK,UAAU,CAAA,CAAA;AAAA,GAC9B;AAAA,EAEO,SAAa,CAAA,SAAA,EAAyC,IAAO,GAAA,IAAA,CAAK,MAAM,QAAuB,EAAA;AACrG,IAAI,IAAA,IAAA,CAAK,QAAU,EAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAEjC,IAAA,MAAM,aAAkB,EAAC,CAAA;AACzB,IAAA,KAAA,IAAS,IAAI,IAAM,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACxC,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAE5B,MAAA,MAAM,SAAY,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAE,CAAA,KAAA,CAAA;AAC1C,MAAM,MAAA,MAAA,GAAS,UAAU,SAAS,CAAA,CAAA;AAClC,MAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AACzB,QAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACrB,QAAA,UAAA,CAAW,KAAK,KAAK,CAAA,CAAA;AAAA,OACrB,CAAA,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,MAAA,CAAO,KAAK,UAAU,CAAA,CAAA;AAAA,GAC9B;AAAA,EAEA,MAAa,cAAkB,CAAA,SAAA,EAAkD,IAAO,GAAA,IAAA,CAAK,MAAM,QAAgC,EAAA;AAClI,IAAI,IAAA,IAAA,CAAK,QAAU,EAAA,OAAO,MAAO,CAAA,IAAA,CAAA;AAEjC,IAAA,MAAM,aAAkB,EAAC,CAAA;AACzB,IAAA,KAAA,IAAS,IAAI,IAAM,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACxC,MAAA,IAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAE5B,MAAA,MAAM,SAAY,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAE,CAAA,KAAA,CAAA;AAC1C,MAAM,MAAA,MAAA,GAAS,MAAM,SAAA,CAAU,SAAS,CAAA,CAAA;AACxC,MAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AACzB,QAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACrB,QAAA,UAAA,CAAW,KAAK,KAAK,CAAA,CAAA;AAAA,OACrB,CAAA,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,MAAA,CAAO,KAAK,UAAU,CAAA,CAAA;AAAA,GAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,QAAQ,IAAkC,EAAA;AAChD,IAAO,OAAA,IAAA,CAAK,KAAK,CAAC,GAAA,KAAQ,KAAK,OAAQ,CAAA,KAAA,CAAM,GAAI,CAAA,GAAG,CAAC,CAAA,CAAA;AAAA,GACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBO,UAAU,IAAyC,EAAA;AACzD,IAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,GAAG,IAAI,CAAA,CAAE,GAAI,CAAA,CAAC,MAAW,KAAA,MAAA,CAAO,EAAG,CAAA,CAAA,CAAE,CAAE,CAAA,CAAA;AAAA,GAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBO,WAAW,IAAoD,EAAA;AACrE,IAAA,MAAM,UAAoB,EAAC,CAAA;AAC3B,IAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACvB,MAAA,MAAM,MAAS,GAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,IAAI,GAAG,CAAA,CAAA;AAC3C,MAAA,IAAI,MAAQ,EAAA,OAAA,CAAQ,IAAK,CAAA,GAAG,MAAM,CAAA,CAAA;AAAA,KACnC;AAEA,IAAA,OAAO,QAAQ,MAAS,GAAA,MAAA,CAAO,IAAK,CAAA,OAAO,IAAI,MAAO,CAAA,IAAA,CAAA;AAAA,GACvD;AAAA,EAEO,IAA6B,GAAA;AACnC,IAAO,OAAA;AAAA,MACN,IAAM,EAAA,IAAI,GAAI,CAAA,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC7B,QAAA,EAAU,KAAK,KAAM,CAAA,QAAA;AAAA,KACtB,CAAA;AAAA,GACD;AAAA,EAEO,QAAQ,KAA6B,EAAA;AAC3C,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AAAA,GACd;AAAA,EAEO,KAAQ,GAAA;AACd,IAAK,IAAA,CAAA,OAAA,CAAQ,EAAE,IAAM,kBAAA,IAAI,KAAO,EAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AAAA,GAC9C;AACD,CAAA,CAAA;AA5oB4B,MAAA,CAAA,eAAA,EAAA,gBAAA,CAAA,CAAA;AAArB,IAAM,cAAN,GAAA,gBAAA;;;ACJA,IAAe,cAAA,GAAf,MAAe,cAAc,CAAA;AAAA,EAG5B,YAAY,UAA+B,EAAA;AAFlD,IAAgB,aAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAA;AAGf,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAAA,GACnB;AAAA,EAEA,IAAW,OAAkB,GAAA;AAC5B,IAAO,OAAA,IAAA,CAAK,UAAW,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAAA,GAC/B;AAGD,CAAA,CAAA;AAZoC,MAAA,CAAA,cAAA,EAAA,eAAA,CAAA,CAAA;AAA7B,IAAe,aAAf,GAAA,eAAA;;;ACGA,IAAM,gBAAA,GAAN,MAAM,gBAAA,SAAwB,aAAc,CAAA;AAAA,EAK3C,WAAA,CAAY,YAA+B,IAAiC,EAAA;AAClF,IAAA,KAAA,CAAM,UAAU,CAAA,CAAA;AALjB,IAAgB,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAChB,IAAgB,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAChB,IAAgB,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAIf,IAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,KAAA,CAAA;AAClB,IAAA,IAAA,CAAK,OAAO,IAAK,CAAA,IAAA,CAAA;AACjB,IAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,KAAA,CAAA;AAAA,GACnB;AAAA,EAEA,IAAW,GAAM,GAAA;AAChB,IAAO,OAAA,CAAA,EAAG,KAAK,IAAI,CAAA,EAAG,KAAK,KAAK,CAAA,EAAG,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,GAC9C;AACD,CAAA,CAAA;AAfmD,MAAA,CAAA,gBAAA,EAAA,iBAAA,CAAA,CAAA;AAA5C,IAAM,eAAN,GAAA,iBAAA;;;ACAA,IAAM,cAAA,GAAN,MAAM,cAAA,SAAsB,aAAc,CAAA;AAAA,EAGzC,WAAA,CAAY,YAA+B,IAA+B,EAAA;AAChF,IAAA,KAAA,CAAM,UAAU,CAAA,CAAA;AAHjB,IAAgB,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAIf,IAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,KAAA,CAAA;AAAA,GACnB;AAAA,EAEA,IAAW,GAAM,GAAA;AAChB,IAAA,OAAO,IAAK,CAAA,KAAA,CAAA;AAAA,GACb;AACD,CAAA,CAAA;AAXiD,MAAA,CAAA,cAAA,EAAA,eAAA,CAAA,CAAA;AAA1C,IAAM,aAAN,GAAA,eAAA;;;ACDA,IAAM,YAAA,GAAN,MAAM,YAAuC,CAAA;AAAA,EAM5C,WAAA,CAAY,OAAc,KAAe,EAAA;AALhD,IAAiB,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AACjB,IAAiB,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AACjB,IAAiB,aAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAW,EAAA,CAAA,CAAA,CAAA;AAGlB,IAAA,IAAA,CAAK,SAAS,KAAM,CAAA,MAAA,CAAA;AACpB,IAAA,IAAA,CAAK,YAAY,KAAM,CAAA,SAAA,CAAA;AACvB,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAW,QAAW,GAAA;AACrB,IAAO,OAAA,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,KAAM,CAAA,MAAA,CAAA;AAAA,GACpC;AAAA,EAEA,EAAS,MAAO,CAAA,QAAQ,CAAqB,GAAA;AAC5C,IAAO,OAAA,CAAC,KAAK,QAAU,EAAA;AACtB,MAAA,MAAM,KAAK,oBAAqB,EAAA,IAAK,KAAK,yBAA0B,EAAA,IAAK,KAAK,YAAa,EAAA,CAAA;AAAA,KAC5F;AAAA,GACD;AAAA,EAEQ,oBAA8C,GAAA;AACrD,IAAA,IAAI,KAAK,KAAM,CAAA,UAAA,CAAW,KAAK,SAAW,EAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AACzD,MAAK,IAAA,CAAA,QAAA,IAAY,KAAK,SAAU,CAAA,MAAA,CAAA;AAChC,MAAA,OAAO,EAAE,IAAA,EAAM,CAAqB,kBAAA,KAAA,EAAO,KAAK,SAAU,EAAA,CAAA;AAAA,KAC3D;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACR;AAAA,EAEQ,yBAAgD,GAAA;AACvD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,KAAK,MAAQ,EAAA;AACxC,MAAA,IAAI,CAAC,IAAK,CAAA,KAAA,CAAM,WAAW,IAAM,EAAA,IAAA,CAAK,QAAQ,CAAG,EAAA,SAAA;AAEjD,MAAM,MAAA,GAAA,GAAM,KAAK,KAAM,CAAA,OAAA,CAAQ,OAAO,IAAK,CAAA,QAAA,GAAW,KAAK,MAAM,CAAA,CAAA;AACjE,MAAA,IAAI,QAAQ,CAAI,CAAA,EAAA,SAAA;AAEhB,MAAM,MAAA,KAAA,GAAQ,KAAK,KAAM,CAAA,KAAA,CAAM,KAAK,QAAW,GAAA,IAAA,CAAK,QAAQ,GAAG,CAAA,CAAA;AAC/D,MAAK,IAAA,CAAA,QAAA,GAAW,MAAM,KAAM,CAAA,MAAA,CAAA;AAE5B,MAAA,OAAO,EAAE,IAAA,EAAM,CAAkB,eAAA,KAAA,EAAO,MAAM,KAAM,EAAA,CAAA;AAAA,KACrD;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACR;AAAA,EAEQ,YAA0B,GAAA;AACjC,IAAA,MAAM,QAAQ,IAAK,CAAA,KAAA,CAAM,QAAQ,IAAK,CAAA,SAAA,EAAW,KAAK,QAAQ,CAAA,CAAA;AAC9D,IAAA,MAAM,KAAQ,GAAA,KAAA,KAAU,CAAK,CAAA,GAAA,IAAA,CAAK,MAAM,KAAM,CAAA,IAAA,CAAK,QAAQ,CAAA,GAAI,IAAK,CAAA,KAAA,CAAM,KAAM,CAAA,IAAA,CAAK,UAAU,KAAK,CAAA,CAAA;AACpG,IAAA,IAAA,CAAK,YAAY,KAAM,CAAA,MAAA,CAAA;AACvB,IAAO,OAAA,EAAE,IAAM,EAAA,CAAA,kBAAqB,KAAM,EAAA,CAAA;AAAA,GAC3C;AACD,CAAA,CAAA;AArDoD,MAAA,CAAA,YAAA,EAAA,aAAA,CAAA,CAAA;AAA7C,IAAM,WAAN,GAAA,aAAA;AAuDK,IAAA,SAAA,qBAAAA,UAAL,KAAA;AACN,EAAAA,UAAA,CAAA,UAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA,CAAA;AACA,EAAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA,CAAA;AACA,EAAAA,UAAA,CAAA,UAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA,CAAA;AAHW,EAAAA,OAAAA,UAAAA,CAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA,EAAA;;;ACrDL,IAAM,gBAAA,GAAN,MAAM,gBAAgB,CAAA;AAAA,EAIrB,YAAY,MAAyB,EAAA;AAH5C,IAAiB,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAuB,EAAC,CAAA,CAAA;AAG/B,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA,CAAA;AAAA,GACf;AAAA,EAEA,EAAS,MAAO,CAAA,QAAQ,CAAmC,GAAA;AAC1D,IAAW,KAAA,MAAA,IAAA,IAAQ,KAAK,MAAQ,EAAA;AAC/B,MAAA,IAAI,KAAK,IAA8B,KAAA,CAAA,kBAAA;AACtC,QAAK,IAAA,CAAA,UAAA,CAAW,IAAK,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAC/B,QAAA,SAAA;AAAA,OACD;AAEA,MAAA,MAAM,IAAK,CAAA,IAAA,KAAA,CAAA,gBAA4B,IAAI,eAAA,CAAgB,IAAK,CAAA,UAAA,EAAY,IAAI,CAAA,GAAI,IAAI,aAAA,CAAc,IAAK,CAAA,UAAA,EAAY,IAAI,CAAA,CAAA;AAC3H,MAAA,IAAA,CAAK,aAAa,EAAC,CAAA;AAAA,KACpB;AAEA,IAAA,OAAO,IAAK,CAAA,UAAA,CAAA;AAAA,GACb;AACD,CAAA,CAAA;AArB6B,MAAA,CAAA,gBAAA,EAAA,iBAAA,CAAA,CAAA;AAAtB,IAAM,eAAN,GAAA,iBAAA;;;ACDA,IAAM,MAAA,GAAN,MAAM,MAAM,CAAA;AAAA,EAIX,WAAA,CAAY,OAAyB,GAAA,EAAI,EAAA;AAHhD,IAAgB,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAChB,IAAgB,aAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AAGf,IAAK,IAAA,CAAA,MAAA,GAAS,OAAQ,CAAA,MAAA,IAAU,EAAC,CAAA;AACjC,IAAK,IAAA,CAAA,SAAA,GAAY,QAAQ,SAAa,IAAA,GAAA,CAAA;AAAA,GACvC;AAAA,EAEO,IAAI,KAAe,EAAA;AACzB,IAAA,OAAO,IAAI,eAAA,CAAgB,IAAK,CAAA,GAAA,CAAI,KAAK,CAAC,CAAA,CAAA;AAAA,GAC3C;AAAA,EAEO,IAAI,KAAe,EAAA;AACzB,IAAO,OAAA,IAAI,WAAY,CAAA,IAAA,EAAM,KAAK,CAAA,CAAA;AAAA,GACnC;AACD,CAAA,CAAA;AAhBmB,MAAA,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA;AAAZ,IAAM,KAAN,GAAA,OAAA;;;ACCA,IAAM,aAAA,GAAN,MAAM,aAAa,CAAA;AAAA,EAMlB,YAAY,MAAgB,EAAA;AALnC,IAAA,aAAA,CAAA,IAAA,EAAgB,WAAuB,EAAC,CAAA,CAAA;AACxC,IAAgB,aAAA,CAAA,IAAA,EAAA,OAAA,sBAAY,GAAY,EAAA,CAAA,CAAA;AACxC,IAAgB,aAAA,CAAA,IAAA,EAAA,SAAA,sBAAc,GAAsB,EAAA,CAAA,CAAA;AACpD,IAAiB,aAAA,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AAGhB,IAAA,IAAA,CAAK,WAAW,MAAO,CAAA,QAAA,CAAA;AAAA,GACxB;AAAA,EAEO,MAAM,UAAiC,EAAA;AAC7C,IAAA,KAAA,MAAW,aAAa,UAAY,EAAA;AACnC,MAAK,IAAA,CAAA,iBAAA,CAAkB,SAAS,CAAK,IAAA,IAAA,CAAK,qBAAqB,SAAS,CAAA,IAAK,IAAK,CAAA,YAAA,CAAa,SAAS,CAAA,CAAA;AAAA,KACzG;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACR;AAAA,EAEQ,kBAAkB,SAA+B,EAAA;AACxD,IAAA,OAAO,IAAK,CAAA,QAAA,CACV,SAAU,CAAA,SAAA,CAAU,KAAK,CACzB,CAAA,OAAA,CAAQ,CAAC,KAAA,KAAU,KAAK,KAAM,CAAA,GAAA,CAAI,KAAK,CAAC,EACxC,MAAO,EAAA,CAAA;AAAA,GACV;AAAA,EAEQ,qBAAqB,SAA+B,EAAA;AAC3D,IAAO,OAAA,IAAA,CAAK,QACV,CAAA,WAAA,CAAY,SAAU,CAAA,KAAK,CAC3B,CAAA,OAAA,CAAQ,CAAC,CAAC,GAAK,EAAA,KAAK,CAAM,KAAA;AAC1B,MAAA,MAAM,QAAW,GAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AACrC,MAAI,IAAA,QAAA,EAAmB,QAAA,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,gBACvB,OAAQ,CAAA,GAAA,CAAI,GAAK,EAAA,CAAC,KAAK,CAAC,CAAA,CAAA;AAAA,KAClC,EACA,MAAO,EAAA,CAAA;AAAA,GACV;AAAA,EAEQ,aAAa,SAA+B,EAAA;AACnD,IAAK,IAAA,CAAA,OAAA,CAAQ,KAAK,SAAS,CAAA,CAAA;AAC3B,IAAO,OAAA,IAAA,CAAA;AAAA,GACR;AACD,CAAA,CAAA;AAxC0B,MAAA,CAAA,aAAA,EAAA,cAAA,CAAA,CAAA;AAAnB,IAAM,YAAN,GAAA,cAAA;ACDA,IAAM,cAAA,GAAN,MAAM,cAA4C,CAAA;AAAA,EACjD,SAA4B,GAAA;AAClC,IAAA,OAAOC,MAAO,CAAA,IAAA,CAAA;AAAA,GACf;AAAA,EAEO,WAA6D,GAAA;AACnE,IAAA,OAAOA,MAAO,CAAA,IAAA,CAAA;AAAA,GACf;AACD,CAAA,CAAA;AARyD,MAAA,CAAA,cAAA,EAAA,eAAA,CAAA,CAAA;AAAlD,IAAM,aAAN,GAAA,eAAA;;;ACEA,IAAM,OAAA,GAAN,MAAM,OAAO,CAAA;AAAA,EAGZ,YAAY,QAA+B,EAAA;AAFlD,IAAO,aAAA,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AAGN,IAAK,IAAA,CAAA,QAAA,GAAW,QAAY,IAAA,IAAI,aAAc,EAAA,CAAA;AAAA,GAC/C;AAAA,EAEO,qBAAqB,QAA8B,EAAA;AACzD,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAChB,IAAO,OAAA,IAAA,CAAA;AAAA,GACR;AAAA,EAEO,IAAI,KAA0C,EAAA;AACpD,IAAA,OAAO,IAAI,YAAA,CAAa,IAAI,CAAA,CAAE,MAAM,KAAK,CAAA,CAAA;AAAA,GAC1C;AACD,CAAA,CAAA;AAfoB,MAAA,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA;AAAb,IAAM,MAAN,GAAA,QAAA;ACFA,IAAM,iBAAA,GAAN,MAAM,iBAA+C,CAAA;AAAA,EAIpD,WAAA,CAAY,UAA6B,UAA+B,EAAA;AAH/E,IAAgB,aAAA,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AAChB,IAAgB,aAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAA;AAGf,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAChB,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAAA,GACnB;AAAA,EAEO,UAAU,KAA+B,EAAA;AAC/C,IAAM,MAAA,MAAA,GAAS,KAAK,QAAS,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,KAAA,CAAM,UAAW,CAAA,CAAC,CAAC,CAAA,CAAA;AAG5D,IAAI,IAAA,CAAC,MAAQ,EAAA,OAAOA,MAAO,CAAA,IAAA,CAAA;AAG3B,IAAA,IAAI,IAAK,CAAA,UAAA,CAAW,IAAK,CAAA,CAAC,CAAM,KAAA,KAAA,CAAM,QAAS,CAAA,CAAA,EAAG,MAAO,CAAA,MAAM,CAAC,CAAA,SAAUA,MAAO,CAAA,IAAA,CAAA;AAEjF,IAAA,OAAOA,OAAO,IAAK,CAAA,KAAA,CAAM,KAAM,CAAA,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAAA,GAC9C;AAAA,EAEO,YAAY,KAA8D,EAAA;AAChF,IAAM,MAAA,MAAA,GAAS,KAAK,QAAS,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,KAAA,CAAM,UAAW,CAAA,CAAC,CAAC,CAAA,CAAA;AAG5D,IAAI,IAAA,CAAC,MAAQ,EAAA,OAAOA,MAAO,CAAA,IAAA,CAAA;AAE3B,IAAW,KAAA,MAAA,SAAA,IAAa,KAAK,UAAY,EAAA;AACxC,MAAA,MAAM,QAAQ,KAAM,CAAA,OAAA,CAAQ,SAAW,EAAA,MAAA,CAAO,SAAS,CAAC,CAAA,CAAA;AAGxD,MAAA,IAAI,UAAU,CAAI,CAAA,EAAA,SAAA;AAGlB,MAAA,IAAI,QAAQ,SAAU,CAAA,MAAA,KAAW,KAAM,CAAA,MAAA,SAAeA,MAAO,CAAA,IAAA,CAAA;AAE7D,MAAA,MAAM,GAAM,GAAA,KAAA,CAAM,KAAM,CAAA,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAA;AAC5C,MAAA,MAAM,KAAQ,GAAA,KAAA,CAAM,KAAM,CAAA,KAAA,GAAQ,UAAU,MAAM,CAAA,CAAA;AAClD,MAAA,OAAOA,MAAO,CAAA,IAAA,CAAK,CAAC,GAAA,EAAK,KAAK,CAAU,CAAA,CAAA;AAAA,KACzC;AAEA,IAAA,OAAOA,MAAO,CAAA,IAAA,CAAA;AAAA,GACf;AACD,CAAA,CAAA;AA3C4D,MAAA,CAAA,iBAAA,EAAA,kBAAA,CAAA,CAAA;AAArD,IAAM,gBAAN,GAAA,kBAAA;;;ACKA,SAAS,KAAK,UAAkC,EAAA;AACtD,EAAI,IAAA,UAAA,CAAW,MAAW,KAAA,CAAA,EAAU,OAAA,EAAA,CAAA;AACpC,EAAA,IAAI,WAAW,MAAW,KAAA,CAAA,EAAU,OAAA,UAAA,CAAW,CAAC,CAAE,CAAA,KAAA,CAAA;AAElD,EAAI,IAAA,MAAA,GAAS,UAAW,CAAA,CAAC,CAAE,CAAA,KAAA,CAAA;AAC3B,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,CAAW,QAAQ,CAAK,EAAA,EAAA;AAC3C,IAAM,MAAA,SAAA,GAAY,WAAW,CAAC,CAAA,CAAA;AAC9B,IAAU,MAAA,IAAA,SAAA,CAAU,UAAU,SAAU,CAAA,KAAA,CAAA;AAAA,GACzC;AAEA,EAAO,OAAA,MAAA,CAAA;AACR,CAAA;AAXgB,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAmBT,SAAS,QAAQ,UAAkC,EAAA;AACzD,EAAI,IAAA,UAAA,CAAW,MAAW,KAAA,CAAA,EAAU,OAAA,EAAA,CAAA;AACpC,EAAA,IAAI,WAAW,MAAW,KAAA,CAAA,EAAU,OAAA,UAAA,CAAW,CAAC,CAAE,CAAA,GAAA,CAAA;AAElD,EAAI,IAAA,MAAA,GAAS,UAAW,CAAA,CAAC,CAAE,CAAA,GAAA,CAAA;AAC3B,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,CAAW,QAAQ,CAAK,EAAA,EAAA;AAC3C,IAAM,MAAA,SAAA,GAAY,WAAW,CAAC,CAAA,CAAA;AAC9B,IAAU,MAAA,IAAA,SAAA,CAAU,UAAU,SAAU,CAAA,GAAA,CAAA;AAAA,GACzC;AAEA,EAAO,OAAA,MAAA,CAAA;AACR,CAAA;AAXgB,MAAA,CAAA,OAAA,EAAA,SAAA,CAAA","file":"index.mjs","sourcesContent":["import { Option, Result } from '@sapphire/result';\nimport type { Parameter } from './lexer/streams/ParameterStream';\nimport type { ParserResult } from './parser/ParserResult';\n\nexport class ArgumentStream {\n\tpublic readonly results: ParserResult;\n\tpublic state: ArgumentStream.State;\n\n\tpublic constructor(results: ParserResult) {\n\t\tthis.results = results;\n\t\tthis.state = { used: new Set(), position: 0 };\n\t}\n\n\t/**\n\t * Whether or not all ordered parameters were used.\n\t */\n\tpublic get finished() {\n\t\treturn this.used === this.length;\n\t}\n\n\t/**\n\t * The amount of ordered parameters.\n\t */\n\tpublic get length() {\n\t\treturn this.results.ordered.length;\n\t}\n\n\t/**\n\t * The remaining amount of ordered parameters.\n\t */\n\tpublic get remaining() {\n\t\treturn this.length - this.used;\n\t}\n\n\t/**\n\t * The amount of ordered parameters that have been used.\n\t */\n\tpublic get used() {\n\t\treturn this.state.used.size;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '1' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '2' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '3' }\n\t *\n\t * console.log(args.single());\n\t * // None\n\t * ```\n\t *\n\t * @returns The value, if any.\n\t */\n\tpublic single(): Option<string> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tthis.state.used.add(this.state.position);\n\t\treturn Option.some(this.results.ordered[this.state.position++].value);\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link singleMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number) ? Option.none : Option.some(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 1 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 2 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 3 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // None\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic singleMap<T>(predicate: (value: string) => Option<T>, useAnyways = false): Option<T> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleMap}.\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, useAnyways = false): Promise<Option<T>> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Finds and retrieves the next unused parameter and transforms it.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link singleParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 2 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 3 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Err { error: null }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's transformed value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the transformation failed. Defaults to `false`.\n\t * @returns The transformed value, if any.\n\t */\n\tpublic singleParse<T, E>(predicate: (value: string) => Result<T, E>, useAnyways = false): Result<T, E | null> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, useAnyways = false): Promise<Result<T, E | null>> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic find(predicate: (value: string) => boolean, from = this.state.position): Option<string> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link find}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link findMap}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link findParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Suppose args are from 'ba 1 cc'.\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Err {\n\t * // error: [\n\t * // 'Could not parse ba to a number',\n\t * // 'Could not parse cc to a number'\n\t * // ]\n\t * // }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findParse<T, E>(predicate: (value: string) => Result<T, E>, from = this.state.position): Result<T, E[]> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMapAsync} that returns the errors on failure.\n\t * @note This is an asynchronous variant of {@link findParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, from = this.state.position): Promise<Result<T, E[]>> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Retrieves multiple unused parameters.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many().unwrap()));\n\t * // '1 2 3'\n\t * ```\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many(2).unwrap()));\n\t * // '1 2'\n\t * ```\n\t *\n\t * @param limit The maximum amount of parameters to retrieve, defaults to `Infinity`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The unused parameters within the range.\n\t */\n\tpublic many(limit = Infinity, from = this.state.position): Option<Parameter[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: Parameter[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\t// If the current parameter was already used, skip:\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\t// Mark current parameter as used, and push it to the resulting array:\n\t\t\tthis.state.used.add(i);\n\t\t\tparameters.push(this.results.ordered[i]);\n\n\t\t\t// If the parameters reached the limit, break the loop:\n\t\t\tif (parameters.length >= limit) break;\n\t\t}\n\n\t\treturn parameters.length ? Option.some(parameters) : Option.none;\n\t}\n\n\tpublic filter(predicate: (value: string) => boolean, from = this.state.position): Option<string[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic filterMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\t/**\n\t * Checks whether any of the flags were given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--f --g':\n\t *\n\t * console.log(args.flag('f'));\n\t * // true\n\t *\n\t * console.log(args.flag('g', 'h'));\n\t * // true\n\t *\n\t * console.log(args.flag('h'));\n\t * // false\n\t * ```\n\t *\n\t * @param keys The names of the flags to check.\n\t * @returns Whether or not any of the flags were given.\n\t */\n\tpublic flag(...keys: readonly string[]): boolean {\n\t\treturn keys.some((key) => this.results.flags.has(key));\n\t}\n\n\t/**\n\t * Gets the last value of any option. When there are multiple names, the last value of the last found name is given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: '1' }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: '3' }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The last value of the option, if any.\n\t */\n\tpublic option(...keys: readonly string[]): Option<string> {\n\t\treturn this.options(...keys).map((values) => values.at(-1)!);\n\t}\n\n\t/**\n\t * Gets all values from all options.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: ['1', '1'] }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: ['2', '3'] }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The values from all the options concatenated, if any.\n\t */\n\tpublic options(...keys: readonly string[]): Option<readonly string[]> {\n\t\tconst entries: string[] = [];\n\t\tfor (const key of keys) {\n\t\t\tconst values = this.results.options.get(key);\n\t\t\tif (values) entries.push(...values);\n\t\t}\n\n\t\treturn entries.length ? Option.some(entries) : Option.none;\n\t}\n\n\tpublic save(): ArgumentStream.State {\n\t\treturn {\n\t\t\tused: new Set(this.state.used),\n\t\t\tposition: this.state.position\n\t\t};\n\t}\n\n\tpublic restore(state: ArgumentStream.State) {\n\t\tthis.state = state;\n\t}\n\n\tpublic reset() {\n\t\tthis.restore({ used: new Set(), position: 0 });\n\t}\n}\n\nexport namespace ArgumentStream {\n\texport interface State {\n\t\tused: Set<number>;\n\t\tposition: number;\n\t}\n}\n","export abstract class BaseParameter {\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(separators: readonly string[]) {\n\t\tthis.separators = separators;\n\t}\n\n\tpublic get leading(): string {\n\t\treturn this.separators.join('');\n\t}\n\n\tpublic abstract get raw(): string;\n}\n","import type { QuotedToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class QuotedParameter extends BaseParameter {\n\tpublic readonly value: string;\n\tpublic readonly open: string;\n\tpublic readonly close: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<QuotedToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t\tthis.open = part.open;\n\t\tthis.close = part.close;\n\t}\n\n\tpublic get raw() {\n\t\treturn `${this.open}${this.value}${this.close}`;\n\t}\n}\n","import type { WordToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class WordParameter extends BaseParameter {\n\tpublic readonly value: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<WordToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t}\n\n\tpublic get raw() {\n\t\treturn this.value;\n\t}\n}\n","import type { Lexer } from '../../Lexer';\n\nexport class TokenStream implements Iterable<Token> {\n\tprivate readonly input: string;\n\tprivate readonly quotes: readonly [string, string][];\n\tprivate readonly separator: string;\n\tprivate position = 0;\n\n\tpublic constructor(lexer: Lexer, input: string) {\n\t\tthis.quotes = lexer.quotes;\n\t\tthis.separator = lexer.separator;\n\t\tthis.input = input;\n\t}\n\n\tpublic get finished() {\n\t\treturn this.position >= this.input.length;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Token> {\n\t\twhile (!this.finished) {\n\t\t\tyield this.getPossibleSeparator() ?? this.getPossibleQuotedArgument() ?? this.getParameter();\n\t\t}\n\t}\n\n\tprivate getPossibleSeparator(): SeparatorToken | null {\n\t\tif (this.input.startsWith(this.separator, this.position)) {\n\t\t\tthis.position += this.separator.length;\n\t\t\treturn { type: TokenType.Separator, value: this.separator };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getPossibleQuotedArgument(): QuotedToken | null {\n\t\tfor (const [open, close] of this.quotes) {\n\t\t\tif (!this.input.startsWith(open, this.position)) continue;\n\n\t\t\tconst end = this.input.indexOf(close, this.position + open.length);\n\t\t\tif (end === -1) continue;\n\n\t\t\tconst value = this.input.slice(this.position + open.length, end);\n\t\t\tthis.position = end + close.length;\n\n\t\t\treturn { type: TokenType.Quoted, value, open, close };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getParameter(): WordToken {\n\t\tconst index = this.input.indexOf(this.separator, this.position);\n\t\tconst value = index === -1 ? this.input.slice(this.position) : this.input.slice(this.position, index);\n\t\tthis.position += value.length;\n\t\treturn { type: TokenType.Parameter, value };\n\t}\n}\n\nexport enum TokenType {\n\tParameter,\n\tQuoted,\n\tSeparator\n}\n\nexport type Token = WordToken | QuotedToken | SeparatorToken;\n\nexport interface WordToken {\n\treadonly type: TokenType.Parameter;\n\treadonly value: string;\n}\n\nexport interface QuotedToken {\n\treadonly type: TokenType.Quoted;\n\treadonly value: string;\n\treadonly open: string;\n\treadonly close: string;\n}\n\nexport interface SeparatorToken {\n\treadonly type: TokenType.Separator;\n\treadonly value: string;\n}\n","import { QuotedParameter } from './parameters/QuotedParameter';\nimport { WordParameter } from './parameters/WordParameter';\nimport { TokenType, type Token } from './raw/TokenStream';\n\nexport class ParameterStream {\n\tprivate readonly stream: Iterable<Token>;\n\tprivate separators: string[] = [];\n\n\tpublic constructor(stream: Iterable<Token>) {\n\t\tthis.stream = stream;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Parameter, string[]> {\n\t\tfor (const part of this.stream) {\n\t\t\tif (part.type === TokenType.Separator) {\n\t\t\t\tthis.separators.push(part.value);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tyield part.type === TokenType.Quoted ? new QuotedParameter(this.separators, part) : new WordParameter(this.separators, part);\n\t\t\tthis.separators = [];\n\t\t}\n\n\t\treturn this.separators;\n\t}\n}\n\nexport type Parameter = QuotedParameter | WordParameter;\n","import { ParameterStream } from './streams/ParameterStream';\nimport { TokenStream } from './streams/raw/TokenStream';\n\nexport class Lexer {\n\tpublic readonly quotes: readonly [open: string, close: string][];\n\tpublic readonly separator: string;\n\n\tpublic constructor(options: Lexer.Options = {}) {\n\t\tthis.quotes = options.quotes ?? [];\n\t\tthis.separator = options.separator ?? ' ';\n\t}\n\n\tpublic run(input: string) {\n\t\treturn new ParameterStream(this.raw(input));\n\t}\n\n\tpublic raw(input: string) {\n\t\treturn new TokenStream(this, input);\n\t}\n}\n\nexport namespace Lexer {\n\texport interface Options {\n\t\tseparator?: string;\n\t\tquotes?: readonly [open: string, close: string][];\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { Parser } from './Parser';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\n\nexport class ParserResult {\n\tpublic readonly ordered: Parameter[] = [];\n\tpublic readonly flags = new Set<string>();\n\tpublic readonly options = new Map<string, string[]>();\n\tprivate readonly strategy: IUnorderedStrategy;\n\n\tpublic constructor(parser: Parser) {\n\t\tthis.strategy = parser.strategy;\n\t}\n\n\tpublic parse(parameters: Iterable<Parameter>) {\n\t\tfor (const parameter of parameters) {\n\t\t\tthis.parsePossibleFlag(parameter) || this.parsePossibleOptions(parameter) || this.parseOrdered(parameter);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprivate parsePossibleFlag(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchFlag(parameter.value)\n\t\t\t.inspect((value) => this.flags.add(value))\n\t\t\t.isSome();\n\t}\n\n\tprivate parsePossibleOptions(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchOption(parameter.value)\n\t\t\t.inspect(([key, value]) => {\n\t\t\t\tconst existing = this.options.get(key);\n\t\t\t\tif (existing) existing.push(value);\n\t\t\t\telse this.options.set(key, [value]);\n\t\t\t})\n\t\t\t.isSome();\n\t}\n\n\tprivate parseOrdered(parameter: Parameter): boolean {\n\t\tthis.ordered.push(parameter);\n\t\treturn true;\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class EmptyStrategy implements IUnorderedStrategy {\n\tpublic matchFlag(): Option<string> {\n\t\treturn Option.none;\n\t}\n\n\tpublic matchOption(): Option<readonly [key: string, value: string]> {\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\nimport { ParserResult } from './ParserResult';\nimport { EmptyStrategy } from './strategies/EmptyStrategy';\n\nexport class Parser {\n\tpublic strategy: IUnorderedStrategy;\n\n\tpublic constructor(strategy?: IUnorderedStrategy) {\n\t\tthis.strategy = strategy ?? new EmptyStrategy();\n\t}\n\n\tpublic setUnorderedStrategy(strategy: IUnorderedStrategy) {\n\t\tthis.strategy = strategy;\n\t\treturn this;\n\t}\n\n\tpublic run(input: Iterable<Parameter>): ParserResult {\n\t\treturn new ParserResult(this).parse(input);\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class PrefixedStrategy implements IUnorderedStrategy {\n\tpublic readonly prefixes: readonly string[];\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(prefixes: readonly string[], separators: readonly string[]) {\n\t\tthis.prefixes = prefixes;\n\t\tthis.separators = separators;\n\t}\n\n\tpublic matchFlag(input: string): Option<string> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\t// If the separator is present, return None:\n\t\tif (this.separators.some((x) => input.includes(x, prefix.length))) return Option.none;\n\n\t\treturn Option.some(input.slice(prefix.length));\n\t}\n\n\tpublic matchOption(input: string): Option<readonly [key: string, value: string]> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\tfor (const separator of this.separators) {\n\t\t\tconst index = input.indexOf(separator, prefix.length + 1);\n\n\t\t\t// If the separator is missing, skip:\n\t\t\tif (index === -1) continue;\n\n\t\t\t// If the separator is present, but has no value, return None:\n\t\t\tif (index + separator.length === input.length) return Option.none;\n\n\t\t\tconst key = input.slice(prefix.length, index);\n\t\t\tconst value = input.slice(index + separator.length);\n\t\t\treturn Option.some([key, value] as const);\n\t\t}\n\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\n\n/**\n * Joins the parameters by their `leading` value, using the `value` property.\n * @seealso {@link joinRaw} for the version using `raw` instead of `value`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function join(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].value;\n\n\tlet output = parameters[0].value;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.value;\n\t}\n\n\treturn output;\n}\n\n/**\n * Joins the parameters by their `leading` value, using the `raw` property.\n * @seealso {@link join} for the version using `value` instead of `raw`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function joinRaw(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].raw;\n\n\tlet output = parameters[0].raw;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.raw;\n\t}\n\n\treturn output;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../result/src/lib/common/utils.ts","../../../result/src/lib/Result/ResultError.ts","../../../result/src/lib/Result/Ok.ts","../../../result/src/lib/Option/Some.ts","../../../result/src/lib/Result/Err.ts","../../../result/src/lib/Option/OptionError.ts","../../../result/src/lib/Option/None.ts","../../../result/src/lib/Option.ts","../../../result/src/lib/Result.ts","../../src/lib/ArgumentStream.ts","../../src/lib/lexer/streams/parameters/BaseParameter.ts","../../src/lib/lexer/streams/parameters/QuotedParameter.ts","../../src/lib/lexer/streams/parameters/WordParameter.ts","../../src/lib/lexer/streams/raw/TokenStream.ts","../../src/lib/lexer/streams/ParameterStream.ts","../../src/lib/lexer/Lexer.ts","../../src/lib/parser/ParserResult.ts","../../src/lib/parser/strategies/EmptyStrategy.ts","../../src/lib/parser/Parser.ts","../../src/lib/parser/strategies/PrefixedStrategy.ts","../../src/lib/util/util.ts"],"names":["__name","__publicField","_a","Option","Result","TokenType"],"mappings":"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","sourcesContent":["export type Awaitable<T> = PromiseLike<T> | T;\n\nexport function isFunction<A extends readonly any[], R>(cb: (...args: A) => R): true;\nexport function isFunction(input: any): input is (...args: readonly any[]) => any;\nexport function isFunction(input: any) {\n\treturn typeof input === 'function';\n}\n\nexport function isPromise<T>(input: PromiseLike<T>): true;\nexport function isPromise(input: any): input is PromiseLike<any>;\nexport function isPromise(input: any) {\n\treturn typeof input === 'object' && input !== null && typeof input.then === 'function';\n}\n","export class ResultError<E> extends Error {\n\tpublic readonly value: E;\n\n\tpublic constructor(message: string, value: E) {\n\t\tsuper(message);\n\t\tthis.value = value;\n\t}\n\n\tpublic override get name(): string {\n\t\treturn this.constructor.name;\n\t}\n}\n","import type { Awaitable } from '../common/utils';\nimport type { Option } from '../Option';\nimport { createNone, type OptionNone } from '../Option/None';\nimport { createSome, type OptionSome } from '../Option/Some';\nimport type { Result } from '../Result';\nimport type { ResultErr } from './Err';\nimport type { IResult } from './IResult';\nimport { ResultError } from './ResultError';\n\nexport class ResultOk<T> implements IResult<T, any> {\n\tprivate readonly value: T;\n\n\tpublic constructor(value: T) {\n\t\tthis.value = value;\n\t}\n\n\tpublic isOk(): this is ResultOk<T> {\n\t\treturn true;\n\t}\n\n\tpublic isOkAnd<R extends boolean>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic isErr(): false {\n\t\treturn false;\n\t}\n\n\tpublic isErrAnd(cb?: (error: never) => boolean): false;\n\tpublic isErrAnd(): false {\n\t\treturn false;\n\t}\n\n\tpublic ok(): OptionSome<T> {\n\t\treturn createSome(this.value);\n\t}\n\n\tpublic err(): OptionNone {\n\t\treturn createNone;\n\t}\n\n\tpublic map<U>(cb: (value: T) => U): ResultOk<U> {\n\t\treturn createOk(cb(this.value));\n\t}\n\n\tpublic mapInto<R extends Result<any, any>>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapOr<U>(_: U, cb: (value: T) => U): U {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapOrElse<U>(_: (error: never) => U, cb: (value: T) => U): U {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapErr(cb?: (error: never) => any): this;\n\tpublic mapErr(): this {\n\t\treturn this;\n\t}\n\n\tpublic mapErrInto(cb: (error: never) => Result<any, any>): this;\n\tpublic mapErrInto(): this {\n\t\treturn this;\n\t}\n\n\tpublic inspect(cb: (value: T) => void): this {\n\t\tcb(this.value);\n\t\treturn this;\n\t}\n\n\tpublic async inspectAsync(cb: (value: T) => Awaitable<unknown>): Promise<this> {\n\t\tawait cb(this.value);\n\t\treturn this;\n\t}\n\n\tpublic inspectErr(cb?: (error: never) => void): this;\n\tpublic inspectErr(): this {\n\t\treturn this;\n\t}\n\n\tpublic inspectErrAsync(cb?: (error: never) => Awaitable<unknown>): Promise<this>;\n\tpublic inspectErrAsync(): Promise<this> {\n\t\treturn Promise.resolve(this);\n\t}\n\n\tpublic *iter(): Generator<T> {\n\t\tyield this.value;\n\t}\n\n\tpublic expect(message?: string): T;\n\tpublic expect(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic expectErr(message: string): never {\n\t\tthrow new ResultError(message, this.value);\n\t}\n\n\tpublic unwrap(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrapErr(): never {\n\t\tthrow new ResultError('Unwrap failed', this.value);\n\t}\n\n\tpublic unwrapOr(defaultValue: unknown): T;\n\tpublic unwrapOr(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrapOrElse(op: (error: any) => unknown): T;\n\tpublic unwrapOrElse(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrapRaw(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic and<R extends Result<any, any>>(result: R): R {\n\t\treturn result;\n\t}\n\n\tpublic andThen<R extends Result<any, any>>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic or(result: Result<T, any>): this;\n\tpublic or(): this {\n\t\treturn this;\n\t}\n\n\tpublic orElse(cb: (error: never) => Result<T, any>): this;\n\tpublic orElse(): this {\n\t\treturn this;\n\t}\n\n\tpublic contains(value: T): boolean {\n\t\treturn this.value === value;\n\t}\n\n\tpublic containsErr(error?: unknown): false;\n\tpublic containsErr(): false {\n\t\treturn false;\n\t}\n\n\tpublic transpose(this: ResultOk<OptionNone>): OptionNone;\n\tpublic transpose<Inner>(this: ResultOk<OptionSome<Inner>>): OptionSome<ResultOk<Inner>>;\n\tpublic transpose<Inner>(this: ResultOk<Option<Inner>>): Option<ResultOk<Inner>>;\n\tpublic transpose<IT>(this: ResultOk<Option<IT>>): Option<ResultOk<IT>> {\n\t\treturn this.value.match({\n\t\t\tsome: (value) => createSome(createOk(value)),\n\t\t\tnone: () => createNone\n\t\t});\n\t}\n\n\tpublic flatten<Inner extends Result<any, any>>(this: ResultOk<Inner>): Inner {\n\t\treturn this.value;\n\t}\n\n\tpublic intoOkOrErr() {\n\t\treturn this.value;\n\t}\n\n\tpublic async intoPromise(): Promise<ResultOk<Awaited<T>>> {\n\t\treturn createOk(await this.value);\n\t}\n\n\tpublic eq(other: ResultErr<any>): false;\n\tpublic eq(other: Result<T, any>): boolean;\n\tpublic eq(other: Result<T, any>): boolean {\n\t\treturn other.isOkAnd((value) => this.value === value);\n\t}\n\n\tpublic ne(other: ResultErr<any>): true;\n\tpublic ne(other: Result<T, any>): boolean;\n\tpublic ne(other: Result<T, any>): boolean {\n\t\treturn !this.eq(other);\n\t}\n\n\tpublic match<OkValue, ErrValue>(branches: { ok(value: T): OkValue; err(error: never): ErrValue }): OkValue {\n\t\treturn branches.ok(this.value);\n\t}\n\n\tpublic *[Symbol.iterator](): Generator<T> {\n\t\tyield this.value;\n\t}\n}\n\n/**\n * Creates an Ok with no value.\n * @return A successful Result.\n */\nexport function createOk(): ResultOk<unknown>;\n\n/**\n * Creates an Ok.\n * @typeparam T The result's type.\n * @param x Value to use.\n * @return A successful Result.\n */\nexport function createOk<T>(x: T): ResultOk<T>;\nexport function createOk<T>(x?: T): ResultOk<T | undefined> {\n\treturn new ResultOk(x);\n}\n","import type { Awaitable } from '../common/utils';\nimport type { Option } from '../Option';\nimport type { Result } from '../Result';\nimport { createErr, type ResultErr } from '../Result/Err';\nimport { createOk, type ResultOk } from '../Result/Ok';\nimport type { IOption } from './IOption';\nimport { createNone, type OptionNone } from './None';\n\nexport class OptionSome<T> implements IOption<T> {\n\tprivate readonly value: T;\n\n\tpublic constructor(value: T) {\n\t\tthis.value = value;\n\t}\n\n\tpublic isSome(): this is OptionSome<T> {\n\t\treturn true;\n\t}\n\n\tpublic isSomeAnd<R extends boolean>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic isNone(): false {\n\t\treturn false;\n\t}\n\n\tpublic expect(message: string): T;\n\tpublic expect(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrap(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrapOr(defaultValue: unknown): T;\n\tpublic unwrapOr(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrapOrElse(cb: () => unknown): T;\n\tpublic unwrapOrElse(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic map<U>(cb: (value: T) => U): OptionSome<U> {\n\t\treturn createSome(cb(this.value));\n\t}\n\n\tpublic mapInto<R extends Option<any>>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapOr<U>(_: U, cb: (value: T) => U): U {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapOrElse<U>(_: () => U, cb: (value: T) => U): U {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapNoneInto(cb: () => Option<any>): this;\n\tpublic mapNoneInto(): this {\n\t\treturn this;\n\t}\n\n\tpublic inspect(cb: (value: T) => void): this {\n\t\tcb(this.value);\n\t\treturn this;\n\t}\n\n\tpublic async inspectAsync(cb: (value: T) => Awaitable<unknown>): Promise<this> {\n\t\tawait cb(this.value);\n\t\treturn this;\n\t}\n\n\tpublic okOr(err?: any): ResultOk<T>;\n\tpublic okOr(): ResultOk<T> {\n\t\treturn createOk(this.value);\n\t}\n\n\tpublic okOrElse(cb: () => any): ResultOk<T>;\n\tpublic okOrElse(): ResultOk<T> {\n\t\treturn createOk(this.value);\n\t}\n\n\tpublic *iter(): Generator<T> {\n\t\tyield this.value;\n\t}\n\n\tpublic and<R extends Option<any>>(option: R): R {\n\t\treturn option;\n\t}\n\n\tpublic andThen<R extends Option<any>>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic or(option: Option<any>): this;\n\tpublic or(): this {\n\t\treturn this;\n\t}\n\n\tpublic orElse(cb?: () => Option<any>): this;\n\tpublic orElse(): this {\n\t\treturn this;\n\t}\n\n\tpublic xor(option: OptionSome<T>): OptionNone;\n\tpublic xor(option: OptionNone): this;\n\tpublic xor(option: Option<T>): this | OptionNone;\n\tpublic xor(option: Option<T>): this | OptionNone {\n\t\treturn option.isSome() ? createNone : this;\n\t}\n\n\tpublic filter(predicate: (value: T) => true): this;\n\tpublic filter(predicate: (value: T) => false): OptionNone;\n\tpublic filter(predicate: (value: T) => boolean): this | OptionNone;\n\tpublic filter(predicate: (value: T) => boolean): this | OptionNone {\n\t\treturn predicate(this.value) ? this : createNone;\n\t}\n\n\tpublic contains(value: T): boolean {\n\t\treturn this.value === value;\n\t}\n\n\tpublic zip(other: OptionNone): OptionNone;\n\tpublic zip<U>(other: OptionSome<U>): OptionSome<[T, U]>;\n\tpublic zip<U>(other: Option<U>): Option<[T, U]>;\n\tpublic zip<U>(other: Option<U>): Option<[T, U]> {\n\t\treturn other.map((o) => [this.value, o] as [T, U]);\n\t}\n\n\tpublic zipWith<U, R>(other: OptionNone, f: (s: T, o: U) => R): OptionNone;\n\tpublic zipWith<U, R>(other: OptionSome<U>, f: (s: T, o: U) => R): OptionSome<R>;\n\tpublic zipWith<U, R>(other: Option<U>, f: (s: T, o: U) => R): Option<R>;\n\tpublic zipWith<U, R>(other: Option<U>, f: (s: T, o: U) => R): Option<R> {\n\t\treturn other.map((o) => f(this.value, o));\n\t}\n\n\tpublic unzip<I, U>(this: OptionSome<readonly [I, U]>): [OptionSome<I>, OptionSome<U>] {\n\t\tconst [s, o] = this.value;\n\t\treturn [createSome(s), createSome(o)];\n\t}\n\n\tpublic transpose<Inner>(this: OptionSome<ResultOk<Inner>>): ResultOk<OptionSome<Inner>>;\n\tpublic transpose<Inner>(this: OptionSome<ResultErr<Inner>>): ResultErr<OptionSome<Inner>>;\n\tpublic transpose<IT, E>(this: OptionSome<Result<IT, E>>): Result<OptionSome<IT>, E>;\n\tpublic transpose<IT, E>(this: OptionSome<Result<IT, E>>): Result<OptionSome<IT>, E> {\n\t\treturn this.value.match({\n\t\t\tok: (v) => createOk(createSome(v)),\n\t\t\terr: (e) => createErr(e)\n\t\t});\n\t}\n\n\tpublic flatten<Inner extends Option<any>>(this: OptionSome<Inner>): Inner {\n\t\treturn this.value;\n\t}\n\n\tpublic async intoPromise(): Promise<OptionSome<Awaited<T>>> {\n\t\treturn createSome(await this.value);\n\t}\n\n\tpublic eq(other: OptionNone): false;\n\tpublic eq(other: Option<T>): boolean;\n\tpublic eq(other: Option<T>): boolean {\n\t\treturn other.isSomeAnd((value) => this.value === value);\n\t}\n\n\tpublic ne(other: OptionNone): true;\n\tpublic ne(other: Option<T>): boolean;\n\tpublic ne(other: Option<T>): boolean {\n\t\treturn !this.eq(other);\n\t}\n\n\tpublic match<SomeValue, NoneValue>(branches: { some(value: T): SomeValue; none(): NoneValue }): SomeValue {\n\t\treturn branches.some(this.value);\n\t}\n\n\tpublic *[Symbol.iterator](): Generator<T> {\n\t\tyield this.value;\n\t}\n}\n\nexport function createSome<T>(value: T): OptionSome<T> {\n\treturn new OptionSome<T>(value);\n}\n","import type { Awaitable } from '../common/utils';\nimport { createNone, type OptionNone } from '../Option/None';\nimport { createSome, type OptionSome } from '../Option/Some';\nimport type { Result } from '../Result';\nimport type { IResult } from './IResult';\nimport type { ResultOk } from './Ok';\nimport { ResultError } from './ResultError';\n\nexport class ResultErr<E> implements IResult<any, E> {\n\tprivate readonly error: E;\n\n\tpublic constructor(error: E) {\n\t\tthis.error = error;\n\t}\n\n\tpublic isOk(): false {\n\t\treturn false;\n\t}\n\n\tpublic isOkAnd(cb?: (value: never) => boolean): false;\n\tpublic isOkAnd(): false {\n\t\treturn false;\n\t}\n\n\tpublic isErr(): this is ResultErr<E> {\n\t\treturn true;\n\t}\n\n\tpublic isErrAnd(cb: (error: E) => boolean): boolean {\n\t\treturn cb(this.error);\n\t}\n\n\tpublic ok(): OptionNone {\n\t\treturn createNone;\n\t}\n\n\tpublic err(): OptionSome<E> {\n\t\treturn createSome(this.error);\n\t}\n\n\tpublic map(cb?: (value: never) => unknown): this;\n\tpublic map(): this {\n\t\treturn this;\n\t}\n\n\tpublic mapInto(cb: (value: never) => Result<any, any>): this;\n\tpublic mapInto(): this {\n\t\treturn this;\n\t}\n\n\tpublic mapOr<U>(defaultValue: U, cb?: (value: never) => U): U;\n\tpublic mapOr<U>(defaultValue: U): U {\n\t\treturn defaultValue;\n\t}\n\n\tpublic mapOrElse<U>(op: (error: E) => U, cb?: (value: never) => U): U;\n\tpublic mapOrElse<U>(op: (error: E) => U): U {\n\t\treturn op(this.error);\n\t}\n\n\tpublic mapErr<F>(cb: (error: E) => F): ResultErr<F> {\n\t\treturn createErr(cb(this.error));\n\t}\n\n\tpublic mapErrInto<R extends Result<any, any>>(cb: (error: E) => R): R {\n\t\treturn cb(this.error);\n\t}\n\n\tpublic inspect(cb?: (value: never) => void): this;\n\tpublic inspect(): this {\n\t\treturn this;\n\t}\n\n\tpublic inspectAsync(cb?: (value: never) => Awaitable<unknown>): Promise<this>;\n\tpublic inspectAsync(): Promise<this> {\n\t\treturn Promise.resolve(this);\n\t}\n\n\tpublic inspectErr(cb: (error: E) => void): this {\n\t\tcb(this.error);\n\t\treturn this;\n\t}\n\n\tpublic async inspectErrAsync(cb: (error: E) => Awaitable<unknown>): Promise<this> {\n\t\tawait cb(this.error);\n\t\treturn this;\n\t}\n\n\tpublic *iter(): Generator<never> {\n\t\t// Yields no values\n\t}\n\n\tpublic expect(message: string): never {\n\t\tthrow new ResultError(message, this.error);\n\t}\n\n\tpublic expectErr(message?: string): E;\n\tpublic expectErr(): E {\n\t\treturn this.error;\n\t}\n\n\tpublic unwrap(): never {\n\t\tthrow new ResultError('Unwrap failed', this.error);\n\t}\n\n\tpublic unwrapErr(): E {\n\t\treturn this.error;\n\t}\n\n\tpublic unwrapOr<T>(defaultValue: T): T {\n\t\treturn defaultValue;\n\t}\n\n\tpublic unwrapOrElse<T>(op: (error: E) => T): T {\n\t\treturn op(this.error);\n\t}\n\n\tpublic unwrapRaw(): never {\n\t\t// eslint-disable-next-line @typescript-eslint/no-throw-literal\n\t\tthrow this.error;\n\t}\n\n\tpublic and(result?: Result<any, E>): this;\n\tpublic and(): this {\n\t\treturn this;\n\t}\n\n\tpublic andThen(cb?: (value: never) => Result<any, E>): this;\n\tpublic andThen(): this {\n\t\treturn this;\n\t}\n\n\tpublic or<R extends Result<any, any>>(result: R): R {\n\t\treturn result;\n\t}\n\n\tpublic orElse<R extends Result<any, any>>(cb: (error: E) => R): R {\n\t\treturn cb(this.error);\n\t}\n\n\tpublic contains(value?: any): false;\n\tpublic contains(): false {\n\t\treturn false;\n\t}\n\n\tpublic containsErr(error: E): boolean {\n\t\treturn this.error === error;\n\t}\n\n\tpublic transpose(): OptionSome<this> {\n\t\treturn createSome(this);\n\t}\n\n\tpublic flatten(): this {\n\t\treturn this;\n\t}\n\n\tpublic intoOkOrErr(): E {\n\t\treturn this.error;\n\t}\n\n\tpublic async intoPromise(): Promise<ResultErr<Awaited<E>>> {\n\t\treturn createErr(await this.error);\n\t}\n\n\tpublic eq(other: ResultOk<any>): false;\n\tpublic eq(other: Result<any, E>): boolean;\n\tpublic eq(other: Result<any, E>): boolean {\n\t\treturn other.isErrAnd((error) => this.error === error);\n\t}\n\n\tpublic ne(other: ResultOk<any>): true;\n\tpublic ne(other: Result<any, E>): boolean;\n\tpublic ne(other: Result<any, E>): boolean {\n\t\treturn !this.eq(other);\n\t}\n\n\tpublic match<OkValue, ErrValue>(branches: { ok(value: never): OkValue; err(error: E): ErrValue }): ErrValue {\n\t\treturn branches.err(this.error);\n\t}\n\n\tpublic *[Symbol.iterator](): Generator<never> {\n\t\t// Yields no values\n\t}\n}\n\n/**\n * Creates an Err with no error.\n * @return An erroneous Result.\n */\nexport function createErr(): ResultErr<unknown>;\n\n/**\n * Creates an Err.\n * @typeparam E The error's type.\n * @param x Value to use.\n * @return An erroneous Result.\n */\nexport function createErr<E>(x: E): ResultErr<E>;\nexport function createErr<E>(x?: E): ResultErr<unknown> {\n\treturn new ResultErr(x);\n}\n","export class OptionError extends Error {\n\tpublic override get name(): string {\n\t\treturn this.constructor.name;\n\t}\n}\n","import type { Awaitable } from '../common/utils';\nimport type { Option } from '../Option';\nimport { createErr, type ResultErr } from '../Result/Err';\nimport { createOk, type ResultOk } from '../Result/Ok';\nimport type { IOption } from './IOption';\nimport { OptionError } from './OptionError';\nimport type { OptionSome } from './Some';\n\nexport class OptionNone implements IOption<any> {\n\tpublic isSome(): false {\n\t\treturn false;\n\t}\n\n\tpublic isSomeAnd(cb?: (value: never) => boolean): false;\n\tpublic isSomeAnd(): false {\n\t\treturn false;\n\t}\n\n\tpublic isNone(): this is OptionNone {\n\t\treturn true;\n\t}\n\n\tpublic expect(message: string): never {\n\t\tthrow new OptionError(message);\n\t}\n\n\tpublic unwrap(): never {\n\t\tthrow new OptionError('Unwrap failed');\n\t}\n\n\tpublic unwrapOr<R>(defaultValue: R): R {\n\t\treturn defaultValue;\n\t}\n\n\tpublic unwrapOrElse<R>(cb: () => R): R {\n\t\treturn cb();\n\t}\n\n\tpublic map(cb: (value: never) => any): this;\n\tpublic map(): this {\n\t\treturn this;\n\t}\n\n\tpublic mapInto(cb: (value: never) => Option<any>): this;\n\tpublic mapInto(): this {\n\t\treturn this;\n\t}\n\n\tpublic mapOr<R>(defaultValue: R, cb?: (value: never) => R): R;\n\tpublic mapOr<R>(defaultValue: R): R {\n\t\treturn defaultValue;\n\t}\n\n\tpublic mapOrElse<R>(defaultValue: () => R, cb?: (value: never) => R): R;\n\tpublic mapOrElse<R>(defaultValue: () => R): R {\n\t\treturn defaultValue();\n\t}\n\n\tpublic mapNoneInto<R extends Option<any>>(cb: () => R): R {\n\t\treturn cb();\n\t}\n\n\tpublic inspect(cb?: (value: never) => void): this;\n\tpublic inspect(): this {\n\t\treturn this;\n\t}\n\n\tpublic inspectAsync(cb?: (value: never) => Awaitable<unknown>): Promise<this>;\n\tpublic inspectAsync(): Promise<this> {\n\t\treturn Promise.resolve(this);\n\t}\n\n\tpublic okOr<E>(error: E): ResultErr<E> {\n\t\treturn createErr(error);\n\t}\n\n\tpublic okOrElse<E>(cb: () => E): ResultErr<E> {\n\t\treturn createErr(cb());\n\t}\n\n\tpublic *iter(): Generator<never> {\n\t\t// Yields no values\n\t}\n\n\tpublic and(option: Option<any>): this;\n\tpublic and(): this {\n\t\treturn this;\n\t}\n\n\tpublic andThen(cb: (value: never) => Option<any>): this;\n\tpublic andThen(): this {\n\t\treturn this;\n\t}\n\n\tpublic or<R extends Option<any>>(option: R): R {\n\t\treturn option;\n\t}\n\n\tpublic orElse<R extends Option<any>>(cb: () => R): R {\n\t\treturn cb();\n\t}\n\n\tpublic xor<T>(option: OptionNone): OptionNone;\n\tpublic xor<T>(option: OptionSome<T>): OptionSome<T>;\n\tpublic xor<T>(option: Option<T>): OptionSome<T> | OptionNone;\n\tpublic xor<T>(option: OptionSome<T> | OptionNone): OptionSome<T> | OptionNone {\n\t\treturn option.isSome() ? option : this;\n\t}\n\n\tpublic filter(predicate: (value: never) => boolean): OptionNone;\n\tpublic filter(): OptionNone {\n\t\treturn this;\n\t}\n\n\tpublic contains(value?: any): false;\n\tpublic contains(): false {\n\t\treturn false;\n\t}\n\n\tpublic zip(other: Option<any>): OptionNone;\n\tpublic zip(): OptionNone {\n\t\treturn this;\n\t}\n\n\tpublic zipWith(other: Option<any>, f: (s: never, o: never) => any): OptionNone;\n\tpublic zipWith(): OptionNone {\n\t\treturn this;\n\t}\n\n\tpublic unzip(): [OptionNone, OptionNone] {\n\t\treturn [this, this];\n\t}\n\n\tpublic transpose(): ResultOk<OptionNone> {\n\t\treturn createOk(this);\n\t}\n\n\tpublic flatten(): OptionNone {\n\t\treturn this;\n\t}\n\n\tpublic intoPromise(): Promise<OptionNone> {\n\t\treturn Promise.resolve(createNone);\n\t}\n\n\tpublic eq(other: OptionNone): true;\n\tpublic eq(other: OptionSome<any>): false;\n\tpublic eq(other: Option<any>): boolean;\n\tpublic eq(other: Option<any>): boolean {\n\t\treturn other.isNone();\n\t}\n\n\tpublic ne(other: OptionNone): false;\n\tpublic ne(other: OptionSome<any>): true;\n\tpublic ne(other: Option<any>): boolean;\n\tpublic ne(other: Option<any>): boolean {\n\t\treturn other.isSome();\n\t}\n\n\tpublic match<SomeValue, NoneValue>(branches: { some(value: never): SomeValue; none(): NoneValue }): NoneValue {\n\t\treturn branches.none();\n\t}\n\n\tpublic *[Symbol.iterator](): Generator<never> {\n\t\t// Yields no values\n\t}\n}\n\nexport const createNone = new OptionNone();\n","import { isFunction, type Awaitable } from './common/utils';\nimport { createNone, OptionNone } from './Option/None';\nimport { createSome, OptionSome } from './Option/Some';\n\nexport type * from './Option/IOption';\nexport * from './Option/OptionError';\nexport { createSome as some, createNone as none, type OptionNone as None, type OptionSome as Some };\n\n/**\n * The union of the two variations of `Option`.\n * @typeparam T The value's type.\n */\nexport type Option<T> = Option.Some<T> | Option.None;\n\nexport namespace Option {\n\texport type Resolvable<T> = T | null | undefined | Option<T>;\n\tfunction resolve<T>(value: Resolvable<T>) {\n\t\tif (value === null || value === undefined) return none;\n\t\tif (is(value)) return value;\n\t\treturn some(value);\n\t}\n\n\texport function is<T>(value: Option<T>): true;\n\texport function is(value: any): value is Option<unknown>;\n\texport function is(value: any) {\n\t\treturn value instanceof OptionNone || value instanceof OptionSome;\n\t}\n\n\t/**\n\t * Creates an {@link Option} out of a value or callback.\n\t * @typeparam T The result's type.\n\t */\n\texport function from<T>(op: Resolvable<T> | (() => Resolvable<T>)): Option<T> {\n\t\tif (!isFunction(op)) return resolve(op);\n\n\t\ttry {\n\t\t\treturn resolve(op());\n\t\t} catch {\n\t\t\treturn none;\n\t\t}\n\t}\n\n\t/**\n\t * Creates an {@link Option} out of a value or callback.\n\t * @typeparam T The result's type.\n\t */\n\texport async function fromAsync<T>(op: Awaitable<Resolvable<T>> | (() => Awaitable<Resolvable<T>>)): Promise<Option<T>> {\n\t\ttry {\n\t\t\treturn resolve(await (isFunction(op) ? op() : op));\n\t\t} catch {\n\t\t\treturn none;\n\t\t}\n\t}\n\n\t/**\n\t * Creates a {@link Some} that is the combination of all collected {@link Some} values as an array, or the first\n\t * {@link None} encountered.\n\t * @param options An array of {@link Option}s.\n\t * @returns A new {@link Option}.\n\t */\n\texport function all<T extends readonly Option<any>[]>(options: [...T]): Option<UnwrapSomeArray<T>> {\n\t\tconst values: unknown[] = [];\n\t\tfor (const option of options) {\n\t\t\tif (option.isNone()) {\n\t\t\t\treturn option;\n\t\t\t}\n\n\t\t\tvalues.push(option.unwrap());\n\t\t}\n\n\t\treturn some(values as UnwrapSomeArray<T>);\n\t}\n\n\t/**\n\t * Returns the first encountered {@link Some}, or a {@link None} if none was found.\n\t * @param options An array of {@link Option}s.\n\t * @returns A new {@link Option}.\n\t */\n\texport function any<T extends readonly Option<any>[]>(options: [...T]): Option<UnwrapSomeArray<T>[number]> {\n\t\tfor (const result of options) {\n\t\t\tif (result.isSome()) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn none;\n\t}\n\n\texport const none = createNone;\n\texport const some = createSome;\n\n\texport type Some<T> = OptionSome<T>;\n\texport type None = OptionNone;\n\n\texport type UnwrapSome<T extends Option<any>> = T extends Some<infer S> ? S : never;\n\texport type UnwrapSomeArray<T extends readonly Option<any>[] | []> = {\n\t\t-readonly [P in keyof T]: UnwrapSome<T[P]>;\n\t};\n}\n","import { isFunction, type Awaitable } from './common/utils';\nimport { createErr, ResultErr } from './Result/Err';\nimport { createOk, ResultOk } from './Result/Ok';\n\nexport type * from './Result/IResult';\nexport * from './Result/ResultError';\nexport { createOk as ok, createErr as err, type ResultOk as Ok, type ResultErr as Err };\n\n/**\n * The union of the two variations of `Result`.\n * @typeparam T The result's type.\n * @typeparam E The error's type.\n */\nexport type Result<T, E> = Result.Ok<T> | Result.Err<E>;\n\nexport namespace Result {\n\texport type Resolvable<T, E> = T | Result<T, E>;\n\tfunction resolve<T, E>(value: Resolvable<T, E>) {\n\t\tif (is(value)) return value;\n\t\treturn ok(value);\n\t}\n\n\texport function is<T, E>(value: Result<T, E>): true;\n\texport function is(value: any): value is Result<unknown, unknown>;\n\texport function is(value: any) {\n\t\treturn value instanceof ResultOk || value instanceof ResultErr;\n\t}\n\n\t/**\n\t * Creates a {@link Result} out of a callback.\n\t * @typeparam T The result's type.\n\t * @typeparam E The error's type.\n\t */\n\texport function from<T, E = unknown>(op: Resolvable<T, E> | (() => Resolvable<T, E>)): Result<T, E> {\n\t\tif (!isFunction(op)) return resolve(op);\n\n\t\ttry {\n\t\t\treturn resolve(op());\n\t\t} catch (error) {\n\t\t\treturn err(error as E);\n\t\t}\n\t}\n\n\t/**\n\t * Creates a {@link Result} out of a promise or async callback.\n\t * @typeparam T The result's type.\n\t * @typeparam E The error's type.\n\t */\n\texport async function fromAsync<T, E = unknown>(op: Awaitable<Resolvable<T, E>> | (() => Awaitable<Resolvable<T, E>>)): Promise<Result<T, E>> {\n\t\ttry {\n\t\t\treturn resolve(await (isFunction(op) ? op() : op));\n\t\t} catch (error) {\n\t\t\treturn err(error as E);\n\t\t}\n\t}\n\n\t/**\n\t * Creates an {@link Ok} that is the combination of all collected {@link Ok} values as an array, or the first\n\t * {@link Err} encountered.\n\t * @param results An array of {@link Result}s.\n\t * @returns A new {@link Result}.\n\t */\n\texport function all<T extends readonly Result<any, any>[]>(results: [...T]): Result<UnwrapOkArray<T>, UnwrapErrArray<T>[number]> {\n\t\tconst values: unknown[] = [];\n\t\tfor (const result of results) {\n\t\t\tif (result.isErr()) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tvalues.push(result.unwrap());\n\t\t}\n\n\t\treturn ok(values as UnwrapOkArray<T>);\n\t}\n\n\t/**\n\t * Returns the first encountered {@link Ok}, or an {@link Err} that is the combination of all collected error values.\n\t * @param results An array of {@link Result}s.\n\t * @returns A new {@link Result}.\n\t */\n\texport function any<T extends readonly Result<any, any>[]>(results: [...T]): Result<UnwrapOkArray<T>[number], UnwrapErrArray<T>> {\n\t\tconst errors: unknown[] = [];\n\t\tfor (const result of results) {\n\t\t\tif (result.isOk()) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn err(errors as UnwrapErrArray<T>);\n\t}\n\n\texport const err = createErr;\n\texport const ok = createOk;\n\n\texport type Err<E> = ResultErr<E>;\n\texport type Ok<T> = ResultOk<T>;\n\n\texport type UnwrapOk<T extends Result<any, any>> = T extends Ok<infer S> ? S : never;\n\texport type UnwrapErr<T extends Result<any, any>> = T extends Err<infer S> ? S : never;\n\n\texport type UnwrapOkArray<T extends readonly Result<any, any>[] | []> = {\n\t\t-readonly [P in keyof T]: UnwrapOk<T[P]>;\n\t};\n\texport type UnwrapErrArray<T extends readonly Result<any, any>[] | []> = {\n\t\t-readonly [P in keyof T]: UnwrapErr<T[P]>;\n\t};\n}\n","import { Option, Result } from '@sapphire/result';\nimport type { Parameter } from './lexer/streams/ParameterStream';\nimport type { ParserResult } from './parser/ParserResult';\n\nexport class ArgumentStream {\n\tpublic readonly results: ParserResult;\n\tpublic state: ArgumentStream.State;\n\n\tpublic constructor(results: ParserResult) {\n\t\tthis.results = results;\n\t\tthis.state = { used: new Set(), position: 0 };\n\t}\n\n\t/**\n\t * Whether or not all ordered parameters were used.\n\t */\n\tpublic get finished() {\n\t\treturn this.used === this.length;\n\t}\n\n\t/**\n\t * The amount of ordered parameters.\n\t */\n\tpublic get length() {\n\t\treturn this.results.ordered.length;\n\t}\n\n\t/**\n\t * The remaining amount of ordered parameters.\n\t */\n\tpublic get remaining() {\n\t\treturn this.length - this.used;\n\t}\n\n\t/**\n\t * The amount of ordered parameters that have been used.\n\t */\n\tpublic get used() {\n\t\treturn this.state.used.size;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '1' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '2' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '3' }\n\t *\n\t * console.log(args.single());\n\t * // None\n\t * ```\n\t *\n\t * @returns The value, if any.\n\t */\n\tpublic single(): Option<string> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tthis.state.used.add(this.state.position);\n\t\treturn Option.some(this.results.ordered[this.state.position++].value);\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link singleMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number) ? Option.none : Option.some(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 1 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 2 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 3 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // None\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic singleMap<T>(predicate: (value: string) => Option<T>, useAnyways = false): Option<T> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleMap}.\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, useAnyways = false): Promise<Option<T>> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Finds and retrieves the next unused parameter and transforms it.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link singleParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 2 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 3 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Err { error: null }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's transformed value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the transformation failed. Defaults to `false`.\n\t * @returns The transformed value, if any.\n\t */\n\tpublic singleParse<T, E>(predicate: (value: string) => Result<T, E>, useAnyways = false): Result<T, E | null> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, useAnyways = false): Promise<Result<T, E | null>> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic find(predicate: (value: string) => boolean, from = this.state.position): Option<string> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link find}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link findMap}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link findParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Suppose args are from 'ba 1 cc'.\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Err {\n\t * // error: [\n\t * // 'Could not parse ba to a number',\n\t * // 'Could not parse cc to a number'\n\t * // ]\n\t * // }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findParse<T, E>(predicate: (value: string) => Result<T, E>, from = this.state.position): Result<T, E[]> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMapAsync} that returns the errors on failure.\n\t * @note This is an asynchronous variant of {@link findParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, from = this.state.position): Promise<Result<T, E[]>> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Retrieves multiple unused parameters.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many().unwrap()));\n\t * // '1 2 3'\n\t * ```\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many(2).unwrap()));\n\t * // '1 2'\n\t * ```\n\t *\n\t * @param limit The maximum amount of parameters to retrieve, defaults to `Infinity`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The unused parameters within the range.\n\t */\n\tpublic many(limit = Infinity, from = this.state.position): Option<Parameter[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: Parameter[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\t// If the current parameter was already used, skip:\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\t// Mark current parameter as used, and push it to the resulting array:\n\t\t\tthis.state.used.add(i);\n\t\t\tparameters.push(this.results.ordered[i]);\n\n\t\t\t// If the parameters reached the limit, break the loop:\n\t\t\tif (parameters.length >= limit) break;\n\t\t}\n\n\t\treturn parameters.length ? Option.some(parameters) : Option.none;\n\t}\n\n\tpublic filter(predicate: (value: string) => boolean, from = this.state.position): Option<string[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic filterMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\t/**\n\t * Checks whether any of the flags were given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--f --g':\n\t *\n\t * console.log(args.flag('f'));\n\t * // true\n\t *\n\t * console.log(args.flag('g', 'h'));\n\t * // true\n\t *\n\t * console.log(args.flag('h'));\n\t * // false\n\t * ```\n\t *\n\t * @param keys The names of the flags to check.\n\t * @returns Whether or not any of the flags were given.\n\t */\n\tpublic flag(...keys: readonly string[]): boolean {\n\t\treturn keys.some((key) => this.results.flags.has(key));\n\t}\n\n\t/**\n\t * Gets the last value of any option. When there are multiple names, the last value of the last found name is given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: '1' }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: '3' }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The last value of the option, if any.\n\t */\n\tpublic option(...keys: readonly string[]): Option<string> {\n\t\treturn this.options(...keys).map((values) => values.at(-1)!);\n\t}\n\n\t/**\n\t * Gets all values from all options.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: ['1', '1'] }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: ['2', '3'] }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The values from all the options concatenated, if any.\n\t */\n\tpublic options(...keys: readonly string[]): Option<readonly string[]> {\n\t\tconst entries: string[] = [];\n\t\tfor (const key of keys) {\n\t\t\tconst values = this.results.options.get(key);\n\t\t\tif (values) entries.push(...values);\n\t\t}\n\n\t\treturn entries.length ? Option.some(entries) : Option.none;\n\t}\n\n\tpublic save(): ArgumentStream.State {\n\t\treturn {\n\t\t\tused: new Set(this.state.used),\n\t\t\tposition: this.state.position\n\t\t};\n\t}\n\n\tpublic restore(state: ArgumentStream.State) {\n\t\tthis.state = state;\n\t}\n\n\tpublic reset() {\n\t\tthis.restore({ used: new Set(), position: 0 });\n\t}\n}\n\nexport namespace ArgumentStream {\n\texport interface State {\n\t\tused: Set<number>;\n\t\tposition: number;\n\t}\n}\n","export abstract class BaseParameter {\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(separators: readonly string[]) {\n\t\tthis.separators = separators;\n\t}\n\n\tpublic get leading(): string {\n\t\treturn this.separators.join('');\n\t}\n\n\tpublic abstract get raw(): string;\n}\n","import type { QuotedToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class QuotedParameter extends BaseParameter {\n\tpublic readonly value: string;\n\tpublic readonly open: string;\n\tpublic readonly close: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<QuotedToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t\tthis.open = part.open;\n\t\tthis.close = part.close;\n\t}\n\n\tpublic get raw() {\n\t\treturn `${this.open}${this.value}${this.close}`;\n\t}\n}\n","import type { WordToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class WordParameter extends BaseParameter {\n\tpublic readonly value: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<WordToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t}\n\n\tpublic get raw() {\n\t\treturn this.value;\n\t}\n}\n","import type { Lexer } from '../../Lexer';\n\nexport class TokenStream implements Iterable<Token> {\n\tprivate readonly input: string;\n\tprivate readonly quotes: readonly [string, string][];\n\tprivate readonly separator: string;\n\tprivate position = 0;\n\n\tpublic constructor(lexer: Lexer, input: string) {\n\t\tthis.quotes = lexer.quotes;\n\t\tthis.separator = lexer.separator;\n\t\tthis.input = input;\n\t}\n\n\tpublic get finished() {\n\t\treturn this.position >= this.input.length;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Token> {\n\t\twhile (!this.finished) {\n\t\t\tyield this.getPossibleSeparator() ?? this.getPossibleQuotedArgument() ?? this.getParameter();\n\t\t}\n\t}\n\n\tprivate getPossibleSeparator(): SeparatorToken | null {\n\t\tif (this.input.startsWith(this.separator, this.position)) {\n\t\t\tthis.position += this.separator.length;\n\t\t\treturn { type: TokenType.Separator, value: this.separator };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getPossibleQuotedArgument(): QuotedToken | null {\n\t\tfor (const [open, close] of this.quotes) {\n\t\t\tif (!this.input.startsWith(open, this.position)) continue;\n\n\t\t\tconst end = this.input.indexOf(close, this.position + open.length);\n\t\t\tif (end === -1) continue;\n\n\t\t\tconst value = this.input.slice(this.position + open.length, end);\n\t\t\tthis.position = end + close.length;\n\n\t\t\treturn { type: TokenType.Quoted, value, open, close };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getParameter(): WordToken {\n\t\tconst index = this.input.indexOf(this.separator, this.position);\n\t\tconst value = index === -1 ? this.input.slice(this.position) : this.input.slice(this.position, index);\n\t\tthis.position += value.length;\n\t\treturn { type: TokenType.Parameter, value };\n\t}\n}\n\nexport enum TokenType {\n\tParameter,\n\tQuoted,\n\tSeparator\n}\n\nexport type Token = WordToken | QuotedToken | SeparatorToken;\n\nexport interface WordToken {\n\treadonly type: TokenType.Parameter;\n\treadonly value: string;\n}\n\nexport interface QuotedToken {\n\treadonly type: TokenType.Quoted;\n\treadonly value: string;\n\treadonly open: string;\n\treadonly close: string;\n}\n\nexport interface SeparatorToken {\n\treadonly type: TokenType.Separator;\n\treadonly value: string;\n}\n","import { QuotedParameter } from './parameters/QuotedParameter';\nimport { WordParameter } from './parameters/WordParameter';\nimport { TokenType, type Token } from './raw/TokenStream';\n\nexport class ParameterStream {\n\tprivate readonly stream: Iterable<Token>;\n\tprivate separators: string[] = [];\n\n\tpublic constructor(stream: Iterable<Token>) {\n\t\tthis.stream = stream;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Parameter, string[]> {\n\t\tfor (const part of this.stream) {\n\t\t\tif (part.type === TokenType.Separator) {\n\t\t\t\tthis.separators.push(part.value);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tyield part.type === TokenType.Quoted ? new QuotedParameter(this.separators, part) : new WordParameter(this.separators, part);\n\t\t\tthis.separators = [];\n\t\t}\n\n\t\treturn this.separators;\n\t}\n}\n\nexport type Parameter = QuotedParameter | WordParameter;\n","import { ParameterStream } from './streams/ParameterStream';\nimport { TokenStream } from './streams/raw/TokenStream';\n\nexport class Lexer {\n\tpublic readonly quotes: readonly [open: string, close: string][];\n\tpublic readonly separator: string;\n\n\tpublic constructor(options: Lexer.Options = {}) {\n\t\tthis.quotes = options.quotes ?? [];\n\t\tthis.separator = options.separator ?? ' ';\n\t}\n\n\tpublic run(input: string) {\n\t\treturn new ParameterStream(this.raw(input));\n\t}\n\n\tpublic raw(input: string) {\n\t\treturn new TokenStream(this, input);\n\t}\n}\n\nexport namespace Lexer {\n\texport interface Options {\n\t\tseparator?: string;\n\t\tquotes?: readonly [open: string, close: string][];\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { Parser } from './Parser';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\n\nexport class ParserResult {\n\tpublic readonly ordered: Parameter[] = [];\n\tpublic readonly flags = new Set<string>();\n\tpublic readonly options = new Map<string, string[]>();\n\tprivate readonly strategy: IUnorderedStrategy;\n\n\tpublic constructor(parser: Parser) {\n\t\tthis.strategy = parser.strategy;\n\t}\n\n\tpublic parse(parameters: Iterable<Parameter>) {\n\t\tfor (const parameter of parameters) {\n\t\t\tthis.parsePossibleFlag(parameter) || this.parsePossibleOptions(parameter) || this.parseOrdered(parameter);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprivate parsePossibleFlag(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchFlag(parameter.value)\n\t\t\t.inspect((value) => this.flags.add(value))\n\t\t\t.isSome();\n\t}\n\n\tprivate parsePossibleOptions(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchOption(parameter.value)\n\t\t\t.inspect(([key, value]) => {\n\t\t\t\tconst existing = this.options.get(key);\n\t\t\t\tif (existing) existing.push(value);\n\t\t\t\telse this.options.set(key, [value]);\n\t\t\t})\n\t\t\t.isSome();\n\t}\n\n\tprivate parseOrdered(parameter: Parameter): boolean {\n\t\tthis.ordered.push(parameter);\n\t\treturn true;\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class EmptyStrategy implements IUnorderedStrategy {\n\tpublic matchFlag(): Option<string> {\n\t\treturn Option.none;\n\t}\n\n\tpublic matchOption(): Option<readonly [key: string, value: string]> {\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\nimport { ParserResult } from './ParserResult';\nimport { EmptyStrategy } from './strategies/EmptyStrategy';\n\nexport class Parser {\n\tpublic strategy: IUnorderedStrategy;\n\n\tpublic constructor(strategy?: IUnorderedStrategy) {\n\t\tthis.strategy = strategy ?? new EmptyStrategy();\n\t}\n\n\tpublic setUnorderedStrategy(strategy: IUnorderedStrategy) {\n\t\tthis.strategy = strategy;\n\t\treturn this;\n\t}\n\n\tpublic run(input: Iterable<Parameter>): ParserResult {\n\t\treturn new ParserResult(this).parse(input);\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class PrefixedStrategy implements IUnorderedStrategy {\n\tpublic readonly prefixes: readonly string[];\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(prefixes: readonly string[], separators: readonly string[]) {\n\t\tthis.prefixes = prefixes;\n\t\tthis.separators = separators;\n\t}\n\n\tpublic matchFlag(input: string): Option<string> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\t// If the separator is present, return None:\n\t\tif (this.separators.some((x) => input.includes(x, prefix.length))) return Option.none;\n\n\t\treturn Option.some(input.slice(prefix.length));\n\t}\n\n\tpublic matchOption(input: string): Option<readonly [key: string, value: string]> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\tfor (const separator of this.separators) {\n\t\t\tconst index = input.indexOf(separator, prefix.length + 1);\n\n\t\t\t// If the separator is missing, skip:\n\t\t\tif (index === -1) continue;\n\n\t\t\t// If the separator is present, but has no value, return None:\n\t\t\tif (index + separator.length === input.length) return Option.none;\n\n\t\t\tconst key = input.slice(prefix.length, index);\n\t\t\tconst value = input.slice(index + separator.length);\n\t\t\treturn Option.some([key, value] as const);\n\t\t}\n\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\n\n/**\n * Joins the parameters by their `leading` value, using the `value` property.\n * @seealso {@link joinRaw} for the version using `raw` instead of `value`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function join(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].value;\n\n\tlet output = parameters[0].value;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.value;\n\t}\n\n\treturn output;\n}\n\n/**\n * Joins the parameters by their `leading` value, using the `raw` property.\n * @seealso {@link join} for the version using `value` instead of `raw`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function joinRaw(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].raw;\n\n\tlet output = parameters[0].raw;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.raw;\n\t}\n\n\treturn output;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../result/src/lib/common/utils.ts","../../../result/src/lib/Result/ResultError.ts","../../../result/src/lib/Result/Ok.ts","../../../result/src/lib/Option/Some.ts","../../../result/src/lib/Result/Err.ts","../../../result/src/lib/Option/OptionError.ts","../../../result/src/lib/Option/None.ts","../../../result/src/lib/Option.ts","../../../result/src/lib/Result.ts","../../src/lib/ArgumentStream.ts","../../src/lib/lexer/streams/parameters/BaseParameter.ts","../../src/lib/lexer/streams/parameters/QuotedParameter.ts","../../src/lib/lexer/streams/parameters/WordParameter.ts","../../src/lib/lexer/streams/raw/TokenStream.ts","../../src/lib/lexer/streams/ParameterStream.ts","../../src/lib/lexer/Lexer.ts","../../src/lib/parser/ParserResult.ts","../../src/lib/parser/strategies/EmptyStrategy.ts","../../src/lib/parser/Parser.ts","../../src/lib/parser/strategies/PrefixedStrategy.ts","../../src/lib/util/util.ts"],"names":["__name","__publicField","_a","Option","Result","TokenType"],"mappings":"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","file":"index.global.js","sourcesContent":["export type Awaitable<T> = PromiseLike<T> | T;\n\nexport function isFunction<A extends readonly any[], R>(cb: (...args: A) => R): true;\nexport function isFunction(input: any): input is (...args: readonly any[]) => any;\nexport function isFunction(input: any) {\n\treturn typeof input === 'function';\n}\n\nexport function isPromise<T>(input: PromiseLike<T>): true;\nexport function isPromise(input: any): input is PromiseLike<any>;\nexport function isPromise(input: any) {\n\treturn typeof input === 'object' && input !== null && typeof input.then === 'function';\n}\n","export class ResultError<E> extends Error {\n\tpublic readonly value: E;\n\n\tpublic constructor(message: string, value: E) {\n\t\tsuper(message);\n\t\tthis.value = value;\n\t}\n\n\tpublic override get name(): string {\n\t\treturn this.constructor.name;\n\t}\n}\n","import type { Awaitable } from '../common/utils';\nimport type { Option } from '../Option';\nimport { createNone, type OptionNone } from '../Option/None';\nimport { createSome, type OptionSome } from '../Option/Some';\nimport type { Result } from '../Result';\nimport type { ResultErr } from './Err';\nimport type { IResult } from './IResult';\nimport { ResultError } from './ResultError';\n\nexport class ResultOk<T> implements IResult<T, any> {\n\tprivate readonly value: T;\n\n\tpublic constructor(value: T) {\n\t\tthis.value = value;\n\t}\n\n\tpublic isOk(): this is ResultOk<T> {\n\t\treturn true;\n\t}\n\n\tpublic isOkAnd<R extends boolean>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic isErr(): false {\n\t\treturn false;\n\t}\n\n\tpublic isErrAnd(cb?: (error: never) => boolean): false;\n\tpublic isErrAnd(): false {\n\t\treturn false;\n\t}\n\n\tpublic ok(): OptionSome<T> {\n\t\treturn createSome(this.value);\n\t}\n\n\tpublic err(): OptionNone {\n\t\treturn createNone;\n\t}\n\n\tpublic map<U>(cb: (value: T) => U): ResultOk<U> {\n\t\treturn createOk(cb(this.value));\n\t}\n\n\tpublic mapInto<R extends Result<any, any>>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapOr<U>(_: U, cb: (value: T) => U): U {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapOrElse<U>(_: (error: never) => U, cb: (value: T) => U): U {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapErr(cb?: (error: never) => any): this;\n\tpublic mapErr(): this {\n\t\treturn this;\n\t}\n\n\tpublic mapErrInto(cb: (error: never) => Result<any, any>): this;\n\tpublic mapErrInto(): this {\n\t\treturn this;\n\t}\n\n\tpublic inspect(cb: (value: T) => void): this {\n\t\tcb(this.value);\n\t\treturn this;\n\t}\n\n\tpublic async inspectAsync(cb: (value: T) => Awaitable<unknown>): Promise<this> {\n\t\tawait cb(this.value);\n\t\treturn this;\n\t}\n\n\tpublic inspectErr(cb?: (error: never) => void): this;\n\tpublic inspectErr(): this {\n\t\treturn this;\n\t}\n\n\tpublic inspectErrAsync(cb?: (error: never) => Awaitable<unknown>): Promise<this>;\n\tpublic inspectErrAsync(): Promise<this> {\n\t\treturn Promise.resolve(this);\n\t}\n\n\tpublic *iter(): Generator<T> {\n\t\tyield this.value;\n\t}\n\n\tpublic expect(message?: string): T;\n\tpublic expect(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic expectErr(message: string): never {\n\t\tthrow new ResultError(message, this.value);\n\t}\n\n\tpublic unwrap(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrapErr(): never {\n\t\tthrow new ResultError('Unwrap failed', this.value);\n\t}\n\n\tpublic unwrapOr(defaultValue: unknown): T;\n\tpublic unwrapOr(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrapOrElse(op: (error: any) => unknown): T;\n\tpublic unwrapOrElse(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrapRaw(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic and<R extends Result<any, any>>(result: R): R {\n\t\treturn result;\n\t}\n\n\tpublic andThen<R extends Result<any, any>>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic or(result: Result<T, any>): this;\n\tpublic or(): this {\n\t\treturn this;\n\t}\n\n\tpublic orElse(cb: (error: never) => Result<T, any>): this;\n\tpublic orElse(): this {\n\t\treturn this;\n\t}\n\n\tpublic contains(value: T): boolean {\n\t\treturn this.value === value;\n\t}\n\n\tpublic containsErr(error?: unknown): false;\n\tpublic containsErr(): false {\n\t\treturn false;\n\t}\n\n\tpublic transpose(this: ResultOk<OptionNone>): OptionNone;\n\tpublic transpose<Inner>(this: ResultOk<OptionSome<Inner>>): OptionSome<ResultOk<Inner>>;\n\tpublic transpose<Inner>(this: ResultOk<Option<Inner>>): Option<ResultOk<Inner>>;\n\tpublic transpose<IT>(this: ResultOk<Option<IT>>): Option<ResultOk<IT>> {\n\t\treturn this.value.match({\n\t\t\tsome: (value) => createSome(createOk(value)),\n\t\t\tnone: () => createNone\n\t\t});\n\t}\n\n\tpublic flatten<Inner extends Result<any, any>>(this: ResultOk<Inner>): Inner {\n\t\treturn this.value;\n\t}\n\n\tpublic intoOkOrErr() {\n\t\treturn this.value;\n\t}\n\n\tpublic async intoPromise(): Promise<ResultOk<Awaited<T>>> {\n\t\treturn createOk(await this.value);\n\t}\n\n\tpublic eq(other: ResultErr<any>): false;\n\tpublic eq(other: Result<T, any>): boolean;\n\tpublic eq(other: Result<T, any>): boolean {\n\t\treturn other.isOkAnd((value) => this.value === value);\n\t}\n\n\tpublic ne(other: ResultErr<any>): true;\n\tpublic ne(other: Result<T, any>): boolean;\n\tpublic ne(other: Result<T, any>): boolean {\n\t\treturn !this.eq(other);\n\t}\n\n\tpublic match<OkValue, ErrValue>(branches: { ok(value: T): OkValue; err(error: never): ErrValue }): OkValue {\n\t\treturn branches.ok(this.value);\n\t}\n\n\tpublic *[Symbol.iterator](): Generator<T> {\n\t\tyield this.value;\n\t}\n}\n\n/**\n * Creates an Ok with no value.\n * @return A successful Result.\n */\nexport function createOk(): ResultOk<unknown>;\n\n/**\n * Creates an Ok.\n * @typeparam T The result's type.\n * @param x Value to use.\n * @return A successful Result.\n */\nexport function createOk<T>(x: T): ResultOk<T>;\nexport function createOk<T>(x?: T): ResultOk<T | undefined> {\n\treturn new ResultOk(x);\n}\n","import type { Awaitable } from '../common/utils';\nimport type { Option } from '../Option';\nimport type { Result } from '../Result';\nimport { createErr, type ResultErr } from '../Result/Err';\nimport { createOk, type ResultOk } from '../Result/Ok';\nimport type { IOption } from './IOption';\nimport { createNone, type OptionNone } from './None';\n\nexport class OptionSome<T> implements IOption<T> {\n\tprivate readonly value: T;\n\n\tpublic constructor(value: T) {\n\t\tthis.value = value;\n\t}\n\n\tpublic isSome(): this is OptionSome<T> {\n\t\treturn true;\n\t}\n\n\tpublic isSomeAnd<R extends boolean>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic isNone(): false {\n\t\treturn false;\n\t}\n\n\tpublic expect(message: string): T;\n\tpublic expect(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrap(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrapOr(defaultValue: unknown): T;\n\tpublic unwrapOr(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic unwrapOrElse(cb: () => unknown): T;\n\tpublic unwrapOrElse(): T {\n\t\treturn this.value;\n\t}\n\n\tpublic map<U>(cb: (value: T) => U): OptionSome<U> {\n\t\treturn createSome(cb(this.value));\n\t}\n\n\tpublic mapInto<R extends Option<any>>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapOr<U>(_: U, cb: (value: T) => U): U {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapOrElse<U>(_: () => U, cb: (value: T) => U): U {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic mapNoneInto(cb: () => Option<any>): this;\n\tpublic mapNoneInto(): this {\n\t\treturn this;\n\t}\n\n\tpublic inspect(cb: (value: T) => void): this {\n\t\tcb(this.value);\n\t\treturn this;\n\t}\n\n\tpublic async inspectAsync(cb: (value: T) => Awaitable<unknown>): Promise<this> {\n\t\tawait cb(this.value);\n\t\treturn this;\n\t}\n\n\tpublic okOr(err?: any): ResultOk<T>;\n\tpublic okOr(): ResultOk<T> {\n\t\treturn createOk(this.value);\n\t}\n\n\tpublic okOrElse(cb: () => any): ResultOk<T>;\n\tpublic okOrElse(): ResultOk<T> {\n\t\treturn createOk(this.value);\n\t}\n\n\tpublic *iter(): Generator<T> {\n\t\tyield this.value;\n\t}\n\n\tpublic and<R extends Option<any>>(option: R): R {\n\t\treturn option;\n\t}\n\n\tpublic andThen<R extends Option<any>>(cb: (value: T) => R): R {\n\t\treturn cb(this.value);\n\t}\n\n\tpublic or(option: Option<any>): this;\n\tpublic or(): this {\n\t\treturn this;\n\t}\n\n\tpublic orElse(cb?: () => Option<any>): this;\n\tpublic orElse(): this {\n\t\treturn this;\n\t}\n\n\tpublic xor(option: OptionSome<T>): OptionNone;\n\tpublic xor(option: OptionNone): this;\n\tpublic xor(option: Option<T>): this | OptionNone;\n\tpublic xor(option: Option<T>): this | OptionNone {\n\t\treturn option.isSome() ? createNone : this;\n\t}\n\n\tpublic filter(predicate: (value: T) => true): this;\n\tpublic filter(predicate: (value: T) => false): OptionNone;\n\tpublic filter(predicate: (value: T) => boolean): this | OptionNone;\n\tpublic filter(predicate: (value: T) => boolean): this | OptionNone {\n\t\treturn predicate(this.value) ? this : createNone;\n\t}\n\n\tpublic contains(value: T): boolean {\n\t\treturn this.value === value;\n\t}\n\n\tpublic zip(other: OptionNone): OptionNone;\n\tpublic zip<U>(other: OptionSome<U>): OptionSome<[T, U]>;\n\tpublic zip<U>(other: Option<U>): Option<[T, U]>;\n\tpublic zip<U>(other: Option<U>): Option<[T, U]> {\n\t\treturn other.map((o) => [this.value, o] as [T, U]);\n\t}\n\n\tpublic zipWith<U, R>(other: OptionNone, f: (s: T, o: U) => R): OptionNone;\n\tpublic zipWith<U, R>(other: OptionSome<U>, f: (s: T, o: U) => R): OptionSome<R>;\n\tpublic zipWith<U, R>(other: Option<U>, f: (s: T, o: U) => R): Option<R>;\n\tpublic zipWith<U, R>(other: Option<U>, f: (s: T, o: U) => R): Option<R> {\n\t\treturn other.map((o) => f(this.value, o));\n\t}\n\n\tpublic unzip<I, U>(this: OptionSome<readonly [I, U]>): [OptionSome<I>, OptionSome<U>] {\n\t\tconst [s, o] = this.value;\n\t\treturn [createSome(s), createSome(o)];\n\t}\n\n\tpublic transpose<Inner>(this: OptionSome<ResultOk<Inner>>): ResultOk<OptionSome<Inner>>;\n\tpublic transpose<Inner>(this: OptionSome<ResultErr<Inner>>): ResultErr<OptionSome<Inner>>;\n\tpublic transpose<IT, E>(this: OptionSome<Result<IT, E>>): Result<OptionSome<IT>, E>;\n\tpublic transpose<IT, E>(this: OptionSome<Result<IT, E>>): Result<OptionSome<IT>, E> {\n\t\treturn this.value.match({\n\t\t\tok: (v) => createOk(createSome(v)),\n\t\t\terr: (e) => createErr(e)\n\t\t});\n\t}\n\n\tpublic flatten<Inner extends Option<any>>(this: OptionSome<Inner>): Inner {\n\t\treturn this.value;\n\t}\n\n\tpublic async intoPromise(): Promise<OptionSome<Awaited<T>>> {\n\t\treturn createSome(await this.value);\n\t}\n\n\tpublic eq(other: OptionNone): false;\n\tpublic eq(other: Option<T>): boolean;\n\tpublic eq(other: Option<T>): boolean {\n\t\treturn other.isSomeAnd((value) => this.value === value);\n\t}\n\n\tpublic ne(other: OptionNone): true;\n\tpublic ne(other: Option<T>): boolean;\n\tpublic ne(other: Option<T>): boolean {\n\t\treturn !this.eq(other);\n\t}\n\n\tpublic match<SomeValue, NoneValue>(branches: { some(value: T): SomeValue; none(): NoneValue }): SomeValue {\n\t\treturn branches.some(this.value);\n\t}\n\n\tpublic *[Symbol.iterator](): Generator<T> {\n\t\tyield this.value;\n\t}\n}\n\nexport function createSome<T>(value: T): OptionSome<T> {\n\treturn new OptionSome<T>(value);\n}\n","import type { Awaitable } from '../common/utils';\nimport { createNone, type OptionNone } from '../Option/None';\nimport { createSome, type OptionSome } from '../Option/Some';\nimport type { Result } from '../Result';\nimport type { IResult } from './IResult';\nimport type { ResultOk } from './Ok';\nimport { ResultError } from './ResultError';\n\nexport class ResultErr<E> implements IResult<any, E> {\n\tprivate readonly error: E;\n\n\tpublic constructor(error: E) {\n\t\tthis.error = error;\n\t}\n\n\tpublic isOk(): false {\n\t\treturn false;\n\t}\n\n\tpublic isOkAnd(cb?: (value: never) => boolean): false;\n\tpublic isOkAnd(): false {\n\t\treturn false;\n\t}\n\n\tpublic isErr(): this is ResultErr<E> {\n\t\treturn true;\n\t}\n\n\tpublic isErrAnd(cb: (error: E) => boolean): boolean {\n\t\treturn cb(this.error);\n\t}\n\n\tpublic ok(): OptionNone {\n\t\treturn createNone;\n\t}\n\n\tpublic err(): OptionSome<E> {\n\t\treturn createSome(this.error);\n\t}\n\n\tpublic map(cb?: (value: never) => unknown): this;\n\tpublic map(): this {\n\t\treturn this;\n\t}\n\n\tpublic mapInto(cb: (value: never) => Result<any, any>): this;\n\tpublic mapInto(): this {\n\t\treturn this;\n\t}\n\n\tpublic mapOr<U>(defaultValue: U, cb?: (value: never) => U): U;\n\tpublic mapOr<U>(defaultValue: U): U {\n\t\treturn defaultValue;\n\t}\n\n\tpublic mapOrElse<U>(op: (error: E) => U, cb?: (value: never) => U): U;\n\tpublic mapOrElse<U>(op: (error: E) => U): U {\n\t\treturn op(this.error);\n\t}\n\n\tpublic mapErr<F>(cb: (error: E) => F): ResultErr<F> {\n\t\treturn createErr(cb(this.error));\n\t}\n\n\tpublic mapErrInto<R extends Result<any, any>>(cb: (error: E) => R): R {\n\t\treturn cb(this.error);\n\t}\n\n\tpublic inspect(cb?: (value: never) => void): this;\n\tpublic inspect(): this {\n\t\treturn this;\n\t}\n\n\tpublic inspectAsync(cb?: (value: never) => Awaitable<unknown>): Promise<this>;\n\tpublic inspectAsync(): Promise<this> {\n\t\treturn Promise.resolve(this);\n\t}\n\n\tpublic inspectErr(cb: (error: E) => void): this {\n\t\tcb(this.error);\n\t\treturn this;\n\t}\n\n\tpublic async inspectErrAsync(cb: (error: E) => Awaitable<unknown>): Promise<this> {\n\t\tawait cb(this.error);\n\t\treturn this;\n\t}\n\n\tpublic *iter(): Generator<never> {\n\t\t// Yields no values\n\t}\n\n\tpublic expect(message: string): never {\n\t\tthrow new ResultError(message, this.error);\n\t}\n\n\tpublic expectErr(message?: string): E;\n\tpublic expectErr(): E {\n\t\treturn this.error;\n\t}\n\n\tpublic unwrap(): never {\n\t\tthrow new ResultError('Unwrap failed', this.error);\n\t}\n\n\tpublic unwrapErr(): E {\n\t\treturn this.error;\n\t}\n\n\tpublic unwrapOr<T>(defaultValue: T): T {\n\t\treturn defaultValue;\n\t}\n\n\tpublic unwrapOrElse<T>(op: (error: E) => T): T {\n\t\treturn op(this.error);\n\t}\n\n\tpublic unwrapRaw(): never {\n\t\t// eslint-disable-next-line @typescript-eslint/no-throw-literal\n\t\tthrow this.error;\n\t}\n\n\tpublic and(result?: Result<any, E>): this;\n\tpublic and(): this {\n\t\treturn this;\n\t}\n\n\tpublic andThen(cb?: (value: never) => Result<any, E>): this;\n\tpublic andThen(): this {\n\t\treturn this;\n\t}\n\n\tpublic or<R extends Result<any, any>>(result: R): R {\n\t\treturn result;\n\t}\n\n\tpublic orElse<R extends Result<any, any>>(cb: (error: E) => R): R {\n\t\treturn cb(this.error);\n\t}\n\n\tpublic contains(value?: any): false;\n\tpublic contains(): false {\n\t\treturn false;\n\t}\n\n\tpublic containsErr(error: E): boolean {\n\t\treturn this.error === error;\n\t}\n\n\tpublic transpose(): OptionSome<this> {\n\t\treturn createSome(this);\n\t}\n\n\tpublic flatten(): this {\n\t\treturn this;\n\t}\n\n\tpublic intoOkOrErr(): E {\n\t\treturn this.error;\n\t}\n\n\tpublic async intoPromise(): Promise<ResultErr<Awaited<E>>> {\n\t\treturn createErr(await this.error);\n\t}\n\n\tpublic eq(other: ResultOk<any>): false;\n\tpublic eq(other: Result<any, E>): boolean;\n\tpublic eq(other: Result<any, E>): boolean {\n\t\treturn other.isErrAnd((error) => this.error === error);\n\t}\n\n\tpublic ne(other: ResultOk<any>): true;\n\tpublic ne(other: Result<any, E>): boolean;\n\tpublic ne(other: Result<any, E>): boolean {\n\t\treturn !this.eq(other);\n\t}\n\n\tpublic match<OkValue, ErrValue>(branches: { ok(value: never): OkValue; err(error: E): ErrValue }): ErrValue {\n\t\treturn branches.err(this.error);\n\t}\n\n\tpublic *[Symbol.iterator](): Generator<never> {\n\t\t// Yields no values\n\t}\n}\n\n/**\n * Creates an Err with no error.\n * @return An erroneous Result.\n */\nexport function createErr(): ResultErr<unknown>;\n\n/**\n * Creates an Err.\n * @typeparam E The error's type.\n * @param x Value to use.\n * @return An erroneous Result.\n */\nexport function createErr<E>(x: E): ResultErr<E>;\nexport function createErr<E>(x?: E): ResultErr<unknown> {\n\treturn new ResultErr(x);\n}\n","export class OptionError extends Error {\n\tpublic override get name(): string {\n\t\treturn this.constructor.name;\n\t}\n}\n","import type { Awaitable } from '../common/utils';\nimport type { Option } from '../Option';\nimport { createErr, type ResultErr } from '../Result/Err';\nimport { createOk, type ResultOk } from '../Result/Ok';\nimport type { IOption } from './IOption';\nimport { OptionError } from './OptionError';\nimport type { OptionSome } from './Some';\n\nexport class OptionNone implements IOption<any> {\n\tpublic isSome(): false {\n\t\treturn false;\n\t}\n\n\tpublic isSomeAnd(cb?: (value: never) => boolean): false;\n\tpublic isSomeAnd(): false {\n\t\treturn false;\n\t}\n\n\tpublic isNone(): this is OptionNone {\n\t\treturn true;\n\t}\n\n\tpublic expect(message: string): never {\n\t\tthrow new OptionError(message);\n\t}\n\n\tpublic unwrap(): never {\n\t\tthrow new OptionError('Unwrap failed');\n\t}\n\n\tpublic unwrapOr<R>(defaultValue: R): R {\n\t\treturn defaultValue;\n\t}\n\n\tpublic unwrapOrElse<R>(cb: () => R): R {\n\t\treturn cb();\n\t}\n\n\tpublic map(cb: (value: never) => any): this;\n\tpublic map(): this {\n\t\treturn this;\n\t}\n\n\tpublic mapInto(cb: (value: never) => Option<any>): this;\n\tpublic mapInto(): this {\n\t\treturn this;\n\t}\n\n\tpublic mapOr<R>(defaultValue: R, cb?: (value: never) => R): R;\n\tpublic mapOr<R>(defaultValue: R): R {\n\t\treturn defaultValue;\n\t}\n\n\tpublic mapOrElse<R>(defaultValue: () => R, cb?: (value: never) => R): R;\n\tpublic mapOrElse<R>(defaultValue: () => R): R {\n\t\treturn defaultValue();\n\t}\n\n\tpublic mapNoneInto<R extends Option<any>>(cb: () => R): R {\n\t\treturn cb();\n\t}\n\n\tpublic inspect(cb?: (value: never) => void): this;\n\tpublic inspect(): this {\n\t\treturn this;\n\t}\n\n\tpublic inspectAsync(cb?: (value: never) => Awaitable<unknown>): Promise<this>;\n\tpublic inspectAsync(): Promise<this> {\n\t\treturn Promise.resolve(this);\n\t}\n\n\tpublic okOr<E>(error: E): ResultErr<E> {\n\t\treturn createErr(error);\n\t}\n\n\tpublic okOrElse<E>(cb: () => E): ResultErr<E> {\n\t\treturn createErr(cb());\n\t}\n\n\tpublic *iter(): Generator<never> {\n\t\t// Yields no values\n\t}\n\n\tpublic and(option: Option<any>): this;\n\tpublic and(): this {\n\t\treturn this;\n\t}\n\n\tpublic andThen(cb: (value: never) => Option<any>): this;\n\tpublic andThen(): this {\n\t\treturn this;\n\t}\n\n\tpublic or<R extends Option<any>>(option: R): R {\n\t\treturn option;\n\t}\n\n\tpublic orElse<R extends Option<any>>(cb: () => R): R {\n\t\treturn cb();\n\t}\n\n\tpublic xor<T>(option: OptionNone): OptionNone;\n\tpublic xor<T>(option: OptionSome<T>): OptionSome<T>;\n\tpublic xor<T>(option: Option<T>): OptionSome<T> | OptionNone;\n\tpublic xor<T>(option: OptionSome<T> | OptionNone): OptionSome<T> | OptionNone {\n\t\treturn option.isSome() ? option : this;\n\t}\n\n\tpublic filter(predicate: (value: never) => boolean): OptionNone;\n\tpublic filter(): OptionNone {\n\t\treturn this;\n\t}\n\n\tpublic contains(value?: any): false;\n\tpublic contains(): false {\n\t\treturn false;\n\t}\n\n\tpublic zip(other: Option<any>): OptionNone;\n\tpublic zip(): OptionNone {\n\t\treturn this;\n\t}\n\n\tpublic zipWith(other: Option<any>, f: (s: never, o: never) => any): OptionNone;\n\tpublic zipWith(): OptionNone {\n\t\treturn this;\n\t}\n\n\tpublic unzip(): [OptionNone, OptionNone] {\n\t\treturn [this, this];\n\t}\n\n\tpublic transpose(): ResultOk<OptionNone> {\n\t\treturn createOk(this);\n\t}\n\n\tpublic flatten(): OptionNone {\n\t\treturn this;\n\t}\n\n\tpublic intoPromise(): Promise<OptionNone> {\n\t\treturn Promise.resolve(createNone);\n\t}\n\n\tpublic eq(other: OptionNone): true;\n\tpublic eq(other: OptionSome<any>): false;\n\tpublic eq(other: Option<any>): boolean;\n\tpublic eq(other: Option<any>): boolean {\n\t\treturn other.isNone();\n\t}\n\n\tpublic ne(other: OptionNone): false;\n\tpublic ne(other: OptionSome<any>): true;\n\tpublic ne(other: Option<any>): boolean;\n\tpublic ne(other: Option<any>): boolean {\n\t\treturn other.isSome();\n\t}\n\n\tpublic match<SomeValue, NoneValue>(branches: { some(value: never): SomeValue; none(): NoneValue }): NoneValue {\n\t\treturn branches.none();\n\t}\n\n\tpublic *[Symbol.iterator](): Generator<never> {\n\t\t// Yields no values\n\t}\n}\n\nexport const createNone = new OptionNone();\n","import { isFunction, type Awaitable } from './common/utils';\nimport { createNone, OptionNone } from './Option/None';\nimport { createSome, OptionSome } from './Option/Some';\n\nexport type * from './Option/IOption';\nexport * from './Option/OptionError';\nexport { createSome as some, createNone as none, type OptionNone as None, type OptionSome as Some };\n\n/**\n * The union of the two variations of `Option`.\n * @typeparam T The value's type.\n */\nexport type Option<T> = Option.Some<T> | Option.None;\n\nexport namespace Option {\n\texport type Resolvable<T> = T | null | undefined | Option<T>;\n\tfunction resolve<T>(value: Resolvable<T>) {\n\t\tif (value === null || value === undefined) return none;\n\t\tif (is(value)) return value;\n\t\treturn some(value);\n\t}\n\n\texport function is<T>(value: Option<T>): true;\n\texport function is(value: any): value is Option<unknown>;\n\texport function is(value: any) {\n\t\treturn value instanceof OptionNone || value instanceof OptionSome;\n\t}\n\n\t/**\n\t * Creates an {@link Option} out of a value or callback.\n\t * @typeparam T The result's type.\n\t */\n\texport function from<T>(op: Resolvable<T> | (() => Resolvable<T>)): Option<T> {\n\t\tif (!isFunction(op)) return resolve(op);\n\n\t\ttry {\n\t\t\treturn resolve(op());\n\t\t} catch {\n\t\t\treturn none;\n\t\t}\n\t}\n\n\t/**\n\t * Creates an {@link Option} out of a value or callback.\n\t * @typeparam T The result's type.\n\t */\n\texport async function fromAsync<T>(op: Awaitable<Resolvable<T>> | (() => Awaitable<Resolvable<T>>)): Promise<Option<T>> {\n\t\ttry {\n\t\t\treturn resolve(await (isFunction(op) ? op() : op));\n\t\t} catch {\n\t\t\treturn none;\n\t\t}\n\t}\n\n\t/**\n\t * Creates a {@link Some} that is the combination of all collected {@link Some} values as an array, or the first\n\t * {@link None} encountered.\n\t * @param options An array of {@link Option}s.\n\t * @returns A new {@link Option}.\n\t */\n\texport function all<T extends readonly Option<any>[]>(options: [...T]): Option<UnwrapSomeArray<T>> {\n\t\tconst values: unknown[] = [];\n\t\tfor (const option of options) {\n\t\t\tif (option.isNone()) {\n\t\t\t\treturn option;\n\t\t\t}\n\n\t\t\tvalues.push(option.unwrap());\n\t\t}\n\n\t\treturn some(values as UnwrapSomeArray<T>);\n\t}\n\n\t/**\n\t * Returns the first encountered {@link Some}, or a {@link None} if none was found.\n\t * @param options An array of {@link Option}s.\n\t * @returns A new {@link Option}.\n\t */\n\texport function any<T extends readonly Option<any>[]>(options: [...T]): Option<UnwrapSomeArray<T>[number]> {\n\t\tfor (const result of options) {\n\t\t\tif (result.isSome()) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn none;\n\t}\n\n\texport const none = createNone;\n\texport const some = createSome;\n\n\texport type Some<T> = OptionSome<T>;\n\texport type None = OptionNone;\n\n\texport type UnwrapSome<T extends Option<any>> = T extends Some<infer S> ? S : never;\n\texport type UnwrapSomeArray<T extends readonly Option<any>[] | []> = {\n\t\t-readonly [P in keyof T]: UnwrapSome<T[P]>;\n\t};\n}\n","import { isFunction, type Awaitable } from './common/utils';\nimport { createErr, ResultErr } from './Result/Err';\nimport { createOk, ResultOk } from './Result/Ok';\n\nexport type * from './Result/IResult';\nexport * from './Result/ResultError';\nexport { createOk as ok, createErr as err, type ResultOk as Ok, type ResultErr as Err };\n\n/**\n * The union of the two variations of `Result`.\n * @typeparam T The result's type.\n * @typeparam E The error's type.\n */\nexport type Result<T, E> = Result.Ok<T> | Result.Err<E>;\n\nexport namespace Result {\n\texport type Resolvable<T, E> = T | Result<T, E>;\n\tfunction resolve<T, E>(value: Resolvable<T, E>) {\n\t\tif (is(value)) return value;\n\t\treturn ok(value);\n\t}\n\n\texport function is<T, E>(value: Result<T, E>): true;\n\texport function is(value: any): value is Result<unknown, unknown>;\n\texport function is(value: any) {\n\t\treturn value instanceof ResultOk || value instanceof ResultErr;\n\t}\n\n\t/**\n\t * Creates a {@link Result} out of a callback.\n\t * @typeparam T The result's type.\n\t * @typeparam E The error's type.\n\t */\n\texport function from<T, E = unknown>(op: Resolvable<T, E> | (() => Resolvable<T, E>)): Result<T, E> {\n\t\tif (!isFunction(op)) return resolve(op);\n\n\t\ttry {\n\t\t\treturn resolve(op());\n\t\t} catch (error) {\n\t\t\treturn err(error as E);\n\t\t}\n\t}\n\n\t/**\n\t * Creates a {@link Result} out of a promise or async callback.\n\t * @typeparam T The result's type.\n\t * @typeparam E The error's type.\n\t */\n\texport async function fromAsync<T, E = unknown>(op: Awaitable<Resolvable<T, E>> | (() => Awaitable<Resolvable<T, E>>)): Promise<Result<T, E>> {\n\t\ttry {\n\t\t\treturn resolve(await (isFunction(op) ? op() : op));\n\t\t} catch (error) {\n\t\t\treturn err(error as E);\n\t\t}\n\t}\n\n\t/**\n\t * Creates an {@link Ok} that is the combination of all collected {@link Ok} values as an array, or the first\n\t * {@link Err} encountered.\n\t * @param results An array of {@link Result}s.\n\t * @returns A new {@link Result}.\n\t */\n\texport function all<T extends readonly Result<any, any>[]>(results: [...T]): Result<UnwrapOkArray<T>, UnwrapErrArray<T>[number]> {\n\t\tconst values: unknown[] = [];\n\t\tfor (const result of results) {\n\t\t\tif (result.isErr()) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tvalues.push(result.unwrap());\n\t\t}\n\n\t\treturn ok(values as UnwrapOkArray<T>);\n\t}\n\n\t/**\n\t * Returns the first encountered {@link Ok}, or an {@link Err} that is the combination of all collected error values.\n\t * @param results An array of {@link Result}s.\n\t * @returns A new {@link Result}.\n\t */\n\texport function any<T extends readonly Result<any, any>[]>(results: [...T]): Result<UnwrapOkArray<T>[number], UnwrapErrArray<T>> {\n\t\tconst errors: unknown[] = [];\n\t\tfor (const result of results) {\n\t\t\tif (result.isOk()) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn err(errors as UnwrapErrArray<T>);\n\t}\n\n\texport const err = createErr;\n\texport const ok = createOk;\n\n\texport type Err<E> = ResultErr<E>;\n\texport type Ok<T> = ResultOk<T>;\n\n\texport type UnwrapOk<T extends Result<any, any>> = T extends Ok<infer S> ? S : never;\n\texport type UnwrapErr<T extends Result<any, any>> = T extends Err<infer S> ? S : never;\n\n\texport type UnwrapOkArray<T extends readonly Result<any, any>[] | []> = {\n\t\t-readonly [P in keyof T]: UnwrapOk<T[P]>;\n\t};\n\texport type UnwrapErrArray<T extends readonly Result<any, any>[] | []> = {\n\t\t-readonly [P in keyof T]: UnwrapErr<T[P]>;\n\t};\n}\n","import { Option, Result } from '@sapphire/result';\nimport type { Parameter } from './lexer/streams/ParameterStream';\nimport type { ParserResult } from './parser/ParserResult';\n\nexport class ArgumentStream {\n\tpublic readonly results: ParserResult;\n\tpublic state: ArgumentStream.State;\n\n\tpublic constructor(results: ParserResult) {\n\t\tthis.results = results;\n\t\tthis.state = { used: new Set(), position: 0 };\n\t}\n\n\t/**\n\t * Whether or not all ordered parameters were used.\n\t */\n\tpublic get finished() {\n\t\treturn this.used === this.length;\n\t}\n\n\t/**\n\t * The amount of ordered parameters.\n\t */\n\tpublic get length() {\n\t\treturn this.results.ordered.length;\n\t}\n\n\t/**\n\t * The remaining amount of ordered parameters.\n\t */\n\tpublic get remaining() {\n\t\treturn this.length - this.used;\n\t}\n\n\t/**\n\t * The amount of ordered parameters that have been used.\n\t */\n\tpublic get used() {\n\t\treturn this.state.used.size;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '1' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '2' }\n\t *\n\t * console.log(args.single());\n\t * // Ok { value: '3' }\n\t *\n\t * console.log(args.single());\n\t * // None\n\t * ```\n\t *\n\t * @returns The value, if any.\n\t */\n\tpublic single(): Option<string> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tthis.state.used.add(this.state.position);\n\t\treturn Option.some(this.results.ordered[this.state.position++].value);\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link singleMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number) ? Option.none : Option.some(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 1 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 2 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // Some { value: 3 }\n\t *\n\t * console.log(args.singleMap(parse));\n\t * // None\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic singleMap<T>(predicate: (value: string) => Option<T>, useAnyways = false): Option<T> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleMap}.\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, useAnyways = false): Promise<Option<T>> {\n\t\tif (this.finished) return Option.none;\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isSome() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Finds and retrieves the next unused parameter and transforms it.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link singleParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 2 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Ok { value: 3 }\n\t *\n\t * console.log(args.singleParse(parse));\n\t * // Err { error: null }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's transformed value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the transformation failed. Defaults to `false`.\n\t * @returns The transformed value, if any.\n\t */\n\tpublic singleParse<T, E>(predicate: (value: string) => Result<T, E>, useAnyways = false): Result<T, E | null> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the value of the next unused ordered token, but only if it could be transformed.\n\t *\n\t * @note This is an asynchronous variant of {@link singleParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate The predicate that determines the parameter's mapped value, or nothing if failed.\n\t * @param useAnyways Whether to consider the parameter used even if the mapping failed. Defaults to `false`.\n\t * @returns The mapped value, if any.\n\t */\n\tpublic async singleParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, useAnyways = false): Promise<Result<T, E | null>> {\n\t\tif (this.finished) return Result.err(null);\n\n\t\twhile (this.state.used.has(this.state.position)) {\n\t\t\t++this.state.position;\n\t\t}\n\n\t\tconst result = await predicate(this.results.ordered[this.state.position].value);\n\t\tif (result.isOk() || useAnyways) {\n\t\t\tthis.state.used.add(this.state.position);\n\t\t\t++this.state.position;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic find(predicate: (value: string) => boolean, from = this.state.position): Option<string> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `true`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link find}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `true`. If such an element is found, find immediately returns a `Option.some`\n\t * with that element value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn Option.some(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This does not support asynchronous results, refer to {@link findMapAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Returns the value of the first element in the array within `Option.some` where `predicate` returns `Some`, and\n\t * `Option.none` otherwise.\n\t *\n\t * @note This is an asynchronous variant of {@link findMap}.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Suppose args are from 'ba aa cc'.\n\t *\n\t * console.log(args.find((value) => value.startsWith('a')));\n\t * // Some { value: 'aa' }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @param predicate find calls `predicate` once for each unused ordered parameter, in ascending order, until it\n\t * finds one where `predicate` returns `Some`. If such an element is found, find immediately returns the returned\n\t * value. Otherwise, find returns `Option.none`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T>> {\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isSome()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn Option.none;\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMap} that returns the errors on failure.\n\t * @note This does not support asynchronous results, refer to {@link findParseAsync}.\n\t *\n\t * @example\n\t * ```typescript\n\t * const parse = (value) => {\n\t * const number = Number(value);\n\t * return Number.isNaN(number)\n\t * ? Result.err(`Could not parse ${value} to a number`)\n\t * : Result.ok(number);\n\t * };\n\t *\n\t * // Suppose args are from 'ba 1 cc'.\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Ok { value: 1 }\n\t *\n\t * console.log(args.findParse(parse));\n\t * // Err {\n\t * // error: [\n\t * // 'Could not parse ba to a number',\n\t * // 'Could not parse cc to a number'\n\t * // ]\n\t * // }\n\t * ```\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic findParse<T, E>(predicate: (value: string) => Result<T, E>, from = this.state.position): Result<T, E[]> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Finds and retrieves the first unused parameter that could be transformed.\n\t *\n\t * @note This is a variant of {@link findMapAsync} that returns the errors on failure.\n\t * @note This is an asynchronous variant of {@link findParse}.\n\t *\n\t * @typeparam T The output type.\n\t * @typeparam E The error type.\n\t * @param predicate `findParse` calls `predicate` once for each unused ordered parameter, in ascending order, until\n\t * it finds one where `predicate` returns `Ok`. If such an element is found, `findParse` immediately returns the\n\t * returned value. Otherwise, `findParse` returns `Result.Err` with all the returned errors.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The found parameter's value.\n\t */\n\tpublic async findParseAsync<T, E>(predicate: (value: string) => Promise<Result<T, E>>, from = this.state.position): Promise<Result<T, E[]>> {\n\t\tconst errors: E[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tif (result.isOk()) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\treturn result as Result.Ok<T>;\n\t\t\t}\n\n\t\t\terrors.push(result.unwrapErr());\n\t\t}\n\n\t\treturn Result.err(errors);\n\t}\n\n\t/**\n\t * Retrieves multiple unused parameters.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many().unwrap()));\n\t * // '1 2 3'\n\t * ```\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '1 2 3':\n\t *\n\t * console.log(join(args.many(2).unwrap()));\n\t * // '1 2'\n\t * ```\n\t *\n\t * @param limit The maximum amount of parameters to retrieve, defaults to `Infinity`.\n\t * @param from The position where to start looking for unused parameters, defaults to current position.\n\t * @returns The unused parameters within the range.\n\t */\n\tpublic many(limit = Infinity, from = this.state.position): Option<Parameter[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: Parameter[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\t// If the current parameter was already used, skip:\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\t// Mark current parameter as used, and push it to the resulting array:\n\t\t\tthis.state.used.add(i);\n\t\t\tparameters.push(this.results.ordered[i]);\n\n\t\t\t// If the parameters reached the limit, break the loop:\n\t\t\tif (parameters.length >= limit) break;\n\t\t}\n\n\t\treturn parameters.length ? Option.some(parameters) : Option.none;\n\t}\n\n\tpublic filter(predicate: (value: string) => boolean, from = this.state.position): Option<string[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterAsync(predicate: (value: string) => Promise<boolean>, from = this.state.position): Promise<Option<string[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: string[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tif (await predicate(parameter)) {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(parameter);\n\t\t\t}\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic filterMap<T>(predicate: (value: string) => Option<T>, from = this.state.position): Option<T[]> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\tpublic async filterMapAsync<T>(predicate: (value: string) => Promise<Option<T>>, from = this.state.position): Promise<Option<T[]>> {\n\t\tif (this.finished) return Option.none;\n\n\t\tconst parameters: T[] = [];\n\t\tfor (let i = from; i < this.length; ++i) {\n\t\t\tif (this.state.used.has(i)) continue;\n\n\t\t\tconst parameter = this.results.ordered[i].value;\n\t\t\tconst result = await predicate(parameter);\n\t\t\tresult.inspect((value) => {\n\t\t\t\tthis.state.used.add(i);\n\t\t\t\tparameters.push(value);\n\t\t\t});\n\t\t}\n\n\t\treturn Option.some(parameters);\n\t}\n\n\t/**\n\t * Checks whether any of the flags were given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--f --g':\n\t *\n\t * console.log(args.flag('f'));\n\t * // true\n\t *\n\t * console.log(args.flag('g', 'h'));\n\t * // true\n\t *\n\t * console.log(args.flag('h'));\n\t * // false\n\t * ```\n\t *\n\t * @param keys The names of the flags to check.\n\t * @returns Whether or not any of the flags were given.\n\t */\n\tpublic flag(...keys: readonly string[]): boolean {\n\t\treturn keys.some((key) => this.results.flags.has(key));\n\t}\n\n\t/**\n\t * Gets the last value of any option. When there are multiple names, the last value of the last found name is given.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: '1' }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: '3' }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The last value of the option, if any.\n\t */\n\tpublic option(...keys: readonly string[]): Option<string> {\n\t\treturn this.options(...keys).map((values) => values.at(-1)!);\n\t}\n\n\t/**\n\t * Gets all values from all options.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Assume args are '--a=1 --a=1 --b=2 --c=3'.\n\t * console.log(args.option('a'));\n\t * // Some { value: ['1', '1'] }\n\t *\n\t * console.log(args.option('b', 'c'));\n\t * // Some { value: ['2', '3'] }\n\t *\n\t * console.log(args.option('d'));\n\t * // None {}\n\t * ```\n\t *\n\t * @param keys The names of the options to check.\n\t * @returns The values from all the options concatenated, if any.\n\t */\n\tpublic options(...keys: readonly string[]): Option<readonly string[]> {\n\t\tconst entries: string[] = [];\n\t\tfor (const key of keys) {\n\t\t\tconst values = this.results.options.get(key);\n\t\t\tif (values) entries.push(...values);\n\t\t}\n\n\t\treturn entries.length ? Option.some(entries) : Option.none;\n\t}\n\n\tpublic save(): ArgumentStream.State {\n\t\treturn {\n\t\t\tused: new Set(this.state.used),\n\t\t\tposition: this.state.position\n\t\t};\n\t}\n\n\tpublic restore(state: ArgumentStream.State) {\n\t\tthis.state = state;\n\t}\n\n\tpublic reset() {\n\t\tthis.restore({ used: new Set(), position: 0 });\n\t}\n}\n\nexport namespace ArgumentStream {\n\texport interface State {\n\t\tused: Set<number>;\n\t\tposition: number;\n\t}\n}\n","export abstract class BaseParameter {\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(separators: readonly string[]) {\n\t\tthis.separators = separators;\n\t}\n\n\tpublic get leading(): string {\n\t\treturn this.separators.join('');\n\t}\n\n\tpublic abstract get raw(): string;\n}\n","import type { QuotedToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class QuotedParameter extends BaseParameter {\n\tpublic readonly value: string;\n\tpublic readonly open: string;\n\tpublic readonly close: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<QuotedToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t\tthis.open = part.open;\n\t\tthis.close = part.close;\n\t}\n\n\tpublic get raw() {\n\t\treturn `${this.open}${this.value}${this.close}`;\n\t}\n}\n","import type { WordToken } from '../raw/TokenStream';\nimport { BaseParameter } from './BaseParameter';\n\nexport class WordParameter extends BaseParameter {\n\tpublic readonly value: string;\n\n\tpublic constructor(separators: readonly string[], part: Omit<WordToken, 'type'>) {\n\t\tsuper(separators);\n\t\tthis.value = part.value;\n\t}\n\n\tpublic get raw() {\n\t\treturn this.value;\n\t}\n}\n","import type { Lexer } from '../../Lexer';\n\nexport class TokenStream implements Iterable<Token> {\n\tprivate readonly input: string;\n\tprivate readonly quotes: readonly [string, string][];\n\tprivate readonly separator: string;\n\tprivate position = 0;\n\n\tpublic constructor(lexer: Lexer, input: string) {\n\t\tthis.quotes = lexer.quotes;\n\t\tthis.separator = lexer.separator;\n\t\tthis.input = input;\n\t}\n\n\tpublic get finished() {\n\t\treturn this.position >= this.input.length;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Token> {\n\t\twhile (!this.finished) {\n\t\t\tyield this.getPossibleSeparator() ?? this.getPossibleQuotedArgument() ?? this.getParameter();\n\t\t}\n\t}\n\n\tprivate getPossibleSeparator(): SeparatorToken | null {\n\t\tif (this.input.startsWith(this.separator, this.position)) {\n\t\t\tthis.position += this.separator.length;\n\t\t\treturn { type: TokenType.Separator, value: this.separator };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getPossibleQuotedArgument(): QuotedToken | null {\n\t\tfor (const [open, close] of this.quotes) {\n\t\t\tif (!this.input.startsWith(open, this.position)) continue;\n\n\t\t\tconst end = this.input.indexOf(close, this.position + open.length);\n\t\t\tif (end === -1) continue;\n\n\t\t\tconst value = this.input.slice(this.position + open.length, end);\n\t\t\tthis.position = end + close.length;\n\n\t\t\treturn { type: TokenType.Quoted, value, open, close };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getParameter(): WordToken {\n\t\tconst index = this.input.indexOf(this.separator, this.position);\n\t\tconst value = index === -1 ? this.input.slice(this.position) : this.input.slice(this.position, index);\n\t\tthis.position += value.length;\n\t\treturn { type: TokenType.Parameter, value };\n\t}\n}\n\nexport enum TokenType {\n\tParameter,\n\tQuoted,\n\tSeparator\n}\n\nexport type Token = WordToken | QuotedToken | SeparatorToken;\n\nexport interface WordToken {\n\treadonly type: TokenType.Parameter;\n\treadonly value: string;\n}\n\nexport interface QuotedToken {\n\treadonly type: TokenType.Quoted;\n\treadonly value: string;\n\treadonly open: string;\n\treadonly close: string;\n}\n\nexport interface SeparatorToken {\n\treadonly type: TokenType.Separator;\n\treadonly value: string;\n}\n","import { QuotedParameter } from './parameters/QuotedParameter';\nimport { WordParameter } from './parameters/WordParameter';\nimport { TokenType, type Token } from './raw/TokenStream';\n\nexport class ParameterStream {\n\tprivate readonly stream: Iterable<Token>;\n\tprivate separators: string[] = [];\n\n\tpublic constructor(stream: Iterable<Token>) {\n\t\tthis.stream = stream;\n\t}\n\n\tpublic *[Symbol.iterator](): Iterator<Parameter, string[]> {\n\t\tfor (const part of this.stream) {\n\t\t\tif (part.type === TokenType.Separator) {\n\t\t\t\tthis.separators.push(part.value);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tyield part.type === TokenType.Quoted ? new QuotedParameter(this.separators, part) : new WordParameter(this.separators, part);\n\t\t\tthis.separators = [];\n\t\t}\n\n\t\treturn this.separators;\n\t}\n}\n\nexport type Parameter = QuotedParameter | WordParameter;\n","import { ParameterStream } from './streams/ParameterStream';\nimport { TokenStream } from './streams/raw/TokenStream';\n\nexport class Lexer {\n\tpublic readonly quotes: readonly [open: string, close: string][];\n\tpublic readonly separator: string;\n\n\tpublic constructor(options: Lexer.Options = {}) {\n\t\tthis.quotes = options.quotes ?? [];\n\t\tthis.separator = options.separator ?? ' ';\n\t}\n\n\tpublic run(input: string) {\n\t\treturn new ParameterStream(this.raw(input));\n\t}\n\n\tpublic raw(input: string) {\n\t\treturn new TokenStream(this, input);\n\t}\n}\n\nexport namespace Lexer {\n\texport interface Options {\n\t\tseparator?: string;\n\t\tquotes?: readonly [open: string, close: string][];\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { Parser } from './Parser';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\n\nexport class ParserResult {\n\tpublic readonly ordered: Parameter[] = [];\n\tpublic readonly flags = new Set<string>();\n\tpublic readonly options = new Map<string, string[]>();\n\tprivate readonly strategy: IUnorderedStrategy;\n\n\tpublic constructor(parser: Parser) {\n\t\tthis.strategy = parser.strategy;\n\t}\n\n\tpublic parse(parameters: Iterable<Parameter>) {\n\t\tfor (const parameter of parameters) {\n\t\t\tthis.parsePossibleFlag(parameter) || this.parsePossibleOptions(parameter) || this.parseOrdered(parameter);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprivate parsePossibleFlag(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchFlag(parameter.value)\n\t\t\t.inspect((value) => this.flags.add(value))\n\t\t\t.isSome();\n\t}\n\n\tprivate parsePossibleOptions(parameter: Parameter): boolean {\n\t\treturn this.strategy\n\t\t\t.matchOption(parameter.value)\n\t\t\t.inspect(([key, value]) => {\n\t\t\t\tconst existing = this.options.get(key);\n\t\t\t\tif (existing) existing.push(value);\n\t\t\t\telse this.options.set(key, [value]);\n\t\t\t})\n\t\t\t.isSome();\n\t}\n\n\tprivate parseOrdered(parameter: Parameter): boolean {\n\t\tthis.ordered.push(parameter);\n\t\treturn true;\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class EmptyStrategy implements IUnorderedStrategy {\n\tpublic matchFlag(): Option<string> {\n\t\treturn Option.none;\n\t}\n\n\tpublic matchOption(): Option<readonly [key: string, value: string]> {\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\nimport type { IUnorderedStrategy } from './strategies/IUnorderedStrategy';\nimport { ParserResult } from './ParserResult';\nimport { EmptyStrategy } from './strategies/EmptyStrategy';\n\nexport class Parser {\n\tpublic strategy: IUnorderedStrategy;\n\n\tpublic constructor(strategy?: IUnorderedStrategy) {\n\t\tthis.strategy = strategy ?? new EmptyStrategy();\n\t}\n\n\tpublic setUnorderedStrategy(strategy: IUnorderedStrategy) {\n\t\tthis.strategy = strategy;\n\t\treturn this;\n\t}\n\n\tpublic run(input: Iterable<Parameter>): ParserResult {\n\t\treturn new ParserResult(this).parse(input);\n\t}\n}\n","import { Option } from '@sapphire/result';\nimport type { IUnorderedStrategy } from './IUnorderedStrategy';\n\nexport class PrefixedStrategy implements IUnorderedStrategy {\n\tpublic readonly prefixes: readonly string[];\n\tpublic readonly separators: readonly string[];\n\n\tpublic constructor(prefixes: readonly string[], separators: readonly string[]) {\n\t\tthis.prefixes = prefixes;\n\t\tthis.separators = separators;\n\t}\n\n\tpublic matchFlag(input: string): Option<string> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\t// If the separator is present, return None:\n\t\tif (this.separators.some((x) => input.includes(x, prefix.length))) return Option.none;\n\n\t\treturn Option.some(input.slice(prefix.length));\n\t}\n\n\tpublic matchOption(input: string): Option<readonly [key: string, value: string]> {\n\t\tconst prefix = this.prefixes.find((x) => input.startsWith(x));\n\n\t\t// If the prefix is missing, return None:\n\t\tif (!prefix) return Option.none;\n\n\t\tfor (const separator of this.separators) {\n\t\t\tconst index = input.indexOf(separator, prefix.length + 1);\n\n\t\t\t// If the separator is missing, skip:\n\t\t\tif (index === -1) continue;\n\n\t\t\t// If the separator is present, but has no value, return None:\n\t\t\tif (index + separator.length === input.length) return Option.none;\n\n\t\t\tconst key = input.slice(prefix.length, index);\n\t\t\tconst value = input.slice(index + separator.length);\n\t\t\treturn Option.some([key, value] as const);\n\t\t}\n\n\t\treturn Option.none;\n\t}\n}\n","import type { Parameter } from '../lexer/streams/ParameterStream';\n\n/**\n * Joins the parameters by their `leading` value, using the `value` property.\n * @seealso {@link joinRaw} for the version using `raw` instead of `value`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function join(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].value;\n\n\tlet output = parameters[0].value;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.value;\n\t}\n\n\treturn output;\n}\n\n/**\n * Joins the parameters by their `leading` value, using the `raw` property.\n * @seealso {@link join} for the version using `value` instead of `raw`.\n * @param parameters The parameters to join.\n * @returns The result of joining the parameters.\n */\nexport function joinRaw(parameters: readonly Parameter[]) {\n\tif (parameters.length === 0) return '';\n\tif (parameters.length === 1) return parameters[0].raw;\n\n\tlet output = parameters[0].raw;\n\tfor (let i = 1; i < parameters.length; i++) {\n\t\tconst parameter = parameters[i];\n\t\toutput += parameter.leading + parameter.raw;\n\t}\n\n\treturn output;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sapphire/lexure",
|
|
3
|
-
"version": "1.1.8-next.
|
|
3
|
+
"version": "1.1.8-next.8bfb0191",
|
|
4
4
|
"description": "Parser and utilities for non-technical user input",
|
|
5
5
|
"author": "@sapphire",
|
|
6
6
|
"license": "MIT",
|
|
@@ -67,13 +67,13 @@
|
|
|
67
67
|
"@sapphire/result": "^2.6.6"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@favware/cliff-jumper": "^4.0.
|
|
71
|
-
"@vitest/coverage-v8": "^2.0.
|
|
72
|
-
"tsup": "^8.
|
|
73
|
-
"tsx": "^4.
|
|
70
|
+
"@favware/cliff-jumper": "^4.0.3",
|
|
71
|
+
"@vitest/coverage-v8": "^2.0.5",
|
|
72
|
+
"tsup": "^8.2.4",
|
|
73
|
+
"tsx": "^4.17.0",
|
|
74
74
|
"typedoc": "^0.25.13",
|
|
75
75
|
"typedoc-json-parser": "^10.0.0",
|
|
76
76
|
"typescript": "~5.4.5",
|
|
77
|
-
"vitest": "^2.0.
|
|
77
|
+
"vitest": "^2.0.5"
|
|
78
78
|
}
|
|
79
79
|
}
|