@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.
Files changed (42) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/build/.spruce/schemas/fields/fields.types.js +8 -8
  3. package/build/GlobalEmitter.js +4 -2
  4. package/build/GlobalEmitter.js.map +1 -1
  5. package/build/__tests__/behavioral/SettingLogTransportsInASkill.test.js.map +1 -1
  6. package/build/__tests__/behavioral/WatchingSkillViews.test.js.map +1 -1
  7. package/build/__tests__/behavioral/events/CreatingAListener.test.js +28 -17
  8. package/build/__tests__/behavioral/events/CreatingAListener.test.js.map +1 -1
  9. package/build/__tests__/implementation/GlobalEmitter.d.ts +4 -0
  10. package/build/__tests__/implementation/GlobalEmitter.js +77 -0
  11. package/build/__tests__/implementation/GlobalEmitter.js.map +1 -0
  12. package/build/__tests__/testDirsAndFiles/mercury-types-package.json +2 -2
  13. package/build/cli.js +1 -1
  14. package/build/constants.js +1 -1
  15. package/build/errors/SpruceError.js +10 -3
  16. package/build/errors/SpruceError.js.map +1 -1
  17. package/build/features/cache/constants.js +1 -1
  18. package/build/features/event/writers/EventWriter.js +1 -1
  19. package/build/features/onboard/scripts/onboarding.first.script.js +1 -1
  20. package/build/features/onboard/scripts/onboarding.short.script.js +2 -2
  21. package/build/features/skill/actions/DashboardAction.js +1 -1
  22. package/build/features/skill/actions/RegisterAction.js +1 -1
  23. package/build/features/test/TestReporter.js +1 -1
  24. package/build/features/test/TestReporter.js.map +1 -1
  25. package/build/features/test/actions/TestAction.js +1 -1
  26. package/build/features/vscode/actions/SetupAction.js +1 -0
  27. package/build/features/vscode/actions/SetupAction.js.map +1 -1
  28. package/build/services/LintService.js +23 -23
  29. package/build/services/LintService.js.map +1 -1
  30. package/build/types/graphicsInterface.types.js +6 -6
  31. package/build/widgets/types/factory.types.js +1 -1
  32. package/package.json +39 -38
  33. package/src/GlobalEmitter.ts +3 -1
  34. package/src/__tests__/behavioral/SettingLogTransportsInASkill.test.ts +1 -1
  35. package/src/__tests__/behavioral/WatchingSkillViews.test.ts +1 -0
  36. package/src/__tests__/behavioral/events/CreatingAListener.test.ts +6 -0
  37. package/src/__tests__/implementation/GlobalEmitter.ts +12 -0
  38. package/src/__tests__/testDirsAndFiles/mercury-types-package.json +2 -2
  39. package/src/errors/SpruceError.ts +7 -0
  40. package/src/features/test/TestReporter.ts +1 -1
  41. package/src/features/vscode/actions/SetupAction.ts +1 -0
  42. 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":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;;;;;;;IAGqBA,W;;;;;;;;;;;;;AACpB;AACA,+BAAiC;AAAA;;AAChC,UAAQC,OAAR,GAAoB,IAApB,CAAQA,OAAR;AACA,UAAIC,OAAJ;;AAEA,cAAQD,OAAR,aAAQA,OAAR,uBAAQA,OAAO,CAAEE,IAAjB;AACC,aAAK,iBAAL;AACC,cAAI,CAACF,OAAO,CAACG,IAAT,IAAiBH,OAAO,CAACG,IAAR,CAAaC,MAAb,KAAwB,CAA7C,EAAgD;AAC/CH,YAAAA,OAAO,qEAAP;AACA,WAFD,MAEO;AACNA,YAAAA,OAAO,gEAA+CD,OAAO,CAACG,IAAR,CAAaE,IAAb,CACrD,GADqD,CAA/C,MAAP;AAGA;;AACDJ,UAAAA,OAAO,IAAI,8BAAX;AACA;;AAED,aAAK,SAAL;AACCA,UAAAA,OAAO,4BAAGD,OAAO,CAACM,eAAX,yEAA8B,cAArC;;AAEA,cAAIN,OAAO,CAACO,aAAZ,EAA2B;AAAA;;AAC1BN,YAAAA,OAAO,2CACND,OAAO,CAACO,aAAR,CAAsBC,KADhB,yEACyBR,OAAO,CAACO,aAAR,CAAsBE,IAD/C,CAAP;AAGA;;AACD;;AACD,aAAK,iBAAL;AACCR,UAAAA,OAAO,GAAG,EAAV;;AACA,cAAID,OAAO,CAACM,eAAZ,EAA6B;AAC5BL,YAAAA,OAAO,kBAAWD,OAAO,CAACM,eAAnB,CAAP;AACA;;AACD;;AACD,aAAK,yBAAL;AACCL,UAAAA,OAAO,aAAMD,OAAO,CAACU,OAAd,4CACNV,OAAO,CAACG,IAAR,mBAAwBH,OAAO,CAACG,IAAR,CAAaE,IAAb,CAAkB,IAAlB,CAAxB,IAAoD,EAD9C,CAAP;;AAGA,cAAIL,OAAO,CAACM,eAAZ,EAA6B;AAC5BL,YAAAA,OAAO,kBAAWD,OAAO,CAACM,eAAnB,CAAP;AACA;;AAED;;AAED,aAAK,yBAAL;AACCL,UAAAA,OAAO,+BAAuBD,OAAO,CAACW,IAA/B,wFACNX,OAAO,CAACO,aADF,2DACN,uBAAuBN,OADjB,2EAC4B,aAD5B,CAAP;AAGA;;AAED,aAAK,cAAL;AACCA,UAAAA,OAAO,kBACND,OAAO,CAACW,IAAR,iBAAsBX,OAAO,CAACW,IAA9B,IAAuC,EADjC,mGAAP;AAIA;;AAED,aAAK,kBAAL;AACCV,UAAAA,OAAO,6BACND,OAAO,CAACM,eADF,wGAEeN,OAAO,CAACW,IAFvB,wFAGLX,OAAO,CAACO,aAHH,2DAGL,uBAAuBN,OAHlB,2EAG6B,aAH7B,CAAP;AAKA;;AAED,aAAK,aAAL;AACCA,UAAAA,OAAO,oCAA6BD,OAAO,CAACY,OAArC,MAAP;;AAEA,cAAIZ,OAAO,CAACO,aAAZ,EAA2B;AAAA;;AAC1BN,YAAAA,OAAO,2DACND,OAAO,CAACO,aAAR,CAAsBC,KADhB,2EACyBR,OAAO,CAACO,aAAR,CAAsBN,OAD/C,CAAP;AAGA;;AAED;;AAED,aAAK,0BAAL;AACC,cAAI,KAAKM,aAAL,IAAsB,KAAKA,aAAL,CAAmBN,OAA7C,EAAsD;AACrDA,YAAAA,OAAO,GAAG,KAAKM,aAAL,CAAmBN,OAAnB,GAA6B,MAAvC;AACA,WAFD,MAEO;AACNA,YAAAA,OAAO,GAAG,EAAV;AACA;;AACDA,UAAAA,OAAO,wCAAiCD,OAAO,CAACa,GAAzC,WAAP;;AACA,cAAIb,OAAO,CAACc,GAAZ,EAAiB;AAChBb,YAAAA,OAAO,mBAAYD,OAAO,CAACc,GAApB,SAAP;AACA;;AAED,cAAId,OAAO,CAACe,MAAZ,EAAoB;AACnBd,YAAAA,OAAO,IAAI,KAAKe,WAAL,CAAiBhB,OAAO,CAACe,MAAzB,IAAmC,MAA9C;AACA;;AAED,cAAIf,OAAO,CAACiB,MAAZ,EAAoB;AACnBhB,YAAAA,OAAO,IAAID,OAAO,CAACiB,MAAnB;AACA;;AAED;;AAED,aAAK,0BAAL;AACChB,UAAAA,OAAO,GAAG,iDAAV;AACA;;AAED,aAAK,iBAAL;AACCA,UAAAA,OAAO,GAAG,kCAAV;AACA;;AAED,aAAK,aAAL;AACCA,UAAAA,OAAO,GAAG,wBAAV;AACA;;AAED,aAAK,sBAAL;AACCA,UAAAA,OAAO,GACN,qPADD;AAEA;;AAED,aAAK,eAAL;AACCA,UAAAA,OAAO,6BAAsBD,OAAO,CAACkB,QAA9B,gCAA4DlB,OAAO,CAACmB,WAApE,CAAP;AACA;;AAED,aAAK,iBAAL;AACClB,UAAAA,OAAO,GAAG,2BAAV;AACA;;AAED,aAAK,sBAAL;AACCA,UAAAA,OAAO,6DAAsDD,OAAO,CAACoB,WAA9D,OAAP;AACA;;AAED,aAAK,aAAL;AACCnB,UAAAA,OAAO,aAAMD,OAAO,CAACqB,QAAd,kBACNrB,OAAO,CAACsB,QADF,iBAEAtB,OAAO,CAACuB,YAAR,CACLC,KADK,CACC,IADD,EAELC,GAFK,CAED,UAACC,IAAD;AAAA,kCAAkBA,IAAlB;AAAA,WAFC,EAGLrB,IAHK,CAGA,IAHA,CAFA,CAAP;AAOA;;AAED,aAAK,uBAAL;AACCJ,UAAAA,OAAO,cAAQ,4BACdD,OAAO,CAACoB,WADM,CAAR,kEAAP;AAGA;;AAED,aAAK,wBAAL;AAA+B;AAC9B,gBAAMO,MAAM,GAAG3B,OAAO,CAAC4B,cAAvB;AACA3B,YAAAA,OAAO,iBACN0B,MAAM,CAACvB,MAAP,KAAkB,CAAlB,GAAsB,UAAtB,aAAsCuB,MAAM,CAACvB,MAA7C,YADM,0BAAP;AAIA,gBAAMyB,aAAuB,GAAG,EAAhC;;AAN8B,uDAOZF,MAPY;AAAA;;AAAA;AAO9B,kEAA0B;AAAA,oBAAfG,GAAe;AACzBD,gBAAAA,aAAa,CAACE,IAAd,CAAmBD,GAAG,CAAC7B,OAAvB;AACA;AAT6B;AAAA;AAAA;AAAA;AAAA;;AAW9BA,YAAAA,OAAO,IAAI4B,aAAa,CAACxB,IAAd,CAAmB,IAAnB,CAAX;AAEA;AACA;;AACD,aAAK,wBAAL;AACCJ,UAAAA,OAAO,8FAAP;AACA;;AAED,aAAK,qBAAL;AACCA,UAAAA,OAAO,GAAG,0CAAV;AACA;;AAED,aAAK,sBAAL;AACCA,UAAAA,OAAO,uIAAP;AACA;;AAED,aAAK,wBAAL;AACCA,UAAAA,OAAO,GACN,mGADD;AAEA;;AAED,aAAK,wBAAL;AACCA,UAAAA,OAAO,8BAAwBD,OAAO,CAACgC,uBAAhC,mCAAiFhC,OAAO,CAACiC,cAAzF,mEAAsIjC,OAAO,CAACO,aAA9I,2DAAsI,uBAAuBN,OAA7J,CAAP;AACA;;AAED,aAAK,YAAL;AACCA,UAAAA,OAAO,0EACND,OAAO,CAACM,eADF,qGAENN,OAAO,CAACO,aAFF,2DAEN,uBAAuBN,OAFjB,uCAGN,oBAHM,CAAP;AAKA;;AAED,aAAK,eAAL;AACCA,UAAAA,OAAO,GAAG,gBAAV;AACA;;AAED,aAAK,sBAAL;AACCA,UAAAA,OAAO,6DAAsDD,OAAO,CAACkC,YAAR,CAC3DT,GAD2D,CACvD,UAACU,CAAD;AAAA,6BAAUA,CAAC,CAAC1B,IAAZ,eAAqB0B,CAAC,CAACC,IAAvB;AAAA,WADuD,EAE3D/B,IAF2D,CAEtD,IAFsD,CAAtD,CAAP;AAGA;;AAED,aAAK,cAAL;AACCJ,UAAAA,OAAO,GAAG,+BAAV;AACA;;AAED,aAAK,eAAL;AACCA,UAAAA,OAAO,GAAG,sCAAV;AACA;;AAED,aAAK,iBAAL;AACCA,UAAAA,OAAO,gCAAP;AACA;;AAED,aAAK,sBAAL;AACCA,UAAAA,OAAO,oGAAP;AACA;;AAED,aAAK,iBAAL;AACCA,UAAAA,OAAO,aAAMD,OAAO,CAACU,OAAd,0BAAqCV,OAAO,CAACoC,IAA7C,CAAP;AACA;;AAED,aAAK,mBAAL;AACCnC,UAAAA,OAAO,0DAAmDD,OAAO,CAACS,IAA3D,MAAP;AACA;;AAED,aAAK,cAAL;AACCR,UAAAA,OAAO,gEAAP;AACA;;AAED,aAAK,mBAAL;AACCA,UAAAA,OAAO,GAAG,gDAAV;AACA;;AAED,aAAK,oBAAL;AACCA,UAAAA,OAAO,GAAG,sDAAV;AACA;;AAED,aAAK,sCAAL;AACCA,UAAAA,OAAO,uDAAgDoC,4BAAUC,QAAV,CACtDtC,OAAO,CAACuC,eAD8C,CAAhD,cAEFvC,OAAO,CAACkB,QAFN,iDAGNlB,OAAO,CAACwC,SAHF,qCAIoBC,IAAI,CAACC,SAAL,CAC1B1C,OAAO,CAAC2C,YADkB,CAJpB,sLAAP;AAOA;;AAED,aAAK,kBAAL;AACC1C,UAAAA,OAAO,GAAG,mCAAV;AACA;;AAED,aAAK,0BAAL;AACCA,UAAAA,OAAO,gCAAyBD,OAAO,CAACS,IAAjC,sBAAP;AACA;;AAED;AACCR,UAAAA,OAAO,qHAAP;AApPF;;AAuPA,aAAOA,OAAP;AACA;;;WAED,qBAAoBc,MAApB,EAAoC;AACnC,aAAOA,MAAM,CAAC6B,OAAP,CAAe,wCAAf,EAAyD,EAAzD,EAA6DC,IAA7D,EAAP;AACA;;;EAlQuCC,iB","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.DISABLE_NPM_CACHE_COMMAND = exports.ENABLE_NPM_CACHE_COMMAND = void 0;
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"] = exports.optionsSchema = void 0;
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.6 > frame.height) {
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":"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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.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"] = exports.optionsSchema = void 0;
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
- _context.next = 7;
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', "\"try { const ESLint = require('eslint');const cli = new ESLint.CLIEngine({fix: true,cwd: '".concat(_this.cwd, "'});const result=cli.executeOnFiles(['").concat(pattern, "']);console.log(JSON.stringify(result)); } catch(err) { console.log(err.toString()); }\"")]
55
+ args: ['-e', script]
56
56
  });
