@nlabs/lex 1.46.2 → 1.47.1
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/__mocks__/LexConfig.js +20 -0
- package/__mocks__/boxen.js +7 -0
- package/__mocks__/build.js +16 -0
- package/__mocks__/chalk.js +23 -0
- package/__mocks__/compile.js +8 -0
- package/__mocks__/execa.js +21 -0
- package/__mocks__/ora.js +17 -0
- package/__mocks__/versions.js +12 -0
- package/dist/LexConfig.d.ts +79 -0
- package/dist/LexConfig.js +83 -15
- package/dist/commands/ai/ai.d.ts +17 -0
- package/dist/commands/ai/ai.js +303 -0
- package/dist/commands/ai/index.d.ts +8 -0
- package/dist/commands/ai/index.js +7 -0
- package/dist/commands/build/build.cli.test.d.ts +5 -0
- package/dist/commands/build/build.d.ts +18 -0
- package/dist/commands/build/build.integration.test.d.ts +1 -0
- package/dist/commands/build/build.js +400 -0
- package/dist/commands/build/build.options.test.d.ts +5 -0
- package/dist/commands/clean/clean.cli.test.d.ts +1 -0
- package/dist/commands/clean/clean.d.ts +7 -0
- package/dist/commands/clean/clean.integration.test.d.ts +1 -0
- package/dist/commands/clean/clean.js +31 -0
- package/dist/commands/clean/clean.options.test.d.ts +1 -0
- package/dist/commands/compile/compile.cli.test.d.ts +1 -0
- package/dist/commands/compile/compile.d.ts +2 -0
- package/dist/commands/compile/compile.integration.test.d.ts +1 -0
- package/dist/commands/compile/compile.js +239 -0
- package/dist/commands/compile/compile.options.test.d.ts +1 -0
- package/dist/commands/config/config.cli.test.d.ts +1 -0
- package/dist/commands/config/config.d.ts +7 -0
- package/dist/commands/config/config.integration.test.d.ts +1 -0
- package/dist/commands/config/config.js +43 -0
- package/dist/commands/config/config.options.test.d.ts +1 -0
- package/dist/commands/copy/copy.cli.test.d.ts +1 -0
- package/dist/commands/copy/copy.d.ts +6 -0
- package/dist/commands/copy/copy.integration.test.d.ts +1 -0
- package/dist/commands/copy/copy.js +38 -0
- package/dist/commands/copy/copy.options.test.d.ts +1 -0
- package/dist/commands/create/create.cli.test.d.ts +1 -0
- package/dist/commands/create/create.d.ts +8 -0
- package/dist/commands/create/create.integration.test.d.ts +1 -0
- package/dist/commands/create/create.js +124 -0
- package/dist/commands/create/create.options.test.d.ts +1 -0
- package/dist/commands/dev/dev.cli.test.d.ts +1 -0
- package/dist/commands/dev/dev.d.ts +11 -0
- package/dist/commands/dev/dev.integration.test.d.ts +1 -0
- package/dist/commands/dev/dev.js +70 -0
- package/dist/commands/dev/dev.options.test.d.ts +1 -0
- package/dist/commands/init/init.cli.test.d.ts +1 -0
- package/dist/commands/init/init.d.ts +9 -0
- package/dist/commands/init/init.integration.test.d.ts +1 -0
- package/dist/commands/init/init.js +93 -0
- package/dist/commands/init/init.options.test.d.ts +1 -0
- package/dist/commands/link/link.cli.test.d.ts +1 -0
- package/dist/commands/link/link.d.ts +6 -0
- package/dist/commands/link/link.integration.test.d.ts +1 -0
- package/dist/commands/link/link.js +15 -0
- package/dist/commands/link/link.options.test.d.ts +1 -0
- package/dist/commands/lint/autofix.d.ts +2 -0
- package/dist/commands/lint/lint.cli.test.d.ts +1 -0
- package/dist/commands/lint/lint.d.ts +39 -0
- package/dist/commands/lint/lint.integration.test.d.ts +1 -0
- package/dist/commands/lint/lint.js +820 -0
- package/dist/commands/lint/lint.options.test.d.ts +1 -0
- package/dist/commands/migrate/migrate.cli.test.d.ts +1 -0
- package/dist/commands/migrate/migrate.d.ts +7 -0
- package/dist/commands/migrate/migrate.integration.test.d.ts +1 -0
- package/dist/commands/migrate/migrate.js +37 -0
- package/dist/commands/migrate/migrate.options.test.d.ts +1 -0
- package/dist/commands/publish/publish.cli.test.d.ts +1 -0
- package/dist/commands/publish/publish.d.ts +12 -0
- package/dist/commands/publish/publish.integration.test.d.ts +1 -0
- package/dist/commands/publish/publish.js +104 -0
- package/dist/commands/publish/publish.options.test.d.ts +1 -0
- package/dist/commands/test/test.cli.test.d.ts +1 -0
- package/dist/commands/test/test.d.ts +50 -0
- package/dist/commands/test/test.integration.test.d.ts +1 -0
- package/dist/commands/test/test.js +327 -0
- package/dist/commands/test/test.options.test.d.ts +1 -0
- package/dist/commands/test/test.test.d.ts +1 -0
- package/dist/commands/update/update.cli.test.d.ts +1 -0
- package/dist/commands/update/update.d.ts +9 -0
- package/dist/commands/update/update.integration.test.d.ts +1 -0
- package/dist/commands/update/update.js +131 -0
- package/dist/commands/update/update.options.test.d.ts +1 -0
- package/dist/commands/upgrade/upgrade.cli.test.d.ts +1 -0
- package/dist/commands/upgrade/upgrade.d.ts +7 -0
- package/dist/commands/upgrade/upgrade.integration.test.d.ts +1 -0
- package/dist/commands/upgrade/upgrade.js +47 -0
- package/dist/commands/upgrade/upgrade.options.test.d.ts +1 -0
- package/dist/commands/versions/versions.cli.test.d.ts +1 -0
- package/dist/commands/versions/versions.d.ts +13 -0
- package/dist/commands/versions/versions.integration.test.d.ts +1 -0
- package/dist/commands/versions/versions.js +41 -0
- package/dist/commands/versions/versions.options.test.d.ts +1 -0
- package/dist/create/changelog.d.ts +6 -0
- package/dist/create/changelog.js +3 -3
- package/dist/index.d.ts +31 -0
- package/dist/index.js +35 -0
- package/dist/lex.d.ts +2 -0
- package/dist/lex.js +25 -22
- package/dist/types.d.ts +5 -0
- package/dist/types.js +1 -0
- package/dist/utils/aiService.d.ts +9 -0
- package/dist/utils/aiService.js +299 -0
- package/dist/utils/app.d.ts +41 -0
- package/dist/utils/app.js +53 -3
- package/dist/utils/file.d.ts +3 -0
- package/dist/utils/file.js +18 -3
- package/dist/utils/log.d.ts +1 -0
- package/dist/utils/log.js +2 -1
- package/dist/utils/reactShim.d.ts +2 -0
- package/dist/utils/reactShim.js +3 -3
- package/eslint.config.js +5 -0
- package/index.cjs +20 -0
- package/jest.config.cjs +31 -27
- package/jest.config.lex.d.ts +2 -0
- package/jest.config.lex.js +86 -38
- package/jest.setup.js +5 -0
- package/lex.config.js +50 -0
- package/package.json +73 -53
- package/{.postcssrc.js → postcss.config.js} +21 -9
- package/resolver.cjs +125 -14
- package/tsconfig.json +2 -1
- package/webpack.config.d.ts +2 -0
- package/webpack.config.js +27 -11
- package/dist/commands/build.js +0 -265
- package/dist/commands/bulid.test.js +0 -317
- package/dist/commands/clean.js +0 -31
- package/dist/commands/clean.test.js +0 -63
- package/dist/commands/compile.js +0 -195
- package/dist/commands/compile.test.js +0 -93
- package/dist/commands/config.js +0 -43
- package/dist/commands/copy.js +0 -38
- package/dist/commands/create.js +0 -120
- package/dist/commands/dev.js +0 -70
- package/dist/commands/init.js +0 -93
- package/dist/commands/link.js +0 -15
- package/dist/commands/lint.js +0 -179
- package/dist/commands/migrate.js +0 -37
- package/dist/commands/publish.js +0 -104
- package/dist/commands/test.js +0 -190
- package/dist/commands/update.js +0 -64
- package/dist/commands/upgrade.js +0 -47
- package/dist/commands/versions.js +0 -41
- package/dist/commands/versions.test.js +0 -49
- package/dist/lint.js +0 -11
- package/jest.setup.ts +0 -3
package/dist/lex.js
CHANGED
|
@@ -2,52 +2,55 @@
|
|
|
2
2
|
import { Option, program } from "commander";
|
|
3
3
|
import { readFileSync } from "fs";
|
|
4
4
|
import { fileURLToPath } from "url";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
5
|
+
import { aiFunction } from "./commands/ai/ai.js";
|
|
6
|
+
import { build } from "./commands/build/build.js";
|
|
7
|
+
import { clean } from "./commands/clean/clean.js";
|
|
8
|
+
import { compile } from "./commands/compile/compile.js";
|
|
9
|
+
import { config } from "./commands/config/config.js";
|
|
10
|
+
import { create } from "./commands/create/create.js";
|
|
11
|
+
import { dev } from "./commands/dev/dev.js";
|
|
12
|
+
import { init } from "./commands/init/init.js";
|
|
13
|
+
import { linked } from "./commands/link/link.js";
|
|
14
|
+
import { lint } from "./commands/lint/lint.js";
|
|
15
|
+
import { migrate } from "./commands/migrate/migrate.js";
|
|
16
|
+
import { publish } from "./commands/publish/publish.js";
|
|
17
|
+
import { test } from "./commands/test/test.js";
|
|
18
|
+
import { update } from "./commands/update/update.js";
|
|
19
|
+
import { upgrade } from "./commands/upgrade/upgrade.js";
|
|
20
|
+
import { versions } from "./commands/versions/versions.js";
|
|
20
21
|
const packagePath = fileURLToPath(new URL("../package.json", import.meta.url));
|
|
21
22
|
const packageJson = JSON.parse(readFileSync(packagePath, "utf8"));
|
|
22
|
-
program.command("build").option("--analyze", "
|
|
23
|
+
program.command("build").option("--assist", "Enable AI assistance for fixing build errors.", false).option("--analyze", "Enable AI analysis for build optimization suggestions or invoke webpack-bundle-analyzer plugin.", false).addOption(new Option("--bundler <n>", 'Bundler to use ("webpack" or "esbuild"). Default: "webpack".').choices(["webpack", "esbuild"]).default("webpack")).option("--config <path>", "Custom Webpack configuration file path (ie. webpack.config.js).").option("--configName <value...>", "Name of the configuration to use.").option("--defineProcessEnvNodeEnv <value>", "Sets process.env.NODE_ENV to the specified value. (Currently an alias for `--node-env`)").option("--devtool <value>", "A developer tool to enhance debugging (false | eval | [inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map).").option("--disableInterpret", "Disable interpret for loading the config file.", false).option("--entry <value...>", "A module that is loaded upon startup. Only the last one is exported.").option("--env <value>", "Environment passed to the configuration when it is a function.").option("--failOnWarnings", "Stop webpack-cli process with non-zero exit code on warnings from webpack", false).addOption(new Option("--format <value>", 'This sets the output format for the generated JavaScript files. Default: "cjs".').choices(["cjs", "esm"]).default("cjs")).option("--json <value>", "Prints result as JSON or store it in a file.").option("--lexConfig <path>", "Lex configuration file path (lex.config.js).").option("--merge", 'Merge two or more configurations using "webpack-merge".', false).addOption(new Option("--mode <type>", 'Webpack mode ("production" or "development"). Default: "development".').choices(["development", "production"]).default("development")).option("--name <value>", "Name of the configuration. Used when loading multiple configurations.").option("--noDevtool", 'Negative "devtool" option.', false).option("--noStats", 'Negative "stats" option.', false).option("--noTarget", 'Negative "target" option.', false).option("--noWatch", 'Negative "watch" option.', false).option("--noWatchOptionsStdin", 'Negative "watch-options-stdin" option.', false).option("--nodeEnv <value>", "Sets process.env.NODE_ENV to the specified value.").option("--outputPath <value>", "The output directory as **absolute path** (required).").option("--quiet", "No Lex notifications printed in the console.", false).option("--remove", "Removes all files from the output directory before compiling.", false).option("--sourcePath <path>", "Source path").option("--stats <value>", "Stats options object or preset name.").option("--static", "Creates static HTML files when building app.", false).option("--target <value>", "Environment to build for. Environment to build for. An array of environments to build for all of them when possible.").option("--typescript", "Transpile as Typescript.", false).option("--variables <n>", `Environment variables to set in "process.env". (ie. "{NODE_ENV: 'production'}").`).option("--watch", "Watch for changes.", false).option("--watchOptionsStdin", "Stop watching when stdin stream has ended.", false).action((cmd) => build(cmd, process.exit).then(() => {
|
|
23
24
|
}));
|
|
24
25
|
program.command("clean").option("--quiet", "No Lex notifications printed in the console.").option("--snapshots", 'Remove all "__snapshots__" directories.').action((cmd) => clean(cmd, process.exit).then(() => {
|
|
25
26
|
}));
|
|
26
27
|
program.command("config <type>").option("--quiet", "No Lex notifications printed in the console.").option("--json <path>", "Save output to json file.").action((type, cmd) => config(type, cmd, process.exit).then(() => {
|
|
27
28
|
}));
|
|
28
|
-
program.command("compile").option("--config <path>", "Transpiler configuration file path (ie. tsconfig.json).").option("--environment <
|
|
29
|
+
program.command("compile").option("--config <path>", "Transpiler configuration file path (ie. tsconfig.json).").option("--environment <n>", 'Target environment. "node" or "web". Default: "node".').option("--lexConfig <path>", "Custom Lex configuration file path (ie. lex.config.js).").option("--outputPath <path>", "Output path").option("--remove", "Removes all files from the output directory before compiling.").option("--sourcePath <path>", "Source path").option("--typescript", "Transpile as Typescript.").option("--quiet", "No Lex notifications printed in the console.").option("--watch", "Watches for changes and compiles.").action((cmd) => compile(cmd, process.exit).then(() => {
|
|
29
30
|
}));
|
|
30
|
-
program.command("create <type>").option("--outputFile <path>", "Output filename.").option("--outputName <
|
|
31
|
+
program.command("create <type>").option("--outputFile <path>", "Output filename.").option("--outputName <n>", "Output name.").option("--quiet", "No Lex notifications printed in the console.").option("--typescript", "Create Typescript version.").action((type, cmd) => create(type, cmd, process.exit).then(() => {
|
|
31
32
|
}));
|
|
32
|
-
program.command("dev").option("--bundleAnalyzer", "Run bundle analyzer.").option("--config <path>", "Custom Webpack configuration file path (ie. webpack.config.js).").option("--lexConfig <path>", "Custom Lex configuration file path (ie. lex.config.js).").option("--open", "Automatically open dev server in a new browser window.").option("--outputPath <path>", "Output path").option("--quiet", "No Lex notifications printed in the console.").option("--remove", "Removes all files from the output directory before compiling.").option("--sourcePath <path>", "Source path").option("--typescript", "Transpile as Typescript.").option("--variables <
|
|
33
|
+
program.command("dev").option("--bundleAnalyzer", "Run bundle analyzer.").option("--config <path>", "Custom Webpack configuration file path (ie. webpack.config.js).").option("--lexConfig <path>", "Custom Lex configuration file path (ie. lex.config.js).").option("--open", "Automatically open dev server in a new browser window.").option("--outputPath <path>", "Output path").option("--quiet", "No Lex notifications printed in the console.").option("--remove", "Removes all files from the output directory before compiling.").option("--sourcePath <path>", "Source path").option("--typescript", "Transpile as Typescript.").option("--variables <n>", `Environment variables to set in "process.env". (ie. "{NODE_ENV: 'development'}").`).option("--watch", "Watch for changes.").action((cmd) => dev(cmd, process.exit).then(() => {
|
|
33
34
|
}));
|
|
34
35
|
program.command("init <appName> [packageName]").option("--install", "Install dependencies.").addOption(new Option("--package-manager <manager>", "Which package manager to use. Default: npm").choices(["npm", "yarn"]).default("npm")).option("--quiet", "No Lex notifications printed in the console.").option("--typescript", "Use a Typescript based app.").action((appName, packageName, cmd) => init(appName, packageName, cmd, process.exit).then(() => {
|
|
35
36
|
}));
|
|
36
37
|
program.command("linked").option("--quiet", "No Lex notifications printed in the console.").action((cmd) => linked(cmd, process.exit).then(() => {
|
|
37
38
|
}));
|
|
38
|
-
program.command("lint").option("--cache", "Only check changed files. Default: false.", false).option("--cacheLocation <path>", "Path to the cache file or directory.").option("--color", "Force enabling of color.", false).option("--config <path>", "Use this configuration, overriding .eslintrc.* config options if present.").option("--debug", "Output debugging information.", false).option("--envInfo", "Output execution environment information. Default: false.", false).option("--env <
|
|
39
|
+
program.command("lint").option("--cache", "Only check changed files. Default: false.", false).option("--cacheLocation <path>", "Path to the cache file or directory.").option("--color", "Force enabling of color.", false).option("--config <path>", "Use this configuration, overriding .eslintrc.* config options if present. If not specified and no local config exists, Lex will use its default config.").option("--debug", "Output debugging information.", false).option("--envInfo", "Output execution environment information. Default: false.", false).option("--env <n>", "Specify environments.").option("--fix", "Apply AI fixes after built-in ESLint fixes (same as --fix).", false).option("--fixDryRun", "Automatically fix problems without saving the changes to the file system.", false).option("--fixType <type>", "Specify the types of fixes to apply (problem, suggestion, layout).").option("--format <n>", "Use a specific output format. Default: stylish.").option("--global <variables>", "Define global variables.").option("--ignorePath <path>", "Specify path of ignore file.").option("--ignorePattern <pattern>", "Pattern of files to ignore (in addition to those in .eslintignore).").option("--init", "Run config initialization wizard. Default: false.", false).option("--maxWarnings <num>", "Number of warnings to trigger nonzero exit code. Default: -1.").option("--noColor", "Force disabling of color.", false).option("--noEslintrc", "Disable use of configuration from .eslintrc.*.", false).option("--noIgnore", "Disable use of ignore files and patterns.", false).option("--noInlineConfig", "Prevent comments from changing config or rules.", false).option("--outputFile <path>", "Specify file to write report to.").option("--parser <n>", "Specify the parser to be used.").option("--parserOptions <options>", "Specify parser options.").option("--plugin <plugins>", "Specify plugins.").option("--printConfig <path>", "Print the configuration for the given file.").option("--quiet", "No Lex notifications printed in the console.", false).option("--reportUnusedDisableDirectives", "Adds reported errors for unused eslint-disable directives.", false).option("--resolvePluginsRelativeTo <path>", "A folder where plugins should be resolved from.").option("--rule <path>", "Specify rules.").option("--rulesdir <path>", "Use additional rules from this directory.").option("--stdin", "Lint code provided on <STDIN> - Default: false.", false).option("--stdinFilename <n>", "Specify filename to process STDIN as.").action((cmd) => lint(cmd, process.exit).then(() => {
|
|
39
40
|
}));
|
|
40
41
|
program.command("migrate").option("-q, --quiet", "No Lex notifications printed in the console.").action((cmd) => migrate(cmd, process.exit).then(() => {
|
|
41
42
|
}));
|
|
42
43
|
program.command("publish").addOption(new Option("--bump <type>", 'Increments the version. Types include: major, minor, patch, beta, alpha, rc. Default: "patch".').choices(["major", "minor", "patch", "beta", "alpha", "rc"]).default("patch")).option("--newVersion <versionNumber>", "Publish as a specific version.").option("--otp <code>", "Provide a two-factor code.").addOption(new Option("--package-manager <manager>", "Which package manager to use. Default: npm").choices(["npm", "yarn"]).default("npm")).option("--private", "Publishes the module as restricted.").option("--quiet", "No Lex notifications printed in the console.").option("--tag <tag>", "Registers the published package with the given tag.").action((cmd) => publish(cmd, process.exit).then(() => {
|
|
43
44
|
}));
|
|
44
|
-
program.command("test").option("--bail", "Exit the test suite immediately upon the first failing test suite.").option("--changedFilesWithAncestor", "Runs tests related to the current changes and the changes made in the last commit.").option("--changedSince", "Runs tests related the changes since the provided branch.").option("--ci", "When this option is provided, Jest will assume it is running in a CI environment.").option("--clearCache", "Clear Jest cache.").option("--collectCoverageFrom <glob>", "A glob pattern relative to matching the files that coverage info needs to be collected from.").option("--colors", "Forces test results output highlighting even if stdout is not a TTY.").option("--config <path>", "Custom Jest configuration file path (ie. jest.config.js).").option("--debug", "Print debugging info about your Jest config.").option("--detectOpenHandles", "Attempt to collect and print open handles preventing Jest from exiting cleanly").option("--environment <
|
|
45
|
+
program.command("test").option("--analyze", "Use AI to analyze test coverage and suggest improvements.", false).option("--debugTests", "Use AI to debug test failures and suggest fixes.", false).option("--generate", "Use AI to generate test cases for untested code.", false).option("--bail", "Exit the test suite immediately upon the first failing test suite.").option("--changedFilesWithAncestor", "Runs tests related to the current changes and the changes made in the last commit.").option("--changedSince", "Runs tests related the changes since the provided branch.").option("--ci", "When this option is provided, Jest will assume it is running in a CI environment.").option("--clearCache", "Clear Jest cache.").option("--collectCoverageFrom <glob>", "A glob pattern relative to matching the files that coverage info needs to be collected from.").option("--colors", "Forces test results output highlighting even if stdout is not a TTY.").option("--config <path>", "Custom Jest configuration file path (ie. jest.config.js).").option("--debug", "Print debugging info about your Jest config.").option("--detectOpenHandles", "Attempt to collect and print open handles preventing Jest from exiting cleanly").option("--environment <n>", 'Target environment. "node" or "web". Default: "node".').option("--env", "The test environment used for all tests. This can point to any file or node module. Examples: jsdom, node or path/to/my-environment.js.").option("--errorOnDeprecated", "Make calling deprecated APIs throw helpful error messages.").option("--expand", "Use this flag to show full diffs and errors instead of a patch.").option("--forceExit", "Force Jest to exit after all tests have completed running.").option("--json", "Prints the test results in JSON.").option("--lastCommit", "Run all tests affected by file changes in the last commit made.").option("--lexConfig <path>", "Custom Lex configuration file path (ie. lex.config.js).").option("--listTests", "Lists all tests as JSON that Jest will run given the arguments, and exits.").option("--logHeapUsage", "Logs the heap usage after every test.").option("--maxWorkers <num>", "Specifies the maximum number of workers the worker-pool will spawn for running tests. ").option("--noStackTrace", "Disables stack trace in test results output.").option("--notify", "Activates notifications for test results.").option("--onlyChanged", "un based on which files have changed in the current repository. ").option("--outputFile <filename>", "Write test results to a file when the --json option is also specified.").option("--passWithNoTests", "Allows the test suite to pass when no files are found.").option("--quiet", "No Lex notifications printed in the console.").option("--runInBand", "Run all tests serially in the current process, rather than creating a worker pool of child processes that run tests.").option("--setup <path>", "Jest setup file path.").option("--showConfig", "Print your Jest config and then exits.").option("--silent", "Prevent tests from printing messages through the console.").option("--testLocationInResults", "Adds a location field to test results.").option("--testNamePattern <regex>", "Run only tests with a name that matches the regex. ").option("--testPathPattern <regex>", "A regexp pattern string that is matched against all tests paths before executing the test.").option("--typescript", "Transpile as Typescript.").option("--update", 'Update snapshots. Runs "jest --updateSnapshots"').option("--useStderr", "Divert all output to stderr.").option("--verbose", "Display individual test results with the test suite hierarchy.").option("--watch <path>", "Watch files for changes and rerun tests related to changed files.").option("--watchAll", "Watch files for changes and rerun all tests when something changes.").action((options, cmd) => test(options, cmd.args, process.exit).then(() => {
|
|
45
46
|
}));
|
|
46
47
|
program.command("update").option("--interactive", "Choose which packages to update.").addOption(new Option("--package-manager <manager>", "Which package manager to use. Default: npm").choices(["npm", "yarn"]).default("npm")).option("--quiet", "No Lex notifications printed in the console.").option("--registry", "Add a custom registry url.").action((cmd) => update(cmd, process.exit).then(() => {
|
|
47
48
|
}));
|
|
48
49
|
program.command("upgrade").addOption(new Option("--package-manager <manager>", "Which package manager to use. Default: npm").choices(["npm", "yarn"]).default("npm")).option("--quiet", "No Lex notifications printed in the console.").action((cmd) => upgrade(cmd, process.exit).then(() => {
|
|
49
50
|
}));
|
|
51
|
+
program.command("ai").option("--context", "Include project context in the AI prompt.", true).option("--file <path>", "Specific file to operate on.").option("--lexConfig <path>", "Custom Lex configuration file path (ie. lex.config.js).").option("--model <model>", "AI model to use. Default: gpt-4o.").option("--prompt <text>", "The prompt to send to the AI.").option("--quiet", "No Lex notifications printed in the console.").addOption(new Option("--task <task>", "Type of AI task to perform.").choices(["generate", "explain", "test", "optimize", "help"]).default("help")).action((cmd) => aiFunction(cmd).then(() => {
|
|
52
|
+
}));
|
|
50
53
|
program.command("versions").option("--json", "Print the version as a JSON object.").action((cmd) => versions(cmd, process.exit).then(() => {
|
|
51
54
|
}));
|
|
52
55
|
program.version(packageJson.version).parse(process.argv);
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2xleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7T3B0aW9uLCBwcm9ncmFtfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSAndXJsJztcblxuaW1wb3J0IHtidWlsZH0gZnJvbSAnLi9jb21tYW5kcy9idWlsZC5qcyc7XG5pbXBvcnQge2NsZWFufSBmcm9tICcuL2NvbW1hbmRzL2NsZWFuLmpzJztcbmltcG9ydCB7Y29tcGlsZX0gZnJvbSAnLi9jb21tYW5kcy9jb21waWxlLmpzJztcbmltcG9ydCB7Y29uZmlnfSBmcm9tICcuL2NvbW1hbmRzL2NvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZX0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUuanMnO1xuaW1wb3J0IHtkZXZ9IGZyb20gJy4vY29tbWFuZHMvZGV2LmpzJztcbmltcG9ydCB7aW5pdH0gZnJvbSAnLi9jb21tYW5kcy9pbml0LmpzJztcbmltcG9ydCB7bGlua2VkfSBmcm9tICcuL2NvbW1hbmRzL2xpbmsuanMnO1xuaW1wb3J0IHtsaW50fSBmcm9tICcuL2NvbW1hbmRzL2xpbnQuanMnO1xuaW1wb3J0IHttaWdyYXRlfSBmcm9tICcuL2NvbW1hbmRzL21pZ3JhdGUuanMnO1xuaW1wb3J0IHtwdWJsaXNofSBmcm9tICcuL2NvbW1hbmRzL3B1Ymxpc2guanMnO1xuaW1wb3J0IHt0ZXN0fSBmcm9tICcuL2NvbW1hbmRzL3Rlc3QuanMnO1xuaW1wb3J0IHt1cGRhdGV9IGZyb20gJy4vY29tbWFuZHMvdXBkYXRlLmpzJztcbmltcG9ydCB7dXBncmFkZX0gZnJvbSAnLi9jb21tYW5kcy91cGdyYWRlLmpzJztcbmltcG9ydCB7dmVyc2lvbnN9IGZyb20gJy4vY29tbWFuZHMvdmVyc2lvbnMuanMnO1xuXG5jb25zdCBwYWNrYWdlUGF0aCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxucHJvZ3JhbS5jb21tYW5kKCdidWlsZCcpXG4gIC5vcHRpb24oJy0tYW5hbHl6ZScsICdJdCBpbnZva2VzIHdlYnBhY2stYnVuZGxlLWFuYWx5emVyIHBsdWdpbiB0byBnZXQgYnVuZGxlIGluZm9ybWF0aW9uLicsIGZhbHNlKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYnVuZGxlciA8bmFtZT4nLCAnQnVuZGxlciB0byB1c2UgKFwid2VicGFja1wiIG9yIFwiZXNidWlsZFwiKS4gRGVmYXVsdDogXCJ3ZWJwYWNrXCIuJykuY2hvaWNlcyhbJ3dlYnBhY2snLCAnZXNidWlsZCddKS5kZWZhdWx0KCd3ZWJwYWNrJykpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gV2VicGFjayBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHdlYnBhY2suY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLWNvbmZpZ05hbWUgPHZhbHVlLi4uPicsICdOYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIHRvIHVzZS4nKVxuICAub3B0aW9uKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52IDx2YWx1ZT4nLCAnU2V0cyBwcm9jZXNzLmVudi5OT0RFX0VOViB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiAoQ3VycmVudGx5IGFuIGFsaWFzIGZvciBgLS1ub2RlLWVudmApJylcbiAgLm9wdGlvbignLS1kZXZ0b29sIDx2YWx1ZT4nLCAnQSBkZXZlbG9wZXIgdG9vbCB0byBlbmhhbmNlIGRlYnVnZ2luZyAoZmFsc2UgfCBldmFsIHwgW2lubGluZS18aGlkZGVuLXxldmFsLV1bbm9zb3VyY2VzLV1bY2hlYXAtW21vZHVsZS1dXXNvdXJjZS1tYXApLicpXG4gIC5vcHRpb24oJy0tZGlzYWJsZUludGVycHJldCcsICdEaXNhYmxlIGludGVycHJldCBmb3IgbG9hZGluZyB0aGUgY29uZmlnIGZpbGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZW50cnkgPHZhbHVlLi4uPicsICdBIG1vZHVsZSB0aGF0IGlzIGxvYWRlZCB1cG9uIHN0YXJ0dXAuIE9ubHkgdGhlIGxhc3Qgb25lIGlzIGV4cG9ydGVkLicpXG4gIC5vcHRpb24oJy0tZW52IDx2YWx1ZT4nLCAnRW52aXJvbm1lbnQgcGFzc2VkIHRvIHRoZSBjb25maWd1cmF0aW9uIHdoZW4gaXQgaXMgYSBmdW5jdGlvbi4nKVxuICAub3B0aW9uKCctLWZhaWxPbldhcm5pbmdzJywgJ1N0b3Agd2VicGFjay1jbGkgcHJvY2VzcyB3aXRoIG5vbi16ZXJvIGV4aXQgY29kZSBvbiB3YXJuaW5ncyBmcm9tIHdlYnBhY2snLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImNqc1wiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2NqcycpKVxuICAub3B0aW9uKCctLWpzb24gPHZhbHVlPicsICdQcmludHMgcmVzdWx0IGFzIEpTT04gb3Igc3RvcmUgaXQgaW4gYSBmaWxlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tbWVyZ2UnLCAnTWVyZ2UgdHdvIG9yIG1vcmUgY29uZmlndXJhdGlvbnMgdXNpbmcgXCJ3ZWJwYWNrLW1lcmdlXCIuJywgZmFsc2UpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb2RlIDx0eXBlPicsICdXZWJwYWNrIG1vZGUgKFwicHJvZHVjdGlvblwiIG9yIFwiZGV2ZWxvcG1lbnRcIikuIERlZmF1bHQ6IFwiZGV2ZWxvcG1lbnRcIi4nKS5jaG9pY2VzKFsnZGV2ZWxvcG1lbnQnLCAncHJvZHVjdGlvbiddKS5kZWZhdWx0KCdkZXZlbG9wbWVudCcpKVxuICAub3B0aW9uKCctLW5hbWUgPHZhbHVlPicsICdOYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uLiBVc2VkIHdoZW4gbG9hZGluZyBtdWx0aXBsZSBjb25maWd1cmF0aW9ucy4nKVxuICAub3B0aW9uKCctLW5vRGV2dG9vbCcsICdOZWdhdGl2ZSBcImRldnRvb2xcIiBvcHRpb24uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9TdGF0cycsICdOZWdhdGl2ZSBcInN0YXRzXCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vVGFyZ2V0JywgJ05lZ2F0aXZlIFwidGFyZ2V0XCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vV2F0Y2gnLCAnTmVnYXRpdmUgXCJ3YXRjaFwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub1dhdGNoT3B0aW9uc1N0ZGluJywgJ05lZ2F0aXZlIFwid2F0Y2gtb3B0aW9ucy1zdGRpblwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub2RlRW52IDx2YWx1ZT4nLCAnU2V0cyBwcm9jZXNzLmVudi5OT0RFX0VOViB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLicpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8dmFsdWU+JywgJ1RoZSBvdXRwdXQgZGlyZWN0b3J5IGFzICoqYWJzb2x1dGUgcGF0aCoqIChyZXF1aXJlZCkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXN0YXRzIDx2YWx1ZT4nLCAnU3RhdHMgb3B0aW9ucyBvYmplY3Qgb3IgcHJlc2V0IG5hbWUuJylcbiAgLm9wdGlvbignLS1zdGF0aWMnLCAnQ3JlYXRlcyBzdGF0aWMgSFRNTCBmaWxlcyB3aGVuIGJ1aWxkaW5nIGFwcC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10YXJnZXQgPHZhbHVlPicsICdFbnZpcm9ubWVudCB0byBidWlsZCBmb3IuIEVudmlyb25tZW50IHRvIGJ1aWxkIGZvci4gQW4gYXJyYXkgb2YgZW52aXJvbm1lbnRzIHRvIGJ1aWxkIGZvciBhbGwgb2YgdGhlbSB3aGVuIHBvc3NpYmxlLicpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPG5hbWU+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gXCJwcm9jZXNzLmVudlwiLiAoaWUuIFwie05PREVfRU5WOiBcXCdwcm9kdWN0aW9uXFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoIGZvciBjaGFuZ2VzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXdhdGNoT3B0aW9uc1N0ZGluJywgJ1N0b3Agd2F0Y2hpbmcgd2hlbiBzdGRpbiBzdHJlYW0gaGFzIGVuZGVkLicsIGZhbHNlKVxuICAuYWN0aW9uKChjbWQpID0+IGJ1aWxkKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY2xlYW4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1zbmFwc2hvdHMnLCAnUmVtb3ZlIGFsbCBcIl9fc25hcHNob3RzX19cIiBkaXJlY3Rvcmllcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGNsZWFuKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY29uZmlnIDx0eXBlPicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLWpzb24gPHBhdGg+JywgJ1NhdmUgb3V0cHV0IHRvIGpzb24gZmlsZS4nKVxuICAuYWN0aW9uKCh0eXBlLCBjbWQpID0+IGNvbmZpZyh0eXBlLCBjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NvbXBpbGUnKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnVHJhbnNwaWxlciBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHRzY29uZmlnLmpzb24pLicpXG4gIC5vcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RhcmdldCBlbnZpcm9ubWVudC4gXCJub2RlXCIgb3IgXCJ3ZWJcIi4gRGVmYXVsdDogXCJub2RlXCIuJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW91dHB1dFBhdGggPHBhdGg+JywgJ091dHB1dCBwYXRoJylcbiAgLm9wdGlvbignLS1yZW1vdmUnLCAnUmVtb3ZlcyBhbGwgZmlsZXMgZnJvbSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgY29tcGlsaW5nLicpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0td2F0Y2gnLCAnV2F0Y2hlcyBmb3IgY2hhbmdlcyBhbmQgY29tcGlsZXMuJylcbiAgLmFjdGlvbigoY21kKSA9PiBjb21waWxlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY3JlYXRlIDx0eXBlPicpXG4gIC5vcHRpb24oJy0tb3V0cHV0RmlsZSA8cGF0aD4nLCAnT3V0cHV0IGZpbGVuYW1lLicpXG4gIC5vcHRpb24oJy0tb3V0cHV0TmFtZSA8bmFtZT4nLCAnT3V0cHV0IG5hbWUuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdDcmVhdGUgVHlwZXNjcmlwdCB2ZXJzaW9uLicpXG4gIC5hY3Rpb24oKHR5cGUsIGNtZCkgPT4gY3JlYXRlKHR5cGUsIGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnZGV2JylcbiAgLm9wdGlvbignLS1idW5kbGVBbmFseXplcicsICdSdW4gYnVuZGxlIGFuYWx5emVyLicpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gV2VicGFjayBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHdlYnBhY2suY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3BlbicsICdBdXRvbWF0aWNhbGx5IG9wZW4gZGV2IHNlcnZlciBpbiBhIG5ldyBicm93c2VyIHdpbmRvdy4nKVxuICAub3B0aW9uKCctLW91dHB1dFBhdGggPHBhdGg+JywgJ091dHB1dCBwYXRoJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIGNvbXBpbGluZy4nKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1RyYW5zcGlsZSBhcyBUeXBlc2NyaXB0LicpXG4gIC5vcHRpb24oJy0tdmFyaWFibGVzIDxuYW1lPicsICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIFwicHJvY2Vzcy5lbnZcIi4gKGllLiBcIntOT0RFX0VOVjogXFwnZGV2ZWxvcG1lbnRcXCd9XCIpLicpXG4gIC5vcHRpb24oJy0td2F0Y2gnLCAnV2F0Y2ggZm9yIGNoYW5nZXMuJylcbiAgLmFjdGlvbigoY21kKSA9PiBkZXYoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdpbml0IDxhcHBOYW1lPiBbcGFja2FnZU5hbWVdJylcbiAgLm9wdGlvbignLS1pbnN0YWxsJywgJ0luc3RhbGwgZGVwZW5kZW5jaWVzLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYWNrYWdlLW1hbmFnZXIgPG1hbmFnZXI+JywgJ1doaWNoIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIERlZmF1bHQ6IG5wbScpLmNob2ljZXMoWyducG0nLCAneWFybiddKS5kZWZhdWx0KCducG0nKSlcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdVc2UgYSBUeXBlc2NyaXB0IGJhc2VkIGFwcC4nKVxuICAuYWN0aW9uKChhcHBOYW1lLCBwYWNrYWdlTmFtZSwgY21kKSA9PiBpbml0KGFwcE5hbWUsIHBhY2thZ2VOYW1lLCBjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2xpbmtlZCcpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAuYWN0aW9uKChjbWQpID0+IGxpbmtlZChjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2xpbnQnKVxuICAub3B0aW9uKCctLWNhY2hlJywgJ09ubHkgY2hlY2sgY2hhbmdlZCBmaWxlcy4gRGVmYXVsdDogZmFsc2UuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tY2FjaGVMb2NhdGlvbiA8cGF0aD4nLCAnUGF0aCB0byB0aGUgY2FjaGUgZmlsZSBvciBkaXJlY3RvcnkuJylcbiAgLm9wdGlvbignLS1jb2xvcicsICdGb3JjZSBlbmFibGluZyBvZiBjb2xvci4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ1VzZSB0aGlzIGNvbmZpZ3VyYXRpb24sIG92ZXJyaWRpbmcgLmVzbGludHJjLiogY29uZmlnIG9wdGlvbnMgaWYgcHJlc2VudC4nKVxuICAub3B0aW9uKCctLWRlYnVnJywgJ091dHB1dCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZW52SW5mbycsICdPdXRwdXQgZXhlY3V0aW9uIGVudmlyb25tZW50IGluZm9ybWF0aW9uLiBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1lbnYgPG5hbWU+JywgJ1NwZWNpZnkgZW52aXJvbm1lbnRzLicpXG4gIC5vcHRpb24oJy0tZXh0IDx0eXBlPicsICdTcGVjaWZ5IEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb25zLiBEZWZhdWx0OiAuanMuJylcbiAgLm9wdGlvbignLS1maXgnLCAnQXV0b21hdGljYWxseSBmaXggcHJvYmxlbXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZml4RHJ5UnVuJywgJ0F1dG9tYXRpY2FsbHkgZml4IHByb2JsZW1zIHdpdGhvdXQgc2F2aW5nIHRoZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1maXhUeXBlIDx0eXBlPicsICdTcGVjaWZ5IHRoZSB0eXBlcyBvZiBmaXhlcyB0byBhcHBseSAocHJvYmxlbSwgc3VnZ2VzdGlvbiwgbGF5b3V0KS4nKVxuICAub3B0aW9uKCctLWZvcm1hdCA8bmFtZT4nLCAnVXNlIGEgc3BlY2lmaWMgb3V0cHV0IGZvcm1hdC4gRGVmYXVsdDogc3R5bGlzaC4nKVxuICAub3B0aW9uKCctLWdsb2JhbCA8dmFyaWFibGVzPicsICdEZWZpbmUgZ2xvYmFsIHZhcmlhYmxlcy4nKVxuICAub3B0aW9uKCctLWlnbm9yZVBhdGggPHBhdGg+JywgJ1NwZWNpZnkgcGF0aCBvZiBpZ25vcmUgZmlsZS4nKVxuICAub3B0aW9uKCctLWlnbm9yZVBhdHRlcm4gPHBhdHRlcm4+JywgJ1BhdHRlcm4gb2YgZmlsZXMgdG8gaWdub3JlIChpbiBhZGRpdGlvbiB0byB0aG9zZSBpbiAuZXNsaW50aWdub3JlKS4nKVxuICAub3B0aW9uKCctLWluaXQnLCAnUnVuIGNvbmZpZyBpbml0aWFsaXphdGlvbiB3aXphcmQuIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW1heFdhcm5pbmdzIDxudW0+JywgJ051bWJlciBvZiB3YXJuaW5ncyB0byB0cmlnZ2VyIG5vbnplcm8gZXhpdCBjb2RlLiBEZWZhdWx0OiAtMS4nKVxuICAub3B0aW9uKCctLW5vQ29sb3InLCAnRm9yY2UgZGlzYWJsaW5nIG9mIGNvbG9yLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vRXNsaW50cmMnLCAnRGlzYWJsZSB1c2Ugb2YgY29uZmlndXJhdGlvbiBmcm9tIC5lc2xpbnRyYy4qLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vSWdub3JlJywgJ0Rpc2FibGUgdXNlIG9mIGlnbm9yZSBmaWxlcyBhbmQgcGF0dGVybnMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9JbmxpbmVDb25maWcnLCAnUHJldmVudCBjb21tZW50cyBmcm9tIGNoYW5naW5nIGNvbmZpZyBvciBydWxlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxwYXRoPicsICdTcGVjaWZ5IGZpbGUgdG8gd3JpdGUgcmVwb3J0IHRvLicpXG4gIC5vcHRpb24oJy0tcGFyc2VyIDxuYW1lPicsICdTcGVjaWZ5IHRoZSBwYXJzZXIgdG8gYmUgdXNlZC4nKVxuICAub3B0aW9uKCctLXBhcnNlck9wdGlvbnMgPG9wdGlvbnM+JywgJ1NwZWNpZnkgcGFyc2VyIG9wdGlvbnMuJylcbiAgLm9wdGlvbignLS1wbHVnaW4gPHBsdWdpbnM+JywgJ1NwZWNpZnkgcGx1Z2lucy4nKVxuICAub3B0aW9uKCctLXByaW50Q29uZmlnIDxwYXRoPicsICdQcmludCB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdpdmVuIGZpbGUuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzJywgJ0FkZHMgcmVwb3J0ZWQgZXJyb3JzIGZvciB1bnVzZWQgZXNsaW50LWRpc2FibGUgZGlyZWN0aXZlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZXNvbHZlUGx1Z2luc1JlbGF0aXZlVG8gPHBhdGg+JywgJ0EgZm9sZGVyIHdoZXJlIHBsdWdpbnMgc2hvdWxkIGJlIHJlc29sdmVkIGZyb20uJylcbiAgLm9wdGlvbignLS1ydWxlIDxwYXRoPicsICdTcGVjaWZ5IHJ1bGVzLicpXG4gIC5vcHRpb24oJy0tcnVsZXNkaXIgPHBhdGg+JywgJ1VzZSBhZGRpdGlvbmFsIHJ1bGVzIGZyb20gdGhpcyBkaXJlY3RvcnkuJylcbiAgLm9wdGlvbignLS1zdGRpbicsICdMaW50IGNvZGUgcHJvdmlkZWQgb24gPFNURElOPiAtIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXN0ZGluRmlsZW5hbWUgPG5hbWU+JywgJ1NwZWNpZnkgZmlsZW5hbWUgdG8gcHJvY2VzcyBTVERJTiBhcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGxpbnQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdtaWdyYXRlJylcbiAgLm9wdGlvbignLXEsIC0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAuYWN0aW9uKChjbWQpID0+IG1pZ3JhdGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdwdWJsaXNoJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWJ1bXAgPHR5cGU+JywgJ0luY3JlbWVudHMgdGhlIHZlcnNpb24uIFR5cGVzIGluY2x1ZGU6IG1ham9yLCBtaW5vciwgcGF0Y2gsIGJldGEsIGFscGhhLCByYy4gRGVmYXVsdDogXCJwYXRjaFwiLicpLmNob2ljZXMoWydtYWpvcicsICdtaW5vcicsICdwYXRjaCcsICdiZXRhJywgJ2FscGhhJywgJ3JjJ10pLmRlZmF1bHQoJ3BhdGNoJykpXG4gIC5vcHRpb24oJy0tbmV3VmVyc2lvbiA8dmVyc2lvbk51bWJlcj4nLCAnUHVibGlzaCBhcyBhIHNwZWNpZmljIHZlcnNpb24uJylcbiAgLm9wdGlvbignLS1vdHAgPGNvZGU+JywgJ1Byb3ZpZGUgYSB0d28tZmFjdG9yIGNvZGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXByaXZhdGUnLCAnUHVibGlzaGVzIHRoZSBtb2R1bGUgYXMgcmVzdHJpY3RlZC4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS10YWcgPHRhZz4nLCAnUmVnaXN0ZXJzIHRoZSBwdWJsaXNoZWQgcGFja2FnZSB3aXRoIHRoZSBnaXZlbiB0YWcuJylcbiAgLmFjdGlvbigoY21kKSA9PiBwdWJsaXNoKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndGVzdCcpXG4gIC5vcHRpb24oJy0tYmFpbCcsICdFeGl0IHRoZSB0ZXN0IHN1aXRlIGltbWVkaWF0ZWx5IHVwb24gdGhlIGZpcnN0IGZhaWxpbmcgdGVzdCBzdWl0ZS4nKVxuICAub3B0aW9uKCctLWNoYW5nZWRGaWxlc1dpdGhBbmNlc3RvcicsICdSdW5zIHRlc3RzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgY2hhbmdlcyBhbmQgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgbGFzdCBjb21taXQuJylcbiAgLm9wdGlvbignLS1jaGFuZ2VkU2luY2UnLCAnUnVucyB0ZXN0cyByZWxhdGVkIHRoZSBjaGFuZ2VzIHNpbmNlIHRoZSBwcm92aWRlZCBicmFuY2guJylcbiAgLm9wdGlvbignLS1jaScsICdXaGVuIHRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkLCBKZXN0IHdpbGwgYXNzdW1lIGl0IGlzIHJ1bm5pbmcgaW4gYSBDSSBlbnZpcm9ubWVudC4nKVxuICAub3B0aW9uKCctLWNsZWFyQ2FjaGUnLCAnQ2xlYXIgSmVzdCBjYWNoZS4nKVxuICAub3B0aW9uKCctLWNvbGxlY3RDb3ZlcmFnZUZyb20gPGdsb2I+JywgJ0EgZ2xvYiBwYXR0ZXJuIHJlbGF0aXZlIHRvIG1hdGNoaW5nIHRoZSBmaWxlcyB0aGF0IGNvdmVyYWdlIGluZm8gbmVlZHMgdG8gYmUgY29sbGVjdGVkIGZyb20uJylcbiAgLm9wdGlvbignLS1jb2xvcnMnLCAnRm9yY2VzIHRlc3QgcmVzdWx0cyBvdXRwdXQgaGlnaGxpZ2h0aW5nIGV2ZW4gaWYgc3Rkb3V0IGlzIG5vdCBhIFRUWS4nKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIEplc3QgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBqZXN0LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdQcmludCBkZWJ1Z2dpbmcgaW5mbyBhYm91dCB5b3VyIEplc3QgY29uZmlnLicpXG4gIC5vcHRpb24oJy0tZGV0ZWN0T3BlbkhhbmRsZXMnLCAnQXR0ZW1wdCB0byBjb2xsZWN0IGFuZCBwcmludCBvcGVuIGhhbmRsZXMgcHJldmVudGluZyBKZXN0IGZyb20gZXhpdGluZyBjbGVhbmx5JylcbiAgLm9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGFyZ2V0IGVudmlyb25tZW50LiBcIm5vZGVcIiBvciBcIndlYlwiLiBEZWZhdWx0OiBcIm5vZGVcIi4nKVxuICAub3B0aW9uKCctLWVudicsICdUaGUgdGVzdCBlbnZpcm9ubWVudCB1c2VkIGZvciBhbGwgdGVzdHMuIFRoaXMgY2FuIHBvaW50IHRvIGFueSBmaWxlIG9yIG5vZGUgbW9kdWxlLiBFeGFtcGxlczoganNkb20sIG5vZGUgb3IgcGF0aC90by9teS1lbnZpcm9ubWVudC5qcy4nKVxuICAub3B0aW9uKCctLWVycm9yT25EZXByZWNhdGVkJywgJ01ha2UgY2FsbGluZyBkZXByZWNhdGVkIEFQSXMgdGhyb3cgaGVscGZ1bCBlcnJvciBtZXNzYWdlcy4nKVxuICAub3B0aW9uKCctLWV4cGFuZCcsICdVc2UgdGhpcyBmbGFnIHRvIHNob3cgZnVsbCBkaWZmcyBhbmQgZXJyb3JzIGluc3RlYWQgb2YgYSBwYXRjaC4nKVxuICAub3B0aW9uKCctLWZvcmNlRXhpdCcsICdGb3JjZSBKZXN0IHRvIGV4aXQgYWZ0ZXIgYWxsIHRlc3RzIGhhdmUgY29tcGxldGVkIHJ1bm5pbmcuJylcbiAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50cyB0aGUgdGVzdCByZXN1bHRzIGluIEpTT04uJylcbiAgLm9wdGlvbignLS1sYXN0Q29tbWl0JywgJ1J1biBhbGwgdGVzdHMgYWZmZWN0ZWQgYnkgZmlsZSBjaGFuZ2VzIGluIHRoZSBsYXN0IGNvbW1pdCBtYWRlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1saXN0VGVzdHMnLCAnTGlzdHMgYWxsIHRlc3RzIGFzIEpTT04gdGhhdCBKZXN0IHdpbGwgcnVuIGdpdmVuIHRoZSBhcmd1bWVudHMsIGFuZCBleGl0cy4nKVxuICAub3B0aW9uKCctLWxvZ0hlYXBVc2FnZScsICdMb2dzIHRoZSBoZWFwIHVzYWdlIGFmdGVyIGV2ZXJ5IHRlc3QuJylcbiAgLm9wdGlvbignLS1tYXhXb3JrZXJzIDxudW0+JywgJ1NwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygd29ya2VycyB0aGUgd29ya2VyLXBvb2wgd2lsbCBzcGF3biBmb3IgcnVubmluZyB0ZXN0cy4gJylcbiAgLm9wdGlvbignLS1ub1N0YWNrVHJhY2UnLCAnRGlzYWJsZXMgc3RhY2sgdHJhY2UgaW4gdGVzdCByZXN1bHRzIG91dHB1dC4nKVxuICAub3B0aW9uKCctLW5vdGlmeScsICdBY3RpdmF0ZXMgbm90aWZpY2F0aW9ucyBmb3IgdGVzdCByZXN1bHRzLicpXG4gIC5vcHRpb24oJy0tb25seUNoYW5nZWQnLCAndW4gYmFzZWQgb24gd2hpY2ggZmlsZXMgaGF2ZSBjaGFuZ2VkIGluIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuICcpXG4gIC5vcHRpb24oJy0tb3V0cHV0RmlsZSA8ZmlsZW5hbWU+JywgJ1dyaXRlIHRlc3QgcmVzdWx0cyB0byBhIGZpbGUgd2hlbiB0aGUgLS1qc29uIG9wdGlvbiBpcyBhbHNvIHNwZWNpZmllZC4nKVxuICAub3B0aW9uKCctLXBhc3NXaXRoTm9UZXN0cycsICdBbGxvd3MgdGhlIHRlc3Qgc3VpdGUgdG8gcGFzcyB3aGVuIG5vIGZpbGVzIGFyZSBmb3VuZC4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1ydW5JbkJhbmQnLCAnUnVuIGFsbCB0ZXN0cyBzZXJpYWxseSBpbiB0aGUgY3VycmVudCBwcm9jZXNzLCByYXRoZXIgdGhhbiBjcmVhdGluZyBhIHdvcmtlciBwb29sIG9mIGNoaWxkIHByb2Nlc3NlcyB0aGF0IHJ1biB0ZXN0cy4nKVxuICAub3B0aW9uKCctLXNldHVwIDxwYXRoPicsICdKZXN0IHNldHVwIGZpbGUgcGF0aC4nKVxuICAub3B0aW9uKCctLXNob3dDb25maWcnLCAnUHJpbnQgeW91ciBKZXN0IGNvbmZpZyBhbmQgdGhlbiBleGl0cy4nKVxuICAub3B0aW9uKCctLXNpbGVudCcsICdQcmV2ZW50IHRlc3RzIGZyb20gcHJpbnRpbmcgbWVzc2FnZXMgdGhyb3VnaCB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRlc3RMb2NhdGlvbkluUmVzdWx0cycsICdBZGRzIGEgbG9jYXRpb24gZmllbGQgdG8gdGVzdCByZXN1bHRzLicpXG4gIC5vcHRpb24oJy0tdGVzdE5hbWVQYXR0ZXJuIDxyZWdleD4nLCAnUnVuIG9ubHkgdGVzdHMgd2l0aCBhIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSByZWdleC4gJylcbiAgLm9wdGlvbignLS10ZXN0UGF0aFBhdHRlcm4gPHJlZ2V4PicsICdBIHJlZ2V4cCBwYXR0ZXJuIHN0cmluZyB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCBhbGwgdGVzdHMgcGF0aHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgdGVzdC4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11cGRhdGUnLCAnVXBkYXRlIHNuYXBzaG90cy4gUnVucyBcImplc3QgLS11cGRhdGVTbmFwc2hvdHNcIicpXG4gIC5vcHRpb24oJy0tdXNlU3RkZXJyJywgJ0RpdmVydCBhbGwgb3V0cHV0IHRvIHN0ZGVyci4nKVxuICAub3B0aW9uKCctLXZlcmJvc2UnLCAnRGlzcGxheSBpbmRpdmlkdWFsIHRlc3QgcmVzdWx0cyB3aXRoIHRoZSB0ZXN0IHN1aXRlIGhpZXJhcmNoeS4nKVxuICAub3B0aW9uKCctLXdhdGNoIDxwYXRoPicsICdXYXRjaCBmaWxlcyBmb3IgY2hhbmdlcyBhbmQgcmVydW4gdGVzdHMgcmVsYXRlZCB0byBjaGFuZ2VkIGZpbGVzLicpXG4gIC5vcHRpb24oJy0td2F0Y2hBbGwnLCAnV2F0Y2ggZmlsZXMgZm9yIGNoYW5nZXMgYW5kIHJlcnVuIGFsbCB0ZXN0cyB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLicpXG4gIC5hY3Rpb24oKG9wdGlvbnMsIGNtZCkgPT4gdGVzdChvcHRpb25zLCBjbWQuYXJncywgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndXBkYXRlJylcbiAgLm9wdGlvbignLS1pbnRlcmFjdGl2ZScsICdDaG9vc2Ugd2hpY2ggcGFja2FnZXMgdG8gdXBkYXRlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYWNrYWdlLW1hbmFnZXIgPG1hbmFnZXI+JywgJ1doaWNoIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIERlZmF1bHQ6IG5wbScpLmNob2ljZXMoWyducG0nLCAneWFybiddKS5kZWZhdWx0KCducG0nKSlcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcmVnaXN0cnknLCAnQWRkIGEgY3VzdG9tIHJlZ2lzdHJ5IHVybC4nKVxuICAuYWN0aW9uKChjbWQpID0+IHVwZGF0ZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3VwZ3JhZGUnKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAuYWN0aW9uKChjbWQpID0+IHVwZ3JhZGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd2ZXJzaW9ucycpXG4gIC5vcHRpb24oJy0tanNvbicsICdQcmludCB0aGUgdmVyc2lvbiBhcyBhIEpTT04gb2JqZWN0LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdmVyc2lvbnMoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbVxuICAudmVyc2lvbihwYWNrYWdlSnNvbi52ZXJzaW9uKVxuICAucGFyc2UocHJvY2Vzcy5hcmd2KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFLQSxTQUFRLFFBQVEsZUFBYztBQUM5QixTQUFRLG9CQUFtQjtBQUMzQixTQUFRLHFCQUFvQjtBQUU1QixTQUFRLGFBQVk7QUFDcEIsU0FBUSxhQUFZO0FBQ3BCLFNBQVEsZUFBYztBQUN0QixTQUFRLGNBQWE7QUFDckIsU0FBUSxjQUFhO0FBQ3JCLFNBQVEsV0FBVTtBQUNsQixTQUFRLFlBQVc7QUFDbkIsU0FBUSxjQUFhO0FBQ3JCLFNBQVEsWUFBVztBQUNuQixT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
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2xleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7T3B0aW9uLCBwcm9ncmFtfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSAndXJsJztcblxuaW1wb3J0IHthaUZ1bmN0aW9ufSBmcm9tICcuL2NvbW1hbmRzL2FpL2FpLmpzJztcbmltcG9ydCB7YnVpbGR9IGZyb20gJy4vY29tbWFuZHMvYnVpbGQvYnVpbGQuanMnO1xuaW1wb3J0IHtjbGVhbn0gZnJvbSAnLi9jb21tYW5kcy9jbGVhbi9jbGVhbi5qcyc7XG5pbXBvcnQge2NvbXBpbGV9IGZyb20gJy4vY29tbWFuZHMvY29tcGlsZS9jb21waWxlLmpzJztcbmltcG9ydCB7Y29uZmlnfSBmcm9tICcuL2NvbW1hbmRzL2NvbmZpZy9jb25maWcuanMnO1xuaW1wb3J0IHtjcmVhdGV9IGZyb20gJy4vY29tbWFuZHMvY3JlYXRlL2NyZWF0ZS5qcyc7XG5pbXBvcnQge2Rldn0gZnJvbSAnLi9jb21tYW5kcy9kZXYvZGV2LmpzJztcbmltcG9ydCB7aW5pdH0gZnJvbSAnLi9jb21tYW5kcy9pbml0L2luaXQuanMnO1xuaW1wb3J0IHtsaW5rZWR9IGZyb20gJy4vY29tbWFuZHMvbGluay9saW5rLmpzJztcbmltcG9ydCB7bGludH0gZnJvbSAnLi9jb21tYW5kcy9saW50L2xpbnQuanMnO1xuaW1wb3J0IHttaWdyYXRlfSBmcm9tICcuL2NvbW1hbmRzL21pZ3JhdGUvbWlncmF0ZS5qcyc7XG5pbXBvcnQge3B1Ymxpc2h9IGZyb20gJy4vY29tbWFuZHMvcHVibGlzaC9wdWJsaXNoLmpzJztcbmltcG9ydCB7dGVzdH0gZnJvbSAnLi9jb21tYW5kcy90ZXN0L3Rlc3QuanMnO1xuaW1wb3J0IHt1cGRhdGV9IGZyb20gJy4vY29tbWFuZHMvdXBkYXRlL3VwZGF0ZS5qcyc7XG5pbXBvcnQge3VwZ3JhZGV9IGZyb20gJy4vY29tbWFuZHMvdXBncmFkZS91cGdyYWRlLmpzJztcbmltcG9ydCB7dmVyc2lvbnN9IGZyb20gJy4vY29tbWFuZHMvdmVyc2lvbnMvdmVyc2lvbnMuanMnO1xuXG5jb25zdCBwYWNrYWdlUGF0aCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxucHJvZ3JhbS5jb21tYW5kKCdidWlsZCcpXG4gIC5vcHRpb24oJy0tYXNzaXN0JywgJ0VuYWJsZSBBSSBhc3Npc3RhbmNlIGZvciBmaXhpbmcgYnVpbGQgZXJyb3JzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAnRW5hYmxlIEFJIGFuYWx5c2lzIGZvciBidWlsZCBvcHRpbWl6YXRpb24gc3VnZ2VzdGlvbnMgb3IgaW52b2tlIHdlYnBhY2stYnVuZGxlLWFuYWx5emVyIHBsdWdpbi4nLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWJ1bmRsZXIgPG4+JywgJ0J1bmRsZXIgdG8gdXNlIChcIndlYnBhY2tcIiBvciBcImVzYnVpbGRcIikuIERlZmF1bHQ6IFwid2VicGFja1wiLicpLmNob2ljZXMoWyd3ZWJwYWNrJywgJ2VzYnVpbGQnXSkuZGVmYXVsdCgnd2VicGFjaycpKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIFdlYnBhY2sgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB3ZWJwYWNrLmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1jb25maWdOYW1lIDx2YWx1ZS4uLj4nLCAnTmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiB0byB1c2UuJylcbiAgLm9wdGlvbignLS1kZWZpbmVQcm9jZXNzRW52Tm9kZUVudiA8dmFsdWU+JywgJ1NldHMgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4gKEN1cnJlbnRseSBhbiBhbGlhcyBmb3IgYC0tbm9kZS1lbnZgKScpXG4gIC5vcHRpb24oJy0tZGV2dG9vbCA8dmFsdWU+JywgJ0EgZGV2ZWxvcGVyIHRvb2wgdG8gZW5oYW5jZSBkZWJ1Z2dpbmcgKGZhbHNlIHwgZXZhbCB8IFtpbmxpbmUtfGhpZGRlbi18ZXZhbC1dW25vc291cmNlcy1dW2NoZWFwLVttb2R1bGUtXV1zb3VyY2UtbWFwKS4nKVxuICAub3B0aW9uKCctLWRpc2FibGVJbnRlcnByZXQnLCAnRGlzYWJsZSBpbnRlcnByZXQgZm9yIGxvYWRpbmcgdGhlIGNvbmZpZyBmaWxlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWVudHJ5IDx2YWx1ZS4uLj4nLCAnQSBtb2R1bGUgdGhhdCBpcyBsb2FkZWQgdXBvbiBzdGFydHVwLiBPbmx5IHRoZSBsYXN0IG9uZSBpcyBleHBvcnRlZC4nKVxuICAub3B0aW9uKCctLWVudiA8dmFsdWU+JywgJ0Vudmlyb25tZW50IHBhc3NlZCB0byB0aGUgY29uZmlndXJhdGlvbiB3aGVuIGl0IGlzIGEgZnVuY3Rpb24uJylcbiAgLm9wdGlvbignLS1mYWlsT25XYXJuaW5ncycsICdTdG9wIHdlYnBhY2stY2xpIHByb2Nlc3Mgd2l0aCBub24temVybyBleGl0IGNvZGUgb24gd2FybmluZ3MgZnJvbSB3ZWJwYWNrJywgZmFsc2UpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPHZhbHVlPicsICdUaGlzIHNldHMgdGhlIG91dHB1dCBmb3JtYXQgZm9yIHRoZSBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBmaWxlcy4gRGVmYXVsdDogXCJjanNcIi4nKS5jaG9pY2VzKFsnY2pzJywgJ2VzbSddKS5kZWZhdWx0KCdjanMnKSlcbiAgLm9wdGlvbignLS1qc29uIDx2YWx1ZT4nLCAnUHJpbnRzIHJlc3VsdCBhcyBKU09OIG9yIHN0b3JlIGl0IGluIGEgZmlsZS4nKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW1lcmdlJywgJ01lcmdlIHR3byBvciBtb3JlIGNvbmZpZ3VyYXRpb25zIHVzaW5nIFwid2VicGFjay1tZXJnZVwiLicsIGZhbHNlKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbW9kZSA8dHlwZT4nLCAnV2VicGFjayBtb2RlIChcInByb2R1Y3Rpb25cIiBvciBcImRldmVsb3BtZW50XCIpLiBEZWZhdWx0OiBcImRldmVsb3BtZW50XCIuJykuY2hvaWNlcyhbJ2RldmVsb3BtZW50JywgJ3Byb2R1Y3Rpb24nXSkuZGVmYXVsdCgnZGV2ZWxvcG1lbnQnKSlcbiAgLm9wdGlvbignLS1uYW1lIDx2YWx1ZT4nLCAnTmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbi4gVXNlZCB3aGVuIGxvYWRpbmcgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMuJylcbiAgLm9wdGlvbignLS1ub0RldnRvb2wnLCAnTmVnYXRpdmUgXCJkZXZ0b29sXCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vU3RhdHMnLCAnTmVnYXRpdmUgXCJzdGF0c1wiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub1RhcmdldCcsICdOZWdhdGl2ZSBcInRhcmdldFwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub1dhdGNoJywgJ05lZ2F0aXZlIFwid2F0Y2hcIiBvcHRpb24uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9XYXRjaE9wdGlvbnNTdGRpbicsICdOZWdhdGl2ZSBcIndhdGNoLW9wdGlvbnMtc3RkaW5cIiBvcHRpb24uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9kZUVudiA8dmFsdWU+JywgJ1NldHMgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4nKVxuICAub3B0aW9uKCctLW91dHB1dFBhdGggPHZhbHVlPicsICdUaGUgb3V0cHV0IGRpcmVjdG9yeSBhcyAqKmFic29sdXRlIHBhdGgqKiAocmVxdWlyZWQpLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZW1vdmUnLCAnUmVtb3ZlcyBhbGwgZmlsZXMgZnJvbSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgY29tcGlsaW5nLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS1zdGF0cyA8dmFsdWU+JywgJ1N0YXRzIG9wdGlvbnMgb2JqZWN0IG9yIHByZXNldCBuYW1lLicpXG4gIC5vcHRpb24oJy0tc3RhdGljJywgJ0NyZWF0ZXMgc3RhdGljIEhUTUwgZmlsZXMgd2hlbiBidWlsZGluZyBhcHAuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tdGFyZ2V0IDx2YWx1ZT4nLCAnRW52aXJvbm1lbnQgdG8gYnVpbGQgZm9yLiBFbnZpcm9ubWVudCB0byBidWlsZCBmb3IuIEFuIGFycmF5IG9mIGVudmlyb25tZW50cyB0byBidWlsZCBmb3IgYWxsIG9mIHRoZW0gd2hlbiBwb3NzaWJsZS4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tdmFyaWFibGVzIDxuPicsICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIFwicHJvY2Vzcy5lbnZcIi4gKGllLiBcIntOT0RFX0VOVjogXFwncHJvZHVjdGlvblxcJ31cIikuJylcbiAgLm9wdGlvbignLS13YXRjaCcsICdXYXRjaCBmb3IgY2hhbmdlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS13YXRjaE9wdGlvbnNTdGRpbicsICdTdG9wIHdhdGNoaW5nIHdoZW4gc3RkaW4gc3RyZWFtIGhhcyBlbmRlZC4nLCBmYWxzZSlcbiAgLmFjdGlvbigoY21kKSA9PiBidWlsZChjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NsZWFuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tc25hcHNob3RzJywgJ1JlbW92ZSBhbGwgXCJfX3NuYXBzaG90c19fXCIgZGlyZWN0b3JpZXMuJylcbiAgLmFjdGlvbigoY21kKSA9PiBjbGVhbihjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NvbmZpZyA8dHlwZT4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1qc29uIDxwYXRoPicsICdTYXZlIG91dHB1dCB0byBqc29uIGZpbGUuJylcbiAgLmFjdGlvbigodHlwZSwgY21kKSA9PiBjb25maWcodHlwZSwgY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjb21waWxlJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ1RyYW5zcGlsZXIgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB0c2NvbmZpZy5qc29uKS4nKVxuICAub3B0aW9uKCctLWVudmlyb25tZW50IDxuPicsICdUYXJnZXQgZW52aXJvbm1lbnQuIFwibm9kZVwiIG9yIFwid2ViXCIuIERlZmF1bHQ6IFwibm9kZVwiLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1vdXRwdXRQYXRoIDxwYXRoPicsICdPdXRwdXQgcGF0aCcpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIGNvbXBpbGluZy4nKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1RyYW5zcGlsZSBhcyBUeXBlc2NyaXB0LicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoZXMgZm9yIGNoYW5nZXMgYW5kIGNvbXBpbGVzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gY29tcGlsZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NyZWF0ZSA8dHlwZT4nKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPHBhdGg+JywgJ091dHB1dCBmaWxlbmFtZS4nKVxuICAub3B0aW9uKCctLW91dHB1dE5hbWUgPG4+JywgJ091dHB1dCBuYW1lLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnQ3JlYXRlIFR5cGVzY3JpcHQgdmVyc2lvbi4nKVxuICAuYWN0aW9uKCh0eXBlLCBjbWQpID0+IGNyZWF0ZSh0eXBlLCBjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2RldicpXG4gIC5vcHRpb24oJy0tYnVuZGxlQW5hbHl6ZXInLCAnUnVuIGJ1bmRsZSBhbmFseXplci4nKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIFdlYnBhY2sgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB3ZWJwYWNrLmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW9wZW4nLCAnQXV0b21hdGljYWxseSBvcGVuIGRldiBzZXJ2ZXIgaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuJylcbiAgLm9wdGlvbignLS1vdXRwdXRQYXRoIDxwYXRoPicsICdPdXRwdXQgcGF0aCcpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJylcbiAgLm9wdGlvbignLS1zb3VyY2VQYXRoIDxwYXRoPicsICdTb3VyY2UgcGF0aCcpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7Tk9ERV9FTlY6IFxcJ2RldmVsb3BtZW50XFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoIGZvciBjaGFuZ2VzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gZGV2KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnaW5pdCA8YXBwTmFtZT4gW3BhY2thZ2VOYW1lXScpXG4gIC5vcHRpb24oJy0taW5zdGFsbCcsICdJbnN0YWxsIGRlcGVuZGVuY2llcy4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVXNlIGEgVHlwZXNjcmlwdCBiYXNlZCBhcHAuJylcbiAgLmFjdGlvbigoYXBwTmFtZSwgcGFja2FnZU5hbWUsIGNtZCkgPT4gaW5pdChhcHBOYW1lLCBwYWNrYWdlTmFtZSwgY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdsaW5rZWQnKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiBsaW5rZWQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdsaW50JylcbiAgLm9wdGlvbignLS1jYWNoZScsICdPbmx5IGNoZWNrIGNoYW5nZWQgZmlsZXMuIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWNhY2hlTG9jYXRpb24gPHBhdGg+JywgJ1BhdGggdG8gdGhlIGNhY2hlIGZpbGUgb3IgZGlyZWN0b3J5LicpXG4gIC5vcHRpb24oJy0tY29sb3InLCAnRm9yY2UgZW5hYmxpbmcgb2YgY29sb3IuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdVc2UgdGhpcyBjb25maWd1cmF0aW9uLCBvdmVycmlkaW5nIC5lc2xpbnRyYy4qIGNvbmZpZyBvcHRpb25zIGlmIHByZXNlbnQuIElmIG5vdCBzcGVjaWZpZWQgYW5kIG5vIGxvY2FsIGNvbmZpZyBleGlzdHMsIExleCB3aWxsIHVzZSBpdHMgZGVmYXVsdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdPdXRwdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWVudkluZm8nLCAnT3V0cHV0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4gRGVmYXVsdDogZmFsc2UuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZW52IDxuPicsICdTcGVjaWZ5IGVudmlyb25tZW50cy4nKVxuICAub3B0aW9uKCctLWZpeCcsICdBcHBseSBBSSBmaXhlcyBhZnRlciBidWlsdC1pbiBFU0xpbnQgZml4ZXMgKHNhbWUgYXMgLS1maXgpLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWZpeERyeVJ1bicsICdBdXRvbWF0aWNhbGx5IGZpeCBwcm9ibGVtcyB3aXRob3V0IHNhdmluZyB0aGUgY2hhbmdlcyB0byB0aGUgZmlsZSBzeXN0ZW0uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZml4VHlwZSA8dHlwZT4nLCAnU3BlY2lmeSB0aGUgdHlwZXMgb2YgZml4ZXMgdG8gYXBwbHkgKHByb2JsZW0sIHN1Z2dlc3Rpb24sIGxheW91dCkuJylcbiAgLm9wdGlvbignLS1mb3JtYXQgPG4+JywgJ1VzZSBhIHNwZWNpZmljIG91dHB1dCBmb3JtYXQuIERlZmF1bHQ6IHN0eWxpc2guJylcbiAgLm9wdGlvbignLS1nbG9iYWwgPHZhcmlhYmxlcz4nLCAnRGVmaW5lIGdsb2JhbCB2YXJpYWJsZXMuJylcbiAgLm9wdGlvbignLS1pZ25vcmVQYXRoIDxwYXRoPicsICdTcGVjaWZ5IHBhdGggb2YgaWdub3JlIGZpbGUuJylcbiAgLm9wdGlvbignLS1pZ25vcmVQYXR0ZXJuIDxwYXR0ZXJuPicsICdQYXR0ZXJuIG9mIGZpbGVzIHRvIGlnbm9yZSAoaW4gYWRkaXRpb24gdG8gdGhvc2UgaW4gLmVzbGludGlnbm9yZSkuJylcbiAgLm9wdGlvbignLS1pbml0JywgJ1J1biBjb25maWcgaW5pdGlhbGl6YXRpb24gd2l6YXJkLiBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1tYXhXYXJuaW5ncyA8bnVtPicsICdOdW1iZXIgb2Ygd2FybmluZ3MgdG8gdHJpZ2dlciBub256ZXJvIGV4aXQgY29kZS4gRGVmYXVsdDogLTEuJylcbiAgLm9wdGlvbignLS1ub0NvbG9yJywgJ0ZvcmNlIGRpc2FibGluZyBvZiBjb2xvci4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0VzbGludHJjJywgJ0Rpc2FibGUgdXNlIG9mIGNvbmZpZ3VyYXRpb24gZnJvbSAuZXNsaW50cmMuKi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0lnbm9yZScsICdEaXNhYmxlIHVzZSBvZiBpZ25vcmUgZmlsZXMgYW5kIHBhdHRlcm5zLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vSW5saW5lQ29uZmlnJywgJ1ByZXZlbnQgY29tbWVudHMgZnJvbSBjaGFuZ2luZyBjb25maWcgb3IgcnVsZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tb3V0cHV0RmlsZSA8cGF0aD4nLCAnU3BlY2lmeSBmaWxlIHRvIHdyaXRlIHJlcG9ydCB0by4nKVxuICAub3B0aW9uKCctLXBhcnNlciA8bj4nLCAnU3BlY2lmeSB0aGUgcGFyc2VyIHRvIGJlIHVzZWQuJylcbiAgLm9wdGlvbignLS1wYXJzZXJPcHRpb25zIDxvcHRpb25zPicsICdTcGVjaWZ5IHBhcnNlciBvcHRpb25zLicpXG4gIC5vcHRpb24oJy0tcGx1Z2luIDxwbHVnaW5zPicsICdTcGVjaWZ5IHBsdWdpbnMuJylcbiAgLm9wdGlvbignLS1wcmludENvbmZpZyA8cGF0aD4nLCAnUHJpbnQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnaXZlbiBmaWxlLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZXBvcnRVbnVzZWREaXNhYmxlRGlyZWN0aXZlcycsICdBZGRzIHJlcG9ydGVkIGVycm9ycyBmb3IgdW51c2VkIGVzbGludC1kaXNhYmxlIGRpcmVjdGl2ZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tcmVzb2x2ZVBsdWdpbnNSZWxhdGl2ZVRvIDxwYXRoPicsICdBIGZvbGRlciB3aGVyZSBwbHVnaW5zIHNob3VsZCBiZSByZXNvbHZlZCBmcm9tLicpXG4gIC5vcHRpb24oJy0tcnVsZSA8cGF0aD4nLCAnU3BlY2lmeSBydWxlcy4nKVxuICAub3B0aW9uKCctLXJ1bGVzZGlyIDxwYXRoPicsICdVc2UgYWRkaXRpb25hbCBydWxlcyBmcm9tIHRoaXMgZGlyZWN0b3J5LicpXG4gIC5vcHRpb24oJy0tc3RkaW4nLCAnTGludCBjb2RlIHByb3ZpZGVkIG9uIDxTVERJTj4gLSBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1zdGRpbkZpbGVuYW1lIDxuPicsICdTcGVjaWZ5IGZpbGVuYW1lIHRvIHByb2Nlc3MgU1RESU4gYXMuJylcbiAgLmFjdGlvbigoY21kKSA9PiBsaW50KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbWlncmF0ZScpXG4gIC5vcHRpb24oJy1xLCAtLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiBtaWdyYXRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgncHVibGlzaCcpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1idW1wIDx0eXBlPicsICdJbmNyZW1lbnRzIHRoZSB2ZXJzaW9uLiBUeXBlcyBpbmNsdWRlOiBtYWpvciwgbWlub3IsIHBhdGNoLCBiZXRhLCBhbHBoYSwgcmMuIERlZmF1bHQ6IFwicGF0Y2hcIi4nKS5jaG9pY2VzKFsnbWFqb3InLCAnbWlub3InLCAncGF0Y2gnLCAnYmV0YScsICdhbHBoYScsICdyYyddKS5kZWZhdWx0KCdwYXRjaCcpKVxuICAub3B0aW9uKCctLW5ld1ZlcnNpb24gPHZlcnNpb25OdW1iZXI+JywgJ1B1Ymxpc2ggYXMgYSBzcGVjaWZpYyB2ZXJzaW9uLicpXG4gIC5vcHRpb24oJy0tb3RwIDxjb2RlPicsICdQcm92aWRlIGEgdHdvLWZhY3RvciBjb2RlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYWNrYWdlLW1hbmFnZXIgPG1hbmFnZXI+JywgJ1doaWNoIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIERlZmF1bHQ6IG5wbScpLmNob2ljZXMoWyducG0nLCAneWFybiddKS5kZWZhdWx0KCducG0nKSlcbiAgLm9wdGlvbignLS1wcml2YXRlJywgJ1B1Ymxpc2hlcyB0aGUgbW9kdWxlIGFzIHJlc3RyaWN0ZWQuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tdGFnIDx0YWc+JywgJ1JlZ2lzdGVycyB0aGUgcHVibGlzaGVkIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gdGFnLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gcHVibGlzaChjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3Rlc3QnKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAnVXNlIEFJIHRvIGFuYWx5emUgdGVzdCBjb3ZlcmFnZSBhbmQgc3VnZ2VzdCBpbXByb3ZlbWVudHMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZGVidWdUZXN0cycsICdVc2UgQUkgdG8gZGVidWcgdGVzdCBmYWlsdXJlcyBhbmQgc3VnZ2VzdCBmaXhlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1nZW5lcmF0ZScsICdVc2UgQUkgdG8gZ2VuZXJhdGUgdGVzdCBjYXNlcyBmb3IgdW50ZXN0ZWQgY29kZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1iYWlsJywgJ0V4aXQgdGhlIHRlc3Qgc3VpdGUgaW1tZWRpYXRlbHkgdXBvbiB0aGUgZmlyc3QgZmFpbGluZyB0ZXN0IHN1aXRlLicpXG4gIC5vcHRpb24oJy0tY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yJywgJ1J1bnMgdGVzdHMgcmVsYXRlZCB0byB0aGUgY3VycmVudCBjaGFuZ2VzIGFuZCB0aGUgY2hhbmdlcyBtYWRlIGluIHRoZSBsYXN0IGNvbW1pdC4nKVxuICAub3B0aW9uKCctLWNoYW5nZWRTaW5jZScsICdSdW5zIHRlc3RzIHJlbGF0ZWQgdGhlIGNoYW5nZXMgc2luY2UgdGhlIHByb3ZpZGVkIGJyYW5jaC4nKVxuICAub3B0aW9uKCctLWNpJywgJ1doZW4gdGhpcyBvcHRpb24gaXMgcHJvdmlkZWQsIEplc3Qgd2lsbCBhc3N1bWUgaXQgaXMgcnVubmluZyBpbiBhIENJIGVudmlyb25tZW50LicpXG4gIC5vcHRpb24oJy0tY2xlYXJDYWNoZScsICdDbGVhciBKZXN0IGNhY2hlLicpXG4gIC5vcHRpb24oJy0tY29sbGVjdENvdmVyYWdlRnJvbSA8Z2xvYj4nLCAnQSBnbG9iIHBhdHRlcm4gcmVsYXRpdmUgdG8gbWF0Y2hpbmcgdGhlIGZpbGVzIHRoYXQgY292ZXJhZ2UgaW5mbyBuZWVkcyB0byBiZSBjb2xsZWN0ZWQgZnJvbS4nKVxuICAub3B0aW9uKCctLWNvbG9ycycsICdGb3JjZXMgdGVzdCByZXN1bHRzIG91dHB1dCBoaWdobGlnaHRpbmcgZXZlbiBpZiBzdGRvdXQgaXMgbm90IGEgVFRZLicpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gSmVzdCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGplc3QuY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLWRlYnVnJywgJ1ByaW50IGRlYnVnZ2luZyBpbmZvIGFib3V0IHlvdXIgSmVzdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZXRlY3RPcGVuSGFuZGxlcycsICdBdHRlbXB0IHRvIGNvbGxlY3QgYW5kIHByaW50IG9wZW4gaGFuZGxlcyBwcmV2ZW50aW5nIEplc3QgZnJvbSBleGl0aW5nIGNsZWFubHknKVxuICAub3B0aW9uKCctLWVudmlyb25tZW50IDxuPicsICdUYXJnZXQgZW52aXJvbm1lbnQuIFwibm9kZVwiIG9yIFwid2ViXCIuIERlZmF1bHQ6IFwibm9kZVwiLicpXG4gIC5vcHRpb24oJy0tZW52JywgJ1RoZSB0ZXN0IGVudmlyb25tZW50IHVzZWQgZm9yIGFsbCB0ZXN0cy4gVGhpcyBjYW4gcG9pbnQgdG8gYW55IGZpbGUgb3Igbm9kZSBtb2R1bGUuIEV4YW1wbGVzOiBqc2RvbSwgbm9kZSBvciBwYXRoL3RvL215LWVudmlyb25tZW50LmpzLicpXG4gIC5vcHRpb24oJy0tZXJyb3JPbkRlcHJlY2F0ZWQnLCAnTWFrZSBjYWxsaW5nIGRlcHJlY2F0ZWQgQVBJcyB0aHJvdyBoZWxwZnVsIGVycm9yIG1lc3NhZ2VzLicpXG4gIC5vcHRpb24oJy0tZXhwYW5kJywgJ1VzZSB0aGlzIGZsYWcgdG8gc2hvdyBmdWxsIGRpZmZzIGFuZCBlcnJvcnMgaW5zdGVhZCBvZiBhIHBhdGNoLicpXG4gIC5vcHRpb24oJy0tZm9yY2VFeGl0JywgJ0ZvcmNlIEplc3QgdG8gZXhpdCBhZnRlciBhbGwgdGVzdHMgaGF2ZSBjb21wbGV0ZWQgcnVubmluZy4nKVxuICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnRzIHRoZSB0ZXN0IHJlc3VsdHMgaW4gSlNPTi4nKVxuICAub3B0aW9uKCctLWxhc3RDb21taXQnLCAnUnVuIGFsbCB0ZXN0cyBhZmZlY3RlZCBieSBmaWxlIGNoYW5nZXMgaW4gdGhlIGxhc3QgY29tbWl0IG1hZGUuJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLWxpc3RUZXN0cycsICdMaXN0cyBhbGwgdGVzdHMgYXMgSlNPTiB0aGF0IEplc3Qgd2lsbCBydW4gZ2l2ZW4gdGhlIGFyZ3VtZW50cywgYW5kIGV4aXRzLicpXG4gIC5vcHRpb24oJy0tbG9nSGVhcFVzYWdlJywgJ0xvZ3MgdGhlIGhlYXAgdXNhZ2UgYWZ0ZXIgZXZlcnkgdGVzdC4nKVxuICAub3B0aW9uKCctLW1heFdvcmtlcnMgPG51bT4nLCAnU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIHRoZSB3b3JrZXItcG9vbCB3aWxsIHNwYXduIGZvciBydW5uaW5nIHRlc3RzLiAnKVxuICAub3B0aW9uKCctLW5vU3RhY2tUcmFjZScsICdEaXNhYmxlcyBzdGFjayB0cmFjZSBpbiB0ZXN0IHJlc3VsdHMgb3V0cHV0LicpXG4gIC5vcHRpb24oJy0tbm90aWZ5JywgJ0FjdGl2YXRlcyBub3RpZmljYXRpb25zIGZvciB0ZXN0IHJlc3VsdHMuJylcbiAgLm9wdGlvbignLS1vbmx5Q2hhbmdlZCcsICd1biBiYXNlZCBvbiB3aGljaCBmaWxlcyBoYXZlIGNoYW5nZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4gJylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxmaWxlbmFtZT4nLCAnV3JpdGUgdGVzdCByZXN1bHRzIHRvIGEgZmlsZSB3aGVuIHRoZSAtLWpzb24gb3B0aW9uIGlzIGFsc28gc3BlY2lmaWVkLicpXG4gIC5vcHRpb24oJy0tcGFzc1dpdGhOb1Rlc3RzJywgJ0FsbG93cyB0aGUgdGVzdCBzdWl0ZSB0byBwYXNzIHdoZW4gbm8gZmlsZXMgYXJlIGZvdW5kLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJ1bkluQmFuZCcsICdSdW4gYWxsIHRlc3RzIHNlcmlhbGx5IGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgd29ya2VyIHBvb2wgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgcnVuIHRlc3RzLicpXG4gIC5vcHRpb24oJy0tc2V0dXAgPHBhdGg+JywgJ0plc3Qgc2V0dXAgZmlsZSBwYXRoLicpXG4gIC5vcHRpb24oJy0tc2hvd0NvbmZpZycsICdQcmludCB5b3VyIEplc3QgY29uZmlnIGFuZCB0aGVuIGV4aXRzLicpXG4gIC5vcHRpb24oJy0tc2lsZW50JywgJ1ByZXZlbnQgdGVzdHMgZnJvbSBwcmludGluZyBtZXNzYWdlcyB0aHJvdWdoIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tdGVzdExvY2F0aW9uSW5SZXN1bHRzJywgJ0FkZHMgYSBsb2NhdGlvbiBmaWVsZCB0byB0ZXN0IHJlc3VsdHMuJylcbiAgLm9wdGlvbignLS10ZXN0TmFtZVBhdHRlcm4gPHJlZ2V4PicsICdSdW4gb25seSB0ZXN0cyB3aXRoIGEgbmFtZSB0aGF0IG1hdGNoZXMgdGhlIHJlZ2V4LiAnKVxuICAub3B0aW9uKCctLXRlc3RQYXRoUGF0dGVybiA8cmVnZXg+JywgJ0EgcmVnZXhwIHBhdHRlcm4gc3RyaW5nIHRoYXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IGFsbCB0ZXN0cyBwYXRocyBiZWZvcmUgZXhlY3V0aW5nIHRoZSB0ZXN0LicpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nKVxuICAub3B0aW9uKCctLXVwZGF0ZScsICdVcGRhdGUgc25hcHNob3RzLiBSdW5zIFwiamVzdCAtLXVwZGF0ZVNuYXBzaG90c1wiJylcbiAgLm9wdGlvbignLS11c2VTdGRlcnInLCAnRGl2ZXJ0IGFsbCBvdXRwdXQgdG8gc3RkZXJyLicpXG4gIC5vcHRpb24oJy0tdmVyYm9zZScsICdEaXNwbGF5IGluZGl2aWR1YWwgdGVzdCByZXN1bHRzIHdpdGggdGhlIHRlc3Qgc3VpdGUgaGllcmFyY2h5LicpXG4gIC5vcHRpb24oJy0td2F0Y2ggPHBhdGg+JywgJ1dhdGNoIGZpbGVzIGZvciBjaGFuZ2VzIGFuZCByZXJ1biB0ZXN0cyByZWxhdGVkIHRvIGNoYW5nZWQgZmlsZXMuJylcbiAgLm9wdGlvbignLS13YXRjaEFsbCcsICdXYXRjaCBmaWxlcyBmb3IgY2hhbmdlcyBhbmQgcmVydW4gYWxsIHRlc3RzIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuJylcbiAgLmFjdGlvbigob3B0aW9ucywgY21kKSA9PiB0ZXN0KG9wdGlvbnMsIGNtZC5hcmdzLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd1cGRhdGUnKVxuICAub3B0aW9uKCctLWludGVyYWN0aXZlJywgJ0Nob29zZSB3aGljaCBwYWNrYWdlcyB0byB1cGRhdGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZWdpc3RyeScsICdBZGQgYSBjdXN0b20gcmVnaXN0cnkgdXJsLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBkYXRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndXBncmFkZScpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYWNrYWdlLW1hbmFnZXIgPG1hbmFnZXI+JywgJ1doaWNoIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIERlZmF1bHQ6IG5wbScpLmNob2ljZXMoWyducG0nLCAneWFybiddKS5kZWZhdWx0KCducG0nKSlcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBncmFkZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2FpJylcbiAgLm9wdGlvbignLS1jb250ZXh0JywgJ0luY2x1ZGUgcHJvamVjdCBjb250ZXh0IGluIHRoZSBBSSBwcm9tcHQuJywgdHJ1ZSlcbiAgLm9wdGlvbignLS1maWxlIDxwYXRoPicsICdTcGVjaWZpYyBmaWxlIHRvIG9wZXJhdGUgb24uJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgdG8gdXNlLiBEZWZhdWx0OiBncHQtNG8uJylcbiAgLm9wdGlvbignLS1wcm9tcHQgPHRleHQ+JywgJ1RoZSBwcm9tcHQgdG8gc2VuZCB0byB0aGUgQUkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YXNrIDx0YXNrPicsICdUeXBlIG9mIEFJIHRhc2sgdG8gcGVyZm9ybS4nKS5jaG9pY2VzKFsnZ2VuZXJhdGUnLCAnZXhwbGFpbicsICd0ZXN0JywgJ29wdGltaXplJywgJ2hlbHAnXSkuZGVmYXVsdCgnaGVscCcpKVxuICAuYWN0aW9uKChjbWQpID0+IGFpRnVuY3Rpb24oY21kKS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndmVyc2lvbnMnKVxuICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgdGhlIHZlcnNpb24gYXMgYSBKU09OIG9iamVjdC4nKVxuICAuYWN0aW9uKChjbWQpID0+IHZlcnNpb25zKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW1cbiAgLnZlcnNpb24ocGFj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
|
package/dist/types.d.ts
ADDED
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AIConfig } from '../LexConfig.js';
|
|
2
|
+
export declare const callCursorAI: (prompt: string, options: AIConfig) => Promise<string>;
|
|
3
|
+
export declare const callOpenAIAI: (prompt: string, options: AIConfig) => Promise<string>;
|
|
4
|
+
export declare const callAnthropicAI: (prompt: string, options: AIConfig) => Promise<string>;
|
|
5
|
+
export declare const callCopilotAI: (prompt: string, options: AIConfig) => Promise<string>;
|
|
6
|
+
export declare const promptForAIProvider: (quiet?: boolean) => Promise<"cursor" | "copilot" | "openai" | "anthropic" | "none">;
|
|
7
|
+
export declare const promptForAPIKey: (provider: string, quiet?: boolean) => Promise<string>;
|
|
8
|
+
export declare const getAIService: (provider: string, options: AIConfig) => (prompt: string, options: AIConfig) => Promise<string>;
|
|
9
|
+
export declare const callAIService: (prompt: string, quiet?: boolean) => Promise<string>;
|