@sprucelabs/spruce-cli 18.1.4 → 18.1.6

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 (40) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/build/__tests__/behavioral/WatchingSkillViews.test.d.ts +1 -9
  3. package/build/__tests__/behavioral/WatchingSkillViews.test.js +25 -463
  4. package/build/__tests__/behavioral/WatchingSkillViews.test.js.map +1 -1
  5. package/build/features/AbstractAction.d.ts +1 -1
  6. package/build/features/AbstractAction.js +4 -4
  7. package/build/features/AbstractAction.js.map +1 -1
  8. package/build/features/dependencies/actions/AddAction.js +1 -1
  9. package/build/features/dependencies/actions/AddAction.js.map +1 -1
  10. package/build/features/deploy/actions/HerokuAction.js +2 -2
  11. package/build/features/deploy/actions/HerokuAction.js.map +1 -1
  12. package/build/features/node/actions/UpdateDependenciesAction.js +1 -1
  13. package/build/features/node/actions/UpdateDependenciesAction.js.map +1 -1
  14. package/build/features/node/actions/UpgradeAction.js +1 -1
  15. package/build/features/node/actions/UpgradeAction.js.map +1 -1
  16. package/build/features/test/actions/CreateAction.js +2 -2
  17. package/build/features/test/actions/CreateAction.js.map +1 -1
  18. package/build/features/view/actions/WatchAction.d.ts +3 -16
  19. package/build/features/view/actions/WatchAction.js +32 -165
  20. package/build/features/view/actions/WatchAction.js.map +1 -1
  21. package/build/services/CommandService.d.ts +6 -6
  22. package/build/services/CommandService.js.map +1 -1
  23. package/node_modules/@typescript-eslint/parser/package.json +5 -5
  24. package/node_modules/@typescript-eslint/scope-manager/package.json +5 -5
  25. package/node_modules/@typescript-eslint/types/_ts3.4/dist/generated/ast-spec.d.ts +2 -2
  26. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts +2 -2
  27. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts.map +1 -1
  28. package/node_modules/@typescript-eslint/types/package.json +2 -2
  29. package/node_modules/@typescript-eslint/typescript-estree/package.json +5 -5
  30. package/node_modules/@typescript-eslint/visitor-keys/package.json +3 -3
  31. package/package.json +25 -25
  32. package/src/__tests__/behavioral/WatchingSkillViews.test.ts +14 -227
  33. package/src/features/AbstractAction.ts +4 -4
  34. package/src/features/dependencies/actions/AddAction.ts +1 -1
  35. package/src/features/deploy/actions/HerokuAction.ts +2 -2
  36. package/src/features/node/actions/UpdateDependenciesAction.ts +1 -1
  37. package/src/features/node/actions/UpgradeAction.ts +1 -1
  38. package/src/features/test/actions/CreateAction.ts +2 -4
  39. package/src/features/view/actions/WatchAction.ts +25 -89
  40. package/src/services/CommandService.ts +7 -7
