@sprucelabs/spruce-cli 14.29.30 → 14.30.2
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 +35 -0
- package/build/__tests__/behavioral/ListeningToCoreEvents.test.d.ts +6 -0
- package/build/__tests__/behavioral/ListeningToCoreEvents.test.js +128 -0
- package/build/__tests__/behavioral/ListeningToCoreEvents.test.js.map +1 -0
- package/build/__tests__/behavioral/UpgradingWithSandboxFeatureInstalled.test.d.ts +10 -0
- package/build/__tests__/behavioral/UpgradingWithSandboxFeatureInstalled.test.js +298 -0
- package/build/__tests__/behavioral/UpgradingWithSandboxFeatureInstalled.test.js.map +1 -0
- package/build/__tests__/behavioral/schemas/CreatingANewSchemaBuilder.test.js +1 -1
- package/build/__tests__/behavioral/schemas/CreatingANewSchemaBuilder.test.js.map +1 -1
- package/build/features/event/actions/ListenAction.d.ts +4 -0
- package/build/features/event/actions/ListenAction.js +228 -127
- package/build/features/event/actions/ListenAction.js.map +1 -1
- package/build/features/event/writers/EventWriter.d.ts +1 -3
- package/build/features/event/writers/EventWriter.js +20 -14
- package/build/features/event/writers/EventWriter.js.map +1 -1
- package/build/features/sandbox/SandboxFeature.js +1 -1
- package/build/features/sandbox/SandboxFeature.js.map +1 -1
- package/build/features/sandbox/actions/SetupAction.js +24 -12
- package/build/features/sandbox/actions/SetupAction.js.map +1 -1
- package/build/features/skill/SkillFeature.js +2 -1
- package/build/features/skill/SkillFeature.js.map +1 -1
- package/build/features/view/actions/CreateAction.js +1 -1
- package/build/features/view/actions/CreateAction.js.map +1 -1
- package/build/interfaces/SpyInterface.js +1 -1
- package/build/interfaces/SpyInterface.js.map +1 -1
- package/build/templateItemBuilders/EventTemplateItemBuilder.js +2 -1
- package/build/templateItemBuilders/EventTemplateItemBuilder.js.map +1 -1
- package/package.json +28 -28
- package/src/__tests__/behavioral/ListeningToCoreEvents.test.ts +26 -0
- package/src/__tests__/behavioral/UpgradingWithSandboxFeatureInstalled.test.ts +74 -0
- package/src/__tests__/behavioral/schemas/CreatingANewSchemaBuilder.test.ts +1 -1
- package/src/features/event/actions/ListenAction.ts +111 -58
- package/src/features/event/writers/EventWriter.ts +21 -35
- package/src/features/sandbox/SandboxFeature.ts +1 -1
- package/src/features/sandbox/actions/SetupAction.ts +6 -0
- package/src/features/skill/SkillFeature.ts +1 -1
- package/src/features/view/actions/CreateAction.ts +1 -0
- package/src/interfaces/SpyInterface.ts +3 -1
- package/src/templateItemBuilders/EventTemplateItemBuilder.ts +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/templateItemBuilders/EventTemplateItemBuilder.ts"],"names":["EventTemplateItemBuilder","options","contracts","localNamespace","eventBuilderFile","eventContractTemplateItems","schemaTemplateItems","contract","buildTemplateItemsForContract","schemaItems","contractItems","push","sort","a","b","nameCamel","fullyQualifiedEventName","namedSignatures","eventContractUtil","getNamedEventSignatures","namedSig","mapEventSigsToSchemaTemplateItems","signatureTemplateItem","buildEventSigTemplateItem","emitPayloadSchemaTemplateItem","emitPayloadSchema","responsePayloadSchemaTemplateItem","responsePayloadSchema","SchemaError","code","parameters","item","buildTemplateItemForEventSignature","eventNamespace","isLocal","namespacePascal","sigToNamespacePascal","namesUtil","toCamel","eventName","namePascal","toPascal","version","namespace","toKebab","MERCURY_API_NAMESPACE","namespaceCamel","imports","filter","i","map","schemaDiskUtil","resolvePath","destination","schema","shouldIncludeFileExtension","importAs","eventSignatures","signature","listenPermissionContract","emitPermissionContract","find","id","schemasByNamespace","mapEventSigsToSchemasByNamepace","schemaTemplateItemBuilder","SchemaTemplateItemBuilder","buildTemplateItems"],"mappings":"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","sourcesContent":["import { EventContract } from '@sprucelabs/mercury-types'\nimport { Schema, SchemaError, SchemaTemplateItem } from '@sprucelabs/schema'\nimport {\n\teventContractUtil,\n\tNamedEventSignature,\n} from '@sprucelabs/spruce-event-utils'\nimport {\n\tMERCURY_API_NAMESPACE,\n\tnamesUtil,\n} from '@sprucelabs/spruce-skill-utils'\nimport {\n\tEventContractTemplateItem,\n\tEventSignatureTemplateItem,\n} from '@sprucelabs/spruce-templates'\nimport schemaDiskUtil from '../features/schema/utilities/schemaDisk.utility'\nimport SchemaTemplateItemBuilder from './SchemaTemplateItemBuilder'\n\nexport default class EventTemplateItemBuilder {\n\tpublic buildTemplateItems(options: {\n\t\tcontracts: EventContract[]\n\t\tlocalNamespace?: string\n\t\teventBuilderFile?: string\n\t}): {\n\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t} {\n\t\tconst { contracts, localNamespace, eventBuilderFile } = options\n\n\t\tconst eventContractTemplateItems: EventContractTemplateItem[] = []\n\t\tconst schemaTemplateItems: SchemaTemplateItem[] = []\n\n\t\tfor (const contract of contracts) {\n\t\t\tconst {\n\t\t\t\tschemaTemplateItems: schemaItems,\n\t\t\t\teventContractTemplateItems: contractItems,\n\t\t\t} = this.buildTemplateItemsForContract(\n\t\t\t\tcontract,\n\t\t\t\tlocalNamespace,\n\t\t\t\teventBuilderFile\n\t\t\t)\n\n\t\t\teventContractTemplateItems.push(...contractItems)\n\t\t\tschemaTemplateItems.push(...schemaItems)\n\t\t}\n\n\t\teventContractTemplateItems.sort((a, b) => {\n\t\t\tif (a.nameCamel > b.nameCamel) {\n\t\t\t\treturn 1\n\t\t\t} else if (a.nameCamel < b.nameCamel) {\n\t\t\t\treturn -1\n\t\t\t}\n\n\t\t\treturn 0\n\t\t})\n\n\t\treturn { eventContractTemplateItems, schemaTemplateItems }\n\t}\n\n\tpublic buildEventTemplateItemForName(\n\t\tcontracts: EventContract[],\n\t\tfullyQualifiedEventName: string\n\t): {\n\t\tresponsePayloadSchemaTemplateItem: SchemaTemplateItem | undefined\n\t\temitPayloadSchemaTemplateItem: SchemaTemplateItem | undefined\n\t} {\n\t\tfor (const contract of contracts) {\n\t\t\tconst namedSignatures =\n\t\t\t\teventContractUtil.getNamedEventSignatures(contract)\n\n\t\t\tfor (const namedSig of namedSignatures) {\n\t\t\t\tif (namedSig.fullyQualifiedEventName === fullyQualifiedEventName) {\n\t\t\t\t\tconst schemaTemplateItems: SchemaTemplateItem[] =\n\t\t\t\t\t\tthis.mapEventSigsToSchemaTemplateItems(namedSignatures)\n\n\t\t\t\t\tconst signatureTemplateItem: EventSignatureTemplateItem =\n\t\t\t\t\t\tthis.buildEventSigTemplateItem(namedSig, schemaTemplateItems)\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\temitPayloadSchemaTemplateItem:\n\t\t\t\t\t\t\tsignatureTemplateItem.emitPayloadSchema,\n\t\t\t\t\t\tresponsePayloadSchemaTemplateItem:\n\t\t\t\t\t\t\tsignatureTemplateItem.responsePayloadSchema,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new SchemaError({\n\t\t\tcode: 'INVALID_PARAMETERS',\n\t\t\tparameters: ['fullyQualifiedEventName'],\n\t\t})\n\t}\n\n\tprivate buildTemplateItemsForContract(\n\t\tcontract: EventContract,\n\t\tlocalNamespace?: string,\n\t\teventBuilderFile?: string\n\t): {\n\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t} {\n\t\tconst namedSignatures = eventContractUtil.getNamedEventSignatures(contract)\n\n\t\tconst schemaTemplateItems: SchemaTemplateItem[] =\n\t\t\tthis.mapEventSigsToSchemaTemplateItems(namedSignatures)\n\n\t\tconst eventContractTemplateItems: EventContractTemplateItem[] = []\n\n\t\tfor (const namedSig of namedSignatures) {\n\t\t\tconst item: EventContractTemplateItem =\n\t\t\t\tthis.buildTemplateItemForEventSignature(\n\t\t\t\t\tnamedSig,\n\t\t\t\t\tschemaTemplateItems,\n\t\t\t\t\tnamedSig.eventNamespace === localNamespace,\n\t\t\t\t\teventBuilderFile\n\t\t\t\t)\n\n\t\t\teventContractTemplateItems.push(item)\n\t\t}\n\n\t\treturn {\n\t\t\teventContractTemplateItems,\n\t\t\tschemaTemplateItems,\n\t\t}\n\t}\n\n\tprivate buildTemplateItemForEventSignature(\n\t\tnamedSig: NamedEventSignature,\n\t\tschemaTemplateItems: SchemaTemplateItem[],\n\t\tisLocal: boolean,\n\t\teventBuilderFile?: string\n\t) {\n\t\tconst namespacePascal = this.sigToNamespacePascal(namedSig)\n\n\t\tconst signatureTemplateItem: EventSignatureTemplateItem =\n\t\t\tthis.buildEventSigTemplateItem(namedSig, schemaTemplateItems)\n\n\t\tconst item: EventContractTemplateItem = {\n\t\t\tnameCamel: namesUtil.toCamel(namedSig.eventName),\n\t\t\tnamePascal: namesUtil.toPascal(namedSig.eventName),\n\t\t\tversion: namedSig.version ?? '***MISSING***',\n\t\t\tisLocal,\n\t\t\tnamespace: namesUtil.toKebab(\n\t\t\t\tnamedSig.eventNamespace ?? MERCURY_API_NAMESPACE\n\t\t\t),\n\t\t\tnamespaceCamel: namesUtil.toCamel(\n\t\t\t\tnamedSig.eventNamespace ?? MERCURY_API_NAMESPACE\n\t\t\t),\n\t\t\timports: [\n\t\t\t\tsignatureTemplateItem.emitPayloadSchema as SchemaTemplateItem,\n\t\t\t\tsignatureTemplateItem.responsePayloadSchema as SchemaTemplateItem,\n\t\t\t]\n\t\t\t\t.filter((i) => !!i)\n\t\t\t\t.map((item: SchemaTemplateItem) => ({\n\t\t\t\t\tpackage: schemaDiskUtil.resolvePath({\n\t\t\t\t\t\tdestination: '#spruce/schemas',\n\t\t\t\t\t\tschema: item.schema,\n\t\t\t\t\t\tshouldIncludeFileExtension: false,\n\t\t\t\t\t}),\n\t\t\t\t\timportAs: `${item.nameCamel}Schema`,\n\t\t\t\t})),\n\t\t\tnamespacePascal,\n\t\t\teventSignatures: {\n\t\t\t\t[namedSig.fullyQualifiedEventName]: signatureTemplateItem,\n\t\t\t},\n\t\t}\n\n\t\titem.imports.push({\n\t\t\timportAs: '{ buildEventContract }',\n\t\t\tpackage: eventBuilderFile ?? '@sprucelabs/mercury-types',\n\t\t})\n\n\t\tif (\n\t\t\tnamedSig.signature.listenPermissionContract ||\n\t\t\tnamedSig.signature.emitPermissionContract\n\t\t) {\n\t\t\titem.imports.push({\n\t\t\t\timportAs: '{ buildPermissionContract }',\n\t\t\t\tpackage: eventBuilderFile ?? '@sprucelabs/mercury-types',\n\t\t\t})\n\t\t}\n\n\t\treturn item\n\t}\n\n\tprivate buildEventSigTemplateItem(\n\t\tnamedSig: NamedEventSignature,\n\t\tschemaItems: SchemaTemplateItem[]\n\t) {\n\t\tconst { emitPayloadSchema, responsePayloadSchema, ...signature } =\n\t\t\tnamedSig.signature\n\n\t\tconst signatureTemplateItem: EventSignatureTemplateItem = { ...signature }\n\n\t\tif (emitPayloadSchema) {\n\t\t\tsignatureTemplateItem.emitPayloadSchema = schemaItems.find(\n\t\t\t\t(i) => i.id === emitPayloadSchema.id\n\t\t\t)\n\t\t}\n\n\t\tif (responsePayloadSchema) {\n\t\t\tsignatureTemplateItem.responsePayloadSchema = schemaItems.find(\n\t\t\t\t(i) => i.id === responsePayloadSchema.id\n\t\t\t)\n\t\t}\n\t\treturn signatureTemplateItem\n\t}\n\n\tprivate mapEventSigsToSchemaTemplateItems(\n\t\tnamedSignatures: NamedEventSignature[]\n\t) {\n\t\tconst schemasByNamespace: Record<string, Schema[]> =\n\t\t\tthis.mapEventSigsToSchemasByNamepace(namedSignatures)\n\n\t\tconst schemaTemplateItemBuilder = new SchemaTemplateItemBuilder('Cli')\n\t\tconst schemaItems: SchemaTemplateItem[] =\n\t\t\tschemaTemplateItemBuilder.buildTemplateItems(\n\t\t\t\tschemasByNamespace,\n\t\t\t\t'#spruce/events'\n\t\t\t)\n\n\t\treturn schemaItems\n\t}\n\n\tprivate mapEventSigsToSchemasByNamepace(\n\t\tnamedSignatures: NamedEventSignature[]\n\t) {\n\t\tconst schemasByNamespace: Record<string, Schema[]> = {}\n\n\t\tfor (const namedSig of namedSignatures) {\n\t\t\tconst namespacePascal = this.sigToNamespacePascal(namedSig)\n\t\t\tconst { emitPayloadSchema, responsePayloadSchema } = namedSig.signature\n\n\t\t\tif (!schemasByNamespace[namespacePascal]) {\n\t\t\t\tschemasByNamespace[namespacePascal] = []\n\t\t\t}\n\n\t\t\tif (emitPayloadSchema) {\n\t\t\t\tschemasByNamespace[namespacePascal].push({\n\t\t\t\t\tversion: namedSig.version,\n\t\t\t\t\t...emitPayloadSchema,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (responsePayloadSchema) {\n\t\t\t\tschemasByNamespace[namespacePascal].push({\n\t\t\t\t\tversion: namedSig.version,\n\t\t\t\t\t...responsePayloadSchema,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn schemasByNamespace\n\t}\n\n\tprivate sigToNamespacePascal(namedSig: NamedEventSignature) {\n\t\treturn namesUtil.toPascal(namedSig.eventNamespace ?? MERCURY_API_NAMESPACE)\n\t}\n}\n"],"file":"EventTemplateItemBuilder.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/templateItemBuilders/EventTemplateItemBuilder.ts"],"names":["EventTemplateItemBuilder","options","contracts","localNamespace","eventBuilderFile","eventContractTemplateItems","schemaTemplateItems","contract","buildTemplateItemsForContract","schemaItems","contractItems","push","sort","a","b","nameCamel","fullyQualifiedEventName","namedSignatures","eventContractUtil","getNamedEventSignatures","namedSig","mapEventSigsToSchemaTemplateItems","signatureTemplateItem","buildEventSigTemplateItem","emitPayloadSchemaTemplateItem","emitPayloadSchema","responsePayloadSchemaTemplateItem","responsePayloadSchema","SchemaError","code","parameters","friendlyMessages","item","buildTemplateItemForEventSignature","eventNamespace","isLocal","namespacePascal","sigToNamespacePascal","namesUtil","toCamel","eventName","namePascal","toPascal","version","namespace","toKebab","MERCURY_API_NAMESPACE","namespaceCamel","imports","filter","i","map","schemaDiskUtil","resolvePath","destination","schema","shouldIncludeFileExtension","importAs","eventSignatures","signature","listenPermissionContract","emitPermissionContract","find","id","schemasByNamespace","mapEventSigsToSchemasByNamepace","schemaTemplateItemBuilder","SchemaTemplateItemBuilder","buildTemplateItems"],"mappings":"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","sourcesContent":["import { EventContract } from '@sprucelabs/mercury-types'\nimport { Schema, SchemaError, SchemaTemplateItem } from '@sprucelabs/schema'\nimport {\n\teventContractUtil,\n\tNamedEventSignature,\n} from '@sprucelabs/spruce-event-utils'\nimport {\n\tMERCURY_API_NAMESPACE,\n\tnamesUtil,\n} from '@sprucelabs/spruce-skill-utils'\nimport {\n\tEventContractTemplateItem,\n\tEventSignatureTemplateItem,\n} from '@sprucelabs/spruce-templates'\nimport schemaDiskUtil from '../features/schema/utilities/schemaDisk.utility'\nimport SchemaTemplateItemBuilder from './SchemaTemplateItemBuilder'\n\nexport default class EventTemplateItemBuilder {\n\tpublic buildTemplateItems(options: {\n\t\tcontracts: EventContract[]\n\t\tlocalNamespace?: string\n\t\teventBuilderFile?: string\n\t}): {\n\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t} {\n\t\tconst { contracts, localNamespace, eventBuilderFile } = options\n\n\t\tconst eventContractTemplateItems: EventContractTemplateItem[] = []\n\t\tconst schemaTemplateItems: SchemaTemplateItem[] = []\n\n\t\tfor (const contract of contracts) {\n\t\t\tconst {\n\t\t\t\tschemaTemplateItems: schemaItems,\n\t\t\t\teventContractTemplateItems: contractItems,\n\t\t\t} = this.buildTemplateItemsForContract(\n\t\t\t\tcontract,\n\t\t\t\tlocalNamespace,\n\t\t\t\teventBuilderFile\n\t\t\t)\n\n\t\t\teventContractTemplateItems.push(...contractItems)\n\t\t\tschemaTemplateItems.push(...schemaItems)\n\t\t}\n\n\t\teventContractTemplateItems.sort((a, b) => {\n\t\t\tif (a.nameCamel > b.nameCamel) {\n\t\t\t\treturn 1\n\t\t\t} else if (a.nameCamel < b.nameCamel) {\n\t\t\t\treturn -1\n\t\t\t}\n\n\t\t\treturn 0\n\t\t})\n\n\t\treturn { eventContractTemplateItems, schemaTemplateItems }\n\t}\n\n\tpublic buildEventTemplateItemForName(\n\t\tcontracts: EventContract[],\n\t\tfullyQualifiedEventName: string\n\t): {\n\t\tresponsePayloadSchemaTemplateItem: SchemaTemplateItem | undefined\n\t\temitPayloadSchemaTemplateItem: SchemaTemplateItem | undefined\n\t} {\n\t\tfor (const contract of contracts) {\n\t\t\tconst namedSignatures =\n\t\t\t\teventContractUtil.getNamedEventSignatures(contract)\n\n\t\t\tfor (const namedSig of namedSignatures) {\n\t\t\t\tif (namedSig.fullyQualifiedEventName === fullyQualifiedEventName) {\n\t\t\t\t\tconst schemaTemplateItems: SchemaTemplateItem[] =\n\t\t\t\t\t\tthis.mapEventSigsToSchemaTemplateItems(namedSignatures)\n\n\t\t\t\t\tconst signatureTemplateItem: EventSignatureTemplateItem =\n\t\t\t\t\t\tthis.buildEventSigTemplateItem(namedSig, schemaTemplateItems)\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\temitPayloadSchemaTemplateItem:\n\t\t\t\t\t\t\tsignatureTemplateItem.emitPayloadSchema,\n\t\t\t\t\t\tresponsePayloadSchemaTemplateItem:\n\t\t\t\t\t\t\tsignatureTemplateItem.responsePayloadSchema,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new SchemaError({\n\t\t\tcode: 'INVALID_PARAMETERS',\n\t\t\tparameters: ['fullyQualifiedEventName'],\n\t\t\tfriendlyMessages: [\n\t\t\t\t`I could not find any events that match ${fullyQualifiedEventName}.`,\n\t\t\t],\n\t\t})\n\t}\n\n\tprivate buildTemplateItemsForContract(\n\t\tcontract: EventContract,\n\t\tlocalNamespace?: string,\n\t\teventBuilderFile?: string\n\t): {\n\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t} {\n\t\tconst namedSignatures = eventContractUtil.getNamedEventSignatures(contract)\n\n\t\tconst schemaTemplateItems: SchemaTemplateItem[] =\n\t\t\tthis.mapEventSigsToSchemaTemplateItems(namedSignatures)\n\n\t\tconst eventContractTemplateItems: EventContractTemplateItem[] = []\n\n\t\tfor (const namedSig of namedSignatures) {\n\t\t\tconst item: EventContractTemplateItem =\n\t\t\t\tthis.buildTemplateItemForEventSignature(\n\t\t\t\t\tnamedSig,\n\t\t\t\t\tschemaTemplateItems,\n\t\t\t\t\tnamedSig.eventNamespace === localNamespace,\n\t\t\t\t\teventBuilderFile\n\t\t\t\t)\n\n\t\t\teventContractTemplateItems.push(item)\n\t\t}\n\n\t\treturn {\n\t\t\teventContractTemplateItems,\n\t\t\tschemaTemplateItems,\n\t\t}\n\t}\n\n\tprivate buildTemplateItemForEventSignature(\n\t\tnamedSig: NamedEventSignature,\n\t\tschemaTemplateItems: SchemaTemplateItem[],\n\t\tisLocal: boolean,\n\t\teventBuilderFile?: string\n\t) {\n\t\tconst namespacePascal = this.sigToNamespacePascal(namedSig)\n\n\t\tconst signatureTemplateItem: EventSignatureTemplateItem =\n\t\t\tthis.buildEventSigTemplateItem(namedSig, schemaTemplateItems)\n\n\t\tconst item: EventContractTemplateItem = {\n\t\t\tnameCamel: namesUtil.toCamel(namedSig.eventName),\n\t\t\tnamePascal: namesUtil.toPascal(namedSig.eventName),\n\t\t\tversion: namedSig.version ?? '***MISSING***',\n\t\t\tisLocal,\n\t\t\tnamespace: namesUtil.toKebab(\n\t\t\t\tnamedSig.eventNamespace ?? MERCURY_API_NAMESPACE\n\t\t\t),\n\t\t\tnamespaceCamel: namesUtil.toCamel(\n\t\t\t\tnamedSig.eventNamespace ?? MERCURY_API_NAMESPACE\n\t\t\t),\n\t\t\timports: [\n\t\t\t\tsignatureTemplateItem.emitPayloadSchema as SchemaTemplateItem,\n\t\t\t\tsignatureTemplateItem.responsePayloadSchema as SchemaTemplateItem,\n\t\t\t]\n\t\t\t\t.filter((i) => !!i)\n\t\t\t\t.map((item: SchemaTemplateItem) => ({\n\t\t\t\t\tpackage: schemaDiskUtil.resolvePath({\n\t\t\t\t\t\tdestination: '#spruce/schemas',\n\t\t\t\t\t\tschema: item.schema,\n\t\t\t\t\t\tshouldIncludeFileExtension: false,\n\t\t\t\t\t}),\n\t\t\t\t\timportAs: `${item.nameCamel}Schema`,\n\t\t\t\t})),\n\t\t\tnamespacePascal,\n\t\t\teventSignatures: {\n\t\t\t\t[namedSig.fullyQualifiedEventName]: signatureTemplateItem,\n\t\t\t},\n\t\t}\n\n\t\titem.imports.push({\n\t\t\timportAs: '{ buildEventContract }',\n\t\t\tpackage: eventBuilderFile ?? '@sprucelabs/mercury-types',\n\t\t})\n\n\t\tif (\n\t\t\tnamedSig.signature.listenPermissionContract ||\n\t\t\tnamedSig.signature.emitPermissionContract\n\t\t) {\n\t\t\titem.imports.push({\n\t\t\t\timportAs: '{ buildPermissionContract }',\n\t\t\t\tpackage: eventBuilderFile ?? '@sprucelabs/mercury-types',\n\t\t\t})\n\t\t}\n\n\t\treturn item\n\t}\n\n\tprivate buildEventSigTemplateItem(\n\t\tnamedSig: NamedEventSignature,\n\t\tschemaItems: SchemaTemplateItem[]\n\t) {\n\t\tconst { emitPayloadSchema, responsePayloadSchema, ...signature } =\n\t\t\tnamedSig.signature\n\n\t\tconst signatureTemplateItem: EventSignatureTemplateItem = { ...signature }\n\n\t\tif (emitPayloadSchema) {\n\t\t\tsignatureTemplateItem.emitPayloadSchema = schemaItems.find(\n\t\t\t\t(i) => i.id === emitPayloadSchema.id\n\t\t\t)\n\t\t}\n\n\t\tif (responsePayloadSchema) {\n\t\t\tsignatureTemplateItem.responsePayloadSchema = schemaItems.find(\n\t\t\t\t(i) => i.id === responsePayloadSchema.id\n\t\t\t)\n\t\t}\n\t\treturn signatureTemplateItem\n\t}\n\n\tprivate mapEventSigsToSchemaTemplateItems(\n\t\tnamedSignatures: NamedEventSignature[]\n\t) {\n\t\tconst schemasByNamespace: Record<string, Schema[]> =\n\t\t\tthis.mapEventSigsToSchemasByNamepace(namedSignatures)\n\n\t\tconst schemaTemplateItemBuilder = new SchemaTemplateItemBuilder('Cli')\n\t\tconst schemaItems: SchemaTemplateItem[] =\n\t\t\tschemaTemplateItemBuilder.buildTemplateItems(\n\t\t\t\tschemasByNamespace,\n\t\t\t\t'#spruce/events'\n\t\t\t)\n\n\t\treturn schemaItems\n\t}\n\n\tprivate mapEventSigsToSchemasByNamepace(\n\t\tnamedSignatures: NamedEventSignature[]\n\t) {\n\t\tconst schemasByNamespace: Record<string, Schema[]> = {}\n\n\t\tfor (const namedSig of namedSignatures) {\n\t\t\tconst namespacePascal = this.sigToNamespacePascal(namedSig)\n\t\t\tconst { emitPayloadSchema, responsePayloadSchema } = namedSig.signature\n\n\t\t\tif (!schemasByNamespace[namespacePascal]) {\n\t\t\t\tschemasByNamespace[namespacePascal] = []\n\t\t\t}\n\n\t\t\tif (emitPayloadSchema) {\n\t\t\t\tschemasByNamespace[namespacePascal].push({\n\t\t\t\t\tversion: namedSig.version,\n\t\t\t\t\t...emitPayloadSchema,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (responsePayloadSchema) {\n\t\t\t\tschemasByNamespace[namespacePascal].push({\n\t\t\t\t\tversion: namedSig.version,\n\t\t\t\t\t...responsePayloadSchema,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn schemasByNamespace\n\t}\n\n\tprivate sigToNamespacePascal(namedSig: NamedEventSignature) {\n\t\treturn namesUtil.toPascal(namedSig.eventNamespace ?? MERCURY_API_NAMESPACE)\n\t}\n}\n"],"file":"EventTemplateItemBuilder.js"}
|
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
]
|
|
19
19
|
},
|
|
20
20
|
"license": "MIT",
|
|
21
|
-
"version": "14.
|
|
21
|
+
"version": "14.30.2",
|
|
22
22
|
"bin": {
|
|
23
23
|
"spruce": "./build/index.js"
|
|
24
24
|
},
|
|
@@ -76,19 +76,19 @@
|
|
|
76
76
|
"@babel/plugin-proposal-decorators": "^7.16.7",
|
|
77
77
|
"@babel/runtime": "^7.16.7",
|
|
78
78
|
"@jest/reporters": "^27.4.6",
|
|
79
|
-
"@sprucelabs/error": "^5.0.
|
|
80
|
-
"@sprucelabs/heartwood-view-controllers": "^
|
|
81
|
-
"@sprucelabs/jest-json-reporter": "^6.0.
|
|
82
|
-
"@sprucelabs/mercury-client": "^19.3.
|
|
83
|
-
"@sprucelabs/mercury-event-emitter": "^19.3.
|
|
84
|
-
"@sprucelabs/mercury-types": "^26.2.
|
|
85
|
-
"@sprucelabs/schema": "^25.6.
|
|
86
|
-
"@sprucelabs/spruce-core-schemas": "^22.8.
|
|
87
|
-
"@sprucelabs/spruce-event-plugin": "^22.0.
|
|
88
|
-
"@sprucelabs/spruce-event-utils": "^17.1.
|
|
89
|
-
"@sprucelabs/spruce-skill-booter": "^22.0.
|
|
90
|
-
"@sprucelabs/spruce-skill-utils": "^22.2.
|
|
91
|
-
"@sprucelabs/spruce-templates": "^14.
|
|
79
|
+
"@sprucelabs/error": "^5.0.373",
|
|
80
|
+
"@sprucelabs/heartwood-view-controllers": "^56.3.0",
|
|
81
|
+
"@sprucelabs/jest-json-reporter": "^6.0.307",
|
|
82
|
+
"@sprucelabs/mercury-client": "^19.3.35",
|
|
83
|
+
"@sprucelabs/mercury-event-emitter": "^19.3.35",
|
|
84
|
+
"@sprucelabs/mercury-types": "^26.2.54",
|
|
85
|
+
"@sprucelabs/schema": "^25.6.55",
|
|
86
|
+
"@sprucelabs/spruce-core-schemas": "^22.8.20",
|
|
87
|
+
"@sprucelabs/spruce-event-plugin": "^22.0.26",
|
|
88
|
+
"@sprucelabs/spruce-event-utils": "^17.1.524",
|
|
89
|
+
"@sprucelabs/spruce-skill-booter": "^22.0.26",
|
|
90
|
+
"@sprucelabs/spruce-skill-utils": "^22.2.180",
|
|
91
|
+
"@sprucelabs/spruce-templates": "^14.30.2",
|
|
92
92
|
"@typescript-eslint/eslint-plugin": "^5.9.1",
|
|
93
93
|
"@typescript-eslint/parser": "^5.9.1",
|
|
94
94
|
"cfonts": "^2.10.0",
|
|
@@ -119,16 +119,16 @@
|
|
|
119
119
|
"uuid": "^8.3.2"
|
|
120
120
|
},
|
|
121
121
|
"devDependencies": {
|
|
122
|
-
"@sprucelabs/data-stores": "^7.2.
|
|
123
|
-
"@sprucelabs/jest-sheets-reporter": "^1.2.
|
|
124
|
-
"@sprucelabs/mercury-core-events": "^1.7.
|
|
125
|
-
"@sprucelabs/resolve-path-aliases": "^1.0.
|
|
126
|
-
"@sprucelabs/spruce-conversation-plugin": "^22.0.
|
|
127
|
-
"@sprucelabs/spruce-deploy-plugin": "^22.0.
|
|
128
|
-
"@sprucelabs/spruce-store-plugin": "^22.0.
|
|
129
|
-
"@sprucelabs/spruce-test-fixtures": "^22.0.
|
|
130
|
-
"@sprucelabs/test": "^7.7.
|
|
131
|
-
"@sprucelabs/test-utils": "^3.0.
|
|
122
|
+
"@sprucelabs/data-stores": "^7.2.185",
|
|
123
|
+
"@sprucelabs/jest-sheets-reporter": "^1.2.305",
|
|
124
|
+
"@sprucelabs/mercury-core-events": "^1.7.111",
|
|
125
|
+
"@sprucelabs/resolve-path-aliases": "^1.0.252",
|
|
126
|
+
"@sprucelabs/spruce-conversation-plugin": "^22.0.26",
|
|
127
|
+
"@sprucelabs/spruce-deploy-plugin": "^22.0.26",
|
|
128
|
+
"@sprucelabs/spruce-store-plugin": "^22.0.26",
|
|
129
|
+
"@sprucelabs/spruce-test-fixtures": "^22.0.26",
|
|
130
|
+
"@sprucelabs/test": "^7.7.273",
|
|
131
|
+
"@sprucelabs/test-utils": "^3.0.375",
|
|
132
132
|
"@types/blessed": "^0.1.19",
|
|
133
133
|
"@types/eslint": "^8.2.2",
|
|
134
134
|
"@types/fs-extra": "^9.0.13",
|
|
@@ -151,9 +151,9 @@
|
|
|
151
151
|
"chokidar-cli": "^3.0.0",
|
|
152
152
|
"concurrently": "^7.0.0",
|
|
153
153
|
"conventional-changelog-sprucelabs": "^1.1.2",
|
|
154
|
-
"dotenv": "^
|
|
154
|
+
"dotenv": "^12.0.3",
|
|
155
155
|
"eslint": "^8.6.0",
|
|
156
|
-
"eslint-config-spruce": "^10.11.
|
|
156
|
+
"eslint-config-spruce": "^10.11.1",
|
|
157
157
|
"find-process": "^1.4.7",
|
|
158
158
|
"jest": "^27.4.7",
|
|
159
159
|
"jest-circus": "^27.4.6",
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
"prettier": "^2.5.1",
|
|
163
163
|
"ps-node": "^0.1.6",
|
|
164
164
|
"rimraf": "^3.0.2",
|
|
165
|
-
"ts-jest": "^27.1.
|
|
165
|
+
"ts-jest": "^27.1.3",
|
|
166
166
|
"ts-node": "^10.4.0",
|
|
167
167
|
"tsc-watch": "^4.6.0",
|
|
168
168
|
"tsconfig-paths": "^3.12.0",
|
|
@@ -597,5 +597,5 @@
|
|
|
597
597
|
"ora"
|
|
598
598
|
]
|
|
599
599
|
},
|
|
600
|
-
"gitHead": "
|
|
600
|
+
"gitHead": "2ba5ec803cdcda78f530cdc1646ba2760d3dd28f"
|
|
601
601
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { test, assert } from '@sprucelabs/test'
|
|
2
|
+
import AbstractSkillTest from '../../tests/AbstractSkillTest'
|
|
3
|
+
|
|
4
|
+
export default class ListeningToCoreEventsTest extends AbstractSkillTest {
|
|
5
|
+
protected static skillCacheKey = 'events'
|
|
6
|
+
|
|
7
|
+
@test()
|
|
8
|
+
protected static async canListenToDidInstallWithoutErroring() {
|
|
9
|
+
const results = await this.Action('event', 'listen').execute({
|
|
10
|
+
eventName: 'did-install',
|
|
11
|
+
namespace: 'mercury',
|
|
12
|
+
version: 'v2020_12_25',
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
assert.isFalsy(results.errors?.[0])
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@test()
|
|
19
|
+
protected static async canBootASkillWithACoreListener() {
|
|
20
|
+
await this.getSkillFixture().registerCurrentSkill({
|
|
21
|
+
name: 'global listen test',
|
|
22
|
+
})
|
|
23
|
+
const response = await this.Action('skill', 'boot').execute({ local: true })
|
|
24
|
+
assert.isFalsy(response.errors)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import pathUtil from 'path'
|
|
2
|
+
import { diskUtil, versionUtil } from '@sprucelabs/spruce-skill-utils'
|
|
3
|
+
import { test, assert } from '@sprucelabs/test'
|
|
4
|
+
import AbstractCliTest from '../../tests/AbstractCliTest'
|
|
5
|
+
import testUtil from '../../tests/utilities/test.utility'
|
|
6
|
+
|
|
7
|
+
export default class UpgradingWithSandboxFeatureInstalledTest extends AbstractCliTest {
|
|
8
|
+
protected static async beforeEach() {
|
|
9
|
+
await super.beforeEach()
|
|
10
|
+
await this.FeatureFixture().installCachedFeatures('sandbox')
|
|
11
|
+
await this.listenToDidInstallInthePast()
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@test()
|
|
15
|
+
protected static async doesNotAskForVersionWhenSettingUpSandboxWithCoreListener() {
|
|
16
|
+
await this.setup()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@test()
|
|
20
|
+
protected static async usesTodaysVersionEvenWithCoreListene() {
|
|
21
|
+
const match = await this.setupAndGetListenerPath()
|
|
22
|
+
|
|
23
|
+
const fileName = pathUtil.basename(match)
|
|
24
|
+
const expected = `will-boot.${
|
|
25
|
+
versionUtil.generateVersion().dirValue
|
|
26
|
+
}.listener.ts`
|
|
27
|
+
assert.isEqual(fileName, expected)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@test()
|
|
31
|
+
protected static async overwritesExistingWillBoot() {
|
|
32
|
+
const expected = `will-boot.v2010_01_10.listener.ts`
|
|
33
|
+
|
|
34
|
+
const match = await this.setupAndGetListenerPath()
|
|
35
|
+
|
|
36
|
+
diskUtil.deleteFile(match)
|
|
37
|
+
diskUtil.writeFile(
|
|
38
|
+
this.resolvePath(pathUtil.dirname(match), expected),
|
|
39
|
+
'export default async () => {}'
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
const syncResults = await this.Action('event', 'syncListeners').execute({})
|
|
43
|
+
assert.isFalsy(syncResults.errors)
|
|
44
|
+
|
|
45
|
+
const secondMatch = await this.setupAndGetListenerPath()
|
|
46
|
+
const name = pathUtil.basename(secondMatch)
|
|
47
|
+
|
|
48
|
+
assert.isEqual(name, expected)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private static async setupAndGetListenerPath() {
|
|
52
|
+
const results = await this.setup()
|
|
53
|
+
const match = testUtil.assertFileByNameInGeneratedFiles(
|
|
54
|
+
/will-boot/gi,
|
|
55
|
+
results.files
|
|
56
|
+
)
|
|
57
|
+
return match
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private static async setup() {
|
|
61
|
+
const results = await this.Action('sandbox', 'setup').execute({})
|
|
62
|
+
assert.isFalsy(results.errors)
|
|
63
|
+
return results
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private static async listenToDidInstallInthePast() {
|
|
67
|
+
const results = await this.Action('event', 'listen').execute({
|
|
68
|
+
namespace: 'mercury',
|
|
69
|
+
eventName: 'did-install::v2020_12_25',
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
assert.isFalsy(results.errors)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -187,7 +187,7 @@ export default class CreatingANewSchemaBuilderTest extends AbstractSchemaTest {
|
|
|
187
187
|
await createPromise
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
// should only have 2 options, none of which
|
|
190
|
+
// should only have 2 options, none of which are "new version" since that was created in secondAnswers
|
|
191
191
|
private static async assertAnswersSecondTime(
|
|
192
192
|
action: FeatureAction,
|
|
193
193
|
newVersion: { intValue: number; constValue: string; dirValue: string }
|
|
@@ -23,6 +23,8 @@ import AbstractAction from '../../AbstractAction'
|
|
|
23
23
|
import { FeatureActionResponse } from '../../features.types'
|
|
24
24
|
|
|
25
25
|
const SKILL_EVENT_NAMESPACE = 'skill'
|
|
26
|
+
const CORE_EVENT_NAMESPACE = 'mercury'
|
|
27
|
+
|
|
26
28
|
type OptionsSchema =
|
|
27
29
|
SpruceSchemas.SpruceCli.v2020_07_22.ListenEventOptionsSchema
|
|
28
30
|
export default class ListenAction extends AbstractAction<OptionsSchema> {
|
|
@@ -44,28 +46,11 @@ export default class ListenAction extends AbstractAction<OptionsSchema> {
|
|
|
44
46
|
eventName,
|
|
45
47
|
namespace,
|
|
46
48
|
schemaTypesLookupDir,
|
|
47
|
-
contractDestinationDir,
|
|
48
49
|
} = normalizedOptions
|
|
49
50
|
|
|
50
51
|
this.ui.startLoading('Loading event contracts...')
|
|
51
52
|
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
const skill = await this.Store('skill').loadCurrentSkill()
|
|
55
|
-
|
|
56
|
-
const namespacesForFetch =
|
|
57
|
-
namespace && namespace !== 'skill' ? [namespace] : undefined
|
|
58
|
-
|
|
59
|
-
const { contracts } = skill.slug
|
|
60
|
-
? await eventStore.fetchEventContracts({
|
|
61
|
-
localNamespace: skill.slug,
|
|
62
|
-
namespaces: namespacesForFetch,
|
|
63
|
-
didUpdateHandler: (msg: string) => this.ui.startLoading(msg),
|
|
64
|
-
})
|
|
65
|
-
: await eventStore.fetchEventContracts({
|
|
66
|
-
namespaces: namespacesForFetch,
|
|
67
|
-
didUpdateHandler: (msg: string) => this.ui.startLoading(msg),
|
|
68
|
-
})
|
|
53
|
+
const contracts = await this.fetchEventContracts(namespace)
|
|
69
54
|
|
|
70
55
|
this.ui.stopLoading()
|
|
71
56
|
|
|
@@ -90,6 +75,11 @@ export default class ListenAction extends AbstractAction<OptionsSchema> {
|
|
|
90
75
|
eventName = await this.collectEvent(contracts, namespace)
|
|
91
76
|
}
|
|
92
77
|
|
|
78
|
+
const isCoreEvent = namespace === CORE_EVENT_NAMESPACE
|
|
79
|
+
if (isCoreEvent) {
|
|
80
|
+
namespace = undefined
|
|
81
|
+
}
|
|
82
|
+
|
|
93
83
|
const fqen = eventNameUtil.join({
|
|
94
84
|
eventName,
|
|
95
85
|
eventNamespace: namespace,
|
|
@@ -98,22 +88,13 @@ export default class ListenAction extends AbstractAction<OptionsSchema> {
|
|
|
98
88
|
|
|
99
89
|
let { version } = eventNameUtil.split(fqen)
|
|
100
90
|
|
|
101
|
-
|
|
102
|
-
|
|
91
|
+
this.assertIsValidChoice(
|
|
92
|
+
eventChoicesByNamespace,
|
|
93
|
+
namespace ?? 'mercury',
|
|
94
|
+
eventName,
|
|
95
|
+
fqen
|
|
103
96
|
)
|
|
104
97
|
|
|
105
|
-
if (!isValidEvent) {
|
|
106
|
-
throw new SchemaError({
|
|
107
|
-
code: 'INVALID_PARAMETERS',
|
|
108
|
-
friendlyMessage: `${eventName} is not a valid event . Try: \n\n${eventChoicesByNamespace[
|
|
109
|
-
namespace
|
|
110
|
-
]
|
|
111
|
-
.map((i) => i.value)
|
|
112
|
-
.join('\n')}`,
|
|
113
|
-
parameters: ['eventName'],
|
|
114
|
-
})
|
|
115
|
-
}
|
|
116
|
-
|
|
117
98
|
const resolvedDestination = diskUtil.resolvePath(
|
|
118
99
|
this.cwd,
|
|
119
100
|
listenerDestinationDir
|
|
@@ -124,11 +105,6 @@ export default class ListenAction extends AbstractAction<OptionsSchema> {
|
|
|
124
105
|
resolvedDestination
|
|
125
106
|
)
|
|
126
107
|
|
|
127
|
-
const resolvedSchemaTypesLookupDir = diskUtil.resolvePath(
|
|
128
|
-
this.cwd,
|
|
129
|
-
schemaTypesLookupDir
|
|
130
|
-
)
|
|
131
|
-
|
|
132
108
|
const isSkillEvent = namespace !== SKILL_EVENT_NAMESPACE
|
|
133
109
|
|
|
134
110
|
let emitPayloadSchemaTemplateItem: SchemaTemplateItem | undefined
|
|
@@ -139,7 +115,7 @@ export default class ListenAction extends AbstractAction<OptionsSchema> {
|
|
|
139
115
|
const templateItems = builder.buildEventTemplateItemForName(
|
|
140
116
|
contracts,
|
|
141
117
|
eventNameUtil.join({
|
|
142
|
-
eventNamespace: namespace,
|
|
118
|
+
eventNamespace: !isCoreEvent ? namespace : undefined,
|
|
143
119
|
eventName,
|
|
144
120
|
version: resolvedVersion,
|
|
145
121
|
})
|
|
@@ -151,21 +127,14 @@ export default class ListenAction extends AbstractAction<OptionsSchema> {
|
|
|
151
127
|
templateItems.responsePayloadSchemaTemplateItem
|
|
152
128
|
}
|
|
153
129
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
130
|
+
response.files = await this.writeListener({
|
|
131
|
+
schemaTypesLookupDir,
|
|
132
|
+
resolvedDestination,
|
|
157
133
|
version: resolvedVersion,
|
|
158
134
|
eventName,
|
|
159
|
-
|
|
160
|
-
fullyQualifiedEventName: eventNameUtil.join({
|
|
161
|
-
eventName,
|
|
162
|
-
eventNamespace: namespace,
|
|
163
|
-
version: resolvedVersion,
|
|
164
|
-
}),
|
|
135
|
+
namespace,
|
|
165
136
|
emitPayloadSchemaTemplateItem,
|
|
166
|
-
contractDestinationDir,
|
|
167
137
|
responsePayloadSchemaTemplateItem,
|
|
168
|
-
schemaTypesLookupDir: resolvedSchemaTypesLookupDir,
|
|
169
138
|
})
|
|
170
139
|
|
|
171
140
|
const syncResults = await this.syncListeners()
|
|
@@ -173,15 +142,7 @@ export default class ListenAction extends AbstractAction<OptionsSchema> {
|
|
|
173
142
|
response = actionUtil.mergeActionResults(syncResults, response)
|
|
174
143
|
|
|
175
144
|
if (isSkillEvent) {
|
|
176
|
-
const
|
|
177
|
-
syncEventActionSchema,
|
|
178
|
-
options
|
|
179
|
-
)
|
|
180
|
-
|
|
181
|
-
const syncResults = await this.Action('event', 'sync').execute(
|
|
182
|
-
syncOptions
|
|
183
|
-
)
|
|
184
|
-
|
|
145
|
+
const syncResults = await this.syncEvents(options)
|
|
185
146
|
response = actionUtil.mergeActionResults(syncResults, response)
|
|
186
147
|
}
|
|
187
148
|
|
|
@@ -193,6 +154,98 @@ export default class ListenAction extends AbstractAction<OptionsSchema> {
|
|
|
193
154
|
}
|
|
194
155
|
}
|
|
195
156
|
|
|
157
|
+
private async fetchEventContracts(namespace?: string) {
|
|
158
|
+
const eventStore = this.Store('event')
|
|
159
|
+
const skill = await this.Store('skill').loadCurrentSkill()
|
|
160
|
+
|
|
161
|
+
const namespacesForFetch =
|
|
162
|
+
namespace &&
|
|
163
|
+
namespace !== SKILL_EVENT_NAMESPACE &&
|
|
164
|
+
namespace !== CORE_EVENT_NAMESPACE
|
|
165
|
+
? [namespace]
|
|
166
|
+
: undefined
|
|
167
|
+
|
|
168
|
+
const { contracts } = skill.slug
|
|
169
|
+
? await eventStore.fetchEventContracts({
|
|
170
|
+
localNamespace: skill.slug,
|
|
171
|
+
namespaces: namespacesForFetch,
|
|
172
|
+
didUpdateHandler: (msg: string) => this.ui.startLoading(msg),
|
|
173
|
+
})
|
|
174
|
+
: await eventStore.fetchEventContracts({
|
|
175
|
+
namespaces: namespacesForFetch,
|
|
176
|
+
didUpdateHandler: (msg: string) => this.ui.startLoading(msg),
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
return contracts
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
private async syncEvents(
|
|
183
|
+
options: SpruceSchemas.SpruceCli.v2020_07_22.ListenEventOptions
|
|
184
|
+
) {
|
|
185
|
+
const syncOptions = normalizeSchemaValues(syncEventActionSchema, options)
|
|
186
|
+
|
|
187
|
+
const syncResults = await this.Action('event', 'sync').execute(syncOptions)
|
|
188
|
+
return syncResults
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
private async writeListener(options: {
|
|
192
|
+
resolvedDestination: string
|
|
193
|
+
schemaTypesLookupDir: string
|
|
194
|
+
namespace?: string | undefined
|
|
195
|
+
eventName: string
|
|
196
|
+
emitPayloadSchemaTemplateItem: SchemaTemplateItem | undefined
|
|
197
|
+
version: string
|
|
198
|
+
responsePayloadSchemaTemplateItem: SchemaTemplateItem | undefined
|
|
199
|
+
}) {
|
|
200
|
+
const {
|
|
201
|
+
resolvedDestination,
|
|
202
|
+
schemaTypesLookupDir,
|
|
203
|
+
namespace,
|
|
204
|
+
eventName,
|
|
205
|
+
version,
|
|
206
|
+
} = options
|
|
207
|
+
|
|
208
|
+
const resolvedSchemaTypesLookupDir = diskUtil.resolvePath(
|
|
209
|
+
this.cwd,
|
|
210
|
+
schemaTypesLookupDir
|
|
211
|
+
)
|
|
212
|
+
const writer = this.Writer('event')
|
|
213
|
+
const files = await writer.writeListener(resolvedDestination, {
|
|
214
|
+
...options,
|
|
215
|
+
fullyQualifiedEventName: eventNameUtil.join({
|
|
216
|
+
eventName,
|
|
217
|
+
eventNamespace: namespace,
|
|
218
|
+
version,
|
|
219
|
+
}),
|
|
220
|
+
schemaTypesLookupDir: resolvedSchemaTypesLookupDir,
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
return files
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
private assertIsValidChoice(
|
|
227
|
+
eventChoicesByNamespace: Record<string, SelectChoice[]>,
|
|
228
|
+
namespace: string,
|
|
229
|
+
eventName: string | undefined,
|
|
230
|
+
fqen: string
|
|
231
|
+
) {
|
|
232
|
+
const isValidEvent = !!eventChoicesByNamespace[namespace].find(
|
|
233
|
+
(e) => e.value === eventName || e.value === fqen
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
if (!isValidEvent) {
|
|
237
|
+
throw new SchemaError({
|
|
238
|
+
code: 'INVALID_PARAMETERS',
|
|
239
|
+
friendlyMessage: `${eventName} is not a valid event . Try: \n\n${eventChoicesByNamespace[
|
|
240
|
+
namespace
|
|
241
|
+
]
|
|
242
|
+
.map((i) => i.value)
|
|
243
|
+
.join('\n')}`,
|
|
244
|
+
parameters: ['eventName'],
|
|
245
|
+
})
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
196
249
|
private async syncListeners() {
|
|
197
250
|
return this.Action('event', 'sync.listeners').execute({})
|
|
198
251
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import pathUtil from 'path'
|
|
2
2
|
import { SchemaTemplateItem } from '@sprucelabs/schema'
|
|
3
|
-
import { eventDiskUtil } from '@sprucelabs/spruce-event-utils'
|
|
3
|
+
import { eventDiskUtil, eventNameUtil } from '@sprucelabs/spruce-event-utils'
|
|
4
4
|
import {
|
|
5
5
|
diskUtil,
|
|
6
|
-
namesUtil,
|
|
7
6
|
DEFAULT_SCHEMA_TYPES_FILENAME,
|
|
8
7
|
} from '@sprucelabs/spruce-skill-utils'
|
|
9
8
|
import {
|
|
@@ -129,53 +128,33 @@ export default class EventWriter extends AbstractWriter {
|
|
|
129
128
|
|
|
130
129
|
public async writeListener(
|
|
131
130
|
destinationDir: string,
|
|
132
|
-
options: Omit<
|
|
133
|
-
EventListenerOptions,
|
|
134
|
-
'nameConst' | 'schemaTypesFile' | 'contractsFile'
|
|
135
|
-
> & {
|
|
136
|
-
version: string
|
|
131
|
+
options: Omit<EventListenerOptions, 'schemaTypesFile'> & {
|
|
137
132
|
schemaTypesLookupDir: string
|
|
138
|
-
contractDestinationDir: string
|
|
139
133
|
}
|
|
140
134
|
) {
|
|
141
|
-
const {
|
|
142
|
-
eventName,
|
|
143
|
-
eventNamespace,
|
|
144
|
-
version,
|
|
145
|
-
schemaTypesLookupDir,
|
|
146
|
-
contractDestinationDir,
|
|
147
|
-
} = options
|
|
135
|
+
const { schemaTypesLookupDir, fullyQualifiedEventName } = options
|
|
148
136
|
|
|
137
|
+
const event = eventNameUtil.split(fullyQualifiedEventName)
|
|
149
138
|
const resolvedDestination = eventDiskUtil.resolveListenerPath(
|
|
150
139
|
destinationDir,
|
|
151
|
-
|
|
152
|
-
eventName,
|
|
153
|
-
eventNamespace,
|
|
154
|
-
version,
|
|
155
|
-
}
|
|
140
|
+
event as any
|
|
156
141
|
)
|
|
157
142
|
|
|
158
|
-
const relativeTypesFile = this.resolveSchemaTypesFile(
|
|
143
|
+
const relativeTypesFile = this.resolveSchemaTypesFile({
|
|
144
|
+
namespace: event.eventNamespace,
|
|
159
145
|
schemaTypesLookupDir,
|
|
160
|
-
resolvedDestination
|
|
161
|
-
)
|
|
162
|
-
|
|
163
|
-
const contractsFile = pathUtil.join(
|
|
164
|
-
contractDestinationDir,
|
|
165
|
-
CONTRACT_FILE_NAME.replace('.ts', '')
|
|
166
|
-
)
|
|
146
|
+
resolvedDestination,
|
|
147
|
+
})
|
|
167
148
|
|
|
168
149
|
const listenerContents = this.templates.listener({
|
|
169
150
|
...options,
|
|
170
|
-
nameConst: namesUtil.toConst(`${eventNamespace}_${eventName}`),
|
|
171
151
|
schemaTypesFile: relativeTypesFile,
|
|
172
|
-
contractsFile,
|
|
173
152
|
})
|
|
174
153
|
|
|
175
154
|
const results = await this.writeFileIfChangedMixinResults(
|
|
176
155
|
resolvedDestination,
|
|
177
156
|
listenerContents,
|
|
178
|
-
`Listener for ${
|
|
157
|
+
`Listener for ${fullyQualifiedEventName}.`
|
|
179
158
|
)
|
|
180
159
|
|
|
181
160
|
await this.lint(resolvedDestination)
|
|
@@ -195,7 +174,7 @@ export default class EventWriter extends AbstractWriter {
|
|
|
195
174
|
const results = await this.writeFileIfChangedMixinResults(
|
|
196
175
|
destination,
|
|
197
176
|
contents,
|
|
198
|
-
'
|
|
177
|
+
'All your listeners imported to one place for your skill to use when booting!'
|
|
199
178
|
)
|
|
200
179
|
|
|
201
180
|
return results
|
|
@@ -306,10 +285,17 @@ export default class EventWriter extends AbstractWriter {
|
|
|
306
285
|
return files
|
|
307
286
|
}
|
|
308
287
|
|
|
309
|
-
private resolveSchemaTypesFile(
|
|
310
|
-
|
|
288
|
+
private resolveSchemaTypesFile(options: {
|
|
289
|
+
namespace?: string
|
|
290
|
+
schemaTypesLookupDir: string
|
|
311
291
|
resolvedDestination: string
|
|
312
|
-
) {
|
|
292
|
+
}) {
|
|
293
|
+
const { schemaTypesLookupDir, resolvedDestination, namespace } = options
|
|
294
|
+
|
|
295
|
+
if (!namespace) {
|
|
296
|
+
return '@sprucelabs/mercury-types'
|
|
297
|
+
}
|
|
298
|
+
|
|
313
299
|
const schemaTypesFile = pathUtil.join(
|
|
314
300
|
schemaTypesLookupDir,
|
|
315
301
|
DEFAULT_SCHEMA_TYPES_FILENAME
|
|
@@ -26,7 +26,7 @@ export default class SandboxFeature extends AbstractFeature {
|
|
|
26
26
|
public constructor(options: ActionOptions) {
|
|
27
27
|
super(options)
|
|
28
28
|
|
|
29
|
-
void this.emitter.on('feature.
|
|
29
|
+
void this.emitter.on('feature.will-execute', async (payload) => {
|
|
30
30
|
const isSkillInstalled = await this.featureInstaller.isInstalled(
|
|
31
31
|
'sandbox'
|
|
32
32
|
)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { buildSchema } from '@sprucelabs/schema'
|
|
2
|
+
import { versionUtil } from '@sprucelabs/spruce-skill-utils'
|
|
2
3
|
import setupVscodeSchema from '#spruce/schemas/spruceCli/v2020_07_22/setupVscodeOptions.schema'
|
|
3
4
|
import AbstractAction from '../../AbstractAction'
|
|
4
5
|
import { FeatureActionResponse } from '../../features.types'
|
|
@@ -16,10 +17,15 @@ export default class SetupAction extends AbstractAction<OptionsSchema> {
|
|
|
16
17
|
public invocationMessage = 'Setting up sandbox support... 🏝'
|
|
17
18
|
|
|
18
19
|
public async execute(): Promise<FeatureActionResponse> {
|
|
20
|
+
const listeners = this.Store('listener')
|
|
21
|
+
const existing = await listeners.loadListeners()
|
|
22
|
+
const version = existing.find((e) => e.eventNamespace === 'skill')?.version
|
|
23
|
+
|
|
19
24
|
const createListenerAction = this.Action('event', 'listen')
|
|
20
25
|
const results = await createListenerAction.execute({
|
|
21
26
|
namespace: 'skill',
|
|
22
27
|
eventName: 'will-boot',
|
|
28
|
+
version: version ?? versionUtil.generateVersion().dirValue,
|
|
23
29
|
})
|
|
24
30
|
|
|
25
31
|
if (results.errors) {
|
|
@@ -42,7 +42,7 @@ export default class SkillFeature<
|
|
|
42
42
|
{ name: '@sprucelabs/spruce-event-utils' },
|
|
43
43
|
{ name: '@sprucelabs/spruce-event-plugin' },
|
|
44
44
|
{ name: '@sprucelabs/spruce-core-schemas' },
|
|
45
|
-
{ name: 'dotenv' },
|
|
45
|
+
{ name: 'dotenv', version: '11.0.0' },
|
|
46
46
|
{ name: 'globby', version: '^11.0.4' },
|
|
47
47
|
{
|
|
48
48
|
name: '@sprucelabs/mercury-types',
|