148 lines
19 KiB
JavaScript
148 lines
19 KiB
JavaScript
|
'use strict';
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.Pin = exports.PinD = exports.Block = exports.Graph = exports.Forge = void 0;
|
||
|
const block_1 = require("../block");
|
||
|
const graphWeakMap = new WeakMap();
|
||
|
const blockWeakMap = new WeakMap();
|
||
|
const pinWeakMap = new WeakMap();
|
||
|
class Forge {
|
||
|
constructor(graph) {
|
||
|
this.rootGraphData = graph;
|
||
|
}
|
||
|
get details() {
|
||
|
return this.rootGraphData.details;
|
||
|
}
|
||
|
getGraph() {
|
||
|
const graphData = this.rootGraphData;
|
||
|
if (!graphWeakMap.has(graphData)) {
|
||
|
graphWeakMap.set(graphData, new Graph(graphData));
|
||
|
}
|
||
|
return graphWeakMap.get(graphData);
|
||
|
}
|
||
|
}
|
||
|
exports.Forge = Forge;
|
||
|
class Graph {
|
||
|
constructor(graph) {
|
||
|
this.graph = graph;
|
||
|
// 生成数据
|
||
|
this.getBlockMap();
|
||
|
// 整理 line 数据
|
||
|
const nodeMap = this.graph.nodes;
|
||
|
const lineMap = this.graph.lines;
|
||
|
for (const uuid in lineMap) {
|
||
|
const line = lineMap[uuid];
|
||
|
const inputNode = nodeMap[line.input.node];
|
||
|
const outputNode = nodeMap[line.output.node];
|
||
|
const inputBlock = blockWeakMap.get(inputNode);
|
||
|
const outputBlock = blockWeakMap.get(outputNode);
|
||
|
inputBlock?.getOutputPinsList();
|
||
|
outputBlock?.getInputPinsList();
|
||
|
const inputPin = inputBlock?.getOutputPin(line.input.param);
|
||
|
const outPin = outputBlock?.getInputPin(line.output.param);
|
||
|
if (outPin) {
|
||
|
inputPin.connectPins.push(outPin);
|
||
|
}
|
||
|
if (inputPin) {
|
||
|
outPin.connectPins.push(inputPin);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
get details() {
|
||
|
return this.graph.details;
|
||
|
}
|
||
|
getSubGraphMap() {
|
||
|
const data = {};
|
||
|
for (const uuid in this.graph.graphs) {
|
||
|
const graphData = this.graph.graphs[uuid];
|
||
|
if (!graphWeakMap.has(graphData)) {
|
||
|
graphWeakMap.set(graphData, new Graph(graphData));
|
||
|
}
|
||
|
const graph = graphWeakMap.get(graphData);
|
||
|
data[uuid] = graph;
|
||
|
}
|
||
|
return data;
|
||
|
}
|
||
|
getBlockMap() {
|
||
|
const data = {};
|
||
|
for (const uuid in this.graph.nodes) {
|
||
|
const blockData = this.graph.nodes[uuid];
|
||
|
if (!blockWeakMap.has(blockData)) {
|
||
|
blockWeakMap.set(blockData, new Block(this, uuid, blockData));
|
||
|
}
|
||
|
const block = blockWeakMap.get(blockData);
|
||
|
data[uuid] = block;
|
||
|
}
|
||
|
return data;
|
||
|
}
|
||
|
}
|
||
|
exports.Graph = Graph;
|
||
|
class Block {
|
||
|
constructor(graph, uuid, block) {
|
||
|
this.graph = graph;
|
||
|
this.uuid = uuid;
|
||
|
this.block = block;
|
||
|
this.desc = block_1.blockMap.get(this.block.type);
|
||
|
this.getInputPinsList();
|
||
|
this.getOutputPinsList();
|
||
|
}
|
||
|
get details() {
|
||
|
return this.block.details;
|
||
|
}
|
||
|
getInputPin(tag) {
|
||
|
const inputPins = this.desc?.inputPins || [];
|
||
|
for (let index = 0; index < inputPins.length; index++) {
|
||
|
const pinDesc = inputPins[index];
|
||
|
if (pinDesc.tag === tag) {
|
||
|
const pin = this.block.details.inputPins[index];
|
||
|
return pinWeakMap.get(pin);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
getOutputPin(tag) {
|
||
|
const outputPins = this.desc?.outputPins || [];
|
||
|
for (let index = 0; index < outputPins.length; index++) {
|
||
|
const pin = outputPins[index];
|
||
|
if (pin.tag === tag) {
|
||
|
const pin = this.block.details.outputPins[index];
|
||
|
return pinWeakMap.get(pin);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
getInputPinsList() {
|
||
|
const inputPins = this.block.details.inputPins || [];
|
||
|
const blockDesc = this.desc || { inputPins: [] };
|
||
|
return inputPins.map((pinData, index) => {
|
||
|
if (!pinWeakMap.has(pinData)) {
|
||
|
pinWeakMap.set(pinData, new Pin(PinD.input, this, pinData, blockDesc.inputPins[index]));
|
||
|
}
|
||
|
return pinWeakMap.get(pinData);
|
||
|
});
|
||
|
}
|
||
|
getOutputPinsList() {
|
||
|
const outputPins = this.block.details.outputPins || [];
|
||
|
const blockDesc = this.desc || { outputPins: [] };
|
||
|
return outputPins.map((pinData, index) => {
|
||
|
if (!pinWeakMap.has(pinData)) {
|
||
|
pinWeakMap.set(pinData, new Pin(PinD.output, this, pinData, blockDesc.outputPins[index]));
|
||
|
}
|
||
|
return pinWeakMap.get(pinData);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
exports.Block = Block;
|
||
|
var PinD;
|
||
|
(function (PinD) {
|
||
|
PinD[PinD["input"] = 0] = "input";
|
||
|
PinD[PinD["output"] = 1] = "output";
|
||
|
})(PinD = exports.PinD || (exports.PinD = {}));
|
||
|
class Pin {
|
||
|
constructor(dir, block, pin, desc) {
|
||
|
this.connectPins = [];
|
||
|
this.type = dir;
|
||
|
this.block = block;
|
||
|
this.desc = desc;
|
||
|
this.value = pin;
|
||
|
}
|
||
|
}
|
||
|
exports.Pin = Pin;
|
||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvbW9kdWxlL2ZvcmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBSWIsb0NBQW9DO0FBRXBDLE1BQU0sWUFBWSxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzlELE1BQU0sWUFBWSxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzlELE1BQU0sVUFBVSxHQUEwQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRXhELE1BQWEsS0FBSztJQUdkLFlBQVksS0FBZ0I7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVE7UUFDSixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzlCLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDckQ7UUFDRCxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNKO0FBbEJELHNCQWtCQztBQUVELE1BQWEsS0FBSztJQUdkLFlBQVksS0FBZ0I7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsT0FBTztRQUNQLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixhQUFhO1FBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFD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
|