@@ -22,7 +22,7 @@ var AbstractAction = /*#__PURE__*/function () {
22
22
  (0, _defineProperty2["default"])(this, "commandAliases", []);
23
23
  (0, _defineProperty2["default"])(this, "invocationMessage", void 0);
24
24
  (0, _defineProperty2["default"])(this, "parent", void 0);
25
- (0, _defineProperty2["default"])(this, "featureInstaller", void 0);
25
+ (0, _defineProperty2["default"])(this, "features", void 0);
26
26
  (0, _defineProperty2["default"])(this, "cwd", void 0);
27
27
  (0, _defineProperty2["default"])(this, "templates", void 0);
28
28
  (0, _defineProperty2["default"])(this, "ui", void 0);
@@ -37,7 +37,7 @@ var AbstractAction = /*#__PURE__*/function () {
37
37
  this.parent = options.parent;
38
38
  this.storeFactory = options.storeFactory;
39
39
  this.serviceFactory = options.serviceFactory;
40
- this.featureInstaller = options.featureInstaller;
40
+ this.features = options.featureInstaller;
41
41
  this.ui = options.ui;
42
42
  this.writerFactory = options.writerFactory;
43
43
  this.apiClientFactory = options.apiClientFactory;
@@ -80,12 +80,12 @@ var AbstractAction = /*#__PURE__*/function () {
80
80
  }, {
81
81
  key: "getFeature",
82
82
  value: function getFeature(code) {
83
- return this.featureInstaller.getFeature(code);
83
+ return this.features.getFeature(code);
84
84
  }
85
85
  }, {
86
86
  key: "getFeatureCodes",
87
87
  value: function getFeatureCodes() {
88
- return this.featureInstaller.getAllCodes();
88
+ return this.features.getAllCodes();
89
89
  }
90
90
  }, {
91
91
  key: "validateAndNormalizeOptions",
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractAction.js","names":["AbstractAction","options","cwd","templates","parent","storeFactory","serviceFactory","featureInstaller","ui","writerFactory","apiClientFactory","emitter","actionExecuter","featureCode","actionCode","Action","type","Service","code","Store","Writer","fileDescriptions","linter","getFeature","getAllCodes","schema","optionsSchema","validateAndNormalizer","validateAndNormalize","userSuppliedVersion","resolvedDestination","resolvedVersion","versionUtil","generateVersion","undefined","constValue","askForVersionIfTodaysVersionDoesNotExist","assertValidVersion","dirValue","fallbackVersion","versions","getAllVersions","todaysVersion","version","alreadyHasToday","find","choices","push","label","value","sort","a","b","intValue","map","length","prompt","hint","isRequired"],"sources":["../../src/features/AbstractAction.ts"],"sourcesContent":["import { Schema, SchemaValues, SchemaPartialValues } from '@sprucelabs/schema'\nimport { versionUtil } from '@sprucelabs/spruce-skill-utils'\nimport { Templates } from '@sprucelabs/spruce-templates'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport ServiceFactory, {\n\tServiceProvider,\n\tService,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport StoreFactory, {\n\tStoreCode,\n\tCreateStoreOptions,\n\tStoreMap,\n} from '../stores/StoreFactory'\nimport {\n\tApiClient,\n\tApiClientFactory,\n\tApiClientFactoryOptions,\n} from '../types/apiClient.types'\nimport { GraphicsInterface } from '../types/cli.types'\nimport { WriterOptions } from '../writers/AbstractWriter'\nimport WriterFactory, { WriterCode, WriterMap } from '../writers/WriterFactory'\nimport AbstractFeature from './AbstractFeature'\nimport ActionExecuter from './ActionExecuter'\nimport FeatureInstaller from './FeatureInstaller'\nimport {\n\tFeatureAction,\n\tFeatureActionResponse,\n\tActionOptions,\n\tFeatureCode,\n} from './features.types'\nimport validateAndNormalizer from './validateAndNormalize.utility'\n\nexport default abstract class AbstractAction<S extends Schema = Schema>\n\timplements FeatureAction<S>, ServiceProvider\n{\n\tpublic abstract optionsSchema: S\n\tpublic readonly commandAliases: string[] = []\n\tpublic abstract invocationMessage: string\n\n\tprotected parent: AbstractFeature\n\tprotected featureInstaller: FeatureInstaller\n\tprotected cwd: string\n\tprotected templates: Templates\n\tprotected ui: GraphicsInterface\n\tprotected emitter: GlobalEmitter\n\n\tprivate serviceFactory: ServiceFactory\n\tprivate storeFactory: StoreFactory\n\tprivate writerFactory: WriterFactory\n\tprivate apiClientFactory: ApiClientFactory\n\tprivate actionExecuter: ActionExecuter\n\n\tpublic constructor(options: ActionOptions) {\n\t\tthis.cwd = options.cwd\n\t\tthis.templates = options.templates\n\t\tthis.parent = options.parent\n\t\tthis.storeFactory = options.storeFactory\n\t\tthis.serviceFactory = options.serviceFactory\n\t\tthis.featureInstaller = options.featureInstaller\n\t\tthis.ui = options.ui\n\t\tthis.writerFactory = options.writerFactory\n\t\tthis.apiClientFactory = options.apiClientFactory\n\t\tthis.emitter = options.emitter\n\t\tthis.actionExecuter = options.actionExecuter\n\t}\n\n\tpublic abstract execute(\n\t\toptions: SchemaValues<S>\n\t): Promise<FeatureActionResponse>\n\n\tprotected Action(featureCode: string, actionCode: string) {\n\t\treturn this.actionExecuter.Action(featureCode as any, actionCode)\n\t}\n\n\tpublic Service<S extends Service>(type: S, cwd?: string): ServiceMap[S] {\n\t\treturn this.serviceFactory.Service(cwd ?? this.cwd, type)\n\t}\n\n\tprotected Store<C extends StoreCode>(\n\t\tcode: C,\n\t\toptions?: CreateStoreOptions<C>\n\t): StoreMap[C] {\n\t\treturn this.storeFactory.Store(code, { cwd: this.cwd, ...(options as any) })\n\t}\n\n\tprotected Writer<C extends WriterCode>(\n\t\tcode: C,\n\t\toptions?: Partial<WriterOptions>\n\t): WriterMap[C] {\n\t\treturn this.writerFactory.Writer(code, {\n\t\t\tfileDescriptions: this.parent.fileDescriptions,\n\t\t\tlinter: this.Service('lint'),\n\t\t\t...options,\n\t\t})\n\t}\n\n\tprotected getFeature<C extends FeatureCode>(code: C) {\n\t\treturn this.featureInstaller.getFeature(code)\n\t}\n\n\tprotected getFeatureCodes(): FeatureCode[] {\n\t\treturn this.featureInstaller.getAllCodes()\n\t}\n\n\tprotected validateAndNormalizeOptions(options: SchemaPartialValues<S>) {\n\t\tconst schema = this.optionsSchema\n\t\treturn validateAndNormalizer.validateAndNormalize(schema, options)\n\t}\n\n\tprotected async resolveVersion(\n\t\tuserSuppliedVersion: string | null | undefined,\n\t\tresolvedDestination: string\n\t) {\n\t\tlet resolvedVersion = versionUtil.generateVersion(\n\t\t\tuserSuppliedVersion ?? undefined\n\t\t).constValue\n\n\t\tif (!userSuppliedVersion) {\n\t\t\tresolvedVersion = await this.askForVersionIfTodaysVersionDoesNotExist(\n\t\t\t\tresolvedDestination,\n\t\t\t\tresolvedVersion\n\t\t\t)\n\t\t}\n\t\tversionUtil.assertValidVersion(resolvedVersion)\n\n\t\treturn versionUtil.generateVersion(resolvedVersion).dirValue\n\t}\n\n\tprivate async askForVersionIfTodaysVersionDoesNotExist(\n\t\tresolvedDestination: string,\n\t\tfallbackVersion: string\n\t) {\n\t\tconst versions = versionUtil.getAllVersions(resolvedDestination)\n\t\tconst todaysVersion = versionUtil.generateVersion()\n\n\t\tlet version = fallbackVersion\n\t\tconst alreadyHasToday = !!versions.find(\n\t\t\t(version) => version.dirValue === todaysVersion.dirValue\n\t\t)\n\t\tconst choices = []\n\n\t\tif (!alreadyHasToday) {\n\t\t\tchoices.push({\n\t\t\t\tlabel: 'New Version',\n\t\t\t\tvalue: todaysVersion.dirValue,\n\t\t\t})\n\t\t}\n\n\t\tchoices.push(\n\t\t\t...versions\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.intValue > b.intValue ? -1 : 1\n\t\t\t\t})\n\t\t\t\t.map((version) => ({\n\t\t\t\t\tvalue: version.dirValue,\n\t\t\t\t\tlabel: version.dirValue,\n\t\t\t\t}))\n\t\t)\n\n\t\tif (versions.length > 0) {\n\t\t\tversion = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Version',\n\t\t\t\thint: 'Confirm which version you want to use?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn version\n\t}\n\n\tprotected async connectToApi(\n\t\toptions?: ApiClientFactoryOptions\n\t): Promise<ApiClient> {\n\t\treturn this.apiClientFactory(options)\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AbstractAction.js","names":["AbstractAction","options","cwd","templates","parent","storeFactory","serviceFactory","features","featureInstaller","ui","writerFactory","apiClientFactory","emitter","actionExecuter","featureCode","actionCode","Action","type","Service","code","Store","Writer","fileDescriptions","linter","getFeature","getAllCodes","schema","optionsSchema","validateAndNormalizer","validateAndNormalize","userSuppliedVersion","resolvedDestination","resolvedVersion","versionUtil","generateVersion","undefined","constValue","askForVersionIfTodaysVersionDoesNotExist","assertValidVersion","dirValue","fallbackVersion","versions","getAllVersions","todaysVersion","version","alreadyHasToday","find","choices","push","label","value","sort","a","b","intValue","map","length","prompt","hint","isRequired"],"sources":["../../src/features/AbstractAction.ts"],"sourcesContent":["import { Schema, SchemaValues, SchemaPartialValues } from '@sprucelabs/schema'\nimport { versionUtil } from '@sprucelabs/spruce-skill-utils'\nimport { Templates } from '@sprucelabs/spruce-templates'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport ServiceFactory, {\n\tServiceProvider,\n\tService,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport StoreFactory, {\n\tStoreCode,\n\tCreateStoreOptions,\n\tStoreMap,\n} from '../stores/StoreFactory'\nimport {\n\tApiClient,\n\tApiClientFactory,\n\tApiClientFactoryOptions,\n} from '../types/apiClient.types'\nimport { GraphicsInterface } from '../types/cli.types'\nimport { WriterOptions } from '../writers/AbstractWriter'\nimport WriterFactory, { WriterCode, WriterMap } from '../writers/WriterFactory'\nimport AbstractFeature from './AbstractFeature'\nimport ActionExecuter from './ActionExecuter'\nimport FeatureInstaller from './FeatureInstaller'\nimport {\n\tFeatureAction,\n\tFeatureActionResponse,\n\tActionOptions,\n\tFeatureCode,\n} from './features.types'\nimport validateAndNormalizer from './validateAndNormalize.utility'\n\nexport default abstract class AbstractAction<S extends Schema = Schema>\n\timplements FeatureAction<S>, ServiceProvider\n{\n\tpublic abstract optionsSchema: S\n\tpublic readonly commandAliases: string[] = []\n\tpublic abstract invocationMessage: string\n\n\tprotected parent: AbstractFeature\n\tprotected features: FeatureInstaller\n\tprotected cwd: string\n\tprotected templates: Templates\n\tprotected ui: GraphicsInterface\n\tprotected emitter: GlobalEmitter\n\n\tprivate serviceFactory: ServiceFactory\n\tprivate storeFactory: StoreFactory\n\tprivate writerFactory: WriterFactory\n\tprivate apiClientFactory: ApiClientFactory\n\tprivate actionExecuter: ActionExecuter\n\n\tpublic constructor(options: ActionOptions) {\n\t\tthis.cwd = options.cwd\n\t\tthis.templates = options.templates\n\t\tthis.parent = options.parent\n\t\tthis.storeFactory = options.storeFactory\n\t\tthis.serviceFactory = options.serviceFactory\n\t\tthis.features = options.featureInstaller\n\t\tthis.ui = options.ui\n\t\tthis.writerFactory = options.writerFactory\n\t\tthis.apiClientFactory = options.apiClientFactory\n\t\tthis.emitter = options.emitter\n\t\tthis.actionExecuter = options.actionExecuter\n\t}\n\n\tpublic abstract execute(\n\t\toptions: SchemaValues<S>\n\t): Promise<FeatureActionResponse>\n\n\tprotected Action(featureCode: string, actionCode: string) {\n\t\treturn this.actionExecuter.Action(featureCode as any, actionCode)\n\t}\n\n\tpublic Service<S extends Service>(type: S, cwd?: string): ServiceMap[S] {\n\t\treturn this.serviceFactory.Service(cwd ?? this.cwd, type)\n\t}\n\n\tprotected Store<C extends StoreCode>(\n\t\tcode: C,\n\t\toptions?: CreateStoreOptions<C>\n\t): StoreMap[C] {\n\t\treturn this.storeFactory.Store(code, { cwd: this.cwd, ...(options as any) })\n\t}\n\n\tprotected Writer<C extends WriterCode>(\n\t\tcode: C,\n\t\toptions?: Partial<WriterOptions>\n\t): WriterMap[C] {\n\t\treturn this.writerFactory.Writer(code, {\n\t\t\tfileDescriptions: this.parent.fileDescriptions,\n\t\t\tlinter: this.Service('lint'),\n\t\t\t...options,\n\t\t})\n\t}\n\n\tprotected getFeature<C extends FeatureCode>(code: C) {\n\t\treturn this.features.getFeature(code)\n\t}\n\n\tprotected getFeatureCodes(): FeatureCode[] {\n\t\treturn this.features.getAllCodes()\n\t}\n\n\tprotected validateAndNormalizeOptions(options: SchemaPartialValues<S>) {\n\t\tconst schema = this.optionsSchema\n\t\treturn validateAndNormalizer.validateAndNormalize(schema, options)\n\t}\n\n\tprotected async resolveVersion(\n\t\tuserSuppliedVersion: string | null | undefined,\n\t\tresolvedDestination: string\n\t) {\n\t\tlet resolvedVersion = versionUtil.generateVersion(\n\t\t\tuserSuppliedVersion ?? undefined\n\t\t).constValue\n\n\t\tif (!userSuppliedVersion) {\n\t\t\tresolvedVersion = await this.askForVersionIfTodaysVersionDoesNotExist(\n\t\t\t\tresolvedDestination,\n\t\t\t\tresolvedVersion\n\t\t\t)\n\t\t}\n\t\tversionUtil.assertValidVersion(resolvedVersion)\n\n\t\treturn versionUtil.generateVersion(resolvedVersion).dirValue\n\t}\n\n\tprivate async askForVersionIfTodaysVersionDoesNotExist(\n\t\tresolvedDestination: string,\n\t\tfallbackVersion: string\n\t) {\n\t\tconst versions = versionUtil.getAllVersions(resolvedDestination)\n\t\tconst todaysVersion = versionUtil.generateVersion()\n\n\t\tlet version = fallbackVersion\n\t\tconst alreadyHasToday = !!versions.find(\n\t\t\t(version) => version.dirValue === todaysVersion.dirValue\n\t\t)\n\t\tconst choices = []\n\n\t\tif (!alreadyHasToday) {\n\t\t\tchoices.push({\n\t\t\t\tlabel: 'New Version',\n\t\t\t\tvalue: todaysVersion.dirValue,\n\t\t\t})\n\t\t}\n\n\t\tchoices.push(\n\t\t\t...versions\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.intValue > b.intValue ? -1 : 1\n\t\t\t\t})\n\t\t\t\t.map((version) => ({\n\t\t\t\t\tvalue: version.dirValue,\n\t\t\t\t\tlabel: version.dirValue,\n\t\t\t\t}))\n\t\t)\n\n\t\tif (versions.length > 0) {\n\t\t\tversion = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Version',\n\t\t\t\thint: 'Confirm which version you want to use?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn version\n\t}\n\n\tprotected async connectToApi(\n\t\toptions?: ApiClientFactoryOptions\n\t): Promise<ApiClient> {\n\t\treturn this.apiClientFactory(options)\n\t}\n}\n"],"mappings":"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"}
@@ -105,7 +105,7 @@ var DeployAction = /*#__PURE__*/function (_AbstractAction) {
105
105
  });
106
106
  summaryLines = ["Added \"".concat(skill.name, "\" as a dependency!")];
107
107
  _context.next = 18;
108
- return this.featureInstaller.isInstalled('event');
108
+ return this.features.isInstalled('event');
109
109
  case 18:
110
110
  isEventInstalled = _context.sent;
111
111
  if (isEventInstalled) {
@@ -1 +1 @@
1
- {"version":3,"file":"AddAction.js","names":["optionsSchema","buildSchema","id","description","fields","namespace","type","label","hint","DeployAction","options","validateAndNormalizeOptions","Store","fetchAllSkills","skills","dependencyService","Service","dependencies","get","map","d","choices","filter","s","indexOf","slug","value","name","ui","prompt","isRequired","skill","find","SpruceError","code","friendlyMessage","add","summaryLines","featureInstaller","isInstalled","isEventInstalled","push","AbstractAction"],"sources":["../../../../src/features/dependencies/actions/AddAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'addDepnedency',\n\tdescription: 'Add a skill as a dependency.',\n\tfields: {\n\t\tnamespace: {\n\t\t\ttype: 'id',\n\t\t\tlabel: 'Namespace',\n\t\t\thint: 'The namespace of the skill you want to add as a dependency.',\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['add.dependency [namespace]']\n\tpublic invocationMessage = 'Adding a dependency... 🔗'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tlet { namespace } = this.validateAndNormalizeOptions(options)\n\n\t\tconst skills = await this.Store('skill').fetchAllSkills()\n\t\tconst dependencyService = this.Service('dependency')\n\n\t\tif (!namespace) {\n\t\t\tconst dependencies = dependencyService.get().map((d) => d.namespace)\n\n\t\t\tconst choices = skills\n\t\t\t\t.filter((s) => dependencies.indexOf(s.slug) === -1)\n\t\t\t\t.map((s) => ({\n\t\t\t\t\tvalue: s.slug,\n\t\t\t\t\tlabel: s.name,\n\t\t\t\t}))\n\n\t\t\tnamespace = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Which skill would you like to add as a dependency?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tconst skill = skills.find((s) => s.slug === namespace)\n\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_NOT_FOUND',\n\t\t\t\tfriendlyMessage: `I could not find a skill with the slug of ${namespace}.`,\n\t\t\t})\n\t\t}\n\n\t\tdependencyService.add({\n\t\t\tid: skill.id,\n\t\t\tnamespace: skill.slug,\n\t\t})\n\n\t\tconst summaryLines = [`Added \"${skill.name}\" as a dependency!`]\n\t\tconst isEventInstalled = await this.featureInstaller.isInstalled('event')\n\t\tif (isEventInstalled) {\n\t\t\tsummaryLines.push(\n\t\t\t\t'You will need to run `spruce sync.events` before accessing any new events.'\n\t\t\t)\n\t\t}\n\n\t\treturn {\n\t\t\tsummaryLines,\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAAiD;AAAA;AAGjD,IAAMA,aAAa,GAAG,IAAAC,mBAAW,EAAC;EACjCC,EAAE,EAAE,eAAe;EACnBC,WAAW,EAAE,8BAA8B;EAC3CC,MAAM,EAAE;IACPC,SAAS,EAAE;MACVC,IAAI,EAAE,IAAI;MACVC,KAAK,EAAE,WAAW;MAClBC,IAAI,EAAE;IACP;EACD;AACD,CAAC,CAAC;AAAA,IAKmBC,YAAY;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA,kGACTT,aAAa;IAAA,mGACZ,CAAC,4BAA4B,CAAC;IAAA,sGAC3B,2BAA2B;IAAA;EAAA;EAAA;IAAA;IAAA;MAAA,6FAEtD,iBAAqBU,OAAgB;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA,wBAChB,IAAI,CAACC,2BAA2B,CAACD,OAAO,CAAC,EAAvDL,SAAS,yBAATA,SAAS;gBAAA;gBAAA,OAEM,IAAI,CAACO,KAAK,CAAC,OAAO,CAAC,CAACC,cAAc,EAAE;cAAA;gBAAnDC,MAAM;gBACNC,iBAAiB,GAAG,IAAI,CAACC,OAAO,CAAC,YAAY,CAAC;gBAAA,IAE/CX,SAAS;kBAAA;kBAAA;gBAAA;gBACPY,YAAY,GAAGF,iBAAiB,CAACG,GAAG,EAAE,CAACC,GAAG,CAAC,UAACC,CAAC;kBAAA,OAAKA,CAAC,CAACf,SAAS;gBAAA,EAAC;gBAE9DgB,OAAO,GAAGP,MAAM,CACpBQ,MAAM,CAAC,UAACC,CAAC;kBAAA,OAAKN,YAAY,CAACO,OAAO,CAACD,CAAC,CAACE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAA,EAAC,CAClDN,GAAG,CAAC,UAACI,CAAC;kBAAA,OAAM;oBACZG,KAAK,EAAEH,CAAC,CAACE,IAAI;oBACblB,KAAK,EAAEgB,CAAC,CAACI;kBACV,CAAC;gBAAA,CAAC,CAAC;gBAAA;gBAAA,OAEc,IAAI,CAACC,EAAE,CAACC,MAAM,CAAC;kBAChCvB,IAAI,EAAE,QAAQ;kBACdC,KAAK,EAAE,oDAAoD;kBAC3DuB,UAAU,EAAE,IAAI;kBAChBpB,OAAO,EAAE;oBACRW,OAAO,EAAPA;kBACD;gBACD,CAAC,CAAC;cAAA;gBAPFhB,SAAS;cAAA;gBAUJ0B,KAAK,GAAGjB,MAAM,CAACkB,IAAI,CAAC,UAACT,CAAC;kBAAA,OAAKA,CAAC,CAACE,IAAI,KAAKpB,SAAS;gBAAA,EAAC;gBAAA,IAEjD0B,KAAK;kBAAA;kBAAA;gBAAA;gBAAA,MACH,IAAIE,uBAAW,CAAC;kBACrBC,IAAI,EAAE,iBAAiB;kBACvBC,eAAe,sDAA+C9B,SAAS;gBACxE,CAAC,CAAC;cAAA;gBAGHU,iBAAiB,CAACqB,GAAG,CAAC;kBACrBlC,EAAE,EAAE6B,KAAK,CAAC7B,EAAE;kBACZG,SAAS,EAAE0B,KAAK,CAACN;gBAClB,CAAC,CAAC;gBAEIY,YAAY,GAAG,mBAAWN,KAAK,CAACJ,IAAI,yBAAqB;gBAAA;gBAAA,OAChC,IAAI,CAACW,gBAAgB,CAACC,WAAW,CAAC,OAAO,CAAC;cAAA;gBAAnEC,gBAAgB;gBACtB,IAAIA,gBAAgB,EAAE;kBACrBH,YAAY,CAACI,IAAI,CAChB,4EAA4E,CAC5E;gBACF;gBAAC,iCAEM;kBACNJ,YAAY,EAAZA;gBACD,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACD;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;EAAA;AAAA,EAxDwCK,2BAAc;AAAA"}
1
+ {"version":3,"file":"AddAction.js","names":["optionsSchema","buildSchema","id","description","fields","namespace","type","label","hint","DeployAction","options","validateAndNormalizeOptions","Store","fetchAllSkills","skills","dependencyService","Service","dependencies","get","map","d","choices","filter","s","indexOf","slug","value","name","ui","prompt","isRequired","skill","find","SpruceError","code","friendlyMessage","add","summaryLines","features","isInstalled","isEventInstalled","push","AbstractAction"],"sources":["../../../../src/features/dependencies/actions/AddAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'addDepnedency',\n\tdescription: 'Add a skill as a dependency.',\n\tfields: {\n\t\tnamespace: {\n\t\t\ttype: 'id',\n\t\t\tlabel: 'Namespace',\n\t\t\thint: 'The namespace of the skill you want to add as a dependency.',\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['add.dependency [namespace]']\n\tpublic invocationMessage = 'Adding a dependency... 🔗'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tlet { namespace } = this.validateAndNormalizeOptions(options)\n\n\t\tconst skills = await this.Store('skill').fetchAllSkills()\n\t\tconst dependencyService = this.Service('dependency')\n\n\t\tif (!namespace) {\n\t\t\tconst dependencies = dependencyService.get().map((d) => d.namespace)\n\n\t\t\tconst choices = skills\n\t\t\t\t.filter((s) => dependencies.indexOf(s.slug) === -1)\n\t\t\t\t.map((s) => ({\n\t\t\t\t\tvalue: s.slug,\n\t\t\t\t\tlabel: s.name,\n\t\t\t\t}))\n\n\t\t\tnamespace = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Which skill would you like to add as a dependency?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tconst skill = skills.find((s) => s.slug === namespace)\n\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_NOT_FOUND',\n\t\t\t\tfriendlyMessage: `I could not find a skill with the slug of ${namespace}.`,\n\t\t\t})\n\t\t}\n\n\t\tdependencyService.add({\n\t\t\tid: skill.id,\n\t\t\tnamespace: skill.slug,\n\t\t})\n\n\t\tconst summaryLines = [`Added \"${skill.name}\" as a dependency!`]\n\t\tconst isEventInstalled = await this.features.isInstalled('event')\n\t\tif (isEventInstalled) {\n\t\t\tsummaryLines.push(\n\t\t\t\t'You will need to run `spruce sync.events` before accessing any new events.'\n\t\t\t)\n\t\t}\n\n\t\treturn {\n\t\t\tsummaryLines,\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAAiD;AAAA;AAGjD,IAAMA,aAAa,GAAG,IAAAC,mBAAW,EAAC;EACjCC,EAAE,EAAE,eAAe;EACnBC,WAAW,EAAE,8BAA8B;EAC3CC,MAAM,EAAE;IACPC,SAAS,EAAE;MACVC,IAAI,EAAE,IAAI;MACVC,KAAK,EAAE,WAAW;MAClBC,IAAI,EAAE;IACP;EACD;AACD,CAAC,CAAC;AAAA,IAKmBC,YAAY;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA,kGACTT,aAAa;IAAA,mGACZ,CAAC,4BAA4B,CAAC;IAAA,sGAC3B,2BAA2B;IAAA;EAAA;EAAA;IAAA;IAAA;MAAA,6FAEtD,iBAAqBU,OAAgB;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA,wBAChB,IAAI,CAACC,2BAA2B,CAACD,OAAO,CAAC,EAAvDL,SAAS,yBAATA,SAAS;gBAAA;gBAAA,OAEM,IAAI,CAACO,KAAK,CAAC,OAAO,CAAC,CAACC,cAAc,EAAE;cAAA;gBAAnDC,MAAM;gBACNC,iBAAiB,GAAG,IAAI,CAACC,OAAO,CAAC,YAAY,CAAC;gBAAA,IAE/CX,SAAS;kBAAA;kBAAA;gBAAA;gBACPY,YAAY,GAAGF,iBAAiB,CAACG,GAAG,EAAE,CAACC,GAAG,CAAC,UAACC,CAAC;kBAAA,OAAKA,CAAC,CAACf,SAAS;gBAAA,EAAC;gBAE9DgB,OAAO,GAAGP,MAAM,CACpBQ,MAAM,CAAC,UAACC,CAAC;kBAAA,OAAKN,YAAY,CAACO,OAAO,CAACD,CAAC,CAACE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAA,EAAC,CAClDN,GAAG,CAAC,UAACI,CAAC;kBAAA,OAAM;oBACZG,KAAK,EAAEH,CAAC,CAACE,IAAI;oBACblB,KAAK,EAAEgB,CAAC,CAACI;kBACV,CAAC;gBAAA,CAAC,CAAC;gBAAA;gBAAA,OAEc,IAAI,CAACC,EAAE,CAACC,MAAM,CAAC;kBAChCvB,IAAI,EAAE,QAAQ;kBACdC,KAAK,EAAE,oDAAoD;kBAC3DuB,UAAU,EAAE,IAAI;kBAChBpB,OAAO,EAAE;oBACRW,OAAO,EAAPA;kBACD;gBACD,CAAC,CAAC;cAAA;gBAPFhB,SAAS;cAAA;gBAUJ0B,KAAK,GAAGjB,MAAM,CAACkB,IAAI,CAAC,UAACT,CAAC;kBAAA,OAAKA,CAAC,CAACE,IAAI,KAAKpB,SAAS;gBAAA,EAAC;gBAAA,IAEjD0B,KAAK;kBAAA;kBAAA;gBAAA;gBAAA,MACH,IAAIE,uBAAW,CAAC;kBACrBC,IAAI,EAAE,iBAAiB;kBACvBC,eAAe,sDAA+C9B,SAAS;gBACxE,CAAC,CAAC;cAAA;gBAGHU,iBAAiB,CAACqB,GAAG,CAAC;kBACrBlC,EAAE,EAAE6B,KAAK,CAAC7B,EAAE;kBACZG,SAAS,EAAE0B,KAAK,CAACN;gBAClB,CAAC,CAAC;gBAEIY,YAAY,GAAG,mBAAWN,KAAK,CAACJ,IAAI,yBAAqB;gBAAA;gBAAA,OAChC,IAAI,CAACW,QAAQ,CAACC,WAAW,CAAC,OAAO,CAAC;cAAA;gBAA3DC,gBAAgB;gBACtB,IAAIA,gBAAgB,EAAE;kBACrBH,YAAY,CAACI,IAAI,CAChB,4EAA4E,CAC5E;gBACF;gBAAC,iCAEM;kBACNJ,YAAY,EAAZA;gBACD,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACD;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;EAAA;AAAA,EAxDwCK,2BAAc;AAAA"}
@@ -538,7 +538,7 @@ var DeployAction = /*#__PURE__*/function (_AbstractAction) {
538
538
  case 0:
539
539
  results = {};
540
540
  _context9.next = 3;
541
- return this.featureInstaller.isInstalled('test');
541
+ return this.features.isInstalled('test');
542
542
  case 3:
543
543
  isTestInstalled = _context9.sent;
544
544
  if (!isTestInstalled) {
@@ -591,7 +591,7 @@ var DeployAction = /*#__PURE__*/function (_AbstractAction) {
591
591
  case 0:
592
592
  results = {};
593
593
  _context10.next = 3;
594
- return this.featureInstaller.isInstalled('skill');
594
+ return this.features.isInstalled('skill');
595
595
  case 3:
596
596
  isSkillInstalled = _context10.sent;
597
597
  if (!isSkillInstalled) {
@@ -1 +1 @@
1
- {"version":3,"file":"HerokuAction.js","names":["optionsSchema","buildSchema","id","description","fields","teamName","type","label","isRequired","shouldRunSilently","isPrivate","shouldBuildAndLint","defaultValue","shouldRunTests","DeployAction","options","results","assertRegisteredSkill","assertDependencies","assertLoggedInToHeroku","setupGitRepo","setupGitRemote","setupProcFile","procResults","actionUtil","mergeActionResults","assertNoPendingGitChanges","errors","validateAndNormalizeOptions","buildAndLint","runTests","deploy","ui","clear","skill","Service","getCurrentSkill","summaryLines","name","slug","apiKey","SpruceError","code","stage","friendlyMessage","execute","failed","stdout","toLowerCase","search","command","confirm","pass","pkg","skillName","get","prompt","namesUtil","toKebab","args","env","HOME","process","procFile","diskUtil","resolvePath","cwd","files","doesFileExist","writeFile","push","action","path","inRepo","missing","hint","length","dependencies","featureInstaller","isInstalled","isTestInstalled","startLoading","Action","watchMode","shouldReportWhileRunning","testResults","isSkillInstalled","build","shouldFixLintFirst","buildResults","AbstractAction"],"sources":["../../../../src/features/deploy/actions/HerokuAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil, namesUtil, SkillAuth } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'deployHeroku',\n\tdescription: 'Deploy your skill to Heroku.',\n\tfields: {\n\t\tteamName: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'team name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tshouldRunSilently: {\n\t\t\ttype: 'boolean',\n\t\t\tisPrivate: true,\n\t\t},\n\t\tshouldBuildAndLint: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t\tshouldRunTests: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['deploy.heroku']\n\tpublic invocationMessage = 'Deploying to Heroku... 🚀'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\ttry {\n\t\t\tawait this.assertRegisteredSkill()\n\t\t\tawait this.assertDependencies()\n\t\t\tawait this.assertLoggedInToHeroku()\n\t\t\tawait this.setupGitRepo()\n\t\t\tawait this.setupGitRemote()\n\n\t\t\tconst procResults = await this.setupProcFile()\n\t\t\tresults = actionUtil.mergeActionResults(results, procResults)\n\n\t\t\tawait this.assertNoPendingGitChanges()\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\n\t\tconst { shouldBuildAndLint, shouldRunTests } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tif (shouldBuildAndLint) {\n\t\t\tresults = await this.buildAndLint()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tif (shouldRunTests) {\n\t\t\tresults = await this.runTests()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tawait this.deploy()\n\n\t\tthis.ui.clear()\n\n\t\tconst skill = this.Service('auth').getCurrentSkill() as SkillAuth\n\n\t\tresults.summaryLines = [\n\t\t\t`You are good to go!`,\n\t\t\t\"You gotta make sure that your ENV's are set on Heroku to the following:\\n\",\n\t\t\t`SKILL_NAME=${skill.name}`,\n\t\t\t`SKILL_SLUG=${skill.slug}`,\n\t\t\t`SKILL_ID=${skill.id}`,\n\t\t\t`SKILL_API_KEY=${skill.apiKey}`,\n\t\t]\n\n\t\treturn results\n\t}\n\n\tprivate assertRegisteredSkill() {\n\t\tconst skill = this.Service('auth').getCurrentSkill()\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'skill',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You have to register your skill. Try `spruce login && spruce register` to get going!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async deploy() {\n\t\tawait this.Service('command').execute(\n\t\t\t'git push --set-upstream heroku master'\n\t\t)\n\t}\n\n\tprivate async assertNoPendingGitChanges() {\n\t\tconst results = await this.Service('command').execute('git status')\n\n\t\tconst failed =\n\t\t\t(results.stdout ?? '').toLowerCase().search('not staged') > -1 ||\n\t\t\t(results.stdout ?? '').toLowerCase().search('no commits') > -1\n\n\t\tif (failed) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You have pending changes. Commit them and try again!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async setupGitRemote() {\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tawait command.execute('git ls-remote heroku')\n\n\t\t\treturn\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch {}\n\n\t\tconst confirm = await this.ui.confirm(\n\t\t\t`I didn't find a a remote named \"heroku\", want me to create one?`\n\t\t)\n\n\t\tif (!confirm) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'remote',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You need to setup a remote named \"heroku\" that Heroku will pull from.',\n\t\t\t})\n\t\t}\n\n\t\tlet pass = false\n\t\tlet label =\n\t\t\t'What name do you wanna give your app on heroku (using-kebab-case)?'\n\n\t\tconst pkg = this.Service('pkg')\n\t\tconst skillName = pkg.get('name')\n\n\t\tdo {\n\t\t\tlet name = await this.ui.prompt({\n\t\t\t\ttype: 'text',\n\t\t\t\tlabel,\n\t\t\t\tdefaultValue: skillName,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\n\t\t\tname = namesUtil.toKebab(name)\n\n\t\t\ttry {\n\t\t\t\tawait command.execute('heroku create', {\n\t\t\t\t\targs: [name],\n\t\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t\t})\n\n\t\t\t\tpass = true\n\t\t\t} catch {\n\t\t\t\tlabel = `Uh oh, \"${name}\" is taken, try again!`\n\t\t\t}\n\t\t} while (!pass)\n\n\t\ttry {\n\t\t\tawait command.execute('heroku buildpacks:set heroku/nodejs', {\n\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t})\n\t\t} catch {\n\t\t\tthrow new SpruceError({ code: 'DEPLOY_FAILED', stage: 'remote' })\n\t\t}\n\t}\n\n\tprivate async setupProcFile(): Promise<FeatureActionResponse> {\n\t\tconst procFile = diskUtil.resolvePath(this.cwd, 'Procfile')\n\t\tconst results: FeatureActionResponse = {\n\t\t\tfiles: [],\n\t\t}\n\t\tif (!diskUtil.doesFileExist(procFile)) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t`I don't see a Procfile, which Heroku needs to know how to run your skill. Want me to create one?`\n\t\t\t)\n\t\t\tif (!confirm) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\t\tstage: 'procfile',\n\t\t\t\t\tfriendlyMessage:\n\t\t\t\t\t\t'You are gonna need to create a Procfile in your project root so heroku knows how to run your skill.',\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tdiskUtil.writeFile(procFile, 'worker: npm run boot')\n\t\t\tresults.files?.push({\n\t\t\t\tname: 'Procfile',\n\t\t\t\taction: 'generated',\n\t\t\t\tpath: procFile,\n\t\t\t\tdescription: 'Used by Heroku to know how to run your skill.',\n\t\t\t})\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate async setupGitRepo() {\n\t\tconst command = this.Service('command')\n\n\t\tlet inRepo = true\n\t\ttry {\n\t\t\tawait command.execute('git status')\n\t\t} catch {\n\t\t\tinRepo = false\n\t\t}\n\n\t\tif (!inRepo) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t'You are not in a git repo. Would you like to initialize one now?'\n\t\t\t)\n\n\t\t\ttry {\n\t\t\t\tif (confirm) {\n\t\t\t\t\tawait command.execute('git init')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line no-empty\n\t\t\t} catch {}\n\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You must be in a git repo to deploy!',\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async assertLoggedInToHeroku() {\n\t\ttry {\n\t\t\tawait this.Service('command').execute('grep api.heroku.com ~/.netrc')\n\t\t} catch {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'heroku',\n\t\t\t\tfriendlyMessage: `You gotta be logged in using \\`heroku login\\` before you can deploy.!`,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async assertDependencies() {\n\t\tconst command = this.Service('command')\n\t\tconst missing: { name: string; hint: string }[] = []\n\n\t\ttry {\n\t\t\tawait command.execute('which heroku')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'heroku',\n\t\t\t\thint: 'Follow install instructions @ https://devcenter.heroku.com/articles/heroku-cli#download-and-install',\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tawait command.execute('which git')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'git',\n\t\t\t\thint: 'Follow install instructions @ https://git-scm.com/downloads',\n\t\t\t})\n\t\t}\n\n\t\tif (missing.length > 0) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\tdependencies: missing,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async runTests() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isTestInstalled = await this.featureInstaller.isInstalled('test')\n\n\t\tif (isTestInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Testing your skill. Hold onto your pants. 👖')\n\n\t\t\t\tconst testResults = await this.Action('test', 'test').execute({\n\t\t\t\t\twatchMode: 'off',\n\t\t\t\t\tshouldReportWhileRunning: false,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, testResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'testing' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n\n\tprivate async buildAndLint() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isSkillInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (isSkillInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Building your skill. This may take a minute...')\n\n\t\t\t\tconst buildResults = await this.Service('build').build({\n\t\t\t\t\tshouldFixLintFirst: true,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, buildResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'building' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"HerokuAction.js","names":["optionsSchema","buildSchema","id","description","fields","teamName","type","label","isRequired","shouldRunSilently","isPrivate","shouldBuildAndLint","defaultValue","shouldRunTests","DeployAction","options","results","assertRegisteredSkill","assertDependencies","assertLoggedInToHeroku","setupGitRepo","setupGitRemote","setupProcFile","procResults","actionUtil","mergeActionResults","assertNoPendingGitChanges","errors","validateAndNormalizeOptions","buildAndLint","runTests","deploy","ui","clear","skill","Service","getCurrentSkill","summaryLines","name","slug","apiKey","SpruceError","code","stage","friendlyMessage","execute","failed","stdout","toLowerCase","search","command","confirm","pass","pkg","skillName","get","prompt","namesUtil","toKebab","args","env","HOME","process","procFile","diskUtil","resolvePath","cwd","files","doesFileExist","writeFile","push","action","path","inRepo","missing","hint","length","dependencies","features","isInstalled","isTestInstalled","startLoading","Action","watchMode","shouldReportWhileRunning","testResults","isSkillInstalled","build","shouldFixLintFirst","buildResults","AbstractAction"],"sources":["../../../../src/features/deploy/actions/HerokuAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil, namesUtil, SkillAuth } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'deployHeroku',\n\tdescription: 'Deploy your skill to Heroku.',\n\tfields: {\n\t\tteamName: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'team name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tshouldRunSilently: {\n\t\t\ttype: 'boolean',\n\t\t\tisPrivate: true,\n\t\t},\n\t\tshouldBuildAndLint: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t\tshouldRunTests: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['deploy.heroku']\n\tpublic invocationMessage = 'Deploying to Heroku... 🚀'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\ttry {\n\t\t\tawait this.assertRegisteredSkill()\n\t\t\tawait this.assertDependencies()\n\t\t\tawait this.assertLoggedInToHeroku()\n\t\t\tawait this.setupGitRepo()\n\t\t\tawait this.setupGitRemote()\n\n\t\t\tconst procResults = await this.setupProcFile()\n\t\t\tresults = actionUtil.mergeActionResults(results, procResults)\n\n\t\t\tawait this.assertNoPendingGitChanges()\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\n\t\tconst { shouldBuildAndLint, shouldRunTests } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tif (shouldBuildAndLint) {\n\t\t\tresults = await this.buildAndLint()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tif (shouldRunTests) {\n\t\t\tresults = await this.runTests()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tawait this.deploy()\n\n\t\tthis.ui.clear()\n\n\t\tconst skill = this.Service('auth').getCurrentSkill() as SkillAuth\n\n\t\tresults.summaryLines = [\n\t\t\t`You are good to go!`,\n\t\t\t\"You gotta make sure that your ENV's are set on Heroku to the following:\\n\",\n\t\t\t`SKILL_NAME=${skill.name}`,\n\t\t\t`SKILL_SLUG=${skill.slug}`,\n\t\t\t`SKILL_ID=${skill.id}`,\n\t\t\t`SKILL_API_KEY=${skill.apiKey}`,\n\t\t]\n\n\t\treturn results\n\t}\n\n\tprivate assertRegisteredSkill() {\n\t\tconst skill = this.Service('auth').getCurrentSkill()\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'skill',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You have to register your skill. Try `spruce login && spruce register` to get going!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async deploy() {\n\t\tawait this.Service('command').execute(\n\t\t\t'git push --set-upstream heroku master'\n\t\t)\n\t}\n\n\tprivate async assertNoPendingGitChanges() {\n\t\tconst results = await this.Service('command').execute('git status')\n\n\t\tconst failed =\n\t\t\t(results.stdout ?? '').toLowerCase().search('not staged') > -1 ||\n\t\t\t(results.stdout ?? '').toLowerCase().search('no commits') > -1\n\n\t\tif (failed) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You have pending changes. Commit them and try again!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async setupGitRemote() {\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tawait command.execute('git ls-remote heroku')\n\n\t\t\treturn\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch {}\n\n\t\tconst confirm = await this.ui.confirm(\n\t\t\t`I didn't find a a remote named \"heroku\", want me to create one?`\n\t\t)\n\n\t\tif (!confirm) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'remote',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You need to setup a remote named \"heroku\" that Heroku will pull from.',\n\t\t\t})\n\t\t}\n\n\t\tlet pass = false\n\t\tlet label =\n\t\t\t'What name do you wanna give your app on heroku (using-kebab-case)?'\n\n\t\tconst pkg = this.Service('pkg')\n\t\tconst skillName = pkg.get('name')\n\n\t\tdo {\n\t\t\tlet name = await this.ui.prompt({\n\t\t\t\ttype: 'text',\n\t\t\t\tlabel,\n\t\t\t\tdefaultValue: skillName,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\n\t\t\tname = namesUtil.toKebab(name)\n\n\t\t\ttry {\n\t\t\t\tawait command.execute('heroku create', {\n\t\t\t\t\targs: [name],\n\t\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t\t})\n\n\t\t\t\tpass = true\n\t\t\t} catch {\n\t\t\t\tlabel = `Uh oh, \"${name}\" is taken, try again!`\n\t\t\t}\n\t\t} while (!pass)\n\n\t\ttry {\n\t\t\tawait command.execute('heroku buildpacks:set heroku/nodejs', {\n\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t})\n\t\t} catch {\n\t\t\tthrow new SpruceError({ code: 'DEPLOY_FAILED', stage: 'remote' })\n\t\t}\n\t}\n\n\tprivate async setupProcFile(): Promise<FeatureActionResponse> {\n\t\tconst procFile = diskUtil.resolvePath(this.cwd, 'Procfile')\n\t\tconst results: FeatureActionResponse = {\n\t\t\tfiles: [],\n\t\t}\n\t\tif (!diskUtil.doesFileExist(procFile)) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t`I don't see a Procfile, which Heroku needs to know how to run your skill. Want me to create one?`\n\t\t\t)\n\t\t\tif (!confirm) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\t\tstage: 'procfile',\n\t\t\t\t\tfriendlyMessage:\n\t\t\t\t\t\t'You are gonna need to create a Procfile in your project root so heroku knows how to run your skill.',\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tdiskUtil.writeFile(procFile, 'worker: npm run boot')\n\t\t\tresults.files?.push({\n\t\t\t\tname: 'Procfile',\n\t\t\t\taction: 'generated',\n\t\t\t\tpath: procFile,\n\t\t\t\tdescription: 'Used by Heroku to know how to run your skill.',\n\t\t\t})\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate async setupGitRepo() {\n\t\tconst command = this.Service('command')\n\n\t\tlet inRepo = true\n\t\ttry {\n\t\t\tawait command.execute('git status')\n\t\t} catch {\n\t\t\tinRepo = false\n\t\t}\n\n\t\tif (!inRepo) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t'You are not in a git repo. Would you like to initialize one now?'\n\t\t\t)\n\n\t\t\ttry {\n\t\t\t\tif (confirm) {\n\t\t\t\t\tawait command.execute('git init')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line no-empty\n\t\t\t} catch {}\n\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You must be in a git repo to deploy!',\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async assertLoggedInToHeroku() {\n\t\ttry {\n\t\t\tawait this.Service('command').execute('grep api.heroku.com ~/.netrc')\n\t\t} catch {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'heroku',\n\t\t\t\tfriendlyMessage: `You gotta be logged in using \\`heroku login\\` before you can deploy.!`,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async assertDependencies() {\n\t\tconst command = this.Service('command')\n\t\tconst missing: { name: string; hint: string }[] = []\n\n\t\ttry {\n\t\t\tawait command.execute('which heroku')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'heroku',\n\t\t\t\thint: 'Follow install instructions @ https://devcenter.heroku.com/articles/heroku-cli#download-and-install',\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tawait command.execute('which git')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'git',\n\t\t\t\thint: 'Follow install instructions @ https://git-scm.com/downloads',\n\t\t\t})\n\t\t}\n\n\t\tif (missing.length > 0) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\tdependencies: missing,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async runTests() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isTestInstalled = await this.features.isInstalled('test')\n\n\t\tif (isTestInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Testing your skill. Hold onto your pants. 👖')\n\n\t\t\t\tconst testResults = await this.Action('test', 'test').execute({\n\t\t\t\t\twatchMode: 'off',\n\t\t\t\t\tshouldReportWhileRunning: false,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, testResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'testing' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n\n\tprivate async buildAndLint() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isSkillInstalled = await this.features.isInstalled('skill')\n\n\t\tif (isSkillInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Building your skill. This may take a minute...')\n\n\t\t\t\tconst buildResults = await this.Service('build').build({\n\t\t\t\t\tshouldFixLintFirst: true,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, buildResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'building' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n}\n"],"mappings":"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"}
@@ -102,7 +102,7 @@ var UpdateDependenciesAction = /*#__PURE__*/function (_AbstractAction) {
102
102
  switch (_context2.prev = _context2.next) {
103
103
  case 0:
104
104
  _context2.next = 2;
105
- return this.featureInstaller.getInstalledFeatures();
105
+ return this.features.getInstalledFeatures();
106
106
  case 2:
107
107
  features = _context2.sent;
108
108
  pkg = this.Service('pkg');
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateDependenciesAction.js","names":["optionsSchema","buildSchema","id","description","fields","UpdateDependenciesAction","_options","files","file","diskUtil","deleteFile","resolvePath","cwd","InFlightEntertainment","start","installDependencies","totalDependencies","totalDevDependencies","headline","summaryLines","stop","featureInstaller","getInstalledFeatures","features","pkg","Service","pkgContents","readPackage","dependencies","Object","keys","map","d","stripped","name","devDependencies","feature","dep","stripLatest","buildPackageName","isDev","find","unshift","packageDependencies","uniqBy","filter","isBlockedFromUpgrade","deleteLockFile","length","writeStatus","install","shouldForceInstall","shouldCleanupLockFiles","content","get","push","set","path","value","isBlocked","indexOf","AbstractAction"],"sources":["../../../../src/features/node/actions/UpdateDependenciesAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { uniqBy } from 'lodash'\nimport InFlightEntertainment from '../../../InFlightEntertainment'\nimport PkgService from '../../../services/PkgService'\nimport { NpmPackage } from '../../../types/cli.types'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'updateDependenciesAction',\n\tdescription:\n\t\t'Clear lock files and node_modules and then reinstalls all modules.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\nexport default class UpdateDependenciesAction extends AbstractAction<OptionsSchema> {\n\tpublic code = 'updateDependencies'\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['update.dependencies', 'upgrade.dependencies']\n\tpublic invocationMessage = 'Updating dependencies... 💪'\n\n\tpublic async execute(_options: Options): Promise<FeatureActionResponse> {\n\t\tconst files = ['package-lock.json', 'yarn.lock', 'node_modules']\n\n\t\tfor (const file of files) {\n\t\t\tdiskUtil.deleteFile(diskUtil.resolvePath(this.cwd, file))\n\t\t}\n\n\t\ttry {\n\t\t\tInFlightEntertainment.start(['Here we go!', 'Good luck!'])\n\n\t\t\tconst { totalDependencies, totalDevDependencies } =\n\t\t\t\tawait this.installDependencies()\n\n\t\t\treturn {\n\t\t\t\theadline: 'Update Complete!',\n\t\t\t\tsummaryLines: [\n\t\t\t\t\t`${totalDependencies} dependencie${\n\t\t\t\t\t\ttotalDependencies === 1 ? '' : 's'\n\t\t\t\t\t} updated! 💪`,\n\t\t\t\t\t`${totalDevDependencies} dev dependencie${\n\t\t\t\t\t\ttotalDevDependencies === 1 ? '' : 's'\n\t\t\t\t\t} updated! 💪`,\n\t\t\t\t],\n\t\t\t}\n\t\t} finally {\n\t\t\tInFlightEntertainment.stop()\n\t\t}\n\t}\n\n\tprivate async installDependencies() {\n\t\tconst features = await this.featureInstaller.getInstalledFeatures()\n\n\t\tconst pkg = this.Service('pkg')\n\t\tconst pkgContents = pkg.readPackage()\n\n\t\tlet dependencies: { stripped: string; name: string }[] =\n\t\t\tObject.keys(pkgContents.dependencies ?? {}).map((d) => ({\n\t\t\t\tstripped: d,\n\t\t\t\tname: d,\n\t\t\t})) ?? []\n\n\t\tlet devDependencies: { stripped: string; name: string }[] =\n\t\t\tObject.keys(pkgContents.devDependencies ?? {}).map((d) => ({\n\t\t\t\tstripped: d,\n\t\t\t\tname: d,\n\t\t\t})) ?? []\n\n\t\tfor (const feature of features) {\n\t\t\tfor (const dep of feature.packageDependencies as NpmPackage[]) {\n\t\t\t\tconst stripped = pkg.stripLatest(dep.name)\n\t\t\t\tconst name = pkg.buildPackageName(dep)\n\t\t\t\tconst isDev =\n\t\t\t\t\t(dep.isDev || devDependencies.find((d) => d.stripped === stripped)) &&\n\t\t\t\t\t!dependencies.find((d) => d.stripped === stripped)\n\n\t\t\t\tif (isDev) {\n\t\t\t\t\tdevDependencies.unshift({\n\t\t\t\t\t\tstripped,\n\t\t\t\t\t\tname,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tdependencies.unshift({\n\t\t\t\t\t\tstripped,\n\t\t\t\t\t\tname,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdependencies = uniqBy(dependencies, 'stripped').filter(\n\t\t\t(d) => !this.isBlockedFromUpgrade(d.stripped, pkg)\n\t\t)\n\t\tdevDependencies = uniqBy(devDependencies, 'stripped').filter(\n\t\t\t(d) => !this.isBlockedFromUpgrade(d.stripped, pkg)\n\t\t)\n\n\t\tpkg.deleteLockFile()\n\n\t\tif (dependencies.length > 0) {\n\t\t\tInFlightEntertainment.writeStatus(\n\t\t\t\t`Installing ${dependencies.length} dependenc${\n\t\t\t\t\tdependencies.length === 1 ? 'y' : 'ies'\n\t\t\t\t}.`\n\t\t\t)\n\t\t\tawait pkg.install(\n\t\t\t\tdependencies.map((d) => d.name),\n\t\t\t\t{\n\t\t\t\t\tshouldForceInstall: true,\n\t\t\t\t\tshouldCleanupLockFiles: false,\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tif (devDependencies.length > 0) {\n\t\t\tInFlightEntertainment.writeStatus(\n\t\t\t\t`Installing ${devDependencies.length} dev dependenc${\n\t\t\t\t\tdependencies.length === 1 ? 'y' : 'ies'\n\t\t\t\t}.`\n\t\t\t)\n\t\t\tawait pkg.install(\n\t\t\t\tdevDependencies.map((d) => d.name),\n\t\t\t\t{\n\t\t\t\t\tshouldForceInstall: true,\n\t\t\t\t\tisDev: true,\n\t\t\t\t\tshouldCleanupLockFiles: false,\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tpkg.deleteLockFile()\n\n\t\treturn {\n\t\t\ttotalDependencies: dependencies.length,\n\t\t\ttotalDevDependencies: devDependencies.length,\n\t\t}\n\t}\n\n\tpublic blockUpgrade(name: string, pkg: PkgService) {\n\t\tconst content = pkg.get('skill.upgradeIgnoreList') ?? []\n\t\tcontent.push(name)\n\t\tpkg.set({ path: 'skill.upgradeIgnoreList', value: content })\n\t}\n\n\tpublic isBlockedFromUpgrade(name: string, pkg: PkgService) {\n\t\tconst content = pkg.get('skill.upgradeIgnoreList') ?? []\n\t\tconst isBlocked = content.indexOf(name) > -1\n\t\treturn isBlocked\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"UpdateDependenciesAction.js","names":["optionsSchema","buildSchema","id","description","fields","UpdateDependenciesAction","_options","files","file","diskUtil","deleteFile","resolvePath","cwd","InFlightEntertainment","start","installDependencies","totalDependencies","totalDevDependencies","headline","summaryLines","stop","features","getInstalledFeatures","pkg","Service","pkgContents","readPackage","dependencies","Object","keys","map","d","stripped","name","devDependencies","feature","dep","stripLatest","buildPackageName","isDev","find","unshift","packageDependencies","uniqBy","filter","isBlockedFromUpgrade","deleteLockFile","length","writeStatus","install","shouldForceInstall","shouldCleanupLockFiles","content","get","push","set","path","value","isBlocked","indexOf","AbstractAction"],"sources":["../../../../src/features/node/actions/UpdateDependenciesAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { uniqBy } from 'lodash'\nimport InFlightEntertainment from '../../../InFlightEntertainment'\nimport PkgService from '../../../services/PkgService'\nimport { NpmPackage } from '../../../types/cli.types'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'updateDependenciesAction',\n\tdescription:\n\t\t'Clear lock files and node_modules and then reinstalls all modules.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\nexport default class UpdateDependenciesAction extends AbstractAction<OptionsSchema> {\n\tpublic code = 'updateDependencies'\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['update.dependencies', 'upgrade.dependencies']\n\tpublic invocationMessage = 'Updating dependencies... 💪'\n\n\tpublic async execute(_options: Options): Promise<FeatureActionResponse> {\n\t\tconst files = ['package-lock.json', 'yarn.lock', 'node_modules']\n\n\t\tfor (const file of files) {\n\t\t\tdiskUtil.deleteFile(diskUtil.resolvePath(this.cwd, file))\n\t\t}\n\n\t\ttry {\n\t\t\tInFlightEntertainment.start(['Here we go!', 'Good luck!'])\n\n\t\t\tconst { totalDependencies, totalDevDependencies } =\n\t\t\t\tawait this.installDependencies()\n\n\t\t\treturn {\n\t\t\t\theadline: 'Update Complete!',\n\t\t\t\tsummaryLines: [\n\t\t\t\t\t`${totalDependencies} dependencie${\n\t\t\t\t\t\ttotalDependencies === 1 ? '' : 's'\n\t\t\t\t\t} updated! 💪`,\n\t\t\t\t\t`${totalDevDependencies} dev dependencie${\n\t\t\t\t\t\ttotalDevDependencies === 1 ? '' : 's'\n\t\t\t\t\t} updated! 💪`,\n\t\t\t\t],\n\t\t\t}\n\t\t} finally {\n\t\t\tInFlightEntertainment.stop()\n\t\t}\n\t}\n\n\tprivate async installDependencies() {\n\t\tconst features = await this.features.getInstalledFeatures()\n\n\t\tconst pkg = this.Service('pkg')\n\t\tconst pkgContents = pkg.readPackage()\n\n\t\tlet dependencies: { stripped: string; name: string }[] =\n\t\t\tObject.keys(pkgContents.dependencies ?? {}).map((d) => ({\n\t\t\t\tstripped: d,\n\t\t\t\tname: d,\n\t\t\t})) ?? []\n\n\t\tlet devDependencies: { stripped: string; name: string }[] =\n\t\t\tObject.keys(pkgContents.devDependencies ?? {}).map((d) => ({\n\t\t\t\tstripped: d,\n\t\t\t\tname: d,\n\t\t\t})) ?? []\n\n\t\tfor (const feature of features) {\n\t\t\tfor (const dep of feature.packageDependencies as NpmPackage[]) {\n\t\t\t\tconst stripped = pkg.stripLatest(dep.name)\n\t\t\t\tconst name = pkg.buildPackageName(dep)\n\t\t\t\tconst isDev =\n\t\t\t\t\t(dep.isDev || devDependencies.find((d) => d.stripped === stripped)) &&\n\t\t\t\t\t!dependencies.find((d) => d.stripped === stripped)\n\n\t\t\t\tif (isDev) {\n\t\t\t\t\tdevDependencies.unshift({\n\t\t\t\t\t\tstripped,\n\t\t\t\t\t\tname,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tdependencies.unshift({\n\t\t\t\t\t\tstripped,\n\t\t\t\t\t\tname,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdependencies = uniqBy(dependencies, 'stripped').filter(\n\t\t\t(d) => !this.isBlockedFromUpgrade(d.stripped, pkg)\n\t\t)\n\t\tdevDependencies = uniqBy(devDependencies, 'stripped').filter(\n\t\t\t(d) => !this.isBlockedFromUpgrade(d.stripped, pkg)\n\t\t)\n\n\t\tpkg.deleteLockFile()\n\n\t\tif (dependencies.length > 0) {\n\t\t\tInFlightEntertainment.writeStatus(\n\t\t\t\t`Installing ${dependencies.length} dependenc${\n\t\t\t\t\tdependencies.length === 1 ? 'y' : 'ies'\n\t\t\t\t}.`\n\t\t\t)\n\t\t\tawait pkg.install(\n\t\t\t\tdependencies.map((d) => d.name),\n\t\t\t\t{\n\t\t\t\t\tshouldForceInstall: true,\n\t\t\t\t\tshouldCleanupLockFiles: false,\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tif (devDependencies.length > 0) {\n\t\t\tInFlightEntertainment.writeStatus(\n\t\t\t\t`Installing ${devDependencies.length} dev dependenc${\n\t\t\t\t\tdependencies.length === 1 ? 'y' : 'ies'\n\t\t\t\t}.`\n\t\t\t)\n\t\t\tawait pkg.install(\n\t\t\t\tdevDependencies.map((d) => d.name),\n\t\t\t\t{\n\t\t\t\t\tshouldForceInstall: true,\n\t\t\t\t\tisDev: true,\n\t\t\t\t\tshouldCleanupLockFiles: false,\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tpkg.deleteLockFile()\n\n\t\treturn {\n\t\t\ttotalDependencies: dependencies.length,\n\t\t\ttotalDevDependencies: devDependencies.length,\n\t\t}\n\t}\n\n\tpublic blockUpgrade(name: string, pkg: PkgService) {\n\t\tconst content = pkg.get('skill.upgradeIgnoreList') ?? []\n\t\tcontent.push(name)\n\t\tpkg.set({ path: 'skill.upgradeIgnoreList', value: content })\n\t}\n\n\tpublic isBlockedFromUpgrade(name: string, pkg: PkgService) {\n\t\tconst content = pkg.get('skill.upgradeIgnoreList') ?? []\n\t\tconst isBlocked = content.indexOf(name) > -1\n\t\treturn isBlocked\n\t}\n}\n"],"mappings":"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"}
@@ -124,7 +124,7 @@ var UpgradeAction = /*#__PURE__*/function (_AbstractAction) {
124
124
  switch (_context3.prev = _context3.next) {
125
125
  case 0:
126
126
  _context3.next = 2;
127
- return this.featureInstaller.getInstalledFeatures();
127
+ return this.features.getInstalledFeatures();
128
128
  case 2:
129
129
  features = _context3.sent;
130
130
  scripts = {};
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeAction.js","names":["UpgradeAction","upgradeSkillActionSchema","options","normalizedOptions","validateAndNormalizeOptions","updateScripts","shouldConfirm","upgradeMode","Writer","writeNodeModule","cwd","shouldConfirmBeforeWriting","shouldWriteIndex","files","ui","clear","InFlightEntertainment","start","reInstallPackageDependencies","dependencyResults","actionUtil","mergeActionResults","headline","stop","renderHero","Action","execute","featureInstaller","getInstalledFeatures","features","scripts","feature","scriptUpdater","ScriptUpdater","FromFeature","parent","latestScripts","update","shouldConfirmIfScriptExistsButIsDifferent","AbstractAction"],"sources":["../../../../src/features/node/actions/UpgradeAction.ts"],"sourcesContent":["import { SchemaValues } from '@sprucelabs/schema'\nimport { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport upgradeSkillActionSchema from '#spruce/schemas/spruceCli/v2020_07_22/upgradeSkillOptions.schema'\nimport InFlightEntertainment from '../../../InFlightEntertainment'\nimport ScriptUpdater from '../../../updaters/ScriptUpdater'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\ntype OptionsSchema =\n\tSpruceSchemas.SpruceCli.v2020_07_22.UpgradeSkillOptionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class UpgradeAction extends AbstractAction<OptionsSchema> {\n\tpublic invocationMessage = 'Upgrading your skill... 💪'\n\tpublic optionsSchema = upgradeSkillActionSchema\n\tpublic commandAliases = ['upgrade', 'update']\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\n\t\tawait this.updateScripts({\n\t\t\tshouldConfirm: normalizedOptions.upgradeMode !== 'forceEverything',\n\t\t})\n\n\t\ttry {\n\t\t\tconst files = await this.Writer('node', {\n\t\t\t\tupgradeMode: normalizedOptions.upgradeMode,\n\t\t\t}).writeNodeModule(this.cwd, {\n\t\t\t\tshouldConfirmBeforeWriting: true,\n\t\t\t\tshouldWriteIndex: false,\n\t\t\t})\n\n\t\t\tthis.ui.clear()\n\t\t\tInFlightEntertainment.start([\n\t\t\t\t\"Let's start the upgrade!\",\n\t\t\t\t'While things are going, see if you can beat 1k points!',\n\t\t\t\t'Go!!!!',\n\t\t\t])\n\n\t\t\tconst dependencyResults = await this.reInstallPackageDependencies()\n\n\t\t\treturn actionUtil.mergeActionResults(dependencyResults, {\n\t\t\t\theadline: 'Upgrade',\n\t\t\t\tfiles,\n\t\t\t})\n\t\t} finally {\n\t\t\tInFlightEntertainment.stop()\n\t\t\tthis.ui.renderHero('Upgrade')\n\t\t}\n\t}\n\n\tprivate async reInstallPackageDependencies() {\n\t\treturn this.Action('node', 'updateDependencies').execute({})\n\t}\n\n\tprivate async updateScripts(options: { shouldConfirm: boolean }) {\n\t\tconst features = await this.featureInstaller.getInstalledFeatures()\n\n\t\tlet scripts: Record<string, any> = {}\n\n\t\tfor (const feature of features) {\n\t\t\tscripts = {\n\t\t\t\t...scripts,\n\t\t\t\t...feature.scripts,\n\t\t\t}\n\t\t}\n\n\t\tconst scriptUpdater = ScriptUpdater.FromFeature(this.parent, {\n\t\t\tlatestScripts: scripts,\n\t\t})\n\n\t\tawait scriptUpdater.update({\n\t\t\tshouldConfirmIfScriptExistsButIsDifferent: options.shouldConfirm,\n\t\t})\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AAAiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAO5BA,aAAa;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA,sGACN,4BAA4B;IAAA,kGAChCC,+BAAwB;IAAA,mGACvB,CAAC,SAAS,EAAE,QAAQ,CAAC;IAAA;EAAA;EAAA;IAAA;IAAA;MAAA,6FAE7C,iBAAqBC,OAAgB;QAAA;QAAA;UAAA;YAAA;cAAA;gBAC9BC,iBAAiB,GAAG,IAAI,CAACC,2BAA2B,CAACF,OAAO,CAAC;gBAAA;gBAAA,OAE7D,IAAI,CAACG,aAAa,CAAC;kBACxBC,aAAa,EAAEH,iBAAiB,CAACI,WAAW,KAAK;gBAClD,CAAC,CAAC;cAAA;gBAAA;gBAAA;gBAAA,OAGmB,IAAI,CAACC,MAAM,CAAC,MAAM,EAAE;kBACvCD,WAAW,EAAEJ,iBAAiB,CAACI;gBAChC,CAAC,CAAC,CAACE,eAAe,CAAC,IAAI,CAACC,GAAG,EAAE;kBAC5BC,0BAA0B,EAAE,IAAI;kBAChCC,gBAAgB,EAAE;gBACnB,CAAC,CAAC;cAAA;gBALIC,KAAK;gBAOX,IAAI,CAACC,EAAE,CAACC,KAAK,EAAE;gBACfC,iCAAqB,CAACC,KAAK,CAAC,CAC3B,0BAA0B,EAC1B,wDAAwD,EACxD,QAAQ,CACR,CAAC;gBAAA;gBAAA,OAE8B,IAAI,CAACC,4BAA4B,EAAE;cAAA;gBAA7DC,iBAAiB;gBAAA,iCAEhBC,kBAAU,CAACC,kBAAkB,CAACF,iBAAiB,EAAE;kBACvDG,QAAQ,EAAE,SAAS;kBACnBT,KAAK,EAALA;gBACD,CAAC,CAAC;cAAA;gBAAA;gBAEFG,iCAAqB,CAACO,IAAI,EAAE;gBAC5B,IAAI,CAACT,EAAE,CAACU,UAAU,CAAC,SAAS,CAAC;gBAAA;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAE9B;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,kHAED;QAAA;UAAA;YAAA;cAAA;gBAAA,kCACQ,IAAI,CAACC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAC5D;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,mGAED,kBAA4BxB,OAAmC;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACvC,IAAI,CAACyB,gBAAgB,CAACC,oBAAoB,EAAE;cAAA;gBAA7DC,QAAQ;gBAEVC,OAA4B,GAAG,CAAC,CAAC;gBAAA,uCAEfD,QAAQ;gBAAA;kBAA9B,oDAAgC;oBAArBE,OAAO;oBACjBD,OAAO,mCACHA,OAAO,GACPC,OAAO,CAACD,OAAO,CAClB;kBACF;gBAAC;kBAAA;gBAAA;kBAAA;gBAAA;gBAEKE,aAAa,GAAGC,yBAAa,CAACC,WAAW,CAAC,IAAI,CAACC,MAAM,EAAE;kBAC5DC,aAAa,EAAEN;gBAChB,CAAC,CAAC;gBAAA;gBAAA,OAEIE,aAAa,CAACK,MAAM,CAAC;kBAC1BC,yCAAyC,EAAEpC,OAAO,CAACI;gBACpD,CAAC,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACF;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;EAAA;AAAA,EA9DyCiC,2BAAc;AAAA"}
1
+ {"version":3,"file":"UpgradeAction.js","names":["UpgradeAction","upgradeSkillActionSchema","options","normalizedOptions","validateAndNormalizeOptions","updateScripts","shouldConfirm","upgradeMode","Writer","writeNodeModule","cwd","shouldConfirmBeforeWriting","shouldWriteIndex","files","ui","clear","InFlightEntertainment","start","reInstallPackageDependencies","dependencyResults","actionUtil","mergeActionResults","headline","stop","renderHero","Action","execute","features","getInstalledFeatures","scripts","feature","scriptUpdater","ScriptUpdater","FromFeature","parent","latestScripts","update","shouldConfirmIfScriptExistsButIsDifferent","AbstractAction"],"sources":["../../../../src/features/node/actions/UpgradeAction.ts"],"sourcesContent":["import { SchemaValues } from '@sprucelabs/schema'\nimport { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport upgradeSkillActionSchema from '#spruce/schemas/spruceCli/v2020_07_22/upgradeSkillOptions.schema'\nimport InFlightEntertainment from '../../../InFlightEntertainment'\nimport ScriptUpdater from '../../../updaters/ScriptUpdater'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\ntype OptionsSchema =\n\tSpruceSchemas.SpruceCli.v2020_07_22.UpgradeSkillOptionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class UpgradeAction extends AbstractAction<OptionsSchema> {\n\tpublic invocationMessage = 'Upgrading your skill... 💪'\n\tpublic optionsSchema = upgradeSkillActionSchema\n\tpublic commandAliases = ['upgrade', 'update']\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\n\t\tawait this.updateScripts({\n\t\t\tshouldConfirm: normalizedOptions.upgradeMode !== 'forceEverything',\n\t\t})\n\n\t\ttry {\n\t\t\tconst files = await this.Writer('node', {\n\t\t\t\tupgradeMode: normalizedOptions.upgradeMode,\n\t\t\t}).writeNodeModule(this.cwd, {\n\t\t\t\tshouldConfirmBeforeWriting: true,\n\t\t\t\tshouldWriteIndex: false,\n\t\t\t})\n\n\t\t\tthis.ui.clear()\n\t\t\tInFlightEntertainment.start([\n\t\t\t\t\"Let's start the upgrade!\",\n\t\t\t\t'While things are going, see if you can beat 1k points!',\n\t\t\t\t'Go!!!!',\n\t\t\t])\n\n\t\t\tconst dependencyResults = await this.reInstallPackageDependencies()\n\n\t\t\treturn actionUtil.mergeActionResults(dependencyResults, {\n\t\t\t\theadline: 'Upgrade',\n\t\t\t\tfiles,\n\t\t\t})\n\t\t} finally {\n\t\t\tInFlightEntertainment.stop()\n\t\t\tthis.ui.renderHero('Upgrade')\n\t\t}\n\t}\n\n\tprivate async reInstallPackageDependencies() {\n\t\treturn this.Action('node', 'updateDependencies').execute({})\n\t}\n\n\tprivate async updateScripts(options: { shouldConfirm: boolean }) {\n\t\tconst features = await this.features.getInstalledFeatures()\n\n\t\tlet scripts: Record<string, any> = {}\n\n\t\tfor (const feature of features) {\n\t\t\tscripts = {\n\t\t\t\t...scripts,\n\t\t\t\t...feature.scripts,\n\t\t\t}\n\t\t}\n\n\t\tconst scriptUpdater = ScriptUpdater.FromFeature(this.parent, {\n\t\t\tlatestScripts: scripts,\n\t\t})\n\n\t\tawait scriptUpdater.update({\n\t\t\tshouldConfirmIfScriptExistsButIsDifferent: options.shouldConfirm,\n\t\t})\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AAAiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAO5BA,aAAa;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA,sGACN,4BAA4B;IAAA,kGAChCC,+BAAwB;IAAA,mGACvB,CAAC,SAAS,EAAE,QAAQ,CAAC;IAAA;EAAA;EAAA;IAAA;IAAA;MAAA,6FAE7C,iBAAqBC,OAAgB;QAAA;QAAA;UAAA;YAAA;cAAA;gBAC9BC,iBAAiB,GAAG,IAAI,CAACC,2BAA2B,CAACF,OAAO,CAAC;gBAAA;gBAAA,OAE7D,IAAI,CAACG,aAAa,CAAC;kBACxBC,aAAa,EAAEH,iBAAiB,CAACI,WAAW,KAAK;gBAClD,CAAC,CAAC;cAAA;gBAAA;gBAAA;gBAAA,OAGmB,IAAI,CAACC,MAAM,CAAC,MAAM,EAAE;kBACvCD,WAAW,EAAEJ,iBAAiB,CAACI;gBAChC,CAAC,CAAC,CAACE,eAAe,CAAC,IAAI,CAACC,GAAG,EAAE;kBAC5BC,0BAA0B,EAAE,IAAI;kBAChCC,gBAAgB,EAAE;gBACnB,CAAC,CAAC;cAAA;gBALIC,KAAK;gBAOX,IAAI,CAACC,EAAE,CAACC,KAAK,EAAE;gBACfC,iCAAqB,CAACC,KAAK,CAAC,CAC3B,0BAA0B,EAC1B,wDAAwD,EACxD,QAAQ,CACR,CAAC;gBAAA;gBAAA,OAE8B,IAAI,CAACC,4BAA4B,EAAE;cAAA;gBAA7DC,iBAAiB;gBAAA,iCAEhBC,kBAAU,CAACC,kBAAkB,CAACF,iBAAiB,EAAE;kBACvDG,QAAQ,EAAE,SAAS;kBACnBT,KAAK,EAALA;gBACD,CAAC,CAAC;cAAA;gBAAA;gBAEFG,iCAAqB,CAACO,IAAI,EAAE;gBAC5B,IAAI,CAACT,EAAE,CAACU,UAAU,CAAC,SAAS,CAAC;gBAAA;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAE9B;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,kHAED;QAAA;UAAA;YAAA;cAAA;gBAAA,kCACQ,IAAI,CAACC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAC5D;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,mGAED,kBAA4BxB,OAAmC;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACvC,IAAI,CAACyB,QAAQ,CAACC,oBAAoB,EAAE;cAAA;gBAArDD,QAAQ;gBAEVE,OAA4B,GAAG,CAAC,CAAC;gBAAA,uCAEfF,QAAQ;gBAAA;kBAA9B,oDAAgC;oBAArBG,OAAO;oBACjBD,OAAO,mCACHA,OAAO,GACPC,OAAO,CAACD,OAAO,CAClB;kBACF;gBAAC;kBAAA;gBAAA;kBAAA;gBAAA;gBAEKE,aAAa,GAAGC,yBAAa,CAACC,WAAW,CAAC,IAAI,CAACC,MAAM,EAAE;kBAC5DC,aAAa,EAAEN;gBAChB,CAAC,CAAC;gBAAA;gBAAA,OAEIE,aAAa,CAACK,MAAM,CAAC;kBAC1BC,yCAAyC,EAAEnC,OAAO,CAACI;gBACpD,CAAC,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACF;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;EAAA;AAAA,EA9DyCgC,2BAAc;AAAA"}
@@ -220,7 +220,7 @@ var CreateAction = /*#__PURE__*/function (_AbstractAction) {
220
220
  break;
221
221
  }
222
222
  _context4.next = 3;
223
- return this.featureInstaller.isInstalled(match.featureCode);
223
+ return this.features.isInstalled(match.featureCode);
224
224
  case 3:
225
225
  isInstalled = _context4.sent;
226
226
  if (isInstalled) {
@@ -229,7 +229,7 @@ var CreateAction = /*#__PURE__*/function (_AbstractAction) {
229
229
  }
230
230
  this.ui.startLoading("Installing ".concat(match.name, "..."));
231
231
  _context4.next = 8;
232
- return this.featureInstaller.install({
232
+ return this.features.install({
233
233
  features: [{
234
234
  code: match.featureCode
235
235
  }]
@@ -1 +1 @@
1
- {"version":3,"file":"CreateAction.js","names":["CreateAction","createTestActionSchema","options","normalizedOptions","validateAndNormalizeOptions","testDestinationDir","namePascal","nameCamel","type","resolvedDestination","diskUtil","resolvePath","cwd","ui","startLoading","testFeature","parent","stopLoading","buildParentClassCandidates","candidates","doesDirExist","promptForSubDir","length","promptForParentTestClassAndOptionallyInstallDependencies","parentTestClass","writer","Writer","generateTest","namesUtil","toPascal","results","files","hints","subdirs","readDir","filter","d","isDir","prompt","label","isRequired","choices","value","map","dir","match","candidate","idx","optionallyInstallFeatureBasedOnSelection","buildParentClassFromCandidate","featureCode","featureInstaller","isInstalled","name","install","features","code","isDefaultExport","importPath","resolveRelativePath","path","replace","pathUtil","extname","AbstractAction"],"sources":["../../../../src/features/test/actions/CreateAction.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport createTestActionSchema from '#spruce/schemas/spruceCli/v2020_07_22/createTestOptions.schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport TestFeature, { ParentClassCandidate } from '../TestFeature'\n\ntype OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptions\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = createTestActionSchema\n\tpublic invocationMessage = 'Creating a test... 🛡'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\t\tconst { testDestinationDir, namePascal, nameCamel, type } =\n\t\t\tnormalizedOptions\n\n\t\tlet resolvedDestination = diskUtil.resolvePath(\n\t\t\tthis.cwd,\n\t\t\ttestDestinationDir,\n\t\t\ttype\n\t\t)\n\n\t\tthis.ui.startLoading('Checking potential parent test classes')\n\n\t\tconst testFeature = this.parent as TestFeature\n\n\t\tthis.ui.stopLoading()\n\n\t\tlet parentTestClass:\n\t\t\t| undefined\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\n\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\tif (diskUtil.doesDirExist(resolvedDestination)) {\n\t\t\tresolvedDestination = await this.promptForSubDir(\n\t\t\t\tresolvedDestination,\n\t\t\t\ttype\n\t\t\t)\n\t\t}\n\n\t\tif (candidates.length > 0) {\n\t\t\tparentTestClass =\n\t\t\t\tawait this.promptForParentTestClassAndOptionallyInstallDependencies(\n\t\t\t\t\tcandidates,\n\t\t\t\t\tparentTestClass,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t}\n\n\t\tthis.ui.startLoading('Generating test file...')\n\n\t\tconst writer = this.Writer('test')\n\n\t\tconst results = await writer.generateTest(resolvedDestination, {\n\t\t\t...normalizedOptions,\n\t\t\ttype,\n\t\t\tnameCamel,\n\t\t\tparentTestClass,\n\t\t\tnamePascal: namePascal ?? namesUtil.toPascal(nameCamel),\n\t\t})\n\n\t\treturn {\n\t\t\tfiles: results,\n\t\t\thints: [\"run `spruce test` in your skill when you're ready!\"],\n\t\t}\n\t}\n\tprivate async promptForSubDir(resolvedDestination: string, type: string) {\n\t\tconst subdirs = diskUtil\n\t\t\t.readDir(resolvedDestination)\n\t\t\t.filter((d) =>\n\t\t\t\tdiskUtil.isDir(diskUtil.resolvePath(resolvedDestination, d))\n\t\t\t)\n\n\t\tif (subdirs.length > 0) {\n\t\t\tconst match = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Where should I write this test?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: '.',\n\t\t\t\t\t\t\tlabel: `${type}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...subdirs.map((dir) => ({\n\t\t\t\t\t\t\tvalue: `${dir}`,\n\t\t\t\t\t\t\tlabel: `${type}/${dir}`,\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\tresolvedDestination = diskUtil.resolvePath(resolvedDestination, match)\n\t\t}\n\t\treturn resolvedDestination\n\t}\n\n\tprivate async promptForParentTestClassAndOptionallyInstallDependencies(\n\t\tcandidates: ParentClassCandidate[],\n\t\tparentTestClass:\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\t\t\t| undefined,\n\t\tresolvedDestination: string\n\t) {\n\t\tconst idx = await this.ui.prompt({\n\t\t\ttype: 'select',\n\t\t\tisRequired: true,\n\t\t\tlabel: 'Which abstract test class do you want to extend?',\n\t\t\toptions: {\n\t\t\t\tchoices: [\n\t\t\t\t\t{ value: '', label: 'AbstractSpruceTest (default)' },\n\t\t\t\t\t...candidates.map((candidate, idx) => ({\n\t\t\t\t\t\tvalue: `${idx}`,\n\t\t\t\t\t\tlabel: candidate.label,\n\t\t\t\t\t})),\n\t\t\t\t],\n\t\t\t},\n\t\t})\n\n\t\tif (idx !== '' && candidates[+idx]) {\n\t\t\tconst match = candidates[+idx]\n\n\t\t\tif (match) {\n\t\t\t\tawait this.optionallyInstallFeatureBasedOnSelection(match)\n\n\t\t\t\tparentTestClass = this.buildParentClassFromCandidate(\n\t\t\t\t\tmatch,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\treturn parentTestClass\n\t}\n\n\tprivate async optionallyInstallFeatureBasedOnSelection(\n\t\tmatch: ParentClassCandidate\n\t) {\n\t\tif (match.featureCode) {\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\tmatch.featureCode\n\t\t\t)\n\n\t\t\tif (!isInstalled) {\n\t\t\t\tthis.ui.startLoading(`Installing ${match.name}...`)\n\t\t\t\tawait this.featureInstaller.install({\n\t\t\t\t\tfeatures: [{ code: match.featureCode as any }],\n\t\t\t\t})\n\t\t\t\tthis.ui.stopLoading()\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate buildParentClassFromCandidate(\n\t\tmatch: ParentClassCandidate,\n\t\tresolvedDestination: string\n\t): {\n\t\tname: string\n\t\tlabel: string\n\t\timportPath: string\n\t\tisDefaultExport: boolean\n\t} {\n\t\treturn {\n\t\t\tname: match.name,\n\t\t\tlabel: match.label,\n\t\t\tisDefaultExport: match.isDefaultExport,\n\t\t\timportPath:\n\t\t\t\tmatch.import ??\n\t\t\t\tdiskUtil.resolveRelativePath(\n\t\t\t\t\tresolvedDestination,\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tmatch.path.replace(pathUtil.extname(match.path), '')\n\t\t\t\t),\n\t\t}\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CreateAction.js","names":["CreateAction","createTestActionSchema","options","normalizedOptions","validateAndNormalizeOptions","testDestinationDir","namePascal","nameCamel","type","resolvedDestination","diskUtil","resolvePath","cwd","ui","startLoading","testFeature","parent","stopLoading","buildParentClassCandidates","candidates","doesDirExist","promptForSubDir","length","promptForParentTestClassAndOptionallyInstallDependencies","parentTestClass","writer","Writer","generateTest","namesUtil","toPascal","results","files","hints","subdirs","readDir","filter","d","isDir","prompt","label","isRequired","choices","value","map","dir","match","candidate","idx","optionallyInstallFeatureBasedOnSelection","buildParentClassFromCandidate","featureCode","features","isInstalled","name","install","code","isDefaultExport","importPath","resolveRelativePath","path","replace","pathUtil","extname","AbstractAction"],"sources":["../../../../src/features/test/actions/CreateAction.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport createTestActionSchema from '#spruce/schemas/spruceCli/v2020_07_22/createTestOptions.schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport TestFeature, { ParentClassCandidate } from '../TestFeature'\n\ntype OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptions\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = createTestActionSchema\n\tpublic invocationMessage = 'Creating a test... 🛡'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\t\tconst { testDestinationDir, namePascal, nameCamel, type } =\n\t\t\tnormalizedOptions\n\n\t\tlet resolvedDestination = diskUtil.resolvePath(\n\t\t\tthis.cwd,\n\t\t\ttestDestinationDir,\n\t\t\ttype\n\t\t)\n\n\t\tthis.ui.startLoading('Checking potential parent test classes')\n\n\t\tconst testFeature = this.parent as TestFeature\n\n\t\tthis.ui.stopLoading()\n\n\t\tlet parentTestClass:\n\t\t\t| undefined\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\n\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\tif (diskUtil.doesDirExist(resolvedDestination)) {\n\t\t\tresolvedDestination = await this.promptForSubDir(\n\t\t\t\tresolvedDestination,\n\t\t\t\ttype\n\t\t\t)\n\t\t}\n\n\t\tif (candidates.length > 0) {\n\t\t\tparentTestClass =\n\t\t\t\tawait this.promptForParentTestClassAndOptionallyInstallDependencies(\n\t\t\t\t\tcandidates,\n\t\t\t\t\tparentTestClass,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t}\n\n\t\tthis.ui.startLoading('Generating test file...')\n\n\t\tconst writer = this.Writer('test')\n\n\t\tconst results = await writer.generateTest(resolvedDestination, {\n\t\t\t...normalizedOptions,\n\t\t\ttype,\n\t\t\tnameCamel,\n\t\t\tparentTestClass,\n\t\t\tnamePascal: namePascal ?? namesUtil.toPascal(nameCamel),\n\t\t})\n\n\t\treturn {\n\t\t\tfiles: results,\n\t\t\thints: [\"run `spruce test` in your skill when you're ready!\"],\n\t\t}\n\t}\n\tprivate async promptForSubDir(resolvedDestination: string, type: string) {\n\t\tconst subdirs = diskUtil\n\t\t\t.readDir(resolvedDestination)\n\t\t\t.filter((d) =>\n\t\t\t\tdiskUtil.isDir(diskUtil.resolvePath(resolvedDestination, d))\n\t\t\t)\n\n\t\tif (subdirs.length > 0) {\n\t\t\tconst match = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Where should I write this test?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: '.',\n\t\t\t\t\t\t\tlabel: `${type}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...subdirs.map((dir) => ({\n\t\t\t\t\t\t\tvalue: `${dir}`,\n\t\t\t\t\t\t\tlabel: `${type}/${dir}`,\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\tresolvedDestination = diskUtil.resolvePath(resolvedDestination, match)\n\t\t}\n\t\treturn resolvedDestination\n\t}\n\n\tprivate async promptForParentTestClassAndOptionallyInstallDependencies(\n\t\tcandidates: ParentClassCandidate[],\n\t\tparentTestClass:\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\t\t\t| undefined,\n\t\tresolvedDestination: string\n\t) {\n\t\tconst idx = await this.ui.prompt({\n\t\t\ttype: 'select',\n\t\t\tisRequired: true,\n\t\t\tlabel: 'Which abstract test class do you want to extend?',\n\t\t\toptions: {\n\t\t\t\tchoices: [\n\t\t\t\t\t{ value: '', label: 'AbstractSpruceTest (default)' },\n\t\t\t\t\t...candidates.map((candidate, idx) => ({\n\t\t\t\t\t\tvalue: `${idx}`,\n\t\t\t\t\t\tlabel: candidate.label,\n\t\t\t\t\t})),\n\t\t\t\t],\n\t\t\t},\n\t\t})\n\n\t\tif (idx !== '' && candidates[+idx]) {\n\t\t\tconst match = candidates[+idx]\n\n\t\t\tif (match) {\n\t\t\t\tawait this.optionallyInstallFeatureBasedOnSelection(match)\n\n\t\t\t\tparentTestClass = this.buildParentClassFromCandidate(\n\t\t\t\t\tmatch,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\treturn parentTestClass\n\t}\n\n\tprivate async optionallyInstallFeatureBasedOnSelection(\n\t\tmatch: ParentClassCandidate\n\t) {\n\t\tif (match.featureCode) {\n\t\t\tconst isInstalled = await this.features.isInstalled(match.featureCode)\n\n\t\t\tif (!isInstalled) {\n\t\t\t\tthis.ui.startLoading(`Installing ${match.name}...`)\n\t\t\t\tawait this.features.install({\n\t\t\t\t\tfeatures: [{ code: match.featureCode as any }],\n\t\t\t\t})\n\t\t\t\tthis.ui.stopLoading()\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate buildParentClassFromCandidate(\n\t\tmatch: ParentClassCandidate,\n\t\tresolvedDestination: string\n\t): {\n\t\tname: string\n\t\tlabel: string\n\t\timportPath: string\n\t\tisDefaultExport: boolean\n\t} {\n\t\treturn {\n\t\t\tname: match.name,\n\t\t\tlabel: match.label,\n\t\t\tisDefaultExport: match.isDefaultExport,\n\t\t\timportPath:\n\t\t\t\tmatch.import ??\n\t\t\t\tdiskUtil.resolveRelativePath(\n\t\t\t\t\tresolvedDestination,\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tmatch.path.replace(pathUtil.extname(match.path), '')\n\t\t\t\t),\n\t\t}\n\t}\n}\n"],"mappings":"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"}
@@ -1,32 +1,19 @@
1
- import { SchemaValues } from '@sprucelabs/schema';
2
1
  import AbstractAction from '../../AbstractAction';
3
2
  import { FeatureActionResponse } from '../../features.types';
4
3
  declare const optionsSchema: {
5
4
  id: string;
6
5
  description: string;
7
- fields: {
8
- shouldReturnImmediately: {
9
- type: "boolean";
10
- hint: string;
11
- };
12
- };
6
+ fields: {};
13
7
  };
14
8
  declare type OptionsSchema = typeof optionsSchema;
15
- declare type Options = SchemaValues<OptionsSchema>;
16
9
  export default class WatchAction extends AbstractAction<OptionsSchema> {
17
10
  commandAliases: string[];
18
11
  optionsSchema: OptionsSchema;
19
12
  invocationMessage: string;
20
- private resolve?;
21
- private bootControls?;
22
13
  private skillName;
23
- private bootMessage;
24
- private watchFeature;
25
- execute(options?: Options): Promise<FeatureActionResponse>;
14
+ execute(): Promise<FeatureActionResponse>;
15
+ private popLastLine;
26
16
  private getPreviewUrl;
27
- private boot;
28
17
  private resetUi;
29
- kill(): Promise<void>;
30
- getPid(): number | undefined;
31
18
  }
32
19
  export {};