@eang/core
Version:
eang - model driven enterprise event processing
80 lines • 2.64 kB
JavaScript
import { Cnx, EangEventEnum } from './entity.js';
import { createObjFromTypeOf } from './objects.js';
export function parseMsg(msg) {
const headers = msg.headers;
const subject = msg.subject;
// TODO: handle content-type... default is JSON and does not require header
// const hdrs = headers()
// hdrs.append('Content-Type', opts.contentType || 'application/json')
const { obj, cnx, context } = JSON.parse(Buffer.from(msg.data).toString());
if (!obj && !cnx) {
throw new Error('Invalid message format: missing obj or cnx');
}
if (obj && cnx) {
throw new Error('Invalid message format: both obj and cnx are present');
}
const subjectData = parseSubjectData(subject);
// Validate eventType
const validEventTypes = Object.values(EangEventEnum);
if (!validEventTypes.includes(subjectData.eventType)) {
throw new Error(`Invalid eventType: ${subjectData.eventType}`);
}
const entity = obj ? createObjFromTypeOf(obj) : new Cnx(cnx);
const eventType = subjectData.eventType;
const { tenant, organizationalUnit, user } = subjectData;
return {
msg,
subjectData,
entity,
eventType,
context,
tenant,
organizationalUnit,
user
};
}
export function parseSubjectData(subject) {
const parts = subject.split('.');
if (parts[1] === 'obj') {
return {
entityType: parts[1], // obj
tenant: parts[2],
organizationalUnit: parts[3],
user: parts[4],
typeOf: parts[5],
instanceOf: parts[6],
key: parts[7],
eventType: parts[8]
};
} //if (parts[1] === 'cnx') {
else
return {
entityType: 'cnx',
tenant: parts[2],
organizationalUnit: parts[3],
user: parts[4],
typeOf: parts[5],
instanceOf: parts[6],
key: parts[7],
eventType: parts[8],
fromObjTypeOf: parts[9],
fromObjInstanceOf: parts[10],
fromObjKey: parts[11],
toObjTypeOf: parts[12],
toObjInstanceOf: parts[13],
toObjKey: parts[14]
};
}
// export function getEangMsgFromEvents(
// events: EntityEvent[],
// tenant: string,
// organizationalUnit: string,
// user: string,
// options?: Partial<JetStreamPublishOptions>
// ) {
// const messages = events.map((event) => {
// return getEangMsgFromEvent(event, tenant, organizationalUnit, user, options)
// })
// return messages
// }
//# sourceMappingURL=functions.js.map