@sprucelabs/spruce-cli 14.21.9 → 14.21.13
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/CHANGELOG.md +32 -0
- package/build/.spruce/schemas/fields/fields.types.js +8 -8
- package/build/GlobalEmitter.js +4 -2
- package/build/GlobalEmitter.js.map +1 -1
- package/build/__tests__/behavioral/SettingLogTransportsInASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/WatchingSkillViews.test.js.map +1 -1
- package/build/__tests__/behavioral/events/CreatingAListener.test.js +28 -17
- package/build/__tests__/behavioral/events/CreatingAListener.test.js.map +1 -1
- package/build/__tests__/implementation/GlobalEmitter.d.ts +4 -0
- package/build/__tests__/implementation/GlobalEmitter.js +77 -0
- package/build/__tests__/implementation/GlobalEmitter.js.map +1 -0
- package/build/__tests__/testDirsAndFiles/mercury-types-package.json +2 -2
- package/build/cli.js +1 -1
- package/build/constants.js +1 -1
- package/build/errors/SpruceError.js +10 -3
- package/build/errors/SpruceError.js.map +1 -1
- package/build/features/cache/constants.js +1 -1
- package/build/features/event/writers/EventWriter.js +1 -1
- package/build/features/onboard/scripts/onboarding.first.script.js +1 -1
- package/build/features/onboard/scripts/onboarding.short.script.js +2 -2
- package/build/features/skill/actions/DashboardAction.js +1 -1
- package/build/features/skill/actions/RegisterAction.js +1 -1
- package/build/features/test/TestReporter.js +1 -1
- package/build/features/test/TestReporter.js.map +1 -1
- package/build/features/test/actions/TestAction.js +1 -1
- package/build/features/vscode/actions/SetupAction.js +1 -0
- package/build/features/vscode/actions/SetupAction.js.map +1 -1
- package/build/services/LintService.js +23 -23
- package/build/services/LintService.js.map +1 -1
- package/build/types/graphicsInterface.types.js +6 -6
- package/build/widgets/types/factory.types.js +1 -1
- package/package.json +39 -38
- package/src/GlobalEmitter.ts +3 -1
- package/src/__tests__/behavioral/SettingLogTransportsInASkill.test.ts +1 -1
- package/src/__tests__/behavioral/WatchingSkillViews.test.ts +1 -0
- package/src/__tests__/behavioral/events/CreatingAListener.test.ts +6 -0
- package/src/__tests__/implementation/GlobalEmitter.ts +12 -0
- package/src/__tests__/testDirsAndFiles/mercury-types-package.json +2 -2
- package/src/errors/SpruceError.ts +7 -0
- package/src/features/test/TestReporter.ts +1 -1
- package/src/features/vscode/actions/SetupAction.ts +1 -0
- package/src/services/LintService.ts +6 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/errors/SpruceError.ts"],"names":["SpruceError","options","message","code","args","length","join","friendlyMessage","originalError","stack","name","command","file","pattern","cmd","cwd","stderr","cleanStdErr","stdout","schemaId","destination","featureCode","fileName","testName","errorMessage","split","map","line","errors","responseErrors","errorMessages","err","push","fullyQualifiedEventName","brokenProperty","dependencies","d","hint","namesUtil","toPascal","schemaNamespace","fieldName","JSON","stringify","fieldOptions","replace","trim","AbstractSpruceError"],"mappings":"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","sourcesContent":["import AbstractSpruceError from '@sprucelabs/error'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport upperFirst from 'lodash/upperFirst'\nimport ErrorOptions from '#spruce/errors/options.types'\n\nexport default class SpruceError extends AbstractSpruceError<ErrorOptions> {\n\t/** An easy to understand version of the errors */\n\tpublic friendlyMessage(): string {\n\t\tconst { options } = this\n\t\tlet message\n\n\t\tswitch (options?.code) {\n\t\t\tcase 'INVALID_COMMAND':\n\t\t\t\tif (!options.args || options.args.length === 0) {\n\t\t\t\t\tmessage = `Hey friend 👋.. I don't support the command you tried.`\n\t\t\t\t} else {\n\t\t\t\t\tmessage = `Hey friend 👋. I don't know the command: ${options.args.join(\n\t\t\t\t\t\t' '\n\t\t\t\t\t)}.`\n\t\t\t\t}\n\t\t\t\tmessage += ' Try running `spruce --help`'\n\t\t\t\tbreak\n\n\t\t\tcase 'GENERIC':\n\t\t\t\tmessage = options.friendlyMessage ?? 'Oh shoot! 🤔'\n\n\t\t\t\tif (options.originalError) {\n\t\t\t\t\tmessage += `\\n\\n${\n\t\t\t\t\t\toptions.originalError.stack ?? options.originalError.name\n\t\t\t\t\t}`\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'NOT_IMPLEMENTED':\n\t\t\t\tmessage = ''\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'COMMAND_NOT_IMPLEMENTED':\n\t\t\t\tmessage = `${options.command} has not yet been implemented. ${\n\t\t\t\t\toptions.args ? `Args: ${options.args.join(', ')}` : ''\n\t\t\t\t}`\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_FAILED_TO_IMPORT':\n\t\t\t\tmessage = `Error importing \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BUILD_FAILED':\n\t\t\t\tmessage = `Build${\n\t\t\t\t\toptions.file ? `ing ${options.file}` : ''\n\t\t\t\t} failed. It looks like you're not running 'yarn watch'. Run it and then run 'spruce all:sync'.`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FAILED_TO_IMPORT':\n\t\t\t\tmessage =\n\t\t\t\t\toptions.friendlyMessage ??\n\t\t\t\t\t`Failed to import \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'LINT_FAILED':\n\t\t\t\tmessage = `Lint failed on pattern ${options.pattern}.`\n\t\t\t\tbreak\n\n\t\t\tcase 'EXECUTING_COMMAND_FAILED':\n\t\t\t\tif (this.originalError && this.originalError.message) {\n\t\t\t\t\tmessage = this.originalError.message + '\\n\\n'\n\t\t\t\t} else {\n\t\t\t\t\tmessage = ''\n\t\t\t\t}\n\t\t\t\tmessage += `Executing command failed '${options.cmd}'.\\n\\n`\n\t\t\t\tif (options.cwd) {\n\t\t\t\t\tmessage += `cwd: ${options.cwd}\\n\\n`\n\t\t\t\t}\n\n\t\t\t\tif (options.stderr) {\n\t\t\t\t\tmessage += this.cleanStdErr(options.stderr) + '\\n\\n'\n\t\t\t\t}\n\n\t\t\t\tif (options.stdout) {\n\t\t\t\t\tmessage += options.stdout\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'CREATE_AUTOLOADER_FAILED':\n\t\t\t\tmessage = 'A Could not create an autoloader just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_EMPTY':\n\t\t\t\tmessage = 'A directory empty just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'FILE_EXISTS':\n\t\t\t\tmessage = 'A fail already exists.'\n\t\t\t\tbreak\n\n\t\t\tcase 'VSCODE_NOT_INSTALLED':\n\t\t\t\tmessage =\n\t\t\t\t\t\"vscode's 'code' is not installed.\\n\\nMac instructions: https://code.visualstudio.com/docs/setup/mac\\n\\nLinux instructions: https://code.visualstudio.com/docs/setup/linux\\n\\nWindows instructions: https://code.visualstudio.com/docs/setup/windows\"\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_EXISTS':\n\t\t\t\tmessage = `A schema called ${options.schemaId} already exists at ${options.destination}`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_ABORTED':\n\t\t\t\tmessage = 'Aborted! See ya later! ✌️'\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_FEATURE_CODE':\n\t\t\t\tmessage = `Oh no! I couldn't find a feature with the code '${options.featureCode}'.`\n\t\t\t\tbreak\n\n\t\t\tcase 'TEST_FAILED':\n\t\t\t\tmessage = `${options.fileName}\\n - ${\n\t\t\t\t\toptions.testName\n\t\t\t\t}\\n\\n${options.errorMessage\n\t\t\t\t\t.split('\\n')\n\t\t\t\t\t.map((line) => ` ${line}`)\n\t\t\t\t\t.join('\\n')}`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FEATURE_NOT_INSTALLED':\n\t\t\t\tmessage = `\\`${upperFirst(\n\t\t\t\t\toptions.featureCode\n\t\t\t\t)}\\` feature is not installed. Install it first, then try again.`\n\t\t\t\tbreak\n\n\t\t\tcase 'MERCURY_RESPONSE_ERROR': {\n\t\t\t\tconst errors = options.responseErrors\n\t\t\t\tmessage = `Got ${\n\t\t\t\t\terrors.length === 1 ? 'an error' : `${errors.length} errors`\n\t\t\t\t} from the server:\\n\\n`\n\n\t\t\t\tconst errorMessages: string[] = []\n\t\t\t\tfor (const err of errors) {\n\t\t\t\t\terrorMessages.push(err.message)\n\t\t\t\t}\n\n\t\t\t\tmessage += errorMessages.join('\\n')\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'INVALID_TEST_DIRECTORY':\n\t\t\t\tmessage = `You are missing dependencies I need to run tests. Try \\`spruce test.install\\` to reinstall.`\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_NOT_SKILL':\n\t\t\t\tmessage = 'The directory you are in is not a skill!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_REGISTERED':\n\t\t\t\tmessage = `Dang! I can't continue until you register your skill! Run \\`spruce login\\` and then \\`spruce register.skill\\` to get the ball rolling!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_ORGANIZATIONS_FOUND':\n\t\t\t\tmessage =\n\t\t\t\t\t\"It looks like you don't have any organizations setup yet. Try `spruce create.organization` first.\"\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_EVENT_CONTRACT':\n\t\t\t\tmessage = `The event named \\`${options.fullyQualifiedEventName}\\` is not valid. Check ${options.brokenProperty}. The original error is:\\n\\n${options.originalError?.message}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BOOT_ERROR':\n\t\t\t\tmessage = `Booting your skill failed: ${\n\t\t\t\t\toptions.friendlyMessage ??\n\t\t\t\t\toptions.originalError?.message ??\n\t\t\t\t\t'Not sure why, tho.'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'DEPLOY_FAILED':\n\t\t\t\tmessage = 'Deploy halted!'\n\t\t\t\tbreak\n\n\t\t\tcase 'MISSING_DEPENDENCIES':\n\t\t\t\tmessage = `Looks like you're missing some dependencies:\\n\\n${options.dependencies\n\t\t\t\t\t.map((d) => `${d.name}: ${d.hint}`)\n\t\t\t\t\t.join('\\n')}`\n\t\t\t\tbreak\n\n\t\t\tcase 'STORE_EXISTS':\n\t\t\t\tmessage = 'A Store exists just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'NOT_LOGGED_IN':\n\t\t\t\tmessage = 'You have to be logged in to do that!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_FOUND':\n\t\t\t\tmessage = `I couldn't find that skill!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_SKILLS_REGISTERED':\n\t\t\t\tmessage = `Whoa! Looks like you haven't registered your skill yet! Try \\`spruce register\\` to get that done!`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_BLOCKED':\n\t\t\t\tmessage = `${options.command} is blocked! ${options.hint}`\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_VIEW_EXISTS':\n\t\t\t\tmessage = `A skill view controller already exists named ${options.name}!`\n\t\t\t\tbreak\n\n\t\t\tcase 'THEME_EXISTS':\n\t\t\t\tmessage = `Yikes! You can't create a new theme. One per skill for now.`\n\t\t\t\tbreak\n\n\t\t\tcase 'CACHE_NOT_ENABLED':\n\t\t\t\tmessage = \"Cache is not enabled, so it can't be disabled!\"\n\t\t\t\tbreak\n\n\t\t\tcase 'DOCKER_NOT_STARTED':\n\t\t\t\tmessage = 'Docker has not been started! Start it and try again!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_TEMPLATE_ITEM_BUILDING_FAILED':\n\t\t\t\tmessage = `Failed to build schema template item for '${namesUtil.toPascal(\n\t\t\t\t\toptions.schemaNamespace\n\t\t\t\t)}.${options.schemaId}'. The field I had an issue on was '${\n\t\t\t\t\toptions.fieldName\n\t\t\t\t}'. It's options are:\\n\\n${JSON.stringify(\n\t\t\t\t\toptions.fieldOptions\n\t\t\t\t)}.\\n\\nChances are you have a circular reference in your schemas. You'll need to extract shared fields to a new file and have your schemas mix those in, vs referencing eath other.`\n\t\t\t\tbreak\n\n\t\t\tcase 'ACTION_CANCELLED':\n\t\t\t\tmessage = 'A Action cancelled just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'TRANSPORT_ALREADY_EXISTS':\n\t\t\t\tmessage = `A transport named '${options.name}' already exists!`\n\t\t\t\tbreak\n\n\t\t\tdefault:\n\t\t\t\tmessage = super.friendlyMessage()\n\t\t}\n\n\t\treturn message\n\t}\n\n\tprivate cleanStdErr(stderr: string) {\n\t\treturn stderr.replace('warning package.json: No license field', '').trim()\n\t}\n}\n"],"file":"SpruceError.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/errors/SpruceError.ts"],"names":["SpruceError","options","message","code","args","length","join","friendlyMessage","originalError","stack","name","command","file","pattern","cmd","cwd","stderr","cleanStdErr","stdout","schemaId","destination","featureCode","fileName","testName","errorMessage","split","map","line","errors","responseErrors","errorMessages","err","push","fullyQualifiedEventName","brokenProperty","dependencies","d","hint","namesUtil","toPascal","schemaNamespace","fieldName","JSON","stringify","fieldOptions","replace","trim","AbstractSpruceError"],"mappings":"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","sourcesContent":["import AbstractSpruceError from '@sprucelabs/error'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport upperFirst from 'lodash/upperFirst'\nimport ErrorOptions from '#spruce/errors/options.types'\n\nexport default class SpruceError extends AbstractSpruceError<ErrorOptions> {\n\t/** An easy to understand version of the errors */\n\tpublic friendlyMessage(): string {\n\t\tconst { options } = this\n\t\tlet message\n\n\t\tswitch (options?.code) {\n\t\t\tcase 'INVALID_COMMAND':\n\t\t\t\tif (!options.args || options.args.length === 0) {\n\t\t\t\t\tmessage = `Hey friend 👋.. I don't support the command you tried.`\n\t\t\t\t} else {\n\t\t\t\t\tmessage = `Hey friend 👋. I don't know the command: ${options.args.join(\n\t\t\t\t\t\t' '\n\t\t\t\t\t)}.`\n\t\t\t\t}\n\t\t\t\tmessage += ' Try running `spruce --help`'\n\t\t\t\tbreak\n\n\t\t\tcase 'GENERIC':\n\t\t\t\tmessage = options.friendlyMessage ?? 'Oh shoot! 🤔'\n\n\t\t\t\tif (options.originalError) {\n\t\t\t\t\tmessage += `\\n\\n${\n\t\t\t\t\t\toptions.originalError.stack ?? options.originalError.name\n\t\t\t\t\t}`\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'NOT_IMPLEMENTED':\n\t\t\t\tmessage = ''\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'COMMAND_NOT_IMPLEMENTED':\n\t\t\t\tmessage = `${options.command} has not yet been implemented. ${\n\t\t\t\t\toptions.args ? `Args: ${options.args.join(', ')}` : ''\n\t\t\t\t}`\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_FAILED_TO_IMPORT':\n\t\t\t\tmessage = `Error importing \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BUILD_FAILED':\n\t\t\t\tmessage = `Build${\n\t\t\t\t\toptions.file ? `ing ${options.file}` : ''\n\t\t\t\t} failed. It looks like you're not running 'yarn watch'. Run it and then run 'spruce all:sync'.`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FAILED_TO_IMPORT':\n\t\t\t\tmessage =\n\t\t\t\t\toptions.friendlyMessage ??\n\t\t\t\t\t`Failed to import \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'LINT_FAILED':\n\t\t\t\tmessage = `Lint failed on pattern ${options.pattern}.`\n\n\t\t\t\tif (options.originalError) {\n\t\t\t\t\tmessage += `\\n\\nOriginal error:${\n\t\t\t\t\t\toptions.originalError.stack ?? options.originalError.message\n\t\t\t\t\t}`\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'EXECUTING_COMMAND_FAILED':\n\t\t\t\tif (this.originalError && this.originalError.message) {\n\t\t\t\t\tmessage = this.originalError.message + '\\n\\n'\n\t\t\t\t} else {\n\t\t\t\t\tmessage = ''\n\t\t\t\t}\n\t\t\t\tmessage += `Executing command failed '${options.cmd}'.\\n\\n`\n\t\t\t\tif (options.cwd) {\n\t\t\t\t\tmessage += `cwd: ${options.cwd}\\n\\n`\n\t\t\t\t}\n\n\t\t\t\tif (options.stderr) {\n\t\t\t\t\tmessage += this.cleanStdErr(options.stderr) + '\\n\\n'\n\t\t\t\t}\n\n\t\t\t\tif (options.stdout) {\n\t\t\t\t\tmessage += options.stdout\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'CREATE_AUTOLOADER_FAILED':\n\t\t\t\tmessage = 'A Could not create an autoloader just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_EMPTY':\n\t\t\t\tmessage = 'A directory empty just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'FILE_EXISTS':\n\t\t\t\tmessage = 'A fail already exists.'\n\t\t\t\tbreak\n\n\t\t\tcase 'VSCODE_NOT_INSTALLED':\n\t\t\t\tmessage =\n\t\t\t\t\t\"vscode's 'code' is not installed.\\n\\nMac instructions: https://code.visualstudio.com/docs/setup/mac\\n\\nLinux instructions: https://code.visualstudio.com/docs/setup/linux\\n\\nWindows instructions: https://code.visualstudio.com/docs/setup/windows\"\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_EXISTS':\n\t\t\t\tmessage = `A schema called ${options.schemaId} already exists at ${options.destination}`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_ABORTED':\n\t\t\t\tmessage = 'Aborted! See ya later! ✌️'\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_FEATURE_CODE':\n\t\t\t\tmessage = `Oh no! I couldn't find a feature with the code '${options.featureCode}'.`\n\t\t\t\tbreak\n\n\t\t\tcase 'TEST_FAILED':\n\t\t\t\tmessage = `${options.fileName}\\n - ${\n\t\t\t\t\toptions.testName\n\t\t\t\t}\\n\\n${options.errorMessage\n\t\t\t\t\t.split('\\n')\n\t\t\t\t\t.map((line) => ` ${line}`)\n\t\t\t\t\t.join('\\n')}`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FEATURE_NOT_INSTALLED':\n\t\t\t\tmessage = `\\`${upperFirst(\n\t\t\t\t\toptions.featureCode\n\t\t\t\t)}\\` feature is not installed. Install it first, then try again.`\n\t\t\t\tbreak\n\n\t\t\tcase 'MERCURY_RESPONSE_ERROR': {\n\t\t\t\tconst errors = options.responseErrors\n\t\t\t\tmessage = `Got ${\n\t\t\t\t\terrors.length === 1 ? 'an error' : `${errors.length} errors`\n\t\t\t\t} from the server:\\n\\n`\n\n\t\t\t\tconst errorMessages: string[] = []\n\t\t\t\tfor (const err of errors) {\n\t\t\t\t\terrorMessages.push(err.message)\n\t\t\t\t}\n\n\t\t\t\tmessage += errorMessages.join('\\n')\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'INVALID_TEST_DIRECTORY':\n\t\t\t\tmessage = `You are missing dependencies I need to run tests. Try \\`spruce test.install\\` to reinstall.`\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_NOT_SKILL':\n\t\t\t\tmessage = 'The directory you are in is not a skill!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_REGISTERED':\n\t\t\t\tmessage = `Dang! I can't continue until you register your skill! Run \\`spruce login\\` and then \\`spruce register.skill\\` to get the ball rolling!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_ORGANIZATIONS_FOUND':\n\t\t\t\tmessage =\n\t\t\t\t\t\"It looks like you don't have any organizations setup yet. Try `spruce create.organization` first.\"\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_EVENT_CONTRACT':\n\t\t\t\tmessage = `The event named \\`${options.fullyQualifiedEventName}\\` is not valid. Check ${options.brokenProperty}. The original error is:\\n\\n${options.originalError?.message}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BOOT_ERROR':\n\t\t\t\tmessage = `Booting your skill failed: ${\n\t\t\t\t\toptions.friendlyMessage ??\n\t\t\t\t\toptions.originalError?.message ??\n\t\t\t\t\t'Not sure why, tho.'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'DEPLOY_FAILED':\n\t\t\t\tmessage = 'Deploy halted!'\n\t\t\t\tbreak\n\n\t\t\tcase 'MISSING_DEPENDENCIES':\n\t\t\t\tmessage = `Looks like you're missing some dependencies:\\n\\n${options.dependencies\n\t\t\t\t\t.map((d) => `${d.name}: ${d.hint}`)\n\t\t\t\t\t.join('\\n')}`\n\t\t\t\tbreak\n\n\t\t\tcase 'STORE_EXISTS':\n\t\t\t\tmessage = 'A Store exists just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'NOT_LOGGED_IN':\n\t\t\t\tmessage = 'You have to be logged in to do that!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_FOUND':\n\t\t\t\tmessage = `I couldn't find that skill!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_SKILLS_REGISTERED':\n\t\t\t\tmessage = `Whoa! Looks like you haven't registered your skill yet! Try \\`spruce register\\` to get that done!`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_BLOCKED':\n\t\t\t\tmessage = `${options.command} is blocked! ${options.hint}`\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_VIEW_EXISTS':\n\t\t\t\tmessage = `A skill view controller already exists named ${options.name}!`\n\t\t\t\tbreak\n\n\t\t\tcase 'THEME_EXISTS':\n\t\t\t\tmessage = `Yikes! You can't create a new theme. One per skill for now.`\n\t\t\t\tbreak\n\n\t\t\tcase 'CACHE_NOT_ENABLED':\n\t\t\t\tmessage = \"Cache is not enabled, so it can't be disabled!\"\n\t\t\t\tbreak\n\n\t\t\tcase 'DOCKER_NOT_STARTED':\n\t\t\t\tmessage = 'Docker has not been started! Start it and try again!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_TEMPLATE_ITEM_BUILDING_FAILED':\n\t\t\t\tmessage = `Failed to build schema template item for '${namesUtil.toPascal(\n\t\t\t\t\toptions.schemaNamespace\n\t\t\t\t)}.${options.schemaId}'. The field I had an issue on was '${\n\t\t\t\t\toptions.fieldName\n\t\t\t\t}'. It's options are:\\n\\n${JSON.stringify(\n\t\t\t\t\toptions.fieldOptions\n\t\t\t\t)}.\\n\\nChances are you have a circular reference in your schemas. You'll need to extract shared fields to a new file and have your schemas mix those in, vs referencing eath other.`\n\t\t\t\tbreak\n\n\t\t\tcase 'ACTION_CANCELLED':\n\t\t\t\tmessage = 'A Action cancelled just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'TRANSPORT_ALREADY_EXISTS':\n\t\t\t\tmessage = `A transport named '${options.name}' already exists!`\n\t\t\t\tbreak\n\n\t\t\tdefault:\n\t\t\t\tmessage = super.friendlyMessage()\n\t\t}\n\n\t\treturn message\n\t}\n\n\tprivate cleanStdErr(stderr: string) {\n\t\treturn stderr.replace('warning package.json: No license field', '').trim()\n\t}\n}\n"],"file":"SpruceError.js"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.ENABLE_NPM_CACHE_COMMAND = exports.DISABLE_NPM_CACHE_COMMAND = void 0;
|
|
7
7
|
var ENABLE_NPM_CACHE_COMMAND = 'npm config set registry http://localhost:28080 && npm config set @sprucelabs:registry https://registry.npmjs.org && docker run --name npm-proxy-redis -d redis && docker run -e REDIS_ADDRESS=redis:6379 -p 28080:8080 -it --link npm-proxy-redis:redis --name npm-proxy -d pkgems/npm-cache-proxy';
|
|
8
8
|
exports.ENABLE_NPM_CACHE_COMMAND = ENABLE_NPM_CACHE_COMMAND;
|
|
9
9
|
var DISABLE_NPM_CACHE_COMMAND = 'npm config set registry https://registry.npmjs.org && docker stop npm-proxy-redis ; docker stop npm-proxy ; docker rm npm-proxy-redis ; docker rm npm-proxy';
|
|
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.generateEventContractFileName = generateEventContractFileName;
|
|
9
8
|
exports["default"] = void 0;
|
|
9
|
+
exports.generateEventContractFileName = generateEventContractFileName;
|
|
10
10
|
|
|
11
11
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
12
12
|
|
|
@@ -5,9 +5,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.renderDoors = renderDoors;
|
|
9
8
|
exports.chooseOnboardingAdventure = chooseOnboardingAdventure;
|
|
10
9
|
exports["default"] = void 0;
|
|
10
|
+
exports.renderDoors = renderDoors;
|
|
11
11
|
|
|
12
12
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
13
|
|
|
@@ -5,9 +5,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.renderEnter = renderEnter;
|
|
9
|
-
exports.renderCommand = renderCommand;
|
|
10
8
|
exports["default"] = void 0;
|
|
9
|
+
exports.renderCommand = renderCommand;
|
|
10
|
+
exports.renderEnter = renderEnter;
|
|
11
11
|
|
|
12
12
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
13
|
|
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports["default"] =
|
|
8
|
+
exports.optionsSchema = exports["default"] = void 0;
|
|
9
9
|
|
|
10
10
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
11
|
|
|
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.generateSkillSummaryLines = generateSkillSummaryLines;
|
|
9
8
|
exports["default"] = void 0;
|
|
9
|
+
exports.generateSkillSummaryLines = generateSkillSummaryLines;
|
|
10
10
|
|
|
11
11
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
12
12
|
|
|
@@ -226,7 +226,7 @@ var TestReporter = /*#__PURE__*/function () {
|
|
|
226
226
|
value: function updateOrientation() {
|
|
227
227
|
var frame = this.window.getFrame();
|
|
228
228
|
|
|
229
|
-
if (frame.width * 0.
|
|
229
|
+
if (frame.width * 0.5 > frame.height) {
|
|
230
230
|
this.orientation = 'landscape';
|
|
231
231
|
} else {
|
|
232
232
|
this.orientation = 'portrait';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/features/test/TestReporter.ts"],"names":["TestReporter","options","totalTestFiles","customErrors","cwd","filterPattern","handleRestart","handleStartStop","handleQuit","handleRerunTestFile","handleOpenTestFile","handleFilterChange","handleFilterPatternChange","status","handleToggleDebug","handletoggleStandardWatch","isDebugging","watchMode","handleToggleSmartWatch","errorLogItemGenerator","TestLogItemGenerator","widgetFactory","WidgetFactory","pattern","filterInput","setValue","clearFilterPatternButton","setText","buildPatternButtonText","menu","setTextForItem","durationSec","clearInterval","countDownTimeInterval","undefined","remaining","renderCountdownTime","time","setWatchLabel","setInterval","stopCountdownTimer","setWatchMode","label","isWatching","started","window","Widget","hideCursor","getFrame","width","minWidth","Error","on","handleGlobalKeypress","bind","destroy","handleWindowResize","dropInTopLayout","dropInProgressBar","dropInMenu","dropInBottomLayout","dropInStatusBar","dropInTestLog","dropInFilterControls","updateOrientation","setIsDebugging","setStatus","updateInterval","handleUpdateInterval","frame","height","orientation","parent","left","top","shouldLockWidthWithParent","items","value","handleMenuSelect","updateMenuLabels","closeSelectTestPopup","bottomLayout","updateLayout","setStatusLabel","refreshResults","restartLabel","payload","lastResults","updateLogs","getFocusedWidget","key","process","exit","getChildById","testLog","isScrollEnabled","shouldLockHeightWithParent","handleClickTestLog","testFile","getFileForLine","row","column","dropInSelectTestPopup","selectTestPopup","Math","max","text","open","rerun","cancel","openTestFile","line","getScrollY","testFiles","file","path","c","tests","length","topLayout","bar","progress","buttonWidth","shouldLockRightWithParent","rows","columns","id","statusBar","shouldLockBottomWithParent","backgroundColor","foregroundColor","results","updateProgressBar","percentPassing","generatePercentPassing","percentComplete","generatePercentComplete","setTitle","resultsToLogContents","logContent","errorContent","errorLog","destroyErrorLog","dropInErrorLog","cleanedLog","replace","RegExp","forEach","generateLogItemForFile","generateErrorLogItemForFile","map","err","chalk","red","join","orientationWhenErrorLogWasShown","getRows","addRow","setRowHeight","addColumn","setColumnWidth","rowIdx","columnIdx","cell","shouldAutoScrollWhenAppendingContent","padding","removeColumn","removeRow","totalTestFilesComplete","testsRemaining","generateProgressStats","percent","totalTests","totalPassedTests","totalTime","setLabel","durationUtil","msToFriendly","setProgress","test","duration","floor","isNaN","round","totalPassed","getTotalTestFilesRun","totalSkipped","totalTodo","table","computeCells","draw","resetStartTimes","message","push"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AASA;;AAEA;;;;;;;;;;;;IA2BqBA,Y;AAyCpB,wBAAmBC,OAAnB,EAAkD;AAAA;;AAAA;AAAA,sDAxChC,KAwCgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0DAjCP;AAC1CC,MAAAA,cAAc,EAAE,CAD0B;AAE1CC,MAAAA,YAAY,EAAE;AAF4B,KAiCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0DAnB5B,KAmB4B;AAAA,wDAlBnB,KAkBmB;AAAA,qDAjBf,OAiBe;AAAA;AAAA;AAAA,0DAdH,WAcG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uDAH/B,EAG+B;AAAA,8EAFiB,WAEjB;AACjD,SAAKC,GAAL,GAAWH,OAAX,aAAWA,OAAX,uBAAWA,OAAO,CAAEG,GAApB;AACA,SAAKC,aAAL,GAAqBJ,OAArB,aAAqBA,OAArB,uBAAqBA,OAAO,CAAEI,aAA9B;AACA,SAAKC,aAAL,GAAqBL,OAArB,aAAqBA,OAArB,uBAAqBA,OAAO,CAAEK,aAA9B;AACA,SAAKC,eAAL,GAAuBN,OAAvB,aAAuBA,OAAvB,uBAAuBA,OAAO,CAAEM,eAAhC;AACA,SAAKC,UAAL,GAAkBP,OAAlB,aAAkBA,OAAlB,uBAAkBA,OAAO,CAAEO,UAA3B;AACA,SAAKC,mBAAL,GAA2BR,OAA3B,aAA2BA,OAA3B,uBAA2BA,OAAO,CAAEQ,mBAApC;AACA,SAAKC,kBAAL,GAA0BT,OAA1B,aAA0BA,OAA1B,uBAA0BA,OAAO,CAAES,kBAAnC;AACA,SAAKC,kBAAL,GAA0BV,OAA1B,aAA0BA,OAA1B,uBAA0BA,OAAO,CAAEW,yBAAnC;AACA,SAAKC,MAAL,sBAAcZ,OAAd,aAAcA,OAAd,uBAAcA,OAAO,CAAEY,MAAvB,6DAAiC,OAAjC;AACA,SAAKC,iBAAL,GAAyBb,OAAzB,aAAyBA,OAAzB,uBAAyBA,OAAO,CAAEa,iBAAlC;AACA,SAAKC,yBAAL,GAAiCd,OAAjC,aAAiCA,OAAjC,uBAAiCA,OAAO,CAAEc,yBAA1C;AACA,SAAKC,WAAL,2BAAmBf,OAAnB,aAAmBA,OAAnB,uBAAmBA,OAAO,CAAEe,WAA5B,uEAA2C,KAA3C;AACA,SAAKC,SAAL,yBAAiBhB,OAAjB,aAAiBA,OAAjB,uBAAiBA,OAAO,CAAEgB,SAA1B,mEAAuC,KAAvC;AACA,SAAKC,sBAAL,GAA8BjB,OAA9B,aAA8BA,OAA9B,uBAA8BA,OAAO,CAAEiB,sBAAvC;AAEA,SAAKC,qBAAL,GAA6B,IAAIC,gCAAJ,EAA7B;AACA,SAAKC,aAAL,GAAqB,IAAIC,yBAAJ,EAArB;AACA;;;;WAED,0BAAwBC,OAAxB,EAAqD;AACpD,WAAKlB,aAAL,GAAqBkB,OAArB;AACA,WAAKC,WAAL,CAAiBC,QAAjB,CAA0BF,OAA1B,aAA0BA,OAA1B,cAA0BA,OAA1B,GAAqC,EAArC;AACA,WAAKG,wBAAL,CAA8BC,OAA9B,CAAsCC,sBAAsB,CAACL,OAAD,CAA5D;AACA;;;WAED,wBAAsBP,WAAtB,EAA4C;AAC3C,WAAKa,IAAL,CAAUC,cAAV,CACC,aADD,mBAEWd,WAAW,GAAG,GAAH,GAAS,GAF/B,gBAEwCA,WAAW,GAAG,GAAH,GAAS,GAF5D,SAGEA,WAAW,GAAG,KAAH,GAAW,KAHxB;AAMA,WAAKA,WAAL,GAAmBA,WAAnB;AACA;;;WAED,6BAA2Be,WAA3B,EAAgD;AAAA;;AAC/CC,MAAAA,aAAa,CAAC,KAAKC,qBAAN,CAAb;AACA,WAAKA,qBAAL,GAA6BC,SAA7B;AAEA,UAAIC,SAAS,GAAGJ,WAAhB;;AAEA,eAASK,mBAAT,CAA6BC,IAA7B,EAA2C;AAC1C,kCAAmBA,IAAnB;AACA;;AAED,WAAKC,aAAL,CAAmBF,mBAAmB,CAACD,SAAD,CAAtC;AAEA,WAAKF,qBAAL,GAA6BM,WAAW,CAAC,YAAM;AAC9CJ,QAAAA,SAAS;;AAET,YAAIA,SAAS,GAAG,CAAhB,EAAmB;AAClB,UAAA,KAAI,CAACK,kBAAL;AACA,SAFD,MAEO;AACN,UAAA,KAAI,CAACF,aAAL,CAAmBF,mBAAmB,CAACD,SAAD,CAAtC;AACA;AACD,OARuC,EAQrC,IARqC,CAAxC;AASA;;;WAED,8BAA4B;AAC3BH,MAAAA,aAAa,CAAC,KAAKC,qBAAN,CAAb;AACA,WAAKA,qBAAL,GAA6BC,SAA7B;AACA,WAAKO,YAAL,CAAkB,KAAKxB,SAAvB;AACA;;;WAED,sBAAoBA,SAApB,EAA0C;AACzC,WAAKA,SAAL,GAAiBA,SAAjB;;AACA,UAAI,CAAC,KAAKgB,qBAAV,EAAiC;AAChC,YAAIS,KAAK,GAAGzB,SAAS,KAAK,OAAd,GAAwB,aAAxB,GAAwC,gBAApD;;AACA,YAAIA,SAAS,KAAK,KAAlB,EAAyB;AACxByB,UAAAA,KAAK,GAAG,cAAR;AACA;;AACD,aAAKJ,aAAL,CAAmBI,KAAnB;AACA;AACD;;;WAED,uBAAsBA,KAAtB,EAAqC;AACpC,UAAMC,UAAU,GAAG,KAAK1B,SAAL,KAAmB,KAAtC;AAEA,WAAKY,IAAL,CAAUC,cAAV,CACC,eADD,YAEIY,KAFJ,eAEcC,UAAU,GAAG,GAAH,GAAS,GAFjC,gBAE0CA,UAAU,GAAG,GAAH,GAAS,GAF7D,SAGEA,UAAU,GAAG,KAAH,GAAW,KAHvB;AAOA,WAAKd,IAAL,CAAUC,cAAV,CACC,qBADD,EAEC,KAAKb,SAAL,KAAmB,UAAnB,GAAgC,YAAhC,GAA+C,UAFhD;AAKA,WAAKY,IAAL,CAAUC,cAAV,CACC,kBADD,EAEC,KAAKb,SAAL,KAAmB,OAAnB,GAA6B,SAA7B,GAAyC,OAF1C;AAIA;;;;iGAED;AAAA;;AAAA;AAAA;AAAA;AAAA;AACC,qBAAK2B,OAAL,GAAe,IAAf;AAEA,qBAAKC,MAAL,GAAc,KAAKxB,aAAL,CAAmByB,MAAnB,CAA0B,QAA1B,EAAoC,EAApC,CAAd;AACA,qBAAKD,MAAL,CAAYE,UAAZ;AAJD,wCAMmB,KAAKF,MAAL,CAAYG,QAAZ,EANnB,EAMSC,KANT,yBAMSA,KANT;;AAAA,sBAOKA,KAAK,GAAG,KAAKC,QAPlB;AAAA;AAAA;AAAA;;AAAA,sBAQQ,IAAIC,KAAJ,wCAC2B,KAAKD,QADhC,uBARR;;AAAA;AAaC,qBAAK,KAAKL,MAAL,CAAYO,EAAZ,CAAe,KAAf,EAAsB,KAAKC,oBAAL,CAA0BC,IAA1B,CAA+B,IAA/B,CAAtB,CAAL;AACA,qBAAK,KAAKT,MAAL,CAAYO,EAAZ,CAAe,MAAf,EAAuB,KAAKG,OAAL,CAAaD,IAAb,CAAkB,IAAlB,CAAvB,CAAL;AACA,qBAAK,KAAKT,MAAL,CAAYO,EAAZ,CAAe,QAAf,EAAyB,KAAKI,kBAAL,CAAwBF,IAAxB,CAA6B,IAA7B,CAAzB,CAAL;AAEA,qBAAKG,eAAL;AACA,qBAAKC,iBAAL;AACA,qBAAKC,UAAL;AACA,qBAAKC,kBAAL;AACA,qBAAKC,eAAL;AACA,qBAAKC,aAAL;AACA,qBAAKC,oBAAL;AAEA,qBAAKC,iBAAL;AAEA,qBAAKC,cAAL,CAAoB,KAAKjD,WAAzB;AACA,qBAAKyB,YAAL,CAAkB,KAAKxB,SAAvB;AACA,qBAAKiD,SAAL,CAAe,KAAKrD,MAApB;AAEA,qBAAKsD,cAAL,GAAsB5B,WAAW,CAChC,KAAK6B,oBAAL,CAA0Bd,IAA1B,CAA+B,IAA/B,CADgC,EAEhC,IAFgC,CAAjC;;AA/BD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAqCA,8BAA6B;AAC5B,WAAKU,iBAAL;AACA;;;WAED,6BAA4B;AAC3B,UAAMK,KAAK,GAAG,KAAKxB,MAAL,CAAYG,QAAZ,EAAd;;AAEA,UAAIqB,KAAK,CAACpB,KAAN,GAAc,GAAd,GAAoBoB,KAAK,CAACC,MAA9B,EAAsC;AACrC,aAAKC,WAAL,GAAmB,WAAnB;AACA,OAFD,MAEO;AACN,aAAKA,WAAL,GAAmB,UAAnB;AACA;AACD;;;WAED,sBAAqB;AACpB,WAAK1C,IAAL,GAAY,KAAKR,aAAL,CAAmByB,MAAnB,CAA0B,SAA1B,EAAqC;AAChD0B,QAAAA,MAAM,EAAE,KAAK3B,MADmC;AAEhD4B,QAAAA,IAAI,EAAE,CAF0C;AAGhDC,QAAAA,GAAG,EAAE,CAH2C;AAIhDC,QAAAA,yBAAyB,EAAE,IAJqB;AAKhDC,QAAAA,KAAK,EAAE,CACN;AACClC,UAAAA,KAAK,EAAE,YADR;AAECmC,UAAAA,KAAK,EAAE;AAFR,SADM,EAKN;AACCnC,UAAAA,KAAK,EAAE,WADR;AAECmC,UAAAA,KAAK,EAAE;AAFR,SALM,EASN;AACCnC,UAAAA,KAAK,EAAE,iBADR;AAECmC,UAAAA,KAAK,EAAE,eAFR;AAGCD,UAAAA,KAAK,EAAE,CACN;AACClC,YAAAA,KAAK,EAAE,WADR;AAECmC,YAAAA,KAAK,EAAE;AAFR,WADM,EAKN;AACCnC,YAAAA,KAAK,EAAE,aADR;AAECmC,YAAAA,KAAK,EAAE;AAFR,WALM;AAHR,SATM,EAuBN;AACCnC,UAAAA,KAAK,EAAE,MADR;AAECmC,UAAAA,KAAK,EAAE;AAFR,SAvBM;AALyC,OAArC,CAAZ;AAmCA,WAAK,KAAKhD,IAAL,CAAUuB,EAAV,CAAa,QAAb,EAAuB,KAAK0B,gBAAL,CAAsBxB,IAAtB,CAA2B,IAA3B,CAAvB,CAAL;AACA;;;WAED,mBAAiBzC,MAAjB,EAA2C;AAC1C,WAAKA,MAAL,GAAcA,MAAd;AAEA,WAAKkE,gBAAL;AACA,WAAKC,oBAAL;AACA,WAAKC,YAAL,CAAkBC,YAAlB;;AAEA,UAAIrE,MAAM,KAAK,OAAf,EAAwB;AACvB,aAAKsE,cAAL,CAAoB,aAApB;AACA,OAFD,MAEO,IAAI,KAAKtE,MAAL,KAAgB,SAApB,EAA+B;AACrC,aAAKuE,cAAL;AACA,aAAKD,cAAL,CAAoB,EAApB;AACA,OAHM,MAGA,IAAI,KAAKtE,MAAL,KAAgB,SAApB,EAA+B;AACrC,aAAKsE,cAAL,CAAoB,kBAApB;AACA;AACD;;;WAED,4BAA2B;AAC1B,UAAIE,YAAY,GAAG,gBAAnB;;AACA,cAAQ,KAAKxE,MAAb;AACC,aAAK,SAAL;AACCwE,UAAAA,YAAY,GAAG,mBAAf;AACA;;AACD,aAAK,SAAL;AACCA,UAAAA,YAAY,2BAAZ;AACA;;AACD,aAAK,OAAL;AACCA,UAAAA,YAAY,GAAG,kBAAf;AACA;AATF;;AAYA,WAAKxD,IAAL,CAAUC,cAAV,CAAyB,SAAzB,EAAoCuD,YAApC;AACA;;;WAED,0BAAyBC,OAAzB,EAAqD;AAAA;;AACpD,cAAQA,OAAO,CAACT,KAAhB;AACC,aAAK,MAAL;AACC,mCAAKrE,UAAL;AACA;;AACD,aAAK,SAAL;AACC,wCAAKD,eAAL;AACA;;AACD,aAAK,aAAL;AACC,wCAAKO,iBAAL;AACA;;AACD,aAAK,qBAAL;AACC,wCAAKC,yBAAL;AACA;;AACD,aAAK,kBAAL;AACC,wCAAKG,sBAAL;AACA;AAfF;AAiBA;;;WAED,gCAA+B;AAC9B,UAAI,KAAKL,MAAL,KAAgB,SAApB,EAA+B;AAC9B,aAAKuE,cAAL;AACA;AACD;;;WAED,0BAAyB;AACxB,UAAI,KAAKG,WAAT,EAAsB;AACrB,aAAKC,UAAL;AACA;AACD;;;;gHAED,kBAAmCF,OAAnC;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,sBACK,KAAKzC,MAAL,CAAY4C,gBAAZ,OAAmC,KAAKjE,WAD7C;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,+BAKS8D,OAAO,CAACI,GALjB;AAAA,kDAMO,OANP,wBASO,QATP;AAAA;;AAAA;AAOG,4CAAKpF,aAAL;AAPH;;AAAA;AAUG,0CAAKE,UAAL;AACAmF,gBAAAA,OAAO,CAACC,IAAR;AAXH;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAgBA,yBAAwB;AACvB,UAAMpB,MAAM,GAAG,KAAKS,YAAL,CAAkBY,YAAlB,CAA+B,SAA/B,CAAf;;AAEA,UAAIrB,MAAJ,EAAY;AACX,aAAKsB,OAAL,GAAe,KAAKzE,aAAL,CAAmByB,MAAnB,CAA0B,MAA1B,EAAkC;AAChD0B,UAAAA,MAAM,EAANA,MADgD;AAEhDuB,UAAAA,eAAe,EAAE,IAF+B;AAGhDtB,UAAAA,IAAI,EAAE,CAH0C;AAIhDC,UAAAA,GAAG,EAAE,CAJ2C;AAKhDJ,UAAAA,MAAM,EAAE,MALwC;AAMhDrB,UAAAA,KAAK,EAAE,MANyC;AAOhD+C,UAAAA,0BAA0B,EAAE,IAPoB;AAQhDrB,UAAAA,yBAAyB,EAAE;AARqB,SAAlC,CAAf;AAWA,aAAK,KAAKmB,OAAL,CAAa1C,EAAb,CAAgB,OAAhB,EAAyB,KAAK6C,kBAAL,CAAwB3C,IAAxB,CAA6B,IAA7B,CAAzB,CAAL;AACA;AACD;;;;8GAED,kBAAiCgC,OAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AACOY,gBAAAA,QADP,GACkB,KAAKC,cAAL,CAAoBb,OAAO,CAACc,GAA5B,CADlB;AAESA,gBAAAA,GAFT,GAEyBd,OAFzB,CAESc,GAFT,EAEcC,MAFd,GAEyBf,OAFzB,CAEce,MAFd;AAIC,qBAAKrB,oBAAL;;AAEA,oBAAIkB,QAAJ,EAAc;AACb,uBAAKI,qBAAL,CAA2B;AAAEJ,oBAAAA,QAAQ,EAARA,QAAF;AAAYG,oBAAAA,MAAM,EAANA,MAAZ;AAAoBD,oBAAAA,GAAG,EAAHA;AAApB,mBAA3B;AACA;;AARF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAWA,gCAA+B;AAC9B,UAAI,KAAKG,eAAT,EAA0B;AACzB,aAAK,KAAKA,eAAL,CAAqBhD,OAArB,EAAL;AACA,aAAKgD,eAAL,GAAuBrE,SAAvB;AACA;AACD;;;WAED,+BAA8BjC,OAA9B,EAIG;AAAA;;AACF,UAAQiG,QAAR,GAAkCjG,OAAlC,CAAQiG,QAAR;AAAA,UAAkBE,GAAlB,GAAkCnG,OAAlC,CAAkBmG,GAAlB;AAAA,UAAuBC,MAAvB,GAAkCpG,OAAlC,CAAuBoG,MAAvB;AAEA,WAAKE,eAAL,GAAuB,KAAKlF,aAAL,CAAmByB,MAAnB,CAA0B,OAA1B,EAAmC;AACzD0B,QAAAA,MAAM,EAAE,KAAK3B,MAD4C;AAEzD4B,QAAAA,IAAI,EAAE+B,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYJ,MAAM,GAAG,EAArB,CAFmD;AAGzD3B,QAAAA,GAAG,EAAE8B,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYL,GAAG,GAAG,CAAlB,CAHoD;AAIzDnD,QAAAA,KAAK,EAAE,EAJkD;AAKzDqB,QAAAA,MAAM,EAAE;AALiD,OAAnC,CAAvB;AAQA,WAAKjD,aAAL,CAAmByB,MAAnB,CAA0B,MAA1B,EAAkC;AACjC0B,QAAAA,MAAM,EAAE,KAAK+B,eADoB;AAEjC9B,QAAAA,IAAI,EAAE,CAF2B;AAGjCC,QAAAA,GAAG,EAAE,CAH4B;AAIjCJ,QAAAA,MAAM,EAAE,CAJyB;AAKjCrB,QAAAA,KAAK,EAAE,KAAKsD,eAAL,CAAqBvD,QAArB,GAAgCC,KAAhC,GAAwC,CALd;AAMjCyD,QAAAA,IAAI,0CAAmCR,QAAnC;AAN6B,OAAlC;AASA,UAAMS,IAAI,GAAG,KAAKtF,aAAL,CAAmByB,MAAnB,CAA0B,QAA1B,EAAoC;AAChD0B,QAAAA,MAAM,EAAE,KAAK+B,eADmC;AAEhD9B,QAAAA,IAAI,EAAE,CAF0C;AAGhDC,QAAAA,GAAG,EAAE,CAH2C;AAIhDgC,QAAAA,IAAI,EAAE;AAJ0C,OAApC,CAAb;AAOA,UAAME,KAAK,GAAG,KAAKvF,aAAL,CAAmByB,MAAnB,CAA0B,QAA1B,EAAoC;AACjD0B,QAAAA,MAAM,EAAE,KAAK+B,eADoC;AAEjD9B,QAAAA,IAAI,EAAE,EAF2C;AAGjDC,QAAAA,GAAG,EAAE,CAH4C;AAIjDgC,QAAAA,IAAI,EAAE;AAJ2C,OAApC,CAAd;AAOA,UAAMG,MAAM,GAAG,KAAKxF,aAAL,CAAmByB,MAAnB,CAA0B,QAA1B,EAAoC;AAClD0B,QAAAA,MAAM,EAAE,KAAK+B,eADqC;AAElD9B,QAAAA,IAAI,EAAE,EAF4C;AAGlDC,QAAAA,GAAG,EAAE,CAH6C;AAIlDgC,QAAAA,IAAI,EAAE;AAJ4C,OAApC,CAAf;AAOA,WAAKE,KAAK,CAACxD,EAAN,CAAS,OAAT,EAAkB,YAAM;AAAA;;AAC5B,iCAAA,MAAI,CAAC3C,mBAAL,qFAAA,MAAI,EAAuByF,QAAvB,CAAJ;;AACA,QAAA,MAAI,CAAClB,oBAAL;AACA,OAHI,CAAL;AAIA,WAAK6B,MAAM,CAACzD,EAAP,CAAU,OAAV,EAAmB,KAAK4B,oBAAL,CAA0B1B,IAA1B,CAA+B,IAA/B,CAAnB,CAAL;AACA,WAAKqD,IAAI,CAACvD,EAAL,CAAQ,OAAR,EAAiB,YAAM;AAC3B,QAAA,MAAI,CAAC0D,YAAL,CAAkBZ,QAAlB;AACA,OAFI,CAAL;AAGA;;;WAED,sBAAqBA,QAArB,EAAuC;AAAA;;AACtC,oCAAKxF,kBAAL,2FAA0BwF,QAA1B;AACA,WAAKlB,oBAAL;AACA;;;WAED,wBAAsBoB,GAAtB,EAAuD;AAAA;;AACtD,UAAIW,IAAI,GAAG,KAAKjB,OAAL,CAAakB,UAAb,EAAX;;AADsD,0EAGrC,KAAKzB,WAAL,CAAiB0B,SAHoB,yEAGP,EAHO;AAAA;;AAAA;AAGtD,4DAAmD;AAAA,cAA1CC,IAA0C;;AAClD,cAAIH,IAAI,KAAKX,GAAb,EAAkB;AACjB,mBAAOc,IAAI,CAACC,IAAZ;AACA;;AAEDJ,UAAAA,IAAI;;AAEJ,eAAK,IAAIK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,gBAACF,IAAI,CAACG,KAAN,qDAAe,EAAf,EAAmBC,MAAvC,EAA+CF,CAAC,EAAhD,EAAoD;AAAA;;AACnD,gBAAIL,IAAI,KAAKX,GAAb,EAAkB;AACjB,qBAAOc,IAAI,CAACC,IAAZ;AACA;;AAEDJ,YAAAA,IAAI;AACJ;AACD;AAjBqD;AAAA;AAAA;AAAA;AAAA;;AAmBtD,aAAO7E,SAAP;AACA;;;WAED,6BAA4B;AAAA;;AAC3B,UAAMsC,MAAM,4BAAG,KAAK+C,SAAL,CAAe1B,YAAf,CAA4B,UAA5B,CAAH,yEAA8C,KAAKhD,MAA/D;AACA,WAAK2E,GAAL,GAAW,KAAKnG,aAAL,CAAmByB,MAAnB,CAA0B,aAA1B,EAAyC;AACnD0B,QAAAA,MAAM,EAANA,MADmD;AAEnDC,QAAAA,IAAI,EAAE,CAF6C;AAGnDC,QAAAA,GAAG,EAAE,CAH8C;AAInDzB,QAAAA,KAAK,EAAEuB,MAAM,CAACxB,QAAP,GAAkBC,KAJ0B;AAKnD0B,QAAAA,yBAAyB,EAAE,IALwB;AAMnDjC,QAAAA,KAAK,EAAE,sBAN4C;AAOnD+E,QAAAA,QAAQ,EAAE;AAPyC,OAAzC,CAAX;AASA;;;WAED,gCAA+B;AAAA;AAAA;;AAC9B,UAAMjD,MAAM,6BAAG,KAAK+C,SAAL,CAAe1B,YAAf,CAA4B,QAA5B,CAAH,2EAA4C,KAAKhD,MAA7D;AAEA,UAAM6E,WAAW,GAAG,CAApB;AACA,WAAKlG,WAAL,GAAmB,KAAKH,aAAL,CAAmByB,MAAnB,CAA0B,OAA1B,EAAmC;AACrD0B,QAAAA,MAAM,EAANA,MADqD;AAErDC,QAAAA,IAAI,EAAE,CAF+C;AAGrD/B,QAAAA,KAAK,EAAE,SAH8C;AAIrDO,QAAAA,KAAK,EAAEuB,MAAM,CAACxB,QAAP,GAAkBC,KAAlB,GAA0ByE,WAJoB;AAKrDpD,QAAAA,MAAM,EAAE,CAL6C;AAMrDK,QAAAA,yBAAyB,EAAE,IAN0B;AAOrDE,QAAAA,KAAK,EAAE,KAAKxE;AAPyC,OAAnC,CAAnB;AAUA,WAAK,KAAKmB,WAAL,CAAiB4B,EAAjB,CAAoB,QAApB,EAA8B,YAAM;AAAA;;AACxC,QAAA,MAAI,CAAC5B,WAAL,CAAiBC,QAAjB,yBAA0B,MAAI,CAACpB,aAA/B,uEAAgD,EAAhD;AACA,OAFI,CAAL;AAIA,WAAK,KAAKmB,WAAL,CAAiB4B,EAAjB,CAAoB,QAApB,EAA8B,UAACkC,OAAD,EAAa;AAAA;;AAC/C,iCAAA,MAAI,CAAC3E,kBAAL,qFAAA,MAAI,oBAAsB2E,OAAO,CAACT,KAA9B,2DAAuC3C,SAAvC,CAAJ;AACA,OAFI,CAAL;AAIA,WAAKR,wBAAL,GAAgC,KAAKL,aAAL,CAAmByB,MAAnB,CAA0B,QAA1B,EAAoC;AACnE0B,QAAAA,MAAM,EAANA,MADmE;AAEnEC,QAAAA,IAAI,EAAE,KAAKjD,WAAL,CAAiBwB,QAAjB,GAA4BC,KAFiC;AAGnEA,QAAAA,KAAK,EAAEyE,WAH4D;AAInEhD,QAAAA,GAAG,EAAE,CAJ8D;AAKnEgC,QAAAA,IAAI,EAAE9E,sBAAsB,CAAC,KAAKvB,aAAN,CALuC;AAMnEsH,QAAAA,yBAAyB,EAAE;AANwC,OAApC,CAAhC;AASA,WAAK,KAAKjG,wBAAL,CAA8B0B,EAA9B,CAAiC,OAAjC,EAA0C,YAAM;AAAA;;AACpD,YAAI,MAAI,CAAC/C,aAAL,IAAsB,0BAAA,MAAI,CAACA,aAAL,gFAAoBiH,MAApB,MAA+B,CAAzD,EAA4D;AAAA;;AAC3D,oCAAA,MAAI,CAAC3G,kBAAL,uFAAA,MAAI,EAAsBuB,SAAtB,CAAJ;AACA,SAFD,MAEO;AACN,UAAA,MAAI,CAACV,WAAL,CAAiBC,QAAjB,CAA0B,EAA1B;AACA;AACD,OANI,CAAL;AAOA;;;WAED,8BAA6B;AAC5B,WAAKwD,YAAL,GAAoB,KAAK5D,aAAL,CAAmByB,MAAnB,CAA0B,QAA1B,EAAoC;AACvD0B,QAAAA,MAAM,EAAE,KAAK3B,MAD0C;AAEvDI,QAAAA,KAAK,EAAE,MAFgD;AAGvDyB,QAAAA,GAAG,EAAE,CAHkD;AAIvDJ,QAAAA,MAAM,EAAE,KAAKzB,MAAL,CAAYG,QAAZ,GAAuBsB,MAAvB,GAAgC,CAJe;AAKvDK,QAAAA,yBAAyB,EAAE,IAL4B;AAMvDqB,QAAAA,0BAA0B,EAAE,IAN2B;AAOvD4B,QAAAA,IAAI,EAAE,CACL;AACCtD,UAAAA,MAAM,EAAE,MADT;AAECuD,UAAAA,OAAO,EAAE,CACR;AACCC,YAAAA,EAAE,EAAE,SADL;AAEC7E,YAAAA,KAAK,EAAE;AAFR,WADQ;AAFV,SADK;AAPiD,OAApC,CAApB;AAmBA;;;WAED,2BAA0B;AACzB,WAAK8E,SAAL,GAAiB,KAAK1G,aAAL,CAAmByB,MAAnB,CAA0B,MAA1B,EAAkC;AAClD0B,QAAAA,MAAM,EAAE,KAAK3B,MADqC;AAElD6B,QAAAA,GAAG,EAAE,KAAK7B,MAAL,CAAYG,QAAZ,GAAuBsB,MAAvB,GAAgC,CAFa;AAGlDrB,QAAAA,KAAK,EAAE,MAH2C;AAIlD0B,QAAAA,yBAAyB,EAAE,IAJuB;AAKlDqD,QAAAA,0BAA0B,EAAE,IALsB;AAMlDC,QAAAA,eAAe,EAAE,QANiC;AAOlDC,QAAAA,eAAe,EAAE,OAPiC;AAQlDxB,QAAAA,IAAI,EAAE;AAR4C,OAAlC,CAAjB;AAUA;;;WAED,2BAA0B;AACzB,WAAKa,SAAL,GAAiB,KAAKlG,aAAL,CAAmByB,MAAnB,CAA0B,QAA1B,EAAoC;AACpD0B,QAAAA,MAAM,EAAE,KAAK3B,MADuC;AAEpDI,QAAAA,KAAK,EAAE,MAF6C;AAGpDyB,QAAAA,GAAG,EAAE,CAH+C;AAIpDJ,QAAAA,MAAM,EAAE,CAJ4C;AAKpDK,QAAAA,yBAAyB,EAAE,IALyB;AAMpDqB,QAAAA,0BAA0B,EAAE,KANwB;AAOpD4B,QAAAA,IAAI,EAAE,CACL;AACCtD,UAAAA,MAAM,EAAE,MADT;AAECuD,UAAAA,OAAO,EAAE,CACR;AACCC,YAAAA,EAAE,EAAE,UADL;AAEC7E,YAAAA,KAAK,EAAE;AAFR,WADQ,EAKR;AACC6E,YAAAA,EAAE,EAAE;AADL,WALQ;AAFV,SADK;AAP8C,OAApC,CAAjB;AAsBA;;;WAED,uBAAqBK,OAArB,EAAiD;AAChD,UAAI,CAAC,KAAKvF,OAAV,EAAmB;AAClB,cAAM,IAAIO,KAAJ,CAAU,6CAAV,CAAN;AACA;;AAED,WAAKoC,WAAL,mCACI,KAAKA,WADT,GAEI4C,OAFJ;AAKA,WAAKC,iBAAL,CAAuBD,OAAvB;AAEA,UAAME,cAAc,GAAG,KAAKC,sBAAL,CAA4BH,OAA5B,CAAvB;AACA,UAAMI,eAAe,GAAG,KAAKC,uBAAL,CAA6BL,OAA7B,CAAxB;AAEA,WAAKtF,MAAL,CAAY4F,QAAZ,oBACaF,eADb,wBAEEA,eAAe,GAAG,CAAlB,cAA0BF,cAA1B,kBAAuD,EAFzD;AAMA,WAAK7C,UAAL;AACA;;;WAED,sBAAqB;AACpB,UAAI,KAAKe,eAAT,EAA0B;AACzB;AACA;;AAED,kCAAmC,KAAKmC,oBAAL,CAClC,KAAKnD,WAD6B,CAAnC;AAAA,UAAMoD,UAAN,yBAAMA,UAAN;AAAA,UAAkBC,YAAlB,yBAAkBA,YAAlB;;AAIA,WAAK9C,OAAL,CAAanE,OAAb,CAAqBgH,UAArB;;AAEA,UAAI,CAACC,YAAL,EAAmB;AAClB,aAAKC,QAAL,IAAiB,KAAKC,eAAL,EAAjB;AACA,OAFD,MAEO;AAAA;;AACN,SAAC,KAAKD,QAAN,IAAkB,KAAKE,cAAL,EAAlB;AACA,YAAMC,UAAU,GAAG,KAAK5I,GAAL,GAChBwI,YAAY,CAACK,OAAb,CAAqB,IAAIC,MAAJ,CAAW,KAAK9I,GAAL,GAAW,GAAtB,EAA2B,KAA3B,CAArB,EAAwD,EAAxD,CADgB,GAEhBwI,YAFH;AAIA,+BAAKC,QAAL,kEAAelH,OAAf,CAAuBqH,UAAvB;AACA;AACD;;;WAED,8BAA6Bb,OAA7B,EAAyD;AAAA;AAAA;;AACxD,UAAIQ,UAAU,GAAG,EAAjB;AACA,UAAIC,YAAY,GAAG,EAAnB;AAEA,4BAAAT,OAAO,CAAClB,SAAR,0EAAmBkC,OAAnB,CAA2B,UAACjC,IAAD,EAAU;AACpCyB,QAAAA,UAAU,IAAI,MAAI,CAACxH,qBAAL,CAA2BiI,sBAA3B,CACblC,IADa,EAEb,MAAI,CAACrG,MAFQ,CAAd;AAIA+H,QAAAA,YAAY,IACX,MAAI,CAACzH,qBAAL,CAA2BkI,2BAA3B,CAAuDnC,IAAvD,CADD;AAEA,OAPD;;AASA,UAAI,KAAK3B,WAAL,CAAiBpF,YAAjB,CAA8BmH,MAA9B,GAAuC,CAA3C,EAA8C;AAC7CsB,QAAAA,YAAY,GACX,KAAKrD,WAAL,CAAiBpF,YAAjB,CAA8BmJ,GAA9B,CAAkC,UAACC,GAAD;AAAA,iBAASC,kBAAMC,GAAN,CAAUF,GAAV,CAAT;AAAA,SAAlC,EAA2DG,IAA3D,qBACKd,YADL,CADD;AAGA;;AAED,aAAO;AAAED,QAAAA,UAAU,EAAVA,UAAF;AAAcC,QAAAA,YAAY,EAAZA;AAAd,OAAP;AACA;;;WAED,0BAAyB;AACxB,WAAKe,+BAAL,GAAuC,KAAKpF,WAA5C;;AAEA,UAAI,KAAKU,YAAL,CAAkB2E,OAAlB,GAA4BtC,MAA5B,KAAuC,CAA3C,EAA8C;AAC7C,YAAI,KAAK/C,WAAL,KAAqB,UAAzB,EAAqC;AACpC,eAAKU,YAAL,CAAkB4E,MAAlB,CAAyB;AACxB/B,YAAAA,EAAE,EAAE,OADoB;AAExBD,YAAAA,OAAO,EAAE,CAAC;AAAEC,cAAAA,EAAE,EAAE,QAAN;AAAgB7E,cAAAA,KAAK,EAAE;AAAvB,aAAD;AAFe,WAAzB;AAKA,eAAKgC,YAAL,CAAkB6E,YAAlB,CAA+B,CAA/B,EAAkC,KAAlC;AACA,eAAK7E,YAAL,CAAkB6E,YAAlB,CAA+B,CAA/B,EAAkC,KAAlC;AACA,SARD,MAQO;AACN,eAAK7E,YAAL,CAAkB8E,SAAlB,CAA4B,CAA5B,EAA+B;AAAEjC,YAAAA,EAAE,EAAE,QAAN;AAAgB7E,YAAAA,KAAK,EAAE;AAAvB,WAA/B;AACA,eAAKgC,YAAL,CAAkB+E,cAAlB,CAAiC;AAChCC,YAAAA,MAAM,EAAE,CADwB;AAEhCC,YAAAA,SAAS,EAAE,CAFqB;AAGhCjH,YAAAA,KAAK,EAAE;AAHyB,WAAjC;AAKA;;AAED,aAAKgC,YAAL,CAAkBC,YAAlB;AAEA,YAAMiF,IAAI,GAAG,KAAKlF,YAAL,CAAkBY,YAAlB,CAA+B,QAA/B,CAAb;;AAEA,YAAI,CAACsE,IAAL,EAAW;AACV,gBAAM,IAAIhH,KAAJ,CAAU,qBAAV,CAAN;AACA;;AAED,aAAK0F,QAAL,GAAgB,KAAKxH,aAAL,CAAmByB,MAAnB,CAA0B,MAA1B,EAAkC;AACjD0B,UAAAA,MAAM,EAAE2F,IADyC;AAEjDlH,UAAAA,KAAK,EAAE,MAF0C;AAGjDqB,UAAAA,MAAM,EAAE,MAHyC;AAIjDyB,UAAAA,eAAe,EAAE,IAJgC;AAKjDqE,UAAAA,oCAAoC,EAAE,KALW;AAMjDpE,UAAAA,0BAA0B,EAAE,IANqB;AAOjDrB,UAAAA,yBAAyB,EAAE,IAPsB;AAQjD0F,UAAAA,OAAO,EAAE;AAAE5F,YAAAA,IAAI,EAAE;AAAR;AARwC,SAAlC,CAAhB;AAUA;AACD;;;WAED,2BAA0B;AACzB,UAAI,KAAKoE,QAAT,EAAmB;AAAA;;AAClB,iCAAK,KAAKA,QAAV,oDAAK,gBAAetF,OAAf,EAAL;AACA,aAAKsF,QAAL,GAAgB3G,SAAhB;;AAEA,YAAI,KAAKyH,+BAAL,KAAyC,WAA7C,EAA0D;AACzD,eAAK1E,YAAL,CAAkBqF,YAAlB,CAA+B,CAA/B,EAAkC,CAAlC;AACA,eAAKrF,YAAL,CAAkB+E,cAAlB,CAAiC;AAChCC,YAAAA,MAAM,EAAE,CADwB;AAEhCC,YAAAA,SAAS,EAAE,CAFqB;AAGhCjH,YAAAA,KAAK,EAAE;AAHyB,WAAjC;AAKA,SAPD,MAOO;AACN,eAAKgC,YAAL,CAAkBsF,SAAlB,CAA4B,CAA5B;AACA,eAAKtF,YAAL,CAAkB6E,YAAlB,CAA+B,CAA/B,EAAkC,MAAlC;AACA;;AACD,aAAK7E,YAAL,CAAkBC,YAAlB;AACA;AACD;;;WAED,2BAA0BiD,OAA1B,EAAsD;AAAA;;AACrD,mCAAIA,OAAO,CAACqC,sBAAZ,yEAAsC,IAAI,CAA1C,EAA6C;AAAA;;AAC5C,YAAMC,cAAc,GACnBtC,OAAO,CAACjI,cAAR,8BAA0BiI,OAAO,CAACqC,sBAAlC,2EAA4D,CAA5D,CADD;;AAGA,YAAIC,cAAc,KAAK,CAAvB,EAA0B;AACzB,sCACC,KAAKC,qBAAL,CAA2BvC,OAA3B,CADD;AAAA,cAAQwC,OAAR,yBAAQA,OAAR;AAAA,cAAiBC,UAAjB,yBAAiBA,UAAjB;AAAA,cAA6BC,gBAA7B,yBAA6BA,gBAA7B;AAAA,cAA+CC,SAA/C,yBAA+CA,SAA/C;;AAGA,eAAKtD,GAAL,CAASuD,QAAT,qBACcF,gBADd,iBACqCD,UADrC,eACoDD,OADpD,0BAC2EK,qBAAaC,YAAb,CACzEH,SADyE,CAD3E,cAGMH,OAAO,GAAG,GAAV,oCAAuC,EAH7C;AAKA,SATD,MASO;AACN,eAAKnD,GAAL,CAASuD,QAAT,WACI5C,OAAO,CAACqC,sBADZ,iBAEErC,OAAO,CAACjI,cAFV,eAGM,KAAKsI,uBAAL,CACJL,OADI,CAHN,0BAKkBsC,cALlB;AAOA;AACD,OAtBD,MAsBO;AACN,aAAKjD,GAAL,CAASuD,QAAT,CAAkB,IAAlB;AACA;;AAED,WAAKvD,GAAL,CAAS0D,WAAT,CAAqB,KAAK1C,uBAAL,CAA6BL,OAA7B,IAAwC,GAA7D;AACA;;;WAED,+BAA8BA,OAA9B,EAKE;AAAA;;AACD,UAAIyC,UAAU,GAAG,CAAjB;AACA,UAAIC,gBAAgB,GAAG,CAAvB;AACA,UAAIC,SAAS,GAAG,CAAhB;AAEA,6BAAA3C,OAAO,CAAClB,SAAR,4EAAmBkC,OAAnB,CAA2B,UAACjC,IAAD,EAAU;AAAA;;AACpC,wBAAAA,IAAI,CAACG,KAAL,8DAAY8B,OAAZ,CAAoB,UAACgC,IAAD,EAAU;AAC7BL,UAAAA,SAAS,IAAIK,IAAI,CAACC,QAAlB;;AACA,cAAID,IAAI,CAACtK,MAAL,KAAgB,QAApB,EAA8B;AAC7BgK,YAAAA,gBAAgB;AAChB;;AAED,cAAIM,IAAI,CAACtK,MAAL,KAAgB,QAAhB,IAA4BsK,IAAI,CAACtK,MAAL,KAAgB,QAAhD,EAA0D;AACzD+J,YAAAA,UAAU;AACV;AACD,SATD;AAUA,OAXD;AAaA,UAAMD,OAAO,GAAGnE,IAAI,CAAC6E,KAAL,CAAYR,gBAAgB,GAAGD,UAApB,GAAkC,GAA7C,CAAhB;AACA,aAAO;AACND,QAAAA,OAAO,EAAEA,OAAO,GAAG,CAAV,GAAcA,OAAd,GAAwB,CAD3B;AAENC,QAAAA,UAAU,EAAVA,UAFM;AAGNC,QAAAA,gBAAgB,EAAhBA,gBAHM;AAINC,QAAAA,SAAS,EAATA;AAJM,OAAP;AAMA;;;WAED,iCAAgC3C,OAAhC,EAAoE;AAAA;;AACnE,UAAMwC,OAAO,GACZ,2BAACxC,OAAO,CAACqC,sBAAT,2EAAmC,CAAnC,IAAwCrC,OAAO,CAACjI,cADjD;;AAEA,UAAIoL,KAAK,CAACX,OAAD,CAAT,EAAoB;AACnB,eAAO,CAAP;AACA;;AACD,aAAOnE,IAAI,CAAC+E,KAAL,CAAWZ,OAAO,GAAG,GAArB,CAAP;AACA;;;WAED,gCAA+BxC,OAA/B,EAAmE;AAAA;;AAClE,UAAMwC,OAAO,GACZ,yBAACxC,OAAO,CAACqD,WAAT,uEAAwB,CAAxB,IAA6B,KAAKC,oBAAL,CAA0BtD,OAA1B,CAD9B;;AAGA,UAAImD,KAAK,CAACX,OAAD,CAAT,EAAoB;AACnB,eAAO,CAAP;AACA;;AAED,aAAOnE,IAAI,CAAC6E,KAAL,CAAWV,OAAO,GAAG,GAArB,CAAP;AACA;;;WAED,8BAA6BxC,OAA7B,EAAyD;AAAA;;AACxD,aACC,wBAACA,OAAO,CAACyC,UAAT,qEAAuB,CAAvB,8BACCzC,OAAO,CAACuD,YADT,yEACyB,CADzB,2BAECvD,OAAO,CAACwD,SAFT,mEAEsB,CAFtB,CADD;AAKA;;;WAED,kBAAgB;AAAA;;AACf,0BAAKC,KAAL,4DAAYC,YAAZ;AACA,2BAAKD,KAAL,8DAAYE,IAAZ;AACA;;;;mGAED;AAAA;AAAA;AAAA;AAAA;AACC9J,gBAAAA,aAAa,CAAC,KAAKmC,cAAN,CAAb;AADD;AAAA,uBAEO,KAAKtB,MAAL,CAAYU,OAAZ,EAFP;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAKA,iBAAe;AACd,WAAKuC,OAAL,CAAanE,OAAb,CAAqB,EAArB;AACA,WAAK4D,WAAL,GAAmB;AAClBrF,QAAAA,cAAc,EAAE,CADE;AAElBC,QAAAA,YAAY,EAAE;AAFI,OAAnB;AAIA,WAAK2I,eAAL;AACA,WAAK3H,qBAAL,CAA2B4K,eAA3B;AACA;;;WAED,wBAAsBrF,IAAtB,EAAoC;AACnC,WAAKqB,SAAL,CAAepG,OAAf,CAAuB+E,IAAvB;AACA;;;WAED,qBAAmBsF,OAAnB,EAAoC;AACnC,WAAKzG,WAAL,CAAiBpF,YAAjB,CAA8B8L,IAA9B,CAAmCD,OAAnC;AACA;;;;;;;AAEF,SAASpK,sBAAT,CAAgCL,OAAhC,EAAqE;AACpE,SAAOA,OAAO,GAAG,KAAH,GAAW,KAAzB;AACA","sourcesContent":["import chalk from 'chalk'\nimport durationUtil from '../../utilities/duration.utility'\nimport { ButtonWidget } from '../../widgets/types/button.types'\nimport { InputWidget } from '../../widgets/types/input.types'\nimport { LayoutWidget } from '../../widgets/types/layout.types'\nimport { MenuBarWidget } from '../../widgets/types/menuBar.types'\nimport { PopupWidget } from '../../widgets/types/popup.types'\nimport { ProgressBarWidget } from '../../widgets/types/progressBar.types'\nimport { TextWidget } from '../../widgets/types/text.types'\nimport { WindowWidget } from '../../widgets/types/window.types'\nimport WidgetFactory from '../../widgets/WidgetFactory'\nimport { SpruceTestResults, TestRunnerStatus } from './test.types'\nimport TestLogItemGenerator from './TestLogItemGenerator'\n\ninterface TestReporterOptions {\n\thandleStartStop?: () => void\n\thandleRestart?: () => void\n\thandleQuit?: () => void\n\tonRequestOpenTestFile?: () => void\n\thandleRerunTestFile?: (fileName: string) => void\n\thandleOpenTestFile?: (fileName: string) => void\n\thandleFilterPatternChange?: (pattern?: string) => void\n\thandleToggleDebug?: () => void\n\thandletoggleStandardWatch?: () => void\n\thandleToggleSmartWatch?: () => void\n\tfilterPattern?: string\n\tisDebugging?: boolean\n\twatchMode?: WatchMode\n\tstatus?: TestRunnerStatus\n\tcwd?: string\n}\n\ntype TestReporterResults = SpruceTestResults & {\n\tcustomErrors: string[]\n}\n\nexport type TestReporterOrientation = 'landscape' | 'portrait'\nexport type WatchMode = 'off' | 'standard' | 'smart'\n\nexport default class TestReporter {\n\tprivate started = false\n\tprivate table?: any\n\tprivate bar!: ProgressBarWidget\n\tprivate bottomLayout!: LayoutWidget\n\tprivate testLog!: TextWidget\n\tprivate errorLog?: TextWidget\n\tprivate errorLogItemGenerator: TestLogItemGenerator\n\tprivate lastResults: TestReporterResults = {\n\t\ttotalTestFiles: 0,\n\t\tcustomErrors: [],\n\t}\n\tprivate updateInterval?: any\n\tprivate menu!: MenuBarWidget\n\tprivate statusBar!: TextWidget\n\tprivate window!: WindowWidget\n\tprivate widgetFactory: WidgetFactory\n\tprivate selectTestPopup?: PopupWidget\n\tprivate topLayout!: LayoutWidget\n\tprivate filterInput!: InputWidget\n\tprivate filterPattern?: string\n\tprivate clearFilterPatternButton!: ButtonWidget\n\tprivate isDebugging = false\n\tprivate watchMode: WatchMode = 'off'\n\tprivate status: TestRunnerStatus = 'ready'\n\tprivate countDownTimeInterval?: number\n\tprivate cwd: string | undefined\n\tprivate orientation: TestReporterOrientation = 'landscape'\n\n\tprivate handleStartStop?: () => void\n\tprivate handleRestart?: () => void\n\tprivate handleQuit?: () => void\n\tprivate handleRerunTestFile?: (fileName: string) => void\n\tprivate handleFilterChange?: (pattern?: string) => void\n\tprivate handleOpenTestFile?: (testFile: string) => void\n\tprivate handleToggleDebug?: () => void\n\tprivate handletoggleStandardWatch?: () => void\n\tprivate handleToggleSmartWatch?: () => any\n\tprivate minWidth = 50\n\tprivate orientationWhenErrorLogWasShown: TestReporterOrientation = 'landscape'\n\n\tpublic constructor(options?: TestReporterOptions) {\n\t\tthis.cwd = options?.cwd\n\t\tthis.filterPattern = options?.filterPattern\n\t\tthis.handleRestart = options?.handleRestart\n\t\tthis.handleStartStop = options?.handleStartStop\n\t\tthis.handleQuit = options?.handleQuit\n\t\tthis.handleRerunTestFile = options?.handleRerunTestFile\n\t\tthis.handleOpenTestFile = options?.handleOpenTestFile\n\t\tthis.handleFilterChange = options?.handleFilterPatternChange\n\t\tthis.status = options?.status ?? 'ready'\n\t\tthis.handleToggleDebug = options?.handleToggleDebug\n\t\tthis.handletoggleStandardWatch = options?.handletoggleStandardWatch\n\t\tthis.isDebugging = options?.isDebugging ?? false\n\t\tthis.watchMode = options?.watchMode ?? 'off'\n\t\tthis.handleToggleSmartWatch = options?.handleToggleSmartWatch\n\n\t\tthis.errorLogItemGenerator = new TestLogItemGenerator()\n\t\tthis.widgetFactory = new WidgetFactory()\n\t}\n\n\tpublic setFilterPattern(pattern: string | undefined) {\n\t\tthis.filterPattern = pattern\n\t\tthis.filterInput.setValue(pattern ?? '')\n\t\tthis.clearFilterPatternButton.setText(buildPatternButtonText(pattern))\n\t}\n\n\tpublic setIsDebugging(isDebugging: boolean) {\n\t\tthis.menu.setTextForItem(\n\t\t\t'toggleDebug',\n\t\t\t`Debug ^${isDebugging ? 'k' : 'w'}^#^${isDebugging ? 'g' : 'r'}${\n\t\t\t\tisDebugging ? ' • ' : ' • '\n\t\t\t}^`\n\t\t)\n\t\tthis.isDebugging = isDebugging\n\t}\n\n\tpublic startCountdownTimer(durationSec: number) {\n\t\tclearInterval(this.countDownTimeInterval)\n\t\tthis.countDownTimeInterval = undefined\n\n\t\tlet remaining = durationSec\n\n\t\tfunction renderCountdownTime(time: number) {\n\t\t\treturn `Starting ${time} `\n\t\t}\n\n\t\tthis.setWatchLabel(renderCountdownTime(remaining))\n\n\t\tthis.countDownTimeInterval = setInterval(() => {\n\t\t\tremaining--\n\n\t\t\tif (remaining < 0) {\n\t\t\t\tthis.stopCountdownTimer()\n\t\t\t} else {\n\t\t\t\tthis.setWatchLabel(renderCountdownTime(remaining))\n\t\t\t}\n\t\t}, 1000) as any\n\t}\n\n\tpublic stopCountdownTimer() {\n\t\tclearInterval(this.countDownTimeInterval)\n\t\tthis.countDownTimeInterval = undefined\n\t\tthis.setWatchMode(this.watchMode)\n\t}\n\n\tpublic setWatchMode(watchMode: WatchMode) {\n\t\tthis.watchMode = watchMode\n\t\tif (!this.countDownTimeInterval) {\n\t\t\tlet label = watchMode === 'smart' ? 'Smart Watch' : 'Standard Watch'\n\t\t\tif (watchMode === 'off') {\n\t\t\t\tlabel = 'Not Watching'\n\t\t\t}\n\t\t\tthis.setWatchLabel(label)\n\t\t}\n\t}\n\n\tprivate setWatchLabel(label: string) {\n\t\tconst isWatching = this.watchMode !== 'off'\n\n\t\tthis.menu.setTextForItem(\n\t\t\t'watchDropdown',\n\t\t\t`${label} ^${isWatching ? 'k' : 'w'}^#^${isWatching ? 'g' : 'r'}${\n\t\t\t\tisWatching ? ' • ' : ' • '\n\t\t\t}^`\n\t\t)\n\n\t\tthis.menu.setTextForItem(\n\t\t\t'toggleStandardWatch',\n\t\t\tthis.watchMode === 'standard' ? '√ Standard' : 'Standard'\n\t\t)\n\n\t\tthis.menu.setTextForItem(\n\t\t\t'toggleSmartWatch',\n\t\t\tthis.watchMode === 'smart' ? '√ Smart' : 'Smart'\n\t\t)\n\t}\n\n\tpublic async start() {\n\t\tthis.started = true\n\n\t\tthis.window = this.widgetFactory.Widget('window', {})\n\t\tthis.window.hideCursor()\n\n\t\tconst { width } = this.window.getFrame()\n\t\tif (width < this.minWidth) {\n\t\t\tthrow new Error(\n\t\t\t\t`Your screen must be at least ${this.minWidth} characters wide.`\n\t\t\t)\n\t\t}\n\n\t\tvoid this.window.on('key', this.handleGlobalKeypress.bind(this))\n\t\tvoid this.window.on('kill', this.destroy.bind(this))\n\t\tvoid this.window.on('resize', this.handleWindowResize.bind(this))\n\n\t\tthis.dropInTopLayout()\n\t\tthis.dropInProgressBar()\n\t\tthis.dropInMenu()\n\t\tthis.dropInBottomLayout()\n\t\tthis.dropInStatusBar()\n\t\tthis.dropInTestLog()\n\t\tthis.dropInFilterControls()\n\n\t\tthis.updateOrientation()\n\n\t\tthis.setIsDebugging(this.isDebugging)\n\t\tthis.setWatchMode(this.watchMode)\n\t\tthis.setStatus(this.status)\n\n\t\tthis.updateInterval = setInterval(\n\t\t\tthis.handleUpdateInterval.bind(this),\n\t\t\t1000\n\t\t)\n\t}\n\n\tprivate handleWindowResize() {\n\t\tthis.updateOrientation()\n\t}\n\n\tprivate updateOrientation() {\n\t\tconst frame = this.window.getFrame()\n\n\t\tif (frame.width * 0.6 > frame.height) {\n\t\t\tthis.orientation = 'landscape'\n\t\t} else {\n\t\t\tthis.orientation = 'portrait'\n\t\t}\n\t}\n\n\tprivate dropInMenu() {\n\t\tthis.menu = this.widgetFactory.Widget('menuBar', {\n\t\t\tparent: this.window,\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Restart ',\n\t\t\t\t\tvalue: 'restart',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Debug ',\n\t\t\t\t\tvalue: 'toggleDebug',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Not Watching ',\n\t\t\t\t\tvalue: 'watchDropdown',\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Watch all',\n\t\t\t\t\t\t\tvalue: 'toggleStandardWatch',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Smart watch',\n\t\t\t\t\t\t\tvalue: 'toggleSmartWatch',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Quit',\n\t\t\t\t\tvalue: 'quit',\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\n\t\tvoid this.menu.on('select', this.handleMenuSelect.bind(this))\n\t}\n\n\tpublic setStatus(status: TestRunnerStatus) {\n\t\tthis.status = status\n\n\t\tthis.updateMenuLabels()\n\t\tthis.closeSelectTestPopup()\n\t\tthis.bottomLayout.updateLayout()\n\n\t\tif (status === 'ready') {\n\t\t\tthis.setStatusLabel('Starting...')\n\t\t} else if (this.status === 'stopped') {\n\t\t\tthis.refreshResults()\n\t\t\tthis.setStatusLabel('')\n\t\t} else if (this.status === 'running') {\n\t\t\tthis.setStatusLabel('Running tests...')\n\t\t}\n\t}\n\n\tprivate updateMenuLabels() {\n\t\tlet restartLabel = 'Start ^#^r › ^'\n\t\tswitch (this.status) {\n\t\t\tcase 'running':\n\t\t\t\trestartLabel = 'Stop ^k^#^g › ^'\n\t\t\t\tbreak\n\t\t\tcase 'stopped':\n\t\t\t\trestartLabel = `Start ^w^#^r › ^`\n\t\t\t\tbreak\n\t\t\tcase 'ready':\n\t\t\t\trestartLabel = 'Booting ^#^K › ^'\n\t\t\t\tbreak\n\t\t}\n\n\t\tthis.menu.setTextForItem('restart', restartLabel)\n\t}\n\n\tprivate handleMenuSelect(payload: { value: string }) {\n\t\tswitch (payload.value) {\n\t\t\tcase 'quit':\n\t\t\t\tthis.handleQuit?.()\n\t\t\t\tbreak\n\t\t\tcase 'restart':\n\t\t\t\tthis.handleStartStop?.()\n\t\t\t\tbreak\n\t\t\tcase 'toggleDebug':\n\t\t\t\tthis.handleToggleDebug?.()\n\t\t\t\tbreak\n\t\t\tcase 'toggleStandardWatch':\n\t\t\t\tthis.handletoggleStandardWatch?.()\n\t\t\t\tbreak\n\t\t\tcase 'toggleSmartWatch':\n\t\t\t\tthis.handleToggleSmartWatch?.()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate handleUpdateInterval() {\n\t\tif (this.status !== 'stopped') {\n\t\t\tthis.refreshResults()\n\t\t}\n\t}\n\n\tprivate refreshResults() {\n\t\tif (this.lastResults) {\n\t\t\tthis.updateLogs()\n\t\t}\n\t}\n\n\tprivate async handleGlobalKeypress(payload: { key: string }) {\n\t\tif (this.window.getFocusedWidget() === this.filterInput) {\n\t\t\treturn\n\t\t}\n\n\t\tswitch (payload.key) {\n\t\t\tcase 'ENTER':\n\t\t\t\tthis.handleRestart?.()\n\t\t\t\tbreak\n\t\t\tcase 'CTRL_C':\n\t\t\t\tthis.handleQuit?.()\n\t\t\t\tprocess.exit()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate dropInTestLog() {\n\t\tconst parent = this.bottomLayout.getChildById('results')\n\n\t\tif (parent) {\n\t\t\tthis.testLog = this.widgetFactory.Widget('text', {\n\t\t\t\tparent,\n\t\t\t\tisScrollEnabled: true,\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\theight: '100%',\n\t\t\t\twidth: '100%',\n\t\t\t\tshouldLockHeightWithParent: true,\n\t\t\t\tshouldLockWidthWithParent: true,\n\t\t\t})\n\n\t\t\tvoid this.testLog.on('click', this.handleClickTestLog.bind(this))\n\t\t}\n\t}\n\n\tprivate async handleClickTestLog(payload: { row: number; column: number }) {\n\t\tconst testFile = this.getFileForLine(payload.row)\n\t\tconst { row, column } = payload\n\n\t\tthis.closeSelectTestPopup()\n\n\t\tif (testFile) {\n\t\t\tthis.dropInSelectTestPopup({ testFile, column, row })\n\t\t}\n\t}\n\n\tprivate closeSelectTestPopup() {\n\t\tif (this.selectTestPopup) {\n\t\t\tvoid this.selectTestPopup.destroy()\n\t\t\tthis.selectTestPopup = undefined\n\t\t}\n\t}\n\n\tprivate dropInSelectTestPopup(options: {\n\t\ttestFile: string\n\t\tcolumn: number\n\t\trow: number\n\t}) {\n\t\tconst { testFile, row, column } = options\n\n\t\tthis.selectTestPopup = this.widgetFactory.Widget('popup', {\n\t\t\tparent: this.window,\n\t\t\tleft: Math.max(1, column - 25),\n\t\t\ttop: Math.max(4, row - 2),\n\t\t\twidth: 50,\n\t\t\theight: 10,\n\t\t})\n\n\t\tthis.widgetFactory.Widget('text', {\n\t\t\tparent: this.selectTestPopup,\n\t\t\tleft: 1,\n\t\t\ttop: 1,\n\t\t\theight: 4,\n\t\t\twidth: this.selectTestPopup.getFrame().width - 2,\n\t\t\ttext: `What do you wanna do with:\\n\\n${testFile}`,\n\t\t})\n\n\t\tconst open = this.widgetFactory.Widget('button', {\n\t\t\tparent: this.selectTestPopup,\n\t\t\tleft: 1,\n\t\t\ttop: 6,\n\t\t\ttext: 'Open',\n\t\t})\n\n\t\tconst rerun = this.widgetFactory.Widget('button', {\n\t\t\tparent: this.selectTestPopup,\n\t\t\tleft: 20,\n\t\t\ttop: 6,\n\t\t\ttext: 'Test',\n\t\t})\n\n\t\tconst cancel = this.widgetFactory.Widget('button', {\n\t\t\tparent: this.selectTestPopup,\n\t\t\tleft: 37,\n\t\t\ttop: 6,\n\t\t\ttext: 'Nevermind',\n\t\t})\n\n\t\tvoid rerun.on('click', () => {\n\t\t\tthis.handleRerunTestFile?.(testFile)\n\t\t\tthis.closeSelectTestPopup()\n\t\t})\n\t\tvoid cancel.on('click', this.closeSelectTestPopup.bind(this))\n\t\tvoid open.on('click', () => {\n\t\t\tthis.openTestFile(testFile)\n\t\t})\n\t}\n\n\tprivate openTestFile(testFile: string) {\n\t\tthis.handleOpenTestFile?.(testFile)\n\t\tthis.closeSelectTestPopup()\n\t}\n\n\tpublic getFileForLine(row: number): string | undefined {\n\t\tlet line = this.testLog.getScrollY()\n\n\t\tfor (let file of this.lastResults.testFiles ?? []) {\n\t\t\tif (line === row) {\n\t\t\t\treturn file.path\n\t\t\t}\n\n\t\t\tline++\n\n\t\t\tfor (let c = 0; c < (file.tests ?? []).length; c++) {\n\t\t\t\tif (line === row) {\n\t\t\t\t\treturn file.path\n\t\t\t\t}\n\n\t\t\t\tline++\n\t\t\t}\n\t\t}\n\n\t\treturn undefined\n\t}\n\n\tprivate dropInProgressBar() {\n\t\tconst parent = this.topLayout.getChildById('progress') ?? this.window\n\t\tthis.bar = this.widgetFactory.Widget('progressBar', {\n\t\t\tparent,\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\twidth: parent.getFrame().width,\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\tlabel: 'Ready and waiting...',\n\t\t\tprogress: 0,\n\t\t})\n\t}\n\n\tprivate dropInFilterControls() {\n\t\tconst parent = this.topLayout.getChildById('filter') ?? this.window\n\n\t\tconst buttonWidth = 3\n\t\tthis.filterInput = this.widgetFactory.Widget('input', {\n\t\t\tparent,\n\t\t\tleft: 0,\n\t\t\tlabel: 'Pattern',\n\t\t\twidth: parent.getFrame().width - buttonWidth,\n\t\t\theight: 1,\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\tvalue: this.filterPattern,\n\t\t})\n\n\t\tvoid this.filterInput.on('cancel', () => {\n\t\t\tthis.filterInput.setValue(this.filterPattern ?? '')\n\t\t})\n\n\t\tvoid this.filterInput.on('submit', (payload) => {\n\t\t\tthis.handleFilterChange?.(payload.value ?? undefined)\n\t\t})\n\n\t\tthis.clearFilterPatternButton = this.widgetFactory.Widget('button', {\n\t\t\tparent,\n\t\t\tleft: this.filterInput.getFrame().width,\n\t\t\twidth: buttonWidth,\n\t\t\ttop: 0,\n\t\t\ttext: buildPatternButtonText(this.filterPattern),\n\t\t\tshouldLockRightWithParent: true,\n\t\t})\n\n\t\tvoid this.clearFilterPatternButton.on('click', () => {\n\t\t\tif (this.filterPattern || this.filterPattern?.length === 0) {\n\t\t\t\tthis.handleFilterChange?.(undefined)\n\t\t\t} else {\n\t\t\t\tthis.filterInput.setValue('')\n\t\t\t}\n\t\t})\n\t}\n\n\tprivate dropInBottomLayout() {\n\t\tthis.bottomLayout = this.widgetFactory.Widget('layout', {\n\t\t\tparent: this.window,\n\t\t\twidth: '100%',\n\t\t\ttop: 4,\n\t\t\theight: this.window.getFrame().height - 5,\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\tshouldLockHeightWithParent: true,\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\theight: '100%',\n\t\t\t\t\tcolumns: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'results',\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\t}\n\n\tprivate dropInStatusBar() {\n\t\tthis.statusBar = this.widgetFactory.Widget('text', {\n\t\t\tparent: this.window,\n\t\t\ttop: this.window.getFrame().height - 1,\n\t\t\twidth: '100%',\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\tshouldLockBottomWithParent: true,\n\t\t\tbackgroundColor: 'yellow',\n\t\t\tforegroundColor: 'black',\n\t\t\ttext: '...',\n\t\t})\n\t}\n\n\tprivate dropInTopLayout() {\n\t\tthis.topLayout = this.widgetFactory.Widget('layout', {\n\t\t\tparent: this.window,\n\t\t\twidth: '100%',\n\t\t\ttop: 1,\n\t\t\theight: 3,\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\tshouldLockHeightWithParent: false,\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\theight: '100%',\n\t\t\t\t\tcolumns: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'progress',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'filter',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\t}\n\n\tpublic updateResults(results: SpruceTestResults) {\n\t\tif (!this.started) {\n\t\t\tthrow new Error('You must call start() before anything else.')\n\t\t}\n\n\t\tthis.lastResults = {\n\t\t\t...this.lastResults,\n\t\t\t...results,\n\t\t}\n\n\t\tthis.updateProgressBar(results)\n\n\t\tconst percentPassing = this.generatePercentPassing(results)\n\t\tconst percentComplete = this.generatePercentComplete(results)\n\n\t\tthis.window.setTitle(\n\t\t\t`Testing: ${percentComplete}% complete.${\n\t\t\t\tpercentComplete > 0 ? ` ${percentPassing}% passing.` : ''\n\t\t\t}`\n\t\t)\n\n\t\tthis.updateLogs()\n\t}\n\n\tprivate updateLogs() {\n\t\tif (this.selectTestPopup) {\n\t\t\treturn\n\t\t}\n\n\t\tlet { logContent, errorContent } = this.resultsToLogContents(\n\t\t\tthis.lastResults\n\t\t)\n\n\t\tthis.testLog.setText(logContent)\n\n\t\tif (!errorContent) {\n\t\t\tthis.errorLog && this.destroyErrorLog()\n\t\t} else {\n\t\t\t!this.errorLog && this.dropInErrorLog()\n\t\t\tconst cleanedLog = this.cwd\n\t\t\t\t? errorContent.replace(new RegExp(this.cwd + '/', 'gim'), '')\n\t\t\t\t: errorContent\n\n\t\t\tthis.errorLog?.setText(cleanedLog)\n\t\t}\n\t}\n\n\tprivate resultsToLogContents(results: SpruceTestResults) {\n\t\tlet logContent = ''\n\t\tlet errorContent = ''\n\n\t\tresults.testFiles?.forEach((file) => {\n\t\t\tlogContent += this.errorLogItemGenerator.generateLogItemForFile(\n\t\t\t\tfile,\n\t\t\t\tthis.status\n\t\t\t)\n\t\t\terrorContent +=\n\t\t\t\tthis.errorLogItemGenerator.generateErrorLogItemForFile(file)\n\t\t})\n\n\t\tif (this.lastResults.customErrors.length > 0) {\n\t\t\terrorContent =\n\t\t\t\tthis.lastResults.customErrors.map((err) => chalk.red(err)).join(`\\n`) +\n\t\t\t\t`\\n${errorContent}`\n\t\t}\n\n\t\treturn { logContent, errorContent }\n\t}\n\n\tprivate dropInErrorLog() {\n\t\tthis.orientationWhenErrorLogWasShown = this.orientation\n\n\t\tif (this.bottomLayout.getRows().length === 1) {\n\t\t\tif (this.orientation === 'portrait') {\n\t\t\t\tthis.bottomLayout.addRow({\n\t\t\t\t\tid: 'row_2',\n\t\t\t\t\tcolumns: [{ id: 'errors', width: '100%' }],\n\t\t\t\t})\n\n\t\t\t\tthis.bottomLayout.setRowHeight(0, '50%')\n\t\t\t\tthis.bottomLayout.setRowHeight(1, '50%')\n\t\t\t} else {\n\t\t\t\tthis.bottomLayout.addColumn(0, { id: 'errors', width: '50%' })\n\t\t\t\tthis.bottomLayout.setColumnWidth({\n\t\t\t\t\trowIdx: 0,\n\t\t\t\t\tcolumnIdx: 0,\n\t\t\t\t\twidth: '50%',\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthis.bottomLayout.updateLayout()\n\n\t\t\tconst cell = this.bottomLayout.getChildById('errors')\n\n\t\t\tif (!cell) {\n\t\t\t\tthrow new Error('Pulling child error')\n\t\t\t}\n\n\t\t\tthis.errorLog = this.widgetFactory.Widget('text', {\n\t\t\t\tparent: cell,\n\t\t\t\twidth: '100%',\n\t\t\t\theight: '100%',\n\t\t\t\tisScrollEnabled: true,\n\t\t\t\tshouldAutoScrollWhenAppendingContent: false,\n\t\t\t\tshouldLockHeightWithParent: true,\n\t\t\t\tshouldLockWidthWithParent: true,\n\t\t\t\tpadding: { left: 1 },\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate destroyErrorLog() {\n\t\tif (this.errorLog) {\n\t\t\tvoid this.errorLog?.destroy()\n\t\t\tthis.errorLog = undefined\n\n\t\t\tif (this.orientationWhenErrorLogWasShown === 'landscape') {\n\t\t\t\tthis.bottomLayout.removeColumn(0, 1)\n\t\t\t\tthis.bottomLayout.setColumnWidth({\n\t\t\t\t\trowIdx: 0,\n\t\t\t\t\tcolumnIdx: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis.bottomLayout.removeRow(1)\n\t\t\t\tthis.bottomLayout.setRowHeight(0, '100%')\n\t\t\t}\n\t\t\tthis.bottomLayout.updateLayout()\n\t\t}\n\t}\n\n\tprivate updateProgressBar(results: SpruceTestResults) {\n\t\tif (results.totalTestFilesComplete ?? 0 > 0) {\n\t\t\tconst testsRemaining =\n\t\t\t\tresults.totalTestFiles - (results.totalTestFilesComplete ?? 0)\n\n\t\t\tif (testsRemaining === 0) {\n\t\t\t\tconst { percent, totalTests, totalPassedTests, totalTime } =\n\t\t\t\t\tthis.generateProgressStats(results)\n\n\t\t\t\tthis.bar.setLabel(\n\t\t\t\t\t`Finished! ${totalPassedTests} of ${totalTests} (${percent}%) passed in ${durationUtil.msToFriendly(\n\t\t\t\t\t\ttotalTime\n\t\t\t\t\t)}.${percent < 100 ? ` Don't give up! 💪` : ''}`\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tthis.bar.setLabel(\n\t\t\t\t\t`${results.totalTestFilesComplete} of ${\n\t\t\t\t\t\tresults.totalTestFiles\n\t\t\t\t\t} (${this.generatePercentComplete(\n\t\t\t\t\t\tresults\n\t\t\t\t\t)}%) complete. ${testsRemaining} remaining...`\n\t\t\t\t)\n\t\t\t}\n\t\t} else {\n\t\t\tthis.bar.setLabel('0%')\n\t\t}\n\n\t\tthis.bar.setProgress(this.generatePercentComplete(results) / 100)\n\t}\n\n\tprivate generateProgressStats(results: SpruceTestResults): {\n\t\tpercent: number\n\t\ttotalTests: number\n\t\ttotalPassedTests: number\n\t\ttotalTime: number\n\t} {\n\t\tlet totalTests = 0\n\t\tlet totalPassedTests = 0\n\t\tlet totalTime = 0\n\n\t\tresults.testFiles?.forEach((file) => {\n\t\t\tfile.tests?.forEach((test) => {\n\t\t\t\ttotalTime += test.duration\n\t\t\t\tif (test.status === 'passed') {\n\t\t\t\t\ttotalPassedTests++\n\t\t\t\t}\n\n\t\t\t\tif (test.status === 'passed' || test.status === 'failed') {\n\t\t\t\t\ttotalTests++\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tconst percent = Math.floor((totalPassedTests / totalTests) * 100)\n\t\treturn {\n\t\t\tpercent: percent > 0 ? percent : 0,\n\t\t\ttotalTests,\n\t\t\ttotalPassedTests,\n\t\t\ttotalTime,\n\t\t}\n\t}\n\n\tprivate generatePercentComplete(results: SpruceTestResults): number {\n\t\tconst percent =\n\t\t\t(results.totalTestFilesComplete ?? 0) / results.totalTestFiles\n\t\tif (isNaN(percent)) {\n\t\t\treturn 0\n\t\t}\n\t\treturn Math.round(percent * 100)\n\t}\n\n\tprivate generatePercentPassing(results: SpruceTestResults): number {\n\t\tconst percent =\n\t\t\t(results.totalPassed ?? 0) / this.getTotalTestFilesRun(results)\n\n\t\tif (isNaN(percent)) {\n\t\t\treturn 0\n\t\t}\n\n\t\treturn Math.floor(percent * 100)\n\t}\n\n\tprivate getTotalTestFilesRun(results: SpruceTestResults) {\n\t\treturn (\n\t\t\t(results.totalTests ?? 0) -\n\t\t\t(results.totalSkipped ?? 0) -\n\t\t\t(results.totalTodo ?? 0)\n\t\t)\n\t}\n\n\tpublic render() {\n\t\tthis.table?.computeCells()\n\t\tthis.table?.draw()\n\t}\n\n\tpublic async destroy() {\n\t\tclearInterval(this.updateInterval)\n\t\tawait this.window.destroy()\n\t}\n\n\tpublic reset() {\n\t\tthis.testLog.setText('')\n\t\tthis.lastResults = {\n\t\t\ttotalTestFiles: 0,\n\t\t\tcustomErrors: [],\n\t\t}\n\t\tthis.destroyErrorLog()\n\t\tthis.errorLogItemGenerator.resetStartTimes()\n\t}\n\n\tpublic setStatusLabel(text: string) {\n\t\tthis.statusBar.setText(text)\n\t}\n\n\tpublic appendError(message: string) {\n\t\tthis.lastResults.customErrors.push(message)\n\t}\n}\nfunction buildPatternButtonText(pattern: string | undefined): string {\n\treturn pattern ? ' x ' : ' - '\n}\n"],"file":"TestReporter.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/features/test/TestReporter.ts"],"names":["TestReporter","options","totalTestFiles","customErrors","cwd","filterPattern","handleRestart","handleStartStop","handleQuit","handleRerunTestFile","handleOpenTestFile","handleFilterChange","handleFilterPatternChange","status","handleToggleDebug","handletoggleStandardWatch","isDebugging","watchMode","handleToggleSmartWatch","errorLogItemGenerator","TestLogItemGenerator","widgetFactory","WidgetFactory","pattern","filterInput","setValue","clearFilterPatternButton","setText","buildPatternButtonText","menu","setTextForItem","durationSec","clearInterval","countDownTimeInterval","undefined","remaining","renderCountdownTime","time","setWatchLabel","setInterval","stopCountdownTimer","setWatchMode","label","isWatching","started","window","Widget","hideCursor","getFrame","width","minWidth","Error","on","handleGlobalKeypress","bind","destroy","handleWindowResize","dropInTopLayout","dropInProgressBar","dropInMenu","dropInBottomLayout","dropInStatusBar","dropInTestLog","dropInFilterControls","updateOrientation","setIsDebugging","setStatus","updateInterval","handleUpdateInterval","frame","height","orientation","parent","left","top","shouldLockWidthWithParent","items","value","handleMenuSelect","updateMenuLabels","closeSelectTestPopup","bottomLayout","updateLayout","setStatusLabel","refreshResults","restartLabel","payload","lastResults","updateLogs","getFocusedWidget","key","process","exit","getChildById","testLog","isScrollEnabled","shouldLockHeightWithParent","handleClickTestLog","testFile","getFileForLine","row","column","dropInSelectTestPopup","selectTestPopup","Math","max","text","open","rerun","cancel","openTestFile","line","getScrollY","testFiles","file","path","c","tests","length","topLayout","bar","progress","buttonWidth","shouldLockRightWithParent","rows","columns","id","statusBar","shouldLockBottomWithParent","backgroundColor","foregroundColor","results","updateProgressBar","percentPassing","generatePercentPassing","percentComplete","generatePercentComplete","setTitle","resultsToLogContents","logContent","errorContent","errorLog","destroyErrorLog","dropInErrorLog","cleanedLog","replace","RegExp","forEach","generateLogItemForFile","generateErrorLogItemForFile","map","err","chalk","red","join","orientationWhenErrorLogWasShown","getRows","addRow","setRowHeight","addColumn","setColumnWidth","rowIdx","columnIdx","cell","shouldAutoScrollWhenAppendingContent","padding","removeColumn","removeRow","totalTestFilesComplete","testsRemaining","generateProgressStats","percent","totalTests","totalPassedTests","totalTime","setLabel","durationUtil","msToFriendly","setProgress","test","duration","floor","isNaN","round","totalPassed","getTotalTestFilesRun","totalSkipped","totalTodo","table","computeCells","draw","resetStartTimes","message","push"],"mappings":"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","sourcesContent":["import chalk from 'chalk'\nimport durationUtil from '../../utilities/duration.utility'\nimport { ButtonWidget } from '../../widgets/types/button.types'\nimport { InputWidget } from '../../widgets/types/input.types'\nimport { LayoutWidget } from '../../widgets/types/layout.types'\nimport { MenuBarWidget } from '../../widgets/types/menuBar.types'\nimport { PopupWidget } from '../../widgets/types/popup.types'\nimport { ProgressBarWidget } from '../../widgets/types/progressBar.types'\nimport { TextWidget } from '../../widgets/types/text.types'\nimport { WindowWidget } from '../../widgets/types/window.types'\nimport WidgetFactory from '../../widgets/WidgetFactory'\nimport { SpruceTestResults, TestRunnerStatus } from './test.types'\nimport TestLogItemGenerator from './TestLogItemGenerator'\n\ninterface TestReporterOptions {\n\thandleStartStop?: () => void\n\thandleRestart?: () => void\n\thandleQuit?: () => void\n\tonRequestOpenTestFile?: () => void\n\thandleRerunTestFile?: (fileName: string) => void\n\thandleOpenTestFile?: (fileName: string) => void\n\thandleFilterPatternChange?: (pattern?: string) => void\n\thandleToggleDebug?: () => void\n\thandletoggleStandardWatch?: () => void\n\thandleToggleSmartWatch?: () => void\n\tfilterPattern?: string\n\tisDebugging?: boolean\n\twatchMode?: WatchMode\n\tstatus?: TestRunnerStatus\n\tcwd?: string\n}\n\ntype TestReporterResults = SpruceTestResults & {\n\tcustomErrors: string[]\n}\n\nexport type TestReporterOrientation = 'landscape' | 'portrait'\nexport type WatchMode = 'off' | 'standard' | 'smart'\n\nexport default class TestReporter {\n\tprivate started = false\n\tprivate table?: any\n\tprivate bar!: ProgressBarWidget\n\tprivate bottomLayout!: LayoutWidget\n\tprivate testLog!: TextWidget\n\tprivate errorLog?: TextWidget\n\tprivate errorLogItemGenerator: TestLogItemGenerator\n\tprivate lastResults: TestReporterResults = {\n\t\ttotalTestFiles: 0,\n\t\tcustomErrors: [],\n\t}\n\tprivate updateInterval?: any\n\tprivate menu!: MenuBarWidget\n\tprivate statusBar!: TextWidget\n\tprivate window!: WindowWidget\n\tprivate widgetFactory: WidgetFactory\n\tprivate selectTestPopup?: PopupWidget\n\tprivate topLayout!: LayoutWidget\n\tprivate filterInput!: InputWidget\n\tprivate filterPattern?: string\n\tprivate clearFilterPatternButton!: ButtonWidget\n\tprivate isDebugging = false\n\tprivate watchMode: WatchMode = 'off'\n\tprivate status: TestRunnerStatus = 'ready'\n\tprivate countDownTimeInterval?: number\n\tprivate cwd: string | undefined\n\tprivate orientation: TestReporterOrientation = 'landscape'\n\n\tprivate handleStartStop?: () => void\n\tprivate handleRestart?: () => void\n\tprivate handleQuit?: () => void\n\tprivate handleRerunTestFile?: (fileName: string) => void\n\tprivate handleFilterChange?: (pattern?: string) => void\n\tprivate handleOpenTestFile?: (testFile: string) => void\n\tprivate handleToggleDebug?: () => void\n\tprivate handletoggleStandardWatch?: () => void\n\tprivate handleToggleSmartWatch?: () => any\n\tprivate minWidth = 50\n\tprivate orientationWhenErrorLogWasShown: TestReporterOrientation = 'landscape'\n\n\tpublic constructor(options?: TestReporterOptions) {\n\t\tthis.cwd = options?.cwd\n\t\tthis.filterPattern = options?.filterPattern\n\t\tthis.handleRestart = options?.handleRestart\n\t\tthis.handleStartStop = options?.handleStartStop\n\t\tthis.handleQuit = options?.handleQuit\n\t\tthis.handleRerunTestFile = options?.handleRerunTestFile\n\t\tthis.handleOpenTestFile = options?.handleOpenTestFile\n\t\tthis.handleFilterChange = options?.handleFilterPatternChange\n\t\tthis.status = options?.status ?? 'ready'\n\t\tthis.handleToggleDebug = options?.handleToggleDebug\n\t\tthis.handletoggleStandardWatch = options?.handletoggleStandardWatch\n\t\tthis.isDebugging = options?.isDebugging ?? false\n\t\tthis.watchMode = options?.watchMode ?? 'off'\n\t\tthis.handleToggleSmartWatch = options?.handleToggleSmartWatch\n\n\t\tthis.errorLogItemGenerator = new TestLogItemGenerator()\n\t\tthis.widgetFactory = new WidgetFactory()\n\t}\n\n\tpublic setFilterPattern(pattern: string | undefined) {\n\t\tthis.filterPattern = pattern\n\t\tthis.filterInput.setValue(pattern ?? '')\n\t\tthis.clearFilterPatternButton.setText(buildPatternButtonText(pattern))\n\t}\n\n\tpublic setIsDebugging(isDebugging: boolean) {\n\t\tthis.menu.setTextForItem(\n\t\t\t'toggleDebug',\n\t\t\t`Debug ^${isDebugging ? 'k' : 'w'}^#^${isDebugging ? 'g' : 'r'}${\n\t\t\t\tisDebugging ? ' • ' : ' • '\n\t\t\t}^`\n\t\t)\n\t\tthis.isDebugging = isDebugging\n\t}\n\n\tpublic startCountdownTimer(durationSec: number) {\n\t\tclearInterval(this.countDownTimeInterval)\n\t\tthis.countDownTimeInterval = undefined\n\n\t\tlet remaining = durationSec\n\n\t\tfunction renderCountdownTime(time: number) {\n\t\t\treturn `Starting ${time} `\n\t\t}\n\n\t\tthis.setWatchLabel(renderCountdownTime(remaining))\n\n\t\tthis.countDownTimeInterval = setInterval(() => {\n\t\t\tremaining--\n\n\t\t\tif (remaining < 0) {\n\t\t\t\tthis.stopCountdownTimer()\n\t\t\t} else {\n\t\t\t\tthis.setWatchLabel(renderCountdownTime(remaining))\n\t\t\t}\n\t\t}, 1000) as any\n\t}\n\n\tpublic stopCountdownTimer() {\n\t\tclearInterval(this.countDownTimeInterval)\n\t\tthis.countDownTimeInterval = undefined\n\t\tthis.setWatchMode(this.watchMode)\n\t}\n\n\tpublic setWatchMode(watchMode: WatchMode) {\n\t\tthis.watchMode = watchMode\n\t\tif (!this.countDownTimeInterval) {\n\t\t\tlet label = watchMode === 'smart' ? 'Smart Watch' : 'Standard Watch'\n\t\t\tif (watchMode === 'off') {\n\t\t\t\tlabel = 'Not Watching'\n\t\t\t}\n\t\t\tthis.setWatchLabel(label)\n\t\t}\n\t}\n\n\tprivate setWatchLabel(label: string) {\n\t\tconst isWatching = this.watchMode !== 'off'\n\n\t\tthis.menu.setTextForItem(\n\t\t\t'watchDropdown',\n\t\t\t`${label} ^${isWatching ? 'k' : 'w'}^#^${isWatching ? 'g' : 'r'}${\n\t\t\t\tisWatching ? ' • ' : ' • '\n\t\t\t}^`\n\t\t)\n\n\t\tthis.menu.setTextForItem(\n\t\t\t'toggleStandardWatch',\n\t\t\tthis.watchMode === 'standard' ? '√ Standard' : 'Standard'\n\t\t)\n\n\t\tthis.menu.setTextForItem(\n\t\t\t'toggleSmartWatch',\n\t\t\tthis.watchMode === 'smart' ? '√ Smart' : 'Smart'\n\t\t)\n\t}\n\n\tpublic async start() {\n\t\tthis.started = true\n\n\t\tthis.window = this.widgetFactory.Widget('window', {})\n\t\tthis.window.hideCursor()\n\n\t\tconst { width } = this.window.getFrame()\n\t\tif (width < this.minWidth) {\n\t\t\tthrow new Error(\n\t\t\t\t`Your screen must be at least ${this.minWidth} characters wide.`\n\t\t\t)\n\t\t}\n\n\t\tvoid this.window.on('key', this.handleGlobalKeypress.bind(this))\n\t\tvoid this.window.on('kill', this.destroy.bind(this))\n\t\tvoid this.window.on('resize', this.handleWindowResize.bind(this))\n\n\t\tthis.dropInTopLayout()\n\t\tthis.dropInProgressBar()\n\t\tthis.dropInMenu()\n\t\tthis.dropInBottomLayout()\n\t\tthis.dropInStatusBar()\n\t\tthis.dropInTestLog()\n\t\tthis.dropInFilterControls()\n\n\t\tthis.updateOrientation()\n\n\t\tthis.setIsDebugging(this.isDebugging)\n\t\tthis.setWatchMode(this.watchMode)\n\t\tthis.setStatus(this.status)\n\n\t\tthis.updateInterval = setInterval(\n\t\t\tthis.handleUpdateInterval.bind(this),\n\t\t\t1000\n\t\t)\n\t}\n\n\tprivate handleWindowResize() {\n\t\tthis.updateOrientation()\n\t}\n\n\tprivate updateOrientation() {\n\t\tconst frame = this.window.getFrame()\n\n\t\tif (frame.width * 0.5 > frame.height) {\n\t\t\tthis.orientation = 'landscape'\n\t\t} else {\n\t\t\tthis.orientation = 'portrait'\n\t\t}\n\t}\n\n\tprivate dropInMenu() {\n\t\tthis.menu = this.widgetFactory.Widget('menuBar', {\n\t\t\tparent: this.window,\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Restart ',\n\t\t\t\t\tvalue: 'restart',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Debug ',\n\t\t\t\t\tvalue: 'toggleDebug',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Not Watching ',\n\t\t\t\t\tvalue: 'watchDropdown',\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Watch all',\n\t\t\t\t\t\t\tvalue: 'toggleStandardWatch',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Smart watch',\n\t\t\t\t\t\t\tvalue: 'toggleSmartWatch',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Quit',\n\t\t\t\t\tvalue: 'quit',\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\n\t\tvoid this.menu.on('select', this.handleMenuSelect.bind(this))\n\t}\n\n\tpublic setStatus(status: TestRunnerStatus) {\n\t\tthis.status = status\n\n\t\tthis.updateMenuLabels()\n\t\tthis.closeSelectTestPopup()\n\t\tthis.bottomLayout.updateLayout()\n\n\t\tif (status === 'ready') {\n\t\t\tthis.setStatusLabel('Starting...')\n\t\t} else if (this.status === 'stopped') {\n\t\t\tthis.refreshResults()\n\t\t\tthis.setStatusLabel('')\n\t\t} else if (this.status === 'running') {\n\t\t\tthis.setStatusLabel('Running tests...')\n\t\t}\n\t}\n\n\tprivate updateMenuLabels() {\n\t\tlet restartLabel = 'Start ^#^r › ^'\n\t\tswitch (this.status) {\n\t\t\tcase 'running':\n\t\t\t\trestartLabel = 'Stop ^k^#^g › ^'\n\t\t\t\tbreak\n\t\t\tcase 'stopped':\n\t\t\t\trestartLabel = `Start ^w^#^r › ^`\n\t\t\t\tbreak\n\t\t\tcase 'ready':\n\t\t\t\trestartLabel = 'Booting ^#^K › ^'\n\t\t\t\tbreak\n\t\t}\n\n\t\tthis.menu.setTextForItem('restart', restartLabel)\n\t}\n\n\tprivate handleMenuSelect(payload: { value: string }) {\n\t\tswitch (payload.value) {\n\t\t\tcase 'quit':\n\t\t\t\tthis.handleQuit?.()\n\t\t\t\tbreak\n\t\t\tcase 'restart':\n\t\t\t\tthis.handleStartStop?.()\n\t\t\t\tbreak\n\t\t\tcase 'toggleDebug':\n\t\t\t\tthis.handleToggleDebug?.()\n\t\t\t\tbreak\n\t\t\tcase 'toggleStandardWatch':\n\t\t\t\tthis.handletoggleStandardWatch?.()\n\t\t\t\tbreak\n\t\t\tcase 'toggleSmartWatch':\n\t\t\t\tthis.handleToggleSmartWatch?.()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate handleUpdateInterval() {\n\t\tif (this.status !== 'stopped') {\n\t\t\tthis.refreshResults()\n\t\t}\n\t}\n\n\tprivate refreshResults() {\n\t\tif (this.lastResults) {\n\t\t\tthis.updateLogs()\n\t\t}\n\t}\n\n\tprivate async handleGlobalKeypress(payload: { key: string }) {\n\t\tif (this.window.getFocusedWidget() === this.filterInput) {\n\t\t\treturn\n\t\t}\n\n\t\tswitch (payload.key) {\n\t\t\tcase 'ENTER':\n\t\t\t\tthis.handleRestart?.()\n\t\t\t\tbreak\n\t\t\tcase 'CTRL_C':\n\t\t\t\tthis.handleQuit?.()\n\t\t\t\tprocess.exit()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate dropInTestLog() {\n\t\tconst parent = this.bottomLayout.getChildById('results')\n\n\t\tif (parent) {\n\t\t\tthis.testLog = this.widgetFactory.Widget('text', {\n\t\t\t\tparent,\n\t\t\t\tisScrollEnabled: true,\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\theight: '100%',\n\t\t\t\twidth: '100%',\n\t\t\t\tshouldLockHeightWithParent: true,\n\t\t\t\tshouldLockWidthWithParent: true,\n\t\t\t})\n\n\t\t\tvoid this.testLog.on('click', this.handleClickTestLog.bind(this))\n\t\t}\n\t}\n\n\tprivate async handleClickTestLog(payload: { row: number; column: number }) {\n\t\tconst testFile = this.getFileForLine(payload.row)\n\t\tconst { row, column } = payload\n\n\t\tthis.closeSelectTestPopup()\n\n\t\tif (testFile) {\n\t\t\tthis.dropInSelectTestPopup({ testFile, column, row })\n\t\t}\n\t}\n\n\tprivate closeSelectTestPopup() {\n\t\tif (this.selectTestPopup) {\n\t\t\tvoid this.selectTestPopup.destroy()\n\t\t\tthis.selectTestPopup = undefined\n\t\t}\n\t}\n\n\tprivate dropInSelectTestPopup(options: {\n\t\ttestFile: string\n\t\tcolumn: number\n\t\trow: number\n\t}) {\n\t\tconst { testFile, row, column } = options\n\n\t\tthis.selectTestPopup = this.widgetFactory.Widget('popup', {\n\t\t\tparent: this.window,\n\t\t\tleft: Math.max(1, column - 25),\n\t\t\ttop: Math.max(4, row - 2),\n\t\t\twidth: 50,\n\t\t\theight: 10,\n\t\t})\n\n\t\tthis.widgetFactory.Widget('text', {\n\t\t\tparent: this.selectTestPopup,\n\t\t\tleft: 1,\n\t\t\ttop: 1,\n\t\t\theight: 4,\n\t\t\twidth: this.selectTestPopup.getFrame().width - 2,\n\t\t\ttext: `What do you wanna do with:\\n\\n${testFile}`,\n\t\t})\n\n\t\tconst open = this.widgetFactory.Widget('button', {\n\t\t\tparent: this.selectTestPopup,\n\t\t\tleft: 1,\n\t\t\ttop: 6,\n\t\t\ttext: 'Open',\n\t\t})\n\n\t\tconst rerun = this.widgetFactory.Widget('button', {\n\t\t\tparent: this.selectTestPopup,\n\t\t\tleft: 20,\n\t\t\ttop: 6,\n\t\t\ttext: 'Test',\n\t\t})\n\n\t\tconst cancel = this.widgetFactory.Widget('button', {\n\t\t\tparent: this.selectTestPopup,\n\t\t\tleft: 37,\n\t\t\ttop: 6,\n\t\t\ttext: 'Nevermind',\n\t\t})\n\n\t\tvoid rerun.on('click', () => {\n\t\t\tthis.handleRerunTestFile?.(testFile)\n\t\t\tthis.closeSelectTestPopup()\n\t\t})\n\t\tvoid cancel.on('click', this.closeSelectTestPopup.bind(this))\n\t\tvoid open.on('click', () => {\n\t\t\tthis.openTestFile(testFile)\n\t\t})\n\t}\n\n\tprivate openTestFile(testFile: string) {\n\t\tthis.handleOpenTestFile?.(testFile)\n\t\tthis.closeSelectTestPopup()\n\t}\n\n\tpublic getFileForLine(row: number): string | undefined {\n\t\tlet line = this.testLog.getScrollY()\n\n\t\tfor (let file of this.lastResults.testFiles ?? []) {\n\t\t\tif (line === row) {\n\t\t\t\treturn file.path\n\t\t\t}\n\n\t\t\tline++\n\n\t\t\tfor (let c = 0; c < (file.tests ?? []).length; c++) {\n\t\t\t\tif (line === row) {\n\t\t\t\t\treturn file.path\n\t\t\t\t}\n\n\t\t\t\tline++\n\t\t\t}\n\t\t}\n\n\t\treturn undefined\n\t}\n\n\tprivate dropInProgressBar() {\n\t\tconst parent = this.topLayout.getChildById('progress') ?? this.window\n\t\tthis.bar = this.widgetFactory.Widget('progressBar', {\n\t\t\tparent,\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\twidth: parent.getFrame().width,\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\tlabel: 'Ready and waiting...',\n\t\t\tprogress: 0,\n\t\t})\n\t}\n\n\tprivate dropInFilterControls() {\n\t\tconst parent = this.topLayout.getChildById('filter') ?? this.window\n\n\t\tconst buttonWidth = 3\n\t\tthis.filterInput = this.widgetFactory.Widget('input', {\n\t\t\tparent,\n\t\t\tleft: 0,\n\t\t\tlabel: 'Pattern',\n\t\t\twidth: parent.getFrame().width - buttonWidth,\n\t\t\theight: 1,\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\tvalue: this.filterPattern,\n\t\t})\n\n\t\tvoid this.filterInput.on('cancel', () => {\n\t\t\tthis.filterInput.setValue(this.filterPattern ?? '')\n\t\t})\n\n\t\tvoid this.filterInput.on('submit', (payload) => {\n\t\t\tthis.handleFilterChange?.(payload.value ?? undefined)\n\t\t})\n\n\t\tthis.clearFilterPatternButton = this.widgetFactory.Widget('button', {\n\t\t\tparent,\n\t\t\tleft: this.filterInput.getFrame().width,\n\t\t\twidth: buttonWidth,\n\t\t\ttop: 0,\n\t\t\ttext: buildPatternButtonText(this.filterPattern),\n\t\t\tshouldLockRightWithParent: true,\n\t\t})\n\n\t\tvoid this.clearFilterPatternButton.on('click', () => {\n\t\t\tif (this.filterPattern || this.filterPattern?.length === 0) {\n\t\t\t\tthis.handleFilterChange?.(undefined)\n\t\t\t} else {\n\t\t\t\tthis.filterInput.setValue('')\n\t\t\t}\n\t\t})\n\t}\n\n\tprivate dropInBottomLayout() {\n\t\tthis.bottomLayout = this.widgetFactory.Widget('layout', {\n\t\t\tparent: this.window,\n\t\t\twidth: '100%',\n\t\t\ttop: 4,\n\t\t\theight: this.window.getFrame().height - 5,\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\tshouldLockHeightWithParent: true,\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\theight: '100%',\n\t\t\t\t\tcolumns: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'results',\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\t}\n\n\tprivate dropInStatusBar() {\n\t\tthis.statusBar = this.widgetFactory.Widget('text', {\n\t\t\tparent: this.window,\n\t\t\ttop: this.window.getFrame().height - 1,\n\t\t\twidth: '100%',\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\tshouldLockBottomWithParent: true,\n\t\t\tbackgroundColor: 'yellow',\n\t\t\tforegroundColor: 'black',\n\t\t\ttext: '...',\n\t\t})\n\t}\n\n\tprivate dropInTopLayout() {\n\t\tthis.topLayout = this.widgetFactory.Widget('layout', {\n\t\t\tparent: this.window,\n\t\t\twidth: '100%',\n\t\t\ttop: 1,\n\t\t\theight: 3,\n\t\t\tshouldLockWidthWithParent: true,\n\t\t\tshouldLockHeightWithParent: false,\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\theight: '100%',\n\t\t\t\t\tcolumns: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'progress',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 'filter',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\t}\n\n\tpublic updateResults(results: SpruceTestResults) {\n\t\tif (!this.started) {\n\t\t\tthrow new Error('You must call start() before anything else.')\n\t\t}\n\n\t\tthis.lastResults = {\n\t\t\t...this.lastResults,\n\t\t\t...results,\n\t\t}\n\n\t\tthis.updateProgressBar(results)\n\n\t\tconst percentPassing = this.generatePercentPassing(results)\n\t\tconst percentComplete = this.generatePercentComplete(results)\n\n\t\tthis.window.setTitle(\n\t\t\t`Testing: ${percentComplete}% complete.${\n\t\t\t\tpercentComplete > 0 ? ` ${percentPassing}% passing.` : ''\n\t\t\t}`\n\t\t)\n\n\t\tthis.updateLogs()\n\t}\n\n\tprivate updateLogs() {\n\t\tif (this.selectTestPopup) {\n\t\t\treturn\n\t\t}\n\n\t\tlet { logContent, errorContent } = this.resultsToLogContents(\n\t\t\tthis.lastResults\n\t\t)\n\n\t\tthis.testLog.setText(logContent)\n\n\t\tif (!errorContent) {\n\t\t\tthis.errorLog && this.destroyErrorLog()\n\t\t} else {\n\t\t\t!this.errorLog && this.dropInErrorLog()\n\t\t\tconst cleanedLog = this.cwd\n\t\t\t\t? errorContent.replace(new RegExp(this.cwd + '/', 'gim'), '')\n\t\t\t\t: errorContent\n\n\t\t\tthis.errorLog?.setText(cleanedLog)\n\t\t}\n\t}\n\n\tprivate resultsToLogContents(results: SpruceTestResults) {\n\t\tlet logContent = ''\n\t\tlet errorContent = ''\n\n\t\tresults.testFiles?.forEach((file) => {\n\t\t\tlogContent += this.errorLogItemGenerator.generateLogItemForFile(\n\t\t\t\tfile,\n\t\t\t\tthis.status\n\t\t\t)\n\t\t\terrorContent +=\n\t\t\t\tthis.errorLogItemGenerator.generateErrorLogItemForFile(file)\n\t\t})\n\n\t\tif (this.lastResults.customErrors.length > 0) {\n\t\t\terrorContent =\n\t\t\t\tthis.lastResults.customErrors.map((err) => chalk.red(err)).join(`\\n`) +\n\t\t\t\t`\\n${errorContent}`\n\t\t}\n\n\t\treturn { logContent, errorContent }\n\t}\n\n\tprivate dropInErrorLog() {\n\t\tthis.orientationWhenErrorLogWasShown = this.orientation\n\n\t\tif (this.bottomLayout.getRows().length === 1) {\n\t\t\tif (this.orientation === 'portrait') {\n\t\t\t\tthis.bottomLayout.addRow({\n\t\t\t\t\tid: 'row_2',\n\t\t\t\t\tcolumns: [{ id: 'errors', width: '100%' }],\n\t\t\t\t})\n\n\t\t\t\tthis.bottomLayout.setRowHeight(0, '50%')\n\t\t\t\tthis.bottomLayout.setRowHeight(1, '50%')\n\t\t\t} else {\n\t\t\t\tthis.bottomLayout.addColumn(0, { id: 'errors', width: '50%' })\n\t\t\t\tthis.bottomLayout.setColumnWidth({\n\t\t\t\t\trowIdx: 0,\n\t\t\t\t\tcolumnIdx: 0,\n\t\t\t\t\twidth: '50%',\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthis.bottomLayout.updateLayout()\n\n\t\t\tconst cell = this.bottomLayout.getChildById('errors')\n\n\t\t\tif (!cell) {\n\t\t\t\tthrow new Error('Pulling child error')\n\t\t\t}\n\n\t\t\tthis.errorLog = this.widgetFactory.Widget('text', {\n\t\t\t\tparent: cell,\n\t\t\t\twidth: '100%',\n\t\t\t\theight: '100%',\n\t\t\t\tisScrollEnabled: true,\n\t\t\t\tshouldAutoScrollWhenAppendingContent: false,\n\t\t\t\tshouldLockHeightWithParent: true,\n\t\t\t\tshouldLockWidthWithParent: true,\n\t\t\t\tpadding: { left: 1 },\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate destroyErrorLog() {\n\t\tif (this.errorLog) {\n\t\t\tvoid this.errorLog?.destroy()\n\t\t\tthis.errorLog = undefined\n\n\t\t\tif (this.orientationWhenErrorLogWasShown === 'landscape') {\n\t\t\t\tthis.bottomLayout.removeColumn(0, 1)\n\t\t\t\tthis.bottomLayout.setColumnWidth({\n\t\t\t\t\trowIdx: 0,\n\t\t\t\t\tcolumnIdx: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis.bottomLayout.removeRow(1)\n\t\t\t\tthis.bottomLayout.setRowHeight(0, '100%')\n\t\t\t}\n\t\t\tthis.bottomLayout.updateLayout()\n\t\t}\n\t}\n\n\tprivate updateProgressBar(results: SpruceTestResults) {\n\t\tif (results.totalTestFilesComplete ?? 0 > 0) {\n\t\t\tconst testsRemaining =\n\t\t\t\tresults.totalTestFiles - (results.totalTestFilesComplete ?? 0)\n\n\t\t\tif (testsRemaining === 0) {\n\t\t\t\tconst { percent, totalTests, totalPassedTests, totalTime } =\n\t\t\t\t\tthis.generateProgressStats(results)\n\n\t\t\t\tthis.bar.setLabel(\n\t\t\t\t\t`Finished! ${totalPassedTests} of ${totalTests} (${percent}%) passed in ${durationUtil.msToFriendly(\n\t\t\t\t\t\ttotalTime\n\t\t\t\t\t)}.${percent < 100 ? ` Don't give up! 💪` : ''}`\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tthis.bar.setLabel(\n\t\t\t\t\t`${results.totalTestFilesComplete} of ${\n\t\t\t\t\t\tresults.totalTestFiles\n\t\t\t\t\t} (${this.generatePercentComplete(\n\t\t\t\t\t\tresults\n\t\t\t\t\t)}%) complete. ${testsRemaining} remaining...`\n\t\t\t\t)\n\t\t\t}\n\t\t} else {\n\t\t\tthis.bar.setLabel('0%')\n\t\t}\n\n\t\tthis.bar.setProgress(this.generatePercentComplete(results) / 100)\n\t}\n\n\tprivate generateProgressStats(results: SpruceTestResults): {\n\t\tpercent: number\n\t\ttotalTests: number\n\t\ttotalPassedTests: number\n\t\ttotalTime: number\n\t} {\n\t\tlet totalTests = 0\n\t\tlet totalPassedTests = 0\n\t\tlet totalTime = 0\n\n\t\tresults.testFiles?.forEach((file) => {\n\t\t\tfile.tests?.forEach((test) => {\n\t\t\t\ttotalTime += test.duration\n\t\t\t\tif (test.status === 'passed') {\n\t\t\t\t\ttotalPassedTests++\n\t\t\t\t}\n\n\t\t\t\tif (test.status === 'passed' || test.status === 'failed') {\n\t\t\t\t\ttotalTests++\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tconst percent = Math.floor((totalPassedTests / totalTests) * 100)\n\t\treturn {\n\t\t\tpercent: percent > 0 ? percent : 0,\n\t\t\ttotalTests,\n\t\t\ttotalPassedTests,\n\t\t\ttotalTime,\n\t\t}\n\t}\n\n\tprivate generatePercentComplete(results: SpruceTestResults): number {\n\t\tconst percent =\n\t\t\t(results.totalTestFilesComplete ?? 0) / results.totalTestFiles\n\t\tif (isNaN(percent)) {\n\t\t\treturn 0\n\t\t}\n\t\treturn Math.round(percent * 100)\n\t}\n\n\tprivate generatePercentPassing(results: SpruceTestResults): number {\n\t\tconst percent =\n\t\t\t(results.totalPassed ?? 0) / this.getTotalTestFilesRun(results)\n\n\t\tif (isNaN(percent)) {\n\t\t\treturn 0\n\t\t}\n\n\t\treturn Math.floor(percent * 100)\n\t}\n\n\tprivate getTotalTestFilesRun(results: SpruceTestResults) {\n\t\treturn (\n\t\t\t(results.totalTests ?? 0) -\n\t\t\t(results.totalSkipped ?? 0) -\n\t\t\t(results.totalTodo ?? 0)\n\t\t)\n\t}\n\n\tpublic render() {\n\t\tthis.table?.computeCells()\n\t\tthis.table?.draw()\n\t}\n\n\tpublic async destroy() {\n\t\tclearInterval(this.updateInterval)\n\t\tawait this.window.destroy()\n\t}\n\n\tpublic reset() {\n\t\tthis.testLog.setText('')\n\t\tthis.lastResults = {\n\t\t\ttotalTestFiles: 0,\n\t\t\tcustomErrors: [],\n\t\t}\n\t\tthis.destroyErrorLog()\n\t\tthis.errorLogItemGenerator.resetStartTimes()\n\t}\n\n\tpublic setStatusLabel(text: string) {\n\t\tthis.statusBar.setText(text)\n\t}\n\n\tpublic appendError(message: string) {\n\t\tthis.lastResults.customErrors.push(message)\n\t}\n}\nfunction buildPatternButtonText(pattern: string | undefined): string {\n\treturn pattern ? ' x ' : ' - '\n}\n"],"file":"TestReporter.js"}
|
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports["default"] =
|
|
8
|
+
exports.optionsSchema = exports["default"] = void 0;
|
|
9
9
|
|
|
10
10
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
11
|
|
|
@@ -241,6 +241,7 @@ var SetupAction = /*#__PURE__*/function (_AbstractAction) {
|
|
|
241
241
|
module = _step2.value;
|
|
242
242
|
|
|
243
243
|
if (!pkg.isInstalled(module.name)) {
|
|
244
|
+
// eslint-disable-next-line @typescript-eslint/no-extra-semi
|
|
244
245
|
;
|
|
245
246
|
((_response$packagesIns2 = response.packagesInstalled) !== null && _response$packagesIns2 !== void 0 ? _response$packagesIns2 : []).push(module);
|
|
246
247
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/features/vscode/actions/SetupAction.ts"],"names":["SetupAction","id","label","setupVscodeSchema","name","isDev","options","validateAndNormalizeOptions","all","ui","startLoading","getMissingExtensions","missing","choices","map","ext","value","response","summaryLines","skipConfirmExtensions","length","stopLoading","optionallyInstallVscodeExtensions","Writer","writeVsCodeConfigurations","cwd","files","packagesInstalled","optionallyInstallEsListModules","hints","m","prompt","type","isArray","answers","answer","push","Service","installExtensions","pkg","dependencies","module","isInstalled","installEsLintModules","confirm","shouldInstallPackages","install","getVSCodeExtensions","currentExtensions","missingExtensions","recommendedExtensions","filter","recommendedExtension","currentExtension","find","e","AbstractAction"],"mappings":"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","sourcesContent":["import { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport setupVscodeSchema from '#spruce/schemas/spruceCli/v2020_07_22/setupVscodeOptions.schema'\nimport PkgService from '../../../services/PkgService'\nimport { NpmPackage } from '../../../types/cli.types'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { Extension } from '../services/VsCodeService'\n\ntype OptionsSchema =\n\tSpruceSchemas.SpruceCli.v2020_07_22.SetupVscodeOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.SetupVscodeOptions\n\nexport default class SetupAction extends AbstractAction<OptionsSchema> {\n\tpublic invocationMessage = 'Setting up Visual Studio Codez... 👾'\n\tprivate recommendedExtensions: Extension[] = [\n\t\t{\n\t\t\tid: 'dbaeumer.vscode-eslint',\n\t\t\tlabel: 'ESLint syntax validation and fixing',\n\t\t},\n\t\t{\n\t\t\tid: 'eg2.vscode-npm-script',\n\t\t\tlabel: 'NPM package.json validation and warnings',\n\t\t},\n\t\t{\n\t\t\tid: 'christian-kohler.npm-intellisense',\n\t\t\tlabel: 'Intellisense autocompletion of installed npm modules',\n\t\t},\n\t\t{\n\t\t\tid: 'mikestead.dotenv',\n\t\t\tlabel: '.env support',\n\t\t},\n\t]\n\n\tpublic optionsSchema = setupVscodeSchema\n\tprivate dependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: 'eslint',\n\t\t\tisDev: true,\n\t\t},\n\t\t{\n\t\t\tname: 'eslint-config-spruce',\n\t\t\tisDev: true,\n\t\t},\n\t]\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { all } = this.validateAndNormalizeOptions(options)\n\n\t\tthis.ui.startLoading('Checking state of vscode.')\n\n\t\tconst missing = await this.getMissingExtensions()\n\t\tconst choices = missing.map((ext) => ({ value: ext.id, label: ext.label }))\n\t\tconst response: FeatureActionResponse = {\n\t\t\tsummaryLines: [],\n\t\t}\n\n\t\tconst skipConfirmExtensions = all || missing.length === 0\n\n\t\tif (!skipConfirmExtensions) {\n\t\t\tthis.ui.stopLoading()\n\t\t}\n\n\t\tawait this.optionallyInstallVscodeExtensions(\n\t\t\tskipConfirmExtensions,\n\t\t\tmissing,\n\t\t\tchoices,\n\t\t\tresponse\n\t\t)\n\n\t\tthis.ui.startLoading('Writing vscode configurations...')\n\n\t\tconst files = await this.Writer('vscode').writeVsCodeConfigurations(\n\t\t\tthis.cwd,\n\t\t\t!all\n\t\t)\n\n\t\tresponse.files = files\n\t\tresponse.packagesInstalled = []\n\n\t\tawait this.optionallyInstallEsListModules(response, all)\n\n\t\tresponse.hints = [\n\t\t\t\"Ok, now that that's done 😅, lets make sure Visual Studio Code can run tasks whenever you open this project.\",\n\t\t\t'',\n\t\t\t'Step 1: Open the Command Palette (View -> Command Palette or cmd+shift+p) and type \"Manage\".',\n\t\t\t'Step 2: Select \"Tasks: Manage Automatic Tasks in Folder\".',\n\t\t\t'Step 3: Allow.',\n\t\t\t'Step 4: Open the Command Palette (cmd+shift+p)).',\n\t\t\t'Step 5: Select \"Developer: Reload Window\".',\n\t\t\t'💪',\n\t\t]\n\n\t\treturn response\n\t}\n\n\tprivate async optionallyInstallVscodeExtensions(\n\t\tskipConfirmExtensions: boolean,\n\t\tmissing: Extension[],\n\t\tchoices: { value: string; label: string }[],\n\t\tresponse: FeatureActionResponse\n\t) {\n\t\tconst answers = skipConfirmExtensions\n\t\t\t? missing.map((m) => m.id)\n\t\t\t: await this.ui.prompt({\n\t\t\t\t\ttype: 'select',\n\t\t\t\t\tlabel: 'Which extensions should I install?',\n\t\t\t\t\tisArray: true,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tchoices,\n\t\t\t\t\t},\n\t\t\t })\n\n\t\tif (answers && answers?.length > 0) {\n\t\t\tthis.ui.startLoading(`Installing ${answers.length} extensions...`)\n\n\t\t\tfor (const answer of answers) {\n\t\t\t\tresponse.summaryLines?.push(`Installed ${answer} extension.`)\n\t\t\t}\n\n\t\t\tawait this.Service('vsCode').installExtensions(answers)\n\n\t\t\tthis.ui.stopLoading()\n\t\t}\n\t}\n\n\tprivate async optionallyInstallEsListModules(\n\t\tresponse: FeatureActionResponse,\n\t\tall: boolean | undefined\n\t) {\n\t\tconst pkg = this.Service('pkg')\n\n\t\tfor (const module of this.dependencies) {\n\t\t\tif (!pkg.isInstalled(module.name)) {\n\t\t\t\t;(response.packagesInstalled ?? []).push(module)\n\t\t\t}\n\t\t}\n\n\t\tif ((response.packagesInstalled ?? []).length > 0) {\n\t\t\tawait this.installEsLintModules(all, response, pkg)\n\t\t}\n\t}\n\n\tprivate async installEsLintModules(\n\t\tall: boolean | undefined,\n\t\tresponse: FeatureActionResponse,\n\t\tpkg: PkgService\n\t) {\n\t\tthis.ui.stopLoading()\n\t\tconst shouldInstallPackages =\n\t\t\tall ||\n\t\t\t(await this.ui.confirm(\n\t\t\t\t'Last thing! Ready for me to install eslint modules?'\n\t\t\t))\n\n\t\tthis.ui.startLoading('Installing dev dependencies')\n\t\tif (shouldInstallPackages) {\n\t\t\tfor (const module of response.packagesInstalled ?? []) {\n\t\t\t\tawait pkg.install(module.name, {\n\t\t\t\t\tisDev: module.isDev,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async getMissingExtensions() {\n\t\tconst currentExtensions = await this.Service('vsCode').getVSCodeExtensions()\n\n\t\tconst missingExtensions = this.recommendedExtensions.filter(\n\t\t\t(recommendedExtension) => {\n\t\t\t\tconst currentExtension = currentExtensions.find(\n\t\t\t\t\t(e) => e === recommendedExtension.id\n\t\t\t\t)\n\t\t\t\tif (currentExtension) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t}\n\t\t)\n\t\treturn missingExtensions\n\t}\n}\n"],"file":"SetupAction.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/vscode/actions/SetupAction.ts"],"names":["SetupAction","id","label","setupVscodeSchema","name","isDev","options","validateAndNormalizeOptions","all","ui","startLoading","getMissingExtensions","missing","choices","map","ext","value","response","summaryLines","skipConfirmExtensions","length","stopLoading","optionallyInstallVscodeExtensions","Writer","writeVsCodeConfigurations","cwd","files","packagesInstalled","optionallyInstallEsListModules","hints","m","prompt","type","isArray","answers","answer","push","Service","installExtensions","pkg","dependencies","module","isInstalled","installEsLintModules","confirm","shouldInstallPackages","install","getVSCodeExtensions","currentExtensions","missingExtensions","recommendedExtensions","filter","recommendedExtension","currentExtension","find","e","AbstractAction"],"mappings":"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","sourcesContent":["import { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport setupVscodeSchema from '#spruce/schemas/spruceCli/v2020_07_22/setupVscodeOptions.schema'\nimport PkgService from '../../../services/PkgService'\nimport { NpmPackage } from '../../../types/cli.types'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { Extension } from '../services/VsCodeService'\n\ntype OptionsSchema =\n\tSpruceSchemas.SpruceCli.v2020_07_22.SetupVscodeOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.SetupVscodeOptions\n\nexport default class SetupAction extends AbstractAction<OptionsSchema> {\n\tpublic invocationMessage = 'Setting up Visual Studio Codez... 👾'\n\tprivate recommendedExtensions: Extension[] = [\n\t\t{\n\t\t\tid: 'dbaeumer.vscode-eslint',\n\t\t\tlabel: 'ESLint syntax validation and fixing',\n\t\t},\n\t\t{\n\t\t\tid: 'eg2.vscode-npm-script',\n\t\t\tlabel: 'NPM package.json validation and warnings',\n\t\t},\n\t\t{\n\t\t\tid: 'christian-kohler.npm-intellisense',\n\t\t\tlabel: 'Intellisense autocompletion of installed npm modules',\n\t\t},\n\t\t{\n\t\t\tid: 'mikestead.dotenv',\n\t\t\tlabel: '.env support',\n\t\t},\n\t]\n\n\tpublic optionsSchema = setupVscodeSchema\n\tprivate dependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: 'eslint',\n\t\t\tisDev: true,\n\t\t},\n\t\t{\n\t\t\tname: 'eslint-config-spruce',\n\t\t\tisDev: true,\n\t\t},\n\t]\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { all } = this.validateAndNormalizeOptions(options)\n\n\t\tthis.ui.startLoading('Checking state of vscode.')\n\n\t\tconst missing = await this.getMissingExtensions()\n\t\tconst choices = missing.map((ext) => ({ value: ext.id, label: ext.label }))\n\t\tconst response: FeatureActionResponse = {\n\t\t\tsummaryLines: [],\n\t\t}\n\n\t\tconst skipConfirmExtensions = all || missing.length === 0\n\n\t\tif (!skipConfirmExtensions) {\n\t\t\tthis.ui.stopLoading()\n\t\t}\n\n\t\tawait this.optionallyInstallVscodeExtensions(\n\t\t\tskipConfirmExtensions,\n\t\t\tmissing,\n\t\t\tchoices,\n\t\t\tresponse\n\t\t)\n\n\t\tthis.ui.startLoading('Writing vscode configurations...')\n\n\t\tconst files = await this.Writer('vscode').writeVsCodeConfigurations(\n\t\t\tthis.cwd,\n\t\t\t!all\n\t\t)\n\n\t\tresponse.files = files\n\t\tresponse.packagesInstalled = []\n\n\t\tawait this.optionallyInstallEsListModules(response, all)\n\n\t\tresponse.hints = [\n\t\t\t\"Ok, now that that's done 😅, lets make sure Visual Studio Code can run tasks whenever you open this project.\",\n\t\t\t'',\n\t\t\t'Step 1: Open the Command Palette (View -> Command Palette or cmd+shift+p) and type \"Manage\".',\n\t\t\t'Step 2: Select \"Tasks: Manage Automatic Tasks in Folder\".',\n\t\t\t'Step 3: Allow.',\n\t\t\t'Step 4: Open the Command Palette (cmd+shift+p)).',\n\t\t\t'Step 5: Select \"Developer: Reload Window\".',\n\t\t\t'💪',\n\t\t]\n\n\t\treturn response\n\t}\n\n\tprivate async optionallyInstallVscodeExtensions(\n\t\tskipConfirmExtensions: boolean,\n\t\tmissing: Extension[],\n\t\tchoices: { value: string; label: string }[],\n\t\tresponse: FeatureActionResponse\n\t) {\n\t\tconst answers = skipConfirmExtensions\n\t\t\t? missing.map((m) => m.id)\n\t\t\t: await this.ui.prompt({\n\t\t\t\t\ttype: 'select',\n\t\t\t\t\tlabel: 'Which extensions should I install?',\n\t\t\t\t\tisArray: true,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tchoices,\n\t\t\t\t\t},\n\t\t\t })\n\n\t\tif (answers && answers?.length > 0) {\n\t\t\tthis.ui.startLoading(`Installing ${answers.length} extensions...`)\n\n\t\t\tfor (const answer of answers) {\n\t\t\t\tresponse.summaryLines?.push(`Installed ${answer} extension.`)\n\t\t\t}\n\n\t\t\tawait this.Service('vsCode').installExtensions(answers)\n\n\t\t\tthis.ui.stopLoading()\n\t\t}\n\t}\n\n\tprivate async optionallyInstallEsListModules(\n\t\tresponse: FeatureActionResponse,\n\t\tall: boolean | undefined\n\t) {\n\t\tconst pkg = this.Service('pkg')\n\n\t\tfor (const module of this.dependencies) {\n\t\t\tif (!pkg.isInstalled(module.name)) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-extra-semi\n\t\t\t\t;(response.packagesInstalled ?? []).push(module)\n\t\t\t}\n\t\t}\n\n\t\tif ((response.packagesInstalled ?? []).length > 0) {\n\t\t\tawait this.installEsLintModules(all, response, pkg)\n\t\t}\n\t}\n\n\tprivate async installEsLintModules(\n\t\tall: boolean | undefined,\n\t\tresponse: FeatureActionResponse,\n\t\tpkg: PkgService\n\t) {\n\t\tthis.ui.stopLoading()\n\t\tconst shouldInstallPackages =\n\t\t\tall ||\n\t\t\t(await this.ui.confirm(\n\t\t\t\t'Last thing! Ready for me to install eslint modules?'\n\t\t\t))\n\n\t\tthis.ui.startLoading('Installing dev dependencies')\n\t\tif (shouldInstallPackages) {\n\t\t\tfor (const module of response.packagesInstalled ?? []) {\n\t\t\t\tawait pkg.install(module.name, {\n\t\t\t\t\tisDev: module.isDev,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async getMissingExtensions() {\n\t\tconst currentExtensions = await this.Service('vsCode').getVSCodeExtensions()\n\n\t\tconst missingExtensions = this.recommendedExtensions.filter(\n\t\t\t(recommendedExtension) => {\n\t\t\t\tconst currentExtension = currentExtensions.find(\n\t\t\t\t\t(e) => e === recommendedExtension.id\n\t\t\t\t)\n\t\t\t\tif (currentExtension) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t}\n\t\t)\n\t\treturn missingExtensions\n\t}\n}\n"],"file":"SetupAction.js"}
|
|
@@ -21,7 +21,6 @@ var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
|
21
21
|
|
|
22
22
|
var _SpruceError = _interopRequireDefault(require("../errors/SpruceError"));
|
|
23
23
|
|
|
24
|
-
// import { CLIEngine } from 'eslint'
|
|
25
24
|
var LintService = function LintService(cwd, command) {
|
|
26
25
|
var _this = this;
|
|
27
26
|
|
|
@@ -30,7 +29,7 @@ var LintService = function LintService(cwd, command) {
|
|
|
30
29
|
(0, _defineProperty2["default"])(this, "command", void 0);
|
|
31
30
|
(0, _defineProperty2["default"])(this, "fix", /*#__PURE__*/function () {
|
|
32
31
|
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(pattern) {
|
|
33
|
-
var fixedFiles, fixedPaths, _yield$_this$command$, stdout, i, fixedFile;
|
|
32
|
+
var fixedFiles, fixedPaths, script, _yield$_this$command$, stdout, i, fixedFile;
|
|
34
33
|
|
|
35
34
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
36
35
|
while (1) {
|
|
@@ -50,20 +49,21 @@ var LintService = function LintService(cwd, command) {
|
|
|
50
49
|
fixedFiles = {};
|
|
51
50
|
fixedPaths = [];
|
|
52
51
|
_context.prev = 4;
|
|
53
|
-
|
|
52
|
+
script = "\"(async function lint() { try { const { ESLint } = require('eslint'); const cli = new ESLint({ fix: true, cwd: '".concat(_this.cwd, "', }); const result = await cli.lintFiles(['").concat(pattern, "']); console.log(JSON.stringify(result)); } catch (err) { console.log(err.toString()); }})()\"");
|
|
53
|
+
_context.next = 8;
|
|
54
54
|
return _this.command.execute('node', {
|
|
55
|
-
args: ['-e',
|
|
55
|
+
args: ['-e', script]
|
|
56
56
|
});
|
|
57
57
|
|
|
58
|
-
case
|
|
58
|
+
case 8:
|
|
59
59
|
_yield$_this$command$ = _context.sent;
|
|
60
60
|
stdout = _yield$_this$command$.stdout;
|
|
61
61
|
fixedFiles = JSON.parse(stdout);
|
|
62
|
-
_context.next =
|
|
62
|
+
_context.next = 16;
|
|
63
63
|
break;
|
|
64
64
|
|
|
65
|
-
case
|
|
66
|
-
_context.prev =
|
|
65
|
+
case 13:
|
|
66
|
+
_context.prev = 13;
|
|
67
67
|
_context.t0 = _context["catch"](4);
|
|
68
68
|
throw new _SpruceError["default"]({
|
|
69
69
|
code: 'LINT_FAILED',
|
|
@@ -71,47 +71,47 @@ var LintService = function LintService(cwd, command) {
|
|
|
71
71
|
originalError: _context.t0
|
|
72
72
|
});
|
|
73
73
|
|
|
74
|
-
case
|
|
75
|
-
if (!fixedFiles
|
|
76
|
-
_context.next =
|
|
74
|
+
case 16:
|
|
75
|
+
if (!fixedFiles) {
|
|
76
|
+
_context.next = 27;
|
|
77
77
|
break;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
i = 0;
|
|
81
81
|
|
|
82
|
-
case
|
|
83
|
-
if (!(i < fixedFiles.
|
|
84
|
-
_context.next =
|
|
82
|
+
case 18:
|
|
83
|
+
if (!(i < fixedFiles.length)) {
|
|
84
|
+
_context.next = 27;
|
|
85
85
|
break;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
fixedFile = fixedFiles
|
|
88
|
+
fixedFile = fixedFiles[i];
|
|
89
89
|
|
|
90
90
|
if (!(fixedFile && fixedFile.output)) {
|
|
91
|
-
_context.next =
|
|
91
|
+
_context.next = 24;
|
|
92
92
|
break;
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
_context.next =
|
|
95
|
+
_context.next = 23;
|
|
96
96
|
return _fsExtra["default"].writeFile(fixedFile.filePath, fixedFile.output);
|
|
97
97
|
|
|
98
|
-
case
|
|
98
|
+
case 23:
|
|
99
99
|
fixedPaths.push(fixedFile.filePath);
|
|
100
100
|
|
|
101
|
-
case
|
|
101
|
+
case 24:
|
|
102
102
|
i += 1;
|
|
103
|
-
_context.next =
|
|
103
|
+
_context.next = 18;
|
|
104
104
|
break;
|
|
105
105
|
|
|
106
|
-
case
|
|
106
|
+
case 27:
|
|
107
107
|
return _context.abrupt("return", fixedPaths);
|
|
108
108
|
|
|
109
|
-
case
|
|
109
|
+
case 28:
|
|
110
110
|
case "end":
|
|
111
111
|
return _context.stop();
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
|
-
}, _callee, null, [[4,
|
|
114
|
+
}, _callee, null, [[4, 13]]);
|
|
115
115
|
}));
|
|
116
116
|
|
|
117
117
|
return function (_x) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/LintService.ts"],"names":["LintService","cwd","command","pattern","SchemaError","code","parameters","fixedFiles","fixedPaths","execute","args","stdout","JSON","parse","SpruceError","originalError","
|
|
1
|
+
{"version":3,"sources":["../../src/services/LintService.ts"],"names":["LintService","cwd","command","pattern","SchemaError","code","parameters","fixedFiles","fixedPaths","script","execute","args","stdout","JSON","parse","SpruceError","originalError","i","length","fixedFile","output","fs","writeFile","filePath","push"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;IAGqBA,W,GAIpB,qBAAmBC,GAAnB,EAAgCC,OAAhC,EAAyD;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,6FAK5C,iBAAOC,OAAP;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,kBACPA,OADO;AAAA;AAAA;AAAA;;AAAA,oBAEL,IAAIC,mBAAJ,CAAgB;AACrBC,gBAAAA,IAAI,EAAE,oBADe;AAErBC,gBAAAA,UAAU,EAAE,CAAC,SAAD;AAFS,eAAhB,CAFK;;AAAA;AAQRC,cAAAA,UARQ,GAQU,EARV;AASNC,cAAAA,UATM,GASiB,EATjB;AAAA;AAWLC,cAAAA,MAXK,8HAWuH,KAAI,CAACR,GAX5H,yDAW8KE,OAX9K;AAAA;AAAA,qBAac,KAAI,CAACD,OAAL,CAAaQ,OAAb,CAAqB,MAArB,EAA6B;AACrDC,gBAAAA,IAAI,EAAE,CAAC,IAAD,EAAOF,MAAP;AAD+C,eAA7B,CAbd;;AAAA;AAAA;AAaHG,cAAAA,MAbG,yBAaHA,MAbG;AAiBXL,cAAAA,UAAU,GAAGM,IAAI,CAACC,KAAL,CAAWF,MAAX,CAAb;AAjBW;AAAA;;AAAA;AAAA;AAAA;AAAA,oBAmBL,IAAIG,uBAAJ,CAAgB;AACrBV,gBAAAA,IAAI,EAAE,aADe;AAErBF,gBAAAA,OAAO,EAAPA,OAFqB;AAGrBa,gBAAAA,aAAa;AAHQ,eAAhB,CAnBK;;AAAA;AAAA,mBA0BRT,UA1BQ;AAAA;AAAA;AAAA;;AA2BFU,cAAAA,CA3BE,GA2BE,CA3BF;;AAAA;AAAA,oBA2BKA,CAAC,GAAGV,UAAU,CAACW,MA3BpB;AAAA;AAAA;AAAA;;AA4BJC,cAAAA,SA5BI,GA4BQZ,UAAU,CAACU,CAAD,CA5BlB;;AAAA,oBA6BNE,SAAS,IAAIA,SAAS,CAACC,MA7BjB;AAAA;AAAA;AAAA;;AAAA;AAAA,qBA8BHC,oBAAGC,SAAH,CAAaH,SAAS,CAACI,QAAvB,EAAiCJ,SAAS,CAACC,MAA3C,CA9BG;;AAAA;AA+BTZ,cAAAA,UAAU,CAACgB,IAAX,CAAgBL,SAAS,CAACI,QAA1B;;AA/BS;AA2B4BN,cAAAA,CAAC,IAAI,CA3BjC;AAAA;AAAA;;AAAA;AAAA,+CAoCLT,UApCK;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAL4C;;AAAA;AAAA;AAAA;AAAA;AACxD,OAAKP,GAAL,GAAWA,GAAX;AACA,OAAKC,OAAL,GAAeA,OAAf;AACA,C","sourcesContent":["import { SchemaError } from '@sprucelabs/schema'\nimport fs from 'fs-extra'\nimport SpruceError from '../errors/SpruceError'\nimport CommandService from './CommandService'\n\nexport default class LintService {\n\tpublic cwd: string\n\tprivate command: CommandService\n\n\tpublic constructor(cwd: string, command: CommandService) {\n\t\tthis.cwd = cwd\n\t\tthis.command = command\n\t}\n\n\tpublic fix = async (pattern: string): Promise<string[]> => {\n\t\tif (!pattern) {\n\t\t\tthrow new SchemaError({\n\t\t\t\tcode: 'MISSING_PARAMETERS',\n\t\t\t\tparameters: ['pattern'],\n\t\t\t})\n\t\t}\n\n\t\tlet fixedFiles: any = {}\n\t\tconst fixedPaths: string[] = []\n\t\ttry {\n\t\t\tconst script = `\"(async function lint() { try { const { ESLint } = require('eslint'); const cli = new ESLint({ fix: true, cwd: '${this.cwd}', }); const result = await cli.lintFiles(['${pattern}']); console.log(JSON.stringify(result)); } catch (err) { console.log(err.toString()); }})()\"`\n\n\t\t\tconst { stdout } = await this.command.execute('node', {\n\t\t\t\targs: ['-e', script],\n\t\t\t})\n\n\t\t\tfixedFiles = JSON.parse(stdout)\n\t\t} catch (err: any) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'LINT_FAILED',\n\t\t\t\tpattern,\n\t\t\t\toriginalError: err,\n\t\t\t})\n\t\t}\n\n\t\tif (fixedFiles) {\n\t\t\tfor (let i = 0; i < fixedFiles.length; i += 1) {\n\t\t\t\tconst fixedFile = fixedFiles[i]\n\t\t\t\tif (fixedFile && fixedFile.output) {\n\t\t\t\t\tawait fs.writeFile(fixedFile.filePath, fixedFile.output)\n\t\t\t\t\tfixedPaths.push(fixedFile.filePath)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fixedPaths\n\t}\n}\n"],"file":"LintService.js"}
|