@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.
@@ -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
- const result = {};
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
- 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);
20
+ worker.onmessage = function(e) {
21
+ resolve(e.data);
22
+ };
23
+
24
+ worker.onerror = reject;
25
+
26
+ worker.postMessage(chunks);
28
27
  });
29
- });
30
- return Object.values(result);
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
- this.chunksManager = new ChunksManager(
63
- this.storage,
64
- this.pipeService,
65
- this.req,
66
- this.util,
67
- new ChunkDataService(this.req, chunkDataServiceConf),
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
- processAppUpd(v1, v2) {
238
- this.itemProcessor.handleItemsChange(v1, v2);
239
- this.appProcessor.handleAppChange(v1, v2);
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.7",
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": {