@sprucelabs/spruce-cli 14.29.29 → 14.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/build/__tests__/behavioral/ListeningToCoreEvents.test.d.ts +6 -0
  3. package/build/__tests__/behavioral/ListeningToCoreEvents.test.js +128 -0
  4. package/build/__tests__/behavioral/ListeningToCoreEvents.test.js.map +1 -0
  5. package/build/__tests__/behavioral/SettingUpSchemasForModuleDistribution.test.js +3 -3
  6. package/build/__tests__/behavioral/SettingUpSchemasForModuleDistribution.test.js.map +1 -1
  7. package/build/__tests__/behavioral/UpgradingWithSandboxFeatureInstalled.test.d.ts +10 -0
  8. package/build/__tests__/behavioral/UpgradingWithSandboxFeatureInstalled.test.js +298 -0
  9. package/build/__tests__/behavioral/UpgradingWithSandboxFeatureInstalled.test.js.map +1 -0
  10. package/build/__tests__/behavioral/schemas/CreatingANewSchemaBuilder.test.js +1 -1
  11. package/build/__tests__/behavioral/schemas/CreatingANewSchemaBuilder.test.js.map +1 -1
  12. package/build/__tests__/implementation/PkgService.test.js +2 -2
  13. package/build/__tests__/implementation/PkgService.test.js.map +1 -1
  14. package/build/features/event/actions/ListenAction.d.ts +4 -0
  15. package/build/features/event/actions/ListenAction.js +228 -127
  16. package/build/features/event/actions/ListenAction.js.map +1 -1
  17. package/build/features/event/writers/EventWriter.d.ts +1 -3
  18. package/build/features/event/writers/EventWriter.js +20 -14
  19. package/build/features/event/writers/EventWriter.js.map +1 -1
  20. package/build/features/sandbox/SandboxFeature.js +1 -1
  21. package/build/features/sandbox/SandboxFeature.js.map +1 -1
  22. package/build/features/sandbox/actions/SetupAction.js +24 -12
  23. package/build/features/sandbox/actions/SetupAction.js.map +1 -1
  24. package/build/features/view/actions/CreateAction.js +1 -1
  25. package/build/features/view/actions/CreateAction.js.map +1 -1
  26. package/build/interfaces/SpyInterface.js +1 -1
  27. package/build/interfaces/SpyInterface.js.map +1 -1
  28. package/build/templateItemBuilders/EventTemplateItemBuilder.js +2 -1
  29. package/build/templateItemBuilders/EventTemplateItemBuilder.js.map +1 -1
  30. package/package.json +29 -29
  31. package/src/__tests__/behavioral/ListeningToCoreEvents.test.ts +26 -0
  32. package/src/__tests__/behavioral/SettingUpSchemasForModuleDistribution.test.ts +3 -3
  33. package/src/__tests__/behavioral/UpgradingWithSandboxFeatureInstalled.test.ts +74 -0
  34. package/src/__tests__/behavioral/schemas/CreatingANewSchemaBuilder.test.ts +1 -1
  35. package/src/__tests__/implementation/PkgService.test.ts +2 -2
  36. package/src/features/event/actions/ListenAction.ts +111 -58
  37. package/src/features/event/writers/EventWriter.ts +21 -35
  38. package/src/features/sandbox/SandboxFeature.ts +1 -1
  39. package/src/features/sandbox/actions/SetupAction.ts +6 -0
  40. package/src/features/view/actions/CreateAction.ts +1 -0
  41. package/src/interfaces/SpyInterface.ts +3 -1
  42. package/src/templateItemBuilders/EventTemplateItemBuilder.ts +3 -0
