@sprucelabs/spruce-event-utils
Version:
Some helpful utilities to speed up working with Mercury! 🚅
53 lines (52 loc) • 1.89 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const spruce_skill_utils_1 = require("@sprucelabs/spruce-skill-utils");
const eventSource_schema_1 = __importDefault(require("./../.spruce/schemas/spruceEventUtils/v2021_09_13/eventSource.schema"));
function buildEmitTargetAndPayloadSchema(options) {
const { eventName, payloadSchema: emitPayloadSchema, targetSchema, } = options;
const targetField = {
type: 'schema',
isRequired: hasAnyRequiredFields(targetSchema),
options: {
schema: targetSchema,
},
};
const schema = {
id: `${spruce_skill_utils_1.namesUtil.toCamel(eventName)}EmitTargetAndPayload`,
fields: {
source: {
type: 'schema',
label: 'Source',
options: {
schema: eventSource_schema_1.default,
},
},
},
};
const hasTargetFields = targetSchema && Object.keys(targetSchema.fields ?? {}).length > 0;
if (hasTargetFields) {
//@ts-ignore
schema.fields.target = targetField;
}
const hasPayloadFields = emitPayloadSchema &&
Object.keys(emitPayloadSchema.fields ?? {}).length > 0;
if (hasPayloadFields) {
const isRequired = hasAnyRequiredFields(emitPayloadSchema);
//@ts-ignore
schema.fields.payload = {
type: 'schema',
isRequired,
options: {
schema: emitPayloadSchema,
},
};
}
return schema;
}
exports.default = buildEmitTargetAndPayloadSchema;
function hasAnyRequiredFields(schema) {
return !!Object.keys(schema?.fields ?? {}).find((f) => schema?.fields?.[f].isRequired);
}