@gudhub/core 1.2.4-beta.7 → 1.2.4-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/GUDHUB/AppProcessor/AppProcessor.js +20 -14
- package/GUDHUB/ChunksManager/ChunksManager.js +61 -61
- package/GUDHUB/ChunksManager/ChunksManager.test.js +8 -4
- package/GUDHUB/DataService/AppDataService.js +145 -0
- package/GUDHUB/DataService/IndexedDB/IndexedDBAppService.js +71 -11
- package/GUDHUB/DataService/IndexedDB/IndexedDBChunkService.js +59 -2
- package/GUDHUB/DataService/httpService/AppHttpService.js +9 -4
- package/GUDHUB/DataService/httpService/ChunkHttpService.js +2 -2
- package/GUDHUB/ItemProcessor/ItemProcessor.js +4 -4
- package/GUDHUB/Utils/Utils.js +14 -2
- package/GUDHUB/Utils/merge_chunks/merge_chunks.js +28 -28
- package/GUDHUB/Utils/merge_chunks/merge_chunks.worker.js +78 -0
- package/GUDHUB/gudhub.js +14 -12
- package/package.json +2 -1
- package/umd/library.min.js +1 -1
- package/umd/library.min.js.map +1 -1
- package/webpack.config.js +10 -1
package/GUDHUB/Utils/Utils.js
CHANGED
|
@@ -24,6 +24,7 @@ import { FileHelper } from "./FIleHelper/FileHelper.js";
|
|
|
24
24
|
import { compareObjects } from "./compareObjects/compareObjects.js";
|
|
25
25
|
import { dynamicPromiseAll } from "./dynamicPromiseAll/dynamicPromiseAll.js";
|
|
26
26
|
import { sortItems } from './filter/sortItems.js';
|
|
27
|
+
import { mergeChunksWorker } from "./merge_chunks/merge_chunks.worker.js";
|
|
27
28
|
|
|
28
29
|
export class Utils {
|
|
29
30
|
constructor(gudhub) {
|
|
@@ -142,8 +143,19 @@ export class Utils {
|
|
|
142
143
|
return makeNestedList(arr, id, parent_id, children_property, priority_property);
|
|
143
144
|
}
|
|
144
145
|
|
|
145
|
-
mergeChunks(chunks) {
|
|
146
|
-
return mergeChunks(chunks);
|
|
146
|
+
async mergeChunks(chunks) {
|
|
147
|
+
// return mergeChunks(chunks);
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
const chunkWorkerBlob = new Blob([mergeChunksWorker()], {
|
|
151
|
+
type: "application/javascript",
|
|
152
|
+
});
|
|
153
|
+
this.worker = new Worker(URL.createObjectURL(chunkWorkerBlob));
|
|
154
|
+
this.worker.postMessage(chunks);
|
|
155
|
+
this.worker.addEventListener("message", (event) => {
|
|
156
|
+
const { diff } = event.data;
|
|
157
|
+
callback(event.data);
|
|
158
|
+
});
|
|
147
159
|
}
|
|
148
160
|
|
|
149
161
|
mergeFieldLists(fieldsToView, fieldList) {
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
+
import { mergeChunks as mergeChunksByMainThread, mergeChunksWorker } from "./merge_chunks.worker.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
// const mergeChunksWorkerSingletone = new Worker('mergeWorker.js'); //TODO
|
|
5
|
+
|
|
6
|
+
|
|
1
7
|
export function mergeChunks(chunks) {
|
|
2
|
-
|
|
8
|
+
if (
|
|
9
|
+
typeof Worker !== 'undefined'
|
|
10
|
+
) {
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
const chunkWorkerBlob = new Blob([mergeChunksWorker()], {
|
|
13
|
+
type: "application/javascript",
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
let worker = new Worker(URL.createObjectURL(chunkWorkerBlob));
|
|
17
|
+
|
|
18
|
+
worker.postMessage(chunks);
|
|
3
19
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
dstItem.fields = dstItem.fields.map((dstField) => {
|
|
12
|
-
if (Number(dstField.field_id) === Number(srcField.field_id)) {
|
|
13
|
-
isFieldNonExist = false;
|
|
14
|
-
if (dstField.field_value != srcField.field_value) {
|
|
15
|
-
return {
|
|
16
|
-
...srcField,
|
|
17
|
-
history: srcField.history.concat(dstField.history),
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
return dstField;
|
|
21
|
-
}
|
|
22
|
-
return dstField;
|
|
23
|
-
});
|
|
24
|
-
if (isFieldNonExist) dstItem.fields.push(srcField);
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
return (result[item.item_id] = item);
|
|
20
|
+
worker.onmessage = function(e) {
|
|
21
|
+
resolve(e.data);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
worker.onerror = reject;
|
|
25
|
+
|
|
26
|
+
worker.postMessage(chunks);
|
|
28
27
|
});
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
}
|
|
28
|
+
} else {
|
|
29
|
+
return mergeChunksByMainThread(chunks);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export function mergeChunks(chunks) {
|
|
2
|
+
const result = {};
|
|
3
|
+
|
|
4
|
+
chunks.forEach((chunk) => {
|
|
5
|
+
chunk.items_list.forEach((item) => {
|
|
6
|
+
const dstItem = result[item.item_id];
|
|
7
|
+
if (dstItem) {
|
|
8
|
+
dstItem.trash = item.trash;
|
|
9
|
+
return item.fields.forEach((srcField) => {
|
|
10
|
+
let isFieldNonExist = true;
|
|
11
|
+
dstItem.fields = dstItem.fields.map((dstField) => {
|
|
12
|
+
if (Number(dstField.field_id) === Number(srcField.field_id)) {
|
|
13
|
+
isFieldNonExist = false;
|
|
14
|
+
if (dstField.field_value != srcField.field_value) {
|
|
15
|
+
return {
|
|
16
|
+
...srcField,
|
|
17
|
+
history: srcField.history.concat(dstField.history),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
return dstField;
|
|
21
|
+
}
|
|
22
|
+
return dstField;
|
|
23
|
+
});
|
|
24
|
+
if (isFieldNonExist) dstItem.fields.push(srcField);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return (result[item.item_id] = item);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
return Object.values(result);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
self.onmessage = function(e) {
|
|
35
|
+
const mergedChunks = mergeChunks(e.data);
|
|
36
|
+
self.postMessage(mergedChunks);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
export function mergeChunksWorker() {
|
|
41
|
+
return `function mergeChunks(chunks) {
|
|
42
|
+
const result = {};
|
|
43
|
+
|
|
44
|
+
chunks.forEach((chunk) => {
|
|
45
|
+
chunk.items_list.forEach((item) => {
|
|
46
|
+
const dstItem = result[item.item_id];
|
|
47
|
+
if (dstItem) {
|
|
48
|
+
dstItem.trash = item.trash;
|
|
49
|
+
return item.fields.forEach((srcField) => {
|
|
50
|
+
let isFieldNonExist = true;
|
|
51
|
+
dstItem.fields = dstItem.fields.map((dstField) => {
|
|
52
|
+
if (Number(dstField.field_id) === Number(srcField.field_id)) {
|
|
53
|
+
isFieldNonExist = false;
|
|
54
|
+
if (dstField.field_value != srcField.field_value) {
|
|
55
|
+
return {
|
|
56
|
+
...srcField,
|
|
57
|
+
history: srcField.history.concat(dstField.history),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return dstField;
|
|
61
|
+
}
|
|
62
|
+
return dstField;
|
|
63
|
+
});
|
|
64
|
+
if (isFieldNonExist) dstItem.fields.push(srcField);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return (result[item.item_id] = item);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
return Object.values(result);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
self.onmessage = function(e) {
|
|
75
|
+
const mergedChunks = mergeChunks(e.data);
|
|
76
|
+
self.postMessage(mergedChunks);
|
|
77
|
+
}`;
|
|
78
|
+
}
|
package/GUDHUB/gudhub.js
CHANGED
|
@@ -10,7 +10,7 @@ import { AppProcessor } from "./AppProcessor/AppProcessor.js";
|
|
|
10
10
|
import { ItemProcessor } from "./ItemProcessor/ItemProcessor.js";
|
|
11
11
|
import { FieldProcessor } from "./FieldProcessor/FieldProcessor.js";
|
|
12
12
|
import { FileManager } from "./FileManager/FileManager.js";
|
|
13
|
-
import { ChunksManager } from "./ChunksManager/ChunksManager.js";
|
|
13
|
+
// import { ChunksManager } from "./ChunksManager/ChunksManager.js";
|
|
14
14
|
import { DocumentManager } from "./DocumentManager/DocumentManager.js";
|
|
15
15
|
import { Interpritate } from './GHConstructor/interpritate.js'
|
|
16
16
|
import { IS_WEB } from "./consts.js";
|
|
@@ -59,19 +59,21 @@ export class GudHub {
|
|
|
59
59
|
this.req.init(this.auth.getToken.bind(this.auth));
|
|
60
60
|
|
|
61
61
|
this.ws = new WebSocketApi(options.wss_url, this.auth);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
|
|
63
|
+
//todo
|
|
64
|
+
// this.chunksManager = new ChunksManager(
|
|
65
|
+
// this.storage,
|
|
66
|
+
// this.pipeService,
|
|
67
|
+
// this.req,
|
|
68
|
+
// this.util,
|
|
69
|
+
// new ChunkDataService(this.req, chunkDataServiceConf, this),
|
|
70
|
+
// );
|
|
69
71
|
this.appProcessor = new AppProcessor(
|
|
70
72
|
this.storage,
|
|
71
73
|
this.pipeService,
|
|
72
74
|
this.req,
|
|
73
75
|
this.ws,
|
|
74
|
-
this.chunksManager,
|
|
76
|
+
// this.chunksManager,
|
|
75
77
|
this.util,
|
|
76
78
|
options.activateSW,
|
|
77
79
|
new AppDataService(this.req, appDataServiceConf, this),
|
|
@@ -234,9 +236,9 @@ export class GudHub {
|
|
|
234
236
|
return this.util.sortItems(items, options);
|
|
235
237
|
}
|
|
236
238
|
|
|
237
|
-
|
|
238
|
-
this.itemProcessor.handleItemsChange(
|
|
239
|
-
this.appProcessor.handleAppChange(
|
|
239
|
+
triggerAppChange(id, prevVersion, newVersion) {
|
|
240
|
+
this.itemProcessor.handleItemsChange(id, prevVersion, newVersion);
|
|
241
|
+
this.appProcessor.handleAppChange(id, prevVersion, newVersion);
|
|
240
242
|
}
|
|
241
243
|
|
|
242
244
|
jsonToItems(json, map) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gudhub/core",
|
|
3
|
-
"version": "1.2.4-beta.
|
|
3
|
+
"version": "1.2.4-beta.9",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"jsonpath": "^1.0.2",
|
|
39
39
|
"qs": "^6.9.4",
|
|
40
40
|
"regenerator-runtime": "^0.13.9",
|
|
41
|
+
"worker-loader": "^3.0.8",
|
|
41
42
|
"ws": "^7.3.1"
|
|
42
43
|
},
|
|
43
44
|
"devDependencies": {
|