Exact source used by this build. SHA-256: 814d547ac5a9e1afda64b04bc88558a6761142a28d6721d311365165fd8cae99.

1 import json from "../../../data/shipping/bins.json";
2 import { ShippingBinSchema } from "./schema";
3 import { AREA_MAPS, isMapBlocked } from "../maps";
4 import type { ContentDomain } from "../types";
5 export * from "./schema";
6 export const SHIPPING_BINS = ShippingBinSchema.array().parse(json);
7 export function validateShippingBins(value: unknown): void {
8   const bins = ShippingBinSchema.array().parse(value);
9   if (new Set(bins.map((bin) => bin.id)).size !== bins.length) throw new Error("Shipping bin ids must be unique");
10   for (const bin of bins) {
11     const area = AREA_MAPS[bin.areaId];
12     if (!area) throw new Error(`Shipping bin ${bin.id} references missing area ${bin.areaId}`);
13     if (bin.x >= area.width || bin.y >= area.height || isMapBlocked(area, bin.x, bin.y)) throw new Error(`Shipping bin ${bin.id} must be on an accessible tile`);
14     if (area.warps.some((warp) => bin.x >= warp.x && bin.x < warp.x + warp.width && bin.y >= warp.y && bin.y < warp.y + warp.height)) throw new Error(`Shipping bin ${bin.id} overlaps a warp`);
15   }
16 }
17 export const shippingDomain: ContentDomain = { id: "shipping", data: SHIPPING_BINS, validate() { validateShippingBins(json); } };
18 shippingDomain.validate();
19