@sprucelabs/spruce-cli 14.28.6 → 14.29.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 (125) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/build/__tests__/behavioral/SettingLogTransportsInASkill.test.js +13 -9
  3. package/build/__tests__/behavioral/SettingLogTransportsInASkill.test.js.map +1 -1
  4. package/build/__tests__/behavioral/SyncingEventsOnlyFromDependencies.test.d.ts +1 -1
  5. package/build/__tests__/behavioral/SyncingEventsOnlyFromDependencies.test.js +24 -14
  6. package/build/__tests__/behavioral/SyncingEventsOnlyFromDependencies.test.js.map +1 -1
  7. package/build/__tests__/behavioral/TestingDataStores.test.js +15 -11
  8. package/build/__tests__/behavioral/TestingDataStores.test.js.map +1 -1
  9. package/build/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.js +3 -1
  10. package/build/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.js.map +1 -1
  11. package/build/__tests__/behavioral/events/CreatingAListener.test.d.ts +2 -0
  12. package/build/__tests__/behavioral/events/CreatingAListener.test.js +157 -81
  13. package/build/__tests__/behavioral/events/CreatingAListener.test.js.map +1 -1
  14. package/build/__tests__/behavioral/events/KeepingListenersInSync.test.d.ts +7 -0
  15. package/build/__tests__/behavioral/events/KeepingListenersInSync.test.js +171 -0
  16. package/build/__tests__/behavioral/events/KeepingListenersInSync.test.js.map +1 -0
  17. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.d.ts +1 -0
  18. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.js +53 -21
  19. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.js.map +1 -1
  20. package/build/__tests__/behavioral/skill/UpgradingWithListeners.test.d.ts +5 -0
  21. package/build/__tests__/behavioral/skill/UpgradingWithListeners.test.js +137 -0
  22. package/build/__tests__/behavioral/skill/UpgradingWithListeners.test.js.map +1 -0
  23. package/build/__tests__/behavioral/stores/CreatingADataStore.test.js +4 -1
  24. package/build/__tests__/behavioral/stores/CreatingADataStore.test.js.map +1 -1
  25. package/build/__tests__/behavioral/stores/KeepingDataStoresInSync.test.d.ts +4 -1
  26. package/build/__tests__/behavioral/stores/KeepingDataStoresInSync.test.js +136 -47
  27. package/build/__tests__/behavioral/stores/KeepingDataStoresInSync.test.js.map +1 -1
  28. package/build/__tests__/behavioral/tests/CreatingATest.test.js +14 -10
  29. package/build/__tests__/behavioral/tests/CreatingATest.test.js.map +1 -1
  30. package/build/__tests__/behavioral/views/TestingViewControllers.test.d.ts +1 -0
  31. package/build/__tests__/behavioral/views/TestingViewControllers.test.js +67 -35
  32. package/build/__tests__/behavioral/views/TestingViewControllers.test.js.map +1 -1
  33. package/build/__tests__/implementation/AuthService.test.d.ts +1 -0
  34. package/build/__tests__/implementation/AuthService.test.js +8 -0
  35. package/build/__tests__/implementation/AuthService.test.js.map +1 -1
  36. package/build/__tests__/implementation/EventStore.test.js +3 -1
  37. package/build/__tests__/implementation/EventStore.test.js.map +1 -1
  38. package/build/__tests__/implementation/LintService.test.d.ts +5 -0
  39. package/build/__tests__/implementation/LintService.test.js +130 -0
  40. package/build/__tests__/implementation/LintService.test.js.map +1 -0
  41. package/build/__tests__/implementation/StoreFeature.test.d.ts +4 -0
  42. package/build/__tests__/implementation/StoreFeature.test.js +132 -0
  43. package/build/__tests__/implementation/StoreFeature.test.js.map +1 -0
  44. package/build/errors/SpruceError.js +8 -4
  45. package/build/errors/SpruceError.js.map +1 -1
  46. package/build/features/event/EventFeature.d.ts +2 -2
  47. package/build/features/event/EventFeature.js +53 -13
  48. package/build/features/event/EventFeature.js.map +1 -1
  49. package/build/features/event/actions/ListenAction.d.ts +1 -0
  50. package/build/features/event/actions/ListenAction.js +60 -31
  51. package/build/features/event/actions/ListenAction.js.map +1 -1
  52. package/build/features/event/actions/SyncListenersAction.d.ts +15 -0
  53. package/build/features/event/actions/SyncListenersAction.js +115 -0
  54. package/build/features/event/actions/SyncListenersAction.js.map +1 -0
  55. package/build/features/event/builders/ListenerTemplateItemBuilder.d.ts +8 -0
  56. package/build/features/event/builders/ListenerTemplateItemBuilder.js +65 -0
  57. package/build/features/event/builders/ListenerTemplateItemBuilder.js.map +1 -0
  58. package/build/features/event/stores/EventStore.js +2 -2
  59. package/build/features/event/stores/EventStore.js.map +1 -1
  60. package/build/features/event/stores/ListenerStore.d.ts +9 -0
  61. package/build/features/event/stores/ListenerStore.js +122 -0
  62. package/build/features/event/stores/ListenerStore.js.map +1 -0
  63. package/build/features/event/writers/EventWriter.d.ts +4 -1
  64. package/build/features/event/writers/EventWriter.js +42 -8
  65. package/build/features/event/writers/EventWriter.js.map +1 -1
  66. package/build/features/skill/SkillFeature.js +1 -1
  67. package/build/features/skill/SkillFeature.js.map +1 -1
  68. package/build/features/skill/stores/SkillStore.js +4 -8
  69. package/build/features/skill/stores/SkillStore.js.map +1 -1
  70. package/build/features/store/StoreFeature.d.ts +1 -1
  71. package/build/features/store/StoreFeature.js +16 -11
  72. package/build/features/store/StoreFeature.js.map +1 -1
  73. package/build/services/AuthService.d.ts +4 -1
  74. package/build/services/AuthService.js +15 -4
  75. package/build/services/AuthService.js.map +1 -1
  76. package/build/services/GameService.js +14 -10
  77. package/build/services/GameService.js.map +1 -1
  78. package/build/services/LintService.d.ts +5 -2
  79. package/build/services/LintService.js +137 -92
  80. package/build/services/LintService.js.map +1 -1
  81. package/build/services/ServiceFactory.js +9 -3
  82. package/build/services/ServiceFactory.js.map +1 -1
  83. package/build/stores/StoreFactory.d.ts +2 -0
  84. package/build/stores/StoreFactory.js +4 -1
  85. package/build/stores/StoreFactory.js.map +1 -1
  86. package/build/tests/AbstractCliTest.js +3 -3
  87. package/build/tests/AbstractCliTest.js.map +1 -1
  88. package/build/writers/AbstractWriter.d.ts +0 -3
  89. package/build/writers/AbstractWriter.js +2 -18
  90. package/build/writers/AbstractWriter.js.map +1 -1
  91. package/package.json +30 -28
  92. package/src/__tests__/behavioral/SettingLogTransportsInASkill.test.ts +2 -0
  93. package/src/__tests__/behavioral/SyncingEventsOnlyFromDependencies.test.ts +10 -5
  94. package/src/__tests__/behavioral/TestingDataStores.test.ts +2 -0
  95. package/src/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.ts +1 -0
  96. package/src/__tests__/behavioral/events/CreatingAListener.test.ts +28 -9
  97. package/src/__tests__/behavioral/events/KeepingListenersInSync.test.ts +47 -0
  98. package/src/__tests__/behavioral/events/SkillEmitsBootEvents.test.ts +6 -0
  99. package/src/__tests__/behavioral/skill/UpgradingWithListeners.test.ts +59 -0
  100. package/src/__tests__/behavioral/stores/CreatingADataStore.test.ts +1 -0
  101. package/src/__tests__/behavioral/stores/KeepingDataStoresInSync.test.ts +35 -6
  102. package/src/__tests__/behavioral/tests/CreatingATest.test.ts +2 -0
  103. package/src/__tests__/behavioral/views/TestingViewControllers.test.ts +6 -0
  104. package/src/__tests__/implementation/AuthService.test.ts +6 -0
  105. package/src/__tests__/implementation/EventStore.test.ts +1 -0
  106. package/src/__tests__/implementation/LintService.test.ts +34 -0
  107. package/src/__tests__/implementation/StoreFeature.test.ts +40 -0
  108. package/src/errors/SpruceError.ts +9 -5
  109. package/src/features/event/EventFeature.ts +21 -4
  110. package/src/features/event/actions/ListenAction.ts +9 -3
  111. package/src/features/event/actions/SyncListenersAction.ts +38 -0
  112. package/src/features/event/builders/ListenerTemplateItemBuilder.ts +27 -0
  113. package/src/features/event/stores/EventStore.ts +1 -1
  114. package/src/features/event/stores/ListenerStore.ts +32 -0
  115. package/src/features/event/writers/EventWriter.ts +19 -0
  116. package/src/features/skill/SkillFeature.ts +1 -1
  117. package/src/features/skill/stores/SkillStore.ts +4 -3
  118. package/src/features/store/StoreFeature.ts +7 -4
  119. package/src/services/AuthService.ts +15 -5
  120. package/src/services/GameService.ts +1 -0
  121. package/src/services/LintService.ts +34 -5
  122. package/src/services/ServiceFactory.ts +8 -3
  123. package/src/stores/StoreFactory.ts +3 -0
  124. package/src/tests/AbstractCliTest.ts +2 -2
  125. package/src/writers/AbstractWriter.ts +2 -13
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+
16
+ var _path = _interopRequireDefault(require("path"));
17
+
18
+ var _spruceSkillUtils = require("@sprucelabs/spruce-skill-utils");
19
+
20
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
21
+
22
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
23
+
24
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
25
+
26
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
27
+
28
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
29
+
30
+ var ListenerTemplateItemBuilder = /*#__PURE__*/function () {
31
+ function ListenerTemplateItemBuilder() {
32
+ (0, _classCallCheck2["default"])(this, ListenerTemplateItemBuilder);
33
+ }
34
+
35
+ (0, _createClass2["default"])(ListenerTemplateItemBuilder, [{
36
+ key: "buildTemplateItems",
37
+ value: function buildTemplateItems(options) {
38
+ var destination = _spruceSkillUtils.diskUtil.resolveHashSprucePath(options.cwd, 'events', 'listeners.ts');
39
+
40
+ var listeners = [];
41
+
42
+ var _iterator = _createForOfIteratorHelper(options.listeners),
43
+ _step;
44
+
45
+ try {
46
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
47
+ var match = _step.value;
48
+ listeners.push(_objectSpread(_objectSpread({}, match), {}, {
49
+ path: _path["default"].relative(_path["default"].dirname(destination), match.path).replace('.ts', '')
50
+ }));
51
+ }
52
+ } catch (err) {
53
+ _iterator.e(err);
54
+ } finally {
55
+ _iterator.f();
56
+ }
57
+
58
+ return listeners;
59
+ }
60
+ }]);
61
+ return ListenerTemplateItemBuilder;
62
+ }();
63
+
64
+ exports["default"] = ListenerTemplateItemBuilder;
65
+ //# sourceMappingURL=ListenerTemplateItemBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/event/builders/ListenerTemplateItemBuilder.ts"],"names":["ListenerTemplateItemBuilder","options","destination","diskUtil","resolveHashSprucePath","cwd","listeners","match","push","path","pathUtil","relative","dirname","replace"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;;;;;;;;;;;IAIqBA,2B;;;;;;;WACpB,4BAA0BC,OAA1B,EAA2E;AAC1E,UAAMC,WAAW,GAAGC,2BAASC,qBAAT,CACnBH,OAAO,CAACI,GADW,EAEnB,QAFmB,EAGnB,cAHmB,CAApB;;AAMA,UAAMC,SAAiC,GAAG,EAA1C;;AAP0E,iDAStDL,OAAO,CAACK,SAT8C;AAAA;;AAAA;AAS1E,4DAAuC;AAAA,cAA5BC,KAA4B;AACtCD,UAAAA,SAAS,CAACE,IAAV,iCACID,KADJ;AAECE,YAAAA,IAAI,EAAEC,iBACJC,QADI,CACKD,iBAASE,OAAT,CAAiBV,WAAjB,CADL,EACoCK,KAAK,CAACE,IAD1C,EAEJI,OAFI,CAEI,KAFJ,EAEW,EAFX;AAFP;AAMA;AAhByE;AAAA;AAAA;AAAA;AAAA;;AAkB1E,aAAOP,SAAP;AACA","sourcesContent":["import pathUtil from 'path'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { ListenerTemplateItem } from '@sprucelabs/spruce-templates'\nimport { Listener } from '../stores/ListenerStore'\n\nexport default class ListenerTemplateItemBuilder {\n\tpublic buildTemplateItems(options: { listeners: Listener[]; cwd: string }) {\n\t\tconst destination = diskUtil.resolveHashSprucePath(\n\t\t\toptions.cwd,\n\t\t\t'events',\n\t\t\t'listeners.ts'\n\t\t)\n\n\t\tconst listeners: ListenerTemplateItem[] = []\n\n\t\tfor (const match of options.listeners) {\n\t\t\tlisteners.push({\n\t\t\t\t...match,\n\t\t\t\tpath: pathUtil\n\t\t\t\t\t.relative(pathUtil.dirname(destination), match.path)\n\t\t\t\t\t.replace('.ts', ''),\n\t\t\t})\n\t\t}\n\n\t\treturn listeners\n\t}\n}\n"],"file":"ListenerTemplateItemBuilder.js"}
@@ -109,7 +109,7 @@ var EventStore = /*#__PURE__*/function (_AbstractStore) {
109
109
  key: "fetchEventContracts",
110
110
  value: function () {
111
111
  var _fetchEventContracts = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(options) {
112
- var _ref, localNamespace, didUpdateHandler, namespaces, contracts, error, localContract;
112
+ var _ref, localNamespace, didUpdateHandler, namespaces, contracts, _err$options$response, _err$options$response2, error, localContract;
113
113
 
114
114
  return _regenerator["default"].wrap(function _callee$(_context) {
115
115
  while (1) {
@@ -129,7 +129,7 @@ var EventStore = /*#__PURE__*/function (_AbstractStore) {
129
129
  case 8:
130
130
  _context.prev = 8;
131
131
  _context.t0 = _context["catch"](2);
132
- error = _context.t0.options.responseErrors[0];
132
+ error = (_err$options$response = (_err$options$response2 = _context.t0.options.responseErrors) === null || _err$options$response2 === void 0 ? void 0 : _err$options$response2[0]) !== null && _err$options$response !== void 0 ? _err$options$response : _context.t0;
133
133
  throw error;
134
134
 
135
135
  case 12:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/event/stores/EventStore.ts"],"names":["eventFileNamesImportKeyMap","key","isSchema","EventStore","options","localNamespace","didUpdateHandler","namespaces","fetchRemoteContracts","contracts","error","responseErrors","loadLocalContract","localContract","filterOutLocalEventsFromRemoteContractsMutating","push","errors","join","contractCache","connectToApi","shouldAuthAsCurrentSkill","client","emit","target","results","eventResponseUtil","getFirstResponseOrThrow","remoteContracts","ns","namesUtil","toKebab","contract","sigs","eventContractUtil","getNamedEventSignatures","sig","eventNamespace","eventSignatures","fullyQualifiedEventName","localEventCache","diskUtil","resolvePath","cwd","localMatches","filesByFqenAndEventKey","length","Promise","all","map","match","eventDiskUtil","splitPathToEvent","eventName","version","fqen","eventNameUtil","filename","pathUtil","basename","eventKey","SpruceError","code","brokenProperty","originalError","matches","o","Service","bulkImport","importsInOrder","importsByName","idx","imported","Object","keys","forEach","split","emitPayloadSchema","payloadSchema","emitPayload","targetSchema","emitTarget","responsePayloadSchema","responsePayload","emitPermissionContract","emitPermissions","listenPermissionContract","listenPermissions","cleaned","eventContractCleanerUtil","cleanPayloadsAndPermissions","payload","eventContract","undefined","AbstractStore"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAOA;;AACA;;AAOA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;;;;;;;;;;;AAwBA,IAAMA,0BAA0B,GAAG;AAClC,sBAAoB;AAAEC,IAAAA,GAAG,EAAE,SAAP;AAAkBC,IAAAA,QAAQ,EAAE;AAA5B,GADc;AAElC,4BAA0B;AAAED,IAAAA,GAAG,EAAE,aAAP;AAAsBC,IAAAA,QAAQ,EAAE;AAAhC,GAFQ;AAGlC,2BAAyB;AAAED,IAAAA,GAAG,EAAE,YAAP;AAAqBC,IAAAA,QAAQ,EAAE;AAA/B,GAHS;AAIlC,gCAA8B;AAAED,IAAAA,GAAG,EAAE,iBAAP;AAA0BC,IAAAA,QAAQ,EAAE;AAApC,GAJI;AAKlC,gCAA8B;AAAED,IAAAA,GAAG,EAAE,iBAAP;AAA0BC,IAAAA,QAAQ,EAAE;AAApC,GALI;AAMlC,kCAAgC;AAAED,IAAAA,GAAG,EAAE,mBAAP;AAA4BC,IAAAA,QAAQ,EAAE;AAAtC;AANE,CAAnC;;IASqBC,U;;;;;;;;;;;;;;;6FACN,O;;;;;;;+GASd,iBAAiCC,OAAjC;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,uBAK0DA,OAL1D,aAK0DA,OAL1D,cAK0DA,OAL1D,GAKqE,EALrE,EAKSC,cALT,QAKSA,cALT,EAKyBC,gBALzB,QAKyBA,gBALzB,EAK2CC,UAL3C,QAK2CA,UAL3C;AAOCD,gBAAAA,gBAAgB,SAAhB,IAAAA,gBAAgB,WAAhB,YAAAA,gBAAgB,CAAG,6BAAH,CAAhB;AAPD;AAAA;AAAA,uBAWoB,KAAKE,oBAAL,CAA0BD,UAA1B,CAXpB;;AAAA;AAWEE,gBAAAA,SAXF;AAAA;AAAA;;AAAA;AAAA;AAAA;AAaQC,gBAAAA,KAbR,GAagB,YAAIN,OAAJ,CAAYO,cAAZ,CAA2B,CAA3B,CAbhB;AAAA,sBAcQD,KAdR;;AAAA;AAAA,8BAkBEL,cAlBF;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAmBS,KAAKO,iBAAL,CAAuBP,cAAvB,EAAuCC,gBAAvC,CAnBT;;AAAA;AAAA;;AAAA;AAiBOO,gBAAAA,aAjBP;;AAqBC,oBAAIR,cAAJ,EAAoB;AACnB,uBAAKS,+CAAL,CACCL,SADD,EAECJ,cAFD;AAIA;;AAED,oBAAIQ,aAAJ,EAAmB;AAClBJ,kBAAAA,SAAS,CAACM,IAAV,CAAeF,aAAf;AACA;;AA9BF,iDAgCQ;AACNJ,kBAAAA,SAAS,EAATA,SADM;AAENO,kBAAAA,MAAM,EAAE;AAFF,iBAhCR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;gHAsCA,kBAAmCT,UAAnC;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AACON,gBAAAA,GADP,uBACaM,UADb,aACaA,UADb,uBACaA,UAAU,CAAEU,IAAZ,CAAiB,GAAjB,CADb,+DACsC,GADtC;;AAAA,oBAGMd,UAAU,CAACe,aAAX,CAAyBjB,GAAzB,CAHN;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAIuB,KAAKkB,YAAL,CAAkB;AAAEC,kBAAAA,wBAAwB,EAAE;AAA5B,iBAAlB,CAJvB;;AAAA;AAIQC,gBAAAA,MAJR;AAAA;AAAA,uBAMwBA,MAAM,CAACC,IAAP,CAAY,kCAAZ,EAAgD;AACrEC,kBAAAA,MAAM,EAAE;AACPhB,oBAAAA,UAAU,EAAVA;AADO;AAD6D,iBAAhD,CANxB;;AAAA;AAMQiB,gBAAAA,OANR;AAAA,wCAYwBC,oCAAkBC,uBAAlB,CAA0CF,OAA1C,CAZxB,EAYUf,SAZV,yBAYUA,SAZV;AAcEN,gBAAAA,UAAU,CAACe,aAAX,CAAyBjB,GAAzB,IAAgCQ,SAAhC;;AAdF;AAAA,kDAiBQ,uBAAUN,UAAU,CAACe,aAAX,CAAyBjB,GAAzB,CAAV,CAjBR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAoBA,yDACC0B,eADD,EAECtB,cAFD,EAGE;AACD,UAAMuB,EAAE,GAAGC,4BAAUC,OAAV,CAAkBzB,cAAlB,CAAX;;AADC,iDAGsBsB,eAHtB;AAAA;;AAAA;AAGD,4DAAwC;AAAA,cAA7BI,QAA6B;;AACvC,cAAMC,IAAI,GAAGC,oCAAkBC,uBAAlB,CAA0CH,QAA1C,CAAb;;AADuC,sDAErBC,IAFqB;AAAA;;AAAA;AAEvC,mEAAwB;AAAA,kBAAbG,GAAa;;AACvB,kBAAIA,GAAG,CAACC,cAAJ,KAAuBR,EAA3B,EAA+B;AAC9B,uBAAOG,QAAQ,CAACM,eAAT,CAAyBF,GAAG,CAACG,uBAA7B,CAAP;AACA;AACD;AANsC;AAAA;AAAA;AAAA;AAAA;AAOvC;AAVA;AAAA;AAAA;AAAA;AAAA;AAWD;;;;6GAED,kBACCjC,cADD,EAECC,gBAFD;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,qBAIKH,UAAU,CAACoC,eAJhB;AAAA;AAAA;AAAA;;AAAA,kDAKSpC,UAAU,CAACoC,eALpB;;AAAA;AAAA;AAAA,uBAQ4B,wBAC1BC,2BAASC,WAAT,CACC,KAAKC,GADN,EAEC,KAFD,EAGC,QAHD,EAIC,2BAJD,CAD0B,CAR5B;;AAAA;AAQOC,gBAAAA,YARP;AAiBOf,gBAAAA,EAjBP,GAiBYC,4BAAUC,OAAV,CAAkBzB,cAAlB,CAjBZ;AAkBOgC,gBAAAA,eAlBP,GAkByD,EAlBzD;AAmBOO,gBAAAA,sBAnBP,GAwBO,EAxBP;AA0BCtC,gBAAAA,gBAAgB,SAAhB,IAAAA,gBAAgB,WAAhB,YAAAA,gBAAgB,qBACFqC,YAAY,CAACE,MADX,qCAAhB;AA1BD;AAAA,uBA8BOC,OAAO,CAACC,GAAR,CACLJ,YAAY,CAACK,GAAb;AAAA,4GAAiB,kBAAOC,KAAP;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDAKgBC,gCAAcC,gBAAd,CAA+BF,KAA/B,CALhB,EAKPG,SALO,yBAKPA,SALO,EAKIC,OALJ,yBAKIA,OALJ;AAMfC,4BAAAA,IAAI,GAAGC,gCAActC,IAAd,CAAmB;AACzBmC,8BAAAA,SAAS,EAATA,SADyB;AAEzBC,8BAAAA,OAAO,EAAPA,OAFyB;AAGzBjB,8BAAAA,cAAc,EAAER;AAHS,6BAAnB,CAAP;AAMM4B,4BAAAA,QAZS,GAYEC,iBAASC,QAAT,CAChBT,KADgB,CAZF;AAgBTD,4BAAAA,GAhBS,GAgBHhD,0BAA0B,CAACwD,QAAD,CAhBvB;;AAkBf,gCAAIR,GAAJ,EAAS;AACR;AACAW,8BAAAA,QAAQ,GAAGX,GAAG,CAAC/C,GAAf;AAEA2C,8BAAAA,sBAAsB,CAAC7B,IAAvB,CAA4B;AAC3BuC,gCAAAA,IAAI,EAAJA,IAD2B;AAE3BpD,gCAAAA,QAAQ,EAAE8C,GAAG,CAAC9C,QAFa;AAG3B+C,gCAAAA,KAAK,EAALA,KAH2B;AAI3BU,gCAAAA,QAAQ,EAAEA;AAJiB,+BAA5B;AAMA;;AA5Bc;AAAA;;AAAA;AAAA;AAAA;AAAA,kCA8BT,IAAIC,uBAAJ,CAAgB;AACrBC,8BAAAA,IAAI,EAAE,wBADe;AAErBvB,8BAAAA,uBAAuB,WAAEgB,IAAF,yCAAU,gBAFZ;AAGrBQ,8BAAAA,cAAc,eAAEH,QAAF,iDAAc,uBAHP;AAIrBI,8BAAAA,aAAa;AAJQ,6BAAhB,CA9BS;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAjB;;AAAA;AAAA;AAAA;AAAA,oBADK,CA9BP;;AAAA;AAuEOC,gBAAAA,OAvEP,GAuEiBpB,sBAAsB,CAACI,GAAvB,CAA2B,UAACiB,CAAD;AAAA,yBAAOA,CAAC,CAAChB,KAAT;AAAA,iBAA3B,CAvEjB;AAAA;AAAA,uBAwE+B,KAAKiB,OAAL,CAAa,QAAb,EAAuBC,UAAvB,CAC7BH,OAD6B,CAxE/B;;AAAA;AAwEOI,gBAAAA,cAxEP;AA2EOC,gBAAAA,aA3EP,GA2EoD,EA3EpD;AA6EUC,gBAAAA,GA7EV,GA6EgB,CA7EhB;;AAAA;AAAA,sBA6EmBA,GAAG,GAAG1B,sBAAsB,CAACC,MA7EhD;AAAA;AAAA;AAAA;;AA8EQ0B,gBAAAA,QA9ER,GA8EmBH,cAAc,CAACE,GAAD,CA9EjC;AAAA,wCA+EuC1B,sBAAsB,CAAC0B,GAAD,CA/E7D,EA+EUhB,IA/EV,yBA+EUA,IA/EV,EA+EgBK,QA/EhB,yBA+EgBA,QA/EhB,EA+E0BzD,QA/E1B,yBA+E0BA,QA/E1B;;AAAA,qBAiFMA,QAjFN;AAAA;AAAA;AAAA;;AAAA;AAmFI,4CAAeqE,QAAf;AAnFJ;AAAA;;AAAA;AAAA;AAAA;AAAA,sBAqFU,IAAIX,uBAAJ,CAAgB;AACrBC,kBAAAA,IAAI,EAAE,wBADe;AAErBvB,kBAAAA,uBAAuB,EAAEgB,IAFJ;AAGrBQ,kBAAAA,cAAc,EAAEH,QAHK;AAIrBI,kBAAAA,aAAa;AAJQ,iBAAhB,CArFV;;AAAA;AA8FE,oBAAI,CAACM,aAAa,CAACf,IAAD,CAAlB,EAA0B;AACzBe,kBAAAA,aAAa,CAACf,IAAD,CAAb,GAAsB,EAAtB;AACA,iBAhGH,CAkGE;;;AACAe,gBAAAA,aAAa,CAACf,IAAD,CAAb,CAAoBK,QAApB,IAAgCY,QAAhC;;AAnGF;AA6EwDD,gBAAAA,GAAG,EA7E3D;AAAA;AAAA;;AAAA;AAsGCE,gBAAAA,MAAM,CAACC,IAAP,CAAYJ,aAAZ,EAA2BK,OAA3B,CAAmC,UAACpB,IAAD,EAAU;AAC5C,sBAAMiB,QAAQ,GAAGF,aAAa,CAACf,IAAD,CAA9B;;AACA,6CAAsBC,gCAAcoB,KAAd,CAAoBrB,IAApB,CAAtB;AAAA,sBAAQF,SAAR,wBAAQA,SAAR;;AACAf,kBAAAA,eAAe,CAACiB,IAAD,CAAf;AACCsB,oBAAAA,iBAAiB,EAAE,uDAAgC;AAClDxB,sBAAAA,SAAS,EAATA,SADkD;AAElDyB,sBAAAA,aAAa,EAAEN,QAAQ,CAACO,WAF0B;AAGlDC,sBAAAA,YAAY,EAAER,QAAQ,CAACS;AAH2B,qBAAhC,CADpB;AAMCC,oBAAAA,qBAAqB,EAAEV,QAAQ,CAACW,eANjC;AAOCC,oBAAAA,sBAAsB,EAAEZ,QAAQ,CAACa,eAPlC;AAQCC,oBAAAA,wBAAwB,EAAEd,QAAQ,CAACe;AARpC,qBASIf,QAAQ,CAACnE,OATb;AAWA,iBAdD;AAgBAE,gBAAAA,gBAAgB,SAAhB,IAAAA,gBAAgB,WAAhB,YAAAA,gBAAgB,kBACLkE,MAAM,CAACC,IAAP,CAAYpC,eAAZ,EAA6BQ,MADxB,gCAAhB;;AAtHD,sBA0HK2B,MAAM,CAACC,IAAP,CAAYpC,eAAZ,EAA6BQ,MAA7B,GAAsC,CA1H3C;AAAA;AAAA;AAAA;;AA2HQ0C,gBAAAA,OA3HR,GA2HkBC,+CAAyBC,2BAAzB,CAAqD;AACpEpD,kBAAAA,eAAe,EAAfA;AADoE,iBAArD,CA3HlB;AA+HE,yDAAsBkD,OAAtB;AAEApF,gBAAAA,UAAU,CAACoC,eAAX,GAA6BgD,OAA7B;AAjIF,kDAmISA,OAnIT;;AAAA;AAAA,kDAsIQ,IAtIR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;iHAyIA,kBAAmCnF,OAAnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAGsB,KAAKe,YAAL,CAAkB;AAAEC,kBAAAA,wBAAwB,EAAE;AAA5B,iBAAlB,CAHtB;;AAAA;AAGOC,gBAAAA,MAHP;AAAA;AAAA,uBAKuBA,MAAM,CAACC,IAAP,CAAY,8BAAZ,EAA4C;AACjEoE,kBAAAA,OAAO,EAAE;AACR3D,oBAAAA,QAAQ,EAAE3B,OAAO,CAACuF;AADV;AADwD,iBAA5C,CALvB;;AAAA;AAKOnE,gBAAAA,OALP;;AAWCC,oDAAkBC,uBAAlB,CAA0CF,OAA1C;;AAEArB,gBAAAA,UAAU,CAACe,aAAX,GAA2B,EAA3B;AAbD,kDAeQM,OAfR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;4GAkBA,kBACCpB,OADD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAGsB,KAAKe,YAAL,CAAkB;AAAEC,kBAAAA,wBAAwB,EAAE;AAA5B,iBAAlB,CAHtB;;AAAA;AAGOC,gBAAAA,MAHP;AAAA;AAAA,uBAKuBA,MAAM,CAACC,IAAP,CAAY,gCAAZ,EAA8C;AACnEoE,kBAAAA,OAAO,EAAEtF;AAD0D,iBAA9C,CALvB;;AAAA;AAKOoB,gBAAAA,OALP;;AASCC,oDAAkBC,uBAAlB,CAA0CF,OAA1C;;AAEArB,gBAAAA,UAAU,CAACe,aAAX,GAA2B,EAA3B;;AAXD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WA1OA,sBAA2B;AAC1Bf,MAAAA,UAAU,CAACoC,eAAX,GAA6BqD,SAA7B;AACAzF,MAAAA,UAAU,CAACe,aAAX,GAA2B,EAA3B;AACA;;;EARsC2E,0B;;;iCAAnB1F,U,mBAEkC,E;iCAFlCA,U","sourcesContent":["import pathUtil from 'path'\nimport {\n\tEventContract,\n\tEventSignature,\n\tPermissionContract,\n\tSpruceSchemas,\n\tvalidateEventContract,\n} from '@sprucelabs/mercury-types'\nimport { Schema, validateSchema } from '@sprucelabs/schema'\nimport {\n\teventResponseUtil,\n\teventDiskUtil,\n\teventNameUtil,\n\tbuildEmitTargetAndPayloadSchema,\n\teventContractUtil,\n} from '@sprucelabs/spruce-event-utils'\nimport { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport globby from 'globby'\nimport { cloneDeep } from 'lodash'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractStore from '../../../stores/AbstractStore'\nimport { InternalUpdateHandler } from '../../../types/cli.types'\nimport { eventContractCleanerUtil } from '../../../utilities/eventContractCleaner.utility'\n\nexport interface EventStoreFetchEventContractsResponse {\n\terrors: SpruceError[]\n\tcontracts: EventContract[]\n}\n\ntype Options = Omit<\n\tEventSignature,\n\t| 'responsePayloadSchema'\n\t| 'emitPayloadSchema'\n\t| 'listenPermissionContract'\n\t| 'emitPermissionContract'\n>\n\ninterface EventImport {\n\toptions?: Options\n\temitPayload?: Schema\n\temitTarget?: Schema\n\tresponsePayload?: Schema\n\temitPermissions?: PermissionContract\n\tlistenPermissions?: PermissionContract\n}\n\nconst eventFileNamesImportKeyMap = {\n\t'event.options.ts': { key: 'options', isSchema: false },\n\t'emitPayload.builder.ts': { key: 'emitPayload', isSchema: true },\n\t'emitTarget.builder.ts': { key: 'emitTarget', isSchema: true },\n\t'responsePayload.builder.ts': { key: 'responsePayload', isSchema: true },\n\t'emitPermissions.builder.ts': { key: 'emitPermissions', isSchema: false },\n\t'listenPermissions.builder.ts': { key: 'listenPermissions', isSchema: false },\n}\n\nexport default class EventStore extends AbstractStore {\n\tpublic name = 'event'\n\tprotected static contractCache: Record<string, any> = {}\n\tprivate static localEventCache?: SpruceSchemas.Mercury.v2020_12_25.EventContract\n\n\tpublic static clearCache() {\n\t\tEventStore.localEventCache = undefined\n\t\tEventStore.contractCache = {}\n\t}\n\n\tpublic async fetchEventContracts(options?: {\n\t\tlocalNamespace?: string\n\t\tnamespaces?: string[]\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t}): Promise<EventStoreFetchEventContractsResponse> {\n\t\tconst { localNamespace, didUpdateHandler, namespaces } = options ?? {}\n\n\t\tdidUpdateHandler?.('Pulling remote contracts...')\n\n\t\tlet contracts\n\t\ttry {\n\t\t\tcontracts = await this.fetchRemoteContracts(namespaces)\n\t\t} catch (err: any) {\n\t\t\tconst error = err.options.responseErrors[0]\n\t\t\tthrow error\n\t\t}\n\n\t\tconst localContract =\n\t\t\tlocalNamespace &&\n\t\t\t(await this.loadLocalContract(localNamespace, didUpdateHandler))\n\n\t\tif (localNamespace) {\n\t\t\tthis.filterOutLocalEventsFromRemoteContractsMutating(\n\t\t\t\tcontracts,\n\t\t\t\tlocalNamespace\n\t\t\t)\n\t\t}\n\n\t\tif (localContract) {\n\t\t\tcontracts.push(localContract)\n\t\t}\n\n\t\treturn {\n\t\t\tcontracts,\n\t\t\terrors: [],\n\t\t}\n\t}\n\n\tprivate async fetchRemoteContracts(namespaces?: string[]) {\n\t\tconst key = namespaces?.join('|') ?? '_'\n\n\t\tif (!EventStore.contractCache[key]) {\n\t\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\n\t\t\tconst results = await client.emit('get-event-contracts::v2020_12_25', {\n\t\t\t\ttarget: {\n\t\t\t\t\tnamespaces,\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tconst { contracts } = eventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\t\tEventStore.contractCache[key] = contracts\n\t\t}\n\n\t\treturn cloneDeep(EventStore.contractCache[key])\n\t}\n\n\tprivate filterOutLocalEventsFromRemoteContractsMutating(\n\t\tremoteContracts: EventContract[],\n\t\tlocalNamespace: string\n\t) {\n\t\tconst ns = namesUtil.toKebab(localNamespace)\n\n\t\tfor (const contract of remoteContracts) {\n\t\t\tconst sigs = eventContractUtil.getNamedEventSignatures(contract)\n\t\t\tfor (const sig of sigs) {\n\t\t\t\tif (sig.eventNamespace === ns) {\n\t\t\t\t\tdelete contract.eventSignatures[sig.fullyQualifiedEventName]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async loadLocalContract(\n\t\tlocalNamespace: string,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t): Promise<EventContract | null> {\n\t\tif (EventStore.localEventCache) {\n\t\t\treturn EventStore.localEventCache\n\t\t}\n\n\t\tconst localMatches = await globby(\n\t\t\tdiskUtil.resolvePath(\n\t\t\t\tthis.cwd,\n\t\t\t\t'src',\n\t\t\t\t'events',\n\t\t\t\t'**/*.(builder|options).ts'\n\t\t\t)\n\t\t)\n\n\t\tconst ns = namesUtil.toKebab(localNamespace)\n\t\tconst eventSignatures: Record<string, EventSignature> = {}\n\t\tconst filesByFqenAndEventKey: {\n\t\t\tfqen: string\n\t\t\tisSchema: boolean\n\t\t\tmatch: string\n\t\t\teventKey: string\n\t\t}[] = []\n\n\t\tdidUpdateHandler?.(\n\t\t\t`Importing ${localMatches.length} local event signature files...`\n\t\t)\n\n\t\tawait Promise.all(\n\t\t\tlocalMatches.map(async (match) => {\n\t\t\t\tlet fqen: string | undefined\n\t\t\t\tlet eventKey: keyof EventImport | undefined\n\n\t\t\t\ttry {\n\t\t\t\t\tconst { eventName, version } = eventDiskUtil.splitPathToEvent(match)\n\t\t\t\t\tfqen = eventNameUtil.join({\n\t\t\t\t\t\teventName,\n\t\t\t\t\t\tversion,\n\t\t\t\t\t\teventNamespace: ns,\n\t\t\t\t\t})\n\n\t\t\t\t\tconst filename = pathUtil.basename(\n\t\t\t\t\t\tmatch\n\t\t\t\t\t) as keyof typeof eventFileNamesImportKeyMap\n\n\t\t\t\t\tconst map = eventFileNamesImportKeyMap[filename]\n\n\t\t\t\t\tif (map) {\n\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\teventKey = map.key\n\n\t\t\t\t\t\tfilesByFqenAndEventKey.push({\n\t\t\t\t\t\t\tfqen,\n\t\t\t\t\t\t\tisSchema: map.isSchema,\n\t\t\t\t\t\t\tmatch,\n\t\t\t\t\t\t\teventKey: eventKey as string,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t} catch (err: any) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'INVALID_EVENT_CONTRACT',\n\t\t\t\t\t\tfullyQualifiedEventName: fqen ?? 'Bad event name',\n\t\t\t\t\t\tbrokenProperty: eventKey ?? '*** major failure ***',\n\t\t\t\t\t\toriginalError: err,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t)\n\n\t\tconst matches = filesByFqenAndEventKey.map((o) => o.match)\n\t\tconst importsInOrder = (await this.Service('import').bulkImport(\n\t\t\tmatches\n\t\t)) as Record<string, any>[]\n\t\tconst importsByName: Record<string, EventImport> = {}\n\n\t\tfor (let idx = 0; idx < filesByFqenAndEventKey.length; idx++) {\n\t\t\tconst imported = importsInOrder[idx]\n\t\t\tconst { fqen, eventKey, isSchema } = filesByFqenAndEventKey[idx]\n\n\t\t\tif (isSchema) {\n\t\t\t\ttry {\n\t\t\t\t\tvalidateSchema(imported)\n\t\t\t\t} catch (err: any) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'INVALID_EVENT_CONTRACT',\n\t\t\t\t\t\tfullyQualifiedEventName: fqen,\n\t\t\t\t\t\tbrokenProperty: eventKey,\n\t\t\t\t\t\toriginalError: err,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!importsByName[fqen]) {\n\t\t\t\timportsByName[fqen] = {}\n\t\t\t}\n\n\t\t\t//@ts-ignore\n\t\t\timportsByName[fqen][eventKey] = imported\n\t\t}\n\n\t\tObject.keys(importsByName).forEach((fqen) => {\n\t\t\tconst imported = importsByName[fqen]\n\t\t\tconst { eventName } = eventNameUtil.split(fqen)\n\t\t\teventSignatures[fqen] = {\n\t\t\t\temitPayloadSchema: buildEmitTargetAndPayloadSchema({\n\t\t\t\t\teventName,\n\t\t\t\t\tpayloadSchema: imported.emitPayload,\n\t\t\t\t\ttargetSchema: imported.emitTarget,\n\t\t\t\t}),\n\t\t\t\tresponsePayloadSchema: imported.responsePayload,\n\t\t\t\temitPermissionContract: imported.emitPermissions,\n\t\t\t\tlistenPermissionContract: imported.listenPermissions,\n\t\t\t\t...imported.options,\n\t\t\t}\n\t\t})\n\n\t\tdidUpdateHandler?.(\n\t\t\t`Loaded ${Object.keys(eventSignatures).length} local event signatures...`\n\t\t)\n\n\t\tif (Object.keys(eventSignatures).length > 0) {\n\t\t\tconst cleaned = eventContractCleanerUtil.cleanPayloadsAndPermissions({\n\t\t\t\teventSignatures,\n\t\t\t})\n\n\t\t\tvalidateEventContract(cleaned)\n\n\t\t\tEventStore.localEventCache = cleaned\n\n\t\t\treturn cleaned\n\t\t}\n\n\t\treturn null\n\t}\n\n\tpublic async registerEventContract(options: {\n\t\teventContract: EventContract\n\t}) {\n\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\n\t\tconst results = await client.emit('register-events::v2020_12_25', {\n\t\t\tpayload: {\n\t\t\t\tcontract: options.eventContract,\n\t\t\t},\n\t\t})\n\n\t\teventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\tEventStore.contractCache = {}\n\n\t\treturn results\n\t}\n\n\tpublic async unRegisterEvents(\n\t\toptions: SpruceSchemas.Mercury.v2020_12_25.UnregisterEventsEmitPayload\n\t) {\n\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\n\t\tconst results = await client.emit('unregister-events::v2020_12_25', {\n\t\t\tpayload: options,\n\t\t})\n\n\t\teventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\tEventStore.contractCache = {}\n\t}\n}\n"],"file":"EventStore.js"}
1
+ {"version":3,"sources":["../../../../src/features/event/stores/EventStore.ts"],"names":["eventFileNamesImportKeyMap","key","isSchema","EventStore","options","localNamespace","didUpdateHandler","namespaces","fetchRemoteContracts","contracts","error","responseErrors","loadLocalContract","localContract","filterOutLocalEventsFromRemoteContractsMutating","push","errors","join","contractCache","connectToApi","shouldAuthAsCurrentSkill","client","emit","target","results","eventResponseUtil","getFirstResponseOrThrow","remoteContracts","ns","namesUtil","toKebab","contract","sigs","eventContractUtil","getNamedEventSignatures","sig","eventNamespace","eventSignatures","fullyQualifiedEventName","localEventCache","diskUtil","resolvePath","cwd","localMatches","filesByFqenAndEventKey","length","Promise","all","map","match","eventDiskUtil","splitPathToEvent","eventName","version","fqen","eventNameUtil","filename","pathUtil","basename","eventKey","SpruceError","code","brokenProperty","originalError","matches","o","Service","bulkImport","importsInOrder","importsByName","idx","imported","Object","keys","forEach","split","emitPayloadSchema","payloadSchema","emitPayload","targetSchema","emitTarget","responsePayloadSchema","responsePayload","emitPermissionContract","emitPermissions","listenPermissionContract","listenPermissions","cleaned","eventContractCleanerUtil","cleanPayloadsAndPermissions","payload","eventContract","undefined","AbstractStore"],"mappings":"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","sourcesContent":["import pathUtil from 'path'\nimport {\n\tEventContract,\n\tEventSignature,\n\tPermissionContract,\n\tSpruceSchemas,\n\tvalidateEventContract,\n} from '@sprucelabs/mercury-types'\nimport { Schema, validateSchema } from '@sprucelabs/schema'\nimport {\n\teventResponseUtil,\n\teventDiskUtil,\n\teventNameUtil,\n\tbuildEmitTargetAndPayloadSchema,\n\teventContractUtil,\n} from '@sprucelabs/spruce-event-utils'\nimport { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport globby from 'globby'\nimport { cloneDeep } from 'lodash'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractStore from '../../../stores/AbstractStore'\nimport { InternalUpdateHandler } from '../../../types/cli.types'\nimport { eventContractCleanerUtil } from '../../../utilities/eventContractCleaner.utility'\n\nexport interface EventStoreFetchEventContractsResponse {\n\terrors: SpruceError[]\n\tcontracts: EventContract[]\n}\n\ntype Options = Omit<\n\tEventSignature,\n\t| 'responsePayloadSchema'\n\t| 'emitPayloadSchema'\n\t| 'listenPermissionContract'\n\t| 'emitPermissionContract'\n>\n\ninterface EventImport {\n\toptions?: Options\n\temitPayload?: Schema\n\temitTarget?: Schema\n\tresponsePayload?: Schema\n\temitPermissions?: PermissionContract\n\tlistenPermissions?: PermissionContract\n}\n\nconst eventFileNamesImportKeyMap = {\n\t'event.options.ts': { key: 'options', isSchema: false },\n\t'emitPayload.builder.ts': { key: 'emitPayload', isSchema: true },\n\t'emitTarget.builder.ts': { key: 'emitTarget', isSchema: true },\n\t'responsePayload.builder.ts': { key: 'responsePayload', isSchema: true },\n\t'emitPermissions.builder.ts': { key: 'emitPermissions', isSchema: false },\n\t'listenPermissions.builder.ts': { key: 'listenPermissions', isSchema: false },\n}\n\nexport default class EventStore extends AbstractStore {\n\tpublic name = 'event'\n\tprotected static contractCache: Record<string, any> = {}\n\tprivate static localEventCache?: SpruceSchemas.Mercury.v2020_12_25.EventContract\n\n\tpublic static clearCache() {\n\t\tEventStore.localEventCache = undefined\n\t\tEventStore.contractCache = {}\n\t}\n\n\tpublic async fetchEventContracts(options?: {\n\t\tlocalNamespace?: string\n\t\tnamespaces?: string[]\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t}): Promise<EventStoreFetchEventContractsResponse> {\n\t\tconst { localNamespace, didUpdateHandler, namespaces } = options ?? {}\n\n\t\tdidUpdateHandler?.('Pulling remote contracts...')\n\n\t\tlet contracts\n\t\ttry {\n\t\t\tcontracts = await this.fetchRemoteContracts(namespaces)\n\t\t} catch (err: any) {\n\t\t\tconst error = err.options.responseErrors?.[0] ?? err\n\t\t\tthrow error\n\t\t}\n\n\t\tconst localContract =\n\t\t\tlocalNamespace &&\n\t\t\t(await this.loadLocalContract(localNamespace, didUpdateHandler))\n\n\t\tif (localNamespace) {\n\t\t\tthis.filterOutLocalEventsFromRemoteContractsMutating(\n\t\t\t\tcontracts,\n\t\t\t\tlocalNamespace\n\t\t\t)\n\t\t}\n\n\t\tif (localContract) {\n\t\t\tcontracts.push(localContract)\n\t\t}\n\n\t\treturn {\n\t\t\tcontracts,\n\t\t\terrors: [],\n\t\t}\n\t}\n\n\tprivate async fetchRemoteContracts(namespaces?: string[]) {\n\t\tconst key = namespaces?.join('|') ?? '_'\n\n\t\tif (!EventStore.contractCache[key]) {\n\t\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\n\t\t\tconst results = await client.emit('get-event-contracts::v2020_12_25', {\n\t\t\t\ttarget: {\n\t\t\t\t\tnamespaces,\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tconst { contracts } = eventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\t\tEventStore.contractCache[key] = contracts\n\t\t}\n\n\t\treturn cloneDeep(EventStore.contractCache[key])\n\t}\n\n\tprivate filterOutLocalEventsFromRemoteContractsMutating(\n\t\tremoteContracts: EventContract[],\n\t\tlocalNamespace: string\n\t) {\n\t\tconst ns = namesUtil.toKebab(localNamespace)\n\n\t\tfor (const contract of remoteContracts) {\n\t\t\tconst sigs = eventContractUtil.getNamedEventSignatures(contract)\n\t\t\tfor (const sig of sigs) {\n\t\t\t\tif (sig.eventNamespace === ns) {\n\t\t\t\t\tdelete contract.eventSignatures[sig.fullyQualifiedEventName]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async loadLocalContract(\n\t\tlocalNamespace: string,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t): Promise<EventContract | null> {\n\t\tif (EventStore.localEventCache) {\n\t\t\treturn EventStore.localEventCache\n\t\t}\n\n\t\tconst localMatches = await globby(\n\t\t\tdiskUtil.resolvePath(\n\t\t\t\tthis.cwd,\n\t\t\t\t'src',\n\t\t\t\t'events',\n\t\t\t\t'**/*.(builder|options).ts'\n\t\t\t)\n\t\t)\n\n\t\tconst ns = namesUtil.toKebab(localNamespace)\n\t\tconst eventSignatures: Record<string, EventSignature> = {}\n\t\tconst filesByFqenAndEventKey: {\n\t\t\tfqen: string\n\t\t\tisSchema: boolean\n\t\t\tmatch: string\n\t\t\teventKey: string\n\t\t}[] = []\n\n\t\tdidUpdateHandler?.(\n\t\t\t`Importing ${localMatches.length} local event signature files...`\n\t\t)\n\n\t\tawait Promise.all(\n\t\t\tlocalMatches.map(async (match) => {\n\t\t\t\tlet fqen: string | undefined\n\t\t\t\tlet eventKey: keyof EventImport | undefined\n\n\t\t\t\ttry {\n\t\t\t\t\tconst { eventName, version } = eventDiskUtil.splitPathToEvent(match)\n\t\t\t\t\tfqen = eventNameUtil.join({\n\t\t\t\t\t\teventName,\n\t\t\t\t\t\tversion,\n\t\t\t\t\t\teventNamespace: ns,\n\t\t\t\t\t})\n\n\t\t\t\t\tconst filename = pathUtil.basename(\n\t\t\t\t\t\tmatch\n\t\t\t\t\t) as keyof typeof eventFileNamesImportKeyMap\n\n\t\t\t\t\tconst map = eventFileNamesImportKeyMap[filename]\n\n\t\t\t\t\tif (map) {\n\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\teventKey = map.key\n\n\t\t\t\t\t\tfilesByFqenAndEventKey.push({\n\t\t\t\t\t\t\tfqen,\n\t\t\t\t\t\t\tisSchema: map.isSchema,\n\t\t\t\t\t\t\tmatch,\n\t\t\t\t\t\t\teventKey: eventKey as string,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t} catch (err: any) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'INVALID_EVENT_CONTRACT',\n\t\t\t\t\t\tfullyQualifiedEventName: fqen ?? 'Bad event name',\n\t\t\t\t\t\tbrokenProperty: eventKey ?? '*** major failure ***',\n\t\t\t\t\t\toriginalError: err,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t)\n\n\t\tconst matches = filesByFqenAndEventKey.map((o) => o.match)\n\t\tconst importsInOrder = (await this.Service('import').bulkImport(\n\t\t\tmatches\n\t\t)) as Record<string, any>[]\n\t\tconst importsByName: Record<string, EventImport> = {}\n\n\t\tfor (let idx = 0; idx < filesByFqenAndEventKey.length; idx++) {\n\t\t\tconst imported = importsInOrder[idx]\n\t\t\tconst { fqen, eventKey, isSchema } = filesByFqenAndEventKey[idx]\n\n\t\t\tif (isSchema) {\n\t\t\t\ttry {\n\t\t\t\t\tvalidateSchema(imported)\n\t\t\t\t} catch (err: any) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'INVALID_EVENT_CONTRACT',\n\t\t\t\t\t\tfullyQualifiedEventName: fqen,\n\t\t\t\t\t\tbrokenProperty: eventKey,\n\t\t\t\t\t\toriginalError: err,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!importsByName[fqen]) {\n\t\t\t\timportsByName[fqen] = {}\n\t\t\t}\n\n\t\t\t//@ts-ignore\n\t\t\timportsByName[fqen][eventKey] = imported\n\t\t}\n\n\t\tObject.keys(importsByName).forEach((fqen) => {\n\t\t\tconst imported = importsByName[fqen]\n\t\t\tconst { eventName } = eventNameUtil.split(fqen)\n\t\t\teventSignatures[fqen] = {\n\t\t\t\temitPayloadSchema: buildEmitTargetAndPayloadSchema({\n\t\t\t\t\teventName,\n\t\t\t\t\tpayloadSchema: imported.emitPayload,\n\t\t\t\t\ttargetSchema: imported.emitTarget,\n\t\t\t\t}),\n\t\t\t\tresponsePayloadSchema: imported.responsePayload,\n\t\t\t\temitPermissionContract: imported.emitPermissions,\n\t\t\t\tlistenPermissionContract: imported.listenPermissions,\n\t\t\t\t...imported.options,\n\t\t\t}\n\t\t})\n\n\t\tdidUpdateHandler?.(\n\t\t\t`Loaded ${Object.keys(eventSignatures).length} local event signatures...`\n\t\t)\n\n\t\tif (Object.keys(eventSignatures).length > 0) {\n\t\t\tconst cleaned = eventContractCleanerUtil.cleanPayloadsAndPermissions({\n\t\t\t\teventSignatures,\n\t\t\t})\n\n\t\t\tvalidateEventContract(cleaned)\n\n\t\t\tEventStore.localEventCache = cleaned\n\n\t\t\treturn cleaned\n\t\t}\n\n\t\treturn null\n\t}\n\n\tpublic async registerEventContract(options: {\n\t\teventContract: EventContract\n\t}) {\n\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\n\t\tconst results = await client.emit('register-events::v2020_12_25', {\n\t\t\tpayload: {\n\t\t\t\tcontract: options.eventContract,\n\t\t\t},\n\t\t})\n\n\t\teventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\tEventStore.contractCache = {}\n\n\t\treturn results\n\t}\n\n\tpublic async unRegisterEvents(\n\t\toptions: SpruceSchemas.Mercury.v2020_12_25.UnregisterEventsEmitPayload\n\t) {\n\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\n\t\tconst results = await client.emit('unregister-events::v2020_12_25', {\n\t\t\tpayload: options,\n\t\t})\n\n\t\teventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\tEventStore.contractCache = {}\n\t}\n}\n"],"file":"EventStore.js"}
@@ -0,0 +1,9 @@
1
+ import { ListenerTemplateItem } from '@sprucelabs/spruce-templates';
2
+ import AbstractStore from '../../../stores/AbstractStore';
3
+ export declare type Listener = ListenerTemplateItem & {
4
+ path: string;
5
+ };
6
+ export default class ListenerStore extends AbstractStore {
7
+ name: string;
8
+ loadListeners(): Promise<Listener[]>;
9
+ }
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
+
16
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
+
18
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
19
+
20
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
+
22
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
+
24
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
+
26
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
+
28
+ var _spruceEventUtils = require("@sprucelabs/spruce-event-utils");
29
+
30
+ var _spruceSkillUtils = require("@sprucelabs/spruce-skill-utils");
31
+
32
+ var _globby = _interopRequireDefault(require("globby"));
33
+
34
+ var _AbstractStore2 = _interopRequireDefault(require("../../../stores/AbstractStore"));
35
+
36
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
37
+
38
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
39
+
40
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
41
+
42
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
43
+
44
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
45
+
46
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
47
+
48
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
49
+
50
+ var ListenerStore = /*#__PURE__*/function (_AbstractStore) {
51
+ (0, _inherits2["default"])(ListenerStore, _AbstractStore);
52
+
53
+ var _super = _createSuper(ListenerStore);
54
+
55
+ function ListenerStore() {
56
+ var _this;
57
+
58
+ (0, _classCallCheck2["default"])(this, ListenerStore);
59
+
60
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
61
+ args[_key] = arguments[_key];
62
+ }
63
+
64
+ _this = _super.call.apply(_super, [this].concat(args));
65
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "name", 'listener');
66
+ return _this;
67
+ }
68
+
69
+ (0, _createClass2["default"])(ListenerStore, [{
70
+ key: "loadListeners",
71
+ value: function () {
72
+ var _loadListeners = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
73
+ var matches, listeners, _iterator, _step, match, listener;
74
+
75
+ return _regenerator["default"].wrap(function _callee$(_context) {
76
+ while (1) {
77
+ switch (_context.prev = _context.next) {
78
+ case 0:
79
+ _context.next = 2;
80
+ return (0, _globby["default"])(_spruceSkillUtils.diskUtil.resolvePath(this.cwd, 'src', 'listeners', '**/*.listener.ts'));
81
+
82
+ case 2:
83
+ matches = _context.sent;
84
+ listeners = [];
85
+ _iterator = _createForOfIteratorHelper(matches);
86
+
87
+ try {
88
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
89
+ match = _step.value;
90
+ listener = _spruceEventUtils.eventDiskUtil.splitPathToListener(match);
91
+ listeners.push(_objectSpread(_objectSpread({}, listener), {}, {
92
+ path: match
93
+ }));
94
+ }
95
+ } catch (err) {
96
+ _iterator.e(err);
97
+ } finally {
98
+ _iterator.f();
99
+ }
100
+
101
+ return _context.abrupt("return", listeners);
102
+
103
+ case 7:
104
+ case "end":
105
+ return _context.stop();
106
+ }
107
+ }
108
+ }, _callee, this);
109
+ }));
110
+
111
+ function loadListeners() {
112
+ return _loadListeners.apply(this, arguments);
113
+ }
114
+
115
+ return loadListeners;
116
+ }()
117
+ }]);
118
+ return ListenerStore;
119
+ }(_AbstractStore2["default"]);
120
+
121
+ exports["default"] = ListenerStore;
122
+ //# sourceMappingURL=ListenerStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/event/stores/ListenerStore.ts"],"names":["ListenerStore","diskUtil","resolvePath","cwd","matches","listeners","match","listener","eventDiskUtil","splitPathToListener","push","path","AbstractStore"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;;;;;;;;;;;;;IAMqBA,a;;;;;;;;;;;;;;;6FACN,U;;;;;;;yGAEd;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACuB,wBACrBC,2BAASC,WAAT,CAAqB,KAAKC,GAA1B,EAA+B,KAA/B,EAAsC,WAAtC,EAAmD,kBAAnD,CADqB,CADvB;;AAAA;AACOC,gBAAAA,OADP;AAKOC,gBAAAA,SALP,GAK+B,EAL/B;AAAA,uDAOqBD,OAPrB;;AAAA;AAOC,sEAA6B;AAAlBE,oBAAAA,KAAkB;AACtBC,oBAAAA,QADsB,GACXC,gCAAcC,mBAAd,CAAkCH,KAAlC,CADW;AAG5BD,oBAAAA,SAAS,CAACK,IAAV,iCACIH,QADJ;AAECI,sBAAAA,IAAI,EAAEL;AAFP;AAIA;AAdF;AAAA;AAAA;AAAA;AAAA;;AAAA,iDAgBQD,SAhBR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAH0CO,0B","sourcesContent":["import { eventDiskUtil } from '@sprucelabs/spruce-event-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { ListenerTemplateItem } from '@sprucelabs/spruce-templates'\nimport globby from 'globby'\nimport AbstractStore from '../../../stores/AbstractStore'\n\nexport type Listener = ListenerTemplateItem & {\n\tpath: string\n}\n\nexport default class ListenerStore extends AbstractStore {\n\tpublic name = 'listener'\n\n\tpublic async loadListeners() {\n\t\tconst matches = await globby(\n\t\t\tdiskUtil.resolvePath(this.cwd, 'src', 'listeners', '**/*.listener.ts')\n\t\t)\n\n\t\tconst listeners: Listener[] = []\n\n\t\tfor (const match of matches) {\n\t\t\tconst listener = eventDiskUtil.splitPathToListener(match)\n\n\t\t\tlisteners.push({\n\t\t\t\t...listener,\n\t\t\t\tpath: match,\n\t\t\t})\n\t\t}\n\n\t\treturn listeners\n\t}\n}\n"],"file":"ListenerStore.js"}
@@ -1,5 +1,5 @@
1
1
  import { SchemaTemplateItem } from '@sprucelabs/schema';
