Skip to content

Commit ba220f5

Browse files
authored
Merge pull request #72 from FlowTestAI/improve-graph-repr
Improve graph representation with proper versioning
2 parents 17ed953 + e44dac7 commit ba220f5

File tree

19 files changed

+757
-145
lines changed

19 files changed

+757
-145
lines changed

packages/flowtest-electron/src/app/watcher.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const path = require('path');
33
const dotenv = require('dotenv');
44
const { PATH_SEPARATOR, getSubdirectoriesFromRoot } = require('../utils/filemanager/filesystem');
55
const readFile = require('../utils/filemanager/readfile');
6+
const { serialize } = require('../utils/flowparser/parser');
67

78
class Watcher {
89
constructor() {
@@ -32,13 +33,16 @@ class Watcher {
3233
add(mainWindow, pathname, collectionId, watchPath) {
3334
console.log(`[Watcher] File ${pathname} added`);
3435
if (this.isFlowTestFile(pathname)) {
36+
const content = readFile(pathname);
37+
const flowData = serialize(JSON.parse(content));
3538
const dirname = path.dirname(pathname);
3639
const subDirectories = getSubdirectoriesFromRoot(watchPath, dirname);
3740
const file = {
3841
name: path.basename(pathname),
3942
pathname: pathname,
4043
subDirectories,
4144
sep: PATH_SEPARATOR,
45+
flowData,
4246
};
4347
mainWindow.webContents.send('main:create-flowtest', file, collectionId);
4448
} else if (this.isEnvFile(pathname, watchPath)) {

packages/flowtest-electron/src/ipc/collection.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ const { isDirectory, pathExists } = require('../utils/filemanager/filesystem');
1313
const createFile = require('../utils/filemanager/createfile');
1414
const updateFile = require('../utils/filemanager/updatefile');
1515
const deleteFile = require('../utils/filemanager/deletefile');
16-
const { flowDataToReadableData, readableDataToFlowData } = require('../utils/parser');
1716
const readFile = require('../utils/filemanager/readfile');
1817
const FlowtestAI = require('../utils/flowtestai');
1918
const { stringify, parse } = require('flatted');
19+
const { deserialize, serialize } = require('../utils/flowparser/parser');
2020

2121
const collectionStore = new Collections();
2222
const flowTestAI = new FlowtestAI();
@@ -227,8 +227,8 @@ const registerRendererEventHandlers = (mainWindow, watcher) => {
227227
ipcMain.handle('renderer:create-flowtest', async (event, name, path, flowData) => {
228228
try {
229229
if (isDirectory(path)) {
230-
const readableData = flowData ? flowDataToReadableData(flowData) : {};
231-
createFile(`${name}.flow`, path, JSON.stringify(readableData, null, 4));
230+
const textData = deserialize(flowData);
231+
createFile(`${name}.flow`, path, JSON.stringify(textData, null, 4));
232232
console.log(`Created file: ${name}.flow`);
233233
}
234234
} catch (error) {
@@ -239,7 +239,7 @@ const registerRendererEventHandlers = (mainWindow, watcher) => {
239239
ipcMain.handle('renderer:read-flowtest', async (event, pathname, collectionId) => {
240240
try {
241241
const content = readFile(pathname);
242-
const flowData = content === '{}' ? undefined : readableDataToFlowData(JSON.parse(content));
242+
const flowData = serialize(JSON.parse(content));
243243
mainWindow.webContents.send('main:read-flowtest', pathname, collectionId, flowData);
244244
} catch (error) {
245245
return Promise.reject(error);
@@ -248,14 +248,14 @@ const registerRendererEventHandlers = (mainWindow, watcher) => {
248248

249249
ipcMain.handle('renderer:read-flowtest-sync', (event, pathname) => {
250250
const content = readFile(pathname);
251-
const flowData = content === '{}' ? undefined : readableDataToFlowData(JSON.parse(content));
251+
const flowData = serialize(JSON.parse(content));
252252
return flowData;
253253
});
254254

255255
ipcMain.handle('renderer:update-flowtest', async (event, pathname, flowData) => {
256256
try {
257-
const readableData = flowDataToReadableData(flowData);
258-
updateFile(pathname, JSON.stringify(readableData, null, 4));
257+
const textData = deserialize(flowData);
258+
updateFile(pathname, JSON.stringify(textData, null, 4));
259259
console.log(`Updated file: ${pathname}`);
260260
} catch (error) {
261261
return Promise.reject(error);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const { Node } = require('./Node');
2+
3+
class AuthNode extends Node {
4+
constructor() {
5+
super('authNode');
6+
}
7+
8+
serialize(id, data, metadata) {
9+
return {
10+
id,
11+
type: 'authNode',
12+
data,
13+
...metadata,
14+
};
15+
}
16+
17+
deserialize(node) {
18+
const id = node.id;
19+
const data = node.data;
20+
delete node.id;
21+
delete node.data;
22+
const metadata = node;
23+
24+
return {
25+
id,
26+
data,
27+
metadata,
28+
};
29+
}
30+
}
31+
32+
module.exports = {
33+
AuthNode,
34+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const { Node } = require('./Node');
2+
3+
class ComplexNode extends Node {
4+
constructor() {
5+
super('complexNode');
6+
}
7+
8+
serialize(id, data, metadata) {
9+
return {
10+
id,
11+
type: 'complexNode',
12+
data,
13+
...metadata,
14+
};
15+
}
16+
17+
deserialize(node) {
18+
const id = node.id;
19+
const data = node.data;
20+
delete node.id;
21+
delete node.data;
22+
const metadata = node;
23+
24+
return {
25+
id,
26+
data,
27+
metadata,
28+
};
29+
}
30+
}
31+
32+
module.exports = {
33+
ComplexNode,
34+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const { Node } = require('./Node');
2+
3+
class DelayNode extends Node {
4+
constructor() {
5+
super('delayNode');
6+
}
7+
8+
serialize(id, data, metadata) {
9+
return {
10+
id,
11+
type: 'delayNode',
12+
data,
13+
...metadata,
14+
};
15+
}
16+
17+
deserialize(node) {
18+
const id = node.id;
19+
const data = node.data;
20+
delete node.id;
21+
delete node.data;
22+
const metadata = node;
23+
24+
return {
25+
id,
26+
data,
27+
metadata,
28+
};
29+
}
30+
}
31+
32+
module.exports = {
33+
DelayNode,
34+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const { Node } = require('./Node');
2+
3+
class EvaluateNode extends Node {
4+
constructor() {
5+
super('evaluateNode');
6+
}
7+
8+
serialize(id, data, metadata) {
9+
return {
10+
id,
11+
type: 'evaluateNode',
12+
data,
13+
...metadata,
14+
};
15+
}
16+
17+
deserialize(node) {
18+
const id = node.id;
19+
const data = node.data;
20+
delete node.id;
21+
delete node.data;
22+
const metadata = node;
23+
24+
return {
25+
id,
26+
data,
27+
metadata,
28+
};
29+
}
30+
}
31+
32+
module.exports = {
33+
EvaluateNode,
34+
};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Node {
2+
constructor(type) {
3+
this.type = type;
4+
}
5+
6+
serialize(id, data, metadata) {
7+
throw new Error('Serialize method must be implemented by subclasses');
8+
}
9+
10+
deserialize(node) {
11+
throw new Error('Deserialize method must be implemented by subclasses');
12+
}
13+
}
14+
15+
module.exports = {
16+
Node,
17+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const { Node } = require('./Node');
2+
3+
class OutputNode extends Node {
4+
constructor() {
5+
super('outputNode');
6+
}
7+
8+
serialize(id, data, metadata) {
9+
return {
10+
id,
11+
type: 'outputNode',
12+
data,
13+
...metadata,
14+
};
15+
}
16+
17+
deserialize(node) {
18+
const id = node.id;
19+
const { ['output']: _, ...data } = node.data;
20+
delete node.id;
21+
delete node.data;
22+
const metadata = node;
23+
24+
return {
25+
id,
26+
data,
27+
metadata,
28+
};
29+
}
30+
}
31+
32+
module.exports = {
33+
OutputNode,
34+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const { Node } = require('./Node');
2+
3+
class RequestNode extends Node {
4+
constructor() {
5+
super('requestNode');
6+
}
7+
8+
serialize(id, data, metadata) {
9+
return {
10+
id,
11+
type: 'requestNode',
12+
data,
13+
...metadata,
14+
};
15+
}
16+
17+
deserialize(node) {
18+
const id = node.id;
19+
const data = node.data;
20+
delete node.id;
21+
delete node.data;
22+
const metadata = node;
23+
24+
return {
25+
id,
26+
data,
27+
metadata,
28+
};
29+
}
30+
}
31+
32+
module.exports = {
33+
RequestNode,
34+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
const { Node } = require('./Node');
2+
3+
class StartNode extends Node {
4+
constructor() {
5+
super('startNode');
6+
}
7+
8+
serialize(id, data, metadata) {
9+
return {
10+
id,
11+
...metadata,
12+
};
13+
}
14+
15+
deserialize(node) {
16+
const id = node.id;
17+
delete node.id;
18+
const metadata = node;
19+
20+
return {
21+
id,
22+
metadata,
23+
};
24+
}
25+
}
26+
27+
module.exports = {
28+
StartNode,
29+
};

0 commit comments

Comments
 (0)