From da6438c926c06d19ef6da7e14ba996dfe72d0674 Mon Sep 17 00:00:00 2001 From: Jackson Morgan Date: Thu, 20 Feb 2025 15:05:45 -0500 Subject: [PATCH] Complete setRefactor pre-test --- .../jsonld-dataset-proxy/src/ContextUtil.ts | 2 +- .../src/JsonldDatasetProxyBuilder.ts | 16 ++--- .../jsonld-dataset-proxy/src/ProxyContext.ts | 16 +++-- .../src/language/languagesOf.ts | 2 +- .../src/setProxy/createNewSetProxy.ts | 64 +++++++++++++++++++ .../src/subjectProxy/getValueForKey.ts | 7 +- .../src/util/addObjectToDataset.ts | 6 +- .../jsonld-dataset-proxy/src/util/isProxy.ts | 10 +-- 8 files changed, 98 insertions(+), 25 deletions(-) create mode 100644 packages/jsonld-dataset-proxy/src/setProxy/createNewSetProxy.ts diff --git a/packages/jsonld-dataset-proxy/src/ContextUtil.ts b/packages/jsonld-dataset-proxy/src/ContextUtil.ts index 8bbb5de..7e4cf00 100644 --- a/packages/jsonld-dataset-proxy/src/ContextUtil.ts +++ b/packages/jsonld-dataset-proxy/src/ContextUtil.ts @@ -144,7 +144,7 @@ export class ContextUtil { /** * Returns true if the object is a collection */ - public isArray(key: string, typeName: NamedNode[]): boolean { + public isSet(key: string, typeName: NamedNode[]): boolean { const relevantContext = this.getRelevantContext(key, typeName); return !!( relevantContext[key] && diff --git a/packages/jsonld-dataset-proxy/src/JsonldDatasetProxyBuilder.ts b/packages/jsonld-dataset-proxy/src/JsonldDatasetProxyBuilder.ts index c799db1..9ea2af9 100644 --- a/packages/jsonld-dataset-proxy/src/JsonldDatasetProxyBuilder.ts +++ b/packages/jsonld-dataset-proxy/src/JsonldDatasetProxyBuilder.ts @@ -57,14 +57,14 @@ export class JsonldDatasetProxyBuilder { * @param graph The graph to match */ matchSubject( - predicate: QuadMatch[1], - object?: QuadMatch[2], - graph?: QuadMatch[3], + predicate: QuadMatch[1] | undefined | null, + object: QuadMatch[2] | undefined | null, + graph: QuadMatch[3] | undefined | null, ): LdSet { return this.proxyContext.createSetProxy( [null, predicate, object, graph], true, - ) as LdSet; + ) as unknown as LdSet; } /** @@ -75,16 +75,16 @@ export class JsonldDatasetProxyBuilder { * @param graph The graph to match */ matchObject( - subject?: QuadMatch[0], + subject: QuadMatch[0] | undefined | null, predicate: QuadMatch[1], - graph?: QuadMatch[3], - ): T[] { + graph: QuadMatch[3] | undefined | null, + ): LdSet { return this.proxyContext.createSetProxy([ subject, predicate, null, graph, - ]) as unknown as T[]; + ]) as unknown as LdSet; } /** diff --git a/packages/jsonld-dataset-proxy/src/ProxyContext.ts b/packages/jsonld-dataset-proxy/src/ProxyContext.ts index f0d4d95..3856ef1 100644 --- a/packages/jsonld-dataset-proxy/src/ProxyContext.ts +++ b/packages/jsonld-dataset-proxy/src/ProxyContext.ts @@ -2,11 +2,12 @@ import type { GraphNode, QuadMatch, SubjectNode } from "@ldo/rdf-utils"; import type { BlankNode, Dataset, NamedNode } from "@rdfjs/types"; import { createSubjectHandler } from "./subjectProxy/createSubjectHandler"; import type { SubjectProxy } from "./subjectProxy/SubjectProxy"; -import { SetProxy } from "./setProxy/setProxy"; +import type { SetProxy } from "./setProxy/setProxy"; import type { ContextUtil } from "./ContextUtil"; import type { LanguageOrdering } from "./language/languageTypes"; import { namedNode } from "@rdfjs/data-model"; -import type { RawObject } from "./util/RawObject"; +import type { RawValue } from "./util/RawObject"; +import { createNewSetProxy } from "./setProxy/createNewSetProxy"; export interface ProxyContextOptions { dataset: Dataset; @@ -25,7 +26,7 @@ const rdfType = namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); */ export class ProxyContext { private subjectMap: Map = new Map(); - private setMap: Map> = new Map(); + private setMap: Map>> = new Map(); readonly dataset: Dataset; readonly contextUtil: ContextUtil; @@ -66,11 +67,16 @@ export class ProxyContext { public createSetProxy( quadMatch: QuadMatch, - isLangStringSet?: boolean, + isSubjectOriented?: boolean, + _isLangStringSet?: boolean, ): SetProxy { const key = this.getSetKey(...quadMatch); if (!this.setMap.has(key)) { - const proxy = new SetProxy(this, quadMatch, isLangStringSet); + const proxy = createNewSetProxy( + quadMatch, + isSubjectOriented ?? false, + this, + ); this.setMap.set(key, proxy); } return this.setMap.get(key)!; diff --git a/packages/jsonld-dataset-proxy/src/language/languagesOf.ts b/packages/jsonld-dataset-proxy/src/language/languagesOf.ts index 44c0174..f538f6c 100644 --- a/packages/jsonld-dataset-proxy/src/language/languagesOf.ts +++ b/packages/jsonld-dataset-proxy/src/language/languagesOf.ts @@ -59,6 +59,6 @@ export function languagesOf< subject, predicate, proxyContext, - proxyContext.contextUtil.isArray(key as string, rdfTypes), + proxyContext.contextUtil.isSet(key as string, rdfTypes), ) as LanguageOfConditionalReturn; } diff --git a/packages/jsonld-dataset-proxy/src/setProxy/createNewSetProxy.ts b/packages/jsonld-dataset-proxy/src/setProxy/createNewSetProxy.ts new file mode 100644 index 0000000..6f22a4f --- /dev/null +++ b/packages/jsonld-dataset-proxy/src/setProxy/createNewSetProxy.ts @@ -0,0 +1,64 @@ +import type { QuadMatch } from "@ldo/rdf-utils"; +import type { ProxyContext } from "../ProxyContext"; +import type { RawObject, RawValue } from "../util/RawObject"; +import type { ObjectSetProxyQuadMatch } from "./ObjectSetProxy"; +import { ObjectSetProxy } from "./ObjectSetProxy"; +import type { SubjectSetProxyQuadMatch } from "./SubjectSetProxy"; +import { SubjectSetProxy } from "./SubjectSetProxy"; +import type { WildcardObjectSetProxyQuadMatch } from "./WildcardObjectSetProxy"; +import { WildcardObjectSetProxy } from "./WildcardObjectSetProxy"; +import type { WildcardSubjectSetProxyQuadMatch } from "./WildcardSubjectSetProxy"; +import { WildcardSubjectSetProxy } from "./WildcardSubjectSetProxy"; +import type { SetProxy } from "./setProxy"; + +// export function createNewSetProxy>( +// quadMatch: ObjectSetProxyQuadMatch, +// isSubjectOriented: false, +// proxyContext: ProxyContext, +// ): ObjectSetProxy; +// export function createNewSetProxy( +// quadMatch: SubjectSetProxyQuadMatch, +// isSubjectOriented: true, +// proxyContext: ProxyContext, +// ): SubjectSetProxy; +// export function createNewSetProxy>( +// quadMatch: WildcardObjectSetProxyQuadMatch, +// isSubjectOriented: false, +// proxyContext: ProxyContext, +// ): WildcardObjectSetProxy; +// export function createNewSetProxy( +// quadMatch: WildcardSubjectSetProxyQuadMatch, +// isSubjectOriented: true, +// proxyContext: ProxyContext, +// ): WildcardSubjectSetProxy; +export function createNewSetProxy>( + quadMatch: QuadMatch, + isSubjectOriented: boolean, + proxyContext: ProxyContext, +): SetProxy { + if (!isSubjectOriented) { + if (quadMatch[0] && quadMatch[1]) { + return new ObjectSetProxy( + proxyContext, + quadMatch as ObjectSetProxyQuadMatch, + ); + } else { + return new WildcardObjectSetProxy( + proxyContext, + quadMatch as WildcardObjectSetProxyQuadMatch, + ); + } + } else { + if (quadMatch[1] && quadMatch[2]) { + return new SubjectSetProxy( + proxyContext, + quadMatch as SubjectSetProxyQuadMatch, + ); + } else { + return new WildcardSubjectSetProxy( + proxyContext, + quadMatch as WildcardSubjectSetProxyQuadMatch, + ); + } + } +} diff --git a/packages/jsonld-dataset-proxy/src/subjectProxy/getValueForKey.ts b/packages/jsonld-dataset-proxy/src/subjectProxy/getValueForKey.ts index 0e2bb93..4bebf3e 100644 --- a/packages/jsonld-dataset-proxy/src/subjectProxy/getValueForKey.ts +++ b/packages/jsonld-dataset-proxy/src/subjectProxy/getValueForKey.ts @@ -35,11 +35,10 @@ export function getValueForKey( const subject = target["@id"]; const rdfType = proxyContext.getRdfType(subject); const predicate = namedNode(contextUtil.keyToIri(key, rdfType)); - if (contextUtil.isArray(key, rdfType)) { - const arrayProxy = proxyContext.createArrayProxy( + if (contextUtil.isSet(key, rdfType)) { + const arrayProxy = proxyContext.createSetProxy( [subject, predicate, null, null], false, - undefined, contextUtil.isLangString(key, rdfType), ); return arrayProxy; @@ -60,6 +59,6 @@ export function getValueForKey( ); return thing; } else { - return proxyContext.createArrayProxy([subject, predicate, null, null]); + return proxyContext.createSetProxy([subject, predicate, null, null]); } } diff --git a/packages/jsonld-dataset-proxy/src/util/addObjectToDataset.ts b/packages/jsonld-dataset-proxy/src/util/addObjectToDataset.ts index a0f2a97..96040ed 100644 --- a/packages/jsonld-dataset-proxy/src/util/addObjectToDataset.ts +++ b/packages/jsonld-dataset-proxy/src/util/addObjectToDataset.ts @@ -25,7 +25,11 @@ export function addRawValueToDatasetRecursive( const rdfType = proxyContext.getRdfType(subject); const predicate = namedNode(contextUtil.keyToIri(key, rdfType)); // Get the Object Node - const object = getNodeFromRawValue(key, value, rdfType, proxyContext); + const object = getNodeFromRawValue( + value, + proxyContext, + contextUtil.getDataType(key, rdfType), + ); if (object == undefined) { dataset.deleteMatches(subject, predicate); } else if (object.termType === "Literal") { diff --git a/packages/jsonld-dataset-proxy/src/util/isProxy.ts b/packages/jsonld-dataset-proxy/src/util/isProxy.ts index 776cbcb..94a8f3b 100644 --- a/packages/jsonld-dataset-proxy/src/util/isProxy.ts +++ b/packages/jsonld-dataset-proxy/src/util/isProxy.ts @@ -1,18 +1,18 @@ -import type { ArrayProxy } from "../arrayProxy/ArrayProxy"; -import { isArrayProxy } from "../arrayProxy/isArrayProxy"; +import { isSetProxy } from "../setProxy/isSetProxy"; +import type { SetProxy } from "../setProxy/setProxy"; import { isSubjectProxy } from "../subjectProxy/isSubjectProxy"; import type { SubjectProxy } from "../subjectProxy/SubjectProxy"; import type { ObjectLike } from "../types"; export function isProxy( someObject?: unknown, -): someObject is ArrayProxy | SubjectProxy { - return isSubjectProxy(someObject) || isArrayProxy(someObject); +): someObject is SetProxy | SubjectProxy { + return isSubjectProxy(someObject) || isSetProxy(someObject); } export function getProxyFromObject( object: ObjectLike | ObjectLike[], -): SubjectProxy | ArrayProxy { +): SubjectProxy | SetProxy { if (!isProxy(object)) { throw new Error(`${object} is not a Jsonld Dataset Proxy`); }