@sprucelabs/spruce-cli 14.29.12 → 14.29.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/build/.spruce/schemas/heartwood/v2021_02_11/listViewsResponsePayload.schema.d.ts +3 -0
  3. package/build/.spruce/schemas/heartwood/v2021_02_11/listViewsResponsePayload.schema.js +37 -0
  4. package/build/.spruce/schemas/heartwood/v2021_02_11/listViewsResponsePayload.schema.js.map +1 -0
  5. package/build/.spruce/schemas/heartwood/v2021_02_11/listViewsResult.schema.d.ts +3 -0
  6. package/build/.spruce/schemas/heartwood/v2021_02_11/listViewsResult.schema.js +51 -0
  7. package/build/.spruce/schemas/heartwood/v2021_02_11/listViewsResult.schema.js.map +1 -0
  8. package/build/.spruce/schemas/schemas.types.d.ts +84 -16
  9. package/build/.spruce/schemas/schemas.types.js.map +1 -1
  10. package/build/.spruce/schemas/spruceCli/v2020_07_22/setupTestsOptions.schema.js +2 -2
  11. package/build/.spruce/schemas/spruceCli/v2020_07_22/setupTestsOptions.schema.js.map +1 -1
  12. package/build/__tests__/testDirsAndFiles/related_schemas/v2020_10_06/skillWithExtraField.builder.d.ts +1 -1
  13. package/build/constants.d.ts +1 -1
  14. package/build/constants.js +1 -1
  15. package/build/constants.js.map +1 -1
  16. package/build/features/skill/actions/LoginAction.js +1 -1
  17. package/build/features/skill/actions/LoginAction.js.map +1 -1
  18. package/build/features/skill/actions/RegisterAction.js +1 -1
  19. package/build/features/skill/actions/RegisterAction.js.map +1 -1
  20. package/build/interfaces/TerminalInterface.js +1 -1
  21. package/build/interfaces/TerminalInterface.js.map +1 -1
  22. package/build/schemas/v2020_07_22/setupTestsOptions.builder.js +1 -1
  23. package/build/schemas/v2020_07_22/setupTestsOptions.builder.js.map +1 -1
  24. package/package.json +29 -29
  25. package/src/.spruce/schemas/heartwood/v2021_02_11/listViewsResponsePayload.schema.ts +25 -0
  26. package/src/.spruce/schemas/heartwood/v2021_02_11/listViewsResult.schema.ts +43 -0
  27. package/src/.spruce/schemas/schemas.types.ts +102 -18
  28. package/src/.spruce/schemas/spruceCli/v2020_07_22/setupTestsOptions.schema.ts +2 -2
  29. package/src/constants.ts +1 -1
  30. package/src/features/skill/actions/LoginAction.ts +1 -1
  31. package/src/features/skill/actions/RegisterAction.ts +1 -1
  32. package/src/interfaces/TerminalInterface.ts +1 -1
  33. package/src/schemas/v2020_07_22/setupTestsOptions.builder.ts +1 -1
@@ -22,9 +22,9 @@ var setupTestsOptionsSchema = {
22
22
  options: undefined
23
23
  },
24
24
 
