From 78fcc383c0991ae9dc6f7b788428d19eae43f356 Mon Sep 17 00:00:00 2001 From: surilindur Date: Mon, 4 Mar 2024 14:55:32 +0100 Subject: [PATCH] Updates and bugfixes to Bloom filter handling --- .../config/config-base-normal-call.json | 10 + .../actors.json | 6 +- .../lib/ActorContextPreprocessLinkFilter.ts | 2 +- .../lib/ActorRdfMetadataExtractLinkFilter.ts | 17 +- .../lib/ActorRdfParseLinkFilterBloom.ts | 21 +- .../lib/LinkFilterBloom.ts | 70 ++---- ...veHypermediaLinksQueueWrapperLinkFilter.ts | 18 +- .../lib/LinkFilter.ts | 26 +- yarn.lock | 234 +++++++++--------- 9 files changed, 210 insertions(+), 194 deletions(-) create mode 100644 engines/config-query-sparql-components/config/config-base-normal-call.json diff --git a/engines/config-query-sparql-components/config/config-base-normal-call.json b/engines/config-query-sparql-components/config/config-base-normal-call.json new file mode 100644 index 0000000..cdc4004 --- /dev/null +++ b/engines/config-query-sparql-components/config/config-base-normal-call.json @@ -0,0 +1,10 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/config-query-sparql-link-traversal/^0.0.0/components/context.jsonld" + ], + "comment": "Non-adaptive configuration using cAll for link extraction", + "import": [ + "ccqslt:config/config-solid-base.json", + "ccqslt:config/extract-links/actors/all.json" + ] +} diff --git a/engines/config-query-sparql-components/config/rdf-resolve-hypermedia-links-queue/actors.json b/engines/config-query-sparql-components/config/rdf-resolve-hypermedia-links-queue/actors.json index ab10fa2..4cbaa71 100644 --- a/engines/config-query-sparql-components/config/rdf-resolve-hypermedia-links-queue/actors.json +++ b/engines/config-query-sparql-components/config/rdf-resolve-hypermedia-links-queue/actors.json @@ -15,10 +15,8 @@ "mediatorRdfResolveHypermediaLinksQueue": { "@id": "urn:comunica:default:rdf-resolve-hypermedia-links-queue/mediators#main" }, - "ignorePatterns": [ - "publicTypeIndex$", - "privateTypeIndex$" - ] + "ignorePattern": "(public|private)TypeIndex$", + "alwaysReject": "^https?:\/\/www.w3.org\/" } ] } diff --git a/packages/actor-context-preprocess-link-filter/lib/ActorContextPreprocessLinkFilter.ts b/packages/actor-context-preprocess-link-filter/lib/ActorContextPreprocessLinkFilter.ts index e6bfd06..65c4289 100644 --- a/packages/actor-context-preprocess-link-filter/lib/ActorContextPreprocessLinkFilter.ts +++ b/packages/actor-context-preprocess-link-filter/lib/ActorContextPreprocessLinkFilter.ts @@ -19,6 +19,6 @@ export class ActorContextPreprocessLinkFilter extends ActorContextPreprocess { } public async run(action: IAction): Promise { - return { ...action, context: action.context.set(KeyLinkFilters, []) }; + return { ...action, context: action.context.set(KeyLinkFilters, new Map()) }; } } diff --git a/packages/actor-rdf-metadata-extract-link-filter/lib/ActorRdfMetadataExtractLinkFilter.ts b/packages/actor-rdf-metadata-extract-link-filter/lib/ActorRdfMetadataExtractLinkFilter.ts index f1f2d4e..6c22a10 100644 --- a/packages/actor-rdf-metadata-extract-link-filter/lib/ActorRdfMetadataExtractLinkFilter.ts +++ b/packages/actor-rdf-metadata-extract-link-filter/lib/ActorRdfMetadataExtractLinkFilter.ts @@ -32,12 +32,17 @@ export class ActorRdfMetadataExtractLinkFilter extends ActorRdfMetadataExtract { } public async run(action: IActionRdfMetadataExtract): Promise { - const filterData = await this.extractFilters(action.metadata); + const filterData = await this.collectFilterData(action.metadata); if (filterData.size > 0) { - const filters = action.context.getSafe(KeyLinkFilters); - for (const data of filterData.values()) { - const parseResult = await this.mediatorRdfParseLinkFilter.mediate({ data, context: action.context }); - filters.push(parseResult.filter); + const filters = action.context.getSafe>(KeyLinkFilters); + for (const [ filterUri, filterQuads ] of filterData) { + if (!filters.has(filterUri)) { + const parseResult = await this.mediatorRdfParseLinkFilter.mediate({ + data: filterQuads, + context: action.context, + }); + filters.set(parseResult.filter.uri, parseResult.filter); + } } } return { metadata: {}}; @@ -48,7 +53,7 @@ export class ActorRdfMetadataExtractLinkFilter extends ActorRdfMetadataExtract { * @param stream The RDF metadata stream to process * @returns The collected membership filter data */ - protected async extractFilters(stream: RDF.Stream): Promise> { + protected async collectFilterData(stream: RDF.Stream): Promise> { return new Promise((resolve, reject) => { const filters = new Map(); const quads = new Map(); diff --git a/packages/actor-rdf-parse-link-filter-bloom/lib/ActorRdfParseLinkFilterBloom.ts b/packages/actor-rdf-parse-link-filter-bloom/lib/ActorRdfParseLinkFilterBloom.ts index 8aacad8..baa76e4 100644 --- a/packages/actor-rdf-parse-link-filter-bloom/lib/ActorRdfParseLinkFilterBloom.ts +++ b/packages/actor-rdf-parse-link-filter-bloom/lib/ActorRdfParseLinkFilterBloom.ts @@ -73,17 +73,30 @@ export class ActorRdfParseLinkFilterBloom extends ActorRdfParseLinkFilter { } public async run(action: IActionRdfParseLinkFilter): Promise { + const uri = action.data.find(quad => + quad.subject.termType === 'NamedNode' && + quad.predicate.value === ActorRdfParseLinkFilterBloom.RDF_TYPE && + quad.object.value === ActorRdfParseLinkFilterBloom.MEM_BLOOMFILTER)!.subject.value; const hashBits = Number.parseInt(action.data.find(quad => quad.predicate.value === ActorRdfParseLinkFilterBloom.MEM_BITSIZE)!.object.value, 10); const hashCount = Number.parseInt(action.data.find(quad => quad.predicate.value === ActorRdfParseLinkFilterBloom.MEM_HASHSIZE)!.object.value, 10); const dataset = action.data.find(quad => quad.predicate.value === ActorRdfParseLinkFilterBloom.MEM_SOURCECOLLECTION)!.object.value; - const property = action.data.find(quad => - quad.predicate.value === ActorRdfParseLinkFilterBloom.MEM_PROJECTEDPROPERTY || - quad.predicate.value === ActorRdfParseLinkFilterBloom.MEM_PROJECTEDRESOURCE)!.object.value; + const projectedProperty = action.data.find(quad => + quad.predicate.value === ActorRdfParseLinkFilterBloom.MEM_PROJECTEDPROPERTY)?.object.value; + const projectedResource = action.data.find(quad => + quad.predicate.value === ActorRdfParseLinkFilterBloom.MEM_PROJECTEDRESOURCE)?.object.value; const buffer = Buffer.from(action.data.find(quad => quad.predicate.value === ActorRdfParseLinkFilterBloom.MEM_BINARYREPRESENTATION)!.object.value, 'base64'); - return { filter: new LinkFilterBloom({ dataset, hashBits, hashCount, buffer, property }) }; + return { filter: new LinkFilterBloom({ + uri, + dataset, + hashBits, + hashCount, + buffer, + projectedProperty, + projectedResource, + }) }; } } diff --git a/packages/actor-rdf-parse-link-filter-bloom/lib/LinkFilterBloom.ts b/packages/actor-rdf-parse-link-filter-bloom/lib/LinkFilterBloom.ts index 29e016e..da1de68 100644 --- a/packages/actor-rdf-parse-link-filter-bloom/lib/LinkFilterBloom.ts +++ b/packages/actor-rdf-parse-link-filter-bloom/lib/LinkFilterBloom.ts @@ -1,77 +1,50 @@ -import type { ILinkFilter, ILinkFilterAction } from '@comunica/bus-rdf-parse-link-filter'; +import { LinkFilter, type ILinkFilterArgs } from '@comunica/bus-rdf-parse-link-filter'; import type * as RDF from '@rdfjs/types'; import { Bloem } from 'bloem'; +import type { Algebra } from 'sparqlalgebrajs'; /** * An approximate membership filter that is backed by a Bloom filter. */ -export class LinkFilterBloom implements ILinkFilter { +export class LinkFilterBloom extends LinkFilter { private readonly filter: Bloem; - private readonly dataset: string; - private readonly property?: string; - private readonly resource?: string; + private readonly projectedProperty?: string; + private readonly projectedResource?: string; public constructor(args: ILinkFilterBloomArgs) { + super(args); this.filter = new Bloem(args.hashBits, args.hashCount, args.buffer); - this.dataset = args.dataset; - if (!args.property && !args.resource) { + this.projectedProperty = args.projectedProperty; + this.projectedResource = args.projectedResource; + if (!this.projectedProperty && !this.projectedResource) { throw new Error('Bloom link filter requires a property or resource to filter by'); } - this.property = args.property; - this.resource = args.resource; } - public test(action: ILinkFilterAction): boolean { - return action.link.url.startsWith(this.dataset) && action.patterns.some(pattern => - (this.property && pattern.predicate.termType === 'NamedNode' && pattern.predicate.value === this.property) || - (this.resource && ( - (pattern.subject.termType === 'NamedNode' && pattern.subject.value === this.resource) || - (pattern.object.termType === 'NamedNode' && pattern.object.value === this.resource) - ))); - } - - public run(action: ILinkFilterAction): boolean { - for (const pattern of action.patterns) { - if (this.property && + public answers(patterns: Algebra.Pattern[]): boolean { + for (const pattern of patterns) { + if (this.projectedProperty && pattern.predicate.termType === 'NamedNode' && - pattern.predicate.value === this.property && + pattern.predicate.value === this.projectedProperty && (this.filterHasTerm(pattern.subject) || this.filterHasTerm(pattern.object)) ) { - /* - console.log(`Accept <${action.link.url}>`); - console.log(`\tFilter for <${this.dataset}>`); - console.log(`\tContains one of: ${pattern.subject.value}, ${pattern.object.value}`); - */ return true; } - if (this.resource) { + if (this.projectedResource) { if (pattern.subject.termType === 'NamedNode' && - pattern.subject.value === this.resource && + pattern.subject.value === this.projectedResource && (this.filterHasTerm(pattern.predicate) || this.filterHasTerm(pattern.object)) ) { - /* - console.log(`Accept <${action.link.url}>`); - console.log(`\tFilter for <${this.dataset}>`); - console.log(`\tContains one of: ${pattern.predicate.value}, ${pattern.object.value}`); - */ return true; } if (pattern.object.termType === 'NamedNode' && - pattern.object.value === this.resource && + pattern.object.value === this.projectedResource && (this.filterHasTerm(pattern.predicate) || this.filterHasTerm(pattern.subject)) ) { - /* - console.log(`Accept <${action.link.url}>`); - console.log(`\tFilter for <${this.dataset}>`); - console.log(`\tContains one of: ${pattern.predicate.value}, ${pattern.subject.value}`); - */ return true; } } } - /* - console.log(`Reject <${action.link.url}>`); - */ return false; } @@ -81,15 +54,14 @@ export class LinkFilterBloom implements ILinkFilter { * @returns Whether the term is contained in the filter OR the term is of type that cannot be in it. */ protected filterHasTerm(term: RDF.Term): boolean { - return term.termType === 'Variable' || (term.termType === 'NamedNode' && this.filter.has(Buffer.from(term.value))); + return term.termType !== 'NamedNode' || this.filter.has(Buffer.from(term.value)); } } -export interface ILinkFilterBloomArgs { - dataset: string; - property?: string; - resource?: string; +export interface ILinkFilterBloomArgs extends ILinkFilterArgs { + buffer: Buffer; hashBits: number; hashCount: number; - buffer: Buffer; + projectedProperty?: string; + projectedResource?: string; } diff --git a/packages/actor-rdf-resolve-hypermedia-links-queue-wrapper-link-filter/lib/ActorRdfResolveHypermediaLinksQueueWrapperLinkFilter.ts b/packages/actor-rdf-resolve-hypermedia-links-queue-wrapper-link-filter/lib/ActorRdfResolveHypermediaLinksQueueWrapperLinkFilter.ts index 4208371..0d1b0b2 100644 --- a/packages/actor-rdf-resolve-hypermedia-links-queue-wrapper-link-filter/lib/ActorRdfResolveHypermediaLinksQueueWrapperLinkFilter.ts +++ b/packages/actor-rdf-resolve-hypermedia-links-queue-wrapper-link-filter/lib/ActorRdfResolveHypermediaLinksQueueWrapperLinkFilter.ts @@ -46,7 +46,7 @@ export class ActorRdfResolveHypermediaLinksQueueWrapperLinkFilter extends ActorR const { linkQueue } = await this.mediatorRdfResolveHypermediaLinksQueue.mediate({ ...action, context: subContext }); const operation = action.context.getSafe(KeysInitQuery.query); const patterns = ActorRdfResolveHypermediaLinksQueueWrapperLinkFilter.extractOperationPatterns(operation); - const filters = action.context.getSafe(KeyLinkFilters); + const filters = action.context.getSafe>(KeyLinkFilters); const accept = (link: ILink): boolean => { let acceptLink = true; let acceptingFilter: ILinkFilter | undefined; @@ -54,12 +54,20 @@ export class ActorRdfResolveHypermediaLinksQueueWrapperLinkFilter extends ActorR if (this.alwaysReject?.test(link.url)) { acceptLink = false; } else { - const applicableFilters = filters.filter(filter => filter.test({ link, patterns })); - acceptingFilter = applicableFilters.find(filter => filter.run({ link, patterns })); - acceptLink = applicableFilters.length === 0 || acceptingFilter !== undefined; + let foundApplicableFilters = false; + for (const filter of filters.values()) { + if (link.url.startsWith(filter.dataset)) { + foundApplicableFilters = true; + if (filter.answers(patterns)) { + acceptingFilter = filter; + break; + } + } + } + acceptLink = !foundApplicableFilters || acceptingFilter !== undefined; } } - console.log(`${acceptLink ? 'Accept' : 'Reject'} <${link.url}>`, acceptingFilter); + // Debug: console.log(`${acceptLink ? 'Accept' : 'Reject'} <${link.url}> filter ${acceptingFilter?.uri}`); return acceptLink; }; return { linkQueue: new LinkQueueWrapperFilter(linkQueue, accept) }; diff --git a/packages/bus-rdf-parse-link-filter/lib/LinkFilter.ts b/packages/bus-rdf-parse-link-filter/lib/LinkFilter.ts index ff2c13f..7ae43d6 100644 --- a/packages/bus-rdf-parse-link-filter/lib/LinkFilter.ts +++ b/packages/bus-rdf-parse-link-filter/lib/LinkFilter.ts @@ -1,17 +1,29 @@ -import type { ILink } from '@comunica/bus-rdf-resolve-hypermedia-links-queue'; import { ActionContextKey } from '@comunica/core'; import type { Algebra } from 'sparqlalgebrajs'; export interface ILinkFilter { - test: (action: ILinkFilterAction) => boolean; - run: (action: ILinkFilterAction) => boolean; + uri: string; + dataset: string; + answers: (patterns: Algebra.Pattern[]) => boolean; } -export interface ILinkFilterAction { - link: ILink; - patterns: Algebra.Pattern[]; +export abstract class LinkFilter implements ILinkFilter { + public uri: string; + public dataset: string; + + public constructor(args: ILinkFilterArgs) { + this.uri = args.uri; + this.dataset = args.dataset; + } + + public abstract answers(patterns: Algebra.Pattern[]): boolean; +} + +export interface ILinkFilterArgs { + uri: string; + dataset: string; } -export const KeyLinkFilters = new ActionContextKey( +export const KeyLinkFilters = new ActionContextKey>( '@comunica/bus-rdf-parse:link-filters', ); diff --git a/yarn.lock b/yarn.lock index d8f4113..4783f73 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,12 +13,12 @@ __metadata: linkType: hard "@ampproject/remapping@npm:^2.2.0": - version: 2.2.1 - resolution: "@ampproject/remapping@npm:2.2.1" + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.0" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: e15fecbf3b54c988c8b4fdea8ef514ab482537e8a080b2978cc4b47ccca7140577ca7b65ad3322dcce65bc73ee6e5b90cbfe0bbd8c766dad04d5c62ec9634c42 + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: f3451525379c68a73eb0a1e65247fbf28c0cccd126d93af21c75fceff77773d43c0d4a2d51978fb131aff25b5f2cb41a9fe48cc296e61ae65e679c4f6918b0ab languageName: node linkType: hard @@ -40,25 +40,25 @@ __metadata: linkType: hard "@babel/core@npm:^7.12.16": - version: 7.23.9 - resolution: "@babel/core@npm:7.23.9" + version: 7.24.0 + resolution: "@babel/core@npm:7.24.0" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@babel/code-frame": "npm:^7.23.5" "@babel/generator": "npm:^7.23.6" "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helpers": "npm:^7.23.9" - "@babel/parser": "npm:^7.23.9" - "@babel/template": "npm:^7.23.9" - "@babel/traverse": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" + "@babel/helpers": "npm:^7.24.0" + "@babel/parser": "npm:^7.24.0" + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 268cdbb86bef1b8ea5b1300f2f325e56a1740a5051360cb228ffeaa0f80282b6674f3a2b4d6466adb0691183759b88d4c37b4a4f77232c84a49ed771c84cdc27 + checksum: 1e22215cc89e061e0cbfed72f265ad24d363f3e9b24b51e9c4cf3ccb9222260a29a1c1e62edb439cb7e2229a3fce924edd43300500416613236c13fc8d62a947 languageName: node linkType: hard @@ -190,14 +190,14 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/helpers@npm:7.23.9" +"@babel/helpers@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/helpers@npm:7.24.0" dependencies: - "@babel/template": "npm:^7.23.9" - "@babel/traverse": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" - checksum: dd56daac8bbd7ed174bb00fd185926fd449e591d9a00edaceb7ac6edbdd7a8db57e2cb365b4fafda382201752789ced2f7ae010f667eab0f198a4571cda4d2c5 + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" + checksum: cc82012161b30185c2698da359c7311cf019f0932f8fcb805e985fec9e0053c354f0534dc9961f3170eee579df6724eecd34b0f5ffaa155cdd456af59fbff86e languageName: node linkType: hard @@ -212,29 +212,29 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/parser@npm:7.23.9" +"@babel/parser@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/parser@npm:7.24.0" bin: parser: ./bin/babel-parser.js - checksum: 727a7a807100f6a26df859e2f009c4ddbd0d3363287b45daa50bd082ccd0d431d0c4d0e610a91f806e04a1918726cd0f5a0592c9b902a815337feed12e1cafd9 + checksum: 3e5ebb903a6f71629a9d0226743e37fe3d961e79911d2698b243637f66c4df7e3e0a42c07838bc0e7cc9fcd585d9be8f4134a145b9459ee4a459420fb0d1360b languageName: node linkType: hard -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/template@npm:7.23.9" +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/template@npm:7.24.0" dependencies: "@babel/code-frame": "npm:^7.23.5" - "@babel/parser": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" - checksum: 1b011ba9354dc2e646561d54b6862e0df51760e6179faadd79be05825b0b6da04911e4e192df943f1766748da3037fd8493615b38707f7cadb0cf0c96601c170 + "@babel/parser": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" + checksum: 8c538338c7de8fac8ada691a5a812bdcbd60bd4a4eb5adae2cc9ee19773e8fb1a724312a00af9e1ce49056ffd3c3475e7287b5668cf6360bfb3f8ac827a06ffe languageName: node linkType: hard -"@babel/traverse@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/traverse@npm:7.23.9" +"@babel/traverse@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/traverse@npm:7.24.0" dependencies: "@babel/code-frame": "npm:^7.23.5" "@babel/generator": "npm:^7.23.6" @@ -242,22 +242,22 @@ __metadata: "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-hoist-variables": "npm:^7.22.5" "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" + "@babel/parser": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: e2bb845f7f229feb7c338f7e150f5f1abc5395dcd3a6a47f63a25242ec3ec6b165f04a6df7d4849468547faee34eb3cf52487eb0bd867a7d3c42fec2a648266f + checksum: 5cc482248ebb79adcbcf021aab4e0e95bafe2a1736ee4b46abe6f88b59848ad73e15e219db8f06c9a33a14c64257e5b47e53876601e998a8c596accb1b7f4996 languageName: node linkType: hard -"@babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.8.3": - version: 7.23.9 - resolution: "@babel/types@npm:7.23.9" +"@babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.24.0, @babel/types@npm:^7.8.3": + version: 7.24.0 + resolution: "@babel/types@npm:7.24.0" dependencies: "@babel/helper-string-parser": "npm:^7.23.4" "@babel/helper-validator-identifier": "npm:^7.22.20" to-fast-properties: "npm:^2.0.0" - checksum: bed9634e5fd0f9dc63c84cfa83316c4cb617192db9fedfea464fca743affe93736d7bf2ebf418ee8358751a9d388e303af87a0c050cb5d87d5870c1b0154f6cb + checksum: a0b4875ce2e132f9daff0d5b27c7f4c4fcc97f2b084bdc5834e92c9d32592778489029e65d99d00c406da612d87b72d7a236c0afccaa1435c028d0c94c9b6da4 languageName: node linkType: hard @@ -1846,7 +1846,6 @@ __metadata: "@comunica/bus-rdf-resolve-hypermedia-links": "npm:^2.0.0" "@types/bloem": "npm:^0.2.0" bloem: "npm:^0.2.0" - rdf-string: "npm:^1.0.0" languageName: unknown linkType: soft @@ -1947,6 +1946,7 @@ __metadata: "@comunica/bus-rdf-resolve-hypermedia-links-queue": "npm:^2.0.0" "@comunica/context-entries": "npm:^2.0.0" "@comunica/core": "npm:^2.0.0" + rdf-data-factory: "npm:^1.0.0" sparqlalgebrajs: "npm:^4.0.0" languageName: unknown linkType: soft @@ -3289,9 +3289,9 @@ __metadata: linkType: hard "@fastify/busboy@npm:^2.0.0": - version: 2.1.0 - resolution: "@fastify/busboy@npm:2.1.0" - checksum: f22c1e5c52dc350ddf9ba8be9f87b48d3ea5af00a37fd0a0d1e3e4b37f94d96763e514c68a350c7f570260fdd2f08b55ee090cdd879f92a03249eb0e3fd19113 + version: 2.1.1 + resolution: "@fastify/busboy@npm:2.1.1" + checksum: 2bb8a7eca8289ed14c9eb15239bc1019797454624e769b39a0b90ed204d032403adc0f8ed0d2aef8a18c772205fa7808cf5a1b91f21c7bfc7b6032150b1062c5 languageName: node linkType: hard @@ -3445,14 +3445,14 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.3 - resolution: "@jridgewell/gen-mapping@npm:0.3.3" +"@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" dependencies: - "@jridgewell/set-array": "npm:^1.0.1" + "@jridgewell/set-array": "npm:^1.2.1" "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 072ace159c39ab85944bdabe017c3de15c5e046a4a4a772045b00ff05e2ebdcfa3840b88ae27e897d473eb4d4845b37be3c78e28910c779f5aeeeae2fb7f0cc2 + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 81587b3c4dd8e6c60252122937cea0c637486311f4ed208b52b62aae2e7a87598f63ec330e6cd0984af494bfb16d3f0d60d3b21d7e5b4aedd2602ff3fe9d32e2 languageName: node linkType: hard @@ -3463,10 +3463,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.1": - version: 1.1.2 - resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 languageName: node linkType: hard @@ -3477,13 +3477,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.22 - resolution: "@jridgewell/trace-mapping@npm:0.3.22" +"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.24": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: "@jridgewell/resolve-uri": "npm:^3.1.0" "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 48d3e3db00dbecb211613649a1849876ba5544a3f41cf5e6b99ea1130272d6cf18591b5b67389bce20f1c871b4ede5900c3b6446a7aab6d0a3b2fe806a834db7 + checksum: dced32160a44b49d531b80a4a2159dceab6b3ddf0c8e95a0deae4b0e894b172defa63d5ac52a19c2068e1fe7d31ea4ba931fbeec103233ecb4208953967120fc languageName: node linkType: hard @@ -4296,11 +4296,11 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 20.11.19 - resolution: "@types/node@npm:20.11.19" + version: 20.11.24 + resolution: "@types/node@npm:20.11.24" dependencies: undici-types: "npm:~5.26.4" - checksum: c7f4705d6c84aa21679ad180c33c13ca9567f650e66e14bcee77c7c43d14619c7cd3b4d7b2458947143030b7b1930180efa6d12d999b45366abff9fed7a17472 + checksum: 7f34bfae5f9b98b9910230af4b4c52dc7fb2d1e96fdebfbc3d7576f8ab3d100076f193f9469add9e7418b455294155e7e6a028498cc5e98f9d49349875a459cf languageName: node linkType: hard @@ -4312,11 +4312,11 @@ __metadata: linkType: hard "@types/node@npm:^18.0.0": - version: 18.19.17 - resolution: "@types/node@npm:18.19.17" + version: 18.19.21 + resolution: "@types/node@npm:18.19.21" dependencies: undici-types: "npm:~5.26.4" - checksum: 7bef9d73227c6c47f0b616ff47df8390d03c6ea2ea4b60b272f336b58c928dbd02cc1f3e399e68660d37ee41836db91358b816575286a3b3114e4384bbd076e3 + checksum: 3a5c5841f294bc35b5b416a32764b5c0c2f22f4cef48cb7d2e3b4e068a52d5857e50da8e6e0685e743127c70344301c833849a3904ce3bd3f67448da5e85487a languageName: node linkType: hard @@ -4342,9 +4342,9 @@ __metadata: linkType: hard "@types/qs@npm:^6.2.31": - version: 6.9.11 - resolution: "@types/qs@npm:6.9.11" - checksum: 620ca1628bf3da65662c54ed6ebb120b18a3da477d0bfcc872b696685a9bb1893c3c92b53a1190a8f54d52eaddb6af8b2157755699ac83164604329935e8a7f2 + version: 6.9.12 + resolution: "@types/qs@npm:6.9.12" + checksum: 76be8068091058987bb49aca59e9714ff856661cdc2340499f9d502c78950ac08e7ecbca256c8a72c4c83714bce30e6aaad13f9f739e8c0c436c0eedb2a2627c languageName: node linkType: hard @@ -4359,9 +4359,9 @@ __metadata: linkType: hard "@types/semver@npm:^7.3.12, @types/semver@npm:^7.3.4": - version: 7.5.7 - resolution: "@types/semver@npm:7.5.7" - checksum: 535d88ec577fe59e38211881f79a1e2ba391e9e1516f8fff74e7196a5ba54315bace9c67a4616c334c830c89027d70a9f473a4ceb634526086a9da39180f2f9a + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: 3496808818ddb36deabfe4974fd343a78101fa242c4690044ccdc3b95dcf8785b494f5d628f2f47f38a702f8db9c53c67f47d7818f2be1b79f2efb09692e1178 languageName: node linkType: hard @@ -5216,9 +5216,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001587": - version: 1.0.30001589 - resolution: "caniuse-lite@npm:1.0.30001589" - checksum: 5e1d2eb7c32d48c52204227bc1377f0f4c758ef889c53b9b479e28470e7f82eb1db5853e7754be9600ee662ae32a1d58e8bef0fde6edab06322ddbabfd9d212f + version: 1.0.30001593 + resolution: "caniuse-lite@npm:1.0.30001593" + checksum: c179af389ca40b254939308099b9e8681d1ca1ad535e48a3e3035880e97fe2cca147e3481ca821112c11a8cde534d090daf5a3b072d73db9e9360c136bf84e55 languageName: node linkType: hard @@ -6020,9 +6020,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.4.668": - version: 1.4.679 - resolution: "electron-to-chromium@npm:1.4.679" - checksum: c7945e74d32beb85f30f32c03c926d568a0df281553ba1a8e0e5b9ee358fb06b1f5d9e3060e62f0d9db2dcc22cdb0b04828fc4884f529eeb27a3d14bbf5d0a0a + version: 1.4.690 + resolution: "electron-to-chromium@npm:1.4.690" + checksum: 3a8e43623b8b5d39783e369b28fe3ebcf5d26157793b27286c24a2a1536b10bb94b22468d1403c2f1a7beb2537a029e032bc320661ddc438f8a7e0e57dfd1efa languageName: node linkType: hard @@ -6114,16 +6114,16 @@ __metadata: linkType: hard "es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3": - version: 1.22.4 - resolution: "es-abstract@npm:1.22.4" + version: 1.22.5 + resolution: "es-abstract@npm:1.22.5" dependencies: array-buffer-byte-length: "npm:^1.0.1" arraybuffer.prototype.slice: "npm:^1.0.3" - available-typed-arrays: "npm:^1.0.6" + available-typed-arrays: "npm:^1.0.7" call-bind: "npm:^1.0.7" es-define-property: "npm:^1.0.0" es-errors: "npm:^1.3.0" - es-set-tostringtag: "npm:^2.0.2" + es-set-tostringtag: "npm:^2.0.3" es-to-primitive: "npm:^1.2.1" function.prototype.name: "npm:^1.1.6" get-intrinsic: "npm:^1.2.4" @@ -6131,15 +6131,15 @@ __metadata: globalthis: "npm:^1.0.3" gopd: "npm:^1.0.1" has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.0.1" + has-proto: "npm:^1.0.3" has-symbols: "npm:^1.0.3" hasown: "npm:^2.0.1" internal-slot: "npm:^1.0.7" is-array-buffer: "npm:^3.0.4" is-callable: "npm:^1.2.7" - is-negative-zero: "npm:^2.0.2" + is-negative-zero: "npm:^2.0.3" is-regex: "npm:^1.1.4" - is-shared-array-buffer: "npm:^1.0.2" + is-shared-array-buffer: "npm:^1.0.3" is-string: "npm:^1.0.7" is-typed-array: "npm:^1.1.13" is-weakref: "npm:^1.0.2" @@ -6152,13 +6152,13 @@ __metadata: string.prototype.trim: "npm:^1.2.8" string.prototype.trimend: "npm:^1.0.7" string.prototype.trimstart: "npm:^1.0.7" - typed-array-buffer: "npm:^1.0.1" - typed-array-byte-length: "npm:^1.0.0" - typed-array-byte-offset: "npm:^1.0.0" - typed-array-length: "npm:^1.0.4" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.5" unbox-primitive: "npm:^1.0.2" which-typed-array: "npm:^1.1.14" - checksum: 062e562a000e280c0c0683ad4a7b81732f97463bc769110c668a8edb739cd5df56975fa55965f5304a3256fd6eee03b9b66a47d863076f8976c2050731946b1f + checksum: 33bba7be636a6c56d836bb7d8860d2082deb02903c906cf31a93840302ac42c731b6d4f6393c1d112fa46c8778b2c1282e7833d206fe5e88e803dab1c8afefed languageName: node linkType: hard @@ -6178,7 +6178,7 @@ __metadata: languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.2": +"es-set-tostringtag@npm:^2.0.3": version: 2.0.3 resolution: "es-set-tostringtag@npm:2.0.3" dependencies: @@ -6277,14 +6277,14 @@ __metadata: linkType: hard "eslint-module-utils@npm:^2.7.3": - version: 2.8.0 - resolution: "eslint-module-utils@npm:2.8.0" + version: 2.8.1 + resolution: "eslint-module-utils@npm:2.8.1" dependencies: debug: "npm:^3.2.7" peerDependenciesMeta: eslint: optional: true - checksum: a9a7ed93eb858092e3cdc797357d4ead2b3ea06959b0eada31ab13862d46a59eb064b9cb82302214232e547980ce33618c2992f6821138a4934e65710ed9cc29 + checksum: 3e7892c0a984c963632da56b30ccf8254c29b535467138f91086c2ecdb2ebd10e2be61b54e553f30e5abf1d14d47a7baa0dac890e3a658fd3cd07dca63afbe6d languageName: node linkType: hard @@ -7925,7 +7925,7 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": +"is-negative-zero@npm:^2.0.3": version: 2.0.3 resolution: "is-negative-zero@npm:2.0.3" checksum: 8fe5cffd8d4fb2ec7b49d657e1691889778d037494c6f40f4d1a524cadd658b4b53ad7b6b73a59bcb4b143ae9a3d15829af864b2c0f9d65ac1e678c4c80f17e5 @@ -7995,7 +7995,7 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "is-shared-array-buffer@npm:1.0.3" dependencies: @@ -10240,7 +10240,7 @@ __metadata: languageName: node linkType: hard -"rdf-data-factory@npm:^1.0.1, rdf-data-factory@npm:^1.1.0, rdf-data-factory@npm:^1.1.1, rdf-data-factory@npm:^1.1.2": +"rdf-data-factory@npm:^1.0.0, rdf-data-factory@npm:^1.0.1, rdf-data-factory@npm:^1.1.0, rdf-data-factory@npm:^1.1.1, rdf-data-factory@npm:^1.1.2": version: 1.1.2 resolution: "rdf-data-factory@npm:1.1.2" dependencies: @@ -10394,7 +10394,7 @@ __metadata: languageName: node linkType: hard -"rdf-string@npm:^1.0.0, rdf-string@npm:^1.5.0, rdf-string@npm:^1.6.0, rdf-string@npm:^1.6.1, rdf-string@npm:^1.6.2, rdf-string@npm:^1.6.3": +"rdf-string@npm:^1.5.0, rdf-string@npm:^1.6.0, rdf-string@npm:^1.6.1, rdf-string@npm:^1.6.2, rdf-string@npm:^1.6.3": version: 1.6.3 resolution: "rdf-string@npm:1.6.3" dependencies: @@ -10757,7 +10757,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -10993,14 +10993,14 @@ __metadata: linkType: hard "side-channel@npm:^1.0.4": - version: 1.0.5 - resolution: "side-channel@npm:1.0.5" + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" dependencies: - call-bind: "npm:^1.0.6" + call-bind: "npm:^1.0.7" es-errors: "npm:^1.3.0" get-intrinsic: "npm:^1.2.4" object-inspect: "npm:^1.13.1" - checksum: 27708b70b5d81bf18dc8cc23f38f1b6c9511691a64abc4aaf17956e67d132c855cf8b46f931e2fc5a6262b29371eb60da7755c1b9f4f862eccea8562b469f8f6 + checksum: eb10944f38cebad8ad643dd02657592fa41273ce15b8bfa928d3291aff2d30c20ff777cfe908f76ccc4551ace2d1245822fdc576657cce40e9066c638ca8fa4d languageName: node linkType: hard @@ -11079,12 +11079,12 @@ __metadata: linkType: hard "socks@npm:^2.6.2, socks@npm:^2.7.1": - version: 2.8.0 - resolution: "socks@npm:2.8.0" + version: 2.8.1 + resolution: "socks@npm:2.8.1" dependencies: ip-address: "npm:^9.0.5" smart-buffer: "npm:^4.2.0" - checksum: ed0224ce2c7daaa7690cb87cf53d9703ffc4e983aca221f6f5b46767b232658df49494fd86acd0bf97ada6de05248ea8ea625c2343d48155d8463fc40d4a340f + checksum: a3cc38e0716ab53a2db3fa00c703ca682ad54dbbc9ed4c7461624a999be6fa7cdc79fc904c411618e698d5eff55a55aa6d9329169a7db11636d0200814a2b5aa languageName: node linkType: hard @@ -11624,11 +11624,9 @@ __metadata: linkType: hard "tmp@npm:~0.2.1": - version: 0.2.1 - resolution: "tmp@npm:0.2.1" - dependencies: - rimraf: "npm:^3.0.0" - checksum: 445148d72df3ce99356bc89a7857a0c5c3b32958697a14e50952c6f7cf0a8016e746ababe9a74c1aa52f04c526661992f14659eba34d3c6701d49ba2f3cf781b + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 7b13696787f159c9754793a83aa79a24f1522d47b87462ddb57c18ee93ff26c74cbb2b8d9138f571d2e0e765c728fb2739863a672b280528512c6d83d511c6fa languageName: node linkType: hard @@ -11779,7 +11777,7 @@ __metadata: languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.1": +"typed-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-buffer@npm:1.0.2" dependencies: @@ -11790,7 +11788,7 @@ __metadata: languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.0": +"typed-array-byte-length@npm:^1.0.1": version: 1.0.1 resolution: "typed-array-byte-length@npm:1.0.1" dependencies: @@ -11803,7 +11801,7 @@ __metadata: languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.0": +"typed-array-byte-offset@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-byte-offset@npm:1.0.2" dependencies: @@ -11817,7 +11815,7 @@ __metadata: languageName: node linkType: hard -"typed-array-length@npm:^1.0.4": +"typed-array-length@npm:^1.0.5": version: 1.0.5 resolution: "typed-array-length@npm:1.0.5" dependencies: @@ -12148,7 +12146,7 @@ __metadata: languageName: node linkType: hard -"winston-transport@npm:^4.5.0": +"winston-transport@npm:^4.7.0": version: 4.7.0 resolution: "winston-transport@npm:4.7.0" dependencies: @@ -12160,8 +12158,8 @@ __metadata: linkType: hard "winston@npm:^3.3.3": - version: 3.11.0 - resolution: "winston@npm:3.11.0" + version: 3.12.0 + resolution: "winston@npm:3.12.0" dependencies: "@colors/colors": "npm:^1.6.0" "@dabh/diagnostics": "npm:^2.0.2" @@ -12173,8 +12171,8 @@ __metadata: safe-stable-stringify: "npm:^2.3.1" stack-trace: "npm:0.0.x" triple-beam: "npm:^1.3.0" - winston-transport: "npm:^4.5.0" - checksum: 8b456bdfbf336898c5a7ca83b5c312fe46f32830c759e231f950378c28a0ddd0780e64ceaf6ea76e0366fb1500b49b9fee80d1045e41efc3b03b51ad31eeb307 + winston-transport: "npm:^4.7.0" + checksum: df4ffb509a489e72d457749f0e03c588e492af3ae946c47b47d8ec9aef83c59ec70d0deaa7d366df38d936dd10374d4b0a87e1a871e8d02b4cd4d65a518b40f7 languageName: node linkType: hard