@sprucelabs/spruce-cli 17.0.5 → 17.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [17.0.8](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v17.0.7...v17.0.8) (2022-06-05)
7
+
8
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
9
+
10
+
11
+
12
+
13
+
14
+ ## [17.0.7](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v17.0.6...v17.0.7) (2022-06-03)
15
+
16
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
17
+
18
+
19
+
20
+
21
+
22
+ ## [17.0.6](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v17.0.5...v17.0.6) (2022-06-01)
23
+
24
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
25
+
26
+
27
+
28
+
29
+
6
30
  ## [17.0.5](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v17.0.4...v17.0.5) (2022-06-01)
7
31
 
8
32
  **Note:** Version bump only for package @sprucelabs/spruce-cli
@@ -328,8 +328,11 @@ var TerminalInterface = /*#__PURE__*/function () {
328
328
  var shouldStripVowels = process.stdout.columns < 80;
329
329
  var stripped = shouldStripVowels ? message.replace(/[aeiou]/gi, '') : message;
330
330
 
331
+ if (shouldStripVowels && ['a', 'e', 'i', 'o', 'u'].indexOf(message[0].toLowerCase()) > -1) {
332
+ stripped = "".concat(message[0]).concat(stripped);
333
+ }
334
+
331
335
  _cfonts["default"].say(stripped, {
332
- // Font: 'tiny',
333
336
  align: 'left',
334
337
  gradient: [_graphicsInterface.GraphicsTextEffect.Red, _graphicsInterface.GraphicsTextEffect.Blue],
335
338
  colors: effects ? filterEffectsForCFonts(effects) : undefined
@@ -1 +1 @@
1
- {"version":3,"file":"TerminalInterface.js","names":["terminalImage","require","fieldCount","generateInquirerFieldName","filterEffectsForCFonts","effects","filter","effect","GraphicsTextEffect","SpruceHeader","Reset","Bold","Dim","Italic","Underline","Inverse","Hidden","Strikethrough","Visible","indexOf","TerminalInterface","cwd","renderStackTraces","log","console","bind","Error","lines","forEach","line","renderLine","object","Green","renderDivider","Object","keys","key","chalk","bold","JSON","stringify","options","headline","dividerEffects","headlineEffects","Blue","bodyEffects","renderHeadline","renderLines","renderObject","bar","results","generatedFiles","files","f","action","updatedFiles","skippedFiles","errors","packagesInstalled","renderHero","summaryLines","length","push","renderSection","featuresUtil","generateCommand","featureCode","actionCode","table","Table","head","colWidths","wordWrap","colAligns","sort","one","two","name","pkg","isDev","toString","file","description","namesUtil","toPascal","hints","err","renderError","totalTime","durationUtil","msToFriendly","message","isSpruce","fonts","say","font","align","space","colors","shouldStripVowels","process","stdout","columns","stripped","replace","gradient","Red","undefined","write","eraseBeforeRender","terminal","eraseLine","Yellow","stopLoading","loader","ora","text","start","stop","question","inquirer","prompt","type","confirmResult","answer","label","bgGreenBright","black","clear","code","colored","emphasize","highlight","value","renderWarning","definition","isPromptActive","fieldDefinition","defaultValue","promptOptions","generatePromptLabel","field","FieldFactory","Field","transformer","toValueType","validate","areSchemaValuesValid","id","fields","isArray","choices","map","choice","checked","_","includes","SpruceError","friendlyMessage","dirPath","path","join","root","onlyShowDir","fs","existsSync","lstatSync","isDirectory","cleanedPath","uri","globby","directory","extname","response","result","hint","italic","dim","stackLines","cleanStack","splice","stack","AbstractSpruceError","original","originalError","split","removeProgressBar","progressBar","percent","showPercent","eta","showEta","items","totalItems","inline","renderInline","update","image","Promise","resolve","requestCursorLocation","getCursorLocation","x","y","saveCursor","restoreCursor","moveTo","eraseDisplayBelow","_doesSupportColor","isTTy","isTTY","isCi"],"sources":["../../src/interfaces/TerminalInterface.ts"],"sourcesContent":["import path from 'path'\nimport AbstractSpruceError from '@sprucelabs/error'\nimport {\n\tFieldFactory,\n\tFieldDefinitionValueType,\n\tareSchemaValuesValid,\n} from '@sprucelabs/schema'\nimport { IField } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\n// @ts-ignore\nimport fonts from 'cfonts'\nimport chalk from 'chalk'\n// @ts-ignore No definition available\nimport Table from 'cli-table3'\n// @ts-ignore No definition available\nimport emphasize from 'emphasize'\nimport fs from 'fs-extra'\nimport globby from 'globby'\nimport inquirer from 'inquirer'\nimport _ from 'lodash'\nimport { filter } from 'lodash'\nimport ora from 'ora'\nimport { terminal } from 'terminal-kit'\nimport { ProgressBarController } from 'terminal-kit/Terminal'\nimport { FieldDefinitions } from '#spruce/schemas/fields/fields.types'\nimport SpruceError from '../errors/SpruceError'\nimport featuresUtil from '../features/feature.utilities'\nimport { ExecutionResults, GraphicsInterface } from '../types/cli.types'\nimport {\n\tGraphicsTextEffect,\n\tImageDimensions,\n\tProgressBarOptions,\n\tProgressBarUpdateOptions,\n} from '../types/graphicsInterface.types'\nimport durationUtil from '../utilities/duration.utility'\nimport isCi from '../utilities/isCi'\nconst terminalImage = require('terminal-image')\n\nlet fieldCount = 0\nfunction generateInquirerFieldName() {\n\tfieldCount++\n\treturn `field-${fieldCount}`\n}\n\n/** Remove effects cfonts does not support */\nfunction filterEffectsForCFonts(effects: GraphicsTextEffect[]) {\n\treturn filter(\n\t\teffects,\n\t\t(effect) =>\n\t\t\t[\n\t\t\t\tGraphicsTextEffect.SpruceHeader,\n\t\t\t\tGraphicsTextEffect.Reset,\n\t\t\t\tGraphicsTextEffect.Bold,\n\t\t\t\tGraphicsTextEffect.Dim,\n\t\t\t\tGraphicsTextEffect.Italic,\n\t\t\t\tGraphicsTextEffect.Underline,\n\t\t\t\tGraphicsTextEffect.Inverse,\n\t\t\t\tGraphicsTextEffect.Hidden,\n\t\t\t\tGraphicsTextEffect.Strikethrough,\n\t\t\t\tGraphicsTextEffect.Visible,\n\t\t\t].indexOf(effect) === -1\n\t)\n}\n\ntype TerminalSpecificOptions = {\n\teraseBeforeRender?: boolean\n}\n\nexport default class TerminalInterface implements GraphicsInterface {\n\tpublic isPromptActive = false\n\tpublic cwd: string\n\tprivate renderStackTraces = false\n\tprivate static loader?: ora.Ora | null\n\tprivate progressBar: ProgressBarController | null = null\n\tprivate static _doesSupportColor = process?.stdout?.isTTY && !isCi()\n\tprivate log: (...args: any[]) => void\n\n\tpublic constructor(\n\t\tcwd: string,\n\t\trenderStackTraces = false,\n\t\tlog = console.log.bind(console)\n\t) {\n\t\tthis.cwd = cwd\n\t\tthis.renderStackTraces = renderStackTraces\n\t\tthis.log = log\n\t}\n\n\tpublic static doesSupportColor() {\n\t\treturn this._doesSupportColor\n\t}\n\n\tpublic static setDoesSupportColor(isTTy: boolean) {\n\t\tthis._doesSupportColor = isTTy\n\t}\n\n\tpublic async sendInput(): Promise<void> {\n\t\tthrow new Error('sendInput not supported on the TerminalInterface!')\n\t}\n\n\tpublic renderLines(lines: any[], effects?: GraphicsTextEffect[]) {\n\t\tlines.forEach((line) => {\n\t\t\tthis.renderLine(line, effects)\n\t\t})\n\t}\n\n\tpublic renderObject(\n\t\tobject: Record<string, any>,\n\t\teffects: GraphicsTextEffect[] = [GraphicsTextEffect.Green]\n\t) {\n\t\tthis.renderLine('')\n\t\tthis.renderDivider()\n\t\tthis.renderLine('')\n\t\tObject.keys(object).forEach((key) => {\n\t\t\tthis.renderLine(\n\t\t\t\t`${chalk.bold(key)}: ${\n\t\t\t\t\ttypeof object[key] === 'string'\n\t\t\t\t\t\t? object[key]\n\t\t\t\t\t\t: JSON.stringify(object[key])\n\t\t\t\t}`,\n\t\t\t\teffects\n\t\t\t)\n\t\t})\n\t\tthis.renderLine('')\n\t\tthis.renderDivider()\n\t\tthis.renderLine('')\n\t}\n\n\tpublic renderSection(options: {\n\t\theadline?: string\n\t\tlines?: string[]\n\t\tobject?: Record<string, any>\n\t\theadlineEffects?: GraphicsTextEffect[]\n\t\tbodyEffects?: GraphicsTextEffect[]\n\t\tdividerEffects?: GraphicsTextEffect[]\n\t}) {\n\t\tconst {\n\t\t\theadline,\n\t\t\tlines,\n\t\t\tobject,\n\t\t\tdividerEffects = [],\n\t\t\theadlineEffects = [GraphicsTextEffect.Blue, GraphicsTextEffect.Bold],\n\t\t\tbodyEffects = [GraphicsTextEffect.Green],\n\t\t} = options\n\n\t\tif (headline) {\n\t\t\tthis.renderHeadline(`${headline} 🌲🤖`, headlineEffects, dividerEffects)\n\t\t}\n\n\t\tif (lines) {\n\t\t\tthis.renderLines(lines, bodyEffects)\n\n\t\t\tthis.renderLine('')\n\t\t\tthis.renderDivider(dividerEffects)\n\t\t}\n\n\t\tif (object) {\n\t\t\tthis.renderObject(object, bodyEffects)\n\t\t}\n\n\t\tthis.renderLine('')\n\t}\n\n\tpublic renderDivider(effects?: GraphicsTextEffect[]) {\n\t\tconst bar = '=================================================='\n\t\tthis.renderLine(bar, effects)\n\t}\n\n\tpublic renderActionSummary(\n\t\tresults: ExecutionResults & { totalTime?: number }\n\t) {\n\t\tconst generatedFiles =\n\t\t\tresults.files?.filter((f) => f.action === 'generated') ?? []\n\t\tconst updatedFiles =\n\t\t\tresults.files?.filter((f) => f.action === 'updated') ?? []\n\t\tconst skippedFiles =\n\t\t\tresults.files?.filter((f) => f.action === 'skipped') ?? []\n\n\t\tconst errors = results.errors ?? []\n\t\tconst packagesInstalled = results.packagesInstalled ?? []\n\n\t\tthis.renderHero(`${results.headline}`)\n\n\t\tlet summaryLines: string[] = [\n\t\t\terrors.length > 0 ? `Errors: ${errors.length}` : null,\n\t\t\tgeneratedFiles.length > 0\n\t\t\t\t? `Generated files: ${generatedFiles.length}`\n\t\t\t\t: null,\n\t\t\tupdatedFiles.length > 0 ? `Updated files: ${updatedFiles.length}` : null,\n\t\t\tskippedFiles.length > 0 ? `Skipped files: ${skippedFiles.length}` : null,\n\t\t\tpackagesInstalled.length > 0\n\t\t\t\t? `NPM packages installed: ${packagesInstalled.length}`\n\t\t\t\t: null,\n\t\t\t...(results.summaryLines ?? []),\n\t\t].filter((line) => !!line) as string[]\n\n\t\tif (summaryLines.length === 0) {\n\t\t\tsummaryLines.push('Nothing to report!')\n\t\t}\n\t\tthis.renderSection({\n\t\t\theadline: `${featuresUtil.generateCommand(\n\t\t\t\tresults.featureCode,\n\t\t\t\tresults.actionCode\n\t\t\t)} summary`,\n\t\t\tlines: summaryLines,\n\t\t})\n\n\t\tif (packagesInstalled.length > 0) {\n\t\t\tconst table = new Table({\n\t\t\t\thead: ['Name', 'Dev'],\n\t\t\t\tcolWidths: [40, 5],\n\t\t\t\twordWrap: true,\n\t\t\t\tcolAligns: ['left', 'center'],\n\t\t\t})\n\t\t\tpackagesInstalled\n\t\t\t\t.sort((one, two) => (one.name > two.name ? 1 : -1))\n\t\t\t\t.forEach((pkg) => {\n\t\t\t\t\ttable.push([pkg.name, pkg.isDev ? '√' : ''])\n\t\t\t\t})\n\n\t\t\tthis.renderSection({\n\t\t\t\theadline: `NPM packages summary`,\n\t\t\t\tlines: [table.toString()],\n\t\t\t})\n\t\t}\n\n\t\tfor (let files of [generatedFiles, updatedFiles]) {\n\t\t\tif (files.length > 0) {\n\t\t\t\tconst table = new Table({\n\t\t\t\t\thead: ['File', 'Description'],\n\t\t\t\t\twordWrap: true,\n\t\t\t\t})\n\n\t\t\t\tfiles = files.sort()\n\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\ttable.push([file.name, file.description ?? ''])\n\t\t\t\t}\n\n\t\t\t\tthis.renderSection({\n\t\t\t\t\theadline: `${namesUtil.toPascal(files[0].action)} file summary`,\n\t\t\t\t\tlines: [table.toString()],\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (results.hints) {\n\t\t\tthis.renderSection({\n\t\t\t\theadline: 'Read below 👇',\n\t\t\t\tlines: results.hints,\n\t\t\t})\n\t\t}\n\n\t\tif (errors.length > 0) {\n\t\t\tthis.renderHeadline('Errors')\n\t\t\terrors.forEach((err) => this.renderError(err))\n\t\t}\n\n\t\tif (results.totalTime) {\n\t\t\tthis.renderLine(\n\t\t\t\t`Total time: ${durationUtil.msToFriendly(results.totalTime)}`\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic renderHeadline(\n\t\tmessage: string,\n\t\teffects: GraphicsTextEffect[] = [\n\t\t\tGraphicsTextEffect.Blue,\n\t\t\tGraphicsTextEffect.Bold,\n\t\t],\n\t\tdividerEffects: GraphicsTextEffect[] = []\n\t) {\n\t\tconst isSpruce = effects.indexOf(GraphicsTextEffect.SpruceHeader) > -1\n\n\t\tif (isSpruce) {\n\t\t\tfonts.say(message, {\n\t\t\t\tfont: GraphicsTextEffect.SpruceHeader,\n\t\t\t\talign: 'left',\n\t\t\t\tspace: false,\n\t\t\t\tcolors: filterEffectsForCFonts(effects),\n\t\t\t})\n\t\t} else {\n\t\t\tthis.renderDivider(dividerEffects)\n\t\t\tthis.renderLine(message, effects)\n\t\t\tthis.renderDivider(dividerEffects)\n\t\t\tthis.renderLine('')\n\t\t}\n\t}\n\n\tpublic renderHero(message: string, effects?: GraphicsTextEffect[]) {\n\t\tconst shouldStripVowels = process.stdout.columns < 80\n\n\t\tconst stripped = shouldStripVowels\n\t\t\t? message.replace(/[aeiou]/gi, '')\n\t\t\t: message\n\n\t\tfonts.say(stripped, {\n\t\t\t// Font: 'tiny',\n\t\t\talign: 'left',\n\t\t\tgradient: [GraphicsTextEffect.Red, GraphicsTextEffect.Blue],\n\t\t\tcolors: effects ? filterEffectsForCFonts(effects) : undefined,\n\t\t})\n\t}\n\n\tpublic renderHint(message: string) {\n\t\treturn this.renderLine(`👨‍🏫 ${message}`)\n\t}\n\n\tpublic renderLine(\n\t\tmessage: any,\n\t\teffects: GraphicsTextEffect[] = [],\n\t\toptions?: TerminalSpecificOptions\n\t) {\n\t\tlet write: any = chalk\n\t\teffects.forEach((effect) => {\n\t\t\twrite = write[effect]\n\t\t})\n\n\t\tif (options?.eraseBeforeRender) {\n\t\t\tterminal.eraseLine()\n\t\t}\n\n\t\tthis.log(effects.length > 0 ? write(message) : message)\n\t}\n\n\tpublic renderWarning(message: string) {\n\t\tthis.renderLine(`⚠️ ${message}`, [\n\t\t\tGraphicsTextEffect.Bold,\n\t\t\tGraphicsTextEffect.Yellow,\n\t\t])\n\t}\n\n\tpublic async startLoading(message?: string) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-floating-promises\n\t\tthis.stopLoading()\n\t\tTerminalInterface.loader = ora({\n\t\t\ttext: message,\n\t\t}).start()\n\t}\n\n\tpublic async stopLoading() {\n\t\tTerminalInterface.loader?.stop()\n\t\tTerminalInterface.loader = null\n\t}\n\n\tpublic async confirm(question: string): Promise<boolean> {\n\t\tconst confirmResult = await inquirer.prompt({\n\t\t\ttype: 'confirm',\n\t\t\tname: 'answer',\n\t\t\tmessage: question,\n\t\t})\n\n\t\treturn !!confirmResult.answer\n\t}\n\n\tpublic async waitForEnter(message?: string) {\n\t\tawait this.prompt({\n\t\t\ttype: 'text',\n\t\t\tlabel: `${message ? message + ' ' : ''}${chalk.bgGreenBright.black(\n\t\t\t\t'hit enter'\n\t\t\t)}`,\n\t\t})\n\t\tthis.renderLine('')\n\t\treturn\n\t}\n\n\tpublic clear() {\n\t\tvoid this.stopLoading()\n\t\tconsole.clear()\n\t}\n\n\tpublic renderCodeSample(code: string) {\n\t\ttry {\n\t\t\tconst colored = emphasize.highlight('js', code).value\n\t\t\tthis.renderLine(colored)\n\t\t} catch (err: any) {\n\t\t\tthis.renderWarning(err)\n\t\t}\n\t}\n\n\tpublic async prompt<T extends FieldDefinitions>(\n\t\tdefinition: T\n\t): Promise<FieldDefinitionValueType<T>> {\n\t\tthis.isPromptActive = true\n\t\tconst name = generateInquirerFieldName()\n\t\tconst fieldDefinition: FieldDefinitions = definition\n\t\tconst { defaultValue } = fieldDefinition\n\n\t\tconst promptOptions: Record<string, any> = {\n\t\t\tdefault: defaultValue,\n\t\t\tname,\n\t\t\tmessage: this.generatePromptLabel(fieldDefinition),\n\t\t}\n\n\t\tconst field = FieldFactory.Field('prompt', fieldDefinition)\n\n\t\tpromptOptions.transformer = (value: string) => {\n\t\t\treturn (field as IField<any>).toValueType(value)\n\t\t}\n\n\t\tpromptOptions.validate = (value: string) => {\n\t\t\treturn areSchemaValuesValid(\n\t\t\t\t{\n\t\t\t\t\tid: 'promptvalidateschema',\n\t\t\t\t\tfields: {\n\t\t\t\t\t\tprompt: fieldDefinition,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ prompt: value }\n\t\t\t)\n\t\t\t// return field.validate(value, {}).length === 0\n\t\t}\n\n\t\tswitch (fieldDefinition.type) {\n\t\t\t// Map select options to prompt list choices\n\t\t\tcase 'boolean':\n\t\t\t\tpromptOptions.type = 'confirm'\n\t\t\t\tbreak\n\n\t\t\tcase 'select':\n\t\t\t\tpromptOptions.type = fieldDefinition.isArray ? 'checkbox' : 'list'\n\n\t\t\t\tpromptOptions.choices = fieldDefinition.options.choices.map(\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t(choice) => ({\n\t\t\t\t\t\tname: choice.label,\n\t\t\t\t\t\tvalue: choice.value,\n\t\t\t\t\t\tchecked: _.includes(fieldDefinition.defaultValue, choice.value),\n\t\t\t\t\t})\n\t\t\t\t)\n\n\t\t\t\tbreak\n\t\t\t// Directory select\n\t\t\t// File select\n\t\t\tcase 'directory': {\n\t\t\t\tif (fieldDefinition.isArray) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'NOT_IMPLEMENTED',\n\t\t\t\t\t\tfriendlyMessage:\n\t\t\t\t\t\t\t'isArray file field not supported, prompt needs to be rewritten with isArray support',\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tconst dirPath = path.join(\n\t\t\t\t\tfieldDefinition.defaultValue?.path ?? this.cwd,\n\t\t\t\t\t'/'\n\t\t\t\t)\n\n\t\t\t\tpromptOptions.type = 'file'\n\t\t\t\tpromptOptions.root = dirPath\n\t\t\t\tpromptOptions.onlyShowDir = true\n\n\t\t\t\t// Only let people select an actual file\n\t\t\t\tpromptOptions.validate = (value: string) => {\n\t\t\t\t\treturn fs.existsSync(value) && fs.lstatSync(value).isDirectory()\n\t\t\t\t}\n\t\t\t\t// Strip out cwd from the paths while selecting\n\t\t\t\tpromptOptions.transformer = (path: string) => {\n\t\t\t\t\tconst cleanedPath = path.replace(promptOptions.root, '')\n\t\t\t\t\treturn cleanedPath.length === 0 ? promptOptions.root : cleanedPath\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'file': {\n\t\t\t\tif (fieldDefinition.isArray) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'NOT_IMPLEMENTED',\n\t\t\t\t\t\tfriendlyMessage:\n\t\t\t\t\t\t\t'isArray file field not supported, prompt needs to be rewritten with isArray support',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst dirPath = path.join(\n\t\t\t\t\tfieldDefinition.defaultValue?.uri ?? this.cwd,\n\t\t\t\t\t'/'\n\t\t\t\t)\n\n\t\t\t\t// Check if directory is empty.\n\t\t\t\tconst files = await globby(`${dirPath}**/*`)\n\n\t\t\t\tif (files.length === 0) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'DIRECTORY_EMPTY',\n\t\t\t\t\t\tdirectory: dirPath,\n\t\t\t\t\t\tfriendlyMessage: `I wanted to help you select a file, but none exist in ${dirPath}.`,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tpromptOptions.type = 'file'\n\t\t\t\tpromptOptions.root = dirPath\n\n\t\t\t\t// Only let people select an actual file\n\t\t\t\tpromptOptions.validate = (value: string) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tfs.existsSync(value) &&\n\t\t\t\t\t\t!fs.lstatSync(value).isDirectory() &&\n\t\t\t\t\t\tpath.extname(value) === '.ts'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t// Strip out cwd from the paths while selecting\n\t\t\t\tpromptOptions.transformer = (path: string) => {\n\t\t\t\t\tconst cleanedPath = path.replace(promptOptions.root, '')\n\t\t\t\t\treturn cleanedPath.length === 0 ? promptOptions.root : cleanedPath\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Defaults to input\n\t\t\tdefault:\n\t\t\t\tpromptOptions.type = 'input'\n\t\t}\n\n\t\tconst response = (await inquirer.prompt(promptOptions)) as any\n\n\t\tthis.isPromptActive = false\n\n\t\tconst result =\n\t\t\ttypeof response[name] !== 'undefined'\n\t\t\t\t? (field as IField<any>).toValueType(response[name])\n\t\t\t\t: response[name]\n\n\t\treturn result\n\t}\n\tprivate generatePromptLabel(fieldDefinition: FieldDefinitions): any {\n\t\tlet label = fieldDefinition.label\n\n\t\tif (fieldDefinition.hint) {\n\t\t\tlabel = `${label} ${chalk.italic.dim(`(${fieldDefinition.hint})`)}`\n\t\t}\n\n\t\tlabel = label + ': '\n\n\t\treturn label\n\t}\n\n\tpublic renderError(err: Error) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-floating-promises\n\t\tthis.stopLoading()\n\n\t\tconst message = err.message\n\t\t// Remove message from stack so the message is not doubled up\n\t\tconst stackLines = this.cleanStack(err)\n\t\tthis.renderSection({\n\t\t\theadline: message,\n\t\t\tlines: this.renderStackTraces ? stackLines.splice(0, 100) : undefined,\n\t\t\theadlineEffects: [GraphicsTextEffect.Bold, GraphicsTextEffect.Red],\n\t\t\tdividerEffects: [GraphicsTextEffect.Red],\n\t\t\tbodyEffects: [GraphicsTextEffect.Red],\n\t\t})\n\t}\n\n\tprivate cleanStack(err: Error) {\n\t\tconst message = err.message\n\t\tlet stack = err.stack ? err.stack.replace(message, '') : ''\n\n\t\tif (err instanceof AbstractSpruceError) {\n\t\t\tlet original = err.originalError\n\t\t\twhile (original) {\n\t\t\t\tstack = stack.replace('Error: ' + original.message, '')\n\t\t\t\toriginal = (original as AbstractSpruceError).originalError\n\t\t\t}\n\t\t}\n\n\t\tconst stackLines = stack.split('\\n')\n\n\t\treturn stackLines\n\t}\n\n\tpublic renderProgressBar(options: ProgressBarOptions): void {\n\t\tthis.removeProgressBar()\n\t\tthis.progressBar = terminal.progressBar({\n\t\t\t...options,\n\t\t\tpercent: options.showPercent,\n\t\t\teta: options.showEta,\n\t\t\titems: options.totalItems,\n\t\t\tinline: options.renderInline,\n\t\t})\n\t}\n\n\tpublic removeProgressBar() {\n\t\tif (this.progressBar) {\n\t\t\tthis.progressBar.stop()\n\t\t\tthis.progressBar = null\n\t\t}\n\t}\n\n\tpublic updateProgressBar(options: ProgressBarUpdateOptions): void {\n\t\tif (this.progressBar) {\n\t\t\tthis.progressBar.update({\n\t\t\t\t...options,\n\t\t\t\titems: options.totalItems,\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async renderImage(\n\t\tpath: string,\n\t\toptions?: ImageDimensions\n\t): Promise<void> {\n\t\tconst image = await terminalImage.file(path, options)\n\t\tthis.renderLine(image)\n\t}\n\n\tpublic async getCursorPosition(): Promise<{ x: number; y: number } | null> {\n\t\treturn new Promise((resolve) => {\n\t\t\tterminal.requestCursorLocation()\n\t\t\tterminal.getCursorLocation((err, x, y) => {\n\t\t\t\tresolve(err ? null : { x: x ?? 0, y: y ?? 0 })\n\t\t\t})\n\t\t})\n\t}\n\n\tpublic saveCursor() {\n\t\tterminal.saveCursor()\n\t}\n\n\tpublic restoreCursor() {\n\t\tterminal.restoreCursor()\n\t}\n\n\tpublic moveCursorTo(x: number, y: number): void {\n\t\tterminal.moveTo(x, y)\n\t}\n\n\tpublic clearBelowCursor(): void {\n\t\tterminal.eraseDisplayBelow()\n\t}\n\n\tpublic eraseLine() {\n\t\tterminal.eraseLine()\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TerminalInterface.js","names":["terminalImage","require","fieldCount","generateInquirerFieldName","filterEffectsForCFonts","effects","filter","effect","GraphicsTextEffect","SpruceHeader","Reset","Bold","Dim","Italic","Underline","Inverse","Hidden","Strikethrough","Visible","indexOf","TerminalInterface","cwd","renderStackTraces","log","console","bind","Error","lines","forEach","line","renderLine","object","Green","renderDivider","Object","keys","key","chalk","bold","JSON","stringify","options","headline","dividerEffects","headlineEffects","Blue","bodyEffects","renderHeadline","renderLines","renderObject","bar","results","generatedFiles","files","f","action","updatedFiles","skippedFiles","errors","packagesInstalled","renderHero","summaryLines","length","push","renderSection","featuresUtil","generateCommand","featureCode","actionCode","table","Table","head","colWidths","wordWrap","colAligns","sort","one","two","name","pkg","isDev","toString","file","description","namesUtil","toPascal","hints","err","renderError","totalTime","durationUtil","msToFriendly","message","isSpruce","fonts","say","font","align","space","colors","shouldStripVowels","process","stdout","columns","stripped","replace","toLowerCase","gradient","Red","undefined","write","eraseBeforeRender","terminal","eraseLine","Yellow","stopLoading","loader","ora","text","start","stop","question","inquirer","prompt","type","confirmResult","answer","label","bgGreenBright","black","clear","code","colored","emphasize","highlight","value","renderWarning","definition","isPromptActive","fieldDefinition","defaultValue","promptOptions","generatePromptLabel","field","FieldFactory","Field","transformer","toValueType","validate","areSchemaValuesValid","id","fields","isArray","choices","map","choice","checked","_","includes","SpruceError","friendlyMessage","dirPath","path","join","root","onlyShowDir","fs","existsSync","lstatSync","isDirectory","cleanedPath","uri","globby","directory","extname","response","result","hint","italic","dim","stackLines","cleanStack","splice","stack","AbstractSpruceError","original","originalError","split","removeProgressBar","progressBar","percent","showPercent","eta","showEta","items","totalItems","inline","renderInline","update","image","Promise","resolve","requestCursorLocation","getCursorLocation","x","y","saveCursor","restoreCursor","moveTo","eraseDisplayBelow","_doesSupportColor","isTTy","isTTY","isCi"],"sources":["../../src/interfaces/TerminalInterface.ts"],"sourcesContent":["import path from 'path'\nimport AbstractSpruceError from '@sprucelabs/error'\nimport {\n\tFieldFactory,\n\tFieldDefinitionValueType,\n\tareSchemaValuesValid,\n} from '@sprucelabs/schema'\nimport { IField } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\n// @ts-ignore\nimport fonts from 'cfonts'\nimport chalk from 'chalk'\n// @ts-ignore No definition available\nimport Table from 'cli-table3'\n// @ts-ignore No definition available\nimport emphasize from 'emphasize'\nimport fs from 'fs-extra'\nimport globby from 'globby'\nimport inquirer from 'inquirer'\nimport _ from 'lodash'\nimport { filter } from 'lodash'\nimport ora from 'ora'\nimport { terminal } from 'terminal-kit'\nimport { ProgressBarController } from 'terminal-kit/Terminal'\nimport { FieldDefinitions } from '#spruce/schemas/fields/fields.types'\nimport SpruceError from '../errors/SpruceError'\nimport featuresUtil from '../features/feature.utilities'\nimport { ExecutionResults, GraphicsInterface } from '../types/cli.types'\nimport {\n\tGraphicsTextEffect,\n\tImageDimensions,\n\tProgressBarOptions,\n\tProgressBarUpdateOptions,\n} from '../types/graphicsInterface.types'\nimport durationUtil from '../utilities/duration.utility'\nimport isCi from '../utilities/isCi'\nconst terminalImage = require('terminal-image')\n\nlet fieldCount = 0\nfunction generateInquirerFieldName() {\n\tfieldCount++\n\treturn `field-${fieldCount}`\n}\n\n/** Remove effects cfonts does not support */\nfunction filterEffectsForCFonts(effects: GraphicsTextEffect[]) {\n\treturn filter(\n\t\teffects,\n\t\t(effect) =>\n\t\t\t[\n\t\t\t\tGraphicsTextEffect.SpruceHeader,\n\t\t\t\tGraphicsTextEffect.Reset,\n\t\t\t\tGraphicsTextEffect.Bold,\n\t\t\t\tGraphicsTextEffect.Dim,\n\t\t\t\tGraphicsTextEffect.Italic,\n\t\t\t\tGraphicsTextEffect.Underline,\n\t\t\t\tGraphicsTextEffect.Inverse,\n\t\t\t\tGraphicsTextEffect.Hidden,\n\t\t\t\tGraphicsTextEffect.Strikethrough,\n\t\t\t\tGraphicsTextEffect.Visible,\n\t\t\t].indexOf(effect) === -1\n\t)\n}\n\ntype TerminalSpecificOptions = {\n\teraseBeforeRender?: boolean\n}\n\nexport default class TerminalInterface implements GraphicsInterface {\n\tpublic isPromptActive = false\n\tpublic cwd: string\n\tprivate renderStackTraces = false\n\tprivate static loader?: ora.Ora | null\n\tprivate progressBar: ProgressBarController | null = null\n\tprivate static _doesSupportColor = process?.stdout?.isTTY && !isCi()\n\tprivate log: (...args: any[]) => void\n\n\tpublic constructor(\n\t\tcwd: string,\n\t\trenderStackTraces = false,\n\t\tlog = console.log.bind(console)\n\t) {\n\t\tthis.cwd = cwd\n\t\tthis.renderStackTraces = renderStackTraces\n\t\tthis.log = log\n\t}\n\n\tpublic static doesSupportColor() {\n\t\treturn this._doesSupportColor\n\t}\n\n\tpublic static setDoesSupportColor(isTTy: boolean) {\n\t\tthis._doesSupportColor = isTTy\n\t}\n\n\tpublic async sendInput(): Promise<void> {\n\t\tthrow new Error('sendInput not supported on the TerminalInterface!')\n\t}\n\n\tpublic renderLines(lines: any[], effects?: GraphicsTextEffect[]) {\n\t\tlines.forEach((line) => {\n\t\t\tthis.renderLine(line, effects)\n\t\t})\n\t}\n\n\tpublic renderObject(\n\t\tobject: Record<string, any>,\n\t\teffects: GraphicsTextEffect[] = [GraphicsTextEffect.Green]\n\t) {\n\t\tthis.renderLine('')\n\t\tthis.renderDivider()\n\t\tthis.renderLine('')\n\t\tObject.keys(object).forEach((key) => {\n\t\t\tthis.renderLine(\n\t\t\t\t`${chalk.bold(key)}: ${\n\t\t\t\t\ttypeof object[key] === 'string'\n\t\t\t\t\t\t? object[key]\n\t\t\t\t\t\t: JSON.stringify(object[key])\n\t\t\t\t}`,\n\t\t\t\teffects\n\t\t\t)\n\t\t})\n\t\tthis.renderLine('')\n\t\tthis.renderDivider()\n\t\tthis.renderLine('')\n\t}\n\n\tpublic renderSection(options: {\n\t\theadline?: string\n\t\tlines?: string[]\n\t\tobject?: Record<string, any>\n\t\theadlineEffects?: GraphicsTextEffect[]\n\t\tbodyEffects?: GraphicsTextEffect[]\n\t\tdividerEffects?: GraphicsTextEffect[]\n\t}) {\n\t\tconst {\n\t\t\theadline,\n\t\t\tlines,\n\t\t\tobject,\n\t\t\tdividerEffects = [],\n\t\t\theadlineEffects = [GraphicsTextEffect.Blue, GraphicsTextEffect.Bold],\n\t\t\tbodyEffects = [GraphicsTextEffect.Green],\n\t\t} = options\n\n\t\tif (headline) {\n\t\t\tthis.renderHeadline(`${headline} 🌲🤖`, headlineEffects, dividerEffects)\n\t\t}\n\n\t\tif (lines) {\n\t\t\tthis.renderLines(lines, bodyEffects)\n\n\t\t\tthis.renderLine('')\n\t\t\tthis.renderDivider(dividerEffects)\n\t\t}\n\n\t\tif (object) {\n\t\t\tthis.renderObject(object, bodyEffects)\n\t\t}\n\n\t\tthis.renderLine('')\n\t}\n\n\tpublic renderDivider(effects?: GraphicsTextEffect[]) {\n\t\tconst bar = '=================================================='\n\t\tthis.renderLine(bar, effects)\n\t}\n\n\tpublic renderActionSummary(\n\t\tresults: ExecutionResults & { totalTime?: number }\n\t) {\n\t\tconst generatedFiles =\n\t\t\tresults.files?.filter((f) => f.action === 'generated') ?? []\n\t\tconst updatedFiles =\n\t\t\tresults.files?.filter((f) => f.action === 'updated') ?? []\n\t\tconst skippedFiles =\n\t\t\tresults.files?.filter((f) => f.action === 'skipped') ?? []\n\n\t\tconst errors = results.errors ?? []\n\t\tconst packagesInstalled = results.packagesInstalled ?? []\n\n\t\tthis.renderHero(`${results.headline}`)\n\n\t\tlet summaryLines: string[] = [\n\t\t\terrors.length > 0 ? `Errors: ${errors.length}` : null,\n\t\t\tgeneratedFiles.length > 0\n\t\t\t\t? `Generated files: ${generatedFiles.length}`\n\t\t\t\t: null,\n\t\t\tupdatedFiles.length > 0 ? `Updated files: ${updatedFiles.length}` : null,\n\t\t\tskippedFiles.length > 0 ? `Skipped files: ${skippedFiles.length}` : null,\n\t\t\tpackagesInstalled.length > 0\n\t\t\t\t? `NPM packages installed: ${packagesInstalled.length}`\n\t\t\t\t: null,\n\t\t\t...(results.summaryLines ?? []),\n\t\t].filter((line) => !!line) as string[]\n\n\t\tif (summaryLines.length === 0) {\n\t\t\tsummaryLines.push('Nothing to report!')\n\t\t}\n\t\tthis.renderSection({\n\t\t\theadline: `${featuresUtil.generateCommand(\n\t\t\t\tresults.featureCode,\n\t\t\t\tresults.actionCode\n\t\t\t)} summary`,\n\t\t\tlines: summaryLines,\n\t\t})\n\n\t\tif (packagesInstalled.length > 0) {\n\t\t\tconst table = new Table({\n\t\t\t\thead: ['Name', 'Dev'],\n\t\t\t\tcolWidths: [40, 5],\n\t\t\t\twordWrap: true,\n\t\t\t\tcolAligns: ['left', 'center'],\n\t\t\t})\n\t\t\tpackagesInstalled\n\t\t\t\t.sort((one, two) => (one.name > two.name ? 1 : -1))\n\t\t\t\t.forEach((pkg) => {\n\t\t\t\t\ttable.push([pkg.name, pkg.isDev ? '√' : ''])\n\t\t\t\t})\n\n\t\t\tthis.renderSection({\n\t\t\t\theadline: `NPM packages summary`,\n\t\t\t\tlines: [table.toString()],\n\t\t\t})\n\t\t}\n\n\t\tfor (let files of [generatedFiles, updatedFiles]) {\n\t\t\tif (files.length > 0) {\n\t\t\t\tconst table = new Table({\n\t\t\t\t\thead: ['File', 'Description'],\n\t\t\t\t\twordWrap: true,\n\t\t\t\t})\n\n\t\t\t\tfiles = files.sort()\n\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\ttable.push([file.name, file.description ?? ''])\n\t\t\t\t}\n\n\t\t\t\tthis.renderSection({\n\t\t\t\t\theadline: `${namesUtil.toPascal(files[0].action)} file summary`,\n\t\t\t\t\tlines: [table.toString()],\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (results.hints) {\n\t\t\tthis.renderSection({\n\t\t\t\theadline: 'Read below 👇',\n\t\t\t\tlines: results.hints,\n\t\t\t})\n\t\t}\n\n\t\tif (errors.length > 0) {\n\t\t\tthis.renderHeadline('Errors')\n\t\t\terrors.forEach((err) => this.renderError(err))\n\t\t}\n\n\t\tif (results.totalTime) {\n\t\t\tthis.renderLine(\n\t\t\t\t`Total time: ${durationUtil.msToFriendly(results.totalTime)}`\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic renderHeadline(\n\t\tmessage: string,\n\t\teffects: GraphicsTextEffect[] = [\n\t\t\tGraphicsTextEffect.Blue,\n\t\t\tGraphicsTextEffect.Bold,\n\t\t],\n\t\tdividerEffects: GraphicsTextEffect[] = []\n\t) {\n\t\tconst isSpruce = effects.indexOf(GraphicsTextEffect.SpruceHeader) > -1\n\n\t\tif (isSpruce) {\n\t\t\tfonts.say(message, {\n\t\t\t\tfont: GraphicsTextEffect.SpruceHeader,\n\t\t\t\talign: 'left',\n\t\t\t\tspace: false,\n\t\t\t\tcolors: filterEffectsForCFonts(effects),\n\t\t\t})\n\t\t} else {\n\t\t\tthis.renderDivider(dividerEffects)\n\t\t\tthis.renderLine(message, effects)\n\t\t\tthis.renderDivider(dividerEffects)\n\t\t\tthis.renderLine('')\n\t\t}\n\t}\n\n\tpublic renderHero(message: string, effects?: GraphicsTextEffect[]) {\n\t\tconst shouldStripVowels = process.stdout.columns < 80\n\n\t\tlet stripped = shouldStripVowels\n\t\t\t? message.replace(/[aeiou]/gi, '')\n\t\t\t: message\n\n\t\tif (\n\t\t\tshouldStripVowels &&\n\t\t\t['a', 'e', 'i', 'o', 'u'].indexOf(message[0].toLowerCase()) > -1\n\t\t) {\n\t\t\tstripped = `${message[0]}${stripped}`\n\t\t}\n\n\t\tfonts.say(stripped, {\n\t\t\talign: 'left',\n\t\t\tgradient: [GraphicsTextEffect.Red, GraphicsTextEffect.Blue],\n\t\t\tcolors: effects ? filterEffectsForCFonts(effects) : undefined,\n\t\t})\n\t}\n\n\tpublic renderHint(message: string) {\n\t\treturn this.renderLine(`👨‍🏫 ${message}`)\n\t}\n\n\tpublic renderLine(\n\t\tmessage: any,\n\t\teffects: GraphicsTextEffect[] = [],\n\t\toptions?: TerminalSpecificOptions\n\t) {\n\t\tlet write: any = chalk\n\t\teffects.forEach((effect) => {\n\t\t\twrite = write[effect]\n\t\t})\n\n\t\tif (options?.eraseBeforeRender) {\n\t\t\tterminal.eraseLine()\n\t\t}\n\n\t\tthis.log(effects.length > 0 ? write(message) : message)\n\t}\n\n\tpublic renderWarning(message: string) {\n\t\tthis.renderLine(`⚠️ ${message}`, [\n\t\t\tGraphicsTextEffect.Bold,\n\t\t\tGraphicsTextEffect.Yellow,\n\t\t])\n\t}\n\n\tpublic async startLoading(message?: string) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-floating-promises\n\t\tthis.stopLoading()\n\t\tTerminalInterface.loader = ora({\n\t\t\ttext: message,\n\t\t}).start()\n\t}\n\n\tpublic async stopLoading() {\n\t\tTerminalInterface.loader?.stop()\n\t\tTerminalInterface.loader = null\n\t}\n\n\tpublic async confirm(question: string): Promise<boolean> {\n\t\tconst confirmResult = await inquirer.prompt({\n\t\t\ttype: 'confirm',\n\t\t\tname: 'answer',\n\t\t\tmessage: question,\n\t\t})\n\n\t\treturn !!confirmResult.answer\n\t}\n\n\tpublic async waitForEnter(message?: string) {\n\t\tawait this.prompt({\n\t\t\ttype: 'text',\n\t\t\tlabel: `${message ? message + ' ' : ''}${chalk.bgGreenBright.black(\n\t\t\t\t'hit enter'\n\t\t\t)}`,\n\t\t})\n\t\tthis.renderLine('')\n\t\treturn\n\t}\n\n\tpublic clear() {\n\t\tvoid this.stopLoading()\n\t\tconsole.clear()\n\t}\n\n\tpublic renderCodeSample(code: string) {\n\t\ttry {\n\t\t\tconst colored = emphasize.highlight('js', code).value\n\t\t\tthis.renderLine(colored)\n\t\t} catch (err: any) {\n\t\t\tthis.renderWarning(err)\n\t\t}\n\t}\n\n\tpublic async prompt<T extends FieldDefinitions>(\n\t\tdefinition: T\n\t): Promise<FieldDefinitionValueType<T>> {\n\t\tthis.isPromptActive = true\n\t\tconst name = generateInquirerFieldName()\n\t\tconst fieldDefinition: FieldDefinitions = definition\n\t\tconst { defaultValue } = fieldDefinition\n\n\t\tconst promptOptions: Record<string, any> = {\n\t\t\tdefault: defaultValue,\n\t\t\tname,\n\t\t\tmessage: this.generatePromptLabel(fieldDefinition),\n\t\t}\n\n\t\tconst field = FieldFactory.Field('prompt', fieldDefinition)\n\n\t\tpromptOptions.transformer = (value: string) => {\n\t\t\treturn (field as IField<any>).toValueType(value)\n\t\t}\n\n\t\tpromptOptions.validate = (value: string) => {\n\t\t\treturn areSchemaValuesValid(\n\t\t\t\t{\n\t\t\t\t\tid: 'promptvalidateschema',\n\t\t\t\t\tfields: {\n\t\t\t\t\t\tprompt: fieldDefinition,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ prompt: value }\n\t\t\t)\n\t\t\t// return field.validate(value, {}).length === 0\n\t\t}\n\n\t\tswitch (fieldDefinition.type) {\n\t\t\t// Map select options to prompt list choices\n\t\t\tcase 'boolean':\n\t\t\t\tpromptOptions.type = 'confirm'\n\t\t\t\tbreak\n\n\t\t\tcase 'select':\n\t\t\t\tpromptOptions.type = fieldDefinition.isArray ? 'checkbox' : 'list'\n\n\t\t\t\tpromptOptions.choices = fieldDefinition.options.choices.map(\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t(choice) => ({\n\t\t\t\t\t\tname: choice.label,\n\t\t\t\t\t\tvalue: choice.value,\n\t\t\t\t\t\tchecked: _.includes(fieldDefinition.defaultValue, choice.value),\n\t\t\t\t\t})\n\t\t\t\t)\n\n\t\t\t\tbreak\n\t\t\t// Directory select\n\t\t\t// File select\n\t\t\tcase 'directory': {\n\t\t\t\tif (fieldDefinition.isArray) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'NOT_IMPLEMENTED',\n\t\t\t\t\t\tfriendlyMessage:\n\t\t\t\t\t\t\t'isArray file field not supported, prompt needs to be rewritten with isArray support',\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tconst dirPath = path.join(\n\t\t\t\t\tfieldDefinition.defaultValue?.path ?? this.cwd,\n\t\t\t\t\t'/'\n\t\t\t\t)\n\n\t\t\t\tpromptOptions.type = 'file'\n\t\t\t\tpromptOptions.root = dirPath\n\t\t\t\tpromptOptions.onlyShowDir = true\n\n\t\t\t\t// Only let people select an actual file\n\t\t\t\tpromptOptions.validate = (value: string) => {\n\t\t\t\t\treturn fs.existsSync(value) && fs.lstatSync(value).isDirectory()\n\t\t\t\t}\n\t\t\t\t// Strip out cwd from the paths while selecting\n\t\t\t\tpromptOptions.transformer = (path: string) => {\n\t\t\t\t\tconst cleanedPath = path.replace(promptOptions.root, '')\n\t\t\t\t\treturn cleanedPath.length === 0 ? promptOptions.root : cleanedPath\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'file': {\n\t\t\t\tif (fieldDefinition.isArray) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'NOT_IMPLEMENTED',\n\t\t\t\t\t\tfriendlyMessage:\n\t\t\t\t\t\t\t'isArray file field not supported, prompt needs to be rewritten with isArray support',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst dirPath = path.join(\n\t\t\t\t\tfieldDefinition.defaultValue?.uri ?? this.cwd,\n\t\t\t\t\t'/'\n\t\t\t\t)\n\n\t\t\t\t// Check if directory is empty.\n\t\t\t\tconst files = await globby(`${dirPath}**/*`)\n\n\t\t\t\tif (files.length === 0) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'DIRECTORY_EMPTY',\n\t\t\t\t\t\tdirectory: dirPath,\n\t\t\t\t\t\tfriendlyMessage: `I wanted to help you select a file, but none exist in ${dirPath}.`,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tpromptOptions.type = 'file'\n\t\t\t\tpromptOptions.root = dirPath\n\n\t\t\t\t// Only let people select an actual file\n\t\t\t\tpromptOptions.validate = (value: string) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tfs.existsSync(value) &&\n\t\t\t\t\t\t!fs.lstatSync(value).isDirectory() &&\n\t\t\t\t\t\tpath.extname(value) === '.ts'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t// Strip out cwd from the paths while selecting\n\t\t\t\tpromptOptions.transformer = (path: string) => {\n\t\t\t\t\tconst cleanedPath = path.replace(promptOptions.root, '')\n\t\t\t\t\treturn cleanedPath.length === 0 ? promptOptions.root : cleanedPath\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Defaults to input\n\t\t\tdefault:\n\t\t\t\tpromptOptions.type = 'input'\n\t\t}\n\n\t\tconst response = (await inquirer.prompt(promptOptions)) as any\n\n\t\tthis.isPromptActive = false\n\n\t\tconst result =\n\t\t\ttypeof response[name] !== 'undefined'\n\t\t\t\t? (field as IField<any>).toValueType(response[name])\n\t\t\t\t: response[name]\n\n\t\treturn result\n\t}\n\tprivate generatePromptLabel(fieldDefinition: FieldDefinitions): any {\n\t\tlet label = fieldDefinition.label\n\n\t\tif (fieldDefinition.hint) {\n\t\t\tlabel = `${label} ${chalk.italic.dim(`(${fieldDefinition.hint})`)}`\n\t\t}\n\n\t\tlabel = label + ': '\n\n\t\treturn label\n\t}\n\n\tpublic renderError(err: Error) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-floating-promises\n\t\tthis.stopLoading()\n\n\t\tconst message = err.message\n\t\t// Remove message from stack so the message is not doubled up\n\t\tconst stackLines = this.cleanStack(err)\n\t\tthis.renderSection({\n\t\t\theadline: message,\n\t\t\tlines: this.renderStackTraces ? stackLines.splice(0, 100) : undefined,\n\t\t\theadlineEffects: [GraphicsTextEffect.Bold, GraphicsTextEffect.Red],\n\t\t\tdividerEffects: [GraphicsTextEffect.Red],\n\t\t\tbodyEffects: [GraphicsTextEffect.Red],\n\t\t})\n\t}\n\n\tprivate cleanStack(err: Error) {\n\t\tconst message = err.message\n\t\tlet stack = err.stack ? err.stack.replace(message, '') : ''\n\n\t\tif (err instanceof AbstractSpruceError) {\n\t\t\tlet original = err.originalError\n\t\t\twhile (original) {\n\t\t\t\tstack = stack.replace('Error: ' + original.message, '')\n\t\t\t\toriginal = (original as AbstractSpruceError).originalError\n\t\t\t}\n\t\t}\n\n\t\tconst stackLines = stack.split('\\n')\n\n\t\treturn stackLines\n\t}\n\n\tpublic renderProgressBar(options: ProgressBarOptions): void {\n\t\tthis.removeProgressBar()\n\t\tthis.progressBar = terminal.progressBar({\n\t\t\t...options,\n\t\t\tpercent: options.showPercent,\n\t\t\teta: options.showEta,\n\t\t\titems: options.totalItems,\n\t\t\tinline: options.renderInline,\n\t\t})\n\t}\n\n\tpublic removeProgressBar() {\n\t\tif (this.progressBar) {\n\t\t\tthis.progressBar.stop()\n\t\t\tthis.progressBar = null\n\t\t}\n\t}\n\n\tpublic updateProgressBar(options: ProgressBarUpdateOptions): void {\n\t\tif (this.progressBar) {\n\t\t\tthis.progressBar.update({\n\t\t\t\t...options,\n\t\t\t\titems: options.totalItems,\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async renderImage(\n\t\tpath: string,\n\t\toptions?: ImageDimensions\n\t): Promise<void> {\n\t\tconst image = await terminalImage.file(path, options)\n\t\tthis.renderLine(image)\n\t}\n\n\tpublic async getCursorPosition(): Promise<{ x: number; y: number } | null> {\n\t\treturn new Promise((resolve) => {\n\t\t\tterminal.requestCursorLocation()\n\t\t\tterminal.getCursorLocation((err, x, y) => {\n\t\t\t\tresolve(err ? null : { x: x ?? 0, y: y ?? 0 })\n\t\t\t})\n\t\t})\n\t}\n\n\tpublic saveCursor() {\n\t\tterminal.saveCursor()\n\t}\n\n\tpublic restoreCursor() {\n\t\tterminal.restoreCursor()\n\t}\n\n\tpublic moveCursorTo(x: number, y: number): void {\n\t\tterminal.moveTo(x, y)\n\t}\n\n\tpublic clearBelowCursor(): void {\n\t\tterminal.eraseDisplayBelow()\n\t}\n\n\tpublic eraseLine() {\n\t\tterminal.eraseLine()\n\t}\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  ]
19
19
  },
20
20
  "license": "MIT",
21
- "version": "17.0.5",
21
+ "version": "17.0.8",
22
22
  "bin": {
23
23
  "spruce": "./build/index.js"
24
24
  },
@@ -76,19 +76,19 @@
76
76
  "@babel/plugin-proposal-decorators": "^7.18.2",
77
77
  "@babel/runtime": "^7.18.3",
78
78
  "@jest/reporters": "^28.1.0",
79
- "@sprucelabs/error": "^5.0.460",
80
- "@sprucelabs/heartwood-view-controllers": "^80.0.0",
81
- "@sprucelabs/jest-json-reporter": "^6.0.390",
82
- "@sprucelabs/mercury-client": "^29.0.0",
83
- "@sprucelabs/mercury-event-emitter": "^29.0.0",
84
- "@sprucelabs/mercury-types": "^33.0.0",
85
- "@sprucelabs/schema": "^28.2.18",
86
- "@sprucelabs/spruce-core-schemas": "^32.0.0",
87
- "@sprucelabs/spruce-event-plugin": "^36.0.0",
88
- "@sprucelabs/spruce-event-utils": "^25.0.0",
89
- "@sprucelabs/spruce-skill-booter": "^36.0.0",
90
- "@sprucelabs/spruce-skill-utils": "^26.0.45",
91
- "@sprucelabs/spruce-templates": "^17.0.5",
79
+ "@sprucelabs/error": "^5.0.466",
80
+ "@sprucelabs/heartwood-view-controllers": "^81.0.24",
81
+ "@sprucelabs/jest-json-reporter": "^6.0.397",
82
+ "@sprucelabs/mercury-client": "^30.0.19",
83
+ "@sprucelabs/mercury-event-emitter": "^30.0.19",
84
+ "@sprucelabs/mercury-types": "^34.0.17",
85
+ "@sprucelabs/schema": "^28.2.31",
86
+ "@sprucelabs/spruce-core-schemas": "^33.0.16",
87
+ "@sprucelabs/spruce-event-plugin": "^37.0.10",
88
+ "@sprucelabs/spruce-event-utils": "^26.0.20",
89
+ "@sprucelabs/spruce-skill-booter": "^37.0.10",
90
+ "@sprucelabs/spruce-skill-utils": "^26.0.60",
91
+ "@sprucelabs/spruce-templates": "^17.0.8",
92
92
  "@typescript-eslint/eslint-plugin": "^5.27.0",
93
93
  "@typescript-eslint/parser": "^5.27.0",
94
94
  "cfonts": "^3.1.0",
@@ -96,7 +96,7 @@
96
96
  "chokidar": "^3.5.3",
97
97
  "cli-table3": "^0.6.2",
98
98
  "commander": "7.2.0",
99
- "core-js": "^3.22.7",
99
+ "core-js": "^3.22.8",
100
100
  "emphasize": "4.2.0",
101
101
  "fs-extra": "^10.1.0",
102
102
  "gifwrap": "^0.10.1",
@@ -119,16 +119,16 @@
119
119
  "uuid": "^8.3.2"
120
120
  },
121
121
  "devDependencies": {
122
- "@sprucelabs/data-stores": "^15.0.0",
123
- "@sprucelabs/jest-sheets-reporter": "^1.3.44",
124
- "@sprucelabs/mercury-core-events": "^10.0.0",
125
- "@sprucelabs/resolve-path-aliases": "^1.1.50",
126
- "@sprucelabs/spruce-conversation-plugin": "^36.0.0",
127
- "@sprucelabs/spruce-deploy-plugin": "^36.0.0",
128
- "@sprucelabs/spruce-store-plugin": "^36.0.0",
129
- "@sprucelabs/spruce-test-fixtures": "^36.0.0",
130
- "@sprucelabs/test": "^7.7.318",
131
- "@sprucelabs/test-utils": "^3.0.558",
122
+ "@sprucelabs/data-stores": "^16.0.17",
123
+ "@sprucelabs/jest-sheets-reporter": "^1.3.45",
124
+ "@sprucelabs/mercury-core-events": "^11.0.19",
125
+ "@sprucelabs/resolve-path-aliases": "^1.1.55",
126
+ "@sprucelabs/spruce-conversation-plugin": "^37.0.10",
127
+ "@sprucelabs/spruce-deploy-plugin": "^37.0.10",
128
+ "@sprucelabs/spruce-store-plugin": "^37.0.10",
129
+ "@sprucelabs/spruce-test-fixtures": "^37.0.10",
130
+ "@sprucelabs/test": "^7.7.323",
131
+ "@sprucelabs/test-utils": "^3.0.568",
132
132
  "@types/blessed": "^0.1.19",
133
133
  "@types/eslint": "^8.4.2",
134
134
  "@types/fs-extra": "^9.0.13",
@@ -138,7 +138,7 @@
138
138
  "@types/lodash": "^4.14.182",
139
139
  "@types/md5": "^2.3.2",
140
140
  "@types/mkdirp": "^1.0.2",
141
- "@types/node": "^17.0.38",
141
+ "@types/node": "^17.0.40",
142
142
  "@types/promise.allsettled": "^1.0.3",
143
143
  "@types/ps-node": "^0.1.1",
144
144
  "@types/rimraf": "^3.0.2",
@@ -152,7 +152,7 @@
152
152
  "concurrently": "^7.2.1",
153
153
  "conventional-changelog-sprucelabs": "^1.1.2",
154
154
  "dotenv": "^16.0.1",
155
- "eslint": "^8.16.0",
155
+ "eslint": "^8.17.0",
156
156
  "eslint-config-spruce": "^10.11.2",
157
157
  "find-process": "^1.4.7",
158
158
  "jest": "^28.1.0",
@@ -162,11 +162,11 @@
162
162
  "prettier": "^2.6.2",
163
163
  "ps-node": "^0.1.6",
164
164
  "rimraf": "^3.0.2",
165
- "ts-jest": "^28.0.3",
166
- "ts-node": "^10.8.0",
165
+ "ts-jest": "^28.0.4",
166
+ "ts-node": "^10.8.1",
167
167
  "tsc-watch": "^5.0.3",
168
168
  "tsconfig-paths": "^4.0.0",
169
- "typescript": "^4.7.2"
169
+ "typescript": "^4.7.3"
170
170
  },
171
171
  "testSkillCache": {
172
172
  "everything": [
@@ -597,5 +597,5 @@
597
597
  "terminal-kit"
598
598
  ]
599
599
  },
600
- "gitHead": "8b1e927a6b8f81622a6c9865a35dcbc3ef7688a7"
600
+ "gitHead": "c50c82af70bb32bbdf87dad275f58ce39d17f424"
601
601
  }
@@ -290,12 +290,18 @@ export default class TerminalInterface implements GraphicsInterface {
290
290
  public renderHero(message: string, effects?: GraphicsTextEffect[]) {
291
291
  const shouldStripVowels = process.stdout.columns < 80
292
292
 
293
- const stripped = shouldStripVowels
293
+ let stripped = shouldStripVowels
294
294
  ? message.replace(/[aeiou]/gi, '')
295
295
  : message
296
296
 
297
+ if (
298
+ shouldStripVowels &&
299
+ ['a', 'e', 'i', 'o', 'u'].indexOf(message[0].toLowerCase()) > -1
300
+ ) {
301
+ stripped = `${message[0]}${stripped}`
302
+ }
303
+
297
304
  fonts.say(stripped, {
298
- // Font: 'tiny',
299
305
  align: 'left',
300
306
  gradient: [GraphicsTextEffect.Red, GraphicsTextEffect.Blue],
301
307
  colors: effects ? filterEffectsForCFonts(effects) : undefined,