2
- import { EventContractTemplateItem, EventListenerOptions } from '@sprucelabs/spruce-templates';
2
+ import { EventContractTemplateItem, EventListenerOptions, ListenerTemplateItem } from '@sprucelabs/spruce-templates';
3
3
  import AbstractWriter from '../../../writers/AbstractWriter';
4
4
  export default class EventWriter extends AbstractWriter {
5
5
  writeContracts(destinationDir: string, options: {
@@ -17,6 +17,9 @@ export default class EventWriter extends AbstractWriter {
17
17
  schemaTypesLookupDir: string;
18
18
  contractDestinationDir: string;
19
19
  }): Promise<import("../../../writers/AbstractWriter").WriteResults>;
20
+ writeListenerMap(destinationDir: string, options: {
21
+ listeners: ListenerTemplateItem[];
22
+ }): Promise<import("../../../writers/AbstractWriter").WriteResults>;
20
23
  writeEvent(destinationDir: string, options: {
21
24
  nameCamel: string;
22
25
  nameKebab: string;
@@ -242,15 +242,49 @@ var EventWriter = /*#__PURE__*/function (_AbstractWriter) {
242
242
 
243
243
  return writeListener;
244
244
  }()
245
+ }, {
246
+ key: "writeListenerMap",
247
+ value: function () {
248
+ var _writeListenerMap = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(destinationDir, options) {
249
+ var destination, contents, results;
250
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
251
+ while (1) {
252
+ switch (_context5.prev = _context5.next) {
253
+ case 0:
254
+ destination = _spruceSkillUtils.diskUtil.resolvePath(destinationDir, 'listeners.ts');
255
+ contents = this.templates.listeners({
256
+ listeners: options.listeners
257
+ });
258
+ _context5.next = 4;
259
+ return this.writeFileIfChangedMixinResults(destination, contents, 'An object holding all your data stores for easy import!');
260
+
261
+ case 4:
262
+ results = _context5.sent;
263
+ return _context5.abrupt("return", results);
264
+
265
+ case 6:
266
+ case "end":
267
+ return _context5.stop();
268
+ }
269
+ }
270
+ }, _callee5, this);
271
+ }));
272
+
273
+ function writeListenerMap(_x7, _x8) {
274
+ return _writeListenerMap.apply(this, arguments);
275
+ }
276
+
277
+ return writeListenerMap;
278
+ }()
245
279
  }, {
246
280
  key: "writeEvent",
247
281
  value: function () {
248
- var _writeEvent = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(destinationDir, options) {
282
+ var _writeEvent = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(destinationDir, options) {
249
283
  var version, nameKebab, nameCamel, nameReadable, _options$isGlobal, isGlobal, templates, files, _i, _templates, file, destination, contents;
250
284
 
251
- return _regenerator["default"].wrap(function _callee5$(_context5) {
285
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
252
286
  while (1) {
253
- switch (_context5.prev = _context5.next) {
287
+ switch (_context6.prev = _context6.next) {
254
288
  case 0:
255
289
  version = options.version, nameKebab = options.nameKebab, nameCamel = options.nameCamel, nameReadable = options.nameReadable, _options$isGlobal = options.isGlobal, isGlobal = _options$isGlobal === void 0 ? false : _options$isGlobal;
256
290
  templates = [{
@@ -315,21 +349,21 @@ var EventWriter = /*#__PURE__*/function (_AbstractWriter) {
315
349
  }));
316
350
  }
317
351
 
318
- _context5.next = 6;
352
+ _context6.next = 6;
319
353
  return this.lint(destinationDir);
320
354
 
321
355
  case 6:
322
- return _context5.abrupt("return", files);
356
+ return _context6.abrupt("return", files);
323
357
 
324
358
  case 7:
325
359
  case "end":
326
- return _context5.stop();
360
+ return _context6.stop();
327
361
  }
328
362
  }
329
- }, _callee5, this);
363
+ }, _callee6, this);
330
364
  }));
