Skip to content

Commit 71cf0e8

Browse files
author
Thom
committed
refactor!: major cleanup
1 parent e884bb3 commit 71cf0e8

28 files changed

+586
-358
lines changed

package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@
4848
"n-quads-parser": "^2.1.1"
4949
},
5050
"devDependencies": {
51-
"@ontola/memoized-factory": "^2.0.1",
52-
"@ontola/memoized-hash-factory": "^2.0.1",
51+
"@ontola/memoized-hash-factory": "^2.1.0",
5352
"@ontologies/as": "^2.0.0",
5453
"@ontologies/core": "^2.0.2",
5554
"@ontologies/dcterms": "^2.0.0",

src/RDFStore.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import {
1818
} from "./rdf";
1919
import { deltaProcessor } from "./store/deltaProcessor";
2020
import { RDFAdapter } from "./store/RDFAdapter";
21-
import RDFIndex from "./store/RDFIndex";
2221
import { DataRecord, Id } from "./store/types";
2322
import { DeltaProcessor, SomeNode, StoreProcessor } from "./types";
2423
import { getPropBestLang, normalizeType, sortByBestLang } from "./utilities";
@@ -28,7 +27,7 @@ const EMPTY_ST_ARR: ReadonlyArray<Quadruple> = Object.freeze([]);
2827
export interface RDFStoreOpts {
2928
data?: Record<Id, DataRecord>;
3029
deltaProcessorOpts?: { [k: string]: NamedNode[] };
31-
innerStore?: RDFIndex;
30+
innerStore?: RDFAdapter;
3231
}
3332

3433
/**
@@ -43,7 +42,7 @@ export class RDFStore implements DeltaProcessor {
4342
private deltas: Quadruple[][] = [];
4443
private deltaProcessor: StoreProcessor;
4544

46-
private store: RDFIndex = new RDFIndex({
45+
private store: RDFAdapter = new RDFAdapter({
4746
onChange: this.handleChange.bind(this),
4847
});
4948

@@ -59,7 +58,7 @@ export class RDFStore implements DeltaProcessor {
5958
constructor({ data, deltaProcessorOpts, innerStore }: RDFStoreOpts = {}) {
6059
this.processDelta = this.processDelta.bind(this);
6160

62-
this.store = innerStore || new RDFIndex({ data, onChange: this.handleChange.bind(this) });
61+
this.store = innerStore || new RDFAdapter({ data, onChange: this.handleChange.bind(this) });
6362

6463
const defaults = {
6564
addGraphIRIS: [ll.add, ld.add],
@@ -144,12 +143,12 @@ export class RDFStore implements DeltaProcessor {
144143
}
145144

146145
/** @private */
147-
public getInternalStore(): RDFIndex {
146+
public getInternalStore(): RDFAdapter {
148147
return this.store;
149148
}
150149

151150
public references(recordId: SomeNode): Id[] {
152-
return this.store.references(recordId);
151+
return this.store.store.references(recordId.value);
153152
}
154153

155154
/** @deprecated */

src/Schema.ts

-12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { NamedNode, SomeTerm } from "@ontologies/core";
21
import * as rdfx from "@ontologies/rdf";
32
import * as rdfs from "@ontologies/rdfs";
43

@@ -10,7 +9,6 @@ import { DisjointSet } from "./utilities/DisjointSet";
109

1110
import { RDFStore } from "./RDFStore";
1211
import {
13-
SomeNode,
1412
VocabularyProcessingContext,
1513
VocabularyProcessor,
1614
} from "./types";
@@ -61,16 +59,6 @@ export class Schema {
6159
return [recordId];
6260
}
6361

64-
/** @private */
65-
public holds(recordId: SomeNode, field: NamedNode, value: SomeTerm): boolean {
66-
return !!this.liveStore.getInternalStore().match(
67-
recordId,
68-
field,
69-
value,
70-
true,
71-
)[0];
72-
}
73-
7462
/** @private */
7563
public isInstanceOf(recordId: Id, klass: Id): boolean {
7664
const type = this.liveStore.getInternalStore().store.getField(recordId, rdfx.type.value);

src/__tests__/LinkedRenderStore.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import "jest";
22
import "./useFactory";
33

4-
import rdfFactory, { QuadPosition, Quadruple } from "@ontologies/core";
4+
import rdfFactory, { Quadruple } from "@ontologies/core";
55
import * as owl from "@ontologies/owl";
66
import * as rdf from "@ontologies/rdf";
77
import * as schema from "@ontologies/schema";

src/__tests__/RDFStore.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import * as xsd from "@ontologies/xsd";
1010

1111
import ll from "../ontology/ll";
1212
import { RDFStore } from "../RDFStore";
13-
import RDFIndex from "../store/RDFIndex";
13+
import { RDFAdapter } from "../store/RDFAdapter";
1414
import { getBasicStore } from "../testUtilities";
1515

1616
const example = createNS("http://example.com/");
@@ -100,7 +100,7 @@ describe("RDFStore", () => {
100100

101101
describe("#getInternalStore", () => {
102102
it("returns the store", () => {
103-
expect(new RDFStore().getInternalStore()).toBeInstanceOf(RDFIndex);
103+
expect(new RDFStore().getInternalStore()).toBeInstanceOf(RDFAdapter);
104104
});
105105
});
106106

src/__tests__/Schema.spec.ts

+7
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ describe("Schema", () => {
6464
schemaNS.Thing.value,
6565
rdfs.Resource.value,
6666
]);
67+
expect(schema.expand([schemaNS.BlogPosting.value, schemaNS.Person.value])).toEqual([
68+
schemaNS.BlogPosting.value,
69+
schemaNS.Person.value,
70+
schemaNS.CreativeWork.value,
71+
schemaNS.Thing.value,
72+
rdfs.Resource.value,
73+
]);
6774
});
6875

6976
describe("when empty", () => {

src/__tests__/TypedRecord.spec.ts

+155
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
import "./useFactory";
2+
3+
import "jest";
4+
import { AttributeKey, TypedRecord } from "../TypedRecord";
5+
6+
describe("TypedRecord", () => {
7+
const keya = new AttributeKey("a");
8+
const keyb = new AttributeKey("b");
9+
const keyc = new AttributeKey("c");
10+
11+
it("gets nonexisting key", () => {
12+
const record = new TypedRecord();
13+
14+
expect(record.get(keya)).toBeUndefined();
15+
});
16+
17+
it("gets the size", () => {
18+
const record = new TypedRecord();
19+
expect(record.size).toBe(0);
20+
21+
record.set(keya, "");
22+
expect(record.size).toBe(1);
23+
});
24+
25+
it("pretty prints toString", () => {
26+
const record = new TypedRecord();
27+
expect(record.size).toBe(0);
28+
29+
record.set(keya, "");
30+
expect(record.toString()).toBe("[object Map]");
31+
});
32+
33+
it("pretty prints AttributeKey toString", () => {
34+
expect(keya.toString()).toBe("a");
35+
});
36+
37+
it("clears the map", () => {
38+
const record = new TypedRecord();
39+
expect(record.size).toBe(0);
40+
41+
record.set(keya, "");
42+
expect(record.size).toBe(1);
43+
44+
record.clear();
45+
expect(record.size).toBe(0);
46+
});
47+
48+
it("deletes the key", () => {
49+
const record = new TypedRecord();
50+
expect(record.size).toBe(0);
51+
52+
record.set(keya, "");
53+
record.set(keyb, "");
54+
record.set(keyc, "");
55+
expect(record.size).toBe(3);
56+
57+
record.delete(keya);
58+
expect(record.size).toBe(2);
59+
});
60+
61+
it("returns the keys", () => {
62+
const record = new TypedRecord();
63+
64+
record.set(keya, "");
65+
record.set(keyb, "");
66+
record.set(keyc, "");
67+
expect(Array.from(record.keys())).toEqual([
68+
keya,
69+
keyb,
70+
keyc,
71+
]);
72+
});
73+
74+
it("returns the values", () => {
75+
const record = new TypedRecord();
76+
77+
record.set(keya, "value key");
78+
record.set(keyb, "value keyb");
79+
record.set(keyc, "value keyc");
80+
expect(Array.from(record.values())).toEqual([
81+
"value key",
82+
"value keyb",
83+
"value keyc",
84+
]);
85+
});
86+
87+
it("handles forEach", () => {
88+
const record = new TypedRecord();
89+
90+
record.set(keya, "value key");
91+
record.set(keyb, "value keyb");
92+
record.set(keyc, "value keyc");
93+
94+
const processed: unknown[] = [];
95+
96+
record.forEach((item) => {
97+
processed.push(item);
98+
});
99+
100+
expect(processed).toEqual([
101+
"value key",
102+
"value keyb",
103+
"value keyc",
104+
]);
105+
});
106+
107+
it("handles entries", () => {
108+
const record = new TypedRecord();
109+
110+
record.set(keya, "value key");
111+
record.set(keyb, "value keyb");
112+
record.set(keyc, "value keyc");
113+
114+
expect(Array.from(record.entries())).toEqual([
115+
[keya, "value key"],
116+
[keyb, "value keyb"],
117+
[keyc, "value keyc"],
118+
]);
119+
});
120+
121+
it("handles iterators", () => {
122+
const record = new TypedRecord();
123+
124+
record.set(keya, "value key");
125+
record.set(keyb, "value keyb");
126+
record.set(keyc, "value keyc");
127+
128+
const keys = [];
129+
const values = [];
130+
131+
for (const [key, item] of record) {
132+
keys.push(key);
133+
values.push(item);
134+
}
135+
136+
expect(keys).toEqual([
137+
keya,
138+
keyb,
139+
keyc,
140+
]);
141+
expect(values).toEqual([
142+
"value key",
143+
"value keyb",
144+
"value keyc",
145+
]);
146+
});
147+
148+
it("has key existence", () => {
149+
const record = new TypedRecord();
150+
expect(record.has(keya)).toBe(false);
151+
152+
record.set(keya, "");
153+
expect(record.has(keya)).toBe(true);
154+
});
155+
});

src/index.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ export {
3232
DEFAULT_TOPOLOGY,
3333
RENDER_CLASS_NAME,
3434
} from "./utilities/constants";
35+
export {
36+
isGlobalId,
37+
isLocalId,
38+
mergeTerms,
39+
} from "./utilities/slices";
3540
export * from "./LinkedDataAPI";
3641
export {
3742
AttributeKey,
@@ -43,7 +48,6 @@ export {
4348
idField,
4449
StructuredStore,
4550
} from "./store/StructuredStore";
46-
export { default as RDFIndex } from "./store/RDFIndex";
4751
export { DataSlice } from "./store/types";
4852
export { DeepRecord } from "./store/types";
4953
export { DeepRecordFieldValue } from "./store/types";

src/processor/DataProcessor.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ export class DataProcessor implements LinkedDataAPI, DeltaProcessor {
204204
opts.headers["Request-Referrer"] = subject.value;
205205
}
206206

207-
if (!SAFE_METHODS.includes(method) && graph && graph !== null && graph.length > 0) {
207+
if (!SAFE_METHODS.includes(method) && graph && graph.store.recordCount > 0) {
208208
if (opts.headers instanceof Headers) {
209209
opts.headers.delete("Content-Type");
210210
} else if (opts.headers && !Array.isArray(opts.headers)) {

src/processor/DataToGraph.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import rdfFactory, {
77
import * as rdf from "@ontologies/rdf";
88

99
import ll from "../ontology/ll";
10-
import RDFIndex from "../store/RDFIndex";
10+
import { RDFAdapter } from "../store/RDFAdapter";
1111

1212
import {
1313
DataObject,
@@ -72,7 +72,7 @@ const isFile = (value: any): value is File => typeof File !== "undefined" && val
7272
export function processObject(subject: Node,
7373
predicate: NamedNode,
7474
datum: DataObject | SerializableDataTypes | null | undefined,
75-
store: RDFIndex,
75+
store: RDFAdapter,
7676
ns?: NamespaceMap): NamedBlobTuple[] {
7777
let blobs: NamedBlobTuple[] = [];
7878

@@ -111,7 +111,7 @@ export function processObject(subject: Node,
111111
return blobs;
112112
}
113113

114-
function processDataObject(subject: Node, data: DataObject, store: RDFIndex, ns?: NamespaceMap): NamedBlobTuple[] {
114+
function processDataObject(subject: Node, data: DataObject, store: RDFAdapter, ns?: NamespaceMap): NamedBlobTuple[] {
115115
let blobs: NamedBlobTuple[] = [];
116116
const keys = Object.keys(data);
117117
for (let i = 0; i < keys.length; i++) {
@@ -130,7 +130,7 @@ function processDataObject(subject: Node, data: DataObject, store: RDFIndex, ns?
130130
}
131131

132132
export function dataToGraphTuple(data: DataObject, ns?: NamespaceMap): DataTuple {
133-
const store = new RDFIndex();
133+
const store = new RDFAdapter();
134134
const blobs = processDataObject(MAIN_NODE_DEFAULT_IRI, data, store, ns);
135135

136136
return [store, blobs];
@@ -146,7 +146,7 @@ export function dataToGraphTuple(data: DataObject, ns?: NamespaceMap): DataTuple
146146
export function toGraph(
147147
iriOrData: SomeNode | DataObject,
148148
data?: DataObject,
149-
store?: RDFIndex,
149+
store?: RDFAdapter,
150150
ns?: NamespaceMap,
151151
): ParsedObject {
152152

@@ -166,7 +166,7 @@ export function toGraph(
166166
}
167167
const dataObj = passedIRI ? data! : (iriOrData as DataObject);
168168

169-
const s = store || new RDFIndex();
169+
const s = store || new RDFAdapter();
170170

171171
const blobs = processDataObject(iri, dataObj, s, ns);
172172

0 commit comments

Comments
 (0)