@graphty/graph-io 0.3.19 → 0.3.21
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/README.md +49 -4
- package/dist/chunks/{escape-CWExcecC.js → escape-B-tkk_Cl.js} +74 -16
- package/dist/chunks/escape-B-tkk_Cl.js.map +1 -0
- package/dist/chunks/{writer-DQiKgQJc.js → export-Bh60Dv-n.js} +5 -79
- package/dist/chunks/export-Bh60Dv-n.js.map +1 -0
- package/dist/chunks/{exporter-CbMZyVt-.js → exporter-BGrsWamJ.js} +7 -6
- package/dist/chunks/{exporter-CbMZyVt-.js.map → exporter-BGrsWamJ.js.map} +1 -1
- package/dist/chunks/exporter-DIeGJXAZ.js +834 -0
- package/dist/chunks/exporter-DIeGJXAZ.js.map +1 -0
- package/dist/chunks/{importer-BNFuV1-K.js → importer-BWY2FFc5.js} +28 -7
- package/dist/chunks/importer-BWY2FFc5.js.map +1 -0
- package/dist/chunks/importer-DD-xv9_Y.js +1471 -0
- package/dist/chunks/importer-DD-xv9_Y.js.map +1 -0
- package/dist/chunks/{importer-BAP4PrxR.js → importer-DET1tg6s.js} +30 -20
- package/dist/chunks/importer-DET1tg6s.js.map +1 -0
- package/dist/chunks/{importer-ByPGO-09.js → importer-DEcKhsmQ.js} +2 -2
- package/dist/chunks/{importer-ByPGO-09.js.map → importer-DEcKhsmQ.js.map} +1 -1
- package/dist/chunks/{importer-BW-Ft2ps.js → importer-DIrbbnAf.js} +6 -5
- package/dist/chunks/{importer-BW-Ft2ps.js.map → importer-DIrbbnAf.js.map} +1 -1
- package/dist/chunks/importer-D_e7e7LX.js +3055 -0
- package/dist/chunks/importer-D_e7e7LX.js.map +1 -0
- package/dist/chunks/{importer-Bm1_5vPS.js → importer-eUREhBGj.js} +11 -8
- package/dist/chunks/importer-eUREhBGj.js.map +1 -0
- package/dist/chunks/{importer-DOepkgnG.js → importer-vi3bSdtw.js} +4 -4
- package/dist/chunks/{importer-DOepkgnG.js.map → importer-vi3bSdtw.js.map} +1 -1
- package/dist/chunks/{importer-BVGtU1NA.js → importer-zGLo8Dg_.js} +6 -5
- package/dist/chunks/{importer-BVGtU1NA.js.map → importer-zGLo8Dg_.js.map} +1 -1
- package/dist/chunks/{json-elements-CZY1wiZh.js → json-elements-DDS8N2Dd.js} +2 -2
- package/dist/chunks/{json-elements-CZY1wiZh.js.map → json-elements-DDS8N2Dd.js.map} +1 -1
- package/dist/chunks/{records-BzNicMsf.js → records-dbRkxwaq.js} +2 -2
- package/dist/chunks/{records-BzNicMsf.js.map → records-dbRkxwaq.js.map} +1 -1
- package/dist/chunks/{report-BcWboivV.js → report-B1z4WT9e.js} +143 -111
- package/dist/chunks/{report-BcWboivV.js.map → report-B1z4WT9e.js.map} +1 -1
- package/dist/chunks/{weights-CwISIpCP.js → weights-Dzba96G3.js} +5 -5
- package/dist/chunks/{weights-CwISIpCP.js.map → weights-Dzba96G3.js.map} +1 -1
- package/dist/chunks/writer-C7flM-Ih.js +77 -0
- package/dist/chunks/writer-C7flM-Ih.js.map +1 -0
- package/dist/csv.js +6 -5
- package/dist/csv.js.map +1 -1
- package/dist/cx.js +1 -1
- package/dist/cx2.js +2 -2
- package/dist/cys.d.ts +1 -0
- package/dist/cys.js +6 -0
- package/dist/cys.js.map +1 -0
- package/dist/dot.js +1 -1
- package/dist/gexf.js +5 -4
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +12 -14
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +288 -141
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +1 -1
- package/dist/json.js +1 -1
- package/dist/neo4j.js +6 -5
- package/dist/neo4j.js.map +1 -1
- package/dist/obo.js +1 -1
- package/dist/pajek.js +1 -1
- package/dist/src/common/cell-budget.d.ts +84 -0
- package/dist/src/common/cell-budget.d.ts.map +1 -0
- package/dist/src/common/cell-budget.js +138 -0
- package/dist/src/common/cell-budget.js.map +1 -0
- package/dist/src/common/input.d.ts +10 -0
- package/dist/src/common/input.d.ts.map +1 -1
- package/dist/src/common/input.js +39 -0
- package/dist/src/common/input.js.map +1 -1
- package/dist/src/common/options.d.ts +6 -0
- package/dist/src/common/options.d.ts.map +1 -1
- package/dist/src/common/options.js +1 -1
- package/dist/src/common/options.js.map +1 -1
- package/dist/src/common/xml.d.ts +37 -3
- package/dist/src/common/xml.d.ts.map +1 -1
- package/dist/src/common/xml.js +86 -6
- package/dist/src/common/xml.js.map +1 -1
- package/dist/src/common/zip.d.ts +92 -0
- package/dist/src/common/zip.d.ts.map +1 -0
- package/dist/src/common/zip.js +399 -0
- package/dist/src/common/zip.js.map +1 -0
- package/dist/src/formats/cx/importer.d.ts.map +1 -1
- package/dist/src/formats/cx/importer.js +26 -17
- package/dist/src/formats/cx/importer.js.map +1 -1
- package/dist/src/formats/cys/constants.d.ts +68 -0
- package/dist/src/formats/cys/constants.d.ts.map +1 -0
- package/dist/src/formats/cys/constants.js +76 -0
- package/dist/src/formats/cys/constants.js.map +1 -0
- package/dist/src/formats/cys/importer.d.ts +38 -0
- package/dist/src/formats/cys/importer.d.ts.map +1 -0
- package/dist/src/formats/cys/importer.js +830 -0
- package/dist/src/formats/cys/importer.js.map +1 -0
- package/dist/src/formats/cys/index.d.ts +7 -0
- package/dist/src/formats/cys/index.d.ts.map +1 -0
- package/dist/src/formats/cys/index.js +7 -0
- package/dist/src/formats/cys/index.js.map +1 -0
- package/dist/src/formats/cys/session.d.ts +132 -0
- package/dist/src/formats/cys/session.d.ts.map +1 -0
- package/dist/src/formats/cys/session.js +315 -0
- package/dist/src/formats/cys/session.js.map +1 -0
- package/dist/src/formats/cys/tables.d.ts +90 -0
- package/dist/src/formats/cys/tables.d.ts.map +1 -0
- package/dist/src/formats/cys/tables.js +293 -0
- package/dist/src/formats/cys/tables.js.map +1 -0
- package/dist/src/formats/dot/exporter.d.ts +2 -0
- package/dist/src/formats/dot/exporter.d.ts.map +1 -1
- package/dist/src/formats/dot/exporter.js +12 -0
- package/dist/src/formats/dot/exporter.js.map +1 -1
- package/dist/src/formats/dot/importer.js +6 -2
- package/dist/src/formats/dot/importer.js.map +1 -1
- package/dist/src/formats/gexf/importer.d.ts +2 -2
- package/dist/src/formats/gexf/importer.d.ts.map +1 -1
- package/dist/src/formats/gexf/importer.js +1 -1
- package/dist/src/formats/gexf/importer.js.map +1 -1
- package/dist/src/formats/gml/exporter.d.ts +0 -8
- package/dist/src/formats/gml/exporter.d.ts.map +1 -1
- package/dist/src/formats/gml/exporter.js +7 -17
- package/dist/src/formats/gml/exporter.js.map +1 -1
- package/dist/src/formats/json/exporter.d.ts.map +1 -1
- package/dist/src/formats/json/exporter.js +3 -1
- package/dist/src/formats/json/exporter.js.map +1 -1
- package/dist/src/formats/json/importer.d.ts.map +1 -1
- package/dist/src/formats/json/importer.js +3 -2
- package/dist/src/formats/json/importer.js.map +1 -1
- package/dist/src/formats/xgmml/columns.d.ts +152 -0
- package/dist/src/formats/xgmml/columns.d.ts.map +1 -0
- package/dist/src/formats/xgmml/columns.js +593 -0
- package/dist/src/formats/xgmml/columns.js.map +1 -0
- package/dist/src/formats/xgmml/constants.d.ts +196 -0
- package/dist/src/formats/xgmml/constants.d.ts.map +1 -0
- package/dist/src/formats/xgmml/constants.js +197 -0
- package/dist/src/formats/xgmml/constants.js.map +1 -0
- package/dist/src/formats/xgmml/document.d.ts +361 -0
- package/dist/src/formats/xgmml/document.d.ts.map +1 -0
- package/dist/src/formats/xgmml/document.js +695 -0
- package/dist/src/formats/xgmml/document.js.map +1 -0
- package/dist/src/formats/xgmml/emit.d.ts +341 -0
- package/dist/src/formats/xgmml/emit.d.ts.map +1 -0
- package/dist/src/formats/xgmml/emit.js +1275 -0
- package/dist/src/formats/xgmml/emit.js.map +1 -0
- package/dist/src/formats/xgmml/exporter.d.ts +24 -0
- package/dist/src/formats/xgmml/exporter.d.ts.map +1 -0
- package/dist/src/formats/xgmml/exporter.js +999 -0
- package/dist/src/formats/xgmml/exporter.js.map +1 -0
- package/dist/src/formats/xgmml/importer.d.ts +58 -0
- package/dist/src/formats/xgmml/importer.d.ts.map +1 -0
- package/dist/src/formats/xgmml/importer.js +360 -0
- package/dist/src/formats/xgmml/importer.js.map +1 -0
- package/dist/src/formats/xgmml/index.d.ts +8 -0
- package/dist/src/formats/xgmml/index.d.ts.map +1 -0
- package/dist/src/formats/xgmml/index.js +8 -0
- package/dist/src/formats/xgmml/index.js.map +1 -0
- package/dist/src/formats/xgmml/values.d.ts +60 -0
- package/dist/src/formats/xgmml/values.d.ts.map +1 -0
- package/dist/src/formats/xgmml/values.js +148 -0
- package/dist/src/formats/xgmml/values.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/registry.d.ts +7 -0
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +25 -10
- package/dist/src/registry.js.map +1 -1
- package/dist/src/sniff.d.ts +1 -1
- package/dist/src/sniff.d.ts.map +1 -1
- package/dist/src/sniff.js +2 -0
- package/dist/src/sniff.js.map +1 -1
- package/dist/xgmml.d.ts +1 -0
- package/dist/xgmml.js +9 -0
- package/dist/xgmml.js.map +1 -0
- package/package.json +15 -2
- package/src/common/cell-budget.ts +170 -0
- package/src/common/input.ts +40 -0
- package/src/common/options.ts +1 -1
- package/src/common/xml.ts +127 -6
- package/src/common/zip.ts +472 -0
- package/src/formats/cx/importer.ts +27 -19
- package/src/formats/cys/constants.ts +99 -0
- package/src/formats/cys/importer.ts +1100 -0
- package/src/formats/cys/index.ts +7 -0
- package/src/formats/cys/session.ts +428 -0
- package/src/formats/cys/tables.ts +400 -0
- package/src/formats/dot/exporter.ts +17 -0
- package/src/formats/dot/importer.ts +6 -2
- package/src/formats/gexf/importer.ts +0 -1
- package/src/formats/gml/exporter.ts +7 -18
- package/src/formats/json/exporter.ts +3 -1
- package/src/formats/json/importer.ts +3 -2
- package/src/formats/xgmml/columns.ts +747 -0
- package/src/formats/xgmml/constants.ts +265 -0
- package/src/formats/xgmml/document.ts +975 -0
- package/src/formats/xgmml/emit.ts +1563 -0
- package/src/formats/xgmml/exporter.ts +1215 -0
- package/src/formats/xgmml/importer.ts +491 -0
- package/src/formats/xgmml/index.ts +8 -0
- package/src/formats/xgmml/values.ts +183 -0
- package/src/index.ts +9 -0
- package/src/registry.ts +41 -15
- package/src/sniff.ts +5 -1
- package/dist/chunks/escape-CWExcecC.js.map +0 -1
- package/dist/chunks/importer-BAP4PrxR.js.map +0 -1
- package/dist/chunks/importer-BNFuV1-K.js.map +0 -1
- package/dist/chunks/importer-Bm1_5vPS.js.map +0 -1
- package/dist/chunks/writer-DQiKgQJc.js.map +0 -1
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A zip reader with no dependency (design `design/graph-io/cytoscape-and-obo/design.md` section
|
|
3
|
+
* 3.3; PKWARE APPNOTE 6.3.10, https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT), for
|
|
4
|
+
* the Cytoscape session importer.
|
|
5
|
+
*
|
|
6
|
+
* The whole archive is in memory: every Cytoscape-written entry has a data descriptor and zero
|
|
7
|
+
* sizes in its local header, so the sizes come from the central directory at the end. The end
|
|
8
|
+
* record is searched in the last 65,557 bytes (a comment can be 65,535 bytes long); the zip64
|
|
9
|
+
* locator and the `0x0001` extra field are followed; bytes prepended to the archive (a
|
|
10
|
+
* self-extracting stub) are tolerated by the shift between the directory's stated and actual
|
|
11
|
+
* offsets. Deflate (method 8) is inflated by wrapping the raw deflate bytes in a gzip member
|
|
12
|
+
* (header, data, the directory's CRC-32 and size) and passing it to `DecompressionStream("gzip")`,
|
|
13
|
+
* which every supported runtime has (Node 18, unlike `"deflate-raw"`) and which checks the CRC and
|
|
14
|
+
* the length itself; stored entries (method 0) are checked against a CRC-32 table here. Every
|
|
15
|
+
* other method, and encryption, is refused by name. Entry names are decoded by `decodeEntryName()`
|
|
16
|
+
* (the one place bytes become text) and are matching keys only, never paths.
|
|
17
|
+
*/
|
|
18
|
+
import { decodeEntryName, throwIfAborted } from "./input.js";
|
|
19
|
+
/** A zip that cannot be read, or an entry that cannot be inflated. */
|
|
20
|
+
export class ZipError extends Error {
|
|
21
|
+
/**
|
|
22
|
+
* Create the error.
|
|
23
|
+
* @param kind - what went wrong
|
|
24
|
+
* @param message - a plain-ASCII message
|
|
25
|
+
*/
|
|
26
|
+
constructor(kind, message) {
|
|
27
|
+
super(message);
|
|
28
|
+
this.name = "ZipError";
|
|
29
|
+
this.kind = kind;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** A per-entry size under which the ratio limit does not apply (tiny entries compress well). */
|
|
33
|
+
export const RATIO_FLOOR = 1024 * 1024;
|
|
34
|
+
const EOCD_SIGNATURE = 0x06054b50;
|
|
35
|
+
const ZIP64_LOCATOR_SIGNATURE = 0x07064b50;
|
|
36
|
+
const ZIP64_EOCD_SIGNATURE = 0x06064b50;
|
|
37
|
+
const CENTRAL_SIGNATURE = 0x02014b50;
|
|
38
|
+
const LOCAL_SIGNATURE = 0x04034b50;
|
|
39
|
+
const EOCD_SIZE = 22;
|
|
40
|
+
const MAX_COMMENT = 65535;
|
|
41
|
+
const CENTRAL_SIZE = 46;
|
|
42
|
+
const LOCAL_SIZE = 30;
|
|
43
|
+
const ZIP64_EOCD_SIZE = 56;
|
|
44
|
+
const ZIP64_LOCATOR_SIZE = 20;
|
|
45
|
+
const U16_MAX = 0xffff;
|
|
46
|
+
const U32_MAX = 0xffffffff;
|
|
47
|
+
/** Bytes between two cancellation checks while a stored entry's CRC is computed. */
|
|
48
|
+
const CRC_SLICE = 1024 * 1024;
|
|
49
|
+
/** The compression methods other tools write, by number, for the refusal message. */
|
|
50
|
+
const METHOD_NAMES = {
|
|
51
|
+
1: "shrink",
|
|
52
|
+
6: "implode",
|
|
53
|
+
9: "deflate64",
|
|
54
|
+
12: "bzip2",
|
|
55
|
+
14: "LZMA",
|
|
56
|
+
93: "zstd",
|
|
57
|
+
95: "xz",
|
|
58
|
+
96: "JPEG",
|
|
59
|
+
97: "WavPack",
|
|
60
|
+
98: "PPMd",
|
|
61
|
+
99: "AES encryption",
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Whether bytes start with a local file header signature (`PK\x03\x04`).
|
|
65
|
+
* @param bytes - the bytes
|
|
66
|
+
* @returns true for the start of a zip
|
|
67
|
+
*/
|
|
68
|
+
export function startsLikeZip(bytes) {
|
|
69
|
+
return bytes.byteLength >= 4 && bytes[0] === 0x50 && bytes[1] === 0x4b && bytes[2] === 3 && bytes[3] === 4;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Read the central directory.
|
|
73
|
+
* @param bytes - the whole archive
|
|
74
|
+
* @returns the entries in directory order; ZipError "not-zip" when there is no end record and the
|
|
75
|
+
* bytes do not start like a zip, "corrupt" for an end record or directory that does not fit,
|
|
76
|
+
* "unsupported" for a split archive
|
|
77
|
+
*/
|
|
78
|
+
export function readZipDirectory(bytes) {
|
|
79
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
80
|
+
const eocd = findEndRecord(bytes, view);
|
|
81
|
+
if (eocd < 0) {
|
|
82
|
+
throw startsLikeZip(bytes)
|
|
83
|
+
? new ZipError("corrupt", "the archive has no end of central directory record (truncated?)")
|
|
84
|
+
: new ZipError("not-zip", "the input is not a zip archive");
|
|
85
|
+
}
|
|
86
|
+
let disk = view.getUint16(eocd + 4, true);
|
|
87
|
+
let directoryDisk = view.getUint16(eocd + 6, true);
|
|
88
|
+
let count = view.getUint16(eocd + 10, true);
|
|
89
|
+
let directorySize = view.getUint32(eocd + 12, true);
|
|
90
|
+
let directoryOffset = view.getUint32(eocd + 16, true);
|
|
91
|
+
let directoryEnd = eocd;
|
|
92
|
+
const locator = eocd - ZIP64_LOCATOR_SIZE;
|
|
93
|
+
if (locator >= 0 && view.getUint32(locator, true) === ZIP64_LOCATOR_SIGNATURE) {
|
|
94
|
+
const record = zip64EndRecord(view, locator);
|
|
95
|
+
disk = view.getUint32(record + 16, true);
|
|
96
|
+
directoryDisk = view.getUint32(record + 20, true);
|
|
97
|
+
count = readU64(view, record + 32);
|
|
98
|
+
directorySize = readU64(view, record + 40);
|
|
99
|
+
directoryOffset = readU64(view, record + 48);
|
|
100
|
+
directoryEnd = record;
|
|
101
|
+
}
|
|
102
|
+
else if (count === U16_MAX || directorySize === U32_MAX || directoryOffset === U32_MAX) {
|
|
103
|
+
throw new ZipError("corrupt", "the end record needs a zip64 record the archive does not have");
|
|
104
|
+
}
|
|
105
|
+
if (disk !== 0 || directoryDisk !== 0) {
|
|
106
|
+
throw new ZipError("unsupported", "a split (multi-disk) archive cannot be read");
|
|
107
|
+
}
|
|
108
|
+
const start = directoryEnd - directorySize;
|
|
109
|
+
if (start < 0 || directoryOffset > bytes.byteLength) {
|
|
110
|
+
throw new ZipError("corrupt", "the central directory lies outside the archive");
|
|
111
|
+
}
|
|
112
|
+
// data prepended to the archive moves every offset by the same amount
|
|
113
|
+
const shift = start - directoryOffset;
|
|
114
|
+
if (shift < 0) {
|
|
115
|
+
throw new ZipError("corrupt", "the central directory offset does not match its position");
|
|
116
|
+
}
|
|
117
|
+
const entries = [];
|
|
118
|
+
let at = start;
|
|
119
|
+
for (let i = 0; i < count; i++) {
|
|
120
|
+
if (at + CENTRAL_SIZE > directoryEnd || view.getUint32(at, true) !== CENTRAL_SIGNATURE) {
|
|
121
|
+
throw new ZipError("corrupt", `central directory entry ${i + 1} of ${count} is damaged`);
|
|
122
|
+
}
|
|
123
|
+
const nameLength = view.getUint16(at + 28, true);
|
|
124
|
+
const extraLength = view.getUint16(at + 30, true);
|
|
125
|
+
const commentLength = view.getUint16(at + 32, true);
|
|
126
|
+
const next = at + CENTRAL_SIZE + nameLength + extraLength + commentLength;
|
|
127
|
+
if (next > directoryEnd) {
|
|
128
|
+
throw new ZipError("corrupt", `central directory entry ${i + 1} runs past the directory`);
|
|
129
|
+
}
|
|
130
|
+
const name = decodeEntryName(bytes.subarray(at + CENTRAL_SIZE, at + CENTRAL_SIZE + nameLength));
|
|
131
|
+
let compressedSize = view.getUint32(at + 20, true);
|
|
132
|
+
let size = view.getUint32(at + 24, true);
|
|
133
|
+
let localOffset = view.getUint32(at + 42, true);
|
|
134
|
+
if (compressedSize === U32_MAX || size === U32_MAX || localOffset === U32_MAX) {
|
|
135
|
+
({ compressedSize, size, localOffset } = zip64Extra(view, at + CENTRAL_SIZE + nameLength, extraLength, {
|
|
136
|
+
compressedSize,
|
|
137
|
+
size,
|
|
138
|
+
localOffset,
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
entries.push(Object.freeze({
|
|
142
|
+
name,
|
|
143
|
+
method: view.getUint16(at + 10, true),
|
|
144
|
+
flags: view.getUint16(at + 8, true),
|
|
145
|
+
crc32: view.getUint32(at + 16, true),
|
|
146
|
+
compressedSize,
|
|
147
|
+
size,
|
|
148
|
+
localOffset: localOffset + shift,
|
|
149
|
+
directory: name.endsWith("/"),
|
|
150
|
+
}));
|
|
151
|
+
at = next;
|
|
152
|
+
}
|
|
153
|
+
return entries;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* The position of the end of central directory record: the last signature whose comment length
|
|
157
|
+
* fits the archive, else the last signature at all (an archive with bytes after its comment).
|
|
158
|
+
* @param bytes - the archive
|
|
159
|
+
* @param view - a view of it
|
|
160
|
+
* @returns the offset, or -1
|
|
161
|
+
*/
|
|
162
|
+
function findEndRecord(bytes, view) {
|
|
163
|
+
const lowest = Math.max(0, bytes.byteLength - EOCD_SIZE - MAX_COMMENT);
|
|
164
|
+
let fallback = -1;
|
|
165
|
+
for (let at = bytes.byteLength - EOCD_SIZE; at >= lowest; at--) {
|
|
166
|
+
if (view.getUint32(at, true) !== EOCD_SIGNATURE) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (at + EOCD_SIZE + view.getUint16(at + 20, true) === bytes.byteLength) {
|
|
170
|
+
return at;
|
|
171
|
+
}
|
|
172
|
+
if (fallback < 0) {
|
|
173
|
+
fallback = at;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return fallback;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* The zip64 end of central directory record a locator points at (or, when the archive has bytes
|
|
180
|
+
* prepended, the one right before the locator).
|
|
181
|
+
* @param view - the archive
|
|
182
|
+
* @param locator - the locator's offset
|
|
183
|
+
* @returns the record's offset
|
|
184
|
+
*/
|
|
185
|
+
function zip64EndRecord(view, locator) {
|
|
186
|
+
const stated = readU64(view, locator + 8);
|
|
187
|
+
for (const at of [stated, locator - ZIP64_EOCD_SIZE]) {
|
|
188
|
+
if (at >= 0 && at + ZIP64_EOCD_SIZE <= locator && view.getUint32(at, true) === ZIP64_EOCD_SIGNATURE) {
|
|
189
|
+
return at;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
throw new ZipError("corrupt", "the zip64 end record the locator names is missing");
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The zip64 extended information extra field (header id 0x0001) of a central entry: the 64-bit
|
|
196
|
+
* values of the fields whose 32-bit slot is 0xFFFFFFFF, in the order APPNOTE 4.5.3 gives.
|
|
197
|
+
* @param view - the archive
|
|
198
|
+
* @param at - the start of the extra field
|
|
199
|
+
* @param length - its length
|
|
200
|
+
* @param fields - the 32-bit values
|
|
201
|
+
* @param fields.compressedSize - the compressed size slot
|
|
202
|
+
* @param fields.size - the uncompressed size slot
|
|
203
|
+
* @param fields.localOffset - the local header offset slot
|
|
204
|
+
* @returns the resolved values
|
|
205
|
+
*/
|
|
206
|
+
function zip64Extra(view, at, length, fields) {
|
|
207
|
+
const out = { ...fields };
|
|
208
|
+
for (let p = at; p + 4 <= at + length;) {
|
|
209
|
+
const id = view.getUint16(p, true);
|
|
210
|
+
const dataLength = view.getUint16(p + 2, true);
|
|
211
|
+
if (id === 1) {
|
|
212
|
+
let q = p + 4;
|
|
213
|
+
const end = q + dataLength;
|
|
214
|
+
for (const key of ["size", "compressedSize", "localOffset"]) {
|
|
215
|
+
if (fields[key] === U32_MAX) {
|
|
216
|
+
if (q + 8 > end) {
|
|
217
|
+
throw new ZipError("corrupt", "a zip64 extra field is too short");
|
|
218
|
+
}
|
|
219
|
+
out[key] = readU64(view, q);
|
|
220
|
+
q += 8;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return out;
|
|
224
|
+
}
|
|
225
|
+
p += 4 + dataLength;
|
|
226
|
+
}
|
|
227
|
+
throw new ZipError("corrupt", "an entry needs a zip64 extra field it does not have");
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* An unsigned 64-bit little-endian integer as a number (exact up to 2^53).
|
|
231
|
+
* @param view - the bytes
|
|
232
|
+
* @param at - the offset
|
|
233
|
+
* @returns the value; ZipError "unsupported" beyond 2^53
|
|
234
|
+
*/
|
|
235
|
+
function readU64(view, at) {
|
|
236
|
+
const high = view.getUint32(at + 4, true);
|
|
237
|
+
if (high >= 0x200000) {
|
|
238
|
+
throw new ZipError("unsupported", "a zip64 size or offset beyond 2^53 cannot be read");
|
|
239
|
+
}
|
|
240
|
+
return high * 0x100000000 + view.getUint32(at, true);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Read one entry's data: stored entries are sliced and CRC-checked, deflated ones inflated.
|
|
244
|
+
* @param bytes - the whole archive
|
|
245
|
+
* @param entry - the entry
|
|
246
|
+
* @param options - cancellation, progress and the size limits
|
|
247
|
+
* @returns the uncompressed bytes; ZipError for a damaged, encrypted, unsupported or oversized entry
|
|
248
|
+
*/
|
|
249
|
+
export async function readZipEntry(bytes, entry, options) {
|
|
250
|
+
if ((entry.flags & 1) !== 0 || entry.method === 99) {
|
|
251
|
+
throw new ZipError("unsupported", `${entry.name}: the entry is encrypted`);
|
|
252
|
+
}
|
|
253
|
+
if (entry.method !== 0 && entry.method !== 8) {
|
|
254
|
+
const name = METHOD_NAMES[entry.method] ?? `method ${entry.method}`;
|
|
255
|
+
throw new ZipError("unsupported", `${entry.name}: compression ${name} is not supported (only stored and deflate)`);
|
|
256
|
+
}
|
|
257
|
+
if (entry.size > options.maxBytes) {
|
|
258
|
+
throw new ZipError("too-large", `${entry.name}: ${entry.size} uncompressed bytes exceed the limit of ${options.maxBytes}`);
|
|
259
|
+
}
|
|
260
|
+
if (entry.size > RATIO_FLOOR && entry.size > options.maxRatio * Math.max(entry.compressedSize, 1)) {
|
|
261
|
+
throw new ZipError("too-large", `${entry.name}: ${entry.size} bytes from ${entry.compressedSize} is a compression ratio above ${options.maxRatio}:1`);
|
|
262
|
+
}
|
|
263
|
+
const data = entryData(bytes, entry);
|
|
264
|
+
if (entry.method === 0) {
|
|
265
|
+
if (data.byteLength !== entry.size) {
|
|
266
|
+
throw new ZipError("corrupt", `${entry.name}: a stored entry's sizes disagree`);
|
|
267
|
+
}
|
|
268
|
+
let crc = 0xffffffff;
|
|
269
|
+
for (let at = 0; at < data.byteLength; at += CRC_SLICE) {
|
|
270
|
+
throwIfAborted(options.signal);
|
|
271
|
+
crc = crcUpdate(crc, data.subarray(at, Math.min(at + CRC_SLICE, data.byteLength)));
|
|
272
|
+
options.onBytes?.(Math.min(at + CRC_SLICE, data.byteLength));
|
|
273
|
+
}
|
|
274
|
+
if ((crc ^ 0xffffffff) >>> 0 !== entry.crc32) {
|
|
275
|
+
throw new ZipError("corrupt", `${entry.name}: the data does not match its CRC-32`);
|
|
276
|
+
}
|
|
277
|
+
return data;
|
|
278
|
+
}
|
|
279
|
+
return inflate(data, entry, options);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* The compressed bytes of an entry, located through its local header (whose name and extra
|
|
283
|
+
* lengths can differ from the central directory's).
|
|
284
|
+
* @param bytes - the archive
|
|
285
|
+
* @param entry - the entry
|
|
286
|
+
* @returns exactly compressedSize bytes
|
|
287
|
+
*/
|
|
288
|
+
function entryData(bytes, entry) {
|
|
289
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
290
|
+
const at = entry.localOffset;
|
|
291
|
+
if (at + LOCAL_SIZE > bytes.byteLength || view.getUint32(at, true) !== LOCAL_SIGNATURE) {
|
|
292
|
+
throw new ZipError("corrupt", `${entry.name}: the local header is missing`);
|
|
293
|
+
}
|
|
294
|
+
const start = at + LOCAL_SIZE + view.getUint16(at + 26, true) + view.getUint16(at + 28, true);
|
|
295
|
+
const end = start + entry.compressedSize;
|
|
296
|
+
if (end > bytes.byteLength) {
|
|
297
|
+
throw new ZipError("corrupt", `${entry.name}: the entry's data runs past the end of the archive (truncated?)`);
|
|
298
|
+
}
|
|
299
|
+
return bytes.subarray(start, end);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Inflate a deflate stream through `DecompressionStream("gzip")`, wrapped in a gzip member that
|
|
303
|
+
* carries the directory's CRC-32 and size, so the platform checks both.
|
|
304
|
+
* @param data - the raw deflate bytes
|
|
305
|
+
* @param entry - the entry
|
|
306
|
+
* @param options - cancellation, progress and limits
|
|
307
|
+
* @returns the bytes
|
|
308
|
+
*/
|
|
309
|
+
async function inflate(data, entry, options) {
|
|
310
|
+
if (typeof DecompressionStream !== "function") {
|
|
311
|
+
throw new ZipError("unsupported", "this runtime has no DecompressionStream, so deflated entries cannot be read");
|
|
312
|
+
}
|
|
313
|
+
const member = new Uint8Array(10 + data.byteLength + 8);
|
|
314
|
+
member.set([0x1f, 0x8b, 8, 0, 0, 0, 0, 0, 0, 0xff]);
|
|
315
|
+
member.set(data, 10);
|
|
316
|
+
const trailer = new DataView(member.buffer, 10 + data.byteLength, 8);
|
|
317
|
+
trailer.setUint32(0, entry.crc32, true);
|
|
318
|
+
trailer.setUint32(4, entry.size % 0x100000000, true);
|
|
319
|
+
const source = new ReadableStream({
|
|
320
|
+
start(controller) {
|
|
321
|
+
controller.enqueue(member);
|
|
322
|
+
controller.close();
|
|
323
|
+
},
|
|
324
|
+
});
|
|
325
|
+
const reader = source.pipeThrough(new DecompressionStream("gzip")).getReader();
|
|
326
|
+
const parts = [];
|
|
327
|
+
let total = 0;
|
|
328
|
+
try {
|
|
329
|
+
for (;;) {
|
|
330
|
+
throwIfAborted(options.signal);
|
|
331
|
+
let chunk;
|
|
332
|
+
try {
|
|
333
|
+
chunk = await reader.read();
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
throw new ZipError("corrupt", `${entry.name}: the deflate data is damaged or does not match its CRC-32 and size`);
|
|
337
|
+
}
|
|
338
|
+
if (chunk.done) {
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
total += chunk.value.byteLength;
|
|
342
|
+
if (total > entry.size) {
|
|
343
|
+
throw new ZipError("corrupt", `${entry.name}: the data is longer than its directory size`);
|
|
344
|
+
}
|
|
345
|
+
parts.push(chunk.value);
|
|
346
|
+
options.onBytes?.(total);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
finally {
|
|
350
|
+
await reader.cancel().catch(() => undefined);
|
|
351
|
+
}
|
|
352
|
+
if (total !== entry.size) {
|
|
353
|
+
throw new ZipError("corrupt", `${entry.name}: the data is shorter than its directory size`);
|
|
354
|
+
}
|
|
355
|
+
if (parts.length === 1) {
|
|
356
|
+
return parts[0];
|
|
357
|
+
}
|
|
358
|
+
const out = new Uint8Array(total);
|
|
359
|
+
let at = 0;
|
|
360
|
+
for (const part of parts) {
|
|
361
|
+
out.set(part, at);
|
|
362
|
+
at += part.byteLength;
|
|
363
|
+
}
|
|
364
|
+
return out;
|
|
365
|
+
}
|
|
366
|
+
/** The CRC-32 table (polynomial 0xEDB88320). */
|
|
367
|
+
const CRC_TABLE = (() => {
|
|
368
|
+
const table = new Uint32Array(256);
|
|
369
|
+
for (let n = 0; n < 256; n++) {
|
|
370
|
+
let c = n;
|
|
371
|
+
for (let k = 0; k < 8; k++) {
|
|
372
|
+
c = (c & 1) === 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
373
|
+
}
|
|
374
|
+
table[n] = c >>> 0;
|
|
375
|
+
}
|
|
376
|
+
return table;
|
|
377
|
+
})();
|
|
378
|
+
/**
|
|
379
|
+
* Continue a CRC-32 over more bytes.
|
|
380
|
+
* @param crc - the running value (start with 0xFFFFFFFF)
|
|
381
|
+
* @param bytes - the bytes
|
|
382
|
+
* @returns the running value (XOR with 0xFFFFFFFF to finish)
|
|
383
|
+
*/
|
|
384
|
+
function crcUpdate(crc, bytes) {
|
|
385
|
+
let c = crc;
|
|
386
|
+
for (const byte of bytes) {
|
|
387
|
+
c = CRC_TABLE[(c ^ byte) & 0xff] ^ (c >>> 8);
|
|
388
|
+
}
|
|
389
|
+
return c >>> 0;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* The CRC-32 of bytes.
|
|
393
|
+
* @param bytes - the bytes
|
|
394
|
+
* @returns the checksum
|
|
395
|
+
*/
|
|
396
|
+
export function crc32(bytes) {
|
|
397
|
+
return (crcUpdate(0xffffffff, bytes) ^ 0xffffffff) >>> 0;
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=zip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip.js","sourceRoot":"","sources":["../../../src/common/zip.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../../src/formats/cx/importer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAiFH,OAAO,EAEH,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAIrB,MAAM,gBAAgB,CAAC;AASxB,sDAAsD;AACtD,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACvD;;;OAGG;IACH,GAAG,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;CAC3C;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ;IACjB,kCAAkC;;IAElC,oCAAoC;;IAEpC,6BAA6B;;IAE7B,gFAAgF;;IAEhF,0DAA0D;;IAE1D,0DAA0D;;IAE1D,mFAAmF;;IAEnF,4EAA4E;;IAE5E,gGAAgG;;IAEhG,wEAAwE;;IAExE,iHAAiH;;IAEjH,0DAA0D;;IAE1D,yEAAyE;;IAEzE,qGAAqG;;IAErG,+EAA+E;;IAE/E,6DAA6D;;IAE7D,uEAAuE;;IAEvE,kFAAkF;;IAElF,iEAAiE;;IAEjE,gGAAgG;;IAEhG,qGAAqG;;IAErG,qCAAqC;;IAErC,mEAAmE;;IAEnE,0EAA0E;;IAE1E,6BAA6B;;IAE7B,8BAA8B;;IAE9B,kEAAkE;;IAElE,6DAA6D;;IAE7D,oCAAoC;;IAEpC,yFAAyF;;IAEzF,qCAAqC;;IAErC,+EAA+E;;IAE/E,2FAA2F;;IAE3F,iDAAiD;;IAEjD,wEAAwE;;IAExE,2DAA2D;;IAE3D,mDAAmD;;IAEnD,wCAAwC;;IAExC,mDAAmD;;IAEnD,mEAAmE;;IAEnE,sCAAsC;;IAEtC,8CAA8C;;IAE9C,yCAAyC;;IAEzC,0DAA0D;;IAE1D,gDAAgD;;EAElD,CAAC;
|
|
1
|
+
{"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../../src/formats/cx/importer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAiFH,OAAO,EAEH,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAIrB,MAAM,gBAAgB,CAAC;AASxB,sDAAsD;AACtD,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACvD;;;OAGG;IACH,GAAG,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;CAC3C;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ;IACjB,kCAAkC;;IAElC,oCAAoC;;IAEpC,6BAA6B;;IAE7B,gFAAgF;;IAEhF,0DAA0D;;IAE1D,0DAA0D;;IAE1D,mFAAmF;;IAEnF,4EAA4E;;IAE5E,gGAAgG;;IAEhG,wEAAwE;;IAExE,iHAAiH;;IAEjH,0DAA0D;;IAE1D,yEAAyE;;IAEzE,qGAAqG;;IAErG,+EAA+E;;IAE/E,6DAA6D;;IAE7D,uEAAuE;;IAEvE,kFAAkF;;IAElF,iEAAiE;;IAEjE,gGAAgG;;IAEhG,qGAAqG;;IAErG,qCAAqC;;IAErC,mEAAmE;;IAEnE,0EAA0E;;IAE1E,6BAA6B;;IAE7B,8BAA8B;;IAE9B,kEAAkE;;IAElE,6DAA6D;;IAE7D,oCAAoC;;IAEpC,yFAAyF;;IAEzF,qCAAqC;;IAErC,+EAA+E;;IAE/E,2FAA2F;;IAE3F,iDAAiD;;IAEjD,wEAAwE;;IAExE,2DAA2D;;IAE3D,mDAAmD;;IAEnD,wCAAwC;;IAExC,mDAAmD;;IAEnD,mEAAmE;;IAEnE,sCAAsC;;IAEtC,8CAA8C;;IAE9C,yCAAyC;;IAEzC,0DAA0D;;IAE1D,gDAAgD;;EAElD,CAAC;AA82EH;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,eAAe,CAoGpD,CAAC"}
|
|
@@ -930,6 +930,15 @@ class CxReader {
|
|
|
930
930
|
inGraph(id) {
|
|
931
931
|
return this.plan.nodes === null || this.plan.nodes.has(id);
|
|
932
932
|
}
|
|
933
|
+
/**
|
|
934
|
+
* The key of the node and edge row maps for a CX id as an aspect writes it: the id the `ids`
|
|
935
|
+
* option makes of it, which is what idOf() stored the element under.
|
|
936
|
+
* @param raw - the CX id
|
|
937
|
+
* @returns the row key
|
|
938
|
+
*/
|
|
939
|
+
key(raw) {
|
|
940
|
+
return this.options.ids === "keep" ? raw : this.coercer.value(raw);
|
|
941
|
+
}
|
|
933
942
|
/**
|
|
934
943
|
* Whether a scoped value applies to this graph: unscoped, or scoped to its subnetwork. A scope
|
|
935
944
|
* naming no subnetwork is counted as dangling.
|
|
@@ -1188,9 +1197,7 @@ class CxReader {
|
|
|
1188
1197
|
continue;
|
|
1189
1198
|
}
|
|
1190
1199
|
const target = refId(value.po);
|
|
1191
|
-
const row = target === null
|
|
1192
|
-
? undefined
|
|
1193
|
-
: rows.get(this.options.ids === "keep" ? target : this.coercer.value(target));
|
|
1200
|
+
const row = target === null ? undefined : rows.get(this.key(target));
|
|
1194
1201
|
if (row === undefined) {
|
|
1195
1202
|
if (target === null || !root.has(target)) {
|
|
1196
1203
|
this.dangle(`${domain} attribute target`);
|
|
@@ -1345,7 +1352,8 @@ class CxReader {
|
|
|
1345
1352
|
report.counts.skippedNodes++;
|
|
1346
1353
|
continue;
|
|
1347
1354
|
}
|
|
1348
|
-
|
|
1355
|
+
// membership lists hold CX ids as written, before the ids option coerces them
|
|
1356
|
+
if (!this.inGraph(refId(value["@id"]) ?? id)) {
|
|
1349
1357
|
continue;
|
|
1350
1358
|
}
|
|
1351
1359
|
let row = this.nodeRows.get(id);
|
|
@@ -1427,19 +1435,19 @@ class CxReader {
|
|
|
1427
1435
|
});
|
|
1428
1436
|
continue;
|
|
1429
1437
|
}
|
|
1430
|
-
let groupRow = this.nodeRows.get(id);
|
|
1438
|
+
let groupRow = this.nodeRows.get(this.key(id));
|
|
1431
1439
|
if (groupRow === undefined) {
|
|
1432
1440
|
if (this.rootNodes.has(id) || !this.hasMemberIn(value.nodes)) {
|
|
1433
1441
|
continue;
|
|
1434
1442
|
}
|
|
1435
1443
|
try {
|
|
1436
|
-
groupRow = this.sink.addNode(id);
|
|
1444
|
+
groupRow = this.sink.addNode(this.key(id));
|
|
1437
1445
|
}
|
|
1438
1446
|
catch (err) {
|
|
1439
1447
|
this.report.recordError(err, { line, element: String(id) });
|
|
1440
1448
|
continue;
|
|
1441
1449
|
}
|
|
1442
|
-
this.nodeRows.set(id, groupRow);
|
|
1450
|
+
this.nodeRows.set(this.key(id), groupRow);
|
|
1443
1451
|
this.report.counts.nodes++;
|
|
1444
1452
|
this.report.warning("coercion", CX_ISSUE.GROUP_NODE_ADDED, `group ${String(id)} is not a node; its group node is added`, { line, element: String(id) });
|
|
1445
1453
|
}
|
|
@@ -1451,7 +1459,7 @@ class CxReader {
|
|
|
1451
1459
|
}
|
|
1452
1460
|
for (const raw of Array.isArray(value.nodes) ? value.nodes : []) {
|
|
1453
1461
|
const member = refId(raw);
|
|
1454
|
-
const row = member === null ? undefined : this.nodeRows.get(member);
|
|
1462
|
+
const row = member === null ? undefined : this.nodeRows.get(this.key(member));
|
|
1455
1463
|
if (row === undefined) {
|
|
1456
1464
|
if (member === null || !this.rootNodes.has(member)) {
|
|
1457
1465
|
this.report.error("missing-value", UNKNOWN_PARENT_CODE, `group ${String(id)}: the member ${shown(raw)} is not a node`, { line, element: String(id) });
|
|
@@ -1491,7 +1499,7 @@ class CxReader {
|
|
|
1491
1499
|
return (Array.isArray(raw) &&
|
|
1492
1500
|
raw.some((item) => {
|
|
1493
1501
|
const id = refId(item);
|
|
1494
|
-
return id !== null && this.nodeRows.has(id);
|
|
1502
|
+
return id !== null && this.nodeRows.has(this.key(id));
|
|
1495
1503
|
}));
|
|
1496
1504
|
}
|
|
1497
1505
|
/**
|
|
@@ -1570,7 +1578,7 @@ class CxReader {
|
|
|
1570
1578
|
continue;
|
|
1571
1579
|
}
|
|
1572
1580
|
const node = refId(value.node);
|
|
1573
|
-
const row = node === null ? undefined : this.nodeRows.get(node);
|
|
1581
|
+
const row = node === null ? undefined : this.nodeRows.get(this.key(node));
|
|
1574
1582
|
if (row === undefined) {
|
|
1575
1583
|
if (node === null || !this.rootNodes.has(node)) {
|
|
1576
1584
|
this.dangle("layout entry");
|
|
@@ -1666,7 +1674,7 @@ class CxReader {
|
|
|
1666
1674
|
report.counts.skippedEdges++;
|
|
1667
1675
|
continue;
|
|
1668
1676
|
}
|
|
1669
|
-
if (members !== null && !members.has(id)) {
|
|
1677
|
+
if (members !== null && !members.has(refId(value["@id"]) ?? id)) {
|
|
1670
1678
|
continue;
|
|
1671
1679
|
}
|
|
1672
1680
|
if (value.s === undefined || value.s === null || value.t === undefined || value.t === null) {
|
|
@@ -1767,7 +1775,7 @@ class CxReader {
|
|
|
1767
1775
|
if (isRecord(value) && this.scopePeek(value.s) !== 0) {
|
|
1768
1776
|
const po = refId(value.po);
|
|
1769
1777
|
if (po !== null && value.v !== undefined && value.v !== null) {
|
|
1770
|
-
this.weights.set(po, plainJson(value.v));
|
|
1778
|
+
this.weights.set(this.key(po), plainJson(value.v));
|
|
1771
1779
|
}
|
|
1772
1780
|
}
|
|
1773
1781
|
}
|
|
@@ -1860,7 +1868,8 @@ class CxReader {
|
|
|
1860
1868
|
case "edges": {
|
|
1861
1869
|
const domain = value.properties_of === "nodes" ? "node" : "edge";
|
|
1862
1870
|
const target = refId(value.applies_to);
|
|
1863
|
-
const
|
|
1871
|
+
const rows = domain === "node" ? this.nodeRows : this.edgeRows;
|
|
1872
|
+
const row = target === null ? undefined : rows.get(this.key(target));
|
|
1864
1873
|
if (row === undefined) {
|
|
1865
1874
|
if (target === null || !(domain === "node" ? this.rootNodes : this.rootEdges).has(target)) {
|
|
1866
1875
|
this.dangle(`${domain} visual property entry`);
|
|
@@ -1946,7 +1955,7 @@ class CxReader {
|
|
|
1946
1955
|
continue;
|
|
1947
1956
|
}
|
|
1948
1957
|
const po = refId(value.po);
|
|
1949
|
-
const row = po === null ? undefined : this.nodeRows.get(po);
|
|
1958
|
+
const row = po === null ? undefined : this.nodeRows.get(this.key(po));
|
|
1950
1959
|
if (row === undefined) {
|
|
1951
1960
|
if (po === null || !this.rootNodes.has(po)) {
|
|
1952
1961
|
this.dangle("functionTerms entry");
|
|
@@ -1964,8 +1973,8 @@ class CxReader {
|
|
|
1964
1973
|
}
|
|
1965
1974
|
const node = refId(value.node);
|
|
1966
1975
|
const edge = refId(value.edge);
|
|
1967
|
-
const row = node === null ? undefined : this.nodeRows.get(node);
|
|
1968
|
-
const edgeRow = edge === null ? undefined : this.edgeRows.get(edge);
|
|
1976
|
+
const row = node === null ? undefined : this.nodeRows.get(this.key(node));
|
|
1977
|
+
const edgeRow = edge === null ? undefined : this.edgeRows.get(this.key(edge));
|
|
1969
1978
|
if (row === undefined || edgeRow === undefined) {
|
|
1970
1979
|
if (node === null || !this.rootNodes.has(node) || edge === null || !this.rootEdges.has(edge)) {
|
|
1971
1980
|
this.dangle("reifiedEdges entry");
|
|
@@ -2032,7 +2041,7 @@ class CxReader {
|
|
|
2032
2041
|
.map(Number);
|
|
2033
2042
|
for (const raw of targets) {
|
|
2034
2043
|
const target = refId(raw);
|
|
2035
|
-
const row = target === null ? undefined : rows.get(target);
|
|
2044
|
+
const row = target === null ? undefined : rows.get(this.key(target));
|
|
2036
2045
|
if (row === undefined) {
|
|
2037
2046
|
if (target === null || !root.has(target)) {
|
|
2038
2047
|
this.dangle(`${aspectName} entry`);
|