@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.
|
|
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.
|
|
80
|
-
"@sprucelabs/heartwood-view-controllers": "^
|
|
81
|
-
"@sprucelabs/jest-json-reporter": "^6.0.
|
|
82
|
-
"@sprucelabs/mercury-client": "^
|
|
83
|
-
"@sprucelabs/mercury-event-emitter": "^
|
|
84
|
-
"@sprucelabs/mercury-types": "^
|
|
85
|
-
"@sprucelabs/schema": "^28.2.
|
|
86
|
-
"@sprucelabs/spruce-core-schemas": "^
|
|
87
|
-
"@sprucelabs/spruce-event-plugin": "^
|
|
88
|
-
"@sprucelabs/spruce-event-utils": "^
|
|
89
|
-
"@sprucelabs/spruce-skill-booter": "^
|
|
90
|
-
"@sprucelabs/spruce-skill-utils": "^26.0.
|
|
91
|
-
"@sprucelabs/spruce-templates": "^17.0.
|
|
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.
|
|
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": "^
|
|
123
|
-
"@sprucelabs/jest-sheets-reporter": "^1.3.
|
|
124
|
-
"@sprucelabs/mercury-core-events": "^
|
|
125
|
-
"@sprucelabs/resolve-path-aliases": "^1.1.
|
|
126
|
-
"@sprucelabs/spruce-conversation-plugin": "^
|
|
127
|
-
"@sprucelabs/spruce-deploy-plugin": "^
|
|
128
|
-
"@sprucelabs/spruce-store-plugin": "^
|
|
129
|
-
"@sprucelabs/spruce-test-fixtures": "^
|
|
130
|
-
"@sprucelabs/test": "^7.7.
|
|
131
|
-
"@sprucelabs/test-utils": "^3.0.
|
|
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.
|
|
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.
|
|
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.
|
|
166
|
-
"ts-node": "^10.8.
|
|
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.
|
|
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": "
|
|
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
|
-
|
|
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,
|