mirror of
https://github.com/litruv/picoGraph.git
synced 2026-07-24 02:36:04 +10:00
47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
/**
|
|
* Generates a lightweight unique identifier.
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
const createConnectionId = () =>
|
|
globalThis.crypto?.randomUUID?.() ??
|
|
`conn_${Math.random().toString(36).slice(2, 10)}`;
|
|
|
|
/**
|
|
* @typedef {Object} PinReference
|
|
* @property {string} nodeId Linked node identifier.
|
|
* @property {string} pinId Pin identifier within the node.
|
|
*/
|
|
|
|
/**
|
|
* Represents a directional connection between two node pins.
|
|
*/
|
|
export class Connection {
|
|
/**
|
|
* @param {PinReference} from Origin pin (must be output).
|
|
* @param {PinReference} to Target pin (must be input).
|
|
* @param {('exec'|'number'|'boolean'|'string'|'table'|'any')} kind Pin kind carried by the connection.
|
|
* @param {string} [id] Optional connection identifier.
|
|
*/
|
|
constructor(from, to, kind, id) {
|
|
this.id = id ?? createConnectionId();
|
|
this.from = { ...from };
|
|
this.to = { ...to };
|
|
this.kind = kind;
|
|
}
|
|
|
|
/**
|
|
* Serializes the connection for persistence.
|
|
*
|
|
* @returns {{from: PinReference, to: PinReference, kind: Connection['kind']}}
|
|
*/
|
|
toJSON() {
|
|
return {
|
|
id: this.id,
|
|
from: { ...this.from },
|
|
to: { ...this.to },
|
|
kind: this.kind,
|
|
};
|
|
}
|
|
}
|