From 4ac6ee073d07169357fe1d6e6965c801bebe54a4 Mon Sep 17 00:00:00 2001 From: Michael Puehringer Date: Fri, 13 May 2022 12:25:50 +0200 Subject: [PATCH] Added lz compression to local graph storage --- dist/clue/base/CLUEGraphManager.d.ts | 2 +- dist/clue/graph/LocalStorageGraph.d.ts | 2 + dist/clue/graph/LocalStorageGraph.d.ts.map | 2 +- dist/clue/graph/LocalStorageGraph.js | 45 ++++++++++-------- dist/clue/graph/LocalStorageGraph.js.map | 2 +- .../LocalStorageProvenanceGraphManager.d.ts | 1 + ...ocalStorageProvenanceGraphManager.d.ts.map | 2 +- .../LocalStorageProvenanceGraphManager.js | 28 +++++------ .../LocalStorageProvenanceGraphManager.js.map | 2 +- dist/clue/utils/Compression.d.ts | 3 ++ dist/clue/utils/Compression.d.ts.map | 1 + dist/clue/utils/Compression.js | 24 ++++++++++ dist/clue/utils/Compression.js.map | 1 + dist/clue/utils/index.d.ts | 1 + dist/clue/utils/index.d.ts.map | 2 +- dist/clue/utils/index.js | 1 + dist/clue/utils/index.js.map | 2 +- dist/components/dialogs.d.ts | 1 - dist/components/dialogs.d.ts.map | 2 +- dist/lineup/Ranking.d.ts | 1 + dist/lineup/Ranking.d.ts.map | 2 +- package.json | 2 + src/clue/graph/LocalStorageGraph.ts | 47 +++++++++++-------- .../LocalStorageProvenanceGraphManager.ts | 28 +++++------ src/clue/utils/Compression.ts | 23 +++++++++ src/clue/utils/index.ts | 1 + 26 files changed, 147 insertions(+), 81 deletions(-) create mode 100644 dist/clue/utils/Compression.d.ts create mode 100644 dist/clue/utils/Compression.d.ts.map create mode 100644 dist/clue/utils/Compression.js create mode 100644 dist/clue/utils/Compression.js.map create mode 100644 src/clue/utils/Compression.ts diff --git a/dist/clue/base/CLUEGraphManager.d.ts b/dist/clue/base/CLUEGraphManager.d.ts index 6c81ff611..28263bef7 100644 --- a/dist/clue/base/CLUEGraphManager.d.ts +++ b/dist/clue/base/CLUEGraphManager.d.ts @@ -43,7 +43,7 @@ export declare class CLUEGraphManager extends EventHandler { chooseLazy(rejectOnNotFound?: boolean): PromiseLike; choose(list: IProvenanceGraphDataDescription[], rejectOnNotFound?: boolean): PromiseLike; loadOrClone(graph: IProvenanceGraphDataDescription, isSelect: boolean): void; - cloneLocal(graph: IProvenanceGraphDataDescription): Promise | PromiseLike; + cloneLocal(graph: IProvenanceGraphDataDescription): PromiseLike | Promise; /** * create the provenance graph selection dropdown and handles the graph selection * @param manager diff --git a/dist/clue/graph/LocalStorageGraph.d.ts b/dist/clue/graph/LocalStorageGraph.d.ts index e3a4632fa..5ce7d368e 100644 --- a/dist/clue/graph/LocalStorageGraph.d.ts +++ b/dist/clue/graph/LocalStorageGraph.d.ts @@ -3,6 +3,8 @@ import { GraphEdge, GraphNode, IGraph, IGraphDataDescription } from './graph'; export declare class LocalStorageGraph extends GraphBase implements IGraph { private storage; private updateHandler; + private setItem; + private getItem; constructor(desc: IGraphDataDescription, nodes?: GraphNode[], edges?: GraphEdge[], storage?: Storage); static migrate(graph: GraphBase, storage?: Storage): Promise; migrate(): PromiseLike<{ diff --git a/dist/clue/graph/LocalStorageGraph.d.ts.map b/dist/clue/graph/LocalStorageGraph.d.ts.map index 71c93cd02..b5a83f8fe 100644 --- a/dist/clue/graph/LocalStorageGraph.d.ts.map +++ b/dist/clue/graph/LocalStorageGraph.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LocalStorageGraph.d.ts","sourceRoot":"","sources":["../../../src/clue/graph/LocalStorageGraph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAE9E,qBAAa,iBAAkB,SAAQ,SAAU,YAAW,MAAM;IAChE,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,aAAa,CAQnB;gBAEU,IAAI,EAAE,qBAAqB,EAAE,KAAK,GAAE,SAAS,EAAO,EAAE,KAAK,GAAE,SAAS,EAAO,EAAE,OAAO,GAAE,OAAwB;IAoB5H,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,UAAiB;IAMzD,OAAO;;;;;;;IAMP,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,OAAwB,EAAE,KAAK,UAAQ;IAQjH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,OAAwB;IAMxF,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,CAAC,IAAI;IAwBZ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,GAAE,OAAwB;IAa5E,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,GAAE,OAAwB;IAI5E,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa;IAgBlD,OAAO,CAAC,CAAC,EAAE,SAAS;IASpB,UAAU,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG;IAO7B,UAAU,CAAC,CAAC,EAAE,SAAS;IAYvB,OAAO,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS;IAazE,UAAU,CAAC,CAAC,EAAE,SAAS;IAYvB,UAAU,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG;IAO7B,KAAK;IAqBL,OAAO;CAQR"} \ No newline at end of file +{"version":3,"file":"LocalStorageGraph.d.ts","sourceRoot":"","sources":["../../../src/clue/graph/LocalStorageGraph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAG9E,qBAAa,iBAAkB,SAAQ,SAAU,YAAW,MAAM;IAChE,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,aAAa,CAQnB;IAEF,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;gBAIH,IAAI,EAAE,qBAAqB,EAAE,KAAK,GAAE,SAAS,EAAO,EAAE,KAAK,GAAE,SAAS,EAAO,EAAE,OAAO,GAAE,OAAwB;IAoB5H,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,UAAiB;IAMzD,OAAO;;;;;;;IAMP,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,OAAwB,EAAE,KAAK,UAAQ;IAQjH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,OAAwB;IAMxF,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,CAAC,IAAI;IAwBZ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,GAAE,OAAwB;IAa5E,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,GAAE,OAAwB;IAI5E,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa;IAgBlD,OAAO,CAAC,CAAC,EAAE,SAAS;IASpB,UAAU,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG;IAO7B,UAAU,CAAC,CAAC,EAAE,SAAS;IAYvB,OAAO,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS;IAazE,UAAU,CAAC,CAAC,EAAE,SAAS;IAYvB,UAAU,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG;IAO7B,KAAK;IAqBL,OAAO;CAQR"} \ No newline at end of file diff --git a/dist/clue/graph/LocalStorageGraph.js b/dist/clue/graph/LocalStorageGraph.js index a39e994c4..e93fd0bce 100644 --- a/dist/clue/graph/LocalStorageGraph.js +++ b/dist/clue/graph/LocalStorageGraph.js @@ -1,5 +1,6 @@ import { GraphBase } from './GraphBase'; import { GraphEdge, GraphNode } from './graph'; +import { setCompressedToStorage, getCompressedFromStorage } from '../utils/Compression'; export class LocalStorageGraph extends GraphBase { constructor(desc, nodes = [], edges = [], storage = sessionStorage) { super(desc, nodes, edges); @@ -15,18 +16,24 @@ export class LocalStorageGraph extends GraphBase { this.storage = storage; const { uid } = this; if (nodes.length > 0 || edges.length > 0) { - this.storage.setItem(`${uid}.nodes`, JSON.stringify(nodes.map((d) => d.id))); + this.setItem(`${uid}.nodes`, JSON.stringify(nodes.map((d) => d.id))); nodes.forEach((n) => { - this.storage.setItem(`${uid}.node.${n.id}`, JSON.stringify(n.persist())); + this.setItem(`${uid}.node.${n.id}`, JSON.stringify(n.persist())); n.on('setAttr', this.updateHandler); }); - this.storage.setItem(`${uid}.edges`, JSON.stringify(edges.map((d) => d.id))); + this.setItem(`${uid}.edges`, JSON.stringify(edges.map((d) => d.id))); edges.forEach((e) => { - this.storage.setItem(`${uid}.edge.${e.id}`, JSON.stringify(e.persist())); + this.setItem(`${uid}.edge.${e.id}`, JSON.stringify(e.persist())); e.on('setAttr', this.updateHandler); }); } } + setItem(key, value) { + setCompressedToStorage(this.storage, key, value); + } + getItem(key) { + return getCompressedFromStorage(this.storage, key, null); + } static migrate(graph, storage = sessionStorage) { return Promise.resolve(graph.migrate()).then(({ nodes, edges }) => { return new LocalStorageGraph(graph.desc, nodes, edges, storage); @@ -54,21 +61,21 @@ export class LocalStorageGraph extends GraphBase { } load(factory) { const { uid } = this; - if (this.storage.getItem(`${uid}.nodes`) == null) { + if (this.getItem(`${uid}.nodes`) == null) { return; } - const nodeIds = JSON.parse(this.storage.getItem(`${uid}.nodes`)); + const nodeIds = this.getItem(`${uid}.nodes`); const lookup = new Map(); nodeIds.forEach((id) => { - const n = JSON.parse(this.storage.getItem(`${uid}.node.${id}`)); + const n = this.getItem(`${uid}.node.${id}`); const nn = factory.makeNode(n); lookup.set(nn.id, nn); nn.on('setAttr', this.updateHandler); super.addNode(nn); }); - const edgeIds = JSON.parse(this.storage.getItem(`${uid}.edges`)); + const edgeIds = this.getItem(`${uid}.edges`); edgeIds.forEach((id) => { - const n = JSON.parse(this.storage.getItem(`${uid}.edge.${id}`)); + const n = this.getItem(`${uid}.edge.${id}`); const nn = factory.makeEdge(n, lookup.get.bind(lookup)); nn.on('setAttr', this.updateHandler); super.addEdge(nn); @@ -106,15 +113,15 @@ export class LocalStorageGraph extends GraphBase { addNode(n) { super.addNode(n); const { uid } = this; - this.storage.setItem(`${uid}.node.${n.id}`, JSON.stringify(n.persist())); - this.storage.setItem(`${uid}.nodes`, JSON.stringify(this.nodes.map((d) => d.id))); + this.setItem(`${uid}.node.${n.id}`, n.persist()); + this.setItem(`${uid}.nodes`, this.nodes.map((d) => d.id)); n.on('setAttr', this.updateHandler); return this; } updateNode(n) { super.updateNode(n); const { uid } = this; - this.storage.setItem(`${uid}.node.${n.id}`, JSON.stringify(n.persist())); + this.setItem(`${uid}.node.${n.id}`, n.persist()); return this; } removeNode(n) { @@ -122,7 +129,7 @@ export class LocalStorageGraph extends GraphBase { return null; } const { uid } = this; - this.storage.setItem(`${uid}.nodes`, JSON.stringify(this.nodes.map((d) => d.id))); + this.setItem(`${uid}.nodes`, this.nodes.map((d) => d.id)); this.storage.removeItem(`${uid}.node.${n.id}`); n.off('setAttr', this.updateHandler); return this; @@ -132,8 +139,8 @@ export class LocalStorageGraph extends GraphBase { super.addEdge(edgeOrSource); const e = edgeOrSource; const { uid } = this; - this.storage.setItem(`${uid}.edges`, JSON.stringify(this.edges.map((d) => d.id))); - this.storage.setItem(`${uid}.edge.${e.id}`, JSON.stringify(e.persist())); + this.setItem(`${uid}.edges`, this.edges.map((d) => d.id)); + this.setItem(`${uid}.edge.${e.id}`, e.persist()); e.on('setAttr', this.updateHandler); return this; } @@ -145,7 +152,7 @@ export class LocalStorageGraph extends GraphBase { } // need to shift all const { uid } = this; - this.storage.setItem(`${uid}.edges`, JSON.stringify(this.edges.map((d) => d.id))); + this.setItem(`${uid}.edges`, this.edges.map((d) => d.id)); this.storage.removeItem(`${uid}.edge.${e.id}`); e.off('setAttr', this.updateHandler); return this; @@ -153,7 +160,7 @@ export class LocalStorageGraph extends GraphBase { updateEdge(e) { super.updateEdge(e); const { uid } = this; - this.storage.setItem(`${uid}.edge.${e.id}`, JSON.stringify(e.persist())); + this.setItem(`${uid}.edge.${e.id}`, e.persist()); return this; } clear() { @@ -166,11 +173,11 @@ export class LocalStorageGraph extends GraphBase { this.edges.forEach((n) => n.off('setAttr', this.updateHandler)); super.clear(); const { uid } = this; - JSON.parse(this.storage.getItem(`${uid}.nodes`)).forEach((id) => { + this.getItem(`${uid}.nodes`).forEach((id) => { this.storage.removeItem(`${uid}.node.${id}`); }); this.storage.removeItem(`${uid}.nodes`); - JSON.parse(this.storage.getItem(`${uid}.edges`)).forEach((id) => { + this.getItem(`${uid}.edges`).forEach((id) => { this.storage.removeItem(`${uid}.edge.${id}`); }); this.storage.removeItem(`${uid}.edges`); diff --git a/dist/clue/graph/LocalStorageGraph.js.map b/dist/clue/graph/LocalStorageGraph.js.map index aea05c04a..75a2a772c 100644 --- a/dist/clue/graph/LocalStorageGraph.js.map +++ b/dist/clue/graph/LocalStorageGraph.js.map @@ -1 +1 @@ -{"version":3,"file":"LocalStorageGraph.js","sourceRoot":"","sources":["../../../src/clue/graph/LocalStorageGraph.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"LocalStorageGraph.js","sourceRoot":"","sources":["../../../src/clue/graph/LocalStorageGraph.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/clue/provenance/LocalStorageProvenanceGraphManager.d.ts b/dist/clue/provenance/LocalStorageProvenanceGraphManager.d.ts index 1c3f29413..fb0eccb58 100644 --- a/dist/clue/provenance/LocalStorageProvenanceGraphManager.d.ts +++ b/dist/clue/provenance/LocalStorageProvenanceGraphManager.d.ts @@ -24,6 +24,7 @@ export declare class LocalStorageProvenanceGraphManager implements IProvenanceGr private options; constructor(options?: ILocalStorageProvenanceGraphManagerOptions); private loadFromLocalStorage; + private setToLocalStorage; listSync(): IProvenanceGraphDataDescription[]; list(): Promise; getGraph(desc: IProvenanceGraphDataDescription): PromiseLike; diff --git a/dist/clue/provenance/LocalStorageProvenanceGraphManager.d.ts.map b/dist/clue/provenance/LocalStorageProvenanceGraphManager.d.ts.map index 98ca25a89..8d8f9b142 100644 --- a/dist/clue/provenance/LocalStorageProvenanceGraphManager.d.ts.map +++ b/dist/clue/provenance/LocalStorageProvenanceGraphManager.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LocalStorageProvenanceGraphManager.d.ts","sourceRoot":"","sources":["../../../src/clue/provenance/LocalStorageProvenanceGraphManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,oCAAoC,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,+BAA+B,EAAE,MAAM,QAAQ,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAK/D,MAAM,WAAW,0CAA2C,SAAQ,oCAAoC;IACtG;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,kCAAmC,YAAW,uBAAuB;IAChF,OAAO,CAAC,OAAO,CAKb;gBAEU,OAAO,GAAE,0CAA+C;IAIpE,OAAO,CAAC,oBAAoB;IAa5B,QAAQ,IAAI,+BAA+B,EAAE;IAU7C,IAAI;IAIJ,QAAQ,CAAC,IAAI,EAAE,+BAA+B,GAAG,WAAW,CAAC,iBAAiB,CAAC;IAIzE,GAAG,CAAC,IAAI,EAAE,+BAA+B,GAAG,OAAO,CAAC,eAAe,CAAC;IAIpE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,GAAE,GAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAWjE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,GAAE,GAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAOjE,MAAM,CAAC,IAAI,EAAE,+BAA+B;IAU5C,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,+BAA+B,EAAE,IAAI,GAAE,GAAQ;IAO7E,OAAO,CAAC,UAAU;IA6BlB,MAAM,CAAC,IAAI,GAAE,GAAQ;IAKrB,OAAO,CAAC,kBAAkB;IA0B1B,cAAc;IAKd,aAAa,CAAC,KAAK,EAAE,SAAS;CAM/B"} \ No newline at end of file +{"version":3,"file":"LocalStorageProvenanceGraphManager.d.ts","sourceRoot":"","sources":["../../../src/clue/provenance/LocalStorageProvenanceGraphManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,oCAAoC,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,+BAA+B,EAAE,MAAM,QAAQ,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAM/D,MAAM,WAAW,0CAA2C,SAAQ,oCAAoC;IACtG;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,kCAAmC,YAAW,uBAAuB;IAChF,OAAO,CAAC,OAAO,CAKb;gBAEU,OAAO,GAAE,0CAA+C;IAIpE,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,iBAAiB;IAIzB,QAAQ,IAAI,+BAA+B,EAAE;IAU7C,IAAI;IAIJ,QAAQ,CAAC,IAAI,EAAE,+BAA+B,GAAG,WAAW,CAAC,iBAAiB,CAAC;IAIzE,GAAG,CAAC,IAAI,EAAE,+BAA+B,GAAG,OAAO,CAAC,eAAe,CAAC;IAIpE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,GAAE,GAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAWjE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,GAAE,GAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAOjE,MAAM,CAAC,IAAI,EAAE,+BAA+B;IAU5C,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,+BAA+B,EAAE,IAAI,GAAE,GAAQ;IAO7E,OAAO,CAAC,UAAU;IA6BlB,MAAM,CAAC,IAAI,GAAE,GAAQ;IAKrB,OAAO,CAAC,kBAAkB;IA0B1B,cAAc;IAKd,aAAa,CAAC,KAAK,EAAE,SAAS;CAM/B"} \ No newline at end of file diff --git a/dist/clue/provenance/LocalStorageProvenanceGraphManager.js b/dist/clue/provenance/LocalStorageProvenanceGraphManager.js index eb3ed368d..d1831b9cb 100644 --- a/dist/clue/provenance/LocalStorageProvenanceGraphManager.js +++ b/dist/clue/provenance/LocalStorageProvenanceGraphManager.js @@ -5,6 +5,7 @@ import { LocalStorageGraph } from '../graph/LocalStorageGraph'; import { UserSession } from '../../app/UserSession'; import { Permission } from '../../security/Permission'; import { MemoryGraph } from '../graph/MemoryGraph'; +import { getCompressedFromStorage, setCompressedToStorage } from '../utils/Compression'; export class LocalStorageProvenanceGraphManager { constructor(options = {}) { this.options = { @@ -16,17 +17,10 @@ export class LocalStorageProvenanceGraphManager { merge(this.options, options); } loadFromLocalStorage(suffix, defaultValue) { - try { - const item = this.options.storage.getItem(this.options.prefix + suffix); - if (item === undefined || item === null) { - return defaultValue; - } - return JSON.parse(item); - } - catch (e) { - console.error(e); - return defaultValue; - } + return getCompressedFromStorage(this.options.storage, this.options.prefix + suffix, defaultValue); + } + setToLocalStorage(suffix, data) { + setCompressedToStorage(this.options.storage, this.options.prefix + suffix, data); } listSync() { const lists = this.loadFromLocalStorage('_provenance_graphs', []); @@ -61,22 +55,22 @@ export class LocalStorageProvenanceGraphManager { return new ProvenanceGraph(pdesc, newGraph); } delete(desc) { - const lists = JSON.parse(this.options.storage.getItem(`${this.options.prefix}_provenance_graphs`) || '[]'); + const lists = this.loadFromLocalStorage('_provenance_graphs', []); lists.splice(lists.indexOf(desc.id), 1); LocalStorageGraph.delete(desc, this.options.storage); // just remove from the list this.options.storage.removeItem(`${this.options.prefix}_provenance_graph.${desc.id}`); - this.options.storage.setItem(`${this.options.prefix}_provenance_graphs`, JSON.stringify(lists)); + this.setToLocalStorage('_provenance_graphs', lists); return Promise.resolve(true); } edit(graph, desc = {}) { const base = graph instanceof ProvenanceGraph ? graph.desc : graph; merge(base, desc); - this.options.storage.setItem(`${this.options.prefix}_provenance_graph.${base.id}`, JSON.stringify(base)); + this.setToLocalStorage(`_provenance_graph.${base.id}`, base); return Promise.resolve(base); } createDesc(overrides = {}) { - const lists = JSON.parse(this.options.storage.getItem(`${this.options.prefix}_provenance_graphs`) || '[]'); + const lists = this.loadFromLocalStorage('_provenance_graphs', []); const uid = lists.length > 0 ? String(1 + Math.max(...lists.map((d) => parseInt(d.slice(this.options.prefix.length), 10)))) : '0'; const id = this.options.prefix + uid; const desc = merge({ @@ -96,8 +90,8 @@ export class LocalStorageProvenanceGraphManager { description: '', }, overrides); lists.push(id); - this.options.storage.setItem(`${this.options.prefix}_provenance_graphs`, JSON.stringify(lists)); - this.options.storage.setItem(`${this.options.prefix}_provenance_graph.${id}`, JSON.stringify(desc)); + this.setToLocalStorage('_provenance_graphs', lists); + this.setToLocalStorage(`_provenance_graph.${id}`, desc); return desc; } create(desc = {}) { diff --git a/dist/clue/provenance/LocalStorageProvenanceGraphManager.js.map b/dist/clue/provenance/LocalStorageProvenanceGraphManager.js.map index a3284af87..564cd6cb7 100644 --- a/dist/clue/provenance/LocalStorageProvenanceGraphManager.js.map +++ b/dist/clue/provenance/LocalStorageProvenanceGraphManager.js.map @@ -1 +1 @@ -{"version":3,"file":"LocalStorageProvenanceGraphManager.js","sourceRoot":"","sources":["../../../src/clue/provenance/LocalStorageProvenanceGraphManager.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"LocalStorageProvenanceGraphManager.js","sourceRoot":"","sources":["../../../src/clue/provenance/LocalStorageProvenanceGraphManager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/clue/utils/Compression.d.ts b/dist/clue/utils/Compression.d.ts new file mode 100644 index 000000000..9d6fc3b32 --- /dev/null +++ b/dist/clue/utils/Compression.d.ts @@ -0,0 +1,3 @@ +export declare function getCompressedFromStorage(storage: Storage, key: string, defaultValue: T): T; +export declare function setCompressedToStorage(storage: Storage, key: string, data: T): void; +//# sourceMappingURL=Compression.d.ts.map \ No newline at end of file diff --git a/dist/clue/utils/Compression.d.ts.map b/dist/clue/utils/Compression.d.ts.map new file mode 100644 index 000000000..fdbd09daa --- /dev/null +++ b/dist/clue/utils/Compression.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Compression.d.ts","sourceRoot":"","sources":["../../../src/clue/utils/Compression.ts"],"names":[],"mappings":"AAEA,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAgB7F;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAEtF"} \ No newline at end of file diff --git a/dist/clue/utils/Compression.js b/dist/clue/utils/Compression.js new file mode 100644 index 000000000..9a73cf2df --- /dev/null +++ b/dist/clue/utils/Compression.js @@ -0,0 +1,24 @@ +import LZString from 'lz-string'; +export function getCompressedFromStorage(storage, key, defaultValue) { + try { + const item = storage.getItem(key); + if (item === undefined || item === null) { + return defaultValue; + } + try { + return JSON.parse(LZString.decompressFromUTF16(item)); + } + catch (e) { + // Error decoding the compressed value, falling back to just JSON parsing + } + return JSON.parse(item); + } + catch (e) { + console.error(e); + return defaultValue; + } +} +export function setCompressedToStorage(storage, key, data) { + storage.setItem(key, LZString.compressToUTF16(JSON.stringify(data))); +} +//# sourceMappingURL=Compression.js.map \ No newline at end of file diff --git a/dist/clue/utils/Compression.js.map b/dist/clue/utils/Compression.js.map new file mode 100644 index 000000000..8e0b23732 --- /dev/null +++ b/dist/clue/utils/Compression.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Compression.js","sourceRoot":"","sources":["../../../src/clue/utils/Compression.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,wBAAwB,CAAI,OAAgB,EAAE,GAAW,EAAE,YAAe;IACxF,IAAI;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;YACvC,OAAO,YAAY,CAAC;SACrB;QACD,IAAI;YACF,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;SACvD;QAAC,OAAO,CAAC,EAAE;YACV,yEAAyE;SAC1E;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KACzB;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,YAAY,CAAC;KACrB;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAI,OAAgB,EAAE,GAAW,EAAE,IAAO;IAC9E,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC"} \ No newline at end of file diff --git a/dist/clue/utils/index.d.ts b/dist/clue/utils/index.d.ts index b93103614..9db48f587 100644 --- a/dist/clue/utils/index.d.ts +++ b/dist/clue/utils/index.d.ts @@ -1,3 +1,4 @@ +export * from './Compression'; export * from './EditProvenanceGraphMenu'; export * from './ProvenanceGraphMenuUtils'; export * from './SessionList'; diff --git a/dist/clue/utils/index.d.ts.map b/dist/clue/utils/index.d.ts.map index 043843d42..e13e8c7ea 100644 --- a/dist/clue/utils/index.d.ts.map +++ b/dist/clue/utils/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clue/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clue/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC"} \ No newline at end of file diff --git a/dist/clue/utils/index.js b/dist/clue/utils/index.js index fd0df6497..49c52fb7b 100644 --- a/dist/clue/utils/index.js +++ b/dist/clue/utils/index.js @@ -1,3 +1,4 @@ +export * from './Compression'; export * from './EditProvenanceGraphMenu'; export * from './ProvenanceGraphMenuUtils'; export * from './SessionList'; diff --git a/dist/clue/utils/index.js.map b/dist/clue/utils/index.js.map index 90571f8b2..094341bfa 100644 --- a/dist/clue/utils/index.js.map +++ b/dist/clue/utils/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clue/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clue/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC"} \ No newline at end of file diff --git a/dist/components/dialogs.d.ts b/dist/components/dialogs.d.ts index 3f89af285..7a94c0c46 100644 --- a/dist/components/dialogs.d.ts +++ b/dist/components/dialogs.d.ts @@ -1,7 +1,6 @@ /// /// /// -/// /// import '../webpack/_bootstrap'; export interface IDialogOptions { diff --git a/dist/components/dialogs.d.ts.map b/dist/components/dialogs.d.ts.map index c1852161f..f3179283b 100644 --- a/dist/components/dialogs.d.ts.map +++ b/dist/components/dialogs.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../src/components/dialogs.ts"],"names":[],"mappings":";;;;;AAAA,OAAO,uBAAuB,CAAC;AAM/B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AACD,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,sBAAsB,CAAC;IAChG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,MAAM;IACjB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEnC,OAAO,CAAC,kBAAkB,CAAoC;IAE9D,MAAM,CAAC,WAAW,SAAK;IAEvB;;;;;;;;;;;;OAYG;gBACS,KAAK,EAAE,MAAM,EAAE,cAAc,SAAO,EAAE,oBAAoB,SAAK,EAAE,QAAQ,GAAE,OAAO,GAAG,QAAe;IA8BhH,IAAI;IAcJ,IAAI;IAKJ,IAAI,IAAI,gBAEP;IAED,IAAI,MAAM,gBAET;IAED,IAAI,MAAM,gBAET;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI;IAI3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG;IAI5B,YAAY;IAIZ,OAAO;IAOP,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,SAAO,EAAE,oBAAoB,SAAK;IAIrF,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1D;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAc,GAAG,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CAsCpF;AAGD,qBAAa,oBAAqB,SAAQ,MAAM;gBAClC,KAAK,EAAE,MAAM,EAAE,cAAc,SAAO,EAAE,MAAM,SAAiC,EAAE,oBAAoB,SAAK;IASpH,IAAI,IAAI,oBAEP;IAED,WAAW;IAIX,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO;IAIhC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,cAAc,GAAG,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAuCtF,MAAM,CAAC,UAAU,CAAC,GAAG,SAAK,EAAE,OAAO,GAAE,kBAAkB,GAAG,MAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CAkCzF"} \ No newline at end of file +{"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../src/components/dialogs.ts"],"names":[],"mappings":";;;;AAAA,OAAO,uBAAuB,CAAC;AAM/B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AACD,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,sBAAsB,CAAC;IAChG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,MAAM;IACjB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEnC,OAAO,CAAC,kBAAkB,CAAoC;IAE9D,MAAM,CAAC,WAAW,SAAK;IAEvB;;;;;;;;;;;;OAYG;gBACS,KAAK,EAAE,MAAM,EAAE,cAAc,SAAO,EAAE,oBAAoB,SAAK,EAAE,QAAQ,GAAE,OAAO,GAAG,QAAe;IA8BhH,IAAI;IAcJ,IAAI;IAKJ,IAAI,IAAI,gBAEP;IAED,IAAI,MAAM,gBAET;IAED,IAAI,MAAM,gBAET;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI;IAI3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG;IAI5B,YAAY;IAIZ,OAAO;IAOP,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,SAAO,EAAE,oBAAoB,SAAK;IAIrF,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1D;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAc,GAAG,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CAsCpF;AAGD,qBAAa,oBAAqB,SAAQ,MAAM;gBAClC,KAAK,EAAE,MAAM,EAAE,cAAc,SAAO,EAAE,MAAM,SAAiC,EAAE,oBAAoB,SAAK;IASpH,IAAI,IAAI,oBAEP;IAED,WAAW;IAIX,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO;IAIhC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,cAAc,GAAG,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAuCtF,MAAM,CAAC,UAAU,CAAC,GAAG,SAAK,EAAE,OAAO,GAAE,kBAAkB,GAAG,MAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CAkCzF"} \ No newline at end of file diff --git a/dist/lineup/Ranking.d.ts b/dist/lineup/Ranking.d.ts index 8905d9138..a2510c020 100644 --- a/dist/lineup/Ranking.d.ts +++ b/dist/lineup/Ranking.d.ts @@ -1,3 +1,4 @@ +/// import { LocalDataProvider, IColumnDesc } from 'lineupjs'; import { ILazyLoadedColumn } from './internal/column'; import { EViewMode, IAdditionalColumnDesc, IScoreRow, ISelection } from '../base/interfaces'; diff --git a/dist/lineup/Ranking.d.ts.map b/dist/lineup/Ranking.d.ts.map index 1c2b66426..be61ca7cc 100644 --- a/dist/lineup/Ranking.d.ts.map +++ b/dist/lineup/Ranking.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Ranking.d.ts","sourceRoot":"","sources":["../../src/lineup/Ranking.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,iBAAiB,EAajB,WAAW,EAGZ,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,iBAAiB,EAAc,MAAM,mBAAmB,CAAC;AAKlE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAU,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAoB,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAoB9D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,WAAW,GAAG;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,aAAa,EAAE,UAAU,CAAC;IAC1B,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAElC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC;IAElE,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClF,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAE/C,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,CAAC,cAAc,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/D,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACvD;AAiED,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC3D,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,OAAO,CAAC,EACtB,IAAS,EACT,aAAyC,EACzC,UAAe,EACf,OAAO,EAAE,IAAS,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,aAAa;AACb;;GAEG;AACH,gBAAgB,GACjB,EAAE,aAAa,eAuYf"} \ No newline at end of file +{"version":3,"file":"Ranking.d.ts","sourceRoot":"","sources":["../../src/lineup/Ranking.tsx"],"names":[],"mappings":";AAGA,OAAO,EAEL,iBAAiB,EAajB,WAAW,EAGZ,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,iBAAiB,EAAc,MAAM,mBAAmB,CAAC;AAKlE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAU,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAoB,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAoB9D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,WAAW,GAAG;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,aAAa,EAAE,UAAU,CAAC;IAC1B,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAElC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC;IAElE,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClF,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAE/C,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,CAAC,cAAc,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/D,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACvD;AAiED,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC3D,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,OAAO,CAAC,EACtB,IAAS,EACT,aAAyC,EACzC,UAAe,EACf,OAAO,EAAE,IAAS,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,aAAa;AACb;;GAEG;AACH,gBAAgB,GACjB,EAAE,aAAa,eAuYf"} \ No newline at end of file diff --git a/package.json b/package.json index e8f2ae27f..95b4abe18 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "jquery": "~3.5.1", "lineupjs": "~4.6.0", "lodash": "~4.17.20", + "lz-string": "^1.4.4", "marked": "~3.0.2", "md5": "^2.3.0", "papaparse": "~5.3.0", @@ -110,6 +111,7 @@ "@types/d3": "~3.5.36", "@types/jest": "~27.4.1", "@types/jquery": "~3.5.5", + "@types/lz-string": "^1.3.34", "@types/select2": "4.0.44", "@types/papaparse": "~5.2.4", "@types/plotly.js-dist-min": "^2.3.0", diff --git a/src/clue/graph/LocalStorageGraph.ts b/src/clue/graph/LocalStorageGraph.ts index 5af8ac37b..9e627b3a2 100644 --- a/src/clue/graph/LocalStorageGraph.ts +++ b/src/clue/graph/LocalStorageGraph.ts @@ -1,6 +1,7 @@ import { IEvent } from '../../base/event'; import { GraphBase, IGraphFactory } from './GraphBase'; import { GraphEdge, GraphNode, IGraph, IGraphDataDescription } from './graph'; +import { setCompressedToStorage, getCompressedFromStorage } from '../utils/Compression'; export class LocalStorageGraph extends GraphBase implements IGraph { private storage: Storage; @@ -15,21 +16,29 @@ export class LocalStorageGraph extends GraphBase implements IGraph { } }; + private setItem(key: string, value: T): void { + setCompressedToStorage(this.storage, key, value); + } + + private getItem(key: string): any { + return getCompressedFromStorage(this.storage, key, null); + } + constructor(desc: IGraphDataDescription, nodes: GraphNode[] = [], edges: GraphEdge[] = [], storage: Storage = sessionStorage) { super(desc, nodes, edges); this.storage = storage; const { uid } = this; if (nodes.length > 0 || edges.length > 0) { - this.storage.setItem(`${uid}.nodes`, JSON.stringify(nodes.map((d) => d.id))); + this.setItem(`${uid}.nodes`, JSON.stringify(nodes.map((d) => d.id))); nodes.forEach((n) => { - this.storage.setItem(`${uid}.node.${n.id}`, JSON.stringify(n.persist())); + this.setItem(`${uid}.node.${n.id}`, JSON.stringify(n.persist())); n.on('setAttr', this.updateHandler); }); - this.storage.setItem(`${uid}.edges`, JSON.stringify(edges.map((d) => d.id))); + this.setItem(`${uid}.edges`, JSON.stringify(edges.map((d) => d.id))); edges.forEach((e) => { - this.storage.setItem(`${uid}.edge.${e.id}`, JSON.stringify(e.persist())); + this.setItem(`${uid}.edge.${e.id}`, JSON.stringify(e.persist())); e.on('setAttr', this.updateHandler); }); } @@ -67,21 +76,21 @@ export class LocalStorageGraph extends GraphBase implements IGraph { private load(factory: IGraphFactory) { const { uid } = this; - if (this.storage.getItem(`${uid}.nodes`) == null) { + if (this.getItem(`${uid}.nodes`) == null) { return; } - const nodeIds: string[] = JSON.parse(this.storage.getItem(`${uid}.nodes`)); + const nodeIds: string[] = this.getItem(`${uid}.nodes`); const lookup = new Map(); nodeIds.forEach((id) => { - const n = JSON.parse(this.storage.getItem(`${uid}.node.${id}`)); + const n = this.getItem(`${uid}.node.${id}`); const nn = factory.makeNode(n); lookup.set(nn.id, nn); nn.on('setAttr', this.updateHandler); super.addNode(nn); }); - const edgeIds: string[] = JSON.parse(this.storage.getItem(`${uid}.edges`)); + const edgeIds: string[] = this.getItem(`${uid}.edges`); edgeIds.forEach((id) => { - const n = JSON.parse(this.storage.getItem(`${uid}.edge.${id}`)); + const n = this.getItem(`${uid}.edge.${id}`); const nn = factory.makeEdge(n, lookup.get.bind(lookup)); nn.on('setAttr', this.updateHandler); super.addEdge(nn); @@ -125,8 +134,8 @@ export class LocalStorageGraph extends GraphBase implements IGraph { addNode(n: GraphNode) { super.addNode(n); const { uid } = this; - this.storage.setItem(`${uid}.node.${n.id}`, JSON.stringify(n.persist())); - this.storage.setItem(`${uid}.nodes`, JSON.stringify(this.nodes.map((d) => d.id))); + this.setItem(`${uid}.node.${n.id}`, n.persist()); + this.setItem(`${uid}.nodes`, this.nodes.map((d) => d.id)); n.on('setAttr', this.updateHandler); return this; } @@ -134,7 +143,7 @@ export class LocalStorageGraph extends GraphBase implements IGraph { updateNode(n: GraphNode): any { super.updateNode(n); const { uid } = this; - this.storage.setItem(`${uid}.node.${n.id}`, JSON.stringify(n.persist())); + this.setItem(`${uid}.node.${n.id}`, n.persist()); return this; } @@ -143,7 +152,7 @@ export class LocalStorageGraph extends GraphBase implements IGraph { return null; } const { uid } = this; - this.storage.setItem(`${uid}.nodes`, JSON.stringify(this.nodes.map((d) => d.id))); + this.setItem(`${uid}.nodes`, this.nodes.map((d) => d.id)); this.storage.removeItem(`${uid}.node.${n.id}`); n.off('setAttr', this.updateHandler); @@ -155,8 +164,8 @@ export class LocalStorageGraph extends GraphBase implements IGraph { super.addEdge(edgeOrSource); const e = edgeOrSource; const { uid } = this; - this.storage.setItem(`${uid}.edges`, JSON.stringify(this.edges.map((d) => d.id))); - this.storage.setItem(`${uid}.edge.${e.id}`, JSON.stringify(e.persist())); + this.setItem(`${uid}.edges`, this.edges.map((d) => d.id)); + this.setItem(`${uid}.edge.${e.id}`, e.persist()); e.on('setAttr', this.updateHandler); return this; } @@ -169,7 +178,7 @@ export class LocalStorageGraph extends GraphBase implements IGraph { } // need to shift all const { uid } = this; - this.storage.setItem(`${uid}.edges`, JSON.stringify(this.edges.map((d) => d.id))); + this.setItem(`${uid}.edges`, this.edges.map((d) => d.id)); this.storage.removeItem(`${uid}.edge.${e.id}`); e.off('setAttr', this.updateHandler); return this; @@ -178,7 +187,7 @@ export class LocalStorageGraph extends GraphBase implements IGraph { updateEdge(e: GraphEdge): any { super.updateEdge(e); const { uid } = this; - this.storage.setItem(`${uid}.edge.${e.id}`, JSON.stringify(e.persist())); + this.setItem(`${uid}.edge.${e.id}`, e.persist()); return this; } @@ -192,11 +201,11 @@ export class LocalStorageGraph extends GraphBase implements IGraph { this.edges.forEach((n) => n.off('setAttr', this.updateHandler)); super.clear(); const { uid } = this; - JSON.parse(this.storage.getItem(`${uid}.nodes`)).forEach((id: string) => { + this.getItem(`${uid}.nodes`).forEach((id: string) => { this.storage.removeItem(`${uid}.node.${id}`); }); this.storage.removeItem(`${uid}.nodes`); - JSON.parse(this.storage.getItem(`${uid}.edges`)).forEach((id: string) => { + this.getItem(`${uid}.edges`).forEach((id: string) => { this.storage.removeItem(`${uid}.edge.${id}`); }); this.storage.removeItem(`${uid}.edges`); diff --git a/src/clue/provenance/LocalStorageProvenanceGraphManager.ts b/src/clue/provenance/LocalStorageProvenanceGraphManager.ts index b6ced852f..9ff260868 100644 --- a/src/clue/provenance/LocalStorageProvenanceGraphManager.ts +++ b/src/clue/provenance/LocalStorageProvenanceGraphManager.ts @@ -8,6 +8,7 @@ import { LocalStorageGraph } from '../graph/LocalStorageGraph'; import { UserSession } from '../../app/UserSession'; import { Permission } from '../../security/Permission'; import { MemoryGraph } from '../graph/MemoryGraph'; +import { getCompressedFromStorage, setCompressedToStorage } from '../utils/Compression'; export interface ILocalStorageProvenanceGraphManagerOptions extends ICommonProvenanceGraphManagerOptions { /** @@ -42,16 +43,11 @@ export class LocalStorageProvenanceGraphManager implements IProvenanceGraphManag } private loadFromLocalStorage(suffix: string, defaultValue: T): T { - try { - const item = this.options.storage.getItem(this.options.prefix + suffix); - if (item === undefined || item === null) { - return defaultValue; - } - return JSON.parse(item); - } catch (e) { - console.error(e); - return defaultValue; - } + return getCompressedFromStorage(this.options.storage, this.options.prefix + suffix, defaultValue); + } + + private setToLocalStorage(suffix: string, data: T): void { + setCompressedToStorage(this.options.storage, this.options.prefix + suffix, data); } listSync(): IProvenanceGraphDataDescription[] { @@ -95,24 +91,24 @@ export class LocalStorageProvenanceGraphManager implements IProvenanceGraphManag } delete(desc: IProvenanceGraphDataDescription) { - const lists = JSON.parse(this.options.storage.getItem(`${this.options.prefix}_provenance_graphs`) || '[]'); + const lists: string[] = this.loadFromLocalStorage('_provenance_graphs', []); lists.splice(lists.indexOf(desc.id), 1); LocalStorageGraph.delete(desc, this.options.storage); // just remove from the list this.options.storage.removeItem(`${this.options.prefix}_provenance_graph.${desc.id}`); - this.options.storage.setItem(`${this.options.prefix}_provenance_graphs`, JSON.stringify(lists)); + this.setToLocalStorage('_provenance_graphs', lists); return Promise.resolve(true); } edit(graph: ProvenanceGraph | IProvenanceGraphDataDescription, desc: any = {}) { const base = graph instanceof ProvenanceGraph ? graph.desc : graph; merge(base, desc); - this.options.storage.setItem(`${this.options.prefix}_provenance_graph.${base.id}`, JSON.stringify(base)); + this.setToLocalStorage(`_provenance_graph.${base.id}`, base); return Promise.resolve(base); } private createDesc(overrides: any = {}) { - const lists: string[] = JSON.parse(this.options.storage.getItem(`${this.options.prefix}_provenance_graphs`) || '[]'); + const lists: string[] = this.loadFromLocalStorage('_provenance_graphs', []); const uid = lists.length > 0 ? String(1 + Math.max(...lists.map((d) => parseInt(d.slice(this.options.prefix.length), 10)))) : '0'; const id = this.options.prefix + uid; const desc: IProvenanceGraphDataDescription = merge( @@ -135,8 +131,8 @@ export class LocalStorageProvenanceGraphManager implements IProvenanceGraphManag overrides, ); lists.push(id); - this.options.storage.setItem(`${this.options.prefix}_provenance_graphs`, JSON.stringify(lists)); - this.options.storage.setItem(`${this.options.prefix}_provenance_graph.${id}`, JSON.stringify(desc)); + this.setToLocalStorage('_provenance_graphs', lists); + this.setToLocalStorage(`_provenance_graph.${id}`, desc); return desc; } diff --git a/src/clue/utils/Compression.ts b/src/clue/utils/Compression.ts new file mode 100644 index 000000000..dfe4281b8 --- /dev/null +++ b/src/clue/utils/Compression.ts @@ -0,0 +1,23 @@ +import LZString from 'lz-string'; + +export function getCompressedFromStorage(storage: Storage, key: string, defaultValue: T): T { + try { + const item = storage.getItem(key); + if (item === undefined || item === null) { + return defaultValue; + } + try { + return JSON.parse(LZString.decompressFromUTF16(item)); + } catch (e) { + // Error decoding the compressed value, falling back to just JSON parsing + } + return JSON.parse(item); + } catch (e) { + console.error(e); + return defaultValue; + } +} + +export function setCompressedToStorage(storage: Storage, key: string, data: T): void { + storage.setItem(key, LZString.compressToUTF16(JSON.stringify(data))); +} diff --git a/src/clue/utils/index.ts b/src/clue/utils/index.ts index 5734e0f15..4fec953a7 100644 --- a/src/clue/utils/index.ts +++ b/src/clue/utils/index.ts @@ -1,3 +1,4 @@ +export * from './Compression'; export * from './EditProvenanceGraphMenu'; export * from './ProvenanceGraphMenuUtils'; export * from './SessionList';