331
365
 
332
- function writeEvent(_x7, _x8) {
366
+ function writeEvent(_x9, _x10) {
333
367
  return _writeEvent.apply(this, arguments);
334
368
  }
335
369
 
@@ -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","nameKebab","nameCamel","nameReadable","isGlobal","templateMethod","name","action","description","context","files","file","destination","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} 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 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","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"}
@@ -354,7 +354,7 @@ var SkillFeature = /*#__PURE__*/function (_AbstractFeature) {
354
354
 
355
355
  updater = new _Updater["default"](this, this.emitter);
356
356
  _context6.next = 8;
357
- return updater.updateFiles(upgradeOptions);
357
+ return updater.updateFiles(upgradeOptions !== null && upgradeOptions !== void 0 ? upgradeOptions : {});
358
358
 
359
359
  case 8:
360
360
  files = _context6.sent;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/features/skill/SkillFeature.ts"],"names":["SkillFeature","options","name","version","isDev","universalDevDependencies","skillFeatureSchema","diskUtil","resolvePath","__dirname","node","yarn","boot","health","universalScripts","universalFileDescriptions","path","description","shouldOverwriteWhenChanged","emitter","on","handleRegisterAbstractTestClasses","bind","handleWillExecute","abstractClasses","label","featureCode","install","files","cwd","resolveDestination","destination","Store","setCurrentSkillsNamespace","doesDirExist","createDir","skillGenerator","Writer","writeSkill","installScripts","setEngines","env","Service","set","scriptUpdater","ScriptUpdater","FromFeature","update","pkg","engines","get","all","value","actionCode","upgradeOptions","featureInstaller","isInstalled","updater","Updater","updateFiles","AbstractFeature"],"mappings":"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","sourcesContent":["import { SchemaValues, validateSchemaValues } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport skillFeatureSchema from '#spruce/schemas/spruceCli/v2020_07_22/skillFeature.schema'\nimport { FileDescription, NpmPackage } from '../../types/cli.types'\nimport ScriptUpdater from '../../updaters/ScriptUpdater'\nimport AbstractFeature, { FeatureOptions } from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\nimport universalDevDependencies from '../universalDevDependencies'\nimport universalFileDescriptions from '../universalFileDescriptions'\nimport universalScripts from '../universalScripts'\nimport Updater from './updaters/Updater'\n\ntype SkillFeatureOptionsSchema =\n\tSpruceSchemas.SpruceCli.v2020_07_22.SkillFeatureSchema\ntype SkillFeatureOptions = SpruceSchemas.SpruceCli.v2020_07_22.SkillFeature\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tskill: SkillFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\tskill: SchemaValues<SkillFeatureOptionsSchema>\n\t}\n}\n\ntype UpgradeOptions = SpruceSchemas.SpruceCli.v2020_07_22.UpgradeSkillOptions\n\nexport default class SkillFeature<\n\tS extends SkillFeatureOptionsSchema = SkillFeatureOptionsSchema\n> extends AbstractFeature<S> {\n\tpublic nameReadable = 'Skill'\n\tpublic code: FeatureCode = 'skill'\n\tpublic description = 'The scaffolding needed to run a Skill'\n\tpublic readonly installOrderWeight = 100\n\n\tpublic packageDependencies: NpmPackage[] = [\n\t\t{ name: '@sprucelabs/error' },\n\t\t{ name: '@sprucelabs/spruce-skill-utils' },\n\t\t{ name: '@sprucelabs/spruce-skill-booter' },\n\t\t{ name: '@sprucelabs/spruce-event-utils' },\n\t\t{ name: '@sprucelabs/spruce-event-plugin' },\n\t\t{ name: '@sprucelabs/spruce-core-schemas' },\n\t\t{ name: 'dotenv' },\n\t\t{ name: 'globby', version: '^11.0.4' },\n\t\t{\n\t\t\tname: '@sprucelabs/mercury-types',\n\t\t},\n\t\t{ name: 'tsconfig-paths', isDev: true },\n\t\t{ name: 'ts-node', isDev: true },\n\t\t...universalDevDependencies,\n\t]\n\n\tpublic optionsSchema = skillFeatureSchema as S\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\tprivate engines = {\n\t\tnode: '16.x',\n\t\tyarn: '1.x',\n\t}\n\tpublic scripts = {\n\t\tboot: 'node build/index',\n\t\t'boot.local':\n\t\t\t'node -r ts-node/register -r tsconfig-paths/register ./src/index',\n\n\t\thealth: 'yarn boot --health',\n\t\t'health.local': 'yarn boot.local --health',\n\n\t\t...universalScripts,\n\t}\n\n\tpublic readonly fileDescriptions: FileDescription[] = [\n\t\t...universalFileDescriptions,\n\t\t{\n\t\t\tpath: 'src/index.ts',\n\t\t\tdescription: 'The file that \"boots\" the skill.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t},\n\t\t{\n\t\t\tpath: 'errors/SpruceError.ts',\n\t\t\tdescription: 'Starting error class that you can edit.',\n\t\t\tshouldOverwriteWhenChanged: false,\n\t\t},\n\t\t{\n\t\t\tpath: '.spruce/skill.ts',\n\t\t\tdescription: 'Used to support booting the skill.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t},\n\t\t{\n\t\t\tpath: '.spruce/errors/options.types.ts',\n\t\t\tdescription:\n\t\t\t\t'Holds all possible error codes and options. Will be updated as you create more errors (spruce create.error).',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t},\n\t\t{\n\t\t\tpath: 'src/.spruce/features/event.plugin.ts',\n\t\t\tdescription:\n\t\t\t\t'Gives your skill event support through local boot events and optionall Mercury (spruce event.listen).',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t},\n\t]\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t`test.register-abstract-test-classes`,\n\t\t\tthis.handleRegisterAbstractTestClasses.bind(this)\n\t\t)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.will-execute',\n\t\t\tthis.handleWillExecute.bind(this)\n\t\t)\n\t}\n\n\tprivate async handleRegisterAbstractTestClasses() {\n\t\treturn {\n\t\t\tabstractClasses: [\n\t\t\t\t{\n\t\t\t\t\tname: 'AbstractSpruceFixtureTest',\n\t\t\t\t\tlabel: 'AbstractSpruceFixtureTest',\n\t\t\t\t\timport: '@sprucelabs/spruce-test-fixtures',\n\t\t\t\t\tfeatureCode: 'skill',\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t}\n\n\tpublic async beforePackageInstall(options: SkillFeatureOptions) {\n\t\tconst { files } = await this.install(options)\n\t\treturn { files, cwd: this.resolveDestination(options) }\n\t}\n\n\tpublic async afterPackageInstall(options: SkillFeatureOptions) {\n\t\tconst destination = this.resolveDestination(options)\n\t\tawait this.Store('skill', { cwd: destination }).setCurrentSkillsNamespace(\n\t\t\toptions.name\n\t\t)\n\t\treturn {}\n\t}\n\n\tprivate async install(options: SkillFeatureOptions) {\n\t\tvalidateSchemaValues(skillFeatureSchema, options)\n\n\t\tconst destination = this.resolveDestination(options)\n\t\tif (!diskUtil.doesDirExist(destination)) {\n\t\t\tdiskUtil.createDir(destination)\n\t\t}\n\n\t\tconst skillGenerator = this.Writer('skill')\n\n\t\tconst files = await skillGenerator.writeSkill(destination, options)\n\n\t\tawait this.installScripts(destination)\n\n\t\tthis.setEngines(destination)\n\n\t\tconst env = this.Service('env', destination)\n\t\tenv.set('SKILL_NAME', options.name)\n\n\t\treturn { files }\n\t}\n\n\tprivate resolveDestination(options: SkillFeatureOptions) {\n\t\treturn diskUtil.resolvePath(this.cwd, options.destination ?? '')\n\t}\n\n\tpublic async installScripts(destination = this.cwd) {\n\t\tconst scriptUpdater = ScriptUpdater.FromFeature(this, {\n\t\t\tcwd: destination,\n\t\t})\n\n\t\tawait scriptUpdater.update()\n\t}\n\n\tpublic setEngines(destination: string) {\n\t\tconst pkg = this.Service('pkg', destination)\n\t\tconst engines = (pkg.get('engines') as Record<string, string>) || {}\n\n\t\tfor (const name in this.engines) {\n\t\t\tconst all = this.engines\n\t\t\tengines[name] = this.engines[name as keyof typeof all]\n\t\t}\n\n\t\tpkg.set({ path: 'engines', value: engines })\n\t}\n\n\tpublic async handleWillExecute(options: {\n\t\tfeatureCode: string\n\t\tactionCode: string\n\t\toptions?: UpgradeOptions\n\t}) {\n\t\tconst { featureCode, actionCode, options: upgradeOptions } = options\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\tconst updater = new Updater(this, this.emitter)\n\t\t\tconst files = await updater.updateFiles(upgradeOptions as any)\n\t\t\treturn {\n\t\t\t\tfiles,\n\t\t\t}\n\t\t}\n\n\t\treturn {}\n\t}\n}\n"],"file":"SkillFeature.js"}