@@ -199,26 +199,24 @@ var EventWriter = /*#__PURE__*/function (_AbstractWriter) {
199
199
  key: "writeListener",
200
200
  value: function () {
201
201
  var _writeListener = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(destinationDir, options) {
202
- var eventName, eventNamespace, version, schemaTypesLookupDir, contractDestinationDir, resolvedDestination, relativeTypesFile, contractsFile, listenerContents, results;
202
+ var schemaTypesLookupDir, fullyQualifiedEventName, event, resolvedDestination, relativeTypesFile, listenerContents, results;
203
203
  return _regenerator["default"].wrap(function _callee4$(_context4) {
204
204
  while (1) {
205
205
  switch (_context4.prev = _context4.next) {
206
206
  case 0:
207
- eventName = options.eventName, eventNamespace = options.eventNamespace, version = options.version, schemaTypesLookupDir = options.schemaTypesLookupDir, contractDestinationDir = options.contractDestinationDir;
208
- resolvedDestination = _spruceEventUtils.eventDiskUtil.resolveListenerPath(destinationDir, {
209
- eventName: eventName,
210
- eventNamespace: eventNamespace,
211
- version: version
207
+ schemaTypesLookupDir = options.schemaTypesLookupDir, fullyQualifiedEventName = options.fullyQualifiedEventName;
208
+ event = _spruceEventUtils.eventNameUtil.split(fullyQualifiedEventName);
209
+ resolvedDestination = _spruceEventUtils.eventDiskUtil.resolveListenerPath(destinationDir, event);
210
+ relativeTypesFile = this.resolveSchemaTypesFile({
211
+ namespace: event.eventNamespace,
212
+ schemaTypesLookupDir: schemaTypesLookupDir,
213
+ resolvedDestination: resolvedDestination
212
214
  });
213
- relativeTypesFile = this.resolveSchemaTypesFile(schemaTypesLookupDir, resolvedDestination);
214
- contractsFile = _path["default"].join(contractDestinationDir, CONTRACT_FILE_NAME.replace('.ts', ''));
215
215
  listenerContents = this.templates.listener(_objectSpread(_objectSpread({}, options), {}, {
216
- nameConst: _spruceSkillUtils.namesUtil.toConst("".concat(eventNamespace, "_").concat(eventName)),
217
- schemaTypesFile: relativeTypesFile,
218
- contractsFile: contractsFile
216
+ schemaTypesFile: relativeTypesFile
219
217
  }));
220
218
  _context4.next = 7;
221
- return this.writeFileIfChangedMixinResults(resolvedDestination, listenerContents, "Listener for ".concat(eventNamespace, ".").concat(eventName, "."));
219
+ return this.writeFileIfChangedMixinResults(resolvedDestination, listenerContents, "Listener for ".concat(fullyQualifiedEventName, "."));
222
220
 
223
221
  case 7:
224
222
  results = _context4.sent;
@@ -256,7 +254,7 @@ var EventWriter = /*#__PURE__*/function (_AbstractWriter) {
256
254
  listeners: options.listeners
257
255
  });
258
256
  _context5.next = 4;
259
- return this.writeFileIfChangedMixinResults(destination, contents, 'An object holding all your data stores for easy import!');
257
+ return this.writeFileIfChangedMixinResults(destination, contents, 'All your listeners imported to one place for your skill to use when booting!');
260
258
 
261
259
  case 4:
262
260
  results = _context5.sent;
@@ -371,7 +369,15 @@ var EventWriter = /*#__PURE__*/function (_AbstractWriter) {
371
369
  }()
372
370
  }, {
373
371
  key: "resolveSchemaTypesFile",
374
- value: function resolveSchemaTypesFile(schemaTypesLookupDir, resolvedDestination) {
372
+ value: function resolveSchemaTypesFile(options) {
373
+ var schemaTypesLookupDir = options.schemaTypesLookupDir,
374
+ resolvedDestination = options.resolvedDestination,
375
+ namespace = options.namespace;
376
+
377
+ if (!namespace) {
378
+ return '@sprucelabs/mercury-types';
379
+ }
380
+
375
381
  var schemaTypesFile = _path["default"].join(schemaTypesLookupDir, _spruceSkillUtils.DEFAULT_SCHEMA_TYPES_FILENAME);
376
382
 
377
383
  var relativeTypesFile = _path["default"].relative(_path["default"].dirname(resolvedDestination), schemaTypesFile);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/event/writers/EventWriter.ts"],"names":["CONTRACT_FILE_NAME","EventWriter","destinationDir","options","eventContractTemplateItems","shouldImportCoreEvents","generated","item","push","writeContract","eventContractTemplateItem","writeCombinedEvents","templateItems","Promise","all","lint","schemaTemplateItems","destinationFile","diskUtil","resolvePath","namespaceCamel","generateEventContractFileName","eventsContractContents","templates","eventContract","writeFileIfChangedMixinResults","Object","keys","eventSignatures","results","cwd","doesHashSprucePathExist","path","resolveHashSprucePath","doesFileExist","contents","combinedEventsContract","eventName","eventNamespace","version","schemaTypesLookupDir","contractDestinationDir","resolvedDestination","eventDiskUtil","resolveListenerPath","relativeTypesFile","resolveSchemaTypesFile","contractsFile","pathUtil","join","replace","listenerContents","listener","nameConst","namesUtil","toConst","schemaTypesFile","destination","listeners","nameKebab","nameCamel","nameReadable","isGlobal","templateMethod","name","action","description","context","files","file","resolveEventPath","fileName","writeFile","DEFAULT_SCHEMA_TYPES_FILENAME","relative","dirname","extname","AbstractWriter"],"mappings":"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","sourcesContent":["import pathUtil from 'path'\nimport { SchemaTemplateItem } from '@sprucelabs/schema'\nimport { eventDiskUtil } from '@sprucelabs/spruce-event-utils'\nimport {\n\tdiskUtil,\n\tnamesUtil,\n\tDEFAULT_SCHEMA_TYPES_FILENAME,\n} from '@sprucelabs/spruce-skill-utils'\nimport {\n\tEventContractTemplateItem,\n\tEventListenerOptions,\n\tListenerTemplateItem,\n} from '@sprucelabs/spruce-templates'\nimport { GeneratedFile } from '../../../types/cli.types'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nconst CONTRACT_FILE_NAME = `events.contract.ts`\nexport default class EventWriter extends AbstractWriter {\n\tpublic async writeContracts(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\t\tshouldImportCoreEvents?: boolean\n\t\t\tskillEventContractTypesFile: string\n\t\t\teventBuilderFile: string\n\t\t}\n\t) {\n\t\tconst { eventContractTemplateItems, shouldImportCoreEvents = true } =\n\t\t\toptions\n\n\t\tconst generated: Promise<GeneratedFile>[] = []\n\n\t\tfor (const item of eventContractTemplateItems) {\n\t\t\tgenerated.push(\n\t\t\t\tthis.writeContract({\n\t\t\t\t\t...options,\n\t\t\t\t\tdestinationDir,\n\t\t\t\t\teventContractTemplateItem: item,\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\n\t\tgenerated.push(\n\t\t\tthis.writeCombinedEvents({\n\t\t\t\t...options,\n\t\t\t\tshouldImportCoreEvents,\n\t\t\t\tdestinationDir,\n\t\t\t\ttemplateItems: eventContractTemplateItems,\n\t\t\t})\n\t\t)\n\n\t\tconst all = await Promise.all(generated)\n\n\t\tawait this.lint(destinationDir)\n\n\t\treturn all\n\t}\n\n\tprivate async writeContract(options: {\n\t\tdestinationDir: string\n\t\teventContractTemplateItem: EventContractTemplateItem\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\teventBuilderFile: string\n\t}): Promise<GeneratedFile> {\n\t\tconst { destinationDir, eventContractTemplateItem, schemaTemplateItems } =\n\t\t\toptions\n\n\t\tconst destinationFile = diskUtil.resolvePath(\n\t\t\tdestinationDir,\n\t\t\teventContractTemplateItem.namespaceCamel,\n\t\t\tgenerateEventContractFileName(eventContractTemplateItem)\n\t\t)\n\n\t\tconst eventsContractContents = this.templates.eventContract({\n\t\t\t...options,\n\t\t\t...eventContractTemplateItem,\n\t\t\tschemaTemplateItems,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestinationFile,\n\t\t\teventsContractContents,\n\t\t\t`The event contract for ${\n\t\t\t\tObject.keys(eventContractTemplateItem.eventSignatures)[0]\n\t\t\t}`\n\t\t)\n\n\t\treturn results[0]\n\t}\n\n\tpublic hasCombinedContractBeenWritten(cwd: string) {\n\t\tif (diskUtil.doesHashSprucePathExist(cwd)) {\n\t\t\tconst path = diskUtil.resolveHashSprucePath(\n\t\t\t\tcwd,\n\t\t\t\t'events',\n\t\t\t\tCONTRACT_FILE_NAME\n\t\t\t)\n\n\t\t\treturn diskUtil.doesFileExist(path)\n\t\t}\n\n\t\treturn false\n\t}\n\n\tprivate async writeCombinedEvents(options: {\n\t\tdestinationDir: string\n\t\ttemplateItems: EventContractTemplateItem[]\n\t\tshouldImportCoreEvents?: boolean\n\t\tskillEventContractTypesFile: string\n\t}): Promise<GeneratedFile> {\n\t\tconst { destinationDir } = options\n\n\t\tconst destinationFile = diskUtil.resolvePath(\n\t\t\tdestinationDir,\n\t\t\tCONTRACT_FILE_NAME\n\t\t)\n\n\t\tconst contents = this.templates.combinedEventsContract(options)\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestinationFile,\n\t\t\tcontents,\n\t\t\t'All event contracts combined to a single export.'\n\t\t)\n\n\t\treturn results[0]\n\t}\n\n\tpublic async writeListener(\n\t\tdestinationDir: string,\n\t\toptions: Omit<\n\t\t\tEventListenerOptions,\n\t\t\t'nameConst' | 'schemaTypesFile' | 'contractsFile'\n\t\t> & {\n\t\t\tversion: string\n\t\t\tschemaTypesLookupDir: string\n\t\t\tcontractDestinationDir: string\n\t\t}\n\t) {\n\t\tconst {\n\t\t\teventName,\n\t\t\teventNamespace,\n\t\t\tversion,\n\t\t\tschemaTypesLookupDir,\n\t\t\tcontractDestinationDir,\n\t\t} = options\n\n\t\tconst resolvedDestination = eventDiskUtil.resolveListenerPath(\n\t\t\tdestinationDir,\n\t\t\t{\n\t\t\t\teventName,\n\t\t\t\teventNamespace,\n\t\t\t\tversion,\n\t\t\t}\n\t\t)\n\n\t\tconst relativeTypesFile = this.resolveSchemaTypesFile(\n\t\t\tschemaTypesLookupDir,\n\t\t\tresolvedDestination\n\t\t)\n\n\t\tconst contractsFile = pathUtil.join(\n\t\t\tcontractDestinationDir,\n\t\t\tCONTRACT_FILE_NAME.replace('.ts', '')\n\t\t)\n\n\t\tconst listenerContents = this.templates.listener({\n\t\t\t...options,\n\t\t\tnameConst: namesUtil.toConst(`${eventNamespace}_${eventName}`),\n\t\t\tschemaTypesFile: relativeTypesFile,\n\t\t\tcontractsFile,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tresolvedDestination,\n\t\t\tlistenerContents,\n\t\t\t`Listener for ${eventNamespace}.${eventName}.`\n\t\t)\n\n\t\tawait this.lint(resolvedDestination)\n\n\t\treturn results\n\t}\n\n\tpublic async writeListenerMap(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tlisteners: ListenerTemplateItem[]\n\t\t}\n\t) {\n\t\tconst destination = diskUtil.resolvePath(destinationDir, 'listeners.ts')\n\t\tconst contents = this.templates.listeners({ listeners: options.listeners })\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'An object holding all your data stores for easy import!'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tpublic async writeEvent(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tnameCamel: string\n\t\t\tnameKebab: string\n\t\t\tversion: string\n\t\t\tnameReadable: string\n\t\t\tisGlobal?: boolean\n\t\t}\n\t) {\n\t\tconst {\n\t\t\tversion,\n\t\t\tnameKebab,\n\t\t\tnameCamel,\n\t\t\tnameReadable,\n\t\t\tisGlobal = false,\n\t\t} = options\n\n\t\tconst templates: ({\n\t\t\tcontext?: any\n\t\t\ttemplateMethod:\n\t\t\t\t| 'eventEmitPayload'\n\t\t\t\t| 'eventEmitTarget'\n\t\t\t\t| 'eventResponsePayload'\n\t\t\t\t| 'permissionContractBuilder'\n\t\t\t\t| 'eventOptions'\n\t\t} & Omit<GeneratedFile, 'path'>)[] = [\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventEmitPayload',\n\t\t\t\tname: 'emitPayload.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'The payload that will be sent when you emit this event.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventEmitTarget',\n\t\t\t\tname: 'emitTarget.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'The target that will be sent when you emit this event.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventResponsePayload',\n\t\t\t\tname: 'responsePayload.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription:\n\t\t\t\t\t'The payload that every listener will need to respond with. Delete this file for events that are fire and forget.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'permissionContractBuilder',\n\t\t\t\tname: 'emitPermissions.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'Permissions someone else will need to emit your event.',\n\t\t\t\tcontext: {\n\t\t\t\t\tnameCamel: nameCamel + 'Emit',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'permissionContractBuilder',\n\t\t\t\tname: 'listenPermissions.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription:\n\t\t\t\t\t'Permissions someone else will need to listen to your event.',\n\t\t\t\tcontext: {\n\t\t\t\t\tnameCamel: nameCamel + 'Listen',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventOptions',\n\t\t\t\tname: 'event.options.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'Extra options that can be set for your event',\n\t\t\t\tcontext: {\n\t\t\t\t\tisGlobal,\n\t\t\t\t},\n\t\t\t},\n\t\t]\n\n\t\tconst files: GeneratedFile[] = []\n\n\t\tfor (const file of templates) {\n\t\t\tconst destination = eventDiskUtil.resolveEventPath(destinationDir, {\n\t\t\t\tfileName: file.name as any,\n\t\t\t\teventName: nameKebab,\n\t\t\t\tversion,\n\t\t\t})\n\n\t\t\tconst contents = this.templates[file.templateMethod]({\n\t\t\t\tnameCamel,\n\t\t\t\tnameReadable,\n\t\t\t\tversion,\n\t\t\t\t...file.context,\n\t\t\t})\n\n\t\t\tdiskUtil.writeFile(destination, contents)\n\n\t\t\tfiles.push({\n\t\t\t\t...file,\n\t\t\t\tpath: destination,\n\t\t\t})\n\t\t}\n\n\t\tawait this.lint(destinationDir)\n\n\t\treturn files\n\t}\n\n\tprivate resolveSchemaTypesFile(\n\t\tschemaTypesLookupDir: string,\n\t\tresolvedDestination: string\n\t) {\n\t\tconst schemaTypesFile = pathUtil.join(\n\t\t\tschemaTypesLookupDir,\n\t\t\tDEFAULT_SCHEMA_TYPES_FILENAME\n\t\t)\n\n\t\tlet relativeTypesFile = pathUtil.relative(\n\t\t\tpathUtil.dirname(resolvedDestination),\n\t\t\tschemaTypesFile\n\t\t)\n\n\t\trelativeTypesFile = relativeTypesFile.replace(\n\t\t\tpathUtil.extname(relativeTypesFile),\n\t\t\t''\n\t\t)\n\n\t\treturn relativeTypesFile\n\t}\n}\n\nexport function generateEventContractFileName(options: {\n\tnameCamel: string\n\tversion: string\n}): string {\n\treturn `${options.nameCamel}.${options.version}.contract.ts`\n}\n"],"file":"EventWriter.js"}
1
+ {"version":3,"sources":["../../../../src/features/event/writers/EventWriter.ts"],"names":["CONTRACT_FILE_NAME","EventWriter","destinationDir","options","eventContractTemplateItems","shouldImportCoreEvents","generated","item","push","writeContract","eventContractTemplateItem","writeCombinedEvents","templateItems","Promise","all","lint","schemaTemplateItems","destinationFile","diskUtil","resolvePath","namespaceCamel","generateEventContractFileName","eventsContractContents","templates","eventContract","writeFileIfChangedMixinResults","Object","keys","eventSignatures","results","cwd","doesHashSprucePathExist","path","resolveHashSprucePath","doesFileExist","contents","combinedEventsContract","schemaTypesLookupDir","fullyQualifiedEventName","event","eventNameUtil","split","resolvedDestination","eventDiskUtil","resolveListenerPath","relativeTypesFile","resolveSchemaTypesFile","namespace","eventNamespace","listenerContents","listener","schemaTypesFile","destination","listeners","version","nameKebab","nameCamel","nameReadable","isGlobal","templateMethod","name","action","description","context","files","file","resolveEventPath","fileName","eventName","writeFile","pathUtil","join","DEFAULT_SCHEMA_TYPES_FILENAME","relative","dirname","replace","extname","AbstractWriter"],"mappings":"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","sourcesContent":["import pathUtil from 'path'\nimport { SchemaTemplateItem } from '@sprucelabs/schema'\nimport { eventDiskUtil, eventNameUtil } from '@sprucelabs/spruce-event-utils'\nimport {\n\tdiskUtil,\n\tDEFAULT_SCHEMA_TYPES_FILENAME,\n} from '@sprucelabs/spruce-skill-utils'\nimport {\n\tEventContractTemplateItem,\n\tEventListenerOptions,\n\tListenerTemplateItem,\n} from '@sprucelabs/spruce-templates'\nimport { GeneratedFile } from '../../../types/cli.types'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nconst CONTRACT_FILE_NAME = `events.contract.ts`\nexport default class EventWriter extends AbstractWriter {\n\tpublic async writeContracts(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\t\tshouldImportCoreEvents?: boolean\n\t\t\tskillEventContractTypesFile: string\n\t\t\teventBuilderFile: string\n\t\t}\n\t) {\n\t\tconst { eventContractTemplateItems, shouldImportCoreEvents = true } =\n\t\t\toptions\n\n\t\tconst generated: Promise<GeneratedFile>[] = []\n\n\t\tfor (const item of eventContractTemplateItems) {\n\t\t\tgenerated.push(\n\t\t\t\tthis.writeContract({\n\t\t\t\t\t...options,\n\t\t\t\t\tdestinationDir,\n\t\t\t\t\teventContractTemplateItem: item,\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\n\t\tgenerated.push(\n\t\t\tthis.writeCombinedEvents({\n\t\t\t\t...options,\n\t\t\t\tshouldImportCoreEvents,\n\t\t\t\tdestinationDir,\n\t\t\t\ttemplateItems: eventContractTemplateItems,\n\t\t\t})\n\t\t)\n\n\t\tconst all = await Promise.all(generated)\n\n\t\tawait this.lint(destinationDir)\n\n\t\treturn all\n\t}\n\n\tprivate async writeContract(options: {\n\t\tdestinationDir: string\n\t\teventContractTemplateItem: EventContractTemplateItem\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\teventBuilderFile: string\n\t}): Promise<GeneratedFile> {\n\t\tconst { destinationDir, eventContractTemplateItem, schemaTemplateItems } =\n\t\t\toptions\n\n\t\tconst destinationFile = diskUtil.resolvePath(\n\t\t\tdestinationDir,\n\t\t\teventContractTemplateItem.namespaceCamel,\n\t\t\tgenerateEventContractFileName(eventContractTemplateItem)\n\t\t)\n\n\t\tconst eventsContractContents = this.templates.eventContract({\n\t\t\t...options,\n\t\t\t...eventContractTemplateItem,\n\t\t\tschemaTemplateItems,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestinationFile,\n\t\t\teventsContractContents,\n\t\t\t`The event contract for ${\n\t\t\t\tObject.keys(eventContractTemplateItem.eventSignatures)[0]\n\t\t\t}`\n\t\t)\n\n\t\treturn results[0]\n\t}\n\n\tpublic hasCombinedContractBeenWritten(cwd: string) {\n\t\tif (diskUtil.doesHashSprucePathExist(cwd)) {\n\t\t\tconst path = diskUtil.resolveHashSprucePath(\n\t\t\t\tcwd,\n\t\t\t\t'events',\n\t\t\t\tCONTRACT_FILE_NAME\n\t\t\t)\n\n\t\t\treturn diskUtil.doesFileExist(path)\n\t\t}\n\n\t\treturn false\n\t}\n\n\tprivate async writeCombinedEvents(options: {\n\t\tdestinationDir: string\n\t\ttemplateItems: EventContractTemplateItem[]\n\t\tshouldImportCoreEvents?: boolean\n\t\tskillEventContractTypesFile: string\n\t}): Promise<GeneratedFile> {\n\t\tconst { destinationDir } = options\n\n\t\tconst destinationFile = diskUtil.resolvePath(\n\t\t\tdestinationDir,\n\t\t\tCONTRACT_FILE_NAME\n\t\t)\n\n\t\tconst contents = this.templates.combinedEventsContract(options)\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestinationFile,\n\t\t\tcontents,\n\t\t\t'All event contracts combined to a single export.'\n\t\t)\n\n\t\treturn results[0]\n\t}\n\n\tpublic async writeListener(\n\t\tdestinationDir: string,\n\t\toptions: Omit<EventListenerOptions, 'schemaTypesFile'> & {\n\t\t\tschemaTypesLookupDir: string\n\t\t}\n\t) {\n\t\tconst { schemaTypesLookupDir, fullyQualifiedEventName } = options\n\n\t\tconst event = eventNameUtil.split(fullyQualifiedEventName)\n\t\tconst resolvedDestination = eventDiskUtil.resolveListenerPath(\n\t\t\tdestinationDir,\n\t\t\tevent as any\n\t\t)\n\n\t\tconst relativeTypesFile = this.resolveSchemaTypesFile({\n\t\t\tnamespace: event.eventNamespace,\n\t\t\tschemaTypesLookupDir,\n\t\t\tresolvedDestination,\n\t\t})\n\n\t\tconst listenerContents = this.templates.listener({\n\t\t\t...options,\n\t\t\tschemaTypesFile: relativeTypesFile,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tresolvedDestination,\n\t\t\tlistenerContents,\n\t\t\t`Listener for ${fullyQualifiedEventName}.`\n\t\t)\n\n\t\tawait this.lint(resolvedDestination)\n\n\t\treturn results\n\t}\n\n\tpublic async writeListenerMap(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tlisteners: ListenerTemplateItem[]\n\t\t}\n\t) {\n\t\tconst destination = diskUtil.resolvePath(destinationDir, 'listeners.ts')\n\t\tconst contents = this.templates.listeners({ listeners: options.listeners })\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'All your listeners imported to one place for your skill to use when booting!'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tpublic async writeEvent(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tnameCamel: string\n\t\t\tnameKebab: string\n\t\t\tversion: string\n\t\t\tnameReadable: string\n\t\t\tisGlobal?: boolean\n\t\t}\n\t) {\n\t\tconst {\n\t\t\tversion,\n\t\t\tnameKebab,\n\t\t\tnameCamel,\n\t\t\tnameReadable,\n\t\t\tisGlobal = false,\n\t\t} = options\n\n\t\tconst templates: ({\n\t\t\tcontext?: any\n\t\t\ttemplateMethod:\n\t\t\t\t| 'eventEmitPayload'\n\t\t\t\t| 'eventEmitTarget'\n\t\t\t\t| 'eventResponsePayload'\n\t\t\t\t| 'permissionContractBuilder'\n\t\t\t\t| 'eventOptions'\n\t\t} & Omit<GeneratedFile, 'path'>)[] = [\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventEmitPayload',\n\t\t\t\tname: 'emitPayload.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'The payload that will be sent when you emit this event.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventEmitTarget',\n\t\t\t\tname: 'emitTarget.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'The target that will be sent when you emit this event.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventResponsePayload',\n\t\t\t\tname: 'responsePayload.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription:\n\t\t\t\t\t'The payload that every listener will need to respond with. Delete this file for events that are fire and forget.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'permissionContractBuilder',\n\t\t\t\tname: 'emitPermissions.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'Permissions someone else will need to emit your event.',\n\t\t\t\tcontext: {\n\t\t\t\t\tnameCamel: nameCamel + 'Emit',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'permissionContractBuilder',\n\t\t\t\tname: 'listenPermissions.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription:\n\t\t\t\t\t'Permissions someone else will need to listen to your event.',\n\t\t\t\tcontext: {\n\t\t\t\t\tnameCamel: nameCamel + 'Listen',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventOptions',\n\t\t\t\tname: 'event.options.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'Extra options that can be set for your event',\n\t\t\t\tcontext: {\n\t\t\t\t\tisGlobal,\n\t\t\t\t},\n\t\t\t},\n\t\t]\n\n\t\tconst files: GeneratedFile[] = []\n\n\t\tfor (const file of templates) {\n\t\t\tconst destination = eventDiskUtil.resolveEventPath(destinationDir, {\n\t\t\t\tfileName: file.name as any,\n\t\t\t\teventName: nameKebab,\n\t\t\t\tversion,\n\t\t\t})\n\n\t\t\tconst contents = this.templates[file.templateMethod]({\n\t\t\t\tnameCamel,\n\t\t\t\tnameReadable,\n\t\t\t\tversion,\n\t\t\t\t...file.context,\n\t\t\t})\n\n\t\t\tdiskUtil.writeFile(destination, contents)\n\n\t\t\tfiles.push({\n\t\t\t\t...file,\n\t\t\t\tpath: destination,\n\t\t\t})\n\t\t}\n\n\t\tawait this.lint(destinationDir)\n\n\t\treturn files\n\t}\n\n\tprivate resolveSchemaTypesFile(options: {\n\t\tnamespace?: string\n\t\tschemaTypesLookupDir: string\n\t\tresolvedDestination: string\n\t}) {\n\t\tconst { schemaTypesLookupDir, resolvedDestination, namespace } = options\n\n\t\tif (!namespace) {\n\t\t\treturn '@sprucelabs/mercury-types'\n\t\t}\n\n\t\tconst schemaTypesFile = pathUtil.join(\n\t\t\tschemaTypesLookupDir,\n\t\t\tDEFAULT_SCHEMA_TYPES_FILENAME\n\t\t)\n\n\t\tlet relativeTypesFile = pathUtil.relative(\n\t\t\tpathUtil.dirname(resolvedDestination),\n\t\t\tschemaTypesFile\n\t\t)\n\n\t\trelativeTypesFile = relativeTypesFile.replace(\n\t\t\tpathUtil.extname(relativeTypesFile),\n\t\t\t''\n\t\t)\n\n\t\treturn relativeTypesFile\n\t}\n}\n\nexport function generateEventContractFileName(options: {\n\tnameCamel: string\n\tversion: string\n}): string {\n\treturn `${options.nameCamel}.${options.version}.contract.ts`\n}\n"],"file":"EventWriter.js"}
@@ -54,7 +54,7 @@ var SandboxFeature = /*#__PURE__*/function (_AbstractFeature) {
54
54
  }]);
55
55
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "packageDependencies", []);
56
56
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "actionsDir", _spruceSkillUtils.diskUtil.resolvePath(__dirname, 'actions'));
57
- void _this.emitter.on('feature.did-execute', /*#__PURE__*/function () {
57
+ void _this.emitter.on('feature.will-execute', /*#__PURE__*/function () {
58
58
  var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(payload) {
59
59
  var isSkillInstalled;
60
60
  return _regenerator["default"].wrap(function _callee$(_context) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/features/sandbox/SandboxFeature.ts"],"names":["SandboxFeature","options","code","isRequired","diskUtil","resolvePath","__dirname","emitter","on","payload","featureInstaller","isInstalled","isSkillInstalled","featureCode","actionCode","uiUtil","renderMasthead","ui","headline","Action","execute","AbstractFeature"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;IASqBA,c;;;;;AAcpB,0BAAmBC,OAAnB,EAA2C;AAAA;;AAAA;AAC1C,8BAAMA,OAAN;AAD0C,6FAbhB,SAagB;AAAA,qGAZrB,SAYqB;AAAA,oGAV1C,qEAU0C;AAAA,qGATA,CAC1C;AACCC,MAAAA,IAAI,EAAE,OADP;AAECC,MAAAA,UAAU,EAAE;AAFb,KAD0C,CASA;AAAA,4GAHd,EAGc;AAAA,mGAFvBC,2BAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,CAEuB;AAG1C,SAAK,MAAKC,OAAL,CAAaC,EAAb,CAAgB,qBAAhB;AAAA,+FAAuC,iBAAOC,OAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACZ,MAAKC,gBAAL,CAAsBC,WAAtB,CAC9B,SAD8B,CADY;;AAAA;AACrCC,gBAAAA,gBADqC;;AAAA,sBAK1CA,gBAAgB,IAChBH,OAAO,CAACI,WAAR,KAAwB,MADxB,IAEAJ,OAAO,CAACK,UAAR,KAAuB,SAPmB;AAAA;AAAA;AAAA;;AAS1CC,+BAAOC,cAAP,CAAsB;AACrBC,kBAAAA,EAAE,EAAE,MAAKA,EADY;AAErBC,kBAAAA,QAAQ,EAAE;AAFW,iBAAtB;;AAT0C,iDAcnC,MAAKC,MAAL,CAAY,SAAZ,EAAuB,OAAvB,EAAgCC,OAAhC,CAAwC,EAAxC,CAdmC;;AAAA;AAAA,iDAiBpC,EAjBoC;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAvC;;AAAA;AAAA;AAAA;AAAA,QAAL;AAH0C;AAsB1C;;;EApC0CC,4B","sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport uiUtil from '../../utilities/ui.utility'\nimport AbstractFeature, { FeatureDependency } from '../AbstractFeature'\nimport { ActionOptions, FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tsandbox: SandboxFeature\n\t}\n}\n\nexport default class SandboxFeature extends AbstractFeature {\n\tpublic code: FeatureCode = 'sandbox'\n\tpublic nameReadable = 'Sandbox'\n\tpublic description =\n\t\t'For getting your skill up-and-running on sandbox.mercury.spruce.ai.'\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'event',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\tpublic packageDependencies = []\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic constructor(options: ActionOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on('feature.did-execute', async (payload) => {\n\t\t\tconst isSkillInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\t'sandbox'\n\t\t\t)\n\t\t\tif (\n\t\t\t\tisSkillInstalled &&\n\t\t\t\tpayload.featureCode === 'node' &&\n\t\t\t\tpayload.actionCode === 'upgrade'\n\t\t\t) {\n\t\t\t\tuiUtil.renderMasthead({\n\t\t\t\t\tui: this.ui,\n\t\t\t\t\theadline: 'Updating sandbox support...',\n\t\t\t\t})\n\n\t\t\t\treturn this.Action('sandbox', 'setup').execute({})\n\t\t\t}\n\n\t\t\treturn {}\n\t\t})\n\t}\n}\n"],"file":"SandboxFeature.js"}
1
+ {"version":3,"sources":["../../../src/features/sandbox/SandboxFeature.ts"],"names":["SandboxFeature","options","code","isRequired","diskUtil","resolvePath","__dirname","emitter","on","payload","featureInstaller","isInstalled","isSkillInstalled","featureCode","actionCode","uiUtil","renderMasthead","ui","headline","Action","execute","AbstractFeature"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;IASqBA,c;;;;;AAcpB,0BAAmBC,OAAnB,EAA2C;AAAA;;AAAA;AAC1C,8BAAMA,OAAN;AAD0C,6FAbhB,SAagB;AAAA,qGAZrB,SAYqB;AAAA,oGAV1C,qEAU0C;AAAA,qGATA,CAC1C;AACCC,MAAAA,IAAI,EAAE,OADP;AAECC,MAAAA,UAAU,EAAE;AAFb,KAD0C,CASA;AAAA,4GAHd,EAGc;AAAA,mGAFvBC,2BAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,CAEuB;AAG1C,SAAK,MAAKC,OAAL,CAAaC,EAAb,CAAgB,sBAAhB;AAAA,+FAAwC,iBAAOC,OAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACb,MAAKC,gBAAL,CAAsBC,WAAtB,CAC9B,SAD8B,CADa;;AAAA;AACtCC,gBAAAA,gBADsC;;AAAA,sBAK3CA,gBAAgB,IAChBH,OAAO,CAACI,WAAR,KAAwB,MADxB,IAEAJ,OAAO,CAACK,UAAR,KAAuB,SAPoB;AAAA;AAAA;AAAA;;AAS3CC,+BAAOC,cAAP,CAAsB;AACrBC,kBAAAA,EAAE,EAAE,MAAKA,EADY;AAErBC,kBAAAA,QAAQ,EAAE;AAFW,iBAAtB;;AAT2C,iDAcpC,MAAKC,MAAL,CAAY,SAAZ,EAAuB,OAAvB,EAAgCC,OAAhC,CAAwC,EAAxC,CAdoC;;AAAA;AAAA,iDAiBrC,EAjBqC;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAxC;;AAAA;AAAA;AAAA;AAAA,QAAL;AAH0C;AAsB1C;;;EApC0CC,4B","sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport uiUtil from '../../utilities/ui.utility'\nimport AbstractFeature, { FeatureDependency } from '../AbstractFeature'\nimport { ActionOptions, FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tsandbox: SandboxFeature\n\t}\n}\n\nexport default class SandboxFeature extends AbstractFeature {\n\tpublic code: FeatureCode = 'sandbox'\n\tpublic nameReadable = 'Sandbox'\n\tpublic description =\n\t\t'For getting your skill up-and-running on sandbox.mercury.spruce.ai.'\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'event',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\tpublic packageDependencies = []\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic constructor(options: ActionOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on('feature.will-execute', async (payload) => {\n\t\t\tconst isSkillInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\t'sandbox'\n\t\t\t)\n\t\t\tif (\n\t\t\t\tisSkillInstalled &&\n\t\t\t\tpayload.featureCode === 'node' &&\n\t\t\t\tpayload.actionCode === 'upgrade'\n\t\t\t) {\n\t\t\t\tuiUtil.renderMasthead({\n\t\t\t\t\tui: this.ui,\n\t\t\t\t\theadline: 'Updating sandbox support...',\n\t\t\t\t})\n\n\t\t\t\treturn this.Action('sandbox', 'setup').execute({})\n\t\t\t}\n\n\t\t\treturn {}\n\t\t})\n\t}\n}\n"],"file":"SandboxFeature.js"}
@@ -27,6 +27,8 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
27
27
 
28
28
  var _schema = require("@sprucelabs/schema");
29
29
 
30
+ var _spruceSkillUtils = require("@sprucelabs/spruce-skill-utils");
31
+
30
32
  var _setupVscodeOptions = _interopRequireDefault(require("../../../.spruce/schemas/spruceCli/v2020_07_22/setupVscodeOptions.schema"));
31
33
 
32
34
  var _AbstractAction2 = _interopRequireDefault(require("../../AbstractAction"));
@@ -65,51 +67,61 @@ var SetupAction = /*#__PURE__*/function (_AbstractAction) {
65
67
  key: "execute",
66
68
  value: function () {
67
69
  var _execute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
68
- var _results$files;
70
+ var _existing$find, _results$files;
69
71
 
70
- var createListenerAction, results, match;
72
+ var listeners, existing, version, createListenerAction, results, match;
71
73
  return _regenerator["default"].wrap(function _callee$(_context) {
72
74
  while (1) {
73
75
  switch (_context.prev = _context.next) {
74
76
  case 0:
75
- createListenerAction = this.Action('event', 'listen');
77
+ listeners = this.Store('listener');
76
78
  _context.next = 3;
79
+ return listeners.loadListeners();
80
+
81
+ case 3:
82
+ existing = _context.sent;
83
+ version = (_existing$find = existing.find(function (e) {
84
+ return e.eventNamespace === 'skill';
85
+ })) === null || _existing$find === void 0 ? void 0 : _existing$find.version;
86
+ createListenerAction = this.Action('event', 'listen');
87
+ _context.next = 8;
77
88
  return createListenerAction.execute({
78
89
  namespace: 'skill',
79
- eventName: 'will-boot'
90
+ eventName: 'will-boot',
91
+ version: version !== null && version !== void 0 ? version : _spruceSkillUtils.versionUtil.generateVersion().dirValue
80
92
  });
81
93
 
82
- case 3:
94
+ case 8:
83
95
  results = _context.sent;
84
96
 
85
97
  if (!results.errors) {
86
- _context.next = 6;
98
+ _context.next = 11;
87
99
  break;
88
100
  }
89
101
 
90
102
  return _context.abrupt("return", results);
91
103
 
92
- case 6:
104
+ case 11:
93
105
  match = ((_results$files = results.files) !== null && _results$files !== void 0 ? _results$files : []).find(function (file) {
94
106
  return file.name.search('will-boot') === 0;
95
107
  });
96
108
 
97
109
  if (match) {
98
- _context.next = 9;
110
+ _context.next = 14;
99
111
  break;
100
112
  }
101
113
 
102
114
  throw new Error('file was not generated');
103
115
 
104
- case 9:
116
+ case 14:
105
117
  match.description = 'Used for recovering from a sandbox reset.';
106
- _context.next = 12;
118
+ _context.next = 17;
107
119
  return this.Writer('sandbox').writeDidBootListener(match.path);
108
120
 
109
- case 12:
121
+ case 17:
110
122
  return _context.abrupt("return", results);
111
123
 
112
- case 13:
124
+ case 18:
113
125
  case "end":
114
126
  return _context.stop();
115
127
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/sandbox/actions/SetupAction.ts"],"names":["optionsSchema","id","name","fields","SetupAction","setupVscodeSchema","createListenerAction","Action","execute","namespace","eventName","results","errors","match","files","find","file","search","Error","description","Writer","writeDidBootListener","path","AbstractAction"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;AAGA,IAAMA,aAAa,GAAG,yBAAY;AACjCC,EAAAA,EAAE,EAAE,qBAD6B;AAEjCC,EAAAA,IAAI,EAAE,uBAF2B;AAGjCC,EAAAA,MAAM,EAAE;AAHyB,CAAZ,CAAtB;;IAQqBC,W;;;;;;;;;;;;;;;sGACGC,8B;0GACI,kC;;;;;;;mGAE3B;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AACOC,gBAAAA,oBADP,GAC8B,KAAKC,MAAL,CAAY,OAAZ,EAAqB,QAArB,CAD9B;AAAA;AAAA,uBAEuBD,oBAAoB,CAACE,OAArB,CAA6B;AAClDC,kBAAAA,SAAS,EAAE,OADuC;AAElDC,kBAAAA,SAAS,EAAE;AAFuC,iBAA7B,CAFvB;;AAAA;AAEOC,gBAAAA,OAFP;;AAAA,qBAOKA,OAAO,CAACC,MAPb;AAAA;AAAA;AAAA;;AAAA,iDAQSD,OART;;AAAA;AAWOE,gBAAAA,KAXP,GAWe,mBAACF,OAAO,CAACG,KAAT,2DAAkB,EAAlB,EAAsBC,IAAtB,CACb,UAACC,IAAD;AAAA,yBAAUA,IAAI,CAACd,IAAL,CAAUe,MAAV,CAAiB,WAAjB,MAAkC,CAA5C;AAAA,iBADa,CAXf;;AAAA,oBAeMJ,KAfN;AAAA;AAAA;AAAA;;AAAA,sBAgBQ,IAAIK,KAAJ,CAAU,wBAAV,CAhBR;;AAAA;AAmBCL,gBAAAA,KAAK,CAACM,WAAN,GAAoB,2CAApB;AAnBD;AAAA,uBAqBO,KAAKC,MAAL,CAAY,SAAZ,EAAuBC,oBAAvB,CAA4CR,KAAK,CAACS,IAAlD,CArBP;;AAAA;AAAA,iDAuBQX,OAvBR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAJwCY,2B","sourcesContent":["import { buildSchema } from '@sprucelabs/schema'\nimport setupVscodeSchema from '#spruce/schemas/spruceCli/v2020_07_22/setupVscodeOptions.schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'setupSandboxOptions',\n\tname: 'Setup sandbox options',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class SetupAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = setupVscodeSchema\n\tpublic invocationMessage = 'Setting up sandbox support... 🏝'\n\n\tpublic async execute(): Promise<FeatureActionResponse> {\n\t\tconst createListenerAction = this.Action('event', 'listen')\n\t\tconst results = await createListenerAction.execute({\n\t\t\tnamespace: 'skill',\n\t\t\teventName: 'will-boot',\n\t\t})\n\n\t\tif (results.errors) {\n\t\t\treturn results\n\t\t}\n\n\t\tconst match = (results.files ?? []).find(\n\t\t\t(file) => file.name.search('will-boot') === 0\n\t\t)\n\n\t\tif (!match) {\n\t\t\tthrow new Error('file was not generated')\n\t\t}\n\n\t\tmatch.description = 'Used for recovering from a sandbox reset.'\n\n\t\tawait this.Writer('sandbox').writeDidBootListener(match.path)\n\n\t\treturn results\n\t}\n}\n"],"file":"SetupAction.js"}
1
+ {"version":3,"sources":["../../../../src/features/sandbox/actions/SetupAction.ts"],"names":["optionsSchema","id","name","fields","SetupAction","setupVscodeSchema","listeners","Store","loadListeners","existing","version","find","e","eventNamespace","createListenerAction","Action","execute","namespace","eventName","versionUtil","generateVersion","dirValue","results","errors","match","files","file","search","Error","description","Writer","writeDidBootListener","path","AbstractAction"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;AAGA,IAAMA,aAAa,GAAG,yBAAY;AACjCC,EAAAA,EAAE,EAAE,qBAD6B;AAEjCC,EAAAA,IAAI,EAAE,uBAF2B;AAGjCC,EAAAA,MAAM,EAAE;AAHyB,CAAZ,CAAtB;;IAQqBC,W;;;;;;;;;;;;;;;sGACGC,8B;0GACI,kC;;;;;;;mGAE3B;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AACOC,gBAAAA,SADP,GACmB,KAAKC,KAAL,CAAW,UAAX,CADnB;AAAA;AAAA,uBAEwBD,SAAS,CAACE,aAAV,EAFxB;;AAAA;AAEOC,gBAAAA,QAFP;AAGOC,gBAAAA,OAHP,qBAGiBD,QAAQ,CAACE,IAAT,CAAc,UAACC,CAAD;AAAA,yBAAOA,CAAC,CAACC,cAAF,KAAqB,OAA5B;AAAA,iBAAd,CAHjB,mDAGiB,eAAoDH,OAHrE;AAKOI,gBAAAA,oBALP,GAK8B,KAAKC,MAAL,CAAY,OAAZ,EAAqB,QAArB,CAL9B;AAAA;AAAA,uBAMuBD,oBAAoB,CAACE,OAArB,CAA6B;AAClDC,kBAAAA,SAAS,EAAE,OADuC;AAElDC,kBAAAA,SAAS,EAAE,WAFuC;AAGlDR,kBAAAA,OAAO,EAAEA,OAAF,aAAEA,OAAF,cAAEA,OAAF,GAAaS,8BAAYC,eAAZ,GAA8BC;AAHA,iBAA7B,CANvB;;AAAA;AAMOC,gBAAAA,OANP;;AAAA,qBAYKA,OAAO,CAACC,MAZb;AAAA;AAAA;AAAA;;AAAA,iDAaSD,OAbT;;AAAA;AAgBOE,gBAAAA,KAhBP,GAgBe,mBAACF,OAAO,CAACG,KAAT,2DAAkB,EAAlB,EAAsBd,IAAtB,CACb,UAACe,IAAD;AAAA,yBAAUA,IAAI,CAACxB,IAAL,CAAUyB,MAAV,CAAiB,WAAjB,MAAkC,CAA5C;AAAA,iBADa,CAhBf;;AAAA,oBAoBMH,KApBN;AAAA;AAAA;AAAA;;AAAA,sBAqBQ,IAAII,KAAJ,CAAU,wBAAV,CArBR;;AAAA;AAwBCJ,gBAAAA,KAAK,CAACK,WAAN,GAAoB,2CAApB;AAxBD;AAAA,uBA0BO,KAAKC,MAAL,CAAY,SAAZ,EAAuBC,oBAAvB,CAA4CP,KAAK,CAACQ,IAAlD,CA1BP;;AAAA;AAAA,iDA4BQV,OA5BR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAJwCW,2B","sourcesContent":["import { buildSchema } from '@sprucelabs/schema'\nimport { versionUtil } from '@sprucelabs/spruce-skill-utils'\nimport setupVscodeSchema from '#spruce/schemas/spruceCli/v2020_07_22/setupVscodeOptions.schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'setupSandboxOptions',\n\tname: 'Setup sandbox options',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class SetupAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = setupVscodeSchema\n\tpublic invocationMessage = 'Setting up sandbox support... 🏝'\n\n\tpublic async execute(): Promise<FeatureActionResponse> {\n\t\tconst listeners = this.Store('listener')\n\t\tconst existing = await listeners.loadListeners()\n\t\tconst version = existing.find((e) => e.eventNamespace === 'skill')?.version\n\n\t\tconst createListenerAction = this.Action('event', 'listen')\n\t\tconst results = await createListenerAction.execute({\n\t\t\tnamespace: 'skill',\n\t\t\teventName: 'will-boot',\n\t\t\tversion: version ?? versionUtil.generateVersion().dirValue,\n\t\t})\n\n\t\tif (results.errors) {\n\t\t\treturn results\n\t\t}\n\n\t\tconst match = (results.files ?? []).find(\n\t\t\t(file) => file.name.search('will-boot') === 0\n\t\t)\n\n\t\tif (!match) {\n\t\t\tthrow new Error('file was not generated')\n\t\t}\n\n\t\tmatch.description = 'Used for recovering from a sandbox reset.'\n\n\t\tawait this.Writer('sandbox').writeDidBootListener(match.path)\n\n\t\treturn results\n\t}\n}\n"],"file":"SetupAction.js"}
@@ -54,7 +54,7 @@ var viewTypeChoices = [{
54
54
  value: 'view',
55
55
  label: 'View Controller'
56
56
  }];
57
- var viewModels = ['BigForm', 'Button', 'Card', 'CardBody', 'CardHeader', 'Dialog', 'Form', 'List'].sort();
57
+ var viewModels = ['BigForm', 'Button', 'Calendar', 'Card', 'CardBody', 'CardHeader', 'Dialog', 'Form', 'List'].sort();
58
58
  var optionsSchema = (0, _schema.buildSchema)({
59
59
  id: 'createViewOptions',
60
60
  description: 'Create a new Heartwood view to render on web enabled and mobile devices.',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/view/actions/CreateAction.ts"],"names":["viewTypeChoices","value","label","viewModels","sort","optionsSchema","id","description","fields","viewType","type","isRequired","options","choices","isRoot","nameReadable","namedTemplateItemBuilder","namePascal","viewModel","hint","map","model","followUpSchema","CreateAction","validateAndNormalizeOptions","writer","Writer","doesRootControllerExist","cwd","ui","confirm","form","FormComponent","schema","onWillAskQuestion","formUtil","onWillAskQuestionHandler","present","answers","prompt","namesUtil","toPascal","nameKebab","toKebab","files","Action","execute","syncResults","merged","actionUtil","mergeActionResults","AbstractAction"],"mappings":"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","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport FormComponent from '../../../components/FormComponent'\nimport namedTemplateItemBuilder from '../../../schemas/v2020_07_22/namedTemplateItem.builder'\nimport actionUtil from '../../../utilities/action.utility'\nimport formUtil from '../../../utilities/form.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst viewTypeChoices = [\n\t{\n\t\tvalue: 'skillView',\n\t\tlabel: 'Skill View Controller',\n\t},\n\t{\n\t\tvalue: 'view',\n\t\tlabel: 'View Controller',\n\t},\n]\n\nconst viewModels = [\n\t'BigForm',\n\t'Button',\n\t'Card',\n\t'CardBody',\n\t'CardHeader',\n\t'Dialog',\n\t'Form',\n\t'List',\n].sort()\n\nconst optionsSchema = buildSchema({\n\tid: 'createViewOptions',\n\tdescription:\n\t\t'Create a new Heartwood view to render on web enabled and mobile devices.',\n\tfields: {\n\t\tviewType: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'Which are you creating?',\n\t\t\tisRequired: true,\n\t\t\toptions: {\n\t\t\t\tchoices: viewTypeChoices,\n\t\t\t},\n\t\t},\n\t\tisRoot: {\n\t\t\ttype: 'boolean',\n\t\t\tlabel: 'Make this the Root View Controller?',\n\t\t},\n\t\tnameReadable: {\n\t\t\t...namedTemplateItemBuilder.fields.nameReadable,\n\t\t\tlabel: 'Controller name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...namedTemplateItemBuilder.fields.namePascal,\n\t\t\tisRequired: false,\n\t\t},\n\t\tviewModel: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'View model',\n\t\t\thint: 'Which type of view will your controller render?',\n\t\t\toptions: {\n\t\t\t\tchoices: viewModels.map((model) => ({ value: model, label: model })),\n\t\t\t},\n\t\t},\n\t},\n})\n\nconst followUpSchema = buildSchema({\n\tid: 'creatViewFollowup',\n\tfields: {\n\t\tnameReadable: {\n\t\t\t...optionsSchema.fields.nameReadable,\n\t\t\tisRequired: true,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...optionsSchema.fields.namePascal,\n\t\t\tisRequired: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['create.view']\n\tpublic invocationMessage = 'Creating your new view controller... 🌲'\n\n\tpublic async execute(\n\t\toptions: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tlet { viewType, isRoot, nameReadable, namePascal, viewModel } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tconst writer = this.Writer('view')\n\n\t\tif (\n\t\t\tviewType === 'skillView' &&\n\t\t\t!isRoot &&\n\t\t\t!writer.doesRootControllerExist(this.cwd)\n\t\t) {\n\t\t\tisRoot = await this.ui.confirm(\n\t\t\t\t'Do you want to create a root view controller?'\n\t\t\t)\n\t\t}\n\n\t\tif (!isRoot && !nameReadable) {\n\t\t\tconst form = new FormComponent({\n\t\t\t\tui: this.ui,\n\t\t\t\tschema: followUpSchema,\n\t\t\t\tonWillAskQuestion: formUtil.onWillAskQuestionHandler,\n\t\t\t})\n\t\t\tconst answers = await form.present()\n\n\t\t\tnamePascal = answers.namePascal\n\t\t\tnameReadable = answers.nameReadable\n\t\t}\n\n\t\tif (isRoot) {\n\t\t\tnameReadable = 'Root'\n\t\t}\n\n\t\tif (!viewModel && viewType === 'view') {\n\t\t\tviewModel = await this.ui.prompt({\n\t\t\t\t...optionsSchema.fields.viewModel,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\t\t}\n\n\t\tnamePascal = namePascal ?? namesUtil.toPascal(nameReadable as string)\n\n\t\tconst files = await writer[\n\t\t\tviewType === 'skillView'\n\t\t\t\t? 'writeSkillViewController'\n\t\t\t\t: 'writeViewController'\n\t\t](this.cwd, {\n\t\t\tviewType,\n\t\t\tnamePascal,\n\t\t\tviewModel: viewModel as string,\n\t\t\tnameKebab: namesUtil.toKebab(namePascal),\n\t\t})\n\n\t\tconst syncResults = await this.Action('view', 'sync').execute({})\n\n\t\tconst merged = actionUtil.mergeActionResults(\n\t\t\t{\n\t\t\t\tfiles,\n\t\t\t},\n\t\t\tsyncResults\n\t\t)\n\n\t\treturn merged\n\t}\n}\n"],"file":"CreateAction.js"}
1
+ {"version":3,"sources":["../../../../src/features/view/actions/CreateAction.ts"],"names":["viewTypeChoices","value","label","viewModels","sort","optionsSchema","id","description","fields","viewType","type","isRequired","options","choices","isRoot","nameReadable","namedTemplateItemBuilder","namePascal","viewModel","hint","map","model","followUpSchema","CreateAction","validateAndNormalizeOptions","writer","Writer","doesRootControllerExist","cwd","ui","confirm","form","FormComponent","schema","onWillAskQuestion","formUtil","onWillAskQuestionHandler","present","answers","prompt","namesUtil","toPascal","nameKebab","toKebab","files","Action","execute","syncResults","merged","actionUtil","mergeActionResults","AbstractAction"],"mappings":"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","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport FormComponent from '../../../components/FormComponent'\nimport namedTemplateItemBuilder from '../../../schemas/v2020_07_22/namedTemplateItem.builder'\nimport actionUtil from '../../../utilities/action.utility'\nimport formUtil from '../../../utilities/form.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst viewTypeChoices = [\n\t{\n\t\tvalue: 'skillView',\n\t\tlabel: 'Skill View Controller',\n\t},\n\t{\n\t\tvalue: 'view',\n\t\tlabel: 'View Controller',\n\t},\n]\n\nconst viewModels = [\n\t'BigForm',\n\t'Button',\n\t'Calendar',\n\t'Card',\n\t'CardBody',\n\t'CardHeader',\n\t'Dialog',\n\t'Form',\n\t'List',\n].sort()\n\nconst optionsSchema = buildSchema({\n\tid: 'createViewOptions',\n\tdescription:\n\t\t'Create a new Heartwood view to render on web enabled and mobile devices.',\n\tfields: {\n\t\tviewType: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'Which are you creating?',\n\t\t\tisRequired: true,\n\t\t\toptions: {\n\t\t\t\tchoices: viewTypeChoices,\n\t\t\t},\n\t\t},\n\t\tisRoot: {\n\t\t\ttype: 'boolean',\n\t\t\tlabel: 'Make this the Root View Controller?',\n\t\t},\n\t\tnameReadable: {\n\t\t\t...namedTemplateItemBuilder.fields.nameReadable,\n\t\t\tlabel: 'Controller name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...namedTemplateItemBuilder.fields.namePascal,\n\t\t\tisRequired: false,\n\t\t},\n\t\tviewModel: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'View model',\n\t\t\thint: 'Which type of view will your controller render?',\n\t\t\toptions: {\n\t\t\t\tchoices: viewModels.map((model) => ({ value: model, label: model })),\n\t\t\t},\n\t\t},\n\t},\n})\n\nconst followUpSchema = buildSchema({\n\tid: 'creatViewFollowup',\n\tfields: {\n\t\tnameReadable: {\n\t\t\t...optionsSchema.fields.nameReadable,\n\t\t\tisRequired: true,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...optionsSchema.fields.namePascal,\n\t\t\tisRequired: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['create.view']\n\tpublic invocationMessage = 'Creating your new view controller... 🌲'\n\n\tpublic async execute(\n\t\toptions: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tlet { viewType, isRoot, nameReadable, namePascal, viewModel } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tconst writer = this.Writer('view')\n\n\t\tif (\n\t\t\tviewType === 'skillView' &&\n\t\t\t!isRoot &&\n\t\t\t!writer.doesRootControllerExist(this.cwd)\n\t\t) {\n\t\t\tisRoot = await this.ui.confirm(\n\t\t\t\t'Do you want to create a root view controller?'\n\t\t\t)\n\t\t}\n\n\t\tif (!isRoot && !nameReadable) {\n\t\t\tconst form = new FormComponent({\n\t\t\t\tui: this.ui,\n\t\t\t\tschema: followUpSchema,\n\t\t\t\tonWillAskQuestion: formUtil.onWillAskQuestionHandler,\n\t\t\t})\n\t\t\tconst answers = await form.present()\n\n\t\t\tnamePascal = answers.namePascal\n\t\t\tnameReadable = answers.nameReadable\n\t\t}\n\n\t\tif (isRoot) {\n\t\t\tnameReadable = 'Root'\n\t\t}\n\n\t\tif (!viewModel && viewType === 'view') {\n\t\t\tviewModel = await this.ui.prompt({\n\t\t\t\t...optionsSchema.fields.viewModel,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\t\t}\n\n\t\tnamePascal = namePascal ?? namesUtil.toPascal(nameReadable as string)\n\n\t\tconst files = await writer[\n\t\t\tviewType === 'skillView'\n\t\t\t\t? 'writeSkillViewController'\n\t\t\t\t: 'writeViewController'\n\t\t](this.cwd, {\n\t\t\tviewType,\n\t\t\tnamePascal,\n\t\t\tviewModel: viewModel as string,\n\t\t\tnameKebab: namesUtil.toKebab(namePascal),\n\t\t})\n\n\t\tconst syncResults = await this.Action('view', 'sync').execute({})\n\n\t\tconst merged = actionUtil.mergeActionResults(\n\t\t\t{\n\t\t\t\tfiles,\n\t\t\t},\n\t\t\tsyncResults\n\t\t)\n\n\t\treturn merged\n\t}\n}\n"],"file":"CreateAction.js"}
@@ -359,7 +359,7 @@ var SpyInterface = /*#__PURE__*/function () {
359
359
  _this2.reset();
360
360
 
361
361
  try {
362
- _test.assert.fail("Timed out waiting for input: ".concat(definition.label));
362
+ _test.assert.fail("Timed out waiting for input with label: '".concat(definition.label, "'\n\nConsider passing what you need to Action().execute({ something })"));
363
363
  } catch (err) {
364
364
  reject(err);
365
365
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/interfaces/SpyInterface.ts"],"names":["SpyInterface","x","y","startTime","Date","getTime","term","shouldRenderTestLogs","TerminalInterface","process","cwd","strs","optionallyRenderLine","join","undefined","env","SHOULD_RENDER_TEST_LOGS","message","effects","trackInvocation","renderWarning","renderHint","command","options","invocations","push","promptResolver","confirmResolver","waitForEnterResolver","clearTimeout","promptTimeout","length","input","resolver","promptDefaultValue","toLowerCase","Error","Promise","resolve","setTimeout","renderSection","obj","renderObject","err","renderError","code","renderCodeSample","results","renderActionSummary","renderHero","dividerEffects","renderHeadline","renderDivider","duration","friendly","durationUtil","msToFriendly","testLog","info","global","activeTest","test","path","messages","renderLines","definition","msg","namesUtil","toPascal","type","label","choices","forEach","choice","value","reject","reset","assert","fail","defaultValue","ttl","checkInterval","loops","lastWriteCount","isWaitingForInput","hasWritten","testUtil","log","question","title","cursorPosition","pos"],"mappings":"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","sourcesContent":["import { FieldDefinitionValueType } from '@sprucelabs/schema'\nimport { namesUtil, testLog } from '@sprucelabs/spruce-skill-utils'\nimport { assert } from '@sprucelabs/test'\nimport { FieldDefinitions } from '#spruce/schemas/fields/fields.types'\nimport testUtil from '../tests/utilities/test.utility'\nimport { ExecutionResults } from '../types/cli.types'\nimport { GraphicsInterface } from '../types/cli.types'\nimport {\n\tGraphicsTextEffect,\n\tProgressBarOptions,\n\tProgressBarUpdateOptions,\n\tImageDimensions,\n} from '../types/graphicsInterface.types'\nimport durationUtil from '../utilities/duration.utility'\nimport TerminalInterface from './TerminalInterface'\n\nexport default class SpyInterface implements GraphicsInterface {\n\tpublic invocations: { command: string; options?: any }[] = []\n\tprivate cursorPosition = { x: 0, y: 0 }\n\n\tprivate promptResolver?: (\n\t\tinput: FieldDefinitionValueType<FieldDefinitions>\n\t) => void | undefined\n\n\tprivate confirmResolver?: (pass: boolean) => void | undefined\n\tprivate waitForEnterResolver?: () => void | undefined\n\tprivate promptDefaultValue: any\n\tprivate term?: TerminalInterface\n\tprivate startTime: number\n\tprivate promptTimeout?: any\n\n\tpublic constructor() {\n\t\tthis.startTime = new Date().getTime()\n\n\t\tthis.term = this.shouldRenderTestLogs()\n\t\t\t? new TerminalInterface(process.cwd(), true, (...strs: []) => {\n\t\t\t\t\tthis.optionallyRenderLine(strs.join(' '))\n\t\t\t })\n\t\t\t: undefined\n\t}\n\n\tprivate shouldRenderTestLogs() {\n\t\treturn process.env.SHOULD_RENDER_TEST_LOGS === 'true'\n\t}\n\n\tpublic renderWarning(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderWarning', { message, effects })\n\t\tthis.term?.renderWarning(message)\n\t}\n\n\tpublic renderHint(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderHint', { message, effects })\n\t\tthis.optionallyRenderLine(`Hint: ${message}`)\n\t\tthis.term?.renderHint(message)\n\t}\n\n\tprivate trackInvocation(command: string, options?: any) {\n\t\t// testUtil.log(command, JSON.stringify(options), '\\n')\n\t\tthis.invocations.push({ command, options })\n\t}\n\n\tpublic isWaitingForInput() {\n\t\treturn !!(\n\t\t\tthis.promptResolver ||\n\t\t\tthis.confirmResolver ||\n\t\t\tthis.waitForEnterResolver\n\t\t)\n\t}\n\n\tpublic reset() {\n\t\tthis.promptResolver = undefined\n\t\tthis.confirmResolver = undefined\n\t\tthis.waitForEnterResolver = undefined\n\t\tclearTimeout(this.promptTimeout)\n\t}\n\n\tpublic getLastInvocation() {\n\t\treturn this.invocations[this.invocations.length - 1]\n\t}\n\n\tpublic async sendInput(input: string | string[]): Promise<void> {\n\t\tthis.trackInvocation('sendInput', input)\n\n\t\tthis.optionallyRenderLine(\n\t\t\t`Sending input: \"${input.length > 0 ? input : 'ENTER'}\"`\n\t\t)\n\n\t\tif (this.waitForEnterResolver) {\n\t\t\tconst resolver = this.waitForEnterResolver\n\t\t\tthis.waitForEnterResolver = undefined\n\n\t\t\tresolver()\n\t\t} else if (this.promptResolver) {\n\t\t\tconst resolver = this.promptResolver\n\t\t\tthis.promptResolver = undefined\n\n\t\t\tresolver(input !== '\\n' && input !== '' ? input : this.promptDefaultValue)\n\t\t} else if (this.confirmResolver) {\n\t\t\tconst resolver = this.confirmResolver\n\t\t\tthis.confirmResolver = undefined\n\n\t\t\tresolver(\n\t\t\t\tinput === '\\n' ||\n\t\t\t\t\tinput.length === 0 ||\n\t\t\t\t\t(typeof input === 'string' && input.toLowerCase() === 'y')\n\t\t\t)\n\t\t} else {\n\t\t\tthrow new Error('Sent input before prompted for input')\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tsetTimeout(resolve, 50)\n\t\t})\n\t}\n\n\tpublic renderSection(options: {\n\t\theadline: string\n\t\tlines?: string[] | string[]\n\t\theadlineEffects?: GraphicsTextEffect[]\n\t\tdividerEffects?: GraphicsTextEffect[]\n\t\tbodyEffects?: GraphicsTextEffect[]\n\t\tobject?: any\n\t}): void {\n\t\tthis.trackInvocation('renderSection', options)\n\t\tthis.term?.renderSection(options)\n\t}\n\n\tpublic renderObject(obj: any): void {\n\t\tthis.trackInvocation('renderObject', obj)\n\t\tthis.term?.renderObject(obj)\n\t}\n\n\tpublic renderError(err: Error): void {\n\t\tthis.trackInvocation('renderError', err)\n\t\tthis.term?.renderError(err)\n\t}\n\n\tpublic renderCodeSample(code: string): void {\n\t\tthis.trackInvocation('renderCodeSample', code)\n\t\tthis.term?.renderCodeSample(code)\n\t}\n\n\tpublic renderActionSummary(results: ExecutionResults): void {\n\t\tthis.trackInvocation('renderCommandSummary', results)\n\t\tthis.term?.renderActionSummary(results)\n\t}\n\n\tpublic renderHero(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderHero', { message, effects })\n\t\tthis.term?.renderHero(message, effects)\n\t}\n\n\tpublic renderHeadline(\n\t\tmessage: string,\n\t\teffects: GraphicsTextEffect[],\n\t\tdividerEffects: GraphicsTextEffect[]\n\t): void {\n\t\tthis.trackInvocation('renderHeadline', { message, effects, dividerEffects })\n\t\tthis.term?.renderHeadline(message, effects, dividerEffects)\n\t}\n\n\tpublic renderDivider(effects?: GraphicsTextEffect[] | undefined): void {\n\t\tthis.trackInvocation('renderDivider', effects)\n\t\tthis.term?.renderDivider(effects)\n\t}\n\n\tpublic renderLine(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderLine', { message, effects })\n\t\tmessage && message.length > 0 && this.optionallyRenderLine(message)\n\t}\n\n\tprivate optionallyRenderLine(message: string) {\n\t\tif (this.shouldRenderTestLogs()) {\n\t\t\tconst duration = new Date().getTime() - this.startTime\n\t\t\tconst friendly = durationUtil.msToFriendly(duration)\n\n\t\t\ttestLog.info(\n\t\t\t\t`${\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tglobal.activeTest?.test ? global.activeTest?.test + ' :: ' : ''\n\t\t\t\t}${friendly} :: ${message}`\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\tthis.trackInvocation('renderImage', { path, options })\n\t}\n\n\tpublic renderLines(\n\t\tmessages: string[],\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderLines', { messages, effects })\n\t\tthis.term?.renderLines(messages, effects)\n\t}\n\n\tpublic async prompt<T extends FieldDefinitions>(definition: T) {\n\t\tthis.trackInvocation('prompt', definition)\n\n\t\tif (this.promptResolver) {\n\t\t\tthrow new Error(\n\t\t\t\t'Tried to double prompt. Try this.term?.sendInput() before calling prompt next.'\n\t\t\t)\n\t\t}\n\n\t\tlet msg = `${namesUtil.toPascal(definition.type)} Prompt: ${\n\t\t\tdefinition.label\n\t\t}`\n\n\t\tif (definition.type === 'select') {\n\t\t\tmsg += '\\n\\nChoices:\\n'\n\t\t\tdefinition.options.choices.forEach((choice) => {\n\t\t\t\tmsg += `\\n${choice.value}: ${choice.label}`\n\t\t\t})\n\n\t\t\tmsg += '\\n'\n\t\t}\n\n\t\tthis.optionallyRenderLine(msg)\n\n\t\treturn new Promise<FieldDefinitionValueType<FieldDefinitions>>(\n\t\t\t(resolve, reject) => {\n\t\t\t\tthis.promptResolver = (...args: any[]) => {\n\t\t\t\t\tclearTimeout(this.promptTimeout)\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tresolve(...args)\n\t\t\t\t}\n\t\t\t\tthis.promptTimeout = setTimeout(() => {\n\t\t\t\t\tthis.reset()\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tassert.fail(`Timed out waiting for input: ${definition.label}`)\n\t\t\t\t\t} catch (err: any) {\n\t\t\t\t\t\treject(err)\n\t\t\t\t\t}\n\t\t\t\t}, 10000)\n\t\t\t\tthis.promptDefaultValue = definition.defaultValue\n\t\t\t}\n\t\t)\n\t}\n\n\tpublic startLoading(message?: string | undefined): void {\n\t\tthis.trackInvocation('startLoading', message)\n\t\tthis.optionallyRenderLine(message ? `${message}` : 'Start loading...')\n\t}\n\n\tpublic stopLoading(): void {\n\t\tthis.trackInvocation('stopLoading')\n\t\tthis.optionallyRenderLine('Stop loading...')\n\t}\n\n\tpublic async waitForEnter(message?: string | undefined): Promise<void> {\n\t\tthis.trackInvocation('waitForEnter', message)\n\t\tthis.optionallyRenderLine(\n\t\t\t`${message ? ` ${message}\\n\\n` : ``}Waiting for enter...`\n\t\t)\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.waitForEnterResolver = resolve\n\t\t})\n\t}\n\n\tpublic async waitForInput() {\n\t\tconst ttl = 1000 * 60 * 5\n\t\tconst checkInterval = 100\n\t\tlet loops = ttl / checkInterval\n\t\tlet lastWriteCount = this.invocations.length\n\n\t\twhile (!this.isWaitingForInput()) {\n\t\t\tif (loops-- === 0) {\n\t\t\t\tassert.fail(`Waiting for input timed out.`)\n\t\t\t}\n\n\t\t\tconst hasWritten = lastWriteCount != this.invocations.length\n\n\t\t\tif (hasWritten) {\n\t\t\t\tloops = ttl / checkInterval\n\t\t\t\tlastWriteCount = this.invocations.length\n\t\t\t\tif (this.shouldRenderTestLogs()) {\n\t\t\t\t\ttestUtil.log('waitForInput timeout reset because of new output.')\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, checkInterval))\n\t\t}\n\t}\n\n\tpublic confirm(question: string): Promise<boolean> {\n\t\tthis.trackInvocation('confirm', question)\n\t\tthis.optionallyRenderLine(`${question} :: Y/N...`)\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.confirmResolver = resolve\n\t\t})\n\t}\n\n\tpublic clear(): void {\n\t\tthis.trackInvocation('clear')\n\t}\n\n\tpublic renderProgressBar(options: ProgressBarOptions): void {\n\t\tthis.trackInvocation('renderProgressBar', options)\n\t\tthis.optionallyRenderLine(\n\t\t\t`Showing progress${options.title ? ` ${options.title}` : ``}`\n\t\t)\n\t}\n\n\tpublic updateProgressBar(options: ProgressBarUpdateOptions): void {\n\t\tthis.trackInvocation('updateProgressBar', options)\n\t}\n\n\tpublic removeProgressBar(): void {\n\t\tthis.trackInvocation('removeProgressBar')\n\t\tthis.optionallyRenderLine(`Hiding progress`)\n\t}\n\n\tpublic async getCursorPosition(): Promise<{ x: number; y: number } | null> {\n\t\tthis.trackInvocation('getCursorPosition')\n\t\treturn this.cursorPosition\n\t}\n\n\tpublic setCursorPosition(pos: { x: number; y: number }) {\n\t\tthis.cursorPosition = pos\n\t}\n\n\tpublic moveCursorTo(x: number, y: number): void {\n\t\tthis.trackInvocation('moveCursorTo', { x, y })\n\t}\n\n\tpublic clearBelowCursor(): void {\n\t\tthis.trackInvocation('clearBelowCursor')\n\t}\n}\n"],"file":"SpyInterface.js"}
1
+ {"version":3,"sources":["../../src/interfaces/SpyInterface.ts"],"names":["SpyInterface","x","y","startTime","Date","getTime","term","shouldRenderTestLogs","TerminalInterface","process","cwd","strs","optionallyRenderLine","join","undefined","env","SHOULD_RENDER_TEST_LOGS","message","effects","trackInvocation","renderWarning","renderHint","command","options","invocations","push","promptResolver","confirmResolver","waitForEnterResolver","clearTimeout","promptTimeout","length","input","resolver","promptDefaultValue","toLowerCase","Error","Promise","resolve","setTimeout","renderSection","obj","renderObject","err","renderError","code","renderCodeSample","results","renderActionSummary","renderHero","dividerEffects","renderHeadline","renderDivider","duration","friendly","durationUtil","msToFriendly","testLog","info","global","activeTest","test","path","messages","renderLines","definition","msg","namesUtil","toPascal","type","label","choices","forEach","choice","value","reject","reset","assert","fail","defaultValue","ttl","checkInterval","loops","lastWriteCount","isWaitingForInput","hasWritten","testUtil","log","question","title","cursorPosition","pos"],"mappings":"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","sourcesContent":["import { FieldDefinitionValueType } from '@sprucelabs/schema'\nimport { namesUtil, testLog } from '@sprucelabs/spruce-skill-utils'\nimport { assert } from '@sprucelabs/test'\nimport { FieldDefinitions } from '#spruce/schemas/fields/fields.types'\nimport testUtil from '../tests/utilities/test.utility'\nimport { ExecutionResults } from '../types/cli.types'\nimport { GraphicsInterface } from '../types/cli.types'\nimport {\n\tGraphicsTextEffect,\n\tProgressBarOptions,\n\tProgressBarUpdateOptions,\n\tImageDimensions,\n} from '../types/graphicsInterface.types'\nimport durationUtil from '../utilities/duration.utility'\nimport TerminalInterface from './TerminalInterface'\n\nexport default class SpyInterface implements GraphicsInterface {\n\tpublic invocations: { command: string; options?: any }[] = []\n\tprivate cursorPosition = { x: 0, y: 0 }\n\n\tprivate promptResolver?: (\n\t\tinput: FieldDefinitionValueType<FieldDefinitions>\n\t) => void | undefined\n\n\tprivate confirmResolver?: (pass: boolean) => void | undefined\n\tprivate waitForEnterResolver?: () => void | undefined\n\tprivate promptDefaultValue: any\n\tprivate term?: TerminalInterface\n\tprivate startTime: number\n\tprivate promptTimeout?: any\n\n\tpublic constructor() {\n\t\tthis.startTime = new Date().getTime()\n\n\t\tthis.term = this.shouldRenderTestLogs()\n\t\t\t? new TerminalInterface(process.cwd(), true, (...strs: []) => {\n\t\t\t\t\tthis.optionallyRenderLine(strs.join(' '))\n\t\t\t })\n\t\t\t: undefined\n\t}\n\n\tprivate shouldRenderTestLogs() {\n\t\treturn process.env.SHOULD_RENDER_TEST_LOGS === 'true'\n\t}\n\n\tpublic renderWarning(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderWarning', { message, effects })\n\t\tthis.term?.renderWarning(message)\n\t}\n\n\tpublic renderHint(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderHint', { message, effects })\n\t\tthis.optionallyRenderLine(`Hint: ${message}`)\n\t\tthis.term?.renderHint(message)\n\t}\n\n\tprivate trackInvocation(command: string, options?: any) {\n\t\t// testUtil.log(command, JSON.stringify(options), '\\n')\n\t\tthis.invocations.push({ command, options })\n\t}\n\n\tpublic isWaitingForInput() {\n\t\treturn !!(\n\t\t\tthis.promptResolver ||\n\t\t\tthis.confirmResolver ||\n\t\t\tthis.waitForEnterResolver\n\t\t)\n\t}\n\n\tpublic reset() {\n\t\tthis.promptResolver = undefined\n\t\tthis.confirmResolver = undefined\n\t\tthis.waitForEnterResolver = undefined\n\t\tclearTimeout(this.promptTimeout)\n\t}\n\n\tpublic getLastInvocation() {\n\t\treturn this.invocations[this.invocations.length - 1]\n\t}\n\n\tpublic async sendInput(input: string | string[]): Promise<void> {\n\t\tthis.trackInvocation('sendInput', input)\n\n\t\tthis.optionallyRenderLine(\n\t\t\t`Sending input: \"${input.length > 0 ? input : 'ENTER'}\"`\n\t\t)\n\n\t\tif (this.waitForEnterResolver) {\n\t\t\tconst resolver = this.waitForEnterResolver\n\t\t\tthis.waitForEnterResolver = undefined\n\n\t\t\tresolver()\n\t\t} else if (this.promptResolver) {\n\t\t\tconst resolver = this.promptResolver\n\t\t\tthis.promptResolver = undefined\n\n\t\t\tresolver(input !== '\\n' && input !== '' ? input : this.promptDefaultValue)\n\t\t} else if (this.confirmResolver) {\n\t\t\tconst resolver = this.confirmResolver\n\t\t\tthis.confirmResolver = undefined\n\n\t\t\tresolver(\n\t\t\t\tinput === '\\n' ||\n\t\t\t\t\tinput.length === 0 ||\n\t\t\t\t\t(typeof input === 'string' && input.toLowerCase() === 'y')\n\t\t\t)\n\t\t} else {\n\t\t\tthrow new Error('Sent input before prompted for input')\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tsetTimeout(resolve, 50)\n\t\t})\n\t}\n\n\tpublic renderSection(options: {\n\t\theadline: string\n\t\tlines?: string[] | string[]\n\t\theadlineEffects?: GraphicsTextEffect[]\n\t\tdividerEffects?: GraphicsTextEffect[]\n\t\tbodyEffects?: GraphicsTextEffect[]\n\t\tobject?: any\n\t}): void {\n\t\tthis.trackInvocation('renderSection', options)\n\t\tthis.term?.renderSection(options)\n\t}\n\n\tpublic renderObject(obj: any): void {\n\t\tthis.trackInvocation('renderObject', obj)\n\t\tthis.term?.renderObject(obj)\n\t}\n\n\tpublic renderError(err: Error): void {\n\t\tthis.trackInvocation('renderError', err)\n\t\tthis.term?.renderError(err)\n\t}\n\n\tpublic renderCodeSample(code: string): void {\n\t\tthis.trackInvocation('renderCodeSample', code)\n\t\tthis.term?.renderCodeSample(code)\n\t}\n\n\tpublic renderActionSummary(results: ExecutionResults): void {\n\t\tthis.trackInvocation('renderCommandSummary', results)\n\t\tthis.term?.renderActionSummary(results)\n\t}\n\n\tpublic renderHero(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderHero', { message, effects })\n\t\tthis.term?.renderHero(message, effects)\n\t}\n\n\tpublic renderHeadline(\n\t\tmessage: string,\n\t\teffects: GraphicsTextEffect[],\n\t\tdividerEffects: GraphicsTextEffect[]\n\t): void {\n\t\tthis.trackInvocation('renderHeadline', { message, effects, dividerEffects })\n\t\tthis.term?.renderHeadline(message, effects, dividerEffects)\n\t}\n\n\tpublic renderDivider(effects?: GraphicsTextEffect[] | undefined): void {\n\t\tthis.trackInvocation('renderDivider', effects)\n\t\tthis.term?.renderDivider(effects)\n\t}\n\n\tpublic renderLine(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderLine', { message, effects })\n\t\tmessage && message.length > 0 && this.optionallyRenderLine(message)\n\t}\n\n\tprivate optionallyRenderLine(message: string) {\n\t\tif (this.shouldRenderTestLogs()) {\n\t\t\tconst duration = new Date().getTime() - this.startTime\n\t\t\tconst friendly = durationUtil.msToFriendly(duration)\n\n\t\t\ttestLog.info(\n\t\t\t\t`${\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tglobal.activeTest?.test ? global.activeTest?.test + ' :: ' : ''\n\t\t\t\t}${friendly} :: ${message}`\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\tthis.trackInvocation('renderImage', { path, options })\n\t}\n\n\tpublic renderLines(\n\t\tmessages: string[],\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderLines', { messages, effects })\n\t\tthis.term?.renderLines(messages, effects)\n\t}\n\n\tpublic async prompt<T extends FieldDefinitions>(definition: T) {\n\t\tthis.trackInvocation('prompt', definition)\n\n\t\tif (this.promptResolver) {\n\t\t\tthrow new Error(\n\t\t\t\t'Tried to double prompt. Try this.term?.sendInput() before calling prompt next.'\n\t\t\t)\n\t\t}\n\n\t\tlet msg = `${namesUtil.toPascal(definition.type)} Prompt: ${\n\t\t\tdefinition.label\n\t\t}`\n\n\t\tif (definition.type === 'select') {\n\t\t\tmsg += '\\n\\nChoices:\\n'\n\t\t\tdefinition.options.choices.forEach((choice) => {\n\t\t\t\tmsg += `\\n${choice.value}: ${choice.label}`\n\t\t\t})\n\n\t\t\tmsg += '\\n'\n\t\t}\n\n\t\tthis.optionallyRenderLine(msg)\n\n\t\treturn new Promise<FieldDefinitionValueType<FieldDefinitions>>(\n\t\t\t(resolve, reject) => {\n\t\t\t\tthis.promptResolver = (...args: any[]) => {\n\t\t\t\t\tclearTimeout(this.promptTimeout)\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tresolve(...args)\n\t\t\t\t}\n\t\t\t\tthis.promptTimeout = setTimeout(() => {\n\t\t\t\t\tthis.reset()\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tassert.fail(\n\t\t\t\t\t\t\t`Timed out waiting for input with label: '${definition.label}'\\n\\nConsider passing what you need to Action().execute({ something })`\n\t\t\t\t\t\t)\n\t\t\t\t\t} catch (err: any) {\n\t\t\t\t\t\treject(err)\n\t\t\t\t\t}\n\t\t\t\t}, 10000)\n\t\t\t\tthis.promptDefaultValue = definition.defaultValue\n\t\t\t}\n\t\t)\n\t}\n\n\tpublic startLoading(message?: string | undefined): void {\n\t\tthis.trackInvocation('startLoading', message)\n\t\tthis.optionallyRenderLine(message ? `${message}` : 'Start loading...')\n\t}\n\n\tpublic stopLoading(): void {\n\t\tthis.trackInvocation('stopLoading')\n\t\tthis.optionallyRenderLine('Stop loading...')\n\t}\n\n\tpublic async waitForEnter(message?: string | undefined): Promise<void> {\n\t\tthis.trackInvocation('waitForEnter', message)\n\t\tthis.optionallyRenderLine(\n\t\t\t`${message ? ` ${message}\\n\\n` : ``}Waiting for enter...`\n\t\t)\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.waitForEnterResolver = resolve\n\t\t})\n\t}\n\n\tpublic async waitForInput() {\n\t\tconst ttl = 1000 * 60 * 5\n\t\tconst checkInterval = 100\n\t\tlet loops = ttl / checkInterval\n\t\tlet lastWriteCount = this.invocations.length\n\n\t\twhile (!this.isWaitingForInput()) {\n\t\t\tif (loops-- === 0) {\n\t\t\t\tassert.fail(`Waiting for input timed out.`)\n\t\t\t}\n\n\t\t\tconst hasWritten = lastWriteCount != this.invocations.length\n\n\t\t\tif (hasWritten) {\n\t\t\t\tloops = ttl / checkInterval\n\t\t\t\tlastWriteCount = this.invocations.length\n\t\t\t\tif (this.shouldRenderTestLogs()) {\n\t\t\t\t\ttestUtil.log('waitForInput timeout reset because of new output.')\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, checkInterval))\n\t\t}\n\t}\n\n\tpublic confirm(question: string): Promise<boolean> {\n\t\tthis.trackInvocation('confirm', question)\n\t\tthis.optionallyRenderLine(`${question} :: Y/N...`)\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.confirmResolver = resolve\n\t\t})\n\t}\n\n\tpublic clear(): void {\n\t\tthis.trackInvocation('clear')\n\t}\n\n\tpublic renderProgressBar(options: ProgressBarOptions): void {\n\t\tthis.trackInvocation('renderProgressBar', options)\n\t\tthis.optionallyRenderLine(\n\t\t\t`Showing progress${options.title ? ` ${options.title}` : ``}`\n\t\t)\n\t}\n\n\tpublic updateProgressBar(options: ProgressBarUpdateOptions): void {\n\t\tthis.trackInvocation('updateProgressBar', options)\n\t}\n\n\tpublic removeProgressBar(): void {\n\t\tthis.trackInvocation('removeProgressBar')\n\t\tthis.optionallyRenderLine(`Hiding progress`)\n\t}\n\n\tpublic async getCursorPosition(): Promise<{ x: number; y: number } | null> {\n\t\tthis.trackInvocation('getCursorPosition')\n\t\treturn this.cursorPosition\n\t}\n\n\tpublic setCursorPosition(pos: { x: number; y: number }) {\n\t\tthis.cursorPosition = pos\n\t}\n\n\tpublic moveCursorTo(x: number, y: number): void {\n\t\tthis.trackInvocation('moveCursorTo', { x, y })\n\t}\n\n\tpublic clearBelowCursor(): void {\n\t\tthis.trackInvocation('clearBelowCursor')\n\t}\n}\n"],"file":"SpyInterface.js"}
@@ -129,7 +129,8 @@ var EventTemplateItemBuilder = /*#__PURE__*/function () {
129
129
 
130
130
  throw new _schema.SchemaError({
131
131
  code: 'INVALID_PARAMETERS',
132
- parameters: ['fullyQualifiedEventName']
132
+ parameters: ['fullyQualifiedEventName'],
133
+ friendlyMessages: ["I could not find any events that match ".concat(fullyQualifiedEventName, ".")]
133
134
  });
134
135
  }
135
136
  }, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/templateItemBuilders/EventTemplateItemBuilder.ts"],"names":["EventTemplateItemBuilder","options","contracts","localNamespace","eventBuilderFile","eventContractTemplateItems","schemaTemplateItems","contract","buildTemplateItemsForContract","schemaItems","contractItems","push","sort","a","b","nameCamel","fullyQualifiedEventName","namedSignatures","eventContractUtil","getNamedEventSignatures","namedSig","mapEventSigsToSchemaTemplateItems","signatureTemplateItem","buildEventSigTemplateItem","emitPayloadSchemaTemplateItem","emitPayloadSchema","responsePayloadSchemaTemplateItem","responsePayloadSchema","SchemaError","code","parameters","item","buildTemplateItemForEventSignature","eventNamespace","isLocal","namespacePascal","sigToNamespacePascal","namesUtil","toCamel","eventName","namePascal","toPascal","version","namespace","toKebab","MERCURY_API_NAMESPACE","namespaceCamel","imports","filter","i","map","schemaDiskUtil","resolvePath","destination","schema","shouldIncludeFileExtension","importAs","eventSignatures","signature","listenPermissionContract","emitPermissionContract","find","id","schemasByNamespace","mapEventSigsToSchemasByNamepace","schemaTemplateItemBuilder","SchemaTemplateItemBuilder","buildTemplateItems"],"mappings":"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","sourcesContent":["import { EventContract } from '@sprucelabs/mercury-types'\nimport { Schema, SchemaError, SchemaTemplateItem } from '@sprucelabs/schema'\nimport {\n\teventContractUtil,\n\tNamedEventSignature,\n} from '@sprucelabs/spruce-event-utils'\nimport {\n\tMERCURY_API_NAMESPACE,\n\tnamesUtil,\n} from '@sprucelabs/spruce-skill-utils'\nimport {\n\tEventContractTemplateItem,\n\tEventSignatureTemplateItem,\n} from '@sprucelabs/spruce-templates'\nimport schemaDiskUtil from '../features/schema/utilities/schemaDisk.utility'\nimport SchemaTemplateItemBuilder from './SchemaTemplateItemBuilder'\n\nexport default class EventTemplateItemBuilder {\n\tpublic buildTemplateItems(options: {\n\t\tcontracts: EventContract[]\n\t\tlocalNamespace?: string\n\t\teventBuilderFile?: string\n\t}): {\n\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t} {\n\t\tconst { contracts, localNamespace, eventBuilderFile } = options\n\n\t\tconst eventContractTemplateItems: EventContractTemplateItem[] = []\n\t\tconst schemaTemplateItems: SchemaTemplateItem[] = []\n\n\t\tfor (const contract of contracts) {\n\t\t\tconst {\n\t\t\t\tschemaTemplateItems: schemaItems,\n\t\t\t\teventContractTemplateItems: contractItems,\n\t\t\t} = this.buildTemplateItemsForContract(\n\t\t\t\tcontract,\n\t\t\t\tlocalNamespace,\n\t\t\t\teventBuilderFile\n\t\t\t)\n\n\t\t\teventContractTemplateItems.push(...contractItems)\n\t\t\tschemaTemplateItems.push(...schemaItems)\n\t\t}\n\n\t\teventContractTemplateItems.sort((a, b) => {\n\t\t\tif (a.nameCamel > b.nameCamel) {\n\t\t\t\treturn 1\n\t\t\t} else if (a.nameCamel < b.nameCamel) {\n\t\t\t\treturn -1\n\t\t\t}\n\n\t\t\treturn 0\n\t\t})\n\n\t\treturn { eventContractTemplateItems, schemaTemplateItems }\n\t}\n\n\tpublic buildEventTemplateItemForName(\n\t\tcontracts: EventContract[],\n\t\tfullyQualifiedEventName: string\n\t): {\n\t\tresponsePayloadSchemaTemplateItem: SchemaTemplateItem | undefined\n\t\temitPayloadSchemaTemplateItem: SchemaTemplateItem | undefined\n\t} {\n\t\tfor (const contract of contracts) {\n\t\t\tconst namedSignatures =\n\t\t\t\teventContractUtil.getNamedEventSignatures(contract)\n\n\t\t\tfor (const namedSig of namedSignatures) {\n\t\t\t\tif (namedSig.fullyQualifiedEventName === fullyQualifiedEventName) {\n\t\t\t\t\tconst schemaTemplateItems: SchemaTemplateItem[] =\n\t\t\t\t\t\tthis.mapEventSigsToSchemaTemplateItems(namedSignatures)\n\n\t\t\t\t\tconst signatureTemplateItem: EventSignatureTemplateItem =\n\t\t\t\t\t\tthis.buildEventSigTemplateItem(namedSig, schemaTemplateItems)\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\temitPayloadSchemaTemplateItem:\n\t\t\t\t\t\t\tsignatureTemplateItem.emitPayloadSchema,\n\t\t\t\t\t\tresponsePayloadSchemaTemplateItem:\n\t\t\t\t\t\t\tsignatureTemplateItem.responsePayloadSchema,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new SchemaError({\n\t\t\tcode: 'INVALID_PARAMETERS',\n\t\t\tparameters: ['fullyQualifiedEventName'],\n\t\t})\n\t}\n\n\tprivate buildTemplateItemsForContract(\n\t\tcontract: EventContract,\n\t\tlocalNamespace?: string,\n\t\teventBuilderFile?: string\n\t): {\n\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t} {\n\t\tconst namedSignatures = eventContractUtil.getNamedEventSignatures(contract)\n\n\t\tconst schemaTemplateItems: SchemaTemplateItem[] =\n\t\t\tthis.mapEventSigsToSchemaTemplateItems(namedSignatures)\n\n\t\tconst eventContractTemplateItems: EventContractTemplateItem[] = []\n\n\t\tfor (const namedSig of namedSignatures) {\n\t\t\tconst item: EventContractTemplateItem =\n\t\t\t\tthis.buildTemplateItemForEventSignature(\n\t\t\t\t\tnamedSig,\n\t\t\t\t\tschemaTemplateItems,\n\t\t\t\t\tnamedSig.eventNamespace === localNamespace,\n\t\t\t\t\teventBuilderFile\n\t\t\t\t)\n\n\t\t\teventContractTemplateItems.push(item)\n\t\t}\n\n\t\treturn {\n\t\t\teventContractTemplateItems,\n\t\t\tschemaTemplateItems,\n\t\t}\n\t}\n\n\tprivate buildTemplateItemForEventSignature(\n\t\tnamedSig: NamedEventSignature,\n\t\tschemaTemplateItems: SchemaTemplateItem[],\n\t\tisLocal: boolean,\n\t\teventBuilderFile?: string\n\t) {\n\t\tconst namespacePascal = this.sigToNamespacePascal(namedSig)\n\n\t\tconst signatureTemplateItem: EventSignatureTemplateItem =\n\t\t\tthis.buildEventSigTemplateItem(namedSig, schemaTemplateItems)\n\n\t\tconst item: EventContractTemplateItem = {\n\t\t\tnameCamel: namesUtil.toCamel(namedSig.eventName),\n\t\t\tnamePascal: namesUtil.toPascal(namedSig.eventName),\n\t\t\tversion: namedSig.version ?? '***MISSING***',\n\t\t\tisLocal,\n\t\t\tnamespace: namesUtil.toKebab(\n\t\t\t\tnamedSig.eventNamespace ?? MERCURY_API_NAMESPACE\n\t\t\t),\n\t\t\tnamespaceCamel: namesUtil.toCamel(\n\t\t\t\tnamedSig.eventNamespace ?? MERCURY_API_NAMESPACE\n\t\t\t),\n\t\t\timports: [\n\t\t\t\tsignatureTemplateItem.emitPayloadSchema as SchemaTemplateItem,\n\t\t\t\tsignatureTemplateItem.responsePayloadSchema as SchemaTemplateItem,\n\t\t\t]\n\t\t\t\t.filter((i) => !!i)\n\t\t\t\t.map((item: SchemaTemplateItem) => ({\n\t\t\t\t\tpackage: schemaDiskUtil.resolvePath({\n\t\t\t\t\t\tdestination: '#spruce/schemas',\n\t\t\t\t\t\tschema: item.schema,\n\t\t\t\t\t\tshouldIncludeFileExtension: false,\n\t\t\t\t\t}),\n\t\t\t\t\timportAs: `${item.nameCamel}Schema`,\n\t\t\t\t})),\n\t\t\tnamespacePascal,\n\t\t\teventSignatures: {\n\t\t\t\t[namedSig.fullyQualifiedEventName]: signatureTemplateItem,\n\t\t\t},\n\t\t}\n\n\t\titem.imports.push({\n\t\t\timportAs: '{ buildEventContract }',\n\t\t\tpackage: eventBuilderFile ?? '@sprucelabs/mercury-types',\n\t\t})\n\n\t\tif (\n\t\t\tnamedSig.signature.listenPermissionContract ||\n\t\t\tnamedSig.signature.emitPermissionContract\n\t\t) {\n\t\t\titem.imports.push({\n\t\t\t\timportAs: '{ buildPermissionContract }',\n\t\t\t\tpackage: eventBuilderFile ?? '@sprucelabs/mercury-types',\n\t\t\t})\n\t\t}\n\n\t\treturn item\n\t}\n\n\tprivate buildEventSigTemplateItem(\n\t\tnamedSig: NamedEventSignature,\n\t\tschemaItems: SchemaTemplateItem[]\n\t) {\n\t\tconst { emitPayloadSchema, responsePayloadSchema, ...signature } =\n\t\t\tnamedSig.signature\n\n\t\tconst signatureTemplateItem: EventSignatureTemplateItem = { ...signature }\n\n\t\tif (emitPayloadSchema) {\n\t\t\tsignatureTemplateItem.emitPayloadSchema = schemaItems.find(\n\t\t\t\t(i) => i.id === emitPayloadSchema.id\n\t\t\t)\n\t\t}\n\n\t\tif (responsePayloadSchema) {\n\t\t\tsignatureTemplateItem.responsePayloadSchema = schemaItems.find(\n\t\t\t\t(i) => i.id === responsePayloadSchema.id\n\t\t\t)\n\t\t}\n\t\treturn signatureTemplateItem\n\t}\n\n\tprivate mapEventSigsToSchemaTemplateItems(\n\t\tnamedSignatures: NamedEventSignature[]\n\t) {\n\t\tconst schemasByNamespace: Record<string, Schema[]> =\n\t\t\tthis.mapEventSigsToSchemasByNamepace(namedSignatures)\n\n\t\tconst schemaTemplateItemBuilder = new SchemaTemplateItemBuilder('Cli')\n\t\tconst schemaItems: SchemaTemplateItem[] =\n\t\t\tschemaTemplateItemBuilder.buildTemplateItems(\n\t\t\t\tschemasByNamespace,\n\t\t\t\t'#spruce/events'\n\t\t\t)\n\n\t\treturn schemaItems\n\t}\n\n\tprivate mapEventSigsToSchemasByNamepace(\n\t\tnamedSignatures: NamedEventSignature[]\n\t) {\n\t\tconst schemasByNamespace: Record<string, Schema[]> = {}\n\n\t\tfor (const namedSig of namedSignatures) {\n\t\t\tconst namespacePascal = this.sigToNamespacePascal(namedSig)\n\t\t\tconst { emitPayloadSchema, responsePayloadSchema } = namedSig.signature\n\n\t\t\tif (!schemasByNamespace[namespacePascal]) {\n\t\t\t\tschemasByNamespace[namespacePascal] = []\n\t\t\t}\n\n\t\t\tif (emitPayloadSchema) {\n\t\t\t\tschemasByNamespace[namespacePascal].push({\n\t\t\t\t\tversion: namedSig.version,\n\t\t\t\t\t...emitPayloadSchema,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (responsePayloadSchema) {\n\t\t\t\tschemasByNamespace[namespacePascal].push({\n\t\t\t\t\tversion: namedSig.version,\n\t\t\t\t\t...responsePayloadSchema,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn schemasByNamespace\n\t}\n\n\tprivate sigToNamespacePascal(namedSig: NamedEventSignature) {\n\t\treturn namesUtil.toPascal(namedSig.eventNamespace ?? MERCURY_API_NAMESPACE)\n\t}\n}\n"],"file":"EventTemplateItemBuilder.js"}
1
+ {"version":3,"sources":["../../src/templateItemBuilders/EventTemplateItemBuilder.ts"],"names":["EventTemplateItemBuilder","options","contracts","localNamespace","eventBuilderFile","eventContractTemplateItems","schemaTemplateItems","contract","buildTemplateItemsForContract","schemaItems","contractItems","push","sort","a","b","nameCamel","fullyQualifiedEventName","namedSignatures","eventContractUtil","getNamedEventSignatures","namedSig","mapEventSigsToSchemaTemplateItems","signatureTemplateItem","buildEventSigTemplateItem","emitPayloadSchemaTemplateItem","emitPayloadSchema","responsePayloadSchemaTemplateItem","responsePayloadSchema","SchemaError","code","parameters","friendlyMessages","item","buildTemplateItemForEventSignature","eventNamespace","isLocal","namespacePascal","sigToNamespacePascal","namesUtil","toCamel","eventName","namePascal","toPascal","version","namespace","toKebab","MERCURY_API_NAMESPACE","namespaceCamel","imports","filter","i","map","schemaDiskUtil","resolvePath","destination","schema","shouldIncludeFileExtension","importAs","eventSignatures","signature","listenPermissionContract","emitPermissionContract","find","id","schemasByNamespace","mapEventSigsToSchemasByNamepace","schemaTemplateItemBuilder","SchemaTemplateItemBuilder","buildTemplateItems"],"mappings":";;;;;;;;;;;;;;;;;;;AACA;;AACA;;AAIA;;AAQA;;AACA;;;;;;;;;;;;;;IAEqBA,wB;;;;;;;WACpB,4BAA0BC,OAA1B,EAOE;AACD,UAAQC,SAAR,GAAwDD,OAAxD,CAAQC,SAAR;AAAA,UAAmBC,cAAnB,GAAwDF,OAAxD,CAAmBE,cAAnB;AAAA,UAAmCC,gBAAnC,GAAwDH,OAAxD,CAAmCG,gBAAnC;AAEA,UAAMC,0BAAuD,GAAG,EAAhE;AACA,UAAMC,mBAAyC,GAAG,EAAlD;;AAJC,iDAMsBJ,SANtB;AAAA;;AAAA;AAMD,4DAAkC;AAAA,cAAvBK,QAAuB;;AACjC,sCAGI,KAAKC,6BAAL,CACHD,QADG,EAEHJ,cAFG,EAGHC,gBAHG,CAHJ;AAAA,cACsBK,WADtB,yBACCH,mBADD;AAAA,cAE6BI,aAF7B,yBAECL,0BAFD;;AASAA,UAAAA,0BAA0B,CAACM,IAA3B,OAAAN,0BAA0B,sCAASK,aAAT,EAA1B;AACAJ,UAAAA,mBAAmB,CAACK,IAApB,OAAAL,mBAAmB,sCAASG,WAAT,EAAnB;AACA;AAlBA;AAAA;AAAA;AAAA;AAAA;;AAoBDJ,MAAAA,0BAA0B,CAACO,IAA3B,CAAgC,UAACC,CAAD,EAAIC,CAAJ,EAAU;AACzC,YAAID,CAAC,CAACE,SAAF,GAAcD,CAAC,CAACC,SAApB,EAA+B;AAC9B,iBAAO,CAAP;AACA,SAFD,MAEO,IAAIF,CAAC,CAACE,SAAF,GAAcD,CAAC,CAACC,SAApB,EAA+B;AACrC,iBAAO,CAAC,CAAR;AACA;;AAED,eAAO,CAAP;AACA,OARD;AAUA,aAAO;AAAEV,QAAAA,0BAA0B,EAA1BA,0BAAF;AAA8BC,QAAAA,mBAAmB,EAAnBA;AAA9B,OAAP;AACA;;;WAED,uCACCJ,SADD,EAECc,uBAFD,EAME;AAAA,kDACsBd,SADtB;AAAA;;AAAA;AACD,+DAAkC;AAAA,cAAvBK,QAAuB;;AACjC,cAAMU,eAAe,GACpBC,oCAAkBC,uBAAlB,CAA0CZ,QAA1C,CADD;;AADiC,sDAIVU,eAJU;AAAA;;AAAA;AAIjC,mEAAwC;AAAA,kBAA7BG,QAA6B;;AACvC,kBAAIA,QAAQ,CAACJ,uBAAT,KAAqCA,uBAAzC,EAAkE;AACjE,oBAAMV,mBAAyC,GAC9C,KAAKe,iCAAL,CAAuCJ,eAAvC,CADD;AAGA,oBAAMK,qBAAiD,GACtD,KAAKC,yBAAL,CAA+BH,QAA/B,EAAyCd,mBAAzC,CADD;AAGA,uBAAO;AACNkB,kBAAAA,6BAA6B,EAC5BF,qBAAqB,CAACG,iBAFjB;AAGNC,kBAAAA,iCAAiC,EAChCJ,qBAAqB,CAACK;AAJjB,iBAAP;AAMA;AACD;AAnBgC;AAAA;AAAA;AAAA;AAAA;AAoBjC;AArBA;AAAA;AAAA;AAAA;AAAA;;AAuBD,YAAM,IAAIC,mBAAJ,CAAgB;AACrBC,QAAAA,IAAI,EAAE,oBADe;AAErBC,QAAAA,UAAU,EAAE,CAAC,yBAAD,CAFS;AAGrBC,QAAAA,gBAAgB,EAAE,kDACyBf,uBADzB;AAHG,OAAhB,CAAN;AAOA;;;WAED,uCACCT,QADD,EAECJ,cAFD,EAGCC,gBAHD,EAOE;AACD,UAAMa,eAAe,GAAGC,oCAAkBC,uBAAlB,CAA0CZ,QAA1C,CAAxB;;AAEA,UAAMD,mBAAyC,GAC9C,KAAKe,iCAAL,CAAuCJ,eAAvC,CADD;AAGA,UAAMZ,0BAAuD,GAAG,EAAhE;;AANC,kDAQsBY,eARtB;AAAA;;AAAA;AAQD,+DAAwC;AAAA,cAA7BG,QAA6B;AACvC,cAAMY,IAA+B,GACpC,KAAKC,kCAAL,CACCb,QADD,EAECd,mBAFD,EAGCc,QAAQ,CAACc,cAAT,KAA4B/B,cAH7B,EAICC,gBAJD,CADD;AAQAC,UAAAA,0BAA0B,CAACM,IAA3B,CAAgCqB,IAAhC;AACA;AAlBA;AAAA;AAAA;AAAA;AAAA;;AAoBD,aAAO;AACN3B,QAAAA,0BAA0B,EAA1BA,0BADM;AAENC,QAAAA,mBAAmB,EAAnBA;AAFM,OAAP;AAIA;;;WAED,4CACCc,QADD,EAECd,mBAFD,EAGC6B,OAHD,EAIC/B,gBAJD,EAKE;AAAA;;AACD,UAAMgC,eAAe,GAAG,KAAKC,oBAAL,CAA0BjB,QAA1B,CAAxB;AAEA,UAAME,qBAAiD,GACtD,KAAKC,yBAAL,CAA+BH,QAA/B,EAAyCd,mBAAzC,CADD;AAGA,UAAM0B,IAA+B,GAAG;AACvCjB,QAAAA,SAAS,EAAEuB,4BAAUC,OAAV,CAAkBnB,QAAQ,CAACoB,SAA3B,CAD4B;AAEvCC,QAAAA,UAAU,EAAEH,4BAAUI,QAAV,CAAmBtB,QAAQ,CAACoB,SAA5B,CAF2B;AAGvCG,QAAAA,OAAO,uBAAEvB,QAAQ,CAACuB,OAAX,iEAAsB,eAHU;AAIvCR,QAAAA,OAAO,EAAPA,OAJuC;AAKvCS,QAAAA,SAAS,EAAEN,4BAAUO,OAAV,0BACVzB,QAAQ,CAACc,cADC,yEACiBY,uCADjB,CAL4B;AAQvCC,QAAAA,cAAc,EAAET,4BAAUC,OAAV,2BACfnB,QAAQ,CAACc,cADM,2EACYY,uCADZ,CARuB;AAWvCE,QAAAA,OAAO,EAAE,CACR1B,qBAAqB,CAACG,iBADd,EAERH,qBAAqB,CAACK,qBAFd,EAIPsB,MAJO,CAIA,UAACC,CAAD;AAAA,iBAAO,CAAC,CAACA,CAAT;AAAA,SAJA,EAKPC,GALO,CAKH,UAACnB,IAAD;AAAA,iBAA+B;AACnC,uBAASoB,uBAAeC,WAAf,CAA2B;AACnCC,cAAAA,WAAW,EAAE,iBADsB;AAEnCC,cAAAA,MAAM,EAAEvB,IAAI,CAACuB,MAFsB;AAGnCC,cAAAA,0BAA0B,EAAE;AAHO,aAA3B,CAD0B;AAMnCC,YAAAA,QAAQ,YAAKzB,IAAI,CAACjB,SAAV;AAN2B,WAA/B;AAAA,SALG,CAX8B;AAwBvCqB,QAAAA,eAAe,EAAfA,eAxBuC;AAyBvCsB,QAAAA,eAAe,uCACbtC,QAAQ,CAACJ,uBADI,EACsBM,qBADtB;AAzBwB,OAAxC;AA8BAU,MAAAA,IAAI,CAACgB,OAAL,CAAarC,IAAb,CAAkB;AACjB8C,QAAAA,QAAQ,EAAE,wBADO;AAEjB,mBAASrD,gBAAT,aAASA,gBAAT,cAASA,gBAAT,GAA6B;AAFZ,OAAlB;;AAKA,UACCgB,QAAQ,CAACuC,SAAT,CAAmBC,wBAAnB,IACAxC,QAAQ,CAACuC,SAAT,CAAmBE,sBAFpB,EAGE;AACD7B,QAAAA,IAAI,CAACgB,OAAL,CAAarC,IAAb,CAAkB;AACjB8C,UAAAA,QAAQ,EAAE,6BADO;AAEjB,qBAASrD,gBAAT,aAASA,gBAAT,cAASA,gBAAT,GAA6B;AAFZ,SAAlB;AAIA;;AAED,aAAO4B,IAAP;AACA;;;WAED,mCACCZ,QADD,EAECX,WAFD,EAGE;AACD,gCACCW,QAAQ,CAACuC,SADV;AAAA,UAAQlC,iBAAR,uBAAQA,iBAAR;AAAA,UAA2BE,qBAA3B,uBAA2BA,qBAA3B;AAAA,UAAqDgC,SAArD;;AAGA,UAAMrC,qBAAiD,qBAAQqC,SAAR,CAAvD;;AAEA,UAAIlC,iBAAJ,EAAuB;AACtBH,QAAAA,qBAAqB,CAACG,iBAAtB,GAA0ChB,WAAW,CAACqD,IAAZ,CACzC,UAACZ,CAAD;AAAA,iBAAOA,CAAC,CAACa,EAAF,KAAStC,iBAAiB,CAACsC,EAAlC;AAAA,SADyC,CAA1C;AAGA;;AAED,UAAIpC,qBAAJ,EAA2B;AAC1BL,QAAAA,qBAAqB,CAACK,qBAAtB,GAA8ClB,WAAW,CAACqD,IAAZ,CAC7C,UAACZ,CAAD;AAAA,iBAAOA,CAAC,CAACa,EAAF,KAASpC,qBAAqB,CAACoC,EAAtC;AAAA,SAD6C,CAA9C;AAGA;;AACD,aAAOzC,qBAAP;AACA;;;WAED,2CACCL,eADD,EAEE;AACD,UAAM+C,kBAA4C,GACjD,KAAKC,+BAAL,CAAqChD,eAArC,CADD;AAGA,UAAMiD,yBAAyB,GAAG,IAAIC,qCAAJ,CAA8B,KAA9B,CAAlC;AACA,UAAM1D,WAAiC,GACtCyD,yBAAyB,CAACE,kBAA1B,CACCJ,kBADD,EAEC,gBAFD,CADD;AAMA,aAAOvD,WAAP;AACA;;;WAED,yCACCQ,eADD,EAEE;AACD,UAAM+C,kBAA4C,GAAG,EAArD;;AADC,kDAGsB/C,eAHtB;AAAA;;AAAA;AAGD,+DAAwC;AAAA,cAA7BG,QAA6B;AACvC,cAAMgB,eAAe,GAAG,KAAKC,oBAAL,CAA0BjB,QAA1B,CAAxB;AACA,qCAAqDA,QAAQ,CAACuC,SAA9D;AAAA,cAAQlC,iBAAR,wBAAQA,iBAAR;AAAA,cAA2BE,qBAA3B,wBAA2BA,qBAA3B;;AAEA,cAAI,CAACqC,kBAAkB,CAAC5B,eAAD,CAAvB,EAA0C;AACzC4B,YAAAA,kBAAkB,CAAC5B,eAAD,CAAlB,GAAsC,EAAtC;AACA;;AAED,cAAIX,iBAAJ,EAAuB;AACtBuC,YAAAA,kBAAkB,CAAC5B,eAAD,CAAlB,CAAoCzB,IAApC;AACCgC,cAAAA,OAAO,EAAEvB,QAAQ,CAACuB;AADnB,eAEIlB,iBAFJ;AAIA;;AAED,cAAIE,qBAAJ,EAA2B;AAC1BqC,YAAAA,kBAAkB,CAAC5B,eAAD,CAAlB,CAAoCzB,IAApC;AACCgC,cAAAA,OAAO,EAAEvB,QAAQ,CAACuB;AADnB,eAEIhB,qBAFJ;AAIA;AACD;AAxBA;AAAA;AAAA;AAAA;AAAA;;AA0BD,aAAOqC,kBAAP;AACA;;;WAED,8BAA6B5C,QAA7B,EAA4D;AAAA;;AAC3D,aAAOkB,4BAAUI,QAAV,2BAAmBtB,QAAQ,CAACc,cAA5B,2EAA8CY,uCAA9C,CAAP;AACA","sourcesContent":["import { EventContract } from '@sprucelabs/mercury-types'\nimport { Schema, SchemaError, SchemaTemplateItem } from '@sprucelabs/schema'\nimport {\n\teventContractUtil,\n\tNamedEventSignature,\n} from '@sprucelabs/spruce-event-utils'\nimport {\n\tMERCURY_API_NAMESPACE,\n\tnamesUtil,\n} from '@sprucelabs/spruce-skill-utils'\nimport {\n\tEventContractTemplateItem,\n\tEventSignatureTemplateItem,\n} from '@sprucelabs/spruce-templates'\nimport schemaDiskUtil from '../features/schema/utilities/schemaDisk.utility'\nimport SchemaTemplateItemBuilder from './SchemaTemplateItemBuilder'\n\nexport default class EventTemplateItemBuilder {\n\tpublic buildTemplateItems(options: {\n\t\tcontracts: EventContract[]\n\t\tlocalNamespace?: string\n\t\teventBuilderFile?: string\n\t}): {\n\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t} {\n\t\tconst { contracts, localNamespace, eventBuilderFile } = options\n\n\t\tconst eventContractTemplateItems: EventContractTemplateItem[] = []\n\t\tconst schemaTemplateItems: SchemaTemplateItem[] = []\n\n\t\tfor (const contract of contracts) {\n\t\t\tconst {\n\t\t\t\tschemaTemplateItems: schemaItems,\n\t\t\t\teventContractTemplateItems: contractItems,\n\t\t\t} = this.buildTemplateItemsForContract(\n\t\t\t\tcontract,\n\t\t\t\tlocalNamespace,\n\t\t\t\teventBuilderFile\n\t\t\t)\n\n\t\t\teventContractTemplateItems.push(...contractItems)\n\t\t\tschemaTemplateItems.push(...schemaItems)\n\t\t}\n\n\t\teventContractTemplateItems.sort((a, b) => {\n\t\t\tif (a.nameCamel > b.nameCamel) {\n\t\t\t\treturn 1\n\t\t\t} else if (a.nameCamel < b.nameCamel) {\n\t\t\t\treturn -1\n\t\t\t}\n\n\t\t\treturn 0\n\t\t})\n\n\t\treturn { eventContractTemplateItems, schemaTemplateItems }\n\t}\n\n\tpublic buildEventTemplateItemForName(\n\t\tcontracts: EventContract[],\n\t\tfullyQualifiedEventName: string\n\t): {\n\t\tresponsePayloadSchemaTemplateItem: SchemaTemplateItem | undefined\n\t\temitPayloadSchemaTemplateItem: SchemaTemplateItem | undefined\n\t} {\n\t\tfor (const contract of contracts) {\n\t\t\tconst namedSignatures =\n\t\t\t\teventContractUtil.getNamedEventSignatures(contract)\n\n\t\t\tfor (const namedSig of namedSignatures) {\n\t\t\t\tif (namedSig.fullyQualifiedEventName === fullyQualifiedEventName) {\n\t\t\t\t\tconst schemaTemplateItems: SchemaTemplateItem[] =\n\t\t\t\t\t\tthis.mapEventSigsToSchemaTemplateItems(namedSignatures)\n\n\t\t\t\t\tconst signatureTemplateItem: EventSignatureTemplateItem =\n\t\t\t\t\t\tthis.buildEventSigTemplateItem(namedSig, schemaTemplateItems)\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\temitPayloadSchemaTemplateItem:\n\t\t\t\t\t\t\tsignatureTemplateItem.emitPayloadSchema,\n\t\t\t\t\t\tresponsePayloadSchemaTemplateItem:\n\t\t\t\t\t\t\tsignatureTemplateItem.responsePayloadSchema,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new SchemaError({\n\t\t\tcode: 'INVALID_PARAMETERS',\n\t\t\tparameters: ['fullyQualifiedEventName'],\n\t\t\tfriendlyMessages: [\n\t\t\t\t`I could not find any events that match ${fullyQualifiedEventName}.`,\n\t\t\t],\n\t\t})\n\t}\n\n\tprivate buildTemplateItemsForContract(\n\t\tcontract: EventContract,\n\t\tlocalNamespace?: string,\n\t\teventBuilderFile?: string\n\t): {\n\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t} {\n\t\tconst namedSignatures = eventContractUtil.getNamedEventSignatures(contract)\n\n\t\tconst schemaTemplateItems: SchemaTemplateItem[] =\n\t\t\tthis.mapEventSigsToSchemaTemplateItems(namedSignatures)\n\n\t\tconst eventContractTemplateItems: EventContractTemplateItem[] = []\n\n\t\tfor (const namedSig of namedSignatures) {\n\t\t\tconst item: EventContractTemplateItem =\n\t\t\t\tthis.buildTemplateItemForEventSignature(\n\t\t\t\t\tnamedSig,\n\t\t\t\t\tschemaTemplateItems,\n\t\t\t\t\tnamedSig.eventNamespace === localNamespace,\n\t\t\t\t\teventBuilderFile\n\t\t\t\t)\n\n\t\t\teventContractTemplateItems.push(item)\n\t\t}\n\n\t\treturn {\n\t\t\teventContractTemplateItems,\n\t\t\tschemaTemplateItems,\n\t\t}\n\t}\n\n\tprivate buildTemplateItemForEventSignature(\n\t\tnamedSig: NamedEventSignature,\n\t\tschemaTemplateItems: SchemaTemplateItem[],\n\t\tisLocal: boolean,\n\t\teventBuilderFile?: string\n\t) {\n\t\tconst namespacePascal = this.sigToNamespacePascal(namedSig)\n\n\t\tconst signatureTemplateItem: EventSignatureTemplateItem =\n\t\t\tthis.buildEventSigTemplateItem(namedSig, schemaTemplateItems)\n\n\t\tconst item: EventContractTemplateItem = {\n\t\t\tnameCamel: namesUtil.toCamel(namedSig.eventName),\n\t\t\tnamePascal: namesUtil.toPascal(namedSig.eventName),\n\t\t\tversion: namedSig.version ?? '***MISSING***',\n\t\t\tisLocal,\n\t\t\tnamespace: namesUtil.toKebab(\n\t\t\t\tnamedSig.eventNamespace ?? MERCURY_API_NAMESPACE\n\t\t\t),\n\t\t\tnamespaceCamel: namesUtil.toCamel(\n\t\t\t\tnamedSig.eventNamespace ?? MERCURY_API_NAMESPACE\n\t\t\t),\n\t\t\timports: [\n\t\t\t\tsignatureTemplateItem.emitPayloadSchema as SchemaTemplateItem,\n\t\t\t\tsignatureTemplateItem.responsePayloadSchema as SchemaTemplateItem,\n\t\t\t]\n\t\t\t\t.filter((i) => !!i)\n\t\t\t\t.map((item: SchemaTemplateItem) => ({\n\t\t\t\t\tpackage: schemaDiskUtil.resolvePath({\n\t\t\t\t\t\tdestination: '#spruce/schemas',\n\t\t\t\t\t\tschema: item.schema,\n\t\t\t\t\t\tshouldIncludeFileExtension: false,\n\t\t\t\t\t}),\n\t\t\t\t\timportAs: `${item.nameCamel}Schema`,\n\t\t\t\t})),\n\t\t\tnamespacePascal,\n\t\t\teventSignatures: {\n\t\t\t\t[namedSig.fullyQualifiedEventName]: signatureTemplateItem,\n\t\t\t},\n\t\t}\n\n\t\titem.imports.push({\n\t\t\timportAs: '{ buildEventContract }',\n\t\t\tpackage: eventBuilderFile ?? '@sprucelabs/mercury-types',\n\t\t})\n\n\t\tif (\n\t\t\tnamedSig.signature.listenPermissionContract ||\n\t\t\tnamedSig.signature.emitPermissionContract\n\t\t) {\n\t\t\titem.imports.push({\n\t\t\t\timportAs: '{ buildPermissionContract }',\n\t\t\t\tpackage: eventBuilderFile ?? '@sprucelabs/mercury-types',\n\t\t\t})\n\t\t}\n\n\t\treturn item\n\t}\n\n\tprivate buildEventSigTemplateItem(\n\t\tnamedSig: NamedEventSignature,\n\t\tschemaItems: SchemaTemplateItem[]\n\t) {\n\t\tconst { emitPayloadSchema, responsePayloadSchema, ...signature } =\n\t\t\tnamedSig.signature\n\n\t\tconst signatureTemplateItem: EventSignatureTemplateItem = { ...signature }\n\n\t\tif (emitPayloadSchema) {\n\t\t\tsignatureTemplateItem.emitPayloadSchema = schemaItems.find(\n\t\t\t\t(i) => i.id === emitPayloadSchema.id\n\t\t\t)\n\t\t}\n\n\t\tif (responsePayloadSchema) {\n\t\t\tsignatureTemplateItem.responsePayloadSchema = schemaItems.find(\n\t\t\t\t(i) => i.id === responsePayloadSchema.id\n\t\t\t)\n\t\t}\n\t\treturn signatureTemplateItem\n\t}\n\n\tprivate mapEventSigsToSchemaTemplateItems(\n\t\tnamedSignatures: NamedEventSignature[]\n\t) {\n\t\tconst schemasByNamespace: Record<string, Schema[]> =\n\t\t\tthis.mapEventSigsToSchemasByNamepace(namedSignatures)\n\n\t\tconst schemaTemplateItemBuilder = new SchemaTemplateItemBuilder('Cli')\n\t\tconst schemaItems: SchemaTemplateItem[] =\n\t\t\tschemaTemplateItemBuilder.buildTemplateItems(\n\t\t\t\tschemasByNamespace,\n\t\t\t\t'#spruce/events'\n\t\t\t)\n\n\t\treturn schemaItems\n\t}\n\n\tprivate mapEventSigsToSchemasByNamepace(\n\t\tnamedSignatures: NamedEventSignature[]\n\t) {\n\t\tconst schemasByNamespace: Record<string, Schema[]> = {}\n\n\t\tfor (const namedSig of namedSignatures) {\n\t\t\tconst namespacePascal = this.sigToNamespacePascal(namedSig)\n\t\t\tconst { emitPayloadSchema, responsePayloadSchema } = namedSig.signature\n\n\t\t\tif (!schemasByNamespace[namespacePascal]) {\n\t\t\t\tschemasByNamespace[namespacePascal] = []\n\t\t\t}\n\n\t\t\tif (emitPayloadSchema) {\n\t\t\t\tschemasByNamespace[namespacePascal].push({\n\t\t\t\t\tversion: namedSig.version,\n\t\t\t\t\t...emitPayloadSchema,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (responsePayloadSchema) {\n\t\t\t\tschemasByNamespace[namespacePascal].push({\n\t\t\t\t\tversion: namedSig.version,\n\t\t\t\t\t...responsePayloadSchema,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn schemasByNamespace\n\t}\n\n\tprivate sigToNamespacePascal(namedSig: NamedEventSignature) {\n\t\treturn namesUtil.toPascal(namedSig.eventNamespace ?? MERCURY_API_NAMESPACE)\n\t}\n}\n"],"file":"EventTemplateItemBuilder.js"}