57
57
 
58
- case 7:
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 = 15;
62
+ _context.next = 16;
63
63
  break;
64
64
 
65
- case 12:
66
- _context.prev = 12;
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 15:
75
- if (!fixedFiles.results) {
76
- _context.next = 26;
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 17:
83
- if (!(i < fixedFiles.results.length)) {
84
- _context.next = 26;
82
+ case 18:
83
+ if (!(i < fixedFiles.length)) {
84
+ _context.next = 27;
85
85
  break;
86
86
  }
87
87
 
88
- fixedFile = fixedFiles.results[i];
88
+ fixedFile = fixedFiles[i];
89
89
 
90
90
  if (!(fixedFile && fixedFile.output)) {
91
- _context.next = 23;
91
+ _context.next = 24;
92
92
  break;
93
93
  }
94
94
 
95
- _context.next = 22;
95
+ _context.next = 23;
96
96
  return _fsExtra["default"].writeFile(fixedFile.filePath, fixedFile.output);
97
97
 
98
- case 22:
98
+ case 23:
99
99
  fixedPaths.push(fixedFile.filePath);
100
100
 
101
- case 23:
101
+ case 24:
102
102
  i += 1;
103
- _context.next = 17;
103
+ _context.next = 18;
104
104
  break;
105
105
 
106
- case 26:
106
+ case 27:
107
107
  return _context.abrupt("return", fixedPaths);
108
108
 
109
- case 27:
109
+ case 28:
110
110
  case "end":
111
111
  return _context.stop();
112
112
  }
113
113
  }
