@sprucelabs/spruce-cli 14.22.4 → 14.22.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,38 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [14.22.8](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v14.22.7...v14.22.8) (2021-10-23)
7
+
8
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
9
+
10
+
11
+
12
+
13
+
14
+ ## [14.22.7](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v14.22.6...v14.22.7) (2021-10-22)
15
+
16
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
17
+
18
+
19
+
20
+
21
+
22
+ ## [14.22.6](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v14.22.5...v14.22.6) (2021-10-22)
23
+
24
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
25
+
26
+
27
+
28
+
29
+
30
+ ## [14.22.5](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v14.22.4...v14.22.5) (2021-10-21)
31
+
32
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
33
+
34
+
35
+
36
+
37
+
6
38
  ## [14.22.4](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v14.22.3...v14.22.4) (2021-10-21)
7
39
 
8
40
  **Note:** Version bump only for package @sprucelabs/spruce-cli
@@ -322,7 +322,7 @@ var EventStoreTest = (_dec = (0, _test.test)(), _dec2 = (0, _test.test)(), _dec3
322
322
 
323
323
  match = _test2["default"].assertFileByNameInGeneratedFiles("emitPayload.builder.ts", results.files);
324
324
 
325
- _spruceSkillUtils.diskUtil.writeFile(match, '');
325
+ _spruceSkillUtils.diskUtil.writeFile(match, 'export default {}');
326
326
 
327
327
  _context6.next = 13;
328
328
  return _test.assert.doesThrowAsync(function () {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/__tests__/implementation/EventStore.test.ts"],"names":["EVENT_NAME_READABLE","EVENT_NAME","EVENT_CAMEL","EventStoreTest","versionUtil","generateVersion","createAction","Action","assert","isTruthy","Store","isFunction","fetchEventContracts","localNamespace","results","contracts","errors","isTrue","length","contract","isEqual","organizationFixture","getOrganizationFixture","seedDemoOrg","name","org","seedSkillAndInstallAtOrg","eventStore1","eventStore","skill1","skill","eventStore2","registerEventContract","eventContract","eventSignatures","version","constValue","emitPayloadSchema","eventName","targetSchema","eventTargetSchema","emitPermissionContract","id","permissions","defaults","skillContract","sig","eventContractUtil","getSignatureByName","slug","FeatureFixture","installCachedFeatures","getSkillFixture","registerCurrentSkill","execute","nameReadable","nameKebab","nameCamel","isFalsy","match","testUtil","assertFileByNameInGeneratedFiles","files","diskUtil","writeFile","doesThrowAsync","loadLocalContract","RegExp","err","errorAssertUtil","assertError","copyEventBuildersAndPermissions","eventNameUtil","join","eventNamespace","wasFound","fields","target","payload","responsePayloadSchema","listenPermissionContract","installAndRegisterOneGlobalEvent","fqen","totalMatches","reduce","count","eventsPath","resolvePath","deleteDir","unified","unifyContracts","doesThrow","isGlobal","meta","local","boot","kill","EventStore","clearCache","createResults","seedDemoSkill","installSkillAtOrganization","connectToApi","skillId","apiKey","client","apiClientFactory","AbstractEventTest"],"mappings":"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","sourcesContent":["import {\n\tbuildPermissionContract,\n\tvalidateEventContract,\n} from '@sprucelabs/mercury-types'\nimport {\n\tbuildEmitTargetAndPayloadSchema,\n\teventContractUtil,\n\teventNameUtil,\n\teventTargetSchema,\n} from '@sprucelabs/spruce-event-utils'\nimport { diskUtil, versionUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport { errorAssertUtil } from '@sprucelabs/test-utils'\nimport CreateAction from '../../features/event/actions/CreateAction'\nimport EventStore from '../../features/event/stores/EventStore'\nimport AbstractEventTest from '../../tests/AbstractEventTest'\nimport testUtil from '../../tests/utilities/test.utility'\n\nconst EVENT_NAME_READABLE = 'my event store amazing event'\nconst EVENT_NAME = 'my-event-store-amazing-event'\nconst EVENT_CAMEL = 'myEventStoreAmazingEvent'\n\nexport default class EventStoreTest extends AbstractEventTest {\n\tprivate static createAction: CreateAction\n\tprotected static get version() {\n\t\treturn versionUtil.generateVersion()\n\t}\n\n\tpublic static async beforeEach() {\n\t\tawait super.beforeEach()\n\t\tthis.createAction = this.Action<CreateAction>('event', 'create')\n\t}\n\n\t@test()\n\tprotected static async canInstantiateEventStore() {\n\t\tassert.isTruthy(this.Store('event'))\n\t}\n\n\t@test()\n\tprotected static async hasFetchEventContractsMethod() {\n\t\tassert.isFunction(this.Store('event').fetchEventContracts)\n\t}\n\n\t@test()\n\tprotected static async fetchesCoreEventContracts() {\n\t\tconst results = await this.Store('event').fetchEventContracts({\n\t\t\tlocalNamespace: 'my-skill',\n\t\t})\n\t\tconst { contracts, errors } = results\n\n\t\tassert.isTrue(contracts.length >= 1)\n\n\t\tfor (const contract of contracts) {\n\t\t\tvalidateEventContract(contract)\n\t\t}\n\n\t\tassert.isEqual(errors.length, 0)\n\t}\n\n\t@test()\n\tprotected static async registerEventContract() {\n\t\tconst organizationFixture = this.getOrganizationFixture()\n\t\tconst org = await organizationFixture.seedDemoOrg({\n\t\t\tname: 'my new org',\n\t\t})\n\n\t\tconst { eventStore: eventStore1, skill: skill1 } =\n\t\t\tawait this.seedSkillAndInstallAtOrg(org, 'skill 1')\n\n\t\tconst { eventStore: eventStore2 } = await this.seedSkillAndInstallAtOrg(\n\t\t\torg,\n\t\t\t'skill 2'\n\t\t)\n\n\t\tawait eventStore1.registerEventContract({\n\t\t\teventContract: {\n\t\t\t\teventSignatures: {\n\t\t\t\t\t[`my-fantastic-event::${this.version.constValue}`]: {\n\t\t\t\t\t\temitPayloadSchema: buildEmitTargetAndPayloadSchema({\n\t\t\t\t\t\t\teventName: `my-fantastic-event::${this.version.constValue}`,\n\t\t\t\t\t\t\ttargetSchema: eventTargetSchema,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\temitPermissionContract: buildPermissionContract({\n\t\t\t\t\t\t\tid: 'my-fantastic-event-contract',\n\t\t\t\t\t\t\tname: 'Fanstastic emit perms',\n\t\t\t\t\t\t\tpermissions: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: 'can-emit-perms',\n\t\t\t\t\t\t\t\t\tname: 'can emit perm',\n\t\t\t\t\t\t\t\t\tdefaults: {\n\t\t\t\t\t\t\t\t\t\tskill: false,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tconst { contracts } = await eventStore2.fetchEventContracts({\n\t\t\tlocalNamespace: 'my-skill',\n\t\t})\n\n\t\tassert.isTrue(contracts.length >= 2)\n\t\tconst skillContract = contracts[1]\n\n\t\tconst sig = eventContractUtil.getSignatureByName(\n\t\t\tskillContract,\n\t\t\t`${skill1.slug}.my-fantastic-event::${this.version.constValue}`\n\t\t)\n\n\t\tassert.isEqual(\n\t\t\tsig.emitPermissionContract?.id,\n\t\t\t'my-fantastic-event-contract'\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async badLocalContractThrowsNiceError() {\n\t\tawait this.FeatureFixture().installCachedFeatures('events')\n\n\t\tconst skill = await this.getSkillFixture().registerCurrentSkill({\n\t\t\tname: 'my new skill',\n\t\t})\n\n\t\tconst results = await this.createAction.execute({\n\t\t\tnameReadable: EVENT_NAME_READABLE,\n\t\t\tnameKebab: EVENT_NAME,\n\t\t\tnameCamel: EVENT_CAMEL,\n\t\t})\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t`emitPayload.builder.ts`,\n\t\t\tresults.files\n\t\t)\n\n\t\tdiskUtil.writeFile(match, '')\n\n\t\tconst err = await assert.doesThrowAsync(\n\t\t\t() => this.Store('event').loadLocalContract(skill.slug),\n\t\t\tnew RegExp(\n\t\t\t\t`${skill.slug}.${EVENT_NAME}::${\n\t\t\t\t\tversionUtil.generateVersion().constValue\n\t\t\t\t}`\n\t\t\t)\n\t\t)\n\n\t\terrorAssertUtil.assertError(err, 'INVALID_EVENT_CONTRACT')\n\t}\n\n\t@test()\n\tprotected static async badLocalSignature() {\n\t\tawait this.FeatureFixture().installCachedFeatures('events')\n\n\t\tconst skill = await this.getSkillFixture().registerCurrentSkill({\n\t\t\tname: 'my new skill',\n\t\t})\n\n\t\tconst results = await this.createAction.execute({\n\t\t\tnameReadable: EVENT_NAME_READABLE,\n\t\t\tnameKebab: EVENT_NAME,\n\t\t\tnameCamel: EVENT_CAMEL,\n\t\t})\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t`event.options.ts`,\n\t\t\tresults.files\n\t\t)\n\n\t\tdiskUtil.writeFile(match, 'export default {waka: true}')\n\n\t\tconst err = await assert.doesThrowAsync(\n\t\t\t() => this.Store('event').loadLocalContract(skill.slug),\n\t\t\tnew RegExp(\n\t\t\t\t`${skill.slug}.${EVENT_NAME}::${\n\t\t\t\t\tversionUtil.generateVersion().constValue\n\t\t\t\t}`\n\t\t\t)\n\t\t)\n\n\t\terrorAssertUtil.assertError(err, 'INVALID_EVENT_CONTRACT')\n\t}\n\n\t@test()\n\tprotected static async mixesInLocalContracts() {\n\t\tawait this.FeatureFixture().installCachedFeatures('events')\n\n\t\tconst skill = await this.getSkillFixture().registerCurrentSkill({\n\t\t\tname: 'my new skill',\n\t\t})\n\n\t\tawait this.createAction.execute({\n\t\t\tnameReadable: EVENT_NAME_READABLE,\n\t\t\tnameKebab: EVENT_NAME,\n\t\t\tnameCamel: EVENT_CAMEL,\n\t\t})\n\n\t\tawait this.copyEventBuildersAndPermissions(EVENT_NAME)\n\n\t\tawait this.Action('event', 'sync').execute({})\n\n\t\tconst { contracts } = await this.Store('event').fetchEventContracts({\n\t\t\tlocalNamespace: skill.slug,\n\t\t})\n\n\t\tassert.isTrue(contracts.length >= 2)\n\t\tconst name = eventNameUtil.join({\n\t\t\teventName: EVENT_NAME,\n\t\t\teventNamespace: skill.slug,\n\t\t\tversion: this.version.constValue,\n\t\t})\n\n\t\tlet wasFound = false\n\t\tfor (const contract of contracts) {\n\t\t\tif (contract.eventSignatures[name]?.emitPayloadSchema) {\n\t\t\t\twasFound = true\n\t\t\t\tassert.isEqual(\n\t\t\t\t\tcontract.eventSignatures[name].emitPayloadSchema?.id,\n\t\t\t\t\tEVENT_CAMEL + 'EmitTargetAndPayload'\n\t\t\t\t)\n\t\t\t\tassert.isTruthy(\n\t\t\t\t\tcontract.eventSignatures[name].emitPayloadSchema?.fields?.target\n\t\t\t\t)\n\t\t\t\tassert.isTruthy(\n\t\t\t\t\tcontract.eventSignatures[name].emitPayloadSchema?.fields?.payload\n\t\t\t\t)\n\t\t\t\tassert.isTruthy(contract.eventSignatures[name].responsePayloadSchema)\n\t\t\t\tassert.isTruthy(contract.eventSignatures[name].emitPermissionContract)\n\t\t\t\tassert.isTruthy(contract.eventSignatures[name].listenPermissionContract)\n\n\t\t\t\tvalidateEventContract(contract)\n\t\t\t}\n\t\t}\n\n\t\tassert.isTrue(wasFound)\n\t}\n\n\t@test()\n\tprotected static async mixesInLocalContractWithGlobalEventsAndDoesNotReturnContractTwice() {\n\t\tconst { skill, fqen } = await this.installAndRegisterOneGlobalEvent()\n\n\t\tconst { contracts } = await this.Store('event').fetchEventContracts({\n\t\t\tlocalNamespace: skill.slug,\n\t\t})\n\n\t\tconst totalMatches = contracts.reduce((count, contract) => {\n\t\t\tif (contract.eventSignatures[fqen]) {\n\t\t\t\tcount++\n\t\t\t}\n\t\t\treturn count\n\t\t}, 0)\n\n\t\tassert.isEqual(totalMatches, 1)\n\t}\n\n\t@test()\n\tprotected static async doesNotLoadGlobalContractsForSelf() {\n\t\tconst { fqen, skill } = await this.installAndRegisterOneGlobalEvent()\n\n\t\tconst eventsPath = this.resolvePath('src', 'events')\n\t\tdiskUtil.deleteDir(eventsPath)\n\n\t\tconst { contracts } = await this.Store('event').fetchEventContracts({\n\t\t\tlocalNamespace: skill.slug,\n\t\t})\n\n\t\tconst unified = eventContractUtil.unifyContracts(contracts)\n\n\t\tassert.isTruthy(unified)\n\t\tassert.doesThrow(() => eventContractUtil.getSignatureByName(unified, fqen))\n\t}\n\n\tprivate static async installAndRegisterOneGlobalEvent() {\n\t\tawait this.FeatureFixture().installCachedFeatures('events')\n\n\t\tconst skill = await this.getSkillFixture().registerCurrentSkill({\n\t\t\tname: 'event store test skill',\n\t\t})\n\n\t\tconst results = await this.createAction.execute({\n\t\t\tnameReadable: EVENT_NAME_READABLE,\n\t\t\tnameKebab: EVENT_NAME,\n\t\t\tnameCamel: EVENT_CAMEL,\n\t\t\tisGlobal: true,\n\t\t})\n\n\t\tconst { fqen } = results.meta ?? {}\n\n\t\tassert.isTruthy(fqen)\n\n\t\tconst boot = await this.Action('skill', 'boot').execute({ local: true })\n\n\t\tboot.meta?.kill()\n\n\t\tEventStore.clearCache()\n\n\t\treturn { boot, skill, fqen, createResults: results }\n\t}\n\n\tprivate static async seedSkillAndInstallAtOrg(org: any, name: string) {\n\t\tconst skill = await this.getSkillFixture().seedDemoSkill({\n\t\t\tname,\n\t\t})\n\n\t\tawait this.getOrganizationFixture().installSkillAtOrganization(\n\t\t\tskill.id,\n\t\t\torg.id\n\t\t)\n\n\t\tconst client = await this.connectToApi({\n\t\t\tskillId: skill.id,\n\t\t\tapiKey: skill.apiKey,\n\t\t})\n\n\t\tconst eventStore = this.Store('event', {\n\t\t\tapiClientFactory: async () => {\n\t\t\t\treturn client\n\t\t\t},\n\t\t})\n\n\t\treturn { eventStore, skill }\n\t}\n}\n"],"file":"EventStore.test.js"}
1
+ {"version":3,"sources":["../../../src/__tests__/implementation/EventStore.test.ts"],"names":["EVENT_NAME_READABLE","EVENT_NAME","EVENT_CAMEL","EventStoreTest","versionUtil","generateVersion","createAction","Action","assert","isTruthy","Store","isFunction","fetchEventContracts","localNamespace","results","contracts","errors","isTrue","length","contract","isEqual","organizationFixture","getOrganizationFixture","seedDemoOrg","name","org","seedSkillAndInstallAtOrg","eventStore1","eventStore","skill1","skill","eventStore2","registerEventContract","eventContract","eventSignatures","version","constValue","emitPayloadSchema","eventName","targetSchema","eventTargetSchema","emitPermissionContract","id","permissions","defaults","skillContract","sig","eventContractUtil","getSignatureByName","slug","FeatureFixture","installCachedFeatures","getSkillFixture","registerCurrentSkill","execute","nameReadable","nameKebab","nameCamel","isFalsy","match","testUtil","assertFileByNameInGeneratedFiles","files","diskUtil","writeFile","doesThrowAsync","loadLocalContract","RegExp","err","errorAssertUtil","assertError","copyEventBuildersAndPermissions","eventNameUtil","join","eventNamespace","wasFound","fields","target","payload","responsePayloadSchema","listenPermissionContract","installAndRegisterOneGlobalEvent","fqen","totalMatches","reduce","count","eventsPath","resolvePath","deleteDir","unified","unifyContracts","doesThrow","isGlobal","meta","local","boot","kill","EventStore","clearCache","createResults","seedDemoSkill","installSkillAtOrganization","connectToApi","skillId","apiKey","client","apiClientFactory","AbstractEventTest"],"mappings":"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","sourcesContent":["import {\n\tbuildPermissionContract,\n\tvalidateEventContract,\n} from '@sprucelabs/mercury-types'\nimport {\n\tbuildEmitTargetAndPayloadSchema,\n\teventContractUtil,\n\teventNameUtil,\n\teventTargetSchema,\n} from '@sprucelabs/spruce-event-utils'\nimport { diskUtil, versionUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport { errorAssertUtil } from '@sprucelabs/test-utils'\nimport CreateAction from '../../features/event/actions/CreateAction'\nimport EventStore from '../../features/event/stores/EventStore'\nimport AbstractEventTest from '../../tests/AbstractEventTest'\nimport testUtil from '../../tests/utilities/test.utility'\n\nconst EVENT_NAME_READABLE = 'my event store amazing event'\nconst EVENT_NAME = 'my-event-store-amazing-event'\nconst EVENT_CAMEL = 'myEventStoreAmazingEvent'\n\nexport default class EventStoreTest extends AbstractEventTest {\n\tprivate static createAction: CreateAction\n\tprotected static get version() {\n\t\treturn versionUtil.generateVersion()\n\t}\n\n\tpublic static async beforeEach() {\n\t\tawait super.beforeEach()\n\t\tthis.createAction = this.Action<CreateAction>('event', 'create')\n\t}\n\n\t@test()\n\tprotected static async canInstantiateEventStore() {\n\t\tassert.isTruthy(this.Store('event'))\n\t}\n\n\t@test()\n\tprotected static async hasFetchEventContractsMethod() {\n\t\tassert.isFunction(this.Store('event').fetchEventContracts)\n\t}\n\n\t@test()\n\tprotected static async fetchesCoreEventContracts() {\n\t\tconst results = await this.Store('event').fetchEventContracts({\n\t\t\tlocalNamespace: 'my-skill',\n\t\t})\n\t\tconst { contracts, errors } = results\n\n\t\tassert.isTrue(contracts.length >= 1)\n\n\t\tfor (const contract of contracts) {\n\t\t\tvalidateEventContract(contract)\n\t\t}\n\n\t\tassert.isEqual(errors.length, 0)\n\t}\n\n\t@test()\n\tprotected static async registerEventContract() {\n\t\tconst organizationFixture = this.getOrganizationFixture()\n\t\tconst org = await organizationFixture.seedDemoOrg({\n\t\t\tname: 'my new org',\n\t\t})\n\n\t\tconst { eventStore: eventStore1, skill: skill1 } =\n\t\t\tawait this.seedSkillAndInstallAtOrg(org, 'skill 1')\n\n\t\tconst { eventStore: eventStore2 } = await this.seedSkillAndInstallAtOrg(\n\t\t\torg,\n\t\t\t'skill 2'\n\t\t)\n\n\t\tawait eventStore1.registerEventContract({\n\t\t\teventContract: {\n\t\t\t\teventSignatures: {\n\t\t\t\t\t[`my-fantastic-event::${this.version.constValue}`]: {\n\t\t\t\t\t\temitPayloadSchema: buildEmitTargetAndPayloadSchema({\n\t\t\t\t\t\t\teventName: `my-fantastic-event::${this.version.constValue}`,\n\t\t\t\t\t\t\ttargetSchema: eventTargetSchema,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\temitPermissionContract: buildPermissionContract({\n\t\t\t\t\t\t\tid: 'my-fantastic-event-contract',\n\t\t\t\t\t\t\tname: 'Fanstastic emit perms',\n\t\t\t\t\t\t\tpermissions: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: 'can-emit-perms',\n\t\t\t\t\t\t\t\t\tname: 'can emit perm',\n\t\t\t\t\t\t\t\t\tdefaults: {\n\t\t\t\t\t\t\t\t\t\tskill: false,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tconst { contracts } = await eventStore2.fetchEventContracts({\n\t\t\tlocalNamespace: 'my-skill',\n\t\t})\n\n\t\tassert.isTrue(contracts.length >= 2)\n\t\tconst skillContract = contracts[1]\n\n\t\tconst sig = eventContractUtil.getSignatureByName(\n\t\t\tskillContract,\n\t\t\t`${skill1.slug}.my-fantastic-event::${this.version.constValue}`\n\t\t)\n\n\t\tassert.isEqual(\n\t\t\tsig.emitPermissionContract?.id,\n\t\t\t'my-fantastic-event-contract'\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async badLocalContractThrowsNiceError() {\n\t\tawait this.FeatureFixture().installCachedFeatures('events')\n\n\t\tconst skill = await this.getSkillFixture().registerCurrentSkill({\n\t\t\tname: 'my new skill',\n\t\t})\n\n\t\tconst results = await this.createAction.execute({\n\t\t\tnameReadable: EVENT_NAME_READABLE,\n\t\t\tnameKebab: EVENT_NAME,\n\t\t\tnameCamel: EVENT_CAMEL,\n\t\t})\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t`emitPayload.builder.ts`,\n\t\t\tresults.files\n\t\t)\n\n\t\tdiskUtil.writeFile(match, 'export default {}')\n\n\t\tconst err = await assert.doesThrowAsync(\n\t\t\t() => this.Store('event').loadLocalContract(skill.slug),\n\t\t\tnew RegExp(\n\t\t\t\t`${skill.slug}.${EVENT_NAME}::${\n\t\t\t\t\tversionUtil.generateVersion().constValue\n\t\t\t\t}`\n\t\t\t)\n\t\t)\n\n\t\terrorAssertUtil.assertError(err, 'INVALID_EVENT_CONTRACT')\n\t}\n\n\t@test()\n\tprotected static async badLocalSignature() {\n\t\tawait this.FeatureFixture().installCachedFeatures('events')\n\n\t\tconst skill = await this.getSkillFixture().registerCurrentSkill({\n\t\t\tname: 'my new skill',\n\t\t})\n\n\t\tconst results = await this.createAction.execute({\n\t\t\tnameReadable: EVENT_NAME_READABLE,\n\t\t\tnameKebab: EVENT_NAME,\n\t\t\tnameCamel: EVENT_CAMEL,\n\t\t})\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t`event.options.ts`,\n\t\t\tresults.files\n\t\t)\n\n\t\tdiskUtil.writeFile(match, 'export default {waka: true}')\n\n\t\tconst err = await assert.doesThrowAsync(\n\t\t\t() => this.Store('event').loadLocalContract(skill.slug),\n\t\t\tnew RegExp(\n\t\t\t\t`${skill.slug}.${EVENT_NAME}::${\n\t\t\t\t\tversionUtil.generateVersion().constValue\n\t\t\t\t}`\n\t\t\t)\n\t\t)\n\n\t\terrorAssertUtil.assertError(err, 'INVALID_EVENT_CONTRACT')\n\t}\n\n\t@test()\n\tprotected static async mixesInLocalContracts() {\n\t\tawait this.FeatureFixture().installCachedFeatures('events')\n\n\t\tconst skill = await this.getSkillFixture().registerCurrentSkill({\n\t\t\tname: 'my new skill',\n\t\t})\n\n\t\tawait this.createAction.execute({\n\t\t\tnameReadable: EVENT_NAME_READABLE,\n\t\t\tnameKebab: EVENT_NAME,\n\t\t\tnameCamel: EVENT_CAMEL,\n\t\t})\n\n\t\tawait this.copyEventBuildersAndPermissions(EVENT_NAME)\n\n\t\tawait this.Action('event', 'sync').execute({})\n\n\t\tconst { contracts } = await this.Store('event').fetchEventContracts({\n\t\t\tlocalNamespace: skill.slug,\n\t\t})\n\n\t\tassert.isTrue(contracts.length >= 2)\n\t\tconst name = eventNameUtil.join({\n\t\t\teventName: EVENT_NAME,\n\t\t\teventNamespace: skill.slug,\n\t\t\tversion: this.version.constValue,\n\t\t})\n\n\t\tlet wasFound = false\n\t\tfor (const contract of contracts) {\n\t\t\tif (contract.eventSignatures[name]?.emitPayloadSchema) {\n\t\t\t\twasFound = true\n\t\t\t\tassert.isEqual(\n\t\t\t\t\tcontract.eventSignatures[name].emitPayloadSchema?.id,\n\t\t\t\t\tEVENT_CAMEL + 'EmitTargetAndPayload'\n\t\t\t\t)\n\t\t\t\tassert.isTruthy(\n\t\t\t\t\tcontract.eventSignatures[name].emitPayloadSchema?.fields?.target\n\t\t\t\t)\n\t\t\t\tassert.isTruthy(\n\t\t\t\t\tcontract.eventSignatures[name].emitPayloadSchema?.fields?.payload\n\t\t\t\t)\n\t\t\t\tassert.isTruthy(contract.eventSignatures[name].responsePayloadSchema)\n\t\t\t\tassert.isTruthy(contract.eventSignatures[name].emitPermissionContract)\n\t\t\t\tassert.isTruthy(contract.eventSignatures[name].listenPermissionContract)\n\n\t\t\t\tvalidateEventContract(contract)\n\t\t\t}\n\t\t}\n\n\t\tassert.isTrue(wasFound)\n\t}\n\n\t@test()\n\tprotected static async mixesInLocalContractWithGlobalEventsAndDoesNotReturnContractTwice() {\n\t\tconst { skill, fqen } = await this.installAndRegisterOneGlobalEvent()\n\n\t\tconst { contracts } = await this.Store('event').fetchEventContracts({\n\t\t\tlocalNamespace: skill.slug,\n\t\t})\n\n\t\tconst totalMatches = contracts.reduce((count, contract) => {\n\t\t\tif (contract.eventSignatures[fqen]) {\n\t\t\t\tcount++\n\t\t\t}\n\t\t\treturn count\n\t\t}, 0)\n\n\t\tassert.isEqual(totalMatches, 1)\n\t}\n\n\t@test()\n\tprotected static async doesNotLoadGlobalContractsForSelf() {\n\t\tconst { fqen, skill } = await this.installAndRegisterOneGlobalEvent()\n\n\t\tconst eventsPath = this.resolvePath('src', 'events')\n\t\tdiskUtil.deleteDir(eventsPath)\n\n\t\tconst { contracts } = await this.Store('event').fetchEventContracts({\n\t\t\tlocalNamespace: skill.slug,\n\t\t})\n\n\t\tconst unified = eventContractUtil.unifyContracts(contracts)\n\n\t\tassert.isTruthy(unified)\n\t\tassert.doesThrow(() => eventContractUtil.getSignatureByName(unified, fqen))\n\t}\n\n\tprivate static async installAndRegisterOneGlobalEvent() {\n\t\tawait this.FeatureFixture().installCachedFeatures('events')\n\n\t\tconst skill = await this.getSkillFixture().registerCurrentSkill({\n\t\t\tname: 'event store test skill',\n\t\t})\n\n\t\tconst results = await this.createAction.execute({\n\t\t\tnameReadable: EVENT_NAME_READABLE,\n\t\t\tnameKebab: EVENT_NAME,\n\t\t\tnameCamel: EVENT_CAMEL,\n\t\t\tisGlobal: true,\n\t\t})\n\n\t\tconst { fqen } = results.meta ?? {}\n\n\t\tassert.isTruthy(fqen)\n\n\t\tconst boot = await this.Action('skill', 'boot').execute({ local: true })\n\n\t\tboot.meta?.kill()\n\n\t\tEventStore.clearCache()\n\n\t\treturn { boot, skill, fqen, createResults: results }\n\t}\n\n\tprivate static async seedSkillAndInstallAtOrg(org: any, name: string) {\n\t\tconst skill = await this.getSkillFixture().seedDemoSkill({\n\t\t\tname,\n\t\t})\n\n\t\tawait this.getOrganizationFixture().installSkillAtOrganization(\n\t\t\tskill.id,\n\t\t\torg.id\n\t\t)\n\n\t\tconst client = await this.connectToApi({\n\t\t\tskillId: skill.id,\n\t\t\tapiKey: skill.apiKey,\n\t\t})\n\n\t\tconst eventStore = this.Store('event', {\n\t\t\tapiClientFactory: async () => {\n\t\t\t\treturn client\n\t\t\t},\n\t\t})\n\n\t\treturn { eventStore, skill }\n\t}\n}\n"],"file":"EventStore.test.js"}
package/build/cli.js CHANGED
@@ -653,7 +653,11 @@ function _run() {
653
653
  json,
654
654
  command,
655
655
  results,
656
+ _iterator2,
657
+ _step2,
658
+ client,
656
659
  _args11 = arguments;
660
+
657
661
  return _regenerator["default"].wrap(function _callee11$(_context11) {
658
662
  while (1) {
659
663
  switch (_context11.prev = _context11.next) {
@@ -715,14 +719,51 @@ function _run() {
715
719
 
716
720
  case 26:
717
721
  results = _context11.sent;
722
+ _iterator2 = _createForOfIteratorHelper(_mercuryClient.MercuryClientFactory.getClients());
723
+ _context11.prev = 28;
724
+
725
+ _iterator2.s();
726
+
727
+ case 30:
728
+ if ((_step2 = _iterator2.n()).done) {
729
+ _context11.next = 36;
730
+ break;
731
+ }
732
+
733
+ client = _step2.value;
734
+ _context11.next = 34;
735
+ return client.disconnect();
736
+
737
+ case 34:
738
+ _context11.next = 30;
739
+ break;
740
+
741
+ case 36:
742
+ _context11.next = 41;
743
+ break;
744
+
745
+ case 38:
746
+ _context11.prev = 38;
747
+ _context11.t0 = _context11["catch"](28);
748
+
749
+ _iterator2.e(_context11.t0);
750
+
751
+ case 41:
752
+ _context11.prev = 41;
753
+
754
+ _iterator2.f();
755
+
756
+ return _context11.finish(41);
757
+
758
+ case 44:
718
759
  return _context11.abrupt("return", results);
719
760
 
720
- case 28:
761
+ case 45:
721
762
  case "end":
722
763
  return _context11.stop();
723
764
  }
724
765
  }
725
- }, _callee11);
766
+ }, _callee11, null, [[28, 38, 41, 44]]);
726
767
  }));
727
768
  return _run.apply(this, arguments);
728
769
  }
package/build/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"names":["Cli","cwd","featureInstaller","serviceFactory","emitter","attacher","actionExecuter","on","off","emit","options","install","code","getFeature","isInstalled","skill","status","errors","SpruceError","commandService","Service","command","isRunningLocally","execute","results","resultParts","stdout","split","HEALTH_DIVIDER","JSON","parse","error","originalError","apiClients","key","disconnect","program","CliGlobalEmitter","Emitter","process","ImportService","enableCaching","ServiceFactory","apiClientFactory","buildApiClientFactory","storeFactory","StoreFactory","homeDir","osUtil","homedir","ui","graphicsInterface","TerminalInterface","writerFactory","WriterFactory","templates","settings","linter","optionOverrides","loadOptionOverrides","blockedCommands","loadCommandBlocks","actionFactory","ActionFactory","ActionExecuter","featureInstallerFactory","FeatureInstallerFactory","WithAllFeatures","FeatureCommandAttacher","codes","featureCodes","feature","attachFeature","commands","sort","a","b","_name","localeCompare","action","_","args","cli","pkg","blocks","doesExist","get","mapped","overrides","Object","keys","forEach","argParserUtil","bootOptions","apiClientUtil","generateClientCacheKey","connectToApi","connect","eventsContracts","require","MercuryClientFactory","Client","contracts","host","DEFAULT_HOST","allowSelfSignedCrt","client","shouldAuthAsCurrentSkill","shouldAuthAsLoggedInPerson","auth","skillId","apiKey","getCurrentSkill","id","person","getLoggedInPerson","token","length","authenticate","run","argv","Command","storeOptionsAsProperties","option","dirIdx","findIndex","v","dir","newCwd","diskUtil","resolvePath","terminal","env","CLI_RENDER_STACK_TRACES","clear","renderHero","CLI_HERO","isAskingForVersion","json","renderHeadline","version","Boot","HOST","setupInFlightEntertainment","parseAsync","_actionResults","doesSupportColor","ENABLE_INSTALL_INTERTAINMENT","CommandService","__dirname","InFlightEntertainment","setup","FeatureInstaller","startInFlightIntertainmentHandler","didUpdateHandler","start","message","writeStatus","stopInFlightIntertainmentHandler","stop"],"mappings":"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","sourcesContent":["import osUtil from 'os'\nimport {\n\tConnectionOptions,\n\tMercuryClientFactory,\n} from '@sprucelabs/mercury-client'\nimport { MercuryEventEmitter, SpruceSchemas } from '@sprucelabs/mercury-types'\nimport {\n\tdiskUtil,\n\tHealthCheckResults,\n\tHEALTH_DIVIDER,\n} from '@sprucelabs/spruce-skill-utils'\nimport { templates } from '@sprucelabs/spruce-templates'\nimport { Command, CommanderStatic } from 'commander'\nimport './addons/filePrompt.addon'\nimport { CLI_HERO, DEFAULT_HOST } from './constants'\nimport SpruceError from './errors/SpruceError'\nimport ActionExecuter from './features/ActionExecuter'\nimport ActionFactory from './features/ActionFactory'\nimport FeatureCommandAttacher, {\n\tBlockedCommands,\n\tOptionOverrides,\n} from './features/FeatureCommandAttacher'\nimport FeatureInstaller from './features/FeatureInstaller'\nimport FeatureInstallerFactory from './features/FeatureInstallerFactory'\nimport { FeatureCode, InstallFeatureOptions } from './features/features.types'\nimport CliGlobalEmitter, {\n\tGlobalEmitter,\n\tGlobalEventContract,\n} from './GlobalEmitter'\nimport InFlightEntertainment from './InFlightEntertainment'\nimport TerminalInterface from './interfaces/TerminalInterface'\nimport CommandService from './services/CommandService'\nimport ImportService from './services/ImportService'\nimport PkgService from './services/PkgService'\nimport ServiceFactory from './services/ServiceFactory'\nimport StoreFactory from './stores/StoreFactory'\nimport {\n\tApiClient,\n\tApiClientFactory,\n\tApiClientFactoryOptions,\n} from './types/apiClient.types'\nimport { GraphicsInterface } from './types/cli.types'\nimport apiClientUtil from './utilities/apiClient.utility'\nimport { argParserUtil } from './utilities/argParser.utility'\nimport WriterFactory from './writers/WriterFactory'\n\ninterface HealthOptions {\n\tisRunningLocally?: boolean\n}\n\nexport interface CliInterface extends MercuryEventEmitter<GlobalEventContract> {\n\tinstallFeatures: FeatureInstaller['install']\n\tgetFeature: FeatureInstaller['getFeature']\n\tcheckHealth(options?: HealthOptions): Promise<HealthCheckResults>\n}\n\nexport interface CliBootOptions {\n\tcwd?: string\n\thomeDir?: string\n\tprogram?: CommanderStatic['program']\n\tgraphicsInterface?: GraphicsInterface\n\temitter?: GlobalEmitter\n\tapiClientFactory?: ApiClientFactory\n\tfeatureInstaller?: FeatureInstaller\n\thost?: string\n}\n\ntype PromiseCache = Record<string, Promise<ApiClient>>\n\nexport default class Cli implements CliInterface {\n\tprivate cwd: string\n\tprivate featureInstaller: FeatureInstaller\n\tprivate serviceFactory: ServiceFactory\n\tpublic readonly emitter: GlobalEmitter\n\tprivate static apiClients: PromiseCache = {}\n\tprivate attacher?: FeatureCommandAttacher\n\tprivate actionExecuter?: ActionExecuter\n\n\tprivate constructor(\n\t\tcwd: string,\n\t\tfeatureInstaller: FeatureInstaller,\n\t\tserviceFactory: ServiceFactory,\n\t\temitter: GlobalEmitter,\n\t\tattacher?: FeatureCommandAttacher,\n\t\tactionExecuter?: ActionExecuter\n\t) {\n\t\tthis.cwd = cwd\n\t\tthis.featureInstaller = featureInstaller\n\t\tthis.serviceFactory = serviceFactory\n\t\tthis.emitter = emitter\n\t\tthis.attacher = attacher\n\t\tthis.actionExecuter = actionExecuter\n\t}\n\n\tpublic static async resetApiClients() {\n\t\tfor (const key in this.apiClients) {\n\t\t\tawait (await this.apiClients[key]).disconnect()\n\t\t}\n\n\t\tthis.apiClients = {}\n\t}\n\n\tpublic getAttacher() {\n\t\treturn this.attacher\n\t}\n\n\tpublic getActionExecuter() {\n\t\treturn this.actionExecuter\n\t}\n\n\tpublic async on(...args: any[]) {\n\t\t//@ts-ignore\n\t\treturn this.emitter.on(...args)\n\t}\n\n\tpublic async off(...args: any[]) {\n\t\t//@ts-ignore\n\t\treturn this.emitter.off(...args)\n\t}\n\n\tpublic async emit(...args: any[]) {\n\t\t//@ts-ignore\n\t\treturn this.emitter.emit(...args)\n\t}\n\n\tpublic async installFeatures(options: InstallFeatureOptions) {\n\t\treturn this.featureInstaller.install(options)\n\t}\n\n\tpublic getFeature<C extends FeatureCode>(code: C) {\n\t\treturn this.featureInstaller.getFeature(code)\n\t}\n\n\tpublic async checkHealth(\n\t\toptions?: HealthOptions\n\t): Promise<HealthCheckResults> {\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (!isInstalled) {\n\t\t\treturn {\n\t\t\t\tskill: {\n\t\t\t\t\tstatus: 'failed',\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tcode: 'SKILL_NOT_INSTALLED',\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst commandService = this.serviceFactory.Service(this.cwd, 'command')\n\t\t\tconst command =\n\t\t\t\toptions?.isRunningLocally === false\n\t\t\t\t\t? 'yarn health'\n\t\t\t\t\t: 'yarn health.local'\n\t\t\tconst results = await commandService.execute(command)\n\t\t\tconst resultParts = results.stdout.split(HEALTH_DIVIDER)\n\n\t\t\treturn JSON.parse(resultParts[1]) as HealthCheckResults\n\t\t} catch (originalError: any) {\n\t\t\tconst error = new SpruceError({\n\t\t\t\tcode: 'BOOT_ERROR',\n\t\t\t\toriginalError,\n\t\t\t})\n\n\t\t\treturn {\n\t\t\t\tskill: {\n\t\t\t\t\tstatus: 'failed',\n\t\t\t\t\terrors: [error],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic static async Boot(options?: CliBootOptions): Promise<CliInterface> {\n\t\tconst program = options?.program\n\t\tconst emitter = options?.emitter ?? CliGlobalEmitter.Emitter()\n\n\t\tlet cwd = options?.cwd ?? process.cwd()\n\n\t\tImportService.enableCaching()\n\n\t\tconst serviceFactory = new ServiceFactory()\n\t\tconst apiClientFactory =\n\t\t\toptions?.apiClientFactory ??\n\t\t\tCli.buildApiClientFactory(cwd, serviceFactory, options)\n\n\t\tconst storeFactory = new StoreFactory({\n\t\t\tcwd,\n\t\t\tserviceFactory,\n\t\t\thomeDir: options?.homeDir ?? osUtil.homedir(),\n\t\t\temitter,\n\t\t\tapiClientFactory,\n\t\t})\n\n\t\tconst ui = options?.graphicsInterface ?? new TerminalInterface(cwd)\n\t\tlet featureInstaller: FeatureInstaller | undefined\n\n\t\tconst writerFactory = new WriterFactory({\n\t\t\ttemplates,\n\t\t\tui,\n\t\t\tsettings: serviceFactory.Service(cwd, 'settings'),\n\t\t\tlinter: serviceFactory.Service(cwd, 'lint'),\n\t\t})\n\n\t\tconst optionOverrides = this.loadOptionOverrides(\n\t\t\tserviceFactory.Service(cwd, 'pkg')\n\t\t)\n\n\t\tconst blockedCommands = this.loadCommandBlocks(\n\t\t\tserviceFactory.Service(cwd, 'pkg')\n\t\t)\n\n\t\tconst actionFactory = new ActionFactory({\n\t\t\tui,\n\t\t\temitter,\n\t\t\tapiClientFactory,\n\t\t\tcwd,\n\t\t\tserviceFactory,\n\t\t\tstoreFactory,\n\t\t\ttemplates,\n\t\t\twriterFactory,\n\t\t\tblockedCommands,\n\t\t\toptionOverrides,\n\t\t})\n\n\t\tconst actionExecuter = new ActionExecuter({\n\t\t\tactionFactory,\n\t\t\tui,\n\t\t\temitter,\n\t\t\t//@ts-ignore\n\t\t\tfeatureInstallerFactory: () => featureInstaller,\n\t\t})\n\n\t\tfeatureInstaller =\n\t\t\toptions?.featureInstaller ??\n\t\t\tFeatureInstallerFactory.WithAllFeatures({\n\t\t\t\tcwd,\n\t\t\t\tserviceFactory,\n\t\t\t\tstoreFactory,\n\t\t\t\tui,\n\t\t\t\temitter,\n\t\t\t\tapiClientFactory,\n\t\t\t\tactionExecuter,\n\t\t\t})\n\n\t\tlet attacher: FeatureCommandAttacher | undefined\n\n\t\tif (program) {\n\t\t\tattacher = new FeatureCommandAttacher({\n\t\t\t\tprogram,\n\t\t\t\tui,\n\t\t\t\tactionExecuter,\n\t\t\t})\n\n\t\t\tconst codes = FeatureInstallerFactory.featureCodes\n\n\t\t\tfor (const code of codes) {\n\t\t\t\tconst feature = featureInstaller.getFeature(code)\n\t\t\t\tawait attacher.attachFeature(feature)\n\t\t\t}\n\n\t\t\tprogram.commands.sort((a: any, b: any) => a._name.localeCompare(b._name))\n\n\t\t\tprogram.action((_, command) => {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'INVALID_COMMAND',\n\t\t\t\t\targs: command.args || [],\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\tconst cli = new Cli(\n\t\t\tcwd,\n\t\t\tfeatureInstaller,\n\t\t\tserviceFactory,\n\t\t\temitter,\n\t\t\tattacher,\n\t\t\tactionExecuter\n\t\t)\n\n\t\treturn cli as CliInterface\n\t}\n\n\tprivate static loadCommandBlocks(pkg: PkgService): BlockedCommands {\n\t\tlet blocks: BlockedCommands = {}\n\t\tif (pkg.doesExist()) {\n\t\t\tblocks = pkg.get('skill.blockedCommands') ?? {}\n\t\t}\n\t\treturn blocks\n\t}\n\n\tprivate static loadOptionOverrides(pkg: PkgService): OptionOverrides {\n\t\tconst mapped: OptionOverrides = {}\n\n\t\tif (pkg.doesExist()) {\n\t\t\tconst overrides = pkg.get('skill.commandOverrides')\n\n\t\t\tObject.keys(overrides ?? {}).forEach((command) => {\n\t\t\t\tconst options = argParserUtil.parse(overrides[command])\n\t\t\t\tmapped[command] = options\n\t\t\t})\n\t\t}\n\t\treturn mapped\n\t}\n\n\tpublic static buildApiClientFactory(\n\t\tcwd: string,\n\t\tserviceFactory: ServiceFactory,\n\t\tbootOptions?: CliBootOptions & ConnectionOptions\n\t): ApiClientFactory {\n\t\tconst apiClientFactory = async (options?: ApiClientFactoryOptions) => {\n\t\t\tconst key = apiClientUtil.generateClientCacheKey(options)\n\n\t\t\tif (!Cli.apiClients[key]) {\n\t\t\t\tCli.apiClients[key] = Cli.connectToApi(\n\t\t\t\t\tcwd,\n\t\t\t\t\tserviceFactory,\n\t\t\t\t\toptions,\n\t\t\t\t\tbootOptions\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn Cli.apiClients[key]\n\t\t}\n\n\t\treturn apiClientFactory\n\t}\n\n\tprivate static async connectToApi(\n\t\tcwd: string,\n\t\tserviceFactory: ServiceFactory,\n\t\toptions?: ApiClientFactoryOptions,\n\t\tbootOptions?: CliBootOptions & ConnectionOptions\n\t): Promise<ApiClient> {\n\t\tconst connect = bootOptions?.apiClientFactory\n\t\t\t? bootOptions.apiClientFactory\n\t\t\t: async () => {\n\t\t\t\t\tconst eventsContracts =\n\t\t\t\t\t\trequire('#spruce/events/events.contract').default\n\n\t\t\t\t\tconst client: ApiClient = await MercuryClientFactory.Client({\n\t\t\t\t\t\tcontracts: eventsContracts as any,\n\t\t\t\t\t\thost: bootOptions?.host ?? DEFAULT_HOST,\n\t\t\t\t\t\tallowSelfSignedCrt: true,\n\t\t\t\t\t\t...bootOptions,\n\t\t\t\t\t})\n\n\t\t\t\t\treturn client\n\t\t\t }\n\n\t\tconst {\n\t\t\tshouldAuthAsCurrentSkill = false,\n\t\t\tshouldAuthAsLoggedInPerson = true,\n\t\t} = options ?? {}\n\n\t\tconst client = await connect()\n\n\t\tlet auth: SpruceSchemas.Mercury.v2020_12_25.AuthenticateEmitPayload = {}\n\n\t\tif (options?.skillId && options?.apiKey) {\n\t\t\tauth = {\n\t\t\t\tskillId: options.skillId,\n\t\t\t\tapiKey: options.apiKey,\n\t\t\t}\n\t\t} else if (shouldAuthAsCurrentSkill) {\n\t\t\tconst skill = serviceFactory.Service(cwd, 'auth').getCurrentSkill()\n\n\t\t\tif (skill) {\n\t\t\t\tauth = {\n\t\t\t\t\tskillId: skill.id,\n\t\t\t\t\tapiKey: skill.apiKey,\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (shouldAuthAsLoggedInPerson) {\n\t\t\tconst person = serviceFactory.Service(cwd, 'auth').getLoggedInPerson()\n\n\t\t\tif (person) {\n\t\t\t\tauth.token = person.token\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(auth).length > 0) {\n\t\t\tawait client.authenticate({\n\t\t\t\t...(auth as any),\n\t\t\t})\n\n\t\t\t//@ts-ignore\n\t\t\tclient.auth = auth\n\t\t}\n\n\t\treturn client\n\t}\n}\n\nexport async function run(argv: string[] = []): Promise<void> {\n\tconst program = new Command()\n\tlet cwd = process.cwd()\n\n\tprogram.storeOptionsAsProperties(false)\n\tprogram.option('--no-color', 'Disable color output in the console')\n\tprogram.option(\n\t\t'-d, --directory <path>',\n\t\t'The working directory to execute the command'\n\t)\n\tprogram.option('-v, --version', 'The version of the cli')\n\n\tconst dirIdx = process.argv.findIndex(\n\t\t(v) => v === '--directory' || v === '-d'\n\t)\n\n\tif (dirIdx > -1) {\n\t\tconst dir = process.argv[dirIdx + 1]\n\t\tconst newCwd = diskUtil.resolvePath(cwd, dir)\n\t\tcwd = newCwd\n\t}\n\n\tconst terminal = new TerminalInterface(\n\t\tcwd,\n\t\tprocess.env.CLI_RENDER_STACK_TRACES !== 'false'\n\t)\n\tterminal.clear()\n\tterminal.renderHero(CLI_HERO)\n\n\tconst isAskingForVersion =\n\t\tprocess.argv.findIndex((v) => v === '--version' || v === '-v') > -1\n\n\tif (isAskingForVersion) {\n\t\tconst json = require('../package.json')\n\t\tterminal.renderHeadline(`Version ${json.version}`)\n\t\treturn\n\t}\n\n\tawait Cli.Boot({\n\t\tprogram,\n\t\tcwd,\n\t\thost: process.env.HOST,\n\t\tgraphicsInterface: terminal,\n\t})\n\n\tawait setupInFlightEntertainment(terminal)\n\n\tconst command = await program.parseAsync(argv)\n\t//@ts-ignore\n\tconst results = await command._actionResults[0]\n\n\treturn results\n}\n\nasync function setupInFlightEntertainment(ui: TerminalInterface) {\n\tif (\n\t\tTerminalInterface.doesSupportColor() &&\n\t\tprocess.env.ENABLE_INSTALL_INTERTAINMENT !== 'false'\n\t) {\n\t\tconst command = new CommandService(diskUtil.resolvePath(__dirname, '../'))\n\t\tInFlightEntertainment.setup({ command, ui })\n\n\t\tFeatureInstaller.startInFlightIntertainmentHandler = (didUpdateHandler) => {\n\t\t\tInFlightEntertainment.start()\n\t\t\tdidUpdateHandler((message) => {\n\t\t\t\tInFlightEntertainment.writeStatus(message)\n\t\t\t})\n\t\t}\n\n\t\tFeatureInstaller.stopInFlightIntertainmentHandler = () => {\n\t\t\tInFlightEntertainment.stop()\n\t\t}\n\t}\n}\n"],"file":"cli.js"}
1
+ {"version":3,"sources":["../src/cli.ts"],"names":["Cli","cwd","featureInstaller","serviceFactory","emitter","attacher","actionExecuter","on","off","emit","options","install","code","getFeature","isInstalled","skill","status","errors","SpruceError","commandService","Service","command","isRunningLocally","execute","results","resultParts","stdout","split","HEALTH_DIVIDER","JSON","parse","error","originalError","apiClients","key","disconnect","program","CliGlobalEmitter","Emitter","process","ImportService","enableCaching","ServiceFactory","apiClientFactory","buildApiClientFactory","storeFactory","StoreFactory","homeDir","osUtil","homedir","ui","graphicsInterface","TerminalInterface","writerFactory","WriterFactory","templates","settings","linter","optionOverrides","loadOptionOverrides","blockedCommands","loadCommandBlocks","actionFactory","ActionFactory","ActionExecuter","featureInstallerFactory","FeatureInstallerFactory","WithAllFeatures","FeatureCommandAttacher","codes","featureCodes","feature","attachFeature","commands","sort","a","b","_name","localeCompare","action","_","args","cli","pkg","blocks","doesExist","get","mapped","overrides","Object","keys","forEach","argParserUtil","bootOptions","apiClientUtil","generateClientCacheKey","connectToApi","connect","eventsContracts","require","MercuryClientFactory","Client","contracts","host","DEFAULT_HOST","allowSelfSignedCrt","client","shouldAuthAsCurrentSkill","shouldAuthAsLoggedInPerson","auth","skillId","apiKey","getCurrentSkill","id","person","getLoggedInPerson","token","length","authenticate","run","argv","Command","storeOptionsAsProperties","option","dirIdx","findIndex","v","dir","newCwd","diskUtil","resolvePath","terminal","env","CLI_RENDER_STACK_TRACES","clear","renderHero","CLI_HERO","isAskingForVersion","json","renderHeadline","version","Boot","HOST","setupInFlightEntertainment","parseAsync","_actionResults","getClients","doesSupportColor","ENABLE_INSTALL_INTERTAINMENT","CommandService","__dirname","InFlightEntertainment","setup","FeatureInstaller","startInFlightIntertainmentHandler","didUpdateHandler","start","message","writeStatus","stopInFlightIntertainmentHandler","stop"],"mappings":"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","sourcesContent":["import osUtil from 'os'\nimport {\n\tConnectionOptions,\n\tMercuryClientFactory,\n} from '@sprucelabs/mercury-client'\nimport { MercuryEventEmitter, SpruceSchemas } from '@sprucelabs/mercury-types'\nimport {\n\tdiskUtil,\n\tHealthCheckResults,\n\tHEALTH_DIVIDER,\n} from '@sprucelabs/spruce-skill-utils'\nimport { templates } from '@sprucelabs/spruce-templates'\nimport { Command, CommanderStatic } from 'commander'\nimport './addons/filePrompt.addon'\nimport { CLI_HERO, DEFAULT_HOST } from './constants'\nimport SpruceError from './errors/SpruceError'\nimport ActionExecuter from './features/ActionExecuter'\nimport ActionFactory from './features/ActionFactory'\nimport FeatureCommandAttacher, {\n\tBlockedCommands,\n\tOptionOverrides,\n} from './features/FeatureCommandAttacher'\nimport FeatureInstaller from './features/FeatureInstaller'\nimport FeatureInstallerFactory from './features/FeatureInstallerFactory'\nimport { FeatureCode, InstallFeatureOptions } from './features/features.types'\nimport CliGlobalEmitter, {\n\tGlobalEmitter,\n\tGlobalEventContract,\n} from './GlobalEmitter'\nimport InFlightEntertainment from './InFlightEntertainment'\nimport TerminalInterface from './interfaces/TerminalInterface'\nimport CommandService from './services/CommandService'\nimport ImportService from './services/ImportService'\nimport PkgService from './services/PkgService'\nimport ServiceFactory from './services/ServiceFactory'\nimport StoreFactory from './stores/StoreFactory'\nimport {\n\tApiClient,\n\tApiClientFactory,\n\tApiClientFactoryOptions,\n} from './types/apiClient.types'\nimport { GraphicsInterface } from './types/cli.types'\nimport apiClientUtil from './utilities/apiClient.utility'\nimport { argParserUtil } from './utilities/argParser.utility'\nimport WriterFactory from './writers/WriterFactory'\n\ninterface HealthOptions {\n\tisRunningLocally?: boolean\n}\n\nexport interface CliInterface extends MercuryEventEmitter<GlobalEventContract> {\n\tinstallFeatures: FeatureInstaller['install']\n\tgetFeature: FeatureInstaller['getFeature']\n\tcheckHealth(options?: HealthOptions): Promise<HealthCheckResults>\n}\n\nexport interface CliBootOptions {\n\tcwd?: string\n\thomeDir?: string\n\tprogram?: CommanderStatic['program']\n\tgraphicsInterface?: GraphicsInterface\n\temitter?: GlobalEmitter\n\tapiClientFactory?: ApiClientFactory\n\tfeatureInstaller?: FeatureInstaller\n\thost?: string\n}\n\ntype PromiseCache = Record<string, Promise<ApiClient>>\n\nexport default class Cli implements CliInterface {\n\tprivate cwd: string\n\tprivate featureInstaller: FeatureInstaller\n\tprivate serviceFactory: ServiceFactory\n\tpublic readonly emitter: GlobalEmitter\n\tprivate static apiClients: PromiseCache = {}\n\tprivate attacher?: FeatureCommandAttacher\n\tprivate actionExecuter?: ActionExecuter\n\n\tprivate constructor(\n\t\tcwd: string,\n\t\tfeatureInstaller: FeatureInstaller,\n\t\tserviceFactory: ServiceFactory,\n\t\temitter: GlobalEmitter,\n\t\tattacher?: FeatureCommandAttacher,\n\t\tactionExecuter?: ActionExecuter\n\t) {\n\t\tthis.cwd = cwd\n\t\tthis.featureInstaller = featureInstaller\n\t\tthis.serviceFactory = serviceFactory\n\t\tthis.emitter = emitter\n\t\tthis.attacher = attacher\n\t\tthis.actionExecuter = actionExecuter\n\t}\n\n\tpublic static async resetApiClients() {\n\t\tfor (const key in this.apiClients) {\n\t\t\tawait (await this.apiClients[key]).disconnect()\n\t\t}\n\n\t\tthis.apiClients = {}\n\t}\n\n\tpublic getAttacher() {\n\t\treturn this.attacher\n\t}\n\n\tpublic getActionExecuter() {\n\t\treturn this.actionExecuter\n\t}\n\n\tpublic async on(...args: any[]) {\n\t\t//@ts-ignore\n\t\treturn this.emitter.on(...args)\n\t}\n\n\tpublic async off(...args: any[]) {\n\t\t//@ts-ignore\n\t\treturn this.emitter.off(...args)\n\t}\n\n\tpublic async emit(...args: any[]) {\n\t\t//@ts-ignore\n\t\treturn this.emitter.emit(...args)\n\t}\n\n\tpublic async installFeatures(options: InstallFeatureOptions) {\n\t\treturn this.featureInstaller.install(options)\n\t}\n\n\tpublic getFeature<C extends FeatureCode>(code: C) {\n\t\treturn this.featureInstaller.getFeature(code)\n\t}\n\n\tpublic async checkHealth(\n\t\toptions?: HealthOptions\n\t): Promise<HealthCheckResults> {\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (!isInstalled) {\n\t\t\treturn {\n\t\t\t\tskill: {\n\t\t\t\t\tstatus: 'failed',\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tcode: 'SKILL_NOT_INSTALLED',\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst commandService = this.serviceFactory.Service(this.cwd, 'command')\n\t\t\tconst command =\n\t\t\t\toptions?.isRunningLocally === false\n\t\t\t\t\t? 'yarn health'\n\t\t\t\t\t: 'yarn health.local'\n\t\t\tconst results = await commandService.execute(command)\n\t\t\tconst resultParts = results.stdout.split(HEALTH_DIVIDER)\n\n\t\t\treturn JSON.parse(resultParts[1]) as HealthCheckResults\n\t\t} catch (originalError: any) {\n\t\t\tconst error = new SpruceError({\n\t\t\t\tcode: 'BOOT_ERROR',\n\t\t\t\toriginalError,\n\t\t\t})\n\n\t\t\treturn {\n\t\t\t\tskill: {\n\t\t\t\t\tstatus: 'failed',\n\t\t\t\t\terrors: [error],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic static async Boot(options?: CliBootOptions): Promise<CliInterface> {\n\t\tconst program = options?.program\n\t\tconst emitter = options?.emitter ?? CliGlobalEmitter.Emitter()\n\n\t\tlet cwd = options?.cwd ?? process.cwd()\n\n\t\tImportService.enableCaching()\n\n\t\tconst serviceFactory = new ServiceFactory()\n\t\tconst apiClientFactory =\n\t\t\toptions?.apiClientFactory ??\n\t\t\tCli.buildApiClientFactory(cwd, serviceFactory, options)\n\n\t\tconst storeFactory = new StoreFactory({\n\t\t\tcwd,\n\t\t\tserviceFactory,\n\t\t\thomeDir: options?.homeDir ?? osUtil.homedir(),\n\t\t\temitter,\n\t\t\tapiClientFactory,\n\t\t})\n\n\t\tconst ui = options?.graphicsInterface ?? new TerminalInterface(cwd)\n\t\tlet featureInstaller: FeatureInstaller | undefined\n\n\t\tconst writerFactory = new WriterFactory({\n\t\t\ttemplates,\n\t\t\tui,\n\t\t\tsettings: serviceFactory.Service(cwd, 'settings'),\n\t\t\tlinter: serviceFactory.Service(cwd, 'lint'),\n\t\t})\n\n\t\tconst optionOverrides = this.loadOptionOverrides(\n\t\t\tserviceFactory.Service(cwd, 'pkg')\n\t\t)\n\n\t\tconst blockedCommands = this.loadCommandBlocks(\n\t\t\tserviceFactory.Service(cwd, 'pkg')\n\t\t)\n\n\t\tconst actionFactory = new ActionFactory({\n\t\t\tui,\n\t\t\temitter,\n\t\t\tapiClientFactory,\n\t\t\tcwd,\n\t\t\tserviceFactory,\n\t\t\tstoreFactory,\n\t\t\ttemplates,\n\t\t\twriterFactory,\n\t\t\tblockedCommands,\n\t\t\toptionOverrides,\n\t\t})\n\n\t\tconst actionExecuter = new ActionExecuter({\n\t\t\tactionFactory,\n\t\t\tui,\n\t\t\temitter,\n\t\t\t//@ts-ignore\n\t\t\tfeatureInstallerFactory: () => featureInstaller,\n\t\t})\n\n\t\tfeatureInstaller =\n\t\t\toptions?.featureInstaller ??\n\t\t\tFeatureInstallerFactory.WithAllFeatures({\n\t\t\t\tcwd,\n\t\t\t\tserviceFactory,\n\t\t\t\tstoreFactory,\n\t\t\t\tui,\n\t\t\t\temitter,\n\t\t\t\tapiClientFactory,\n\t\t\t\tactionExecuter,\n\t\t\t})\n\n\t\tlet attacher: FeatureCommandAttacher | undefined\n\n\t\tif (program) {\n\t\t\tattacher = new FeatureCommandAttacher({\n\t\t\t\tprogram,\n\t\t\t\tui,\n\t\t\t\tactionExecuter,\n\t\t\t})\n\n\t\t\tconst codes = FeatureInstallerFactory.featureCodes\n\n\t\t\tfor (const code of codes) {\n\t\t\t\tconst feature = featureInstaller.getFeature(code)\n\t\t\t\tawait attacher.attachFeature(feature)\n\t\t\t}\n\n\t\t\tprogram.commands.sort((a: any, b: any) => a._name.localeCompare(b._name))\n\n\t\t\tprogram.action((_, command) => {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'INVALID_COMMAND',\n\t\t\t\t\targs: command.args || [],\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\tconst cli = new Cli(\n\t\t\tcwd,\n\t\t\tfeatureInstaller,\n\t\t\tserviceFactory,\n\t\t\temitter,\n\t\t\tattacher,\n\t\t\tactionExecuter\n\t\t)\n\n\t\treturn cli as CliInterface\n\t}\n\n\tprivate static loadCommandBlocks(pkg: PkgService): BlockedCommands {\n\t\tlet blocks: BlockedCommands = {}\n\t\tif (pkg.doesExist()) {\n\t\t\tblocks = pkg.get('skill.blockedCommands') ?? {}\n\t\t}\n\t\treturn blocks\n\t}\n\n\tprivate static loadOptionOverrides(pkg: PkgService): OptionOverrides {\n\t\tconst mapped: OptionOverrides = {}\n\n\t\tif (pkg.doesExist()) {\n\t\t\tconst overrides = pkg.get('skill.commandOverrides')\n\n\t\t\tObject.keys(overrides ?? {}).forEach((command) => {\n\t\t\t\tconst options = argParserUtil.parse(overrides[command])\n\t\t\t\tmapped[command] = options\n\t\t\t})\n\t\t}\n\t\treturn mapped\n\t}\n\n\tpublic static buildApiClientFactory(\n\t\tcwd: string,\n\t\tserviceFactory: ServiceFactory,\n\t\tbootOptions?: CliBootOptions & ConnectionOptions\n\t): ApiClientFactory {\n\t\tconst apiClientFactory = async (options?: ApiClientFactoryOptions) => {\n\t\t\tconst key = apiClientUtil.generateClientCacheKey(options)\n\n\t\t\tif (!Cli.apiClients[key]) {\n\t\t\t\tCli.apiClients[key] = Cli.connectToApi(\n\t\t\t\t\tcwd,\n\t\t\t\t\tserviceFactory,\n\t\t\t\t\toptions,\n\t\t\t\t\tbootOptions\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn Cli.apiClients[key]\n\t\t}\n\n\t\treturn apiClientFactory\n\t}\n\n\tprivate static async connectToApi(\n\t\tcwd: string,\n\t\tserviceFactory: ServiceFactory,\n\t\toptions?: ApiClientFactoryOptions,\n\t\tbootOptions?: CliBootOptions & ConnectionOptions\n\t): Promise<ApiClient> {\n\t\tconst connect = bootOptions?.apiClientFactory\n\t\t\t? bootOptions.apiClientFactory\n\t\t\t: async () => {\n\t\t\t\t\tconst eventsContracts =\n\t\t\t\t\t\trequire('#spruce/events/events.contract').default\n\n\t\t\t\t\tconst client: ApiClient = await MercuryClientFactory.Client({\n\t\t\t\t\t\tcontracts: eventsContracts as any,\n\t\t\t\t\t\thost: bootOptions?.host ?? DEFAULT_HOST,\n\t\t\t\t\t\tallowSelfSignedCrt: true,\n\t\t\t\t\t\t...bootOptions,\n\t\t\t\t\t})\n\n\t\t\t\t\treturn client\n\t\t\t }\n\n\t\tconst {\n\t\t\tshouldAuthAsCurrentSkill = false,\n\t\t\tshouldAuthAsLoggedInPerson = true,\n\t\t} = options ?? {}\n\n\t\tconst client = await connect()\n\n\t\tlet auth: SpruceSchemas.Mercury.v2020_12_25.AuthenticateEmitPayload = {}\n\n\t\tif (options?.skillId && options?.apiKey) {\n\t\t\tauth = {\n\t\t\t\tskillId: options.skillId,\n\t\t\t\tapiKey: options.apiKey,\n\t\t\t}\n\t\t} else if (shouldAuthAsCurrentSkill) {\n\t\t\tconst skill = serviceFactory.Service(cwd, 'auth').getCurrentSkill()\n\n\t\t\tif (skill) {\n\t\t\t\tauth = {\n\t\t\t\t\tskillId: skill.id,\n\t\t\t\t\tapiKey: skill.apiKey,\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (shouldAuthAsLoggedInPerson) {\n\t\t\tconst person = serviceFactory.Service(cwd, 'auth').getLoggedInPerson()\n\n\t\t\tif (person) {\n\t\t\t\tauth.token = person.token\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(auth).length > 0) {\n\t\t\tawait client.authenticate({\n\t\t\t\t...(auth as any),\n\t\t\t})\n\n\t\t\t//@ts-ignore\n\t\t\tclient.auth = auth\n\t\t}\n\n\t\treturn client\n\t}\n}\n\nexport async function run(argv: string[] = []): Promise<void> {\n\tconst program = new Command()\n\tlet cwd = process.cwd()\n\n\tprogram.storeOptionsAsProperties(false)\n\tprogram.option('--no-color', 'Disable color output in the console')\n\tprogram.option(\n\t\t'-d, --directory <path>',\n\t\t'The working directory to execute the command'\n\t)\n\tprogram.option('-v, --version', 'The version of the cli')\n\n\tconst dirIdx = process.argv.findIndex(\n\t\t(v) => v === '--directory' || v === '-d'\n\t)\n\n\tif (dirIdx > -1) {\n\t\tconst dir = process.argv[dirIdx + 1]\n\t\tconst newCwd = diskUtil.resolvePath(cwd, dir)\n\t\tcwd = newCwd\n\t}\n\n\tconst terminal = new TerminalInterface(\n\t\tcwd,\n\t\tprocess.env.CLI_RENDER_STACK_TRACES !== 'false'\n\t)\n\tterminal.clear()\n\tterminal.renderHero(CLI_HERO)\n\n\tconst isAskingForVersion =\n\t\tprocess.argv.findIndex((v) => v === '--version' || v === '-v') > -1\n\n\tif (isAskingForVersion) {\n\t\tconst json = require('../package.json')\n\t\tterminal.renderHeadline(`Version ${json.version}`)\n\t\treturn\n\t}\n\n\tawait Cli.Boot({\n\t\tprogram,\n\t\tcwd,\n\t\thost: process.env.HOST,\n\t\tgraphicsInterface: terminal,\n\t})\n\n\tawait setupInFlightEntertainment(terminal)\n\n\tconst command = await program.parseAsync(argv)\n\n\t//@ts-ignore\n\tconst results = await command._actionResults[0]\n\n\tfor (const client of MercuryClientFactory.getClients()) {\n\t\tawait client.disconnect()\n\t}\n\n\treturn results\n}\n\nasync function setupInFlightEntertainment(ui: TerminalInterface) {\n\tif (\n\t\tTerminalInterface.doesSupportColor() &&\n\t\tprocess.env.ENABLE_INSTALL_INTERTAINMENT !== 'false'\n\t) {\n\t\tconst command = new CommandService(diskUtil.resolvePath(__dirname, '../'))\n\t\tInFlightEntertainment.setup({ command, ui })\n\n\t\tFeatureInstaller.startInFlightIntertainmentHandler = (didUpdateHandler) => {\n\t\t\tInFlightEntertainment.start()\n\t\t\tdidUpdateHandler((message) => {\n\t\t\t\tInFlightEntertainment.writeStatus(message)\n\t\t\t})\n\t\t}\n\n\t\tFeatureInstaller.stopInFlightIntertainmentHandler = () => {\n\t\t\tInFlightEntertainment.stop()\n\t\t}\n\t}\n}\n"],"file":"cli.js"}
@@ -225,6 +225,8 @@ var EventContractBuilder = /*#__PURE__*/function () {
225
225
  key: "fetchAndBuildTemplateItems",
226
226
  value: function () {
227
227
  var _fetchAndBuildTemplateItems = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(options) {
228
+ var _this = this;
229
+
228
230
  var shouldSyncOnlyCoreEvents, eventBuilderFile, namespace, contractResults, itemBuilder, _itemBuilder$buildTem, eventContractTemplateItems, schemaTemplateItems;
229
231
 
230
232
  return _regenerator["default"].wrap(function _callee4$(_context4) {
@@ -241,7 +243,10 @@ var EventContractBuilder = /*#__PURE__*/function () {
241
243
  this.ui.startLoading('Fetching event contracts...');
242
244
  _context4.next = 8;
243
245
  return this.eventStore.fetchEventContracts({
244
- localNamespace: namespace
246
+ localNamespace: namespace,
247
+ didUpdateHandler: function didUpdateHandler(msg) {
248
+ _this.ui.startLoading(msg);
249
+ }
245
250
  });
246
251
 
247
252
  case 8:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/event/builders/EventContractBuilder.ts"],"names":["EventContractBuilder","options","optionsSchema","ui","eventWriter","eventGenerator","cwd","eventStore","skillStore","normalizedOptions","validateAndNormalizeUtil","validateAndNormalize","contractDestinationDir","resolvedDestination","diskUtil","resolvePath","fetchAndBuildTemplateItems","shouldSyncOnlyCoreEvents","eventBuilderFile","errors","schemaTemplateItems","eventContractTemplateItems","length","startLoading","writeContracts","shouldImportCoreEvents","files","deleteOrphanedEventContracts","map","a","path","lookupDir","existingContracts","matches","diff","filter","m","includes","forEach","f","deleteFile","deleteEmptyDirs","existingSchemas","filteredSchemas","filterSchemasBasedOnCallbackPayload","schemas","i","schema","idWithVersion","find","s","loadCurrentSkillsNamespace","namespace","fetchEventContracts","localNamespace","contractResults","contracts","undefined","shift","namesUtil","toKebab","itemBuilder","EventTemplateItemBuilder","buildTemplateItems"],"mappings":"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","sourcesContent":["import { SpruceSchemas } from '@sprucelabs/mercury-types'\nimport {\n\tnormalizeSchemaToIdWithVersion,\n\tSchema,\n\tSchemaTemplateItem,\n} from '@sprucelabs/schema'\nimport { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport globby from 'globby'\nimport { isEqual } from 'lodash'\nimport EventTemplateItemBuilder from '../../../templateItemBuilders/EventTemplateItemBuilder'\nimport { GraphicsInterface } from '../../../types/cli.types'\nimport { FeatureActionResponse } from '../../features.types'\nimport SkillStore from '../../skill/stores/SkillStore'\nimport validateAndNormalizeUtil from '../../validateAndNormalize.utility'\nimport EventStore from '../stores/EventStore'\nimport EventWriter from '../writers/EventWriter'\n\ntype OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.SyncEventOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.SyncEventOptions\n\nexport default class EventContractBuilder {\n\tprivate optionsSchema: OptionsSchema\n\tprivate ui: GraphicsInterface\n\tprivate eventWriter: EventWriter\n\tprivate cwd: string\n\tprivate eventStore: EventStore\n\tprivate skillStore: SkillStore\n\n\tpublic constructor(options: {\n\t\toptionsSchema: OptionsSchema\n\t\tui: GraphicsInterface\n\t\teventGenerator: EventWriter\n\t\tcwd: string\n\t\teventStore: EventStore\n\t\tskillStore: SkillStore\n\t}) {\n\t\tthis.optionsSchema = options.optionsSchema\n\t\tthis.ui = options.ui\n\t\tthis.eventWriter = options.eventGenerator\n\t\tthis.cwd = options.cwd\n\t\tthis.eventStore = options.eventStore\n\t\tthis.skillStore = options.skillStore\n\t}\n\n\tpublic async fetchAndWriteContracts(\n\t\toptions: Options\n\t): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = validateAndNormalizeUtil.validateAndNormalize(\n\t\t\tthis.optionsSchema,\n\t\t\toptions\n\t\t)\n\n\t\tconst { contractDestinationDir } = normalizedOptions\n\n\t\tconst resolvedDestination = diskUtil.resolvePath(\n\t\t\tthis.cwd,\n\t\t\tcontractDestinationDir\n\t\t)\n\n\t\tconst { errors, schemaTemplateItems, eventContractTemplateItems } =\n\t\t\tawait this.fetchAndBuildTemplateItems({\n\t\t\t\tshouldSyncOnlyCoreEvents: options.shouldSyncOnlyCoreEvents ?? false,\n\t\t\t\teventBuilderFile: normalizedOptions.eventBuilderFile,\n\t\t\t})\n\n\t\tif (errors && errors?.length > 0) {\n\t\t\treturn {\n\t\t\t\terrors,\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.startLoading('Generating contracts...')\n\n\t\tconst files = await this.eventWriter.writeContracts(resolvedDestination, {\n\t\t\t...normalizedOptions,\n\t\t\teventContractTemplateItems,\n\t\t\tschemaTemplateItems,\n\t\t\tshouldImportCoreEvents: !options.shouldSyncOnlyCoreEvents,\n\t\t})\n\n\t\tawait this.deleteOrphanedEventContracts(\n\t\t\tresolvedDestination,\n\t\t\tfiles.map((a) => a.path)\n\t\t)\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate async deleteOrphanedEventContracts(\n\t\tlookupDir: string,\n\t\texistingContracts: string[]\n\t) {\n\t\tconst matches = await globby(lookupDir + '/**/*.contract.ts')\n\t\tconst diff = matches.filter((m) => !existingContracts.includes(m))\n\n\t\tdiff.forEach((f) => diskUtil.deleteFile(f))\n\n\t\tdiskUtil.deleteEmptyDirs(lookupDir)\n\t}\n\n\tpublic async fetchContractsAndGenerateUniqueSchemas(\n\t\texistingSchemas: Schema[],\n\t\tshouldSyncOnlyCoreEvents: boolean\n\t): Promise<FeatureActionResponse & { schemas?: Schema[] }> {\n\t\tconst { errors, schemaTemplateItems } =\n\t\t\tawait this.fetchAndBuildTemplateItems({ shouldSyncOnlyCoreEvents })\n\n\t\tif (errors && errors?.length > 0) {\n\t\t\treturn {\n\t\t\t\terrors,\n\t\t\t}\n\t\t}\n\n\t\tconst filteredSchemas = this.filterSchemasBasedOnCallbackPayload(\n\t\t\texistingSchemas,\n\t\t\tschemaTemplateItems\n\t\t)\n\n\t\treturn {\n\t\t\tschemas: filteredSchemas,\n\t\t}\n\t}\n\n\tprivate filterSchemasBasedOnCallbackPayload(\n\t\texistingSchemas: Schema[],\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t) {\n\t\tconst schemas = schemaTemplateItems.map((i) => i.schema)\n\t\tconst filteredSchemas = schemas.filter((schema) => {\n\t\t\tconst idWithVersion = normalizeSchemaToIdWithVersion(schema)\n\t\t\treturn !existingSchemas.find((s) =>\n\t\t\t\tisEqual(normalizeSchemaToIdWithVersion(s), idWithVersion)\n\t\t\t)\n\t\t})\n\n\t\treturn filteredSchemas\n\t}\n\n\tprivate async fetchAndBuildTemplateItems(options: {\n\t\tshouldSyncOnlyCoreEvents?: boolean\n\t\teventBuilderFile?: string\n\t}) {\n\t\tconst { shouldSyncOnlyCoreEvents, eventBuilderFile } = options\n\n\t\tthis.ui.startLoading('Loading skill details...')\n\n\t\tlet namespace: string | undefined =\n\t\t\tawait this.skillStore.loadCurrentSkillsNamespace()\n\n\t\tthis.ui.startLoading('Fetching event contracts...')\n\n\t\tconst contractResults = await this.eventStore.fetchEventContracts({\n\t\t\tlocalNamespace: namespace,\n\t\t})\n\n\t\tif (contractResults.errors.length > 0) {\n\t\t\treturn {\n\t\t\t\terrors: contractResults.errors,\n\t\t\t\teventContractTemplateItems: [],\n\t\t\t\tschemaTemplateItems: [],\n\t\t\t}\n\t\t}\n\n\t\tif (shouldSyncOnlyCoreEvents) {\n\t\t\tcontractResults.contracts = [contractResults.contracts[0]]\n\t\t\tnamespace = undefined\n\t\t} else {\n\t\t\tcontractResults.contracts.shift()\n\t\t\tnamespace = namesUtil.toKebab(namespace)\n\t\t}\n\n\t\tthis.ui.startLoading('Building contracts...')\n\n\t\tconst itemBuilder = new EventTemplateItemBuilder()\n\t\tconst { eventContractTemplateItems, schemaTemplateItems } =\n\t\t\titemBuilder.buildTemplateItems({\n\t\t\t\tcontracts: contractResults.contracts,\n\t\t\t\tlocalNamespace: namespace,\n\t\t\t\teventBuilderFile,\n\t\t\t})\n\n\t\treturn {\n\t\t\teventContractTemplateItems,\n\t\t\tschemaTemplateItems,\n\t\t\terrors: [],\n\t\t}\n\t}\n}\n"],"file":"EventContractBuilder.js"}
1
+ {"version":3,"sources":["../../../../src/features/event/builders/EventContractBuilder.ts"],"names":["EventContractBuilder","options","optionsSchema","ui","eventWriter","eventGenerator","cwd","eventStore","skillStore","normalizedOptions","validateAndNormalizeUtil","validateAndNormalize","contractDestinationDir","resolvedDestination","diskUtil","resolvePath","fetchAndBuildTemplateItems","shouldSyncOnlyCoreEvents","eventBuilderFile","errors","schemaTemplateItems","eventContractTemplateItems","length","startLoading","writeContracts","shouldImportCoreEvents","files","deleteOrphanedEventContracts","map","a","path","lookupDir","existingContracts","matches","diff","filter","m","includes","forEach","f","deleteFile","deleteEmptyDirs","existingSchemas","filteredSchemas","filterSchemasBasedOnCallbackPayload","schemas","i","schema","idWithVersion","find","s","loadCurrentSkillsNamespace","namespace","fetchEventContracts","localNamespace","didUpdateHandler","msg","contractResults","contracts","undefined","shift","namesUtil","toKebab","itemBuilder","EventTemplateItemBuilder","buildTemplateItems"],"mappings":"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","sourcesContent":["import { SpruceSchemas } from '@sprucelabs/mercury-types'\nimport {\n\tnormalizeSchemaToIdWithVersion,\n\tSchema,\n\tSchemaTemplateItem,\n} from '@sprucelabs/schema'\nimport { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport globby from 'globby'\nimport { isEqual } from 'lodash'\nimport EventTemplateItemBuilder from '../../../templateItemBuilders/EventTemplateItemBuilder'\nimport { GraphicsInterface } from '../../../types/cli.types'\nimport { FeatureActionResponse } from '../../features.types'\nimport SkillStore from '../../skill/stores/SkillStore'\nimport validateAndNormalizeUtil from '../../validateAndNormalize.utility'\nimport EventStore from '../stores/EventStore'\nimport EventWriter from '../writers/EventWriter'\n\ntype OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.SyncEventOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.SyncEventOptions\n\nexport default class EventContractBuilder {\n\tprivate optionsSchema: OptionsSchema\n\tprivate ui: GraphicsInterface\n\tprivate eventWriter: EventWriter\n\tprivate cwd: string\n\tprivate eventStore: EventStore\n\tprivate skillStore: SkillStore\n\n\tpublic constructor(options: {\n\t\toptionsSchema: OptionsSchema\n\t\tui: GraphicsInterface\n\t\teventGenerator: EventWriter\n\t\tcwd: string\n\t\teventStore: EventStore\n\t\tskillStore: SkillStore\n\t}) {\n\t\tthis.optionsSchema = options.optionsSchema\n\t\tthis.ui = options.ui\n\t\tthis.eventWriter = options.eventGenerator\n\t\tthis.cwd = options.cwd\n\t\tthis.eventStore = options.eventStore\n\t\tthis.skillStore = options.skillStore\n\t}\n\n\tpublic async fetchAndWriteContracts(\n\t\toptions: Options\n\t): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = validateAndNormalizeUtil.validateAndNormalize(\n\t\t\tthis.optionsSchema,\n\t\t\toptions\n\t\t)\n\n\t\tconst { contractDestinationDir } = normalizedOptions\n\n\t\tconst resolvedDestination = diskUtil.resolvePath(\n\t\t\tthis.cwd,\n\t\t\tcontractDestinationDir\n\t\t)\n\n\t\tconst { errors, schemaTemplateItems, eventContractTemplateItems } =\n\t\t\tawait this.fetchAndBuildTemplateItems({\n\t\t\t\tshouldSyncOnlyCoreEvents: options.shouldSyncOnlyCoreEvents ?? false,\n\t\t\t\teventBuilderFile: normalizedOptions.eventBuilderFile,\n\t\t\t})\n\n\t\tif (errors && errors?.length > 0) {\n\t\t\treturn {\n\t\t\t\terrors,\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.startLoading('Generating contracts...')\n\n\t\tconst files = await this.eventWriter.writeContracts(resolvedDestination, {\n\t\t\t...normalizedOptions,\n\t\t\teventContractTemplateItems,\n\t\t\tschemaTemplateItems,\n\t\t\tshouldImportCoreEvents: !options.shouldSyncOnlyCoreEvents,\n\t\t})\n\n\t\tawait this.deleteOrphanedEventContracts(\n\t\t\tresolvedDestination,\n\t\t\tfiles.map((a) => a.path)\n\t\t)\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate async deleteOrphanedEventContracts(\n\t\tlookupDir: string,\n\t\texistingContracts: string[]\n\t) {\n\t\tconst matches = await globby(lookupDir + '/**/*.contract.ts')\n\t\tconst diff = matches.filter((m) => !existingContracts.includes(m))\n\n\t\tdiff.forEach((f) => diskUtil.deleteFile(f))\n\n\t\tdiskUtil.deleteEmptyDirs(lookupDir)\n\t}\n\n\tpublic async fetchContractsAndGenerateUniqueSchemas(\n\t\texistingSchemas: Schema[],\n\t\tshouldSyncOnlyCoreEvents: boolean\n\t): Promise<FeatureActionResponse & { schemas?: Schema[] }> {\n\t\tconst { errors, schemaTemplateItems } =\n\t\t\tawait this.fetchAndBuildTemplateItems({ shouldSyncOnlyCoreEvents })\n\n\t\tif (errors && errors?.length > 0) {\n\t\t\treturn {\n\t\t\t\terrors,\n\t\t\t}\n\t\t}\n\n\t\tconst filteredSchemas = this.filterSchemasBasedOnCallbackPayload(\n\t\t\texistingSchemas,\n\t\t\tschemaTemplateItems\n\t\t)\n\n\t\treturn {\n\t\t\tschemas: filteredSchemas,\n\t\t}\n\t}\n\n\tprivate filterSchemasBasedOnCallbackPayload(\n\t\texistingSchemas: Schema[],\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t) {\n\t\tconst schemas = schemaTemplateItems.map((i) => i.schema)\n\t\tconst filteredSchemas = schemas.filter((schema) => {\n\t\t\tconst idWithVersion = normalizeSchemaToIdWithVersion(schema)\n\t\t\treturn !existingSchemas.find((s) =>\n\t\t\t\tisEqual(normalizeSchemaToIdWithVersion(s), idWithVersion)\n\t\t\t)\n\t\t})\n\n\t\treturn filteredSchemas\n\t}\n\n\tprivate async fetchAndBuildTemplateItems(options: {\n\t\tshouldSyncOnlyCoreEvents?: boolean\n\t\teventBuilderFile?: string\n\t}) {\n\t\tconst { shouldSyncOnlyCoreEvents, eventBuilderFile } = options\n\n\t\tthis.ui.startLoading('Loading skill details...')\n\n\t\tlet namespace: string | undefined =\n\t\t\tawait this.skillStore.loadCurrentSkillsNamespace()\n\n\t\tthis.ui.startLoading('Fetching event contracts...')\n\n\t\tconst contractResults = await this.eventStore.fetchEventContracts({\n\t\t\tlocalNamespace: namespace,\n\t\t\tdidUpdateHandler: (msg) => {\n\t\t\t\tthis.ui.startLoading(msg)\n\t\t\t},\n\t\t})\n\n\t\tif (contractResults.errors.length > 0) {\n\t\t\treturn {\n\t\t\t\terrors: contractResults.errors,\n\t\t\t\teventContractTemplateItems: [],\n\t\t\t\tschemaTemplateItems: [],\n\t\t\t}\n\t\t}\n\n\t\tif (shouldSyncOnlyCoreEvents) {\n\t\t\tcontractResults.contracts = [contractResults.contracts[0]]\n\t\t\tnamespace = undefined\n\t\t} else {\n\t\t\tcontractResults.contracts.shift()\n\t\t\tnamespace = namesUtil.toKebab(namespace)\n\t\t}\n\n\t\tthis.ui.startLoading('Building contracts...')\n\n\t\tconst itemBuilder = new EventTemplateItemBuilder()\n\t\tconst { eventContractTemplateItems, schemaTemplateItems } =\n\t\t\titemBuilder.buildTemplateItems({\n\t\t\t\tcontracts: contractResults.contracts,\n\t\t\t\tlocalNamespace: namespace,\n\t\t\t\teventBuilderFile,\n\t\t\t})\n\n\t\treturn {\n\t\t\teventContractTemplateItems,\n\t\t\tschemaTemplateItems,\n\t\t\terrors: [],\n\t\t}\n\t}\n}\n"],"file":"EventContractBuilder.js"}
@@ -29,6 +29,8 @@ var _path = _interopRequireDefault(require("path"));
29
29
 
30
30
  var _mercuryTypes = require("@sprucelabs/mercury-types");
31
31
 
32
+ var _schema = require("@sprucelabs/schema");
33
+
32
34
  var _spruceEventUtils = require("@sprucelabs/spruce-event-utils");
33
35
 
34
36
  var _spruceSkillUtils = require("@sprucelabs/spruce-skill-utils");
@@ -114,12 +116,12 @@ var EventStore = /*#__PURE__*/function (_AbstractStore) {
114
116
  switch (_context.prev = _context.next) {
115
117
  case 0:
116
118
  _ref = options !== null && options !== void 0 ? options : {}, localNamespace = _ref.localNamespace, didUpdateHandler = _ref.didUpdateHandler;
117
- _context.next = 3;
119
+ didUpdateHandler === null || didUpdateHandler === void 0 ? void 0 : didUpdateHandler('Pulling remote contracts...');
120
+ _context.next = 4;
118
121
  return this.fetchRemoteContracts();
119
122
 
120
- case 3:
123
+ case 4:
121
124
  contracts = _context.sent;
122
- didUpdateHandler === null || didUpdateHandler === void 0 ? void 0 : didUpdateHandler('Pulling remote contracts...');
123
125
  _context.t0 = localNamespace;
124
126
 
125
127
  if (!_context.t0) {
@@ -251,9 +253,8 @@ var EventStore = /*#__PURE__*/function (_AbstractStore) {
251
253
  key: "loadLocalContract",
252
254
  value: function () {
253
255
  var _loadLocalContract = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(localNamespace, didUpdateHandler) {
254
- var _this2 = this;
256
+ var localMatches, ns, eventSignatures, filesByFqenAndEventKey, matches, importsInOrder, importsByName, idx, imported, _filesByFqenAndEventK, fqen, eventKey, isSchema, cleaned;
255
257
 
256
- var localMatches, ns, eventSignatures, importsByName, cleaned;
257
258
  return _regenerator["default"].wrap(function _callee4$(_context4) {
258
259
  while (1) {
259
260
  switch (_context4.prev = _context4.next) {
@@ -265,12 +266,12 @@ var EventStore = /*#__PURE__*/function (_AbstractStore) {
265
266
  localMatches = _context4.sent;
266
267
  ns = _spruceSkillUtils.namesUtil.toKebab(localNamespace);
267
268
  eventSignatures = {};
268
- importsByName = {};
269
- didUpdateHandler === null || didUpdateHandler === void 0 ? void 0 : didUpdateHandler("Importing of ".concat(localMatches.length, " local event signature files..."));
269
+ filesByFqenAndEventKey = [];
270
+ didUpdateHandler === null || didUpdateHandler === void 0 ? void 0 : didUpdateHandler("Importing ".concat(localMatches.length, " local event signature files..."));
270
271
  _context4.next = 9;
271
272
  return Promise.all(localMatches.map( /*#__PURE__*/function () {
272
273
  var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(match) {
273
- var fqen, key, _eventDiskUtil$splitP, eventName, version, filename, map, importer, _importer, _fqen, _key2;
274
+ var fqen, eventKey, _eventDiskUtil$splitP, eventName, version, filename, map, _fqen, _eventKey;
274
275
 
275
276
  return _regenerator["default"].wrap(function _callee3$(_context3) {
276
277
  while (1) {
@@ -286,62 +287,36 @@ var EventStore = /*#__PURE__*/function (_AbstractStore) {
286
287
  filename = _path["default"].basename(match);
287
288
  map = eventFileNamesImportKeyMap[filename];
288
289
 
289
- if (!map) {
290
- _context3.next = 19;
291
- break;
292
- }
293
-
294
- //@ts-ignore
295
- key = map.key;
296
-
297
- if (!importsByName[fqen]) {
298
- importsByName[fqen] = {};
299
- }
300
-
301
- if (!map.isSchema) {
302
- _context3.next = 15;
303
- break;
290
+ if (map) {
291
+ //@ts-ignore
292
+ eventKey = map.key;
293
+ filesByFqenAndEventKey.push({
294
+ fqen: fqen,
295
+ isSchema: map.isSchema,
296
+ match: match,
297
+ eventKey: eventKey
298
+ });
304
299
  }
305
300
 
306
- importer = _this2.Service('schema'); //@ts-ignore
307
-
308
- _context3.next = 12;
309
- return importer.importSchema(match);
310
-
311
- case 12:
312
- importsByName[fqen][map.key] = _context3.sent;
313
- _context3.next = 19;
301
+ _context3.next = 11;
314
302
  break;
315
303
 
316
- case 15:
317
- _importer = _this2.Service('import'); //@ts-ignore
318
-
319
- _context3.next = 18;
320
- return _importer.importDefault(match);
321
-
322
- case 18:
323
- importsByName[fqen][map.key] = _context3.sent;
324
-
325
- case 19:
326
- _context3.next = 24;
327
- break;
328
-
329
- case 21:
330
- _context3.prev = 21;
304
+ case 8:
305
+ _context3.prev = 8;
331
306
  _context3.t0 = _context3["catch"](0);
332
307
  throw new _SpruceError["default"]({
333
308
  code: 'INVALID_EVENT_CONTRACT',
334
309
  fullyQualifiedEventName: (_fqen = fqen) !== null && _fqen !== void 0 ? _fqen : 'Bad event name',
335
- brokenProperty: (_key2 = key) !== null && _key2 !== void 0 ? _key2 : '*** major failure ***',
310
+ brokenProperty: (_eventKey = eventKey) !== null && _eventKey !== void 0 ? _eventKey : '*** major failure ***',
336
311
  originalError: _context3.t0
337
312
  });
338
313
 
339
- case 24:
314
+ case 11:
340
315
  case "end":
341
316
  return _context3.stop();
342
317
  }
343
318
  }
344
- }, _callee3, null, [[0, 21]]);
319
+ }, _callee3, null, [[0, 8]]);
345
320
  }));
346
321
 
347
322
  return function (_x4) {
@@ -350,6 +325,60 @@ var EventStore = /*#__PURE__*/function (_AbstractStore) {
350
325
  }()));
351
326
 
352
327
  case 9:
328
+ matches = filesByFqenAndEventKey.map(function (o) {
329
+ return o.match;
330
+ });
331
+ _context4.next = 12;
332
+ return this.Service('import').bulkImport(matches);
333
+
334
+ case 12:
335
+ importsInOrder = _context4.sent;
336
+ importsByName = {};
337
+ idx = 0;
338
+
339
+ case 15:
340
+ if (!(idx < filesByFqenAndEventKey.length)) {
341
+ _context4.next = 31;
342
+ break;
343
+ }
344
+
345
+ imported = importsInOrder[idx];
346
+ _filesByFqenAndEventK = filesByFqenAndEventKey[idx], fqen = _filesByFqenAndEventK.fqen, eventKey = _filesByFqenAndEventK.eventKey, isSchema = _filesByFqenAndEventK.isSchema;
347
+
348
+ if (!isSchema) {
349
+ _context4.next = 26;
350
+ break;
351
+ }
352
+
353
+ _context4.prev = 19;
354
+ (0, _schema.validateSchema)(imported);
355
+ _context4.next = 26;
356
+ break;
357
+
358
+ case 23:
359
+ _context4.prev = 23;
360
+ _context4.t0 = _context4["catch"](19);
361
+ throw new _SpruceError["default"]({
362
+ code: 'INVALID_EVENT_CONTRACT',
363
+ fullyQualifiedEventName: fqen,
364
+ brokenProperty: eventKey,
365
+ originalError: _context4.t0
366
+ });
367
+
368
+ case 26:
369
+ if (!importsByName[fqen]) {
370
+ importsByName[fqen] = {};
371
+ } //@ts-ignore
372
+
373
+
374
+ importsByName[fqen][eventKey] = imported;
375
+
376
+ case 28:
377
+ idx++;
378
+ _context4.next = 15;
379
+ break;
380
+
381
+ case 31:
353
382
  Object.keys(importsByName).forEach(function (fqen) {
354
383
  var imported = importsByName[fqen];
355
384
 
@@ -370,7 +399,7 @@ var EventStore = /*#__PURE__*/function (_AbstractStore) {
370
399
  didUpdateHandler === null || didUpdateHandler === void 0 ? void 0 : didUpdateHandler("Loaded ".concat(Object.keys(eventSignatures).length, " local event signatures..."));
371
400
 
372
401
  if (!(Object.keys(eventSignatures).length > 0)) {
373
- _context4.next = 15;
402
+ _context4.next = 37;
374
403
  break;
375
404
  }
376
405
 
@@ -380,15 +409,15 @@ var EventStore = /*#__PURE__*/function (_AbstractStore) {
380
409
  (0, _mercuryTypes.validateEventContract)(cleaned);
381
410
  return _context4.abrupt("return", cleaned);
382
411
 
383
- case 15:
412
+ case 37:
384
413
  return _context4.abrupt("return", null);
385
414
 
386
- case 16:
415
+ case 38:
387
416
  case "end":
388
417
  return _context4.stop();
389
418
  }
390
419
  }
391
- }, _callee4, this);
420
+ }, _callee4, this, [[19, 23]]);
392
421
  }));
393
422
 
394
423
  function loadLocalContract(_x2, _x3) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/event/stores/EventStore.ts"],"names":["eventFileNamesImportKeyMap","key","isSchema","EventStore","options","localNamespace","didUpdateHandler","fetchRemoteContracts","contracts","loadLocalContract","localContract","filterOutLocalEventsFromRemoteContractsMutating","push","errors","contractCache","connectToApi","shouldAuthAsCurrentSkill","client","emit","results","eventResponseUtil","getFirstResponseOrThrow","remoteContracts","ns","namesUtil","toKebab","contract","sigs","eventContractUtil","getNamedEventSignatures","sig","eventNamespace","eventSignatures","fullyQualifiedEventName","diskUtil","resolvePath","cwd","localMatches","importsByName","length","Promise","all","map","match","eventDiskUtil","splitPathToEvent","eventName","version","fqen","eventNameUtil","join","filename","pathUtil","basename","importer","Service","importSchema","importDefault","SpruceError","code","brokenProperty","originalError","Object","keys","forEach","imported","split","emitPayloadSchema","payloadSchema","emitPayload","targetSchema","emitTarget","responsePayloadSchema","responsePayload","emitPermissionContract","emitPermissions","listenPermissionContract","listenPermissions","cleaned","eventContractCleanerUtil","cleanPayloadsAndPermissions","payload","eventContract","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 } 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: any\n\n\tpublic async fetchEventContracts(options?: {\n\t\tlocalNamespace?: string\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t}): Promise<EventStoreFetchEventContractsResponse> {\n\t\tconst { localNamespace, didUpdateHandler } = options ?? {}\n\n\t\tconst contracts = await this.fetchRemoteContracts()\n\n\t\tdidUpdateHandler?.('Pulling remote contracts...')\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\tpublic static clearCache() {\n\t\tEventStore.contractCache = null\n\t}\n\n\tprivate async fetchRemoteContracts() {\n\t\tif (!EventStore.contractCache) {\n\t\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\t\t\tconst results = await client.emit('get-event-contracts::v2020_12_25')\n\t\t\tconst { contracts } = eventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\t\tEventStore.contractCache = contracts\n\t\t}\n\n\t\treturn cloneDeep(EventStore.contractCache)\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\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 importsByName: Record<string, EventImport> = {}\n\n\t\tdidUpdateHandler?.(\n\t\t\t`Importing of ${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 key: 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\tkey = map.key\n\t\t\t\t\t\tif (!importsByName[fqen]) {\n\t\t\t\t\t\t\timportsByName[fqen] = {}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (map.isSchema) {\n\t\t\t\t\t\t\tconst importer = this.Service('schema')\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\timportsByName[fqen][map.key] = await importer.importSchema(match)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst importer = this.Service('import')\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\timportsByName[fqen][map.key] = await importer.importDefault(match)\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: key ?? '*** 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\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\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 = null\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 = null\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","fetchRemoteContracts","contracts","loadLocalContract","localContract","filterOutLocalEventsFromRemoteContractsMutating","push","errors","contractCache","connectToApi","shouldAuthAsCurrentSkill","client","emit","results","eventResponseUtil","getFirstResponseOrThrow","remoteContracts","ns","namesUtil","toKebab","contract","sigs","eventContractUtil","getNamedEventSignatures","sig","eventNamespace","eventSignatures","fullyQualifiedEventName","diskUtil","resolvePath","cwd","localMatches","filesByFqenAndEventKey","length","Promise","all","map","match","eventDiskUtil","splitPathToEvent","eventName","version","fqen","eventNameUtil","join","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","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: any\n\n\tpublic async fetchEventContracts(options?: {\n\t\tlocalNamespace?: string\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t}): Promise<EventStoreFetchEventContractsResponse> {\n\t\tconst { localNamespace, didUpdateHandler } = options ?? {}\n\n\t\tdidUpdateHandler?.('Pulling remote contracts...')\n\n\t\tconst contracts = await this.fetchRemoteContracts()\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\tpublic static clearCache() {\n\t\tEventStore.contractCache = null\n\t}\n\n\tprivate async fetchRemoteContracts() {\n\t\tif (!EventStore.contractCache) {\n\t\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\t\t\tconst results = await client.emit('get-event-contracts::v2020_12_25')\n\t\t\tconst { contracts } = eventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\t\tEventStore.contractCache = contracts\n\t\t}\n\n\t\treturn cloneDeep(EventStore.contractCache)\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\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\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 = null\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 = null\n\t}\n}\n"],"file":"EventStore.js"}
@@ -83,7 +83,7 @@ var RebuildAction = /*#__PURE__*/function (_AbstractAction) {
83
83
  _context.prev = 2;
84
84
 
85
85
  if (shouldPlayGames) {
86
- _InFlightEntertainment["default"].start();
86
+ _InFlightEntertainment["default"].start(['Rebuild sequence initialized...', 'The only option is setting a new high score!']);
87
87
  } else {
88
88
  this.ui.startLoading('Rebuilding....');
89
89
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/skill/actions/RebuildAction.ts"],"names":["optionsSchema","id","description","fields","shouldPlayGames","type","label","defaultValue","RebuildAction","options","validateAndNormalizeOptions","command","Service","InFlightEntertainment","start","ui","startLoading","execute","onData","data","writeStatus","resetUi","errors","summaryLines","stop","stopLoading","AbstractAction"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;AAGA,IAAMA,aAAa,GAAG,yBAAY;AACjCC,EAAAA,EAAE,EAAE,gBAD6B;AAEjCC,EAAAA,WAAW,EACV,iEAHgC;AAIjCC,EAAAA,MAAM,EAAE;AACPC,IAAAA,eAAe,EAAE;AAChBC,MAAAA,IAAI,EAAE,SADU;AAEhBC,MAAAA,KAAK,EAAE,YAFS;AAGhBC,MAAAA,YAAY,EAAE;AAHE;AADV;AAJyB,CAAZ,CAAtB;;IAgBqBC,a;;;;;;;;;;;;;;;sGACkBR,a;uGACd,CAAC,SAAD,C;0GACG,6B;;;;;;;mGAE3B,iBAAqBS,OAArB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,wCAC6B,KAAKC,2BAAL,CAAiCD,OAAjC,CAD7B,EACSL,eADT,yBACSA,eADT;AAEOO,gBAAAA,OAFP,GAEiB,KAAKC,OAAL,CAAa,SAAb,CAFjB;AAAA;;AAKE,oBAAIR,eAAJ,EAAqB;AACpBS,oDAAsBC,KAAtB;AACA,iBAFD,MAEO;AACN,uBAAKC,EAAL,CAAQC,YAAR,CAAqB,gBAArB;AACA;;AATH;AAAA,uBAUQL,OAAO,CAACM,OAAR,CAAgB,cAAhB,EAAgC;AACrCC,kBAAAA,MAAM,EAAE,gBAACC,IAAD,EAAkB;AACzBN,4JAAuBO,WAAvB,CAAmCD,IAAnC;AACA;AAHoC,iBAAhC,CAVR;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAgBE,qBAAKE,OAAL;AAhBF,iDAiBS;AACNC,kBAAAA,MAAM,EAAE;AADF,iBAjBT;;AAAA;AAsBC,qBAAKD,OAAL;AAtBD,iDAwBQ;AACNE,kBAAAA,YAAY,EAAE,CACb,0BADa,EAEb,4BAFa,EAGb,0BAHa,EAIb,oBAJa;AADR,iBAxBR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAkCA,mBAAkB;AACjBV,wCAAsBW,IAAtB;;AACA,WAAKT,EAAL,CAAQU,WAAR;AACA;;;EA1CyCC,2B","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport InFlightEntertainment from '../../../InFlightEntertainment'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'rebuildOptions',\n\tdescription:\n\t\t'Clear the build and node_modules folder and start from the top.',\n\tfields: {\n\t\tshouldPlayGames: {\n\t\t\ttype: 'boolean',\n\t\t\tlabel: 'Play games',\n\t\t\tdefaultValue: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class RebuildAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['rebuild']\n\tpublic invocationMessage = 'Rebuilding your skill... ⚡️'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { shouldPlayGames } = this.validateAndNormalizeOptions(options)\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tif (shouldPlayGames) {\n\t\t\t\tInFlightEntertainment.start()\n\t\t\t} else {\n\t\t\t\tthis.ui.startLoading('Rebuilding....')\n\t\t\t}\n\t\t\tawait command.execute('yarn rebuild', {\n\t\t\t\tonData: (data: string) => {\n\t\t\t\t\tInFlightEntertainment?.writeStatus(data)\n\t\t\t\t},\n\t\t\t})\n\t\t} catch (err) {\n\t\t\tthis.resetUi()\n\t\t\treturn {\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\n\t\tthis.resetUi()\n\n\t\treturn {\n\t\t\tsummaryLines: [\n\t\t\t\t'☑️ node_modules cleared.',\n\t\t\t\t'☑️ node_modules installed.',\n\t\t\t\t'☑️ Build folder cleared.',\n\t\t\t\t'☑️ Build complete.',\n\t\t\t],\n\t\t}\n\t}\n\n\tprivate resetUi() {\n\t\tInFlightEntertainment.stop()\n\t\tthis.ui.stopLoading()\n\t}\n}\n"],"file":"RebuildAction.js"}
1
+ {"version":3,"sources":["../../../../src/features/skill/actions/RebuildAction.ts"],"names":["optionsSchema","id","description","fields","shouldPlayGames","type","label","defaultValue","RebuildAction","options","validateAndNormalizeOptions","command","Service","InFlightEntertainment","start","ui","startLoading","execute","onData","data","writeStatus","resetUi","errors","summaryLines","stop","stopLoading","AbstractAction"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;AAGA,IAAMA,aAAa,GAAG,yBAAY;AACjCC,EAAAA,EAAE,EAAE,gBAD6B;AAEjCC,EAAAA,WAAW,EACV,iEAHgC;AAIjCC,EAAAA,MAAM,EAAE;AACPC,IAAAA,eAAe,EAAE;AAChBC,MAAAA,IAAI,EAAE,SADU;AAEhBC,MAAAA,KAAK,EAAE,YAFS;AAGhBC,MAAAA,YAAY,EAAE;AAHE;AADV;AAJyB,CAAZ,CAAtB;;IAgBqBC,a;;;;;;;;;;;;;;;sGACkBR,a;uGACd,CAAC,SAAD,C;0GACG,6B;;;;;;;mGAE3B,iBAAqBS,OAArB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,wCAC6B,KAAKC,2BAAL,CAAiCD,OAAjC,CAD7B,EACSL,eADT,yBACSA,eADT;AAEOO,gBAAAA,OAFP,GAEiB,KAAKC,OAAL,CAAa,SAAb,CAFjB;AAAA;;AAKE,oBAAIR,eAAJ,EAAqB;AACpBS,oDAAsBC,KAAtB,CAA4B,CAC3B,iCAD2B,EAE3B,8CAF2B,CAA5B;AAIA,iBALD,MAKO;AACN,uBAAKC,EAAL,CAAQC,YAAR,CAAqB,gBAArB;AACA;;AAZH;AAAA,uBAaQL,OAAO,CAACM,OAAR,CAAgB,cAAhB,EAAgC;AACrCC,kBAAAA,MAAM,EAAE,gBAACC,IAAD,EAAkB;AACzBN,4JAAuBO,WAAvB,CAAmCD,IAAnC;AACA;AAHoC,iBAAhC,CAbR;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAmBE,qBAAKE,OAAL;AAnBF,iDAoBS;AACNC,kBAAAA,MAAM,EAAE;AADF,iBApBT;;AAAA;AAyBC,qBAAKD,OAAL;AAzBD,iDA2BQ;AACNE,kBAAAA,YAAY,EAAE,CACb,0BADa,EAEb,4BAFa,EAGb,0BAHa,EAIb,oBAJa;AADR,iBA3BR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAqCA,mBAAkB;AACjBV,wCAAsBW,IAAtB;;AACA,WAAKT,EAAL,CAAQU,WAAR;AACA;;;EA7CyCC,2B","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport InFlightEntertainment from '../../../InFlightEntertainment'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'rebuildOptions',\n\tdescription:\n\t\t'Clear the build and node_modules folder and start from the top.',\n\tfields: {\n\t\tshouldPlayGames: {\n\t\t\ttype: 'boolean',\n\t\t\tlabel: 'Play games',\n\t\t\tdefaultValue: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class RebuildAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['rebuild']\n\tpublic invocationMessage = 'Rebuilding your skill... ⚡️'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { shouldPlayGames } = this.validateAndNormalizeOptions(options)\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tif (shouldPlayGames) {\n\t\t\t\tInFlightEntertainment.start([\n\t\t\t\t\t'Rebuild sequence initialized...',\n\t\t\t\t\t'The only option is setting a new high score!',\n\t\t\t\t])\n\t\t\t} else {\n\t\t\t\tthis.ui.startLoading('Rebuilding....')\n\t\t\t}\n\t\t\tawait command.execute('yarn rebuild', {\n\t\t\t\tonData: (data: string) => {\n\t\t\t\t\tInFlightEntertainment?.writeStatus(data)\n\t\t\t\t},\n\t\t\t})\n\t\t} catch (err) {\n\t\t\tthis.resetUi()\n\t\t\treturn {\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\n\t\tthis.resetUi()\n\n\t\treturn {\n\t\t\tsummaryLines: [\n\t\t\t\t'☑️ node_modules cleared.',\n\t\t\t\t'☑️ node_modules installed.',\n\t\t\t\t'☑️ Build folder cleared.',\n\t\t\t\t'☑️ Build complete.',\n\t\t\t],\n\t\t}\n\t}\n\n\tprivate resetUi() {\n\t\tInFlightEntertainment.stop()\n\t\tthis.ui.stopLoading()\n\t}\n}\n"],"file":"RebuildAction.js"}
@@ -387,7 +387,7 @@ var ImportService = /*#__PURE__*/function () {
387
387
  throw new _SpruceError["default"]({
388
388
  code: 'FAILED_TO_IMPORT',
389
389
  file: file,
390
- friendlyMessage: "Looks like this file does not export default."
390
+ friendlyMessage: "Looks like ".concat(file, " does not export default.")
391
391
  });
392
392
 
393
393
  case 32:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/ImportService.ts"],"names":["ImportService","options","file","isCachingEnabled","importAllUncached","pullHashAndContents","hash","fileContents","hasFileChanged","isDirty","haveImportsChanged","cachedImports","importAllCached","response","writeCacheFile","fs","existsSync","SpruceError","code","friendlyMessage","args","divider","errorDivider","search","command","execute","stdout","successParts","split","errParts","length","proxyError","buildErrorFromExecuteResponse","defaultImported","JSON","parse","originalError","importAll","imported","cwd","originalFilepath","contents","changed","importMatches","regex","exec","match","dir","pathUtil","dirname","nodeResolved","require","resolve","join","destination","resolveCacheFile","diskUtil","writeFile","stringify","cacheFile","readFile","err","Error","stack","files","filepath","resolvePath","filename","Date","getTime","imports","exports","idx","relative","replace","extname","fullPath","importDefault","results","deleteDir","resolvedFilePath","doesFileExist","cacheDir","importCacheDir","createTempDir"],"mappings":"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","sourcesContent":["import pathUtil from 'path'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport fs from 'fs-extra'\nimport md5 from 'md5'\nimport SpruceError from '../errors/SpruceError'\nimport CommandService from './CommandService'\n\nexport default class ImportService {\n\tpublic cwd: string\n\n\tprivate divider = '## SPRUCE-CLI DIVIDER ##'\n\tprivate errorDivider = '## SPRUCE-CLI ERROR DIVIDER ##'\n\n\tprivate static cachedImports: Record<string, Record<string, any>> = {}\n\tprivate static importCacheDir: string =\n\t\tdiskUtil.createTempDir('import-service')\n\tprivate command: CommandService\n\tprivate static isCachingEnabled: boolean\n\n\tpublic constructor(options: { cwd: string; command: CommandService }) {\n\t\tthis.cwd = options.cwd\n\t\tthis.command = options.command\n\t}\n\n\tpublic importAll = async <T extends Record<string, any>>(\n\t\tfile: string\n\t): Promise<T> => {\n\t\tif (!ImportService.isCachingEnabled) {\n\t\t\treturn this.importAllUncached(file)\n\t\t}\n\n\t\tconst { hash, fileContents } = this.pullHashAndContents(file)\n\n\t\tif (!this.hasFileChanged(hash)) {\n\t\t\tconst isDirty = this.haveImportsChanged(file, fileContents)\n\n\t\t\tif (!isDirty && ImportService.cachedImports[hash]) {\n\t\t\t\treturn ImportService.cachedImports[hash] as T\n\t\t\t} else if (!isDirty) {\n\t\t\t\tImportService.cachedImports[hash] = this.importAllCached(file)\n\t\t\t\treturn ImportService.cachedImports[hash] as T\n\t\t\t}\n\t\t}\n\n\t\tImportService.cachedImports[hash] = this.importAllUncached(file)\n\t\tconst response = (await ImportService.cachedImports[hash]) as T\n\t\tthis.writeCacheFile(hash, response)\n\n\t\treturn response\n\t}\n\n\tprivate haveImportsChanged(\n\t\toriginalFilepath: string,\n\t\tcontents: string\n\t): boolean {\n\t\tlet changed = false\n\t\tlet importMatches\n\n\t\t// only check files that start with dot because they are local and we can actually only check local files\n\t\tconst regex =\n\t\t\toriginalFilepath.search(/\\.js$/i) > -1\n\t\t\t\t? /require\\(['\"](\\..*?)['\"]\\)/gis\n\t\t\t\t: /import.*[\"'](\\..*?)[\"']/gis\n\n\t\twhile ((importMatches = regex.exec(contents)) !== null) {\n\t\t\ttry {\n\t\t\t\tconst match = importMatches[1]\n\t\t\t\tconst dir = pathUtil.dirname(originalFilepath)\n\t\t\t\tconst nodeResolved = require.resolve(pathUtil.join(dir, match))\n\t\t\t\tconst { hash } = this.pullHashAndContents(nodeResolved)\n\n\t\t\t\tif (this.hasFileChanged(hash)) {\n\t\t\t\t\tchanged = true\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\n\t\treturn changed\n\t}\n\n\tprivate writeCacheFile(hash: string, contents: Record<string, any>) {\n\t\tconst destination = this.resolveCacheFile(hash)\n\t\tdiskUtil.writeFile(destination, JSON.stringify(contents))\n\t}\n\n\tprivate importAllCached(file: string) {\n\t\tconst { hash } = this.pullHashAndContents(file)\n\n\t\tconst cacheFile = this.resolveCacheFile(hash)\n\t\tconst contents = diskUtil.readFile(cacheFile)\n\n\t\treturn JSON.parse(contents)\n\t}\n\n\tprivate importAllUncached = async <T extends Record<string, any>>(\n\t\tfile: string\n\t): Promise<T> => {\n\t\tlet defaultImported: T | undefined\n\n\t\tif (!fs.existsSync(file)) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'FAILED_TO_IMPORT',\n\t\t\t\tfile,\n\t\t\t\tfriendlyMessage: `I couldn't import ${file} because I couldn't find it!`,\n\t\t\t})\n\t\t}\n\n\t\tlet args = [\n\t\t\t'-e',\n\t\t\t`\"try { const imported = require('${file}');console.log('${this.divider}');console.log(JSON.stringify(imported)); } catch(err) { console.log('${this.errorDivider}');console.log(err.options ? err.toString() : err.stack); }\"`,\n\t\t]\n\n\t\tif (file.search(/\\.ts$/i) > -1) {\n\t\t\targs = [\n\t\t\t\t'-r',\n\t\t\t\t'ts-node/register',\n\t\t\t\t'-r',\n\t\t\t\t'tsconfig-paths/register',\n\t\t\t\t...args,\n\t\t\t]\n\t\t}\n\n\t\ttry {\n\t\t\tconst { stdout } = await this.command.execute('node', {\n\t\t\t\targs,\n\t\t\t})\n\n\t\t\tconst successParts = stdout.split(this.divider)\n\t\t\tconst errParts = stdout.split(this.errorDivider)\n\n\t\t\tif (errParts.length > 1) {\n\t\t\t\tconst proxyError = this.buildErrorFromExecuteResponse(\n\t\t\t\t\terrParts,\n\t\t\t\t\tfile,\n\t\t\t\t\tstdout\n\t\t\t\t)\n\n\t\t\t\tthrow proxyError\n\t\t\t} else {\n\t\t\t\tdefaultImported = JSON.parse(successParts[1])\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\tif (err instanceof SpruceError) {\n\t\t\t\tthrow err\n\t\t\t} else {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'FAILED_TO_IMPORT',\n\t\t\t\t\tfile,\n\t\t\t\t\toriginalError: err,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn defaultImported as T\n\t}\n\n\tpublic importDefault = async <T extends Record<string, any>>(\n\t\tfile: string\n\t): Promise<T> => {\n\t\tconst imported: any = await this.importAll(file)\n\t\treturn imported.default as T\n\t}\n\n\tprivate buildErrorFromExecuteResponse(\n\t\terrParts: string[],\n\t\tfile: string,\n\t\tstdout: string\n\t) {\n\t\tlet err: Record<string, any> = {}\n\t\ttry {\n\t\t\terr = JSON.parse(errParts[1])\n\t\t\tif (!err.options) {\n\t\t\t\tthrow Error('Capture and reported below')\n\t\t\t}\n\t\t} catch {\n\t\t\terr = {\n\t\t\t\toptions: {\n\t\t\t\t\tcode: 'FAILED_TO_IMPORT',\n\t\t\t\t\tfile,\n\t\t\t\t\tfriendlyMessage: `Unknown error from import, output was: \\n\\n\"${\n\t\t\t\t\t\terrParts[1] ?? stdout\n\t\t\t\t\t}\"`,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst proxyError = new SpruceError(err.options)\n\n\t\tif (err.stack) {\n\t\t\tproxyError.stack = err.stack\n\t\t}\n\t\treturn proxyError\n\t}\n\n\tpublic async bulkImport(files: string[]): Promise<any[]> {\n\t\tif (files.length === 0) {\n\t\t\treturn []\n\t\t}\n\t\tconst filepath = diskUtil.resolvePath(this.cwd, '.tmp')\n\t\tconst filename = 'bulk-import-' + new Date().getTime() + '.ts'\n\n\t\tlet imports = ``\n\t\tlet exports = `export default [\\n`\n\n\t\tlet idx = 0\n\t\tfor (const file of files) {\n\t\t\tconst relative = pathUtil\n\t\t\t\t.relative(filepath, file)\n\t\t\t\t.replace(pathUtil.extname(file), '')\n\n\t\t\timports += `import { default as import${idx}} from '${relative}'\\n`\n\t\t\texports += `import${idx},\\n`\n\t\t\tidx++\n\t\t}\n\n\t\texports += ']'\n\n\t\tconst contents = imports + `\\n\\n` + exports\n\t\tconst fullPath = pathUtil.join(filepath, filename)\n\t\tdiskUtil.writeFile(fullPath, contents)\n\n\t\ttry {\n\t\t\tconst results = (await this.importDefault(fullPath)) as any[]\n\n\t\t\treturn results as any\n\t\t} catch (err) {\n\t\t\t// if something failed, lets load one at a time until we find the one that failes\n\t\t\tfor (const file of files) {\n\t\t\t\tconst imported = await this.importDefault(file)\n\t\t\t\tif (!imported) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'FAILED_TO_IMPORT',\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\tfriendlyMessage: `Looks like this file does not export default.`,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow err\n\t\t} finally {\n\t\t\tdiskUtil.deleteDir(filepath)\n\t\t}\n\t}\n\n\tpublic static clearCache() {\n\t\tImportService.cachedImports = {}\n\t\tdiskUtil.deleteDir(this.cacheDir())\n\t}\n\n\tpublic static setCacheDir(cacheDir: string) {\n\t\tthis.importCacheDir = cacheDir\n\t}\n\n\tpublic static disableCache() {\n\t\tthis.isCachingEnabled = false\n\t}\n\n\tpublic static enableCaching() {\n\t\tthis.isCachingEnabled = true\n\t}\n\n\tprivate hasFileChanged(hash: string) {\n\t\tconst resolvedFilePath = this.resolveCacheFile(hash)\n\t\treturn !diskUtil.doesFileExist(resolvedFilePath)\n\t}\n\n\tprivate resolveCacheFile(hash: string) {\n\t\treturn diskUtil.resolvePath(ImportService.cacheDir(), hash + '.json')\n\t}\n\n\tprivate static cacheDir(): string {\n\t\treturn this.importCacheDir\n\t}\n\n\tprivate pullHashAndContents(file: string) {\n\t\tconst fileContents = diskUtil.readFile(file)\n\t\tconst hash = md5(fileContents)\n\t\treturn { hash, fileContents }\n\t}\n}\n"],"file":"ImportService.js"}
1
+ {"version":3,"sources":["../../src/services/ImportService.ts"],"names":["ImportService","options","file","isCachingEnabled","importAllUncached","pullHashAndContents","hash","fileContents","hasFileChanged","isDirty","haveImportsChanged","cachedImports","importAllCached","response","writeCacheFile","fs","existsSync","SpruceError","code","friendlyMessage","args","divider","errorDivider","search","command","execute","stdout","successParts","split","errParts","length","proxyError","buildErrorFromExecuteResponse","defaultImported","JSON","parse","originalError","importAll","imported","cwd","originalFilepath","contents","changed","importMatches","regex","exec","match","dir","pathUtil","dirname","nodeResolved","require","resolve","join","destination","resolveCacheFile","diskUtil","writeFile","stringify","cacheFile","readFile","err","Error","stack","files","filepath","resolvePath","filename","Date","getTime","imports","exports","idx","relative","replace","extname","fullPath","importDefault","results","deleteDir","resolvedFilePath","doesFileExist","cacheDir","importCacheDir","createTempDir"],"mappings":"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","sourcesContent":["import pathUtil from 'path'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport fs from 'fs-extra'\nimport md5 from 'md5'\nimport SpruceError from '../errors/SpruceError'\nimport CommandService from './CommandService'\n\nexport default class ImportService {\n\tpublic cwd: string\n\n\tprivate divider = '## SPRUCE-CLI DIVIDER ##'\n\tprivate errorDivider = '## SPRUCE-CLI ERROR DIVIDER ##'\n\n\tprivate static cachedImports: Record<string, Record<string, any>> = {}\n\tprivate static importCacheDir: string =\n\t\tdiskUtil.createTempDir('import-service')\n\tprivate command: CommandService\n\tprivate static isCachingEnabled: boolean\n\n\tpublic constructor(options: { cwd: string; command: CommandService }) {\n\t\tthis.cwd = options.cwd\n\t\tthis.command = options.command\n\t}\n\n\tpublic importAll = async <T extends Record<string, any>>(\n\t\tfile: string\n\t): Promise<T> => {\n\t\tif (!ImportService.isCachingEnabled) {\n\t\t\treturn this.importAllUncached(file)\n\t\t}\n\n\t\tconst { hash, fileContents } = this.pullHashAndContents(file)\n\n\t\tif (!this.hasFileChanged(hash)) {\n\t\t\tconst isDirty = this.haveImportsChanged(file, fileContents)\n\n\t\t\tif (!isDirty && ImportService.cachedImports[hash]) {\n\t\t\t\treturn ImportService.cachedImports[hash] as T\n\t\t\t} else if (!isDirty) {\n\t\t\t\tImportService.cachedImports[hash] = this.importAllCached(file)\n\t\t\t\treturn ImportService.cachedImports[hash] as T\n\t\t\t}\n\t\t}\n\n\t\tImportService.cachedImports[hash] = this.importAllUncached(file)\n\t\tconst response = (await ImportService.cachedImports[hash]) as T\n\t\tthis.writeCacheFile(hash, response)\n\n\t\treturn response\n\t}\n\n\tprivate haveImportsChanged(\n\t\toriginalFilepath: string,\n\t\tcontents: string\n\t): boolean {\n\t\tlet changed = false\n\t\tlet importMatches\n\n\t\t// only check files that start with dot because they are local and we can actually only check local files\n\t\tconst regex =\n\t\t\toriginalFilepath.search(/\\.js$/i) > -1\n\t\t\t\t? /require\\(['\"](\\..*?)['\"]\\)/gis\n\t\t\t\t: /import.*[\"'](\\..*?)[\"']/gis\n\n\t\twhile ((importMatches = regex.exec(contents)) !== null) {\n\t\t\ttry {\n\t\t\t\tconst match = importMatches[1]\n\t\t\t\tconst dir = pathUtil.dirname(originalFilepath)\n\t\t\t\tconst nodeResolved = require.resolve(pathUtil.join(dir, match))\n\t\t\t\tconst { hash } = this.pullHashAndContents(nodeResolved)\n\n\t\t\t\tif (this.hasFileChanged(hash)) {\n\t\t\t\t\tchanged = true\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\n\t\treturn changed\n\t}\n\n\tprivate writeCacheFile(hash: string, contents: Record<string, any>) {\n\t\tconst destination = this.resolveCacheFile(hash)\n\t\tdiskUtil.writeFile(destination, JSON.stringify(contents))\n\t}\n\n\tprivate importAllCached(file: string) {\n\t\tconst { hash } = this.pullHashAndContents(file)\n\n\t\tconst cacheFile = this.resolveCacheFile(hash)\n\t\tconst contents = diskUtil.readFile(cacheFile)\n\n\t\treturn JSON.parse(contents)\n\t}\n\n\tprivate importAllUncached = async <T extends Record<string, any>>(\n\t\tfile: string\n\t): Promise<T> => {\n\t\tlet defaultImported: T | undefined\n\n\t\tif (!fs.existsSync(file)) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'FAILED_TO_IMPORT',\n\t\t\t\tfile,\n\t\t\t\tfriendlyMessage: `I couldn't import ${file} because I couldn't find it!`,\n\t\t\t})\n\t\t}\n\n\t\tlet args = [\n\t\t\t'-e',\n\t\t\t`\"try { const imported = require('${file}');console.log('${this.divider}');console.log(JSON.stringify(imported)); } catch(err) { console.log('${this.errorDivider}');console.log(err.options ? err.toString() : err.stack); }\"`,\n\t\t]\n\n\t\tif (file.search(/\\.ts$/i) > -1) {\n\t\t\targs = [\n\t\t\t\t'-r',\n\t\t\t\t'ts-node/register',\n\t\t\t\t'-r',\n\t\t\t\t'tsconfig-paths/register',\n\t\t\t\t...args,\n\t\t\t]\n\t\t}\n\n\t\ttry {\n\t\t\tconst { stdout } = await this.command.execute('node', {\n\t\t\t\targs,\n\t\t\t})\n\n\t\t\tconst successParts = stdout.split(this.divider)\n\t\t\tconst errParts = stdout.split(this.errorDivider)\n\n\t\t\tif (errParts.length > 1) {\n\t\t\t\tconst proxyError = this.buildErrorFromExecuteResponse(\n\t\t\t\t\terrParts,\n\t\t\t\t\tfile,\n\t\t\t\t\tstdout\n\t\t\t\t)\n\n\t\t\t\tthrow proxyError\n\t\t\t} else {\n\t\t\t\tdefaultImported = JSON.parse(successParts[1])\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\tif (err instanceof SpruceError) {\n\t\t\t\tthrow err\n\t\t\t} else {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'FAILED_TO_IMPORT',\n\t\t\t\t\tfile,\n\t\t\t\t\toriginalError: err,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn defaultImported as T\n\t}\n\n\tpublic importDefault = async <T extends Record<string, any>>(\n\t\tfile: string\n\t): Promise<T> => {\n\t\tconst imported: any = await this.importAll(file)\n\t\treturn imported.default as T\n\t}\n\n\tprivate buildErrorFromExecuteResponse(\n\t\terrParts: string[],\n\t\tfile: string,\n\t\tstdout: string\n\t) {\n\t\tlet err: Record<string, any> = {}\n\t\ttry {\n\t\t\terr = JSON.parse(errParts[1])\n\t\t\tif (!err.options) {\n\t\t\t\tthrow Error('Capture and reported below')\n\t\t\t}\n\t\t} catch {\n\t\t\terr = {\n\t\t\t\toptions: {\n\t\t\t\t\tcode: 'FAILED_TO_IMPORT',\n\t\t\t\t\tfile,\n\t\t\t\t\tfriendlyMessage: `Unknown error from import, output was: \\n\\n\"${\n\t\t\t\t\t\terrParts[1] ?? stdout\n\t\t\t\t\t}\"`,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst proxyError = new SpruceError(err.options)\n\n\t\tif (err.stack) {\n\t\t\tproxyError.stack = err.stack\n\t\t}\n\t\treturn proxyError\n\t}\n\n\tpublic async bulkImport(files: string[]): Promise<any[]> {\n\t\tif (files.length === 0) {\n\t\t\treturn []\n\t\t}\n\t\tconst filepath = diskUtil.resolvePath(this.cwd, '.tmp')\n\t\tconst filename = 'bulk-import-' + new Date().getTime() + '.ts'\n\n\t\tlet imports = ``\n\t\tlet exports = `export default [\\n`\n\n\t\tlet idx = 0\n\t\tfor (const file of files) {\n\t\t\tconst relative = pathUtil\n\t\t\t\t.relative(filepath, file)\n\t\t\t\t.replace(pathUtil.extname(file), '')\n\n\t\t\timports += `import { default as import${idx}} from '${relative}'\\n`\n\t\t\texports += `import${idx},\\n`\n\t\t\tidx++\n\t\t}\n\n\t\texports += ']'\n\n\t\tconst contents = imports + `\\n\\n` + exports\n\t\tconst fullPath = pathUtil.join(filepath, filename)\n\t\tdiskUtil.writeFile(fullPath, contents)\n\n\t\ttry {\n\t\t\tconst results = (await this.importDefault(fullPath)) as any[]\n\n\t\t\treturn results as any\n\t\t} catch (err) {\n\t\t\t// if something failed, lets load one at a time until we find the one that failes\n\t\t\tfor (const file of files) {\n\t\t\t\tconst imported = await this.importDefault(file)\n\t\t\t\tif (!imported) {\n\t\t\t\t\tthrow new SpruceError({\n\t\t\t\t\t\tcode: 'FAILED_TO_IMPORT',\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\tfriendlyMessage: `Looks like ${file} does not export default.`,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow err\n\t\t} finally {\n\t\t\tdiskUtil.deleteDir(filepath)\n\t\t}\n\t}\n\n\tpublic static clearCache() {\n\t\tImportService.cachedImports = {}\n\t\tdiskUtil.deleteDir(this.cacheDir())\n\t}\n\n\tpublic static setCacheDir(cacheDir: string) {\n\t\tthis.importCacheDir = cacheDir\n\t}\n\n\tpublic static disableCache() {\n\t\tthis.isCachingEnabled = false\n\t}\n\n\tpublic static enableCaching() {\n\t\tthis.isCachingEnabled = true\n\t}\n\n\tprivate hasFileChanged(hash: string) {\n\t\tconst resolvedFilePath = this.resolveCacheFile(hash)\n\t\treturn !diskUtil.doesFileExist(resolvedFilePath)\n\t}\n\n\tprivate resolveCacheFile(hash: string) {\n\t\treturn diskUtil.resolvePath(ImportService.cacheDir(), hash + '.json')\n\t}\n\n\tprivate static cacheDir(): string {\n\t\treturn this.importCacheDir\n\t}\n\n\tprivate pullHashAndContents(file: string) {\n\t\tconst fileContents = diskUtil.readFile(file)\n\t\tconst hash = md5(fileContents)\n\t\treturn { hash, fileContents }\n\t}\n}\n"],"file":"ImportService.js"}
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  ]
18
18
  },
19
19
  "license": "MIT",
20
- "version": "14.22.4",
20
+ "version": "14.22.8",
21
21
  "bin": {
22
22
  "spruce": "./build/index.js"
23
23
  },
@@ -75,19 +75,19 @@
75
75
  "@babel/plugin-proposal-decorators": "^7.15.8",
76
76
  "@babel/runtime": "^7.15.4",
77
77
  "@jest/reporters": "^27.3.1",
78
- "@sprucelabs/error": "^5.0.246",
79
- "@sprucelabs/heartwood-view-controllers": "^33.3.3",
80
- "@sprucelabs/jest-json-reporter": "^6.0.215",
81
- "@sprucelabs/mercury-client": "^16.13.100",
82
- "@sprucelabs/mercury-event-emitter": "^16.13.100",
83
- "@sprucelabs/mercury-types": "^26.1.502",
84
- "@sprucelabs/schema": "^25.3.357",
85
- "@sprucelabs/spruce-core-schemas": "^22.5.466",
86
- "@sprucelabs/spruce-event-plugin": "^5.5.14",
87
- "@sprucelabs/spruce-event-utils": "^16.0.511",
88
- "@sprucelabs/spruce-skill-booter": "^5.5.14",
89
- "@sprucelabs/spruce-skill-utils": "^20.6.303",
90
- "@sprucelabs/spruce-templates": "^14.22.4",
78
+ "@sprucelabs/error": "^5.0.258",
79
+ "@sprucelabs/heartwood-view-controllers": "^34.3.4",
80
+ "@sprucelabs/jest-json-reporter": "^6.0.222",
81
+ "@sprucelabs/mercury-client": "^16.13.132",
82
+ "@sprucelabs/mercury-event-emitter": "^16.13.132",
83
+ "@sprucelabs/mercury-types": "^26.1.544",
84
+ "@sprucelabs/schema": "^25.3.382",
85
+ "@sprucelabs/spruce-core-schemas": "^22.5.503",
86
+ "@sprucelabs/spruce-event-plugin": "^5.5.26",
87
+ "@sprucelabs/spruce-event-utils": "^16.0.555",
88
+ "@sprucelabs/spruce-skill-booter": "^5.5.26",
89
+ "@sprucelabs/spruce-skill-utils": "^20.6.331",
90
+ "@sprucelabs/spruce-templates": "^14.22.8",
91
91
  "cfonts": "^2.10.0",
92
92
  "chalk": "^4.1.2",
93
93
  "chokidar": "^3.5.2",
@@ -116,18 +116,18 @@
116
116
  "uuid": "^8.3.2"
117
117
  },
118
118
  "devDependencies": {
119
- "@sprucelabs/data-stores": "^6.1.380",
120
- "@sprucelabs/jest-sheets-reporter": "^1.2.221",
121
- "@sprucelabs/mercury-core-events": "^1.2.589",
122
- "@sprucelabs/resolve-path-aliases": "^1.0.217",
123
- "@sprucelabs/spruce-conversation-plugin": "^5.5.14",
124
- "@sprucelabs/spruce-deploy-plugin": "^5.5.14",
125
- "@sprucelabs/spruce-store-plugin": "^5.5.14",
126
- "@sprucelabs/spruce-test-fixtures": "^5.5.14",
127
- "@sprucelabs/test": "^7.7.203",
128
- "@sprucelabs/test-utils": "^3.0.219",
119
+ "@sprucelabs/data-stores": "^6.1.399",
120
+ "@sprucelabs/jest-sheets-reporter": "^1.2.227",
121
+ "@sprucelabs/mercury-core-events": "^1.2.632",
122
+ "@sprucelabs/resolve-path-aliases": "^1.0.220",
123
+ "@sprucelabs/spruce-conversation-plugin": "^5.5.26",
124
+ "@sprucelabs/spruce-deploy-plugin": "^5.5.26",
125
+ "@sprucelabs/spruce-store-plugin": "^5.5.26",
126
+ "@sprucelabs/spruce-test-fixtures": "^5.5.26",
127
+ "@sprucelabs/test": "^7.7.210",
128
+ "@sprucelabs/test-utils": "^3.0.232",
129
129
  "@types/blessed": "^0.1.19",
130
- "@types/eslint": "^7.28.1",
130
+ "@types/eslint": "^7.28.2",
131
131
  "@types/fs-extra": "^9.0.13",
132
132
  "@types/inflection": "^1.13.0",
133
133
  "@types/inquirer": "^8.1.3",
@@ -135,7 +135,7 @@
135
135
  "@types/lodash": "^4.14.176",
136
136
  "@types/md5": "^2.3.1",
137
137
  "@types/mkdirp": "^1.0.2",
138
- "@types/node": "^16.11.1",
138
+ "@types/node": "^16.11.4",
139
139
  "@types/promise.allsettled": "^1.0.3",
140
140
  "@types/ps-node": "^0.1.1",
141
141
  "@types/rimraf": "^3.0.2",
@@ -149,7 +149,7 @@
149
149
  "concurrently": "^6.3.0",
150
150
  "conventional-changelog-sprucelabs": "^1.1.2",
151
151
  "dotenv": "^10.0.0",
152
- "eslint": "^8.0.1",
152
+ "eslint": "^8.1.0",
153
153
  "eslint-config-spruce": "^10.10.15",
154
154
  "find-process": "^1.4.5",
155
155
  "jest": "^27.3.1",
@@ -160,7 +160,7 @@
160
160
  "ps-node": "^0.1.6",
161
161
  "rimraf": "^3.0.2",
162
162
  "ts-jest": "^27.0.7",
163
- "ts-node": "^10.3.0",
163
+ "ts-node": "^10.4.0",
164
164
  "tsc-watch": "^4.5.0",
165
165
  "tsconfig-paths": "^3.11.0",
166
166
  "typescript": "^4.4.4"
@@ -592,5 +592,5 @@
592
592
  "ora"
593
593
  ]
594
594
  },
595
- "gitHead": "ba4f66698430ea19b405b520445e21cfbd964ab7"
595
+ "gitHead": "822f64bc19d0f5421ba3a5f95032730c35ebdee3"
596
596
  }
@@ -137,7 +137,7 @@ export default class EventStoreTest extends AbstractEventTest {
137
137
  results.files
138
138
  )
139
139
 
140
- diskUtil.writeFile(match, '')
140
+ diskUtil.writeFile(match, 'export default {}')
141
141
 
142
142
  const err = await assert.doesThrowAsync(
143
143
  () => this.Store('event').loadLocalContract(skill.slug),
package/src/cli.ts CHANGED
@@ -444,9 +444,14 @@ export async function run(argv: string[] = []): Promise<void> {
444
444
  await setupInFlightEntertainment(terminal)
445
445
 
446
446
  const command = await program.parseAsync(argv)
447
+
447
448
  //@ts-ignore
448
449
  const results = await command._actionResults[0]
449
450
 
451
+ for (const client of MercuryClientFactory.getClients()) {
452
+ await client.disconnect()
453
+ }
454
+
450
455
  return results
451
456
  }
452
457
 
@@ -153,6 +153,9 @@ export default class EventContractBuilder {
153
153
 
154
154
  const contractResults = await this.eventStore.fetchEventContracts({
155
155
  localNamespace: namespace,
156
+ didUpdateHandler: (msg) => {
157
+ this.ui.startLoading(msg)
158
+ },
156
159
  })
157
160
 
158
161
  if (contractResults.errors.length > 0) {
@@ -6,7 +6,7 @@ import {
6
6
  SpruceSchemas,
7
7
  validateEventContract,
8
8
  } from '@sprucelabs/mercury-types'
9
- import { Schema } from '@sprucelabs/schema'
9
+ import { Schema, validateSchema } from '@sprucelabs/schema'
10
10
  import {
11
11
  eventResponseUtil,
12
12
  eventDiskUtil,
@@ -63,10 +63,10 @@ export default class EventStore extends AbstractStore {
63
63
  }): Promise<EventStoreFetchEventContractsResponse> {
64
64
  const { localNamespace, didUpdateHandler } = options ?? {}
65
65
 
66
- const contracts = await this.fetchRemoteContracts()
67
-
68
66
  didUpdateHandler?.('Pulling remote contracts...')
69
67
 
68
+ const contracts = await this.fetchRemoteContracts()
69
+
70
70
  const localContract =
71
71
  localNamespace &&
72
72
  (await this.loadLocalContract(localNamespace, didUpdateHandler))
@@ -135,16 +135,21 @@ export default class EventStore extends AbstractStore {
135
135
 
136
136
  const ns = namesUtil.toKebab(localNamespace)
137
137
  const eventSignatures: Record<string, EventSignature> = {}
138
- const importsByName: Record<string, EventImport> = {}
138
+ const filesByFqenAndEventKey: {
139
+ fqen: string
140
+ isSchema: boolean
141
+ match: string
142
+ eventKey: string
143
+ }[] = []
139
144
 
140
145
  didUpdateHandler?.(
141
- `Importing of ${localMatches.length} local event signature files...`
146
+ `Importing ${localMatches.length} local event signature files...`
142
147
  )
143
148
 
144
149
  await Promise.all(
145
150
  localMatches.map(async (match) => {
146
151
  let fqen: string | undefined
147
- let key: keyof EventImport | undefined
152
+ let eventKey: keyof EventImport | undefined
148
153
 
149
154
  try {
150
155
  const { eventName, version } = eventDiskUtil.splitPathToEvent(match)
@@ -162,32 +167,57 @@ export default class EventStore extends AbstractStore {
162
167
 
163
168
  if (map) {
164
169
  //@ts-ignore
165
- key = map.key
166
- if (!importsByName[fqen]) {
167
- importsByName[fqen] = {}
168
- }
169
-
170
- if (map.isSchema) {
171
- const importer = this.Service('schema')
172
- //@ts-ignore
173
- importsByName[fqen][map.key] = await importer.importSchema(match)
174
- } else {
175
- const importer = this.Service('import')
176
- //@ts-ignore
177
- importsByName[fqen][map.key] = await importer.importDefault(match)
178
- }
170
+ eventKey = map.key
171
+
172
+ filesByFqenAndEventKey.push({
173
+ fqen,
174
+ isSchema: map.isSchema,
175
+ match,
176
+ eventKey: eventKey as string,
177
+ })
179
178
  }
180
179
  } catch (err: any) {
181
180
  throw new SpruceError({
182
181
  code: 'INVALID_EVENT_CONTRACT',
183
182
  fullyQualifiedEventName: fqen ?? 'Bad event name',
184
- brokenProperty: key ?? '*** major failure ***',
183
+ brokenProperty: eventKey ?? '*** major failure ***',
185
184
  originalError: err,
186
185
  })
187
186
  }
188
187
  })
189
188
  )
190
189
 
190
+ const matches = filesByFqenAndEventKey.map((o) => o.match)
191
+ const importsInOrder = (await this.Service('import').bulkImport(
192
+ matches
193
+ )) as Record<string, any>[]
194
+ const importsByName: Record<string, EventImport> = {}
195
+
196
+ for (let idx = 0; idx < filesByFqenAndEventKey.length; idx++) {
197
+ const imported = importsInOrder[idx]
198
+ const { fqen, eventKey, isSchema } = filesByFqenAndEventKey[idx]
199
+
200
+ if (isSchema) {
201
+ try {
202
+ validateSchema(imported)
203
+ } catch (err: any) {
204
+ throw new SpruceError({
205
+ code: 'INVALID_EVENT_CONTRACT',
206
+ fullyQualifiedEventName: fqen,
207
+ brokenProperty: eventKey,
208
+ originalError: err,
209
+ })
210
+ }
211
+ }
212
+
213
+ if (!importsByName[fqen]) {
214
+ importsByName[fqen] = {}
215
+ }
216
+
217
+ //@ts-ignore
218
+ importsByName[fqen][eventKey] = imported
219
+ }
220
+
191
221
  Object.keys(importsByName).forEach((fqen) => {
192
222
  const imported = importsByName[fqen]
193
223
  const { eventName } = eventNameUtil.split(fqen)
@@ -30,7 +30,10 @@ export default class RebuildAction extends AbstractAction<OptionsSchema> {
30
30
 
31
31
  try {
32
32
  if (shouldPlayGames) {
33
- InFlightEntertainment.start()
33
+ InFlightEntertainment.start([
34
+ 'Rebuild sequence initialized...',
35
+ 'The only option is setting a new high score!',
36
+ ])
34
37
  } else {
35
38
  this.ui.startLoading('Rebuilding....')
36
39
  }
@@ -233,7 +233,7 @@ export default class ImportService {
233
233
  throw new SpruceError({
234
234
  code: 'FAILED_TO_IMPORT',
235
235
  file,
236
- friendlyMessage: `Looks like this file does not export default.`,
236
+ friendlyMessage: `Looks like ${file} does not export default.`,
237
237
  })
238
238
  }
239
239
  }