1
+ {"version":3,"sources":["../../../src/features/skill/SkillFeature.ts"],"names":["SkillFeature","options","name","version","isDev","universalDevDependencies","skillFeatureSchema","diskUtil","resolvePath","__dirname","node","yarn","boot","health","universalScripts","universalFileDescriptions","path","description","shouldOverwriteWhenChanged","emitter","on","handleRegisterAbstractTestClasses","bind","handleWillExecute","abstractClasses","label","featureCode","install","files","cwd","resolveDestination","destination","Store","setCurrentSkillsNamespace","doesDirExist","createDir","skillGenerator","Writer","writeSkill","installScripts","setEngines","env","Service","set","scriptUpdater","ScriptUpdater","FromFeature","update","pkg","engines","get","all","value","actionCode","upgradeOptions","featureInstaller","isInstalled","updater","Updater","updateFiles","AbstractFeature"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AAEA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;;;;;IAkBqBA,Y;;;;;AAyEpB,wBAAmBC,OAAnB,EAA4C;AAAA;;AAAA;AAC3C,8BAAMA,OAAN;AAD2C,qGAtEtB,OAsEsB;AAAA,6FArEjB,OAqEiB;AAAA,oGApEvB,uCAoEuB;AAAA,2GAnEP,GAmEO;AAAA,6GAhE3C;AAAEC,MAAAA,IAAI,EAAE;AAAR,KAgE2C,EA/D3C;AAAEA,MAAAA,IAAI,EAAE;AAAR,KA+D2C,EA9D3C;AAAEA,MAAAA,IAAI,EAAE;AAAR,KA8D2C,EA7D3C;AAAEA,MAAAA,IAAI,EAAE;AAAR,KA6D2C,EA5D3C;AAAEA,MAAAA,IAAI,EAAE;AAAR,KA4D2C,EA3D3C;AAAEA,MAAAA,IAAI,EAAE;AAAR,KA2D2C,EA1D3C;AAAEA,MAAAA,IAAI,EAAE;AAAR,KA0D2C,EAzD3C;AAAEA,MAAAA,IAAI,EAAE,QAAR;AAAkBC,MAAAA,OAAO,EAAE;AAA3B,KAyD2C,EAxD3C;AACCD,MAAAA,IAAI,EAAE;AADP,KAwD2C,EArD3C;AAAEA,MAAAA,IAAI,EAAE,gBAAR;AAA0BE,MAAAA,KAAK,EAAE;AAAjC,KAqD2C,EApD3C;AAAEF,MAAAA,IAAI,EAAE,SAAR;AAAmBE,MAAAA,KAAK,EAAE;AAA1B,KAoD2C,6CAnDxCC,oCAmDwC;AAAA,sGAhDrBC,wBAgDqB;AAAA,mGA/CxBC,2BAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,CA+CwB;AAAA,gGA9C1B;AACjBC,MAAAA,IAAI,EAAE,MADW;AAEjBC,MAAAA,IAAI,EAAE;AAFW,KA8C0B;AAAA;AAzC3CC,MAAAA,IAAI,EAAE,kBAyCqC;AAxC3C,oBACC,iEAuC0C;AArC3CC,MAAAA,MAAM,EAAE,oBAqCmC;AApC3C,sBAAgB;AAoC2B,OAlCxCC,4BAkCwC;AAAA,uJA9BxCC,qCA8BwC,IA7B3C;AACCC,MAAAA,IAAI,EAAE,cADP;AAECC,MAAAA,WAAW,EAAE,kCAFd;AAGCC,MAAAA,0BAA0B,EAAE;AAH7B,KA6B2C,EAxB3C;AACCF,MAAAA,IAAI,EAAE,uBADP;AAECC,MAAAA,WAAW,EAAE,yCAFd;AAGCC,MAAAA,0BAA0B,EAAE;AAH7B,KAwB2C,EAnB3C;AACCF,MAAAA,IAAI,EAAE,kBADP;AAECC,MAAAA,WAAW,EAAE,oCAFd;AAGCC,MAAAA,0BAA0B,EAAE;AAH7B,KAmB2C,EAd3C;AACCF,MAAAA,IAAI,EAAE,iCADP;AAECC,MAAAA,WAAW,EACV,8GAHF;AAICC,MAAAA,0BAA0B,EAAE;AAJ7B,KAc2C,EAR3C;AACCF,MAAAA,IAAI,EAAE,sCADP;AAECC,MAAAA,WAAW,EACV,uGAHF;AAICC,MAAAA,0BAA0B,EAAE;AAJ7B,KAQ2C;AAG3C,SAAK,MAAKC,OAAL,CAAaC,EAAb,wCAEJ,MAAKC,iCAAL,CAAuCC,IAAvC,gDAFI,CAAL;AAKA,SAAK,MAAKH,OAAL,CAAaC,EAAb,CACJ,sBADI,EAEJ,MAAKG,iBAAL,CAAuBD,IAAvB,gDAFI,CAAL;AAR2C;AAY3C;;;;;6HAED;AAAA;AAAA;AAAA;AAAA;AAAA,iDACQ;AACNE,kBAAAA,eAAe,EAAE,CAChB;AACCtB,oBAAAA,IAAI,EAAE,2BADP;AAECuB,oBAAAA,KAAK,EAAE,2BAFR;AAGC,8BAAQ,kCAHT;AAICC,oBAAAA,WAAW,EAAE;AAJd,mBADgB;AADX,iBADR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;gHAaA,kBAAkCzB,OAAlC;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACyB,KAAK0B,OAAL,CAAa1B,OAAb,CADzB;;AAAA;AAAA;AACS2B,gBAAAA,KADT,uBACSA,KADT;AAAA,kDAEQ;AAAEA,kBAAAA,KAAK,EAALA,KAAF;AAASC,kBAAAA,GAAG,EAAE,KAAKC,kBAAL,CAAwB7B,OAAxB;AAAd,iBAFR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;+GAKA,kBAAiCA,OAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AACO8B,gBAAAA,WADP,GACqB,KAAKD,kBAAL,CAAwB7B,OAAxB,CADrB;AAAA;AAAA,uBAEO,KAAK+B,KAAL,CAAW,OAAX,EAAoB;AAAEH,kBAAAA,GAAG,EAAEE;AAAP,iBAApB,EAA0CE,yBAA1C,CACLhC,OAAO,CAACC,IADH,CAFP;;AAAA;AAAA,kDAKQ,EALR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;mGAQA,kBAAsBD,OAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AACC,kDAAqBK,wBAArB,EAAyCL,OAAzC;AAEM8B,gBAAAA,WAHP,GAGqB,KAAKD,kBAAL,CAAwB7B,OAAxB,CAHrB;;AAIC,oBAAI,CAACM,2BAAS2B,YAAT,CAAsBH,WAAtB,CAAL,EAAyC;AACxCxB,6CAAS4B,SAAT,CAAmBJ,WAAnB;AACA;;AAEKK,gBAAAA,cARP,GAQwB,KAAKC,MAAL,CAAY,OAAZ,CARxB;AAAA;AAAA,uBAUqBD,cAAc,CAACE,UAAf,CAA0BP,WAA1B,EAAuC9B,OAAvC,CAVrB;;AAAA;AAUO2B,gBAAAA,KAVP;AAAA;AAAA,uBAYO,KAAKW,cAAL,CAAoBR,WAApB,CAZP;;AAAA;AAcC,qBAAKS,UAAL,CAAgBT,WAAhB;AAEMU,gBAAAA,GAhBP,GAgBa,KAAKC,OAAL,CAAa,KAAb,EAAoBX,WAApB,CAhBb;AAiBCU,gBAAAA,GAAG,CAACE,GAAJ,CAAQ,YAAR,EAAsB1C,OAAO,CAACC,IAA9B;AAjBD,kDAmBQ;AAAE0B,kBAAAA,KAAK,EAALA;AAAF,iBAnBR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAsBA,4BAA2B3B,OAA3B,EAAyD;AAAA;;AACxD,aAAOM,2BAASC,WAAT,CAAqB,KAAKqB,GAA1B,0BAA+B5B,OAAO,CAAC8B,WAAvC,uEAAsD,EAAtD,CAAP;AACA;;;;0GAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4BA,gBAAAA,WAA5B,8DAA0C,KAAKF,GAA/C;AACOe,gBAAAA,aADP,GACuBC,0BAAcC,WAAd,CAA0B,IAA1B,EAAgC;AACrDjB,kBAAAA,GAAG,EAAEE;AADgD,iBAAhC,CADvB;AAAA;AAAA,uBAKOa,aAAa,CAACG,MAAd,EALP;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAQA,oBAAkBhB,WAAlB,EAAuC;AACtC,UAAMiB,GAAG,GAAG,KAAKN,OAAL,CAAa,KAAb,EAAoBX,WAApB,CAAZ;AACA,UAAMkB,OAAO,GAAID,GAAG,CAACE,GAAJ,CAAQ,SAAR,CAAD,IAAkD,EAAlE;;AAEA,WAAK,IAAMhD,IAAX,IAAmB,KAAK+C,OAAxB,EAAiC;AAChC,YAAME,GAAG,GAAG,KAAKF,OAAjB;AACAA,QAAAA,OAAO,CAAC/C,IAAD,CAAP,GAAgB,KAAK+C,OAAL,CAAa/C,IAAb,CAAhB;AACA;;AAED8C,MAAAA,GAAG,CAACL,GAAJ,CAAQ;AAAE3B,QAAAA,IAAI,EAAE,SAAR;AAAmBoC,QAAAA,KAAK,EAAEH;AAA1B,OAAR;AACA;;;;6GAED,kBAA+BhD,OAA/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAKSyB,gBAAAA,WALT,GAK8DzB,OAL9D,CAKSyB,WALT,EAKsB2B,UALtB,GAK8DpD,OAL9D,CAKsBoD,UALtB,EAK2CC,cAL3C,GAK8DrD,OAL9D,CAKkCA,OALlC;AAAA;AAAA,uBAM2B,KAAKsD,gBAAL,CAAsBC,WAAtB,CAAkC,OAAlC,CAN3B;;AAAA;AAMOA,gBAAAA,WANP;;AAAA,sBAQKA,WAAW,IAAI9B,WAAW,KAAK,MAA/B,IAAyC2B,UAAU,KAAK,SAR7D;AAAA;AAAA;AAAA;;AASQI,gBAAAA,OATR,GASkB,IAAIC,mBAAJ,CAAY,IAAZ,EAAkB,KAAKvC,OAAvB,CATlB;AAAA;AAAA,uBAUsBsC,OAAO,CAACE,WAAR,CAAoBL,cAApB,aAAoBA,cAApB,cAAoBA,cAApB,GAAsC,EAAtC,CAVtB;;AAAA;AAUQ1B,gBAAAA,KAVR;AAAA,kDAWS;AACNA,kBAAAA,KAAK,EAALA;AADM,iBAXT;;AAAA;AAAA,kDAgBQ,EAhBR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EA7JSgC,4B","sourcesContent":["import { SchemaValues, validateSchemaValues } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport skillFeatureSchema from '#spruce/schemas/spruceCli/v2020_07_22/skillFeature.schema'\nimport { FileDescription, NpmPackage } from '../../types/cli.types'\nimport ScriptUpdater from '../../updaters/ScriptUpdater'\nimport AbstractFeature, { FeatureOptions } from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\nimport universalDevDependencies from '../universalDevDependencies'\nimport universalFileDescriptions from '../universalFileDescriptions'\nimport universalScripts from '../universalScripts'\nimport Updater from './updaters/Updater'\n\ntype SkillFeatureOptionsSchema =\n\tSpruceSchemas.SpruceCli.v2020_07_22.SkillFeatureSchema\ntype SkillFeatureOptions = SpruceSchemas.SpruceCli.v2020_07_22.SkillFeature\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tskill: SkillFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\tskill: SchemaValues<SkillFeatureOptionsSchema>\n\t}\n}\n\ntype UpgradeOptions = SpruceSchemas.SpruceCli.v2020_07_22.UpgradeSkillOptions\n\nexport default class SkillFeature<\n\tS extends SkillFeatureOptionsSchema = SkillFeatureOptionsSchema\n> extends AbstractFeature<S> {\n\tpublic nameReadable = 'Skill'\n\tpublic code: FeatureCode = 'skill'\n\tpublic description = 'The scaffolding needed to run a Skill'\n\tpublic readonly installOrderWeight = 100\n\n\tpublic packageDependencies: NpmPackage[] = [\n\t\t{ name: '@sprucelabs/error' },\n\t\t{ name: '@sprucelabs/spruce-skill-utils' },\n\t\t{ name: '@sprucelabs/spruce-skill-booter' },\n\t\t{ name: '@sprucelabs/spruce-event-utils' },\n\t\t{ name: '@sprucelabs/spruce-event-plugin' },\n\t\t{ name: '@sprucelabs/spruce-core-schemas' },\n\t\t{ name: 'dotenv' },\n\t\t{ name: 'globby', version: '^11.0.4' },\n\t\t{\n\t\t\tname: '@sprucelabs/mercury-types',\n\t\t},\n\t\t{ name: 'tsconfig-paths', isDev: true },\n\t\t{ name: 'ts-node', isDev: true },\n\t\t...universalDevDependencies,\n\t]\n\n\tpublic optionsSchema = skillFeatureSchema as S\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\tprivate engines = {\n\t\tnode: '16.x',\n\t\tyarn: '1.x',\n\t}\n\tpublic scripts = {\n\t\tboot: 'node build/index',\n\t\t'boot.local':\n\t\t\t'node -r ts-node/register -r tsconfig-paths/register ./src/index',\n\n\t\thealth: 'yarn boot --health',\n\t\t'health.local': 'yarn boot.local --health',\n\n\t\t...universalScripts,\n\t}\n\n\tpublic readonly fileDescriptions: FileDescription[] = [\n\t\t...universalFileDescriptions,\n\t\t{\n\t\t\tpath: 'src/index.ts',\n\t\t\tdescription: 'The file that \"boots\" the skill.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t},\n\t\t{\n\t\t\tpath: 'errors/SpruceError.ts',\n\t\t\tdescription: 'Starting error class that you can edit.',\n\t\t\tshouldOverwriteWhenChanged: false,\n\t\t},\n\t\t{\n\t\t\tpath: '.spruce/skill.ts',\n\t\t\tdescription: 'Used to support booting the skill.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t},\n\t\t{\n\t\t\tpath: '.spruce/errors/options.types.ts',\n\t\t\tdescription:\n\t\t\t\t'Holds all possible error codes and options. Will be updated as you create more errors (spruce create.error).',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t},\n\t\t{\n\t\t\tpath: 'src/.spruce/features/event.plugin.ts',\n\t\t\tdescription:\n\t\t\t\t'Gives your skill event support through local boot events and optionall Mercury (spruce event.listen).',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t},\n\t]\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t`test.register-abstract-test-classes`,\n\t\t\tthis.handleRegisterAbstractTestClasses.bind(this)\n\t\t)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.will-execute',\n\t\t\tthis.handleWillExecute.bind(this)\n\t\t)\n\t}\n\n\tprivate async handleRegisterAbstractTestClasses() {\n\t\treturn {\n\t\t\tabstractClasses: [\n\t\t\t\t{\n\t\t\t\t\tname: 'AbstractSpruceFixtureTest',\n\t\t\t\t\tlabel: 'AbstractSpruceFixtureTest',\n\t\t\t\t\timport: '@sprucelabs/spruce-test-fixtures',\n\t\t\t\t\tfeatureCode: 'skill',\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t}\n\n\tpublic async beforePackageInstall(options: SkillFeatureOptions) {\n\t\tconst { files } = await this.install(options)\n\t\treturn { files, cwd: this.resolveDestination(options) }\n\t}\n\n\tpublic async afterPackageInstall(options: SkillFeatureOptions) {\n\t\tconst destination = this.resolveDestination(options)\n\t\tawait this.Store('skill', { cwd: destination }).setCurrentSkillsNamespace(\n\t\t\toptions.name\n\t\t)\n\t\treturn {}\n\t}\n\n\tprivate async install(options: SkillFeatureOptions) {\n\t\tvalidateSchemaValues(skillFeatureSchema, options)\n\n\t\tconst destination = this.resolveDestination(options)\n\t\tif (!diskUtil.doesDirExist(destination)) {\n\t\t\tdiskUtil.createDir(destination)\n\t\t}\n\n\t\tconst skillGenerator = this.Writer('skill')\n\n\t\tconst files = await skillGenerator.writeSkill(destination, options)\n\n\t\tawait this.installScripts(destination)\n\n\t\tthis.setEngines(destination)\n\n\t\tconst env = this.Service('env', destination)\n\t\tenv.set('SKILL_NAME', options.name)\n\n\t\treturn { files }\n\t}\n\n\tprivate resolveDestination(options: SkillFeatureOptions) {\n\t\treturn diskUtil.resolvePath(this.cwd, options.destination ?? '')\n\t}\n\n\tpublic async installScripts(destination = this.cwd) {\n\t\tconst scriptUpdater = ScriptUpdater.FromFeature(this, {\n\t\t\tcwd: destination,\n\t\t})\n\n\t\tawait scriptUpdater.update()\n\t}\n\n\tpublic setEngines(destination: string) {\n\t\tconst pkg = this.Service('pkg', destination)\n\t\tconst engines = (pkg.get('engines') as Record<string, string>) || {}\n\n\t\tfor (const name in this.engines) {\n\t\t\tconst all = this.engines\n\t\t\tengines[name] = this.engines[name as keyof typeof all]\n\t\t}\n\n\t\tpkg.set({ path: 'engines', value: engines })\n\t}\n\n\tpublic async handleWillExecute(options: {\n\t\tfeatureCode: string\n\t\tactionCode: string\n\t\toptions?: UpgradeOptions\n\t}) {\n\t\tconst { featureCode, actionCode, options: upgradeOptions } = options\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\tconst updater = new Updater(this, this.emitter)\n\t\t\tconst files = await updater.updateFiles(upgradeOptions ?? {})\n\t\t\treturn {\n\t\t\t\tfiles,\n\t\t\t}\n\t\t}\n\n\t\treturn {}\n\t}\n}\n"],"file":"SkillFeature.js"}
@@ -289,7 +289,7 @@ var SkillStore = /*#__PURE__*/function (_AbstractStore) {
289
289
  key: "setCurrentSkillsNamespace",
290
290
  value: function () {
291
291
  var _setCurrentSkillsNamespace = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(namespace) {
292
- var isRegistered, pkg;
292
+ var isRegistered;
293
293
  return _regenerator["default"].wrap(function _callee5$(_context5) {
294
294
  while (1) {
295
295
  switch (_context5.prev = _context5.next) {
@@ -316,17 +316,13 @@ var SkillStore = /*#__PURE__*/function (_AbstractStore) {
316
316
 
317
317
  throw new _SpruceError["default"]({
318
318
  code: 'GENERIC',
319
- friendlyMessage: "You can't change the namespace of a skill that is registered."
319
+ friendlyMessage: "You can't set the namespace of a skill that is registered."
320
320
  });
321
321
 
322
322
  case 11:
323
- pkg = this.Service('pkg');
324
- pkg.set({
325
- path: 'skill.namespace',
326
- value: _spruceSkillUtils.namesUtil.toKebab(namespace)
327
- });
323
+ this.Service('auth').updateCurrentSkillNamespace(namespace);
328
324
 
329
- case 13:
325
+ case 12:
330
326
  case "end":
331
327
  return _context5.stop();
332
328
  }