integreat
Version:
Node.js integration layer
59 lines • 1.94 kB
JavaScript
import { nanoid } from 'nanoid';
import { createErrorResponse, setOrigin } from './response.js';
export function createAction(type, payload = {}, meta = {}) {
if (!type) {
return null;
}
return { type, payload, meta };
}
export function setDataOnActionPayload(action, data) {
return {
...action,
payload: { ...action.payload, data },
};
}
export function setResponseOnAction(action, response) {
return { ...action, response: response || {} };
}
export function setMetaOnAction(action, { queue, queuedAt, id, ...meta }) {
return {
...action,
meta: {
...meta,
...((action.meta?.queue ?? queue) ? { queue: true } : {}),
},
};
}
export function removeQueueFlag({ meta: { queue, ...meta } = {}, ...action }) {
return { ...action, meta };
}
export function setOptionsOnAction(action, endpoint) {
return {
...action,
meta: { ...action.meta, options: endpoint?.options.transporter || {} },
};
}
export function setErrorOnAction(action, error, origin, status = 'error') {
return setResponseOnAction(action, {
...action.response,
...createErrorResponse(error, origin, status),
});
}
export const setOriginOnAction = (action, origin, doPrefix = false) => typeof action.response?.status === 'string' ||
typeof action.response?.error === 'string'
? { ...action, response: setOrigin(action.response, origin, doPrefix) }
: action;
const hasIdAndCid = (action) => action.meta?.id && action.meta.cid;
export function setActionIds(action) {
if (!hasIdAndCid(action)) {
const id = action.meta?.id ?? nanoid();
const cid = action.meta?.cid ?? id;
return { ...action, meta: { ...action.meta, id, cid } };
}
return action;
}
export const createMetaForSubAction = ({ id, ...meta } = {}) => ({
...meta,
gid: id,
});
//# sourceMappingURL=action.js.map