31 lines
1.0 KiB
JavaScript
31 lines
1.0 KiB
JavaScript
import { createResource } from "../../domain/models/resource.js";
|
|
|
|
/** @param {unknown} value */
|
|
export function mapResourceDto(value) {
|
|
if (!value || typeof value !== "object") {
|
|
throw new TypeError("Validated resource DTO is required");
|
|
}
|
|
const dto = /** @type {Record<string, unknown>} */ (value);
|
|
if (typeof dto.id !== "string" || typeof dto.name !== "string") {
|
|
throw new TypeError("Validated resource DTO invariants were breached");
|
|
}
|
|
|
|
return createResource({
|
|
id: dto.id,
|
|
displayName: dto.name,
|
|
createdAt: typeof dto.createdAt === "string" ? dto.createdAt : null,
|
|
});
|
|
}
|
|
|
|
/** @param {string} operationId @param {unknown} payload */
|
|
export function mapOperationPayload(operationId, payload) {
|
|
if (operationId === "LIST_SAMPLE_RESOURCES") {
|
|
if (!Array.isArray(payload)) throw new TypeError("Expected a resource list");
|
|
return payload.map(mapResourceDto);
|
|
}
|
|
if (operationId === "CREATE_SAMPLE_RESOURCE") {
|
|
return mapResourceDto(payload);
|
|
}
|
|
throw new TypeError(`No boundary mapper registered for ${operationId}`);
|
|
}
|