UNPKG

@tanstack/charts

Version:

A chart grammar for TypeScript and JavaScript. Marks consume your data directly, channels describe visual encodings, and the engine compiles them into a renderer-neutral keyed scene. TanStack's compact scales cover common numeric and categorical mappings.

52 lines (51 loc) 1.72 kB
import { toArray, transformValues } from "./transform-internal.js"; function resolveNetworkGraph(nodeSource, linkSource, options, owner) { const nodes = toArray(nodeSource); const links = toArray(linkSource); const nodeKeys = transformValues(nodes, options.nodeKey); const sourceKeys = transformValues(links, options.source); const targetKeys = transformValues(links, options.target); const nodeIndexes = /* @__PURE__ */ new Map(); nodeKeys.forEach((key, index) => { assertNetworkKey(key, `nodeKey at index ${index}`, owner); if (nodeIndexes.has(key)) { throw new TypeError( `${owner}: duplicate node key ${formatNetworkKey(key)}` ); } nodeIndexes.set(key, index); }); sourceKeys.forEach((key, index) => { assertNetworkEndpoint(key, index, "source", nodeIndexes, owner); }); targetKeys.forEach((key, index) => { assertNetworkEndpoint(key, index, "target", nodeIndexes, owner); }); return { nodes, links, nodeKeys, sourceKeys, targetKeys, nodeIndexes }; } function assertNetworkEndpoint(key, index, endpoint, nodeIndexes, owner) { assertNetworkKey(key, `${endpoint} at link index ${index}`, owner); if (!nodeIndexes.has(key)) { throw new TypeError( `${owner}: ${endpoint} at link index ${index} does not match a node key: ${formatNetworkKey(key)}` ); } } function assertNetworkKey(value, name, owner) { if (typeof value !== "string" && !(typeof value === "number" && Number.isFinite(value))) { throw new TypeError(`${owner}: ${name} must be a string or finite number`); } } function formatNetworkKey(key) { return `${typeof key}:${JSON.stringify(key)}`; } export { resolveNetworkGraph };