@hlang-org/runtime
Version:
A FBP-Inspired language for universal applications.
49 lines • 6.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const run = (G) => {
return (sortedNodes, flow) => {
const adjList = G.adjList;
const edges = (id) => {
return adjList.getRow(id);
};
const pipe = (edge) => {
const { src: _src, dst: _dst } = edge;
const _cacheKey = `${_src.id}@${_dst.id}`;
// 相同的边不能重复订阅
if (flow.cache.has(_cacheKey))
return;
_src.receive((msg) => {
_dst.send(msg);
});
flow.cache.set(_cacheKey, edge);
};
const pipeWithEdges = (_pipe) => (_edges) => {
for (const [_k, edge] of _edges) {
_pipe(edge);
}
};
const _p = pipeWithEdges(pipe);
// W
sortedNodes.w.forEach((node) => {
node.attach(flow);
const executeOnce = node.executeOnce.bind(node, 'write', node.I);
executeOnce();
});
// T
sortedNodes.t.forEach((node) => {
node.attach(flow);
_p(edges(node.id));
const executeOnce = node.executeOnce.bind(node, 'transform', node.I, node.O);
executeOnce();
});
// R
sortedNodes.r.forEach((node) => {
node.attach(flow);
_p(edges(node.id));
const executeOnce = node.executeOnce.bind(node, 'read', node.O);
executeOnce();
});
};
};
exports.default = run;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBV0EsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUF5QixFQUFFLEVBQUU7SUFDeEMsT0FBTyxDQUFDLFdBQTJCLEVBQUUsSUFBVSxFQUFFLEVBQUU7UUFDakQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUUxQixNQUFNLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ25CLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFFRixNQUFNLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3BCLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDdEMsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUUxQyxhQUFhO1lBQ2IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7Z0JBQUUsT0FBTztZQUV0QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBOEIsRUFBRSxFQUFFO1lBQ2xFLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQixJQUFJO1FBQ0osV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWxCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWpFLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSTtRQUNKLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVsQixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQTJCLENBQUMsQ0FBQztZQUU3QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDdkMsSUFBSSxFQUNKLFdBQVcsRUFDWCxJQUFJLENBQUMsQ0FBQyxFQUNOLElBQUksQ0FBQyxDQUFDLENBQ1AsQ0FBQztZQUVGLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSTtRQUNKLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVsQixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQTJCLENBQUMsQ0FBQztZQUU3QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoRSxXQUFXLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGtCQUFlLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElQb3J0RGVzYyAgfSBmcm9tICcuLi90eXBlJztcbmltcG9ydCBHcmFwaCBmcm9tICcuL2dyYXBoJztcbmltcG9ydCBOb2RlIGZyb20gJy4uL25vZGUnO1xuaW1wb3J0IEZsb3cgZnJvbSAnLi4vYmFzZS9mbG93JztcblxuZXhwb3J0IGludGVyZmFjZSBJU29ydGVkTm9kZU1hcCB7XG4gIHI6IE5vZGVbXTtcbiAgdzogTm9kZVtdO1xuICB0OiBOb2RlW107XG59XG5cbmNvbnN0IHJ1biA9IChHOiBHcmFwaDxJUG9ydERlc2MsIE5vZGU+KSA9PiB7XG4gIHJldHVybiAoc29ydGVkTm9kZXM6IElTb3J0ZWROb2RlTWFwLCBmbG93OiBGbG93KSA9PiB7XG4gICAgY29uc3QgYWRqTGlzdCA9IEcuYWRqTGlzdDtcblxuICAgIGNvbnN0IGVkZ2VzID0gKGlkKSA9PiB7XG4gICAgICByZXR1cm4gYWRqTGlzdC5nZXRSb3coaWQpO1xuICAgIH07XG5cbiAgICBjb25zdCBwaXBlID0gKGVkZ2UpID0+IHtcbiAgICAgIGNvbnN0IHsgc3JjOiBfc3JjLCBkc3Q6IF9kc3QgfSA9IGVkZ2U7XG4gICAgICBjb25zdCBfY2FjaGVLZXkgPSBgJHtfc3JjLmlkfUAke19kc3QuaWR9YDtcblxuICAgICAgLy8g55u45ZCM55qE6L655LiN6IO96YeN5aSN6K6i6ZiFXG4gICAgICBpZiAoZmxvdy5jYWNoZS5oYXMoX2NhY2hlS2V5KSkgcmV0dXJuO1xuXG4gICAgICBfc3JjLnJlY2VpdmUoKG1zZykgPT4ge1xuICAgICAgICBfZHN0LnNlbmQobXNnKTtcbiAgICAgIH0pO1xuXG4gICAgICBmbG93LmNhY2hlLnNldChfY2FjaGVLZXksIGVkZ2UpO1xuICAgIH07XG5cbiAgICBjb25zdCBwaXBlV2l0aEVkZ2VzID0gKF9waXBlKSA9PiAoX2VkZ2VzOiBNYXA8c3RyaW5nLCBJUG9ydERlc2M+KSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IFtfaywgZWRnZV0gb2YgX2VkZ2VzKSB7XG4gICAgICAgIF9waXBlKGVkZ2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBfcCA9IHBpcGVXaXRoRWRnZXMocGlwZSk7XG5cbiAgICAvLyBXXG4gICAgc29ydGVkTm9kZXMudy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBub2RlLmF0dGFjaChmbG93KTtcblxuICAgICAgY29uc3QgZXhlY3V0ZU9uY2UgPSBub2RlLmV4ZWN1dGVPbmNlLmJpbmQobm9kZSwgJ3dyaXRlJywgbm9kZS5JKTtcblxuICAgICAgZXhlY3V0ZU9uY2UoKTtcbiAgICB9KTtcblxuICAgIC8vIFRcbiAgICBzb3J0ZWROb2Rlcy50LmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIG5vZGUuYXR0YWNoKGZsb3cpO1xuXG4gICAgICBfcChlZGdlcyhub2RlLmlkKSBhcyBNYXA8c3RyaW5nLCBJUG9ydERlc2M+KTtcblxuICAgICAgY29uc3QgZXhlY3V0ZU9uY2UgPSBub2RlLmV4ZWN1dGVPbmNlLmJpbmQoXG4gICAgICAgIG5vZGUsXG4gICAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgICBub2RlLkksXG4gICAgICAgIG5vZGUuTyxcbiAgICAgICk7XG5cbiAgICAgIGV4ZWN1dGVPbmNlKCk7XG4gICAgfSk7XG5cbiAgICAvLyBSXG4gICAgc29ydGVkTm9kZXMuci5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBub2RlLmF0dGFjaChmbG93KTtcblxuICAgICAgX3AoZWRnZXMobm9kZS5pZCkgYXMgTWFwPHN0cmluZywgSVBvcnREZXNjPik7XG5cbiAgICAgIGNvbnN0IGV4ZWN1dGVPbmNlID0gbm9kZS5leGVjdXRlT25jZS5iaW5kKG5vZGUsICdyZWFkJywgbm9kZS5PKTtcblxuICAgICAgZXhlY3V0ZU9uY2UoKTtcbiAgICB9KTtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJ1bjtcbiJdfQ==