25
- /** Skill slug. */
25
+ /** Namespace. */
26
26
  'skillSlug': {
27
- label: 'Skill slug',
27
+ label: 'Namespace',
28
28
  type: 'text',
29
29
  isRequired: true,
30
30
  options: undefined
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/.spruce/schemas/spruceCli/v2020_07_22/setupTestsOptions.schema.ts"],"names":["setupTestsOptionsSchema","id","version","namespace","name","description","fields","label","type","isRequired","options","undefined","SchemaRegistry","getInstance","trackSchema"],"mappings":";;;;;;;AAAA;;AAKA,IAAMA,uBAAoF,GAAI;AAC7FC,EAAAA,EAAE,EAAE,mBADyF;AAE7FC,EAAAA,OAAO,EAAE,aAFoF;AAG7FC,EAAAA,SAAS,EAAE,WAHkF;AAI7FC,EAAAA,IAAI,EAAE,qBAJuF;AAK7FC,EAAAA,WAAW,EAAE,+EALgF;AAMzFC,EAAAA,MAAM,EAAE;AACA;AACA,kBAAc;AACVC,MAAAA,KAAK,EAAE,mBADG;AAEVC,MAAAA,IAAI,EAAE,OAFI;AAGVC,MAAAA,UAAU,EAAE,IAHF;AAIVC,MAAAA,OAAO,EAAEC;AAJC,KAFd;;AAQA;AACA,iBAAa;AACTJ,MAAAA,KAAK,EAAE,YADE;AAETC,MAAAA,IAAI,EAAE,MAFG;AAGTC,MAAAA,UAAU,EAAE,IAHH;AAITC,MAAAA,OAAO,EAAEC;AAJA;AATb;AANiF,CAA9F;;AAwBAC,uBAAeC,WAAf,GAA6BC,WAA7B,CAAyCd,uBAAzC;;eAEeA,uB","sourcesContent":["import { SchemaRegistry } from '@sprucelabs/schema'\nimport { SpruceSchemas } from '../../schemas.types'\n\n\n\nconst setupTestsOptionsSchema: SpruceSchemas.SpruceCli.v2020_07_22.SetupTestsOptionsSchema = {\n\tid: 'setupTestsOptions',\n\tversion: 'v2020_07_22',\n\tnamespace: 'SpruceCli',\n\tname: 'Setup tests options',\n\tdescription: 'Use this with in your CI/CD environment to get your skill ready to run tests.',\n\t fields: {\n\t /** Demo phone number. */\n\t 'demoNumber': {\n\t label: 'Demo phone number',\n\t type: 'phone',\n\t isRequired: true,\n\t options: undefined\n\t },\n\t /** Skill slug. */\n\t 'skillSlug': {\n\t label: 'Skill slug',\n\t type: 'text',\n\t isRequired: true,\n\t options: undefined\n\t },\n\t }\n}\n\nSchemaRegistry.getInstance().trackSchema(setupTestsOptionsSchema)\n\nexport default setupTestsOptionsSchema\n"],"file":"setupTestsOptions.schema.js"}
1
+ {"version":3,"sources":["../../../../../src/.spruce/schemas/spruceCli/v2020_07_22/setupTestsOptions.schema.ts"],"names":["setupTestsOptionsSchema","id","version","namespace","name","description","fields","label","type","isRequired","options","undefined","SchemaRegistry","getInstance","trackSchema"],"mappings":";;;;;;;AAAA;;AAKA,IAAMA,uBAAoF,GAAI;AAC7FC,EAAAA,EAAE,EAAE,mBADyF;AAE7FC,EAAAA,OAAO,EAAE,aAFoF;AAG7FC,EAAAA,SAAS,EAAE,WAHkF;AAI7FC,EAAAA,IAAI,EAAE,qBAJuF;AAK7FC,EAAAA,WAAW,EAAE,+EALgF;AAMzFC,EAAAA,MAAM,EAAE;AACA;AACA,kBAAc;AACVC,MAAAA,KAAK,EAAE,mBADG;AAEVC,MAAAA,IAAI,EAAE,OAFI;AAGVC,MAAAA,UAAU,EAAE,IAHF;AAIVC,MAAAA,OAAO,EAAEC;AAJC,KAFd;;AAQA;AACA,iBAAa;AACTJ,MAAAA,KAAK,EAAE,WADE;AAETC,MAAAA,IAAI,EAAE,MAFG;AAGTC,MAAAA,UAAU,EAAE,IAHH;AAITC,MAAAA,OAAO,EAAEC;AAJA;AATb;AANiF,CAA9F;;AAwBAC,uBAAeC,WAAf,GAA6BC,WAA7B,CAAyCd,uBAAzC;;eAEeA,uB","sourcesContent":["import { SchemaRegistry } from '@sprucelabs/schema'\nimport { SpruceSchemas } from '../../schemas.types'\n\n\n\nconst setupTestsOptionsSchema: SpruceSchemas.SpruceCli.v2020_07_22.SetupTestsOptionsSchema = {\n\tid: 'setupTestsOptions',\n\tversion: 'v2020_07_22',\n\tnamespace: 'SpruceCli',\n\tname: 'Setup tests options',\n\tdescription: 'Use this with in your CI/CD environment to get your skill ready to run tests.',\n\t fields: {\n\t /** Demo phone number. */\n\t 'demoNumber': {\n\t label: 'Demo phone number',\n\t type: 'phone',\n\t isRequired: true,\n\t options: undefined\n\t },\n\t /** Namespace. */\n\t 'skillSlug': {\n\t label: 'Namespace',\n\t type: 'text',\n\t isRequired: true,\n\t options: undefined\n\t },\n\t }\n}\n\nSchemaRegistry.getInstance().trackSchema(setupTestsOptionsSchema)\n\nexport default setupTestsOptionsSchema\n"],"file":"setupTestsOptions.schema.js"}
@@ -40,7 +40,7 @@ declare const _default: {
40
40
  options: undefined;
41
41
  };
42
42
  slug: {
43
- label: "Slug";
43
+ label: "Namespace";
44
44
  type: "text";
45
45
  isRequired: true;
46
46
  options: undefined;
@@ -1,5 +1,5 @@
1
1
  export declare const DEFAULT_HOST = "https://mercury.spruce.ai";
2
- export declare const CLI_HERO = "SPRCBT";
2
+ export declare const CLI_HERO = "Sprucebot";
3
3
  export declare const FILE_ACTION_OVERWRITE = "overwrite";
4
4
  export declare const FILE_ACTION_SKIP = "skip";
5
5
  export declare const FILE_ACTION_ALWAYS_SKIP = "alwaysSkip";
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.FILE_ACTION_SKIP = exports.FILE_ACTION_OVERWRITE = exports.FILE_ACTION_ALWAYS_SKIP = exports.DEFAULT_HOST = exports.CLI_HERO = void 0;
7
7
  var DEFAULT_HOST = 'https://mercury.spruce.ai';
8
8
  exports.DEFAULT_HOST = DEFAULT_HOST;
9
- var CLI_HERO = 'SPRCBT';
9
+ var CLI_HERO = 'Sprucebot';
10
10
  exports.CLI_HERO = CLI_HERO;
11
11
  var FILE_ACTION_OVERWRITE = 'overwrite';
12
12
  exports.FILE_ACTION_OVERWRITE = FILE_ACTION_OVERWRITE;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts"],"names":["DEFAULT_HOST","CLI_HERO","FILE_ACTION_OVERWRITE","FILE_ACTION_SKIP","FILE_ACTION_ALWAYS_SKIP"],"mappings":";;;;;;AAAO,IAAMA,YAAY,GAAG,2BAArB;;AACA,IAAMC,QAAQ,GAAG,QAAjB;;AAEA,IAAMC,qBAAqB,GAAG,WAA9B;;AACA,IAAMC,gBAAgB,GAAG,MAAzB;;AACA,IAAMC,uBAAuB,GAAG,YAAhC","sourcesContent":["export const DEFAULT_HOST = 'https://mercury.spruce.ai'\nexport const CLI_HERO = 'SPRCBT'\n\nexport const FILE_ACTION_OVERWRITE = 'overwrite'\nexport const FILE_ACTION_SKIP = 'skip'\nexport const FILE_ACTION_ALWAYS_SKIP = 'alwaysSkip'\n"],"file":"constants.js"}
1
+ {"version":3,"sources":["../src/constants.ts"],"names":["DEFAULT_HOST","CLI_HERO","FILE_ACTION_OVERWRITE","FILE_ACTION_SKIP","FILE_ACTION_ALWAYS_SKIP"],"mappings":";;;;;;AAAO,IAAMA,YAAY,GAAG,2BAArB;;AACA,IAAMC,QAAQ,GAAG,WAAjB;;AAEA,IAAMC,qBAAqB,GAAG,WAA9B;;AACA,IAAMC,gBAAgB,GAAG,MAAzB;;AACA,IAAMC,uBAAuB,GAAG,YAAhC","sourcesContent":["export const DEFAULT_HOST = 'https://mercury.spruce.ai'\nexport const CLI_HERO = 'Sprucebot'\n\nexport const FILE_ACTION_OVERWRITE = 'overwrite'\nexport const FILE_ACTION_SKIP = 'skip'\nexport const FILE_ACTION_ALWAYS_SKIP = 'alwaysSkip'\n"],"file":"constants.js"}
@@ -47,7 +47,7 @@ var optionsSchema = (0, _schema.buildSchema)({
47
47
  fields: {
48
48
  skillSlug: {
49
49
  type: 'text',
50
- label: 'Skill slug'
50
+ label: 'Namespace'
51
51
  }
52
52
  }
53
53
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/skill/actions/LoginAction.ts"],"names":["optionsSchema","id","description","fields","skillSlug","type","label","LoginAction","options","validateAndNormalizeOptions","person","Service","getLoggedInPerson","loginResponse","skillResponse","ui","renderLine","prompt","isRequired","phone","Action","execute","connectToApi","client","emit","payload","shouldOnlyShowMine","skillResults","eventResponseUtil","getFirstResponseOrThrow","skills","match","find","s","slug","errors","SpruceError","code","friendlyMessage","length","error","choices","map","name","value","selectedSkillId","filter","target","skillId","shouldIncludeApiKey","currentSkillResults","skill","updateCurrentSkill","summaryLines","meta","actionUtil","mergeActionResults","AbstractAction"],"mappings":"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","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { generateSkillSummaryLines } from './RegisterAction'\n\nconst optionsSchema = buildSchema({\n\tid: 'loginSkillAction',\n\tdescription:\n\t\t'If you already registered your skill but lost your env or changed environments.',\n\tfields: {\n\t\tskillSlug: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'Skill slug',\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class LoginAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['login.skill']\n\tpublic invocationMessage = 'Logging in as skill... ⚡️'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { skillSlug } = this.validateAndNormalizeOptions(options)\n\n\t\tconst person = this.Service('auth').getLoggedInPerson()\n\t\tlet loginResponse: FeatureActionResponse = {}\n\t\tlet skillResponse: FeatureActionResponse = {}\n\n\t\tif (!person) {\n\t\t\tthis.ui.renderLine(\n\t\t\t\t'You gotta login as a person before you can login as a skill.'\n\t\t\t)\n\n\t\t\tconst phone = await this.ui.prompt({\n\t\t\t\ttype: 'phone',\n\t\t\t\tlabel: 'Phone number',\n\t\t\t\tisRequired: true,\n\t\t\t})\n\n\t\t\tloginResponse = await this.Action('person', 'login').execute({\n\t\t\t\tphone,\n\t\t\t})\n\t\t}\n\n\t\tconst client = await this.connectToApi()\n\t\tconst skillResults = await client.emit('list-skills::v2020_12_25', {\n\t\t\tpayload: {\n\t\t\t\tshouldOnlyShowMine: true,\n\t\t\t},\n\t\t})\n\n\t\tlet { skills } = eventResponseUtil.getFirstResponseOrThrow(skillResults)\n\n\t\tif (skillSlug) {\n\t\t\tconst match = skills.find((s) => s.slug === skillSlug)\n\n\t\t\tif (!match) {\n\t\t\t\treturn {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({\n\t\t\t\t\t\t\tcode: 'SKILL_NOT_FOUND',\n\t\t\t\t\t\t\tfriendlyMessage: `I couldn't find a skill that you own with the slug: ${skillSlug}`,\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tskills = [match]\n\t\t}\n\n\t\tif (skills.length === 0) {\n\t\t\tconst error = new SpruceError({ code: 'NO_SKILLS_REGISTERED' })\n\n\t\t\tif (error) {\n\t\t\t\treturn {\n\t\t\t\t\terrors: [error],\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (skills.length > 1) {\n\t\t\tconst selectedSkillId = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Which skill are we logging in as?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices: skills.map((s) => ({\n\t\t\t\t\t\tlabel: s.name,\n\t\t\t\t\t\tvalue: s.id,\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tskills = skills.filter((s) => s.id === selectedSkillId)\n\t\t}\n\n\t\tif (skills.length === 1) {\n\t\t\tconst currentSkillResults = await client.emit('get-skill::v2020_12_25', {\n\t\t\t\ttarget: {\n\t\t\t\t\tskillId: skills[0].id,\n\t\t\t\t},\n\t\t\t\tpayload: {\n\t\t\t\t\tshouldIncludeApiKey: true,\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tconst { skill } =\n\t\t\t\teventResponseUtil.getFirstResponseOrThrow(currentSkillResults)\n\n\t\t\tthis.Service('auth').updateCurrentSkill(skill)\n\n\t\t\tskillResponse.summaryLines = generateSkillSummaryLines(skill)\n\t\t\tskillResponse.meta = {\n\t\t\t\tskill,\n\t\t\t}\n\t\t}\n\n\t\treturn actionUtil.mergeActionResults(loginResponse, skillResponse)\n\t}\n}\n"],"file":"LoginAction.js"}
1
+ {"version":3,"sources":["../../../../src/features/skill/actions/LoginAction.ts"],"names":["optionsSchema","id","description","fields","skillSlug","type","label","LoginAction","options","validateAndNormalizeOptions","person","Service","getLoggedInPerson","loginResponse","skillResponse","ui","renderLine","prompt","isRequired","phone","Action","execute","connectToApi","client","emit","payload","shouldOnlyShowMine","skillResults","eventResponseUtil","getFirstResponseOrThrow","skills","match","find","s","slug","errors","SpruceError","code","friendlyMessage","length","error","choices","map","name","value","selectedSkillId","filter","target","skillId","shouldIncludeApiKey","currentSkillResults","skill","updateCurrentSkill","summaryLines","meta","actionUtil","mergeActionResults","AbstractAction"],"mappings":"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","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { generateSkillSummaryLines } from './RegisterAction'\n\nconst optionsSchema = buildSchema({\n\tid: 'loginSkillAction',\n\tdescription:\n\t\t'If you already registered your skill but lost your env or changed environments.',\n\tfields: {\n\t\tskillSlug: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'Namespace',\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class LoginAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['login.skill']\n\tpublic invocationMessage = 'Logging in as skill... ⚡️'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { skillSlug } = this.validateAndNormalizeOptions(options)\n\n\t\tconst person = this.Service('auth').getLoggedInPerson()\n\t\tlet loginResponse: FeatureActionResponse = {}\n\t\tlet skillResponse: FeatureActionResponse = {}\n\n\t\tif (!person) {\n\t\t\tthis.ui.renderLine(\n\t\t\t\t'You gotta login as a person before you can login as a skill.'\n\t\t\t)\n\n\t\t\tconst phone = await this.ui.prompt({\n\t\t\t\ttype: 'phone',\n\t\t\t\tlabel: 'Phone number',\n\t\t\t\tisRequired: true,\n\t\t\t})\n\n\t\t\tloginResponse = await this.Action('person', 'login').execute({\n\t\t\t\tphone,\n\t\t\t})\n\t\t}\n\n\t\tconst client = await this.connectToApi()\n\t\tconst skillResults = await client.emit('list-skills::v2020_12_25', {\n\t\t\tpayload: {\n\t\t\t\tshouldOnlyShowMine: true,\n\t\t\t},\n\t\t})\n\n\t\tlet { skills } = eventResponseUtil.getFirstResponseOrThrow(skillResults)\n\n\t\tif (skillSlug) {\n\t\t\tconst match = skills.find((s) => s.slug === skillSlug)\n\n\t\t\tif (!match) {\n\t\t\t\treturn {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({\n\t\t\t\t\t\t\tcode: 'SKILL_NOT_FOUND',\n\t\t\t\t\t\t\tfriendlyMessage: `I couldn't find a skill that you own with the slug: ${skillSlug}`,\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tskills = [match]\n\t\t}\n\n\t\tif (skills.length === 0) {\n\t\t\tconst error = new SpruceError({ code: 'NO_SKILLS_REGISTERED' })\n\n\t\t\tif (error) {\n\t\t\t\treturn {\n\t\t\t\t\terrors: [error],\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (skills.length > 1) {\n\t\t\tconst selectedSkillId = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Which skill are we logging in as?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices: skills.map((s) => ({\n\t\t\t\t\t\tlabel: s.name,\n\t\t\t\t\t\tvalue: s.id,\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tskills = skills.filter((s) => s.id === selectedSkillId)\n\t\t}\n\n\t\tif (skills.length === 1) {\n\t\t\tconst currentSkillResults = await client.emit('get-skill::v2020_12_25', {\n\t\t\t\ttarget: {\n\t\t\t\t\tskillId: skills[0].id,\n\t\t\t\t},\n\t\t\t\tpayload: {\n\t\t\t\t\tshouldIncludeApiKey: true,\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tconst { skill } =\n\t\t\t\teventResponseUtil.getFirstResponseOrThrow(currentSkillResults)\n\n\t\t\tthis.Service('auth').updateCurrentSkill(skill)\n\n\t\t\tskillResponse.summaryLines = generateSkillSummaryLines(skill)\n\t\t\tskillResponse.meta = {\n\t\t\t\tskill,\n\t\t\t}\n\t\t}\n\n\t\treturn actionUtil.mergeActionResults(loginResponse, skillResponse)\n\t}\n}\n"],"file":"LoginAction.js"}
@@ -47,7 +47,7 @@ var optionsSchema = (0, _schema.buildSchema)({
47
47
  },
48
48
  nameKebab: {
49
49
  type: 'text',
50
- label: 'Slug',
50
+ label: 'Namespace',
51
51
  isRequired: true
52
52
  },
53
53
  description: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/skill/actions/RegisterAction.ts"],"names":["optionsSchema","id","description","fields","nameReadable","type","label","isRequired","nameKebab","RegisterAction","options","validateAndNormalizeOptions","connectToApi","client","emit","payload","name","slug","results","eventResponseUtil","getFirstResponseOrThrow","skill","summaryLines","generateSkillSummaryLines","Service","updateCurrentSkill","hints","meta","errors","AbstractAction","apiKey"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;;;;;AAGA,IAAMA,aAAa,GAAG,yBAAY;AACjCC,EAAAA,EAAE,EAAE,qBAD6B;AAEjCC,EAAAA,WAAW,EACV,oFAHgC;AAIjCC,EAAAA,MAAM,EAAE;AACPC,IAAAA,YAAY,EAAE;AACbC,MAAAA,IAAI,EAAE,MADO;AAEbC,MAAAA,KAAK,8BAFQ;AAGbC,MAAAA,UAAU,EAAE;AAHC,KADP;AAMPC,IAAAA,SAAS,EAAE;AACVH,MAAAA,IAAI,EAAE,MADI;AAEVC,MAAAA,KAAK,EAAE,MAFG;AAGVC,MAAAA,UAAU,EAAE;AAHF,KANJ;AAWPL,IAAAA,WAAW,EAAE;AACZG,MAAAA,IAAI,EAAE,MADM;AAEZC,MAAAA,KAAK,EAAE;AAFK;AAXN;AAJyB,CAAZ,CAAtB;;IAyBqBG,c;;;;;;;;;;;;;;;sGACkBT,a;uGACd,CAAC,gBAAD,EAAmB,UAAnB,C;0GACG,8B;;;;;;;mGAE3B,iBAAqBU,OAArB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,wCAEE,KAAKC,2BAAL,CAAiCD,OAAjC,CAFF,EACSN,YADT,yBACSA,YADT,EACuBI,SADvB,yBACuBA,SADvB,EACkCN,WADlC,yBACkCA,WADlC;AAAA;AAAA,uBAIsB,KAAKU,YAAL,EAJtB;;AAAA;AAIOC,gBAAAA,MAJP;AAAA;AAAA,uBAKuBA,MAAM,CAACC,IAAP,CAAY,6BAAZ,EAA2C;AAChEC,kBAAAA,OAAO,EAAE;AACRC,oBAAAA,IAAI,EAAEZ,YADE;AAERa,oBAAAA,IAAI,EAAET,SAFE;AAGRN,oBAAAA,WAAW,EAAXA;AAHQ;AADuD,iBAA3C,CALvB;;AAAA;AAKOgB,gBAAAA,OALP;AAAA;AAAA,wCAcoBC,oCAAkBC,uBAAlB,CAA0CF,OAA1C,CAdpB,EAcUG,KAdV,yBAcUA,KAdV;AAgBQC,gBAAAA,YAhBR,GAgBuBC,yBAAyB,CAACF,KAAD,CAhBhD;AAkBE,qBAAKG,OAAL,CAAa,MAAb,EAAqBC,kBAArB,CAAwCJ,KAAxC;AAlBF,iDAoBS;AACNC,kBAAAA,YAAY,EAAZA,YADM;AAENI,kBAAAA,KAAK,EAAE,CACN,2BADM,EAEN,2CAFM,EAGN,oDAHM,CAFD;AAONC,kBAAAA,IAAI,EAAE;AACLN,oBAAAA,KAAK,EAALA;AADK;AAPA,iBApBT;;AAAA;AAAA;AAAA;AAAA,iDAgCS;AACNK,kBAAAA,KAAK,EAAE,sEADD;AAINE,kBAAAA,MAAM,EAAE;AAJF,iBAhCT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAL2CC,2B;;;;AA+CrC,SAASN,yBAAT,CAAmCF,KAAnC,EAA2D;AACjE,SAAO,iBACGA,KAAK,CAACL,IADT,mBAEGK,KAAK,CAACJ,IAFT,iBAGCI,KAAK,CAACpB,EAHP,sBAIMoB,KAAK,CAACS,MAJZ,EAAP;AAMA","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport { RegisteredSkill } from '../../../types/cli.types'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'registerSkillAction',\n\tdescription:\n\t\t'Register your skill with Mercury so you can start communicating with other skills.',\n\tfields: {\n\t\tnameReadable: {\n\t\t\ttype: 'text',\n\t\t\tlabel: `What is your skill's name?`,\n\t\t\tisRequired: true,\n\t\t},\n\t\tnameKebab: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'Slug',\n\t\t\tisRequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'Describe your skill',\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class RegisterAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['register.skill', 'register']\n\tpublic invocationMessage = 'Registering your skill... ⚡️'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { nameReadable, nameKebab, description } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tconst client = await this.connectToApi()\n\t\tconst results = await client.emit('register-skill::v2020_12_25', {\n\t\t\tpayload: {\n\t\t\t\tname: nameReadable,\n\t\t\t\tslug: nameKebab,\n\t\t\t\tdescription,\n\t\t\t},\n\t\t})\n\n\t\ttry {\n\t\t\tconst { skill } = eventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\t\tconst summaryLines = generateSkillSummaryLines(skill)\n\n\t\t\tthis.Service('auth').updateCurrentSkill(skill)\n\n\t\t\treturn {\n\t\t\t\tsummaryLines,\n\t\t\t\thints: [\n\t\t\t\t\t'Your skill is registered.',\n\t\t\t\t\t'You can check your .env for more details.',\n\t\t\t\t\t\"If you're ready to deploy, try `spruce deploy`. 🚀\",\n\t\t\t\t],\n\t\t\t\tmeta: {\n\t\t\t\t\tskill,\n\t\t\t\t},\n\t\t\t}\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\thints: [\n\t\t\t\t\t`If you've already registered your skill, try 'spruce skill.login'!`,\n\t\t\t\t],\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function generateSkillSummaryLines(skill: RegisteredSkill) {\n\treturn [\n\t\t`Name: ${skill.name}`,\n\t\t`Slug: ${skill.slug}`,\n\t\t`ID: ${skill.id}`,\n\t\t`API Key: ${skill.apiKey}`,\n\t]\n}\n"],"file":"RegisterAction.js"}
1
+ {"version":3,"sources":["../../../../src/features/skill/actions/RegisterAction.ts"],"names":["optionsSchema","id","description","fields","nameReadable","type","label","isRequired","nameKebab","RegisterAction","options","validateAndNormalizeOptions","connectToApi","client","emit","payload","name","slug","results","eventResponseUtil","getFirstResponseOrThrow","skill","summaryLines","generateSkillSummaryLines","Service","updateCurrentSkill","hints","meta","errors","AbstractAction","apiKey"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;;;;;AAGA,IAAMA,aAAa,GAAG,yBAAY;AACjCC,EAAAA,EAAE,EAAE,qBAD6B;AAEjCC,EAAAA,WAAW,EACV,oFAHgC;AAIjCC,EAAAA,MAAM,EAAE;AACPC,IAAAA,YAAY,EAAE;AACbC,MAAAA,IAAI,EAAE,MADO;AAEbC,MAAAA,KAAK,8BAFQ;AAGbC,MAAAA,UAAU,EAAE;AAHC,KADP;AAMPC,IAAAA,SAAS,EAAE;AACVH,MAAAA,IAAI,EAAE,MADI;AAEVC,MAAAA,KAAK,EAAE,WAFG;AAGVC,MAAAA,UAAU,EAAE;AAHF,KANJ;AAWPL,IAAAA,WAAW,EAAE;AACZG,MAAAA,IAAI,EAAE,MADM;AAEZC,MAAAA,KAAK,EAAE;AAFK;AAXN;AAJyB,CAAZ,CAAtB;;IAyBqBG,c;;;;;;;;;;;;;;;sGACkBT,a;uGACd,CAAC,gBAAD,EAAmB,UAAnB,C;0GACG,8B;;;;;;;mGAE3B,iBAAqBU,OAArB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,wCAEE,KAAKC,2BAAL,CAAiCD,OAAjC,CAFF,EACSN,YADT,yBACSA,YADT,EACuBI,SADvB,yBACuBA,SADvB,EACkCN,WADlC,yBACkCA,WADlC;AAAA;AAAA,uBAIsB,KAAKU,YAAL,EAJtB;;AAAA;AAIOC,gBAAAA,MAJP;AAAA;AAAA,uBAKuBA,MAAM,CAACC,IAAP,CAAY,6BAAZ,EAA2C;AAChEC,kBAAAA,OAAO,EAAE;AACRC,oBAAAA,IAAI,EAAEZ,YADE;AAERa,oBAAAA,IAAI,EAAET,SAFE;AAGRN,oBAAAA,WAAW,EAAXA;AAHQ;AADuD,iBAA3C,CALvB;;AAAA;AAKOgB,gBAAAA,OALP;AAAA;AAAA,wCAcoBC,oCAAkBC,uBAAlB,CAA0CF,OAA1C,CAdpB,EAcUG,KAdV,yBAcUA,KAdV;AAgBQC,gBAAAA,YAhBR,GAgBuBC,yBAAyB,CAACF,KAAD,CAhBhD;AAkBE,qBAAKG,OAAL,CAAa,MAAb,EAAqBC,kBAArB,CAAwCJ,KAAxC;AAlBF,iDAoBS;AACNC,kBAAAA,YAAY,EAAZA,YADM;AAENI,kBAAAA,KAAK,EAAE,CACN,2BADM,EAEN,2CAFM,EAGN,oDAHM,CAFD;AAONC,kBAAAA,IAAI,EAAE;AACLN,oBAAAA,KAAK,EAALA;AADK;AAPA,iBApBT;;AAAA;AAAA;AAAA;AAAA,iDAgCS;AACNK,kBAAAA,KAAK,EAAE,sEADD;AAINE,kBAAAA,MAAM,EAAE;AAJF,iBAhCT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAL2CC,2B;;;;AA+CrC,SAASN,yBAAT,CAAmCF,KAAnC,EAA2D;AACjE,SAAO,iBACGA,KAAK,CAACL,IADT,mBAEGK,KAAK,CAACJ,IAFT,iBAGCI,KAAK,CAACpB,EAHP,sBAIMoB,KAAK,CAACS,MAJZ,EAAP;AAMA","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport { RegisteredSkill } from '../../../types/cli.types'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'registerSkillAction',\n\tdescription:\n\t\t'Register your skill with Mercury so you can start communicating with other skills.',\n\tfields: {\n\t\tnameReadable: {\n\t\t\ttype: 'text',\n\t\t\tlabel: `What is your skill's name?`,\n\t\t\tisRequired: true,\n\t\t},\n\t\tnameKebab: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'Namespace',\n\t\t\tisRequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'Describe your skill',\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class RegisterAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['register.skill', 'register']\n\tpublic invocationMessage = 'Registering your skill... ⚡️'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { nameReadable, nameKebab, description } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tconst client = await this.connectToApi()\n\t\tconst results = await client.emit('register-skill::v2020_12_25', {\n\t\t\tpayload: {\n\t\t\t\tname: nameReadable,\n\t\t\t\tslug: nameKebab,\n\t\t\t\tdescription,\n\t\t\t},\n\t\t})\n\n\t\ttry {\n\t\t\tconst { skill } = eventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\t\tconst summaryLines = generateSkillSummaryLines(skill)\n\n\t\t\tthis.Service('auth').updateCurrentSkill(skill)\n\n\t\t\treturn {\n\t\t\t\tsummaryLines,\n\t\t\t\thints: [\n\t\t\t\t\t'Your skill is registered.',\n\t\t\t\t\t'You can check your .env for more details.',\n\t\t\t\t\t\"If you're ready to deploy, try `spruce deploy`. 🚀\",\n\t\t\t\t],\n\t\t\t\tmeta: {\n\t\t\t\t\tskill,\n\t\t\t\t},\n\t\t\t}\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\thints: [\n\t\t\t\t\t`If you've already registered your skill, try 'spruce skill.login'!`,\n\t\t\t\t],\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function generateSkillSummaryLines(skill: RegisteredSkill) {\n\treturn [\n\t\t`Name: ${skill.name}`,\n\t\t`Slug: ${skill.slug}`,\n\t\t`ID: ${skill.id}`,\n\t\t`API Key: ${skill.apiKey}`,\n\t]\n}\n"],"file":"RegisterAction.js"}
@@ -325,7 +325,7 @@ var TerminalInterface = /*#__PURE__*/function () {
325
325
  }, {
326
326
  key: "renderHero",
327
327
  value: function renderHero(message, effects) {
328
- _cfonts["default"].say(message, {
328
+ _cfonts["default"].say(message.replace(/[aeiou]/gi, ''), {
329
329
  // Font: 'tiny',
330
330
  align: 'left',
331
331
  gradient: [_graphicsInterface.GraphicsTextEffect.Red, _graphicsInterface.GraphicsTextEffect.Blue],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/interfaces/TerminalInterface.ts"],"names":["terminalImage","require","fieldCount","generateInquirerFieldName","filterEffectsForCFonts","effects","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","filter","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","gradient","Red","undefined","write","eraseBeforeRender","terminal","eraseLine","Yellow","stopLoading","loader","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","id","fields","isArray","choices","map","choice","checked","_","includes","SpruceError","friendlyMessage","dirPath","path","join","root","onlyShowDir","fs","existsSync","lstatSync","isDirectory","cleanedPath","replace","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","process","stdout","isTTY"],"mappings":"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","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\tfonts.say(message, {\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?.path ?? 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"],"file":"TerminalInterface.js"}
1
+ {"version":3,"sources":["../../src/interfaces/TerminalInterface.ts"],"names":["terminalImage","require","fieldCount","generateInquirerFieldName","filterEffectsForCFonts","effects","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","filter","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","replace","gradient","Red","undefined","write","eraseBeforeRender","terminal","eraseLine","Yellow","stopLoading","loader","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","id","fields","isArray","choices","map","choice","checked","_","includes","SpruceError","friendlyMessage","dirPath","path","join","root","onlyShowDir","fs","existsSync","lstatSync","isDirectory","cleanedPath","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","process","stdout","isTTY"],"mappings":"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","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\tfonts.say(message.replace(/[aeiou]/gi, ''), {\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?.path ?? 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"],"file":"TerminalInterface.js"}
@@ -19,7 +19,7 @@ var _default = (0, _schema.buildSchema)({
19
19
  },
20
20
  skillSlug: {
21
21
  type: 'text',
22
- label: 'Skill slug',
22
+ label: 'Namespace',
23
23
  isRequired: true
24
24
  }
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/schemas/v2020_07_22/setupTestsOptions.builder.ts"],"names":["id","name","description","fields","demoNumber","type","label","isRequired","skillSlug"],"mappings":";;;;;;;AAAA;;eAEe,yBAAY;AAC1BA,EAAAA,EAAE,EAAE,mBADsB;AAE1BC,EAAAA,IAAI,EAAE,qBAFoB;AAG1BC,EAAAA,WAAW,EACV,+EAJyB;AAK1BC,EAAAA,MAAM,EAAE;AACPC,IAAAA,UAAU,EAAE;AACXC,MAAAA,IAAI,EAAE,OADK;AAEXC,MAAAA,KAAK,EAAE,mBAFI;AAGXC,MAAAA,UAAU,EAAE;AAHD,KADL;AAMPC,IAAAA,SAAS,EAAE;AACVH,MAAAA,IAAI,EAAE,MADI;AAEVC,MAAAA,KAAK,EAAE,YAFG;AAGVC,MAAAA,UAAU,EAAE;AAHF;AANJ;AALkB,CAAZ,C","sourcesContent":["import { buildSchema } from '@sprucelabs/schema'\n\nexport default buildSchema({\n\tid: 'setupTestsOptions',\n\tname: 'Setup tests options',\n\tdescription:\n\t\t'Use this with in your CI/CD environment to get your skill ready to run tests.',\n\tfields: {\n\t\tdemoNumber: {\n\t\t\ttype: 'phone',\n\t\t\tlabel: 'Demo phone number',\n\t\t\tisRequired: true,\n\t\t},\n\t\tskillSlug: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'Skill slug',\n\t\t\tisRequired: true,\n\t\t},\n\t},\n})\n"],"file":"setupTestsOptions.builder.js"}
1
+ {"version":3,"sources":["../../../src/schemas/v2020_07_22/setupTestsOptions.builder.ts"],"names":["id","name","description","fields","demoNumber","type","label","isRequired","skillSlug"],"mappings":";;;;;;;AAAA;;eAEe,yBAAY;AAC1BA,EAAAA,EAAE,EAAE,mBADsB;AAE1BC,EAAAA,IAAI,EAAE,qBAFoB;AAG1BC,EAAAA,WAAW,EACV,+EAJyB;AAK1BC,EAAAA,MAAM,EAAE;AACPC,IAAAA,UAAU,EAAE;AACXC,MAAAA,IAAI,EAAE,OADK;AAEXC,MAAAA,KAAK,EAAE,mBAFI;AAGXC,MAAAA,UAAU,EAAE;AAHD,KADL;AAMPC,IAAAA,SAAS,EAAE;AACVH,MAAAA,IAAI,EAAE,MADI;AAEVC,MAAAA,KAAK,EAAE,WAFG;AAGVC,MAAAA,UAAU,EAAE;AAHF;AANJ;AALkB,CAAZ,C","sourcesContent":["import { buildSchema } from '@sprucelabs/schema'\n\nexport default buildSchema({\n\tid: 'setupTestsOptions',\n\tname: 'Setup tests options',\n\tdescription:\n\t\t'Use this with in your CI/CD environment to get your skill ready to run tests.',\n\tfields: {\n\t\tdemoNumber: {\n\t\t\ttype: 'phone',\n\t\t\tlabel: 'Demo phone number',\n\t\t\tisRequired: true,\n\t\t},\n\t\tskillSlug: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'Namespace',\n\t\t\tisRequired: true,\n\t\t},\n\t},\n})\n"],"file":"setupTestsOptions.builder.js"}
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  ]
19
19
  },
20
20
  "license": "MIT",
21
- "version": "14.29.12",
21
+ "version": "14.29.16",
22
22
  "bin": {
23
23
  "spruce": "./build/index.js"
24
24
  },
@@ -76,21 +76,21 @@
76
76
  "@babel/plugin-proposal-decorators": "^7.16.5",
77
77
  "@babel/runtime": "^7.16.5",
78
78
  "@jest/reporters": "^27.4.5",
79
- "@sprucelabs/error": "^5.0.350",
80
- "@sprucelabs/heartwood-view-controllers": "^51.20.14",
81
- "@sprucelabs/jest-json-reporter": "^6.0.291",
82
- "@sprucelabs/mercury-client": "^19.2.8",
83
- "@sprucelabs/mercury-event-emitter": "^19.2.8",
84
- "@sprucelabs/mercury-types": "^26.1.1095",
85
- "@sprucelabs/schema": "^25.4.143",
86
- "@sprucelabs/spruce-core-schemas": "^22.6.340",
87
- "@sprucelabs/spruce-event-plugin": "^19.1.1",
88
- "@sprucelabs/spruce-event-utils": "^17.1.383",
89
- "@sprucelabs/spruce-skill-booter": "^19.1.1",
90
- "@sprucelabs/spruce-skill-utils": "^22.2.45",
91
- "@sprucelabs/spruce-templates": "^14.29.12",
92
- "@typescript-eslint/eslint-plugin": "^5.7.0",
93
- "@typescript-eslint/parser": "^5.7.0",
79
+ "@sprucelabs/error": "^5.0.354",
80
+ "@sprucelabs/heartwood-view-controllers": "^52.3.0",
81
+ "@sprucelabs/jest-json-reporter": "^6.0.293",
82
+ "@sprucelabs/mercury-client": "^19.2.27",
83
+ "@sprucelabs/mercury-event-emitter": "^19.2.27",
84
+ "@sprucelabs/mercury-types": "^26.1.1110",
85
+ "@sprucelabs/schema": "^25.5.9",
86
+ "@sprucelabs/spruce-core-schemas": "^22.7.12",
87
+ "@sprucelabs/spruce-event-plugin": "^19.2.5",
88
+ "@sprucelabs/spruce-event-utils": "^17.1.398",
89
+ "@sprucelabs/spruce-skill-booter": "^19.2.5",
90
+ "@sprucelabs/spruce-skill-utils": "^22.2.62",
91
+ "@sprucelabs/spruce-templates": "^14.29.16",
92
+ "@typescript-eslint/eslint-plugin": "^5.8.0",
93
+ "@typescript-eslint/parser": "^5.8.0",
94
94
  "cfonts": "^2.10.0",
95
95
  "chalk": "^4.1.2",
96
96
  "chokidar": "^3.5.2",
@@ -119,16 +119,16 @@
119
119
  "uuid": "^8.3.2"
120
120
  },
121
121
  "devDependencies": {
122
- "@sprucelabs/data-stores": "^7.2.45",
123
- "@sprucelabs/jest-sheets-reporter": "^1.2.289",
124
- "@sprucelabs/mercury-core-events": "^1.6.334",
125
- "@sprucelabs/resolve-path-aliases": "^1.0.245",
126
- "@sprucelabs/spruce-conversation-plugin": "^19.1.1",
127
- "@sprucelabs/spruce-deploy-plugin": "^19.1.1",
128
- "@sprucelabs/spruce-store-plugin": "^19.1.1",
129
- "@sprucelabs/spruce-test-fixtures": "^19.1.1",
130
- "@sprucelabs/test": "^7.7.264",
131
- "@sprucelabs/test-utils": "^3.0.345",
122
+ "@sprucelabs/data-stores": "^7.2.61",
123
+ "@sprucelabs/jest-sheets-reporter": "^1.2.290",
124
+ "@sprucelabs/mercury-core-events": "^1.7.9",
125
+ "@sprucelabs/resolve-path-aliases": "^1.0.246",
126
+ "@sprucelabs/spruce-conversation-plugin": "^19.2.5",
127
+ "@sprucelabs/spruce-deploy-plugin": "^19.2.5",
128
+ "@sprucelabs/spruce-store-plugin": "^19.2.5",
129
+ "@sprucelabs/spruce-test-fixtures": "^19.2.5",
130
+ "@sprucelabs/test": "^7.7.265",
131
+ "@sprucelabs/test-utils": "^3.0.348",
132
132
  "@types/blessed": "^0.1.19",
133
133
  "@types/eslint": "^8.2.1",
134
134
  "@types/fs-extra": "^9.0.13",
@@ -138,7 +138,7 @@
138
138
  "@types/lodash": "^4.14.178",
139
139
  "@types/md5": "^2.3.1",
140
140
  "@types/mkdirp": "^1.0.2",
141
- "@types/node": "^17.0.1",
141
+ "@types/node": "^17.0.3",
142
142
  "@types/promise.allsettled": "^1.0.3",
143
143
  "@types/ps-node": "^0.1.1",
144
144
  "@types/rimraf": "^3.0.2",
@@ -164,7 +164,7 @@
164
164
  "rimraf": "^3.0.2",
165
165
  "ts-jest": "^27.1.2",
166
166
  "ts-node": "^10.4.0",
167
- "tsc-watch": "^4.5.0",
167
+ "tsc-watch": "^4.6.0",
168
168
  "tsconfig-paths": "^3.12.0",
169
169
  "typescript": "^4.5.4"
170
170
  },
@@ -597,5 +597,5 @@
597
597
  "ora"
598
598
  ]
599
599
  },
600
- "gitHead": "9249c701ade1a16e2c609de9d81a7381ee30bd47"
600
+ "gitHead": "bd66700ec3da704be2cb9e585cf55ae80e43cbdd"
601
601
  }
@@ -0,0 +1,25 @@
1
+ import { SchemaRegistry } from '@sprucelabs/schema'
2
+ import { SpruceSchemas } from '../../schemas.types'
3
+
4
+ import listViewsResultSchema_v2021_02_11 from '#spruce/schemas/heartwood/v2021_02_11/listViewsResult.schema'
5
+
6
+ const listViewsResponsePayloadSchema: SpruceSchemas.Heartwood.v2021_02_11.ListViewsResponsePayloadSchema = {
7
+ id: 'listViewsResponsePayload',
8
+ version: 'v2021_02_11',
9
+ namespace: 'Heartwood',
10
+ name: '',
11
+ fields: {
12
+ /** . */
13
+ 'views': {
14
+ type: 'schema',
15
+ isRequired: true,
16
+ isArray: true,
17
+ minArrayLength: 0,
18
+ options: {schema: listViewsResultSchema_v2021_02_11,}
19
+ },
20
+ }
21
+ }
22
+
23
+ SchemaRegistry.getInstance().trackSchema(listViewsResponsePayloadSchema)
24
+
25
+ export default listViewsResponsePayloadSchema
@@ -0,0 +1,43 @@
1
+ import { SchemaRegistry } from '@sprucelabs/schema'
2
+ import { SpruceSchemas } from '../../schemas.types'
3
+
4
+
5
+
6
+ const listViewsResultSchema: SpruceSchemas.Heartwood.v2021_02_11.ListViewsResultSchema = {
7
+ id: 'listViewsResult',
8
+ version: 'v2021_02_11',
9
+ namespace: 'Heartwood',
10
+ name: '',
11
+ fields: {
12
+ /** . */
13
+ 'namespace': {
14
+ type: 'text',
15
+ isRequired: true,
16
+ options: undefined
17
+ },
18
+ /** Skill view ids. For now this is every view, but soon will be only skill views */
19
+ 'svcIds': {
20
+ label: 'Skill view ids',
21
+ type: 'id',
22
+ isRequired: true,
23
+ hint: 'For now this is every view, but soon will be only skill views',
24
+ isArray: true,
25
+ minArrayLength: 0,
26
+ options: undefined
27
+ },
28
+ /** View ids. For now this is every view, but soon will be only views (not skill views) */
29
+ 'vcIds': {
30
+ label: 'View ids',
31
+ type: 'id',
32
+ isRequired: true,
33
+ hint: 'For now this is every view, but soon will be only views (not skill views)',
34
+ isArray: true,
35
+ minArrayLength: 0,
36
+ options: undefined
37
+ },
38
+ }
39
+ }
40
+
41
+ SchemaRegistry.getInstance().trackSchema(listViewsResultSchema)
42
+
43
+ export default listViewsResultSchema