From dff6b500fcc6972607da76c221732696a8bbff34 Mon Sep 17 00:00:00 2001 From: Kris McGinnes Date: Fri, 9 Aug 2024 16:46:03 -0500 Subject: [PATCH] Use case insensitive regex --- .../src/hooks/usePrefixesUpdater.ts | 12 +++- .../src/utils/generatePrefixes.test.ts | 56 +++++++++++++++++-- .../src/utils/generatePrefixes.ts | 6 +- 3 files changed, 63 insertions(+), 11 deletions(-) diff --git a/packages/graph-explorer/src/hooks/usePrefixesUpdater.ts b/packages/graph-explorer/src/hooks/usePrefixesUpdater.ts index 2fa49a338..f0b3955e9 100644 --- a/packages/graph-explorer/src/hooks/usePrefixesUpdater.ts +++ b/packages/graph-explorer/src/hooks/usePrefixesUpdater.ts @@ -10,8 +10,8 @@ const usePrefixesUpdater = () => { const setSchema = useSetRecoilState(schemaAtom); const { enqueueNotification } = useNotification(); - const supportsPrefixes = config?.connection?.queryEngine === "sparql" - const existingPrefixes = config?.schema?.prefixes + const supportsPrefixes = config?.connection?.queryEngine === "sparql"; + const existingPrefixes = config?.schema?.prefixes; const activeConfigId = config?.id; return useCallback( @@ -62,7 +62,13 @@ const usePrefixesUpdater = () => { }); } }, - [supportsPrefixes, existingPrefixes, setSchema, activeConfigId, enqueueNotification] + [ + supportsPrefixes, + existingPrefixes, + setSchema, + activeConfigId, + enqueueNotification, + ] ); }; diff --git a/packages/graph-explorer/src/utils/generatePrefixes.test.ts b/packages/graph-explorer/src/utils/generatePrefixes.test.ts index fd3d8a066..4fa0efff1 100644 --- a/packages/graph-explorer/src/utils/generatePrefixes.test.ts +++ b/packages/graph-explorer/src/utils/generatePrefixes.test.ts @@ -87,6 +87,15 @@ describe("generatePrefixes", () => { [ { prefix: "owl", uri: "https://www.w3.org/2002/07/owl#" }, { prefix: "dbr", uri: "https://dbpedia.org/resource/" }, + { + __inferred: true, + prefix: "loc-r", + uri: "http://www.example.com/location/resource#", + __matches: new Set([ + "http://www.example.com/location/resource#London", + "http://www.example.com/location/resource#Manchester", + ]), + }, ] ); @@ -102,25 +111,60 @@ describe("generatePrefixes", () => { __matches: new Set(["https://dbpedia.org/resource/Qualifying_Rounds"]), }); expect(updatedPrefixes?.[2]).toEqual({ + __inferred: true, + uri: "http://www.example.com/location/resource#", + prefix: "loc-r", + __matches: new Set([ + "http://www.example.com/location/resource#London", + "http://www.example.com/location/resource#Manchester", + ]), + }); + expect(updatedPrefixes?.[3]).toEqual({ __inferred: true, uri: "http://www.example.com/soccer/ontology/", prefix: "soc", __matches: new Set(["http://www.example.com/soccer/ontology/League"]), }); - expect(updatedPrefixes?.[3]).toEqual({ + expect(updatedPrefixes?.[4]).toEqual({ __inferred: true, uri: "http://www.example.com/soccer/resource#", prefix: "soc-r", __matches: new Set(["http://www.example.com/soccer/resource#EPL"]), }); - expect(updatedPrefixes?.[4]).toEqual({ + }); + + it("Should update existing prefixes when casing doesn't match", () => { + const updatedPrefixes = generatePrefixes( + [ + "http://SecretSpyOrg/entity/quantity", + "http://SecretSpyOrg/entity/other", + "http://SecretSpyOrg/data/hasText", + ], + [ + { + __inferred: true, + prefix: "ent", + uri: "http://secretspyorg/entity/", + __matches: new Set(["http://SecretSpyOrg/entity/quantity"]), + }, + ] + ); + + expect(updatedPrefixes).toHaveLength(2); + expect(updatedPrefixes?.[0]).toEqual({ __inferred: true, - uri: "http://www.example.com/location/resource#", - prefix: "loc-r", + uri: "http://secretspyorg/entity/", + prefix: "ent", __matches: new Set([ - "http://www.example.com/location/resource#London", - "http://www.example.com/location/resource#Manchester", + "http://SecretSpyOrg/entity/quantity", + "http://SecretSpyOrg/entity/other", ]), }); + expect(updatedPrefixes?.[1]).toEqual({ + __inferred: true, + uri: "http://secretspyorg/data/", + prefix: "dat", + __matches: new Set(["http://SecretSpyOrg/data/hasText"]), + }); }); }); diff --git a/packages/graph-explorer/src/utils/generatePrefixes.ts b/packages/graph-explorer/src/utils/generatePrefixes.ts index 515b7258c..cdba5c34e 100644 --- a/packages/graph-explorer/src/utils/generatePrefixes.ts +++ b/packages/graph-explorer/src/utils/generatePrefixes.ts @@ -95,17 +95,18 @@ const generatePrefixes = ( const updatedPrefixes: PrefixTypeConfig[] = cloneDeep(currentPrefixes); uris.forEach(uri => { const existInCommon = cPrefixes.some(prefixConfig => { - return !!uri.match(new RegExp(`^${prefixConfig.uri}`)); + return !!uri.match(new RegExp(`^${prefixConfig.uri}`, "i")); }); if (existInCommon) { return; } const existPrefixIndex = updatedPrefixes.findIndex(prefixConfig => { - return !!uri.match(new RegExp(`^${prefixConfig.uri}`)); + return !!uri.match(new RegExp(`^${prefixConfig.uri}`, "i")); }); if (existPrefixIndex === -1) { + // Create a new prefix entry try { const url = new URL(uri); let newPrefix: PrefixTypeConfig; @@ -120,6 +121,7 @@ const generatePrefixes = ( // Catching wrong URLs and skip them } } else { + // Update existing prefix entry if (!updatedPrefixes[existPrefixIndex].__matches) { updatedPrefixes[existPrefixIndex].__matches = new Set(); }