114
- }, _callee, null, [[4, 12]]);
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","results","i","length","fixedFile","output","fs","writeFile","filePath","push"],"mappings":";;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;AAHA;IAMqBA,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;AAAA;AAAA,qBAWc,KAAI,CAACN,OAAL,CAAaO,OAAb,CAAqB,MAArB,EAA6B;AACrDC,gBAAAA,IAAI,EAAE,CACL,IADK,uGAEwF,KAAI,CAACT,GAF7F,mDAEyIE,OAFzI;AAD+C,eAA7B,CAXd;;AAAA;AAAA;AAWHQ,cAAAA,MAXG,yBAWHA,MAXG;AAkBXJ,cAAAA,UAAU,GAAGK,IAAI,CAACC,KAAL,CAAWF,MAAX,CAAb;AAlBW;AAAA;;AAAA;AAAA;AAAA;AAAA,oBAoBL,IAAIG,uBAAJ,CAAgB;AACrBT,gBAAAA,IAAI,EAAE,aADe;AAErBF,gBAAAA,OAAO,EAAPA,OAFqB;AAGrBY,gBAAAA,aAAa;AAHQ,eAAhB,CApBK;;AAAA;AAAA,mBA2BRR,UAAU,CAACS,OA3BH;AAAA;AAAA;AAAA;;AA4BFC,cAAAA,CA5BE,GA4BE,CA5BF;;AAAA;AAAA,oBA4BKA,CAAC,GAAGV,UAAU,CAACS,OAAX,CAAmBE,MA5B5B;AAAA;AAAA;AAAA;;AA6BJC,cAAAA,SA7BI,GA6BQZ,UAAU,CAACS,OAAX,CAAmBC,CAAnB,CA7BR;;AAAA,oBA8BNE,SAAS,IAAIA,SAAS,CAACC,MA9BjB;AAAA;AAAA;AAAA;;AAAA;AAAA,qBA+BHC,oBAAGC,SAAH,CAAaH,SAAS,CAACI,QAAvB,EAAiCJ,SAAS,CAACC,MAA3C,CA/BG;;AAAA;AAgCTZ,cAAAA,UAAU,CAACgB,IAAX,CAAgBL,SAAS,CAACI,QAA1B;;AAhCS;AA4BoCN,cAAAA,CAAC,IAAI,CA5BzC;AAAA;AAAA;;AAAA;AAAA,+CAqCLT,UArCK;;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 { CLIEngine } from 'eslint'\nimport { 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 { stdout } = await this.command.execute('node', {\n\t\t\t\targs: [\n\t\t\t\t\t'-e',\n\t\t\t\t\t`\"try { const ESLint = require('eslint');const cli = new ESLint.CLIEngine({fix: true,cwd: '${this.cwd}'});const result=cli.executeOnFiles(['${pattern}']);console.log(JSON.stringify(result)); } catch(err) { console.log(err.toString()); }\"`,\n\t\t\t\t],\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.results) {\n\t\t\tfor (let i = 0; i < fixedFiles.results.length; i += 1) {\n\t\t\t\tconst fixedFile = fixedFiles.results[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"}
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"}