From c786d61a63589c0a73a31cccb3580e91eb2332ab Mon Sep 17 00:00:00 2001 From: Julian Rojas Date: Fri, 12 Apr 2024 11:16:11 +0200 Subject: [PATCH] Fix multiple shapes and remove use of n3 DataFactory (#26) * Revert change for multiple shapes * Revert change to use DataFactory from rdf-data-factory * Don't use object deconstruction with DataFactory * Allow max 1 shape in RDFC processor * Exclude dist folder * Update dependencies * bump version --- bin/cli.ts | 8 +- bun.lockb | Bin 194736 -> 183915 bytes lib/client.ts | 147 +- lib/config.ts | 4 +- lib/memberManager.ts | 35 +- lib/page.ts | 2 +- package-lock.json | 1997 +++-------------- package.json | 20 +- processor.ttl | 1 + tests/data/shape-full-1.ttl | 34 + tests/data/shape-full-2.ttl | 417 ++++ tests/data/shape-partial.ttl | 22 + tests/data/shape1.ttl | 19 - tests/data/shape2.ttl | 12 - .../ldes-client.test.ts | 231 +- .../processor.test.ts | 2 +- 16 files changed, 1083 insertions(+), 1868 deletions(-) create mode 100644 tests/data/shape-full-1.ttl create mode 100644 tests/data/shape-full-2.ttl create mode 100644 tests/data/shape-partial.ttl delete mode 100644 tests/data/shape1.ttl delete mode 100644 tests/data/shape2.ttl rename tests/{connector-architecture => rdf-connect}/ldes-client.test.ts (50%) rename tests/{connector-architecture => rdf-connect}/processor.test.ts (98%) diff --git a/bin/cli.ts b/bin/cli.ts index d34e647..639a06a 100644 --- a/bin/cli.ts +++ b/bin/cli.ts @@ -13,7 +13,7 @@ let before: Date | undefined; let paramPollInterval: number; let urlIsView = false; let noShape = false; -let shapeFiles: string[] | undefined; +let shapeFile: string | undefined; let ordered: Ordered = "none"; let quiet: boolean = false; let verbose: boolean = false; @@ -39,7 +39,7 @@ program "follow only relations including members before a certain point in time", ) .option("--poll-interval ", "specify poll interval") - .option("--shape-files [shapeFiles...]", "specify a shapefile") + .option("--shape-file ", "specify a shapefile") .option( "--no-shape", "don't extract members with a shape (only use cbd and named graphs)", @@ -68,7 +68,7 @@ program noShape = !program.shape; save = program.save; paramURL = url; - shapeFiles = program.shapeFiles; + shapeFile = program.shapeFile; paramFollow = program.follow; paramPollInterval = program.pollInterval; ordered = program.ordered; @@ -109,7 +109,7 @@ async function main() { pollInterval: paramPollInterval, fetcher: { maxFetched: 2, concurrentRequests: 10 }, urlIsView: urlIsView, - shapeFiles, + shapeFile, onlyDefaultGraph, after, before, diff --git a/bun.lockb b/bun.lockb index 719197334d37b553147fa32c78fbbd7c292996c2..8eb37075d7e4bcec5f9f8b0dd29fcd5542573724 100755 GIT binary patch delta 61599 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
  • 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 delta 39330 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 Li?hAQ; @@ -46,7 +47,7 @@ export function replicateLDES( } export type LDESInfo = { - shapeMap?: Map; + shape: Term; extractor: CBDShapeExtractor; timestampPath?: Term; isVersionOfPath?: Term; @@ -60,40 +61,20 @@ async function getInfo( ): Promise { const logger = log.extend("getShape"); - const shapeConfigStore = RdfStore.createDefault(); - if (config.shapeFiles && config.shapeFiles.length > 0) { - config.shapes = []; - - for (const shapeFile of config.shapeFiles) { - const tempShapeStore = RdfStore.createDefault(); - const shapeId = shapeFile.startsWith("http") - ? shapeFile - : "file://" + shapeFile; - - const resp = await rdfDereference.dereference(shapeFile, { - localFiles: true, - fetch: config.fetch, - }); - const quads = await streamToArray(resp.data); - // Add retrieved quads to local stores - quads.forEach((q) => { - tempShapeStore.addQuad(q); - shapeConfigStore.addQuad(q); - }); + if (config.shapeFile) { + const shapeId = config.shapeFile.startsWith("http") + ? config.shapeFile + : "file://" + config.shapeFile; - if (shapeId.startsWith("file://")) { - // We have to find the actual IRI/Blank Node of the main shape within the file - config.shapes.push({ - quads, - shapeId: extractMainNodeShape(tempShapeStore), - }); - } else { - config.shapes.push({ - quads: quads, - shapeId: namedNode(shapeId), - }); - } - } + const resp = await rdfDereference.dereference(config.shapeFile, { + localFiles: true, + fetch: config.fetch + }); + const quads = await streamToArray(resp.data); + config.shape = { + quads: quads, + shapeId: df.namedNode(shapeId), + }; } let shapeIds = config.noShape @@ -134,7 +115,11 @@ async function getInfo( timestampPaths.length, isVersionOfPaths.length, ); - } catch (ex: any) {} + } catch (ex: any) { } + } + + if (shapeIds.length > 1) { + console.error("Expected at most one shape id, found " + shapeIds.length); } if (timestampPaths.length > 1) { @@ -149,49 +134,27 @@ async function getInfo( ); } - // Create a map of shapes and member types - const shapeMap = new Map(); - - if (config.shapes) { - for (const shape of config.shapes) { - const memberType = getObjects( - shapeConfigStore, - shape.shapeId, - SHACL.terms.targetClass, - )[0]; - if (memberType) { - shapeMap.set(memberType.value, shape.shapeId); - } else { - console.error( - "Ignoring SHACL shape without a declared sh:targetClass: ", - shape.shapeId, - ); - } + const shapeConfigStore = RdfStore.createDefault(); + if (config.shape) { + for (const quad of config.shape.quads) { + shapeConfigStore.addQuad(quad); } - } else { - for (const shapeId of shapeIds) { - const memberType = getObjects(store, shapeId, SHACL.terms.targetClass)[0]; - if (memberType) { - shapeMap.set(memberType.value, shapeId); - } else { - console.error( - "Ignoring SHACL shape without a declared sh:targetClass: ", - shapeId, - ); - } + // Make sure the shapeId is as defined in the given shape file + if (config.shape.shapeId.value.startsWith("file://")) { + config.shape.shapeId = extractMainNodeShape(shapeConfigStore); } } return { extractor: new CBDShapeExtractor( - config.shapes && config.shapes.length > 0 ? shapeConfigStore : store, + config.shape ? shapeConfigStore : store, dereferencer, { cbdDefaultGraph: config.onlyDefaultGraph, fetch: config.fetch, }, ), - shapeMap: config.noShape ? undefined : shapeMap, + shape: config.shape ? config.shape.shapeId : shapeIds[0], timestampPath: timestampPaths[0], isVersionOfPath: isVersionOfPaths[0], }; @@ -293,7 +256,7 @@ export class Client { // TODO Choose a view const viewQuads = root.data.getQuads(null, TREE.terms.view, null, null); - let ldesId: Term = namedNode(this.config.url); + let ldesId: Term = df.namedNode(this.config.url); if (!this.config.urlIsView) { if (viewQuads.length === 0) { console.error( @@ -381,22 +344,22 @@ export class Client { this.strategy = this.ordered !== "none" ? new OrderedStrategy( - this.memberManager, - this.fetcher, - notifier, - factory, - this.ordered, - this.config.polling, - this.config.pollInterval, - ) + this.memberManager, + this.fetcher, + notifier, + factory, + this.ordered, + this.config.polling, + this.config.pollInterval, + ) : new UnorderedStrategy( - this.memberManager, - this.fetcher, - notifier, - factory, - this.config.polling, - this.config.pollInterval, - ); + this.memberManager, + this.fetcher, + notifier, + factory, + this.config.polling, + this.config.pollInterval, + ); logger("Found %d views, choosing %s", viewQuads.length, ldesId.value); this.strategy.start(ldesId.value); @@ -464,7 +427,7 @@ export async function processor( ordered?: string, follow?: boolean, pollInterval?: number, - shapes?: string[], + shape?: string, noShape?: boolean, save?: string, loose?: boolean, @@ -475,7 +438,7 @@ export async function processor( intoConfig({ loose, noShape, - shapeFiles: shapes, + shapeFile: shape, polling: follow, url: url, after, @@ -515,11 +478,11 @@ export async function processor( } } - const blank = blankNode(); + const blank = df.blankNode(); const quads = el.value.quads.slice(); quads.push( - quad(blank, SDS.terms.stream, client.streamId!), - quad(blank, SDS.terms.payload, el.value.id!), + df.quad(blank, SDS.terms.stream, client.streamId!), + df.quad(blank, SDS.terms.payload, el.value.id!), ); await writer.push(new NWriter().quadsToString(quads)); diff --git a/lib/config.ts b/lib/config.ts index cd24a4e..a618c29 100644 --- a/lib/config.ts +++ b/lib/config.ts @@ -34,8 +34,8 @@ export interface Config { fetcher: FetcherConfig; before?: Date; after?: Date; - shapes?: ShapeConfig[]; - shapeFiles?: string[]; + shape?: ShapeConfig; + shapeFile?: string; onlyDefaultGraph?: boolean; fetch?: typeof fetch; basicAuth?: string; diff --git a/lib/memberManager.ts b/lib/memberManager.ts index b5904b1..9eca273 100644 --- a/lib/memberManager.ts +++ b/lib/memberManager.ts @@ -35,7 +35,7 @@ export class Manager { private state: Set; private extractor: CBDShapeExtractor; - private shapeMap?: Map; + private shapeId?: Term; private timestampPath?: Term; private isVersionOfPath?: Term; @@ -47,7 +47,7 @@ export class Manager { this.extractor = info.extractor; this.timestampPath = info.timestampPath; this.isVersionOfPath = info.isVersionOfPath; - this.shapeMap = info.shapeMap; + this.shapeId = info.shape; logger("new %s %o", ldesId.value, info); } @@ -70,36 +70,7 @@ export class Manager { member: Term, data: RdfStore, ): Promise { - let quads: Quad[] = []; - - if (this.shapeMap) { - if (this.shapeMap.size === 1) { - // Use the only shape available - quads = await this.extractor.extract( - data, - member, - Array.from(this.shapeMap.values())[0], - ); - } else if (this.shapeMap.size > 1) { - // Find what is the proper shape for this member based on its rdf:type - const memberType = getObjects(data, member, RDF.terms.type)[0]; - if (memberType) { - const shapeId = this.shapeMap.get(memberType.value); - if (shapeId) { - quads = await this.extractor.extract(data, member, shapeId); - } - } else { - // There is no rdf:type defined for this member. Fallback to CBD extraction - quads = await this.extractor.extract(data, member); - } - } else { - // Do a simple CBD extraction - quads = await this.extractor.extract(data, member); - } - } else { - // Do a simple CBD extraction - quads = await this.extractor.extract(data, member); - } + const quads = await this.extractor.extract(data, member, this.shapeId); if (this.state.has(member.value)) { return; diff --git a/lib/page.ts b/lib/page.ts index 6b77e39..864bf7e 100644 --- a/lib/page.ts +++ b/lib/page.ts @@ -178,7 +178,7 @@ export function extractRelations( continue; } } - } else { /* No filters, everything is allowed*/ } + } else { /* No filters, everything is allowed */ } } } diff --git a/package-lock.json b/package-lock.json index 3d27c88..28e2d26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,22 +1,22 @@ { "name": "ldes-client", - "version": "0.0.9-alpha.3", + "version": "0.0.9-alpha.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ldes-client", - "version": "0.0.9-alpha.3", + "version": "0.0.9-alpha.4", "license": "MIT", "dependencies": { - "@ajuvercr/js-runner": "^0.1.17", + "@ajuvercr/js-runner": "^0.1.18-alpha.0", "@treecg/types": "^0.4.6", - "@types/debug": "^4.1.10", + "@types/debug": "^4.1.12", "commander": "^11.1.0", "debug": "^4.3.4", - "extract-cbd-shape": "^0.1.3", + "extract-cbd-shape": "^0.1.5", "heap-js": "^2.3.0", - "n3": "^1.17.2", + "n3": "^1.17.3", "rdf-data-factory": "^1.1.2", "rdf-dereference": "^2.2.0", "rdf-stores": "^1.0.0" @@ -27,18 +27,17 @@ "devDependencies": { "@jest/globals": "^29.7.0", "@rdfjs/types": "^1.1.0", - "@types/n3": "^1.16.0", - "@types/node": "^20.11.4", + "@types/n3": "^1.16.4", + "@types/node": "^20.12.4", "jest": "^29.7.0", - "prettier": "^3.0.3", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" + "prettier": "^3.2.5", + "ts-jest": "^29.1.2", + "typescript": "^5.4.3" } }, "node_modules/@ajuvercr/js-runner": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/@ajuvercr/js-runner/-/js-runner-0.1.17.tgz", - "integrity": "sha512-auipGcIA9IZRSFAeVIagdpd7E98hm24rXaBf4agO4/8bSpfpCOIYG1F9kN1EwRPd8wQqfh9hCXIf13ndACZi8A==", + "version": "0.1.18-alpha.0", + "license": "MIT", "dependencies": { "@rdfjs/types": "^1.1.0", "@treecg/types": "^0.4.5", @@ -56,6 +55,7 @@ }, "node_modules/@ampproject/remapping": { "version": "2.3.0", + "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -75,86 +75,39 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", + "version": "7.24.2", + "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/@babel/code-frame/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk/node_modules/supports-color/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.23.5", + "version": "7.24.4", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.0", + "version": "7.24.4", + "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", + "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -172,18 +125,20 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.23.6", + "version": "7.24.4", + "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -192,6 +147,7 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.23.6", + "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.23.5", @@ -206,6 +162,7 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { "version": "5.1.1", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -213,10 +170,12 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache/node_modules/yallist": { "version": "3.1.1", + "dev": true, "license": "ISC" }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -224,6 +183,7 @@ }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -231,6 +191,7 @@ }, "node_modules/@babel/helper-function-name": { "version": "7.23.0", + "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.22.15", @@ -242,6 +203,7 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" @@ -251,10 +213,11 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", + "version": "7.24.3", + "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -262,6 +225,7 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.23.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -279,6 +243,7 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.24.0", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -286,6 +251,7 @@ }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" @@ -296,6 +262,7 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" @@ -305,7 +272,8 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", + "version": "7.24.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -313,6 +281,7 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -320,17 +289,19 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.23.5", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.0", + "version": "7.24.4", + "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", + "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0" }, "engines": { @@ -338,12 +309,14 @@ } }, "node_modules/@babel/highlight": { - "version": "7.23.4", + "version": "7.24.2", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -351,6 +324,7 @@ }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -363,6 +337,7 @@ }, "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles": { "version": "3.2.1", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -373,6 +348,7 @@ }, "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { "version": "1.9.3", + "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -380,10 +356,12 @@ }, "node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { "version": "1.1.3", + "dev": true, "license": "MIT" }, "node_modules/@babel/highlight/node_modules/chalk/node_modules/supports-color": { "version": "5.5.0", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -394,13 +372,15 @@ }, "node_modules/@babel/highlight/node_modules/chalk/node_modules/supports-color/node_modules/has-flag": { "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/parser": { - "version": "7.24.0", + "version": "7.24.4", + "dev": true, "license": "MIT", "bin": { "parser": "bin/babel-parser.js" @@ -411,6 +391,7 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -421,6 +402,7 @@ }, "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -431,6 +413,7 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" @@ -441,6 +424,7 @@ }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -451,6 +435,7 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -460,10 +445,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", + "version": "7.24.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -474,6 +460,7 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -484,6 +471,7 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -494,6 +482,7 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -504,6 +493,7 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -514,6 +504,7 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -524,6 +515,7 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -534,6 +526,7 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -546,10 +539,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", + "version": "7.24.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -560,6 +554,7 @@ }, "node_modules/@babel/template": { "version": "7.24.0", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.23.5", @@ -571,16 +566,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.0", + "version": "7.24.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.0", + "@babel/parser": "^7.24.1", "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" @@ -591,6 +587,7 @@ }, "node_modules/@babel/types": { "version": "7.24.0", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.23.4", @@ -603,6 +600,7 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", + "dev": true, "license": "MIT" }, "node_modules/@bergos/jsonparse": { @@ -919,28 +917,9 @@ "sparqlalgebrajs": "^4.2.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", + "dev": true, "license": "ISC", "dependencies": { "camelcase": "^5.3.1", @@ -955,6 +934,7 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { "version": "5.3.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -962,31 +942,15 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jenspots/http-utils-processor-ts": { - "version": "0.0.1-alpha.2", - "resolved": "git+ssh://git@github.com/jenspots/http-utils-processor-ts.git#dce674aa5c26ff985686ac096ebfa7ac0248d145", - "dependencies": { - "@node-oauth/express-oauth-server": "^4.0.0", - "@node-oauth/oauth2-server": "^5.1.0", - "@treecg/connector-types": "^1.2.1", - "cron": "^3.1.6", - "dotenv": "^16.4.5", - "husky": "^9.0.11", - "jest": "^29.7.0", - "lint-staged": "^15.2.2", - "ts-node": "^10.9.2" - }, - "peerDependencies": { - "typescript": "^5.0.0" - } - }, "node_modules/@jest/console": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -1002,6 +966,7 @@ }, "node_modules/@jest/core": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", @@ -1047,6 +1012,7 @@ }, "node_modules/@jest/environment": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", @@ -1060,6 +1026,7 @@ }, "node_modules/@jest/expect": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "expect": "^29.7.0", @@ -1071,6 +1038,7 @@ }, "node_modules/@jest/expect-utils": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" @@ -1081,6 +1049,7 @@ }, "node_modules/@jest/fake-timers": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -1096,6 +1065,7 @@ }, "node_modules/@jest/globals": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", @@ -1109,6 +1079,7 @@ }, "node_modules/@jest/reporters": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", @@ -1150,6 +1121,7 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", + "dev": true, "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -1160,6 +1132,7 @@ }, "node_modules/@jest/source-map": { "version": "29.6.3", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", @@ -1172,6 +1145,7 @@ }, "node_modules/@jest/test-result": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", @@ -1185,6 +1159,7 @@ }, "node_modules/@jest/test-sequencer": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", @@ -1198,6 +1173,7 @@ }, "node_modules/@jest/transform": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", @@ -1222,6 +1198,7 @@ }, "node_modules/@jest/types": { "version": "29.6.3", + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", @@ -1237,6 +1214,7 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -1249,6 +1227,7 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1256,6 +1235,7 @@ }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1263,48 +1243,18 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@node-oauth/express-oauth-server": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@node-oauth/express-oauth-server/-/express-oauth-server-4.0.0.tgz", - "integrity": "sha512-IfVfk0Biypw5NNvVW5Nkz8h0FiieFcOiJLZZXipU8cX8Es+fc9Gbt/zbKgA6HPicL+vCvoUwT5ztSmh/iAxW+Q==", - "dependencies": { - "@node-oauth/oauth2-server": "^5.1.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "express": "*" - } - }, - "node_modules/@node-oauth/formats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@node-oauth/formats/-/formats-1.0.0.tgz", - "integrity": "sha512-DwSbLtdC8zC5B5gTJkFzJj5s9vr9SGzOgQvV9nH7tUVuMSScg0EswAczhjIapOmH3Y8AyP7C4Jv7b8+QJObWZA==" - }, - "node_modules/@node-oauth/oauth2-server": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@node-oauth/oauth2-server/-/oauth2-server-5.1.0.tgz", - "integrity": "sha512-sYvqL1GeZLRSwgl++/oOzxJj/ZBe2yXnp6E5LGNQ5qjpn0+t/dwquXILUe3Sk2Y8/wU7XeRxToOtBVeSVkuJag==", - "dependencies": { - "@node-oauth/formats": "1.0.0", - "basic-auth": "2.0.1", - "type-is": "1.6.18" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@rdfjs/types": { "version": "1.1.0", "license": "MIT", @@ -1324,10 +1274,12 @@ }, "node_modules/@sinclair/typebox": { "version": "0.27.8", + "dev": true, "license": "MIT" }, "node_modules/@sinonjs/commons": { "version": "3.0.1", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" @@ -1335,6 +1287,7 @@ }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" @@ -1355,15 +1308,9 @@ "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/@treecg/connector-types": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@treecg/connector-types/-/connector-types-1.2.1.tgz", - "integrity": "sha512-qyVtS766VPCg/4QYYnXIf531QXrtSiUaLbUUWFkbdjSle9qkgK3ypRGCefMpZwHu7fGKuCNwGQPXYPN/wveSdQ==" - }, "node_modules/@treecg/types": { "version": "0.4.6", - "resolved": "https://registry.npmjs.org/@treecg/types/-/types-0.4.6.tgz", - "integrity": "sha512-iL8rBhAX4INvfuHZzJ1RELh1i/fspviylENZTk6D2p/xDazY1pTkd+y/hxKYVWCC0jHNolDWRsH7ozwaFGNQKA==", + "license": "UNLICENSE", "dependencies": { "@rdfjs/types": "*", "loglevel": "^1.8.1", @@ -1371,28 +1318,9 @@ "rdf-data-factory": "^1.1.0" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.10.tgz", - "integrity": "sha512-PiaIWIoPvO6qm6t114ropMCagj6YAF24j9OkCA2mJDXFnlionEwhsBCJ8yek4aib575BI3OkART/90WsgHgLWw==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, "node_modules/@types/babel__core": { "version": "7.20.5", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", @@ -1404,6 +1332,7 @@ }, "node_modules/@types/babel__generator": { "version": "7.6.8", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" @@ -1411,6 +1340,7 @@ }, "node_modules/@types/babel__template": { "version": "7.4.4", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", @@ -1419,6 +1349,7 @@ }, "node_modules/@types/babel__traverse": { "version": "7.20.5", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" @@ -1433,6 +1364,7 @@ }, "node_modules/@types/graceful-fs": { "version": "4.1.9", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -1447,10 +1379,12 @@ }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", + "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" @@ -1458,16 +1392,12 @@ }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/luxon": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.8.tgz", - "integrity": "sha512-jYvz8UMLDgy3a5SkGJne8H7VA7zPV2Lwohjx0V8V31+SqAjNmurWMkk9cQhfvlcnXWudBpK9xPM1n4rljOcHYQ==" - }, "node_modules/@types/ms": { "version": "0.7.34", "license": "MIT" @@ -1482,7 +1412,7 @@ } }, "node_modules/@types/node": { - "version": "20.11.24", + "version": "20.12.4", "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -1509,6 +1439,7 @@ }, "node_modules/@types/stack-utils": { "version": "2.0.3", + "dev": true, "license": "MIT" }, "node_modules/@types/yargs": { @@ -1532,40 +1463,8 @@ "node": ">=6.5" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "peer": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { - "version": "7.1.0", + "version": "7.1.1", "license": "MIT", "dependencies": { "debug": "^4.3.4" @@ -1576,6 +1475,7 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -1589,6 +1489,7 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1596,6 +1497,7 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -1613,6 +1515,7 @@ }, "node_modules/anymatch": { "version": "3.1.3", + "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -1622,13 +1525,9 @@ "node": ">= 8" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, "node_modules/argparse": { "version": "1.0.10", + "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -1641,14 +1540,8 @@ "node": ">=6" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "peer": true - }, "node_modules/asynciterator": { - "version": "3.8.1", + "version": "3.9.0", "license": "MIT" }, "node_modules/asynckit": { @@ -1657,6 +1550,7 @@ }, "node_modules/babel-jest": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", @@ -1676,6 +1570,7 @@ }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1690,6 +1585,7 @@ }, "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { "version": "5.2.1", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", @@ -1704,6 +1600,7 @@ }, "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "6.3.1", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -1711,6 +1608,7 @@ }, "node_modules/babel-plugin-jest-hoist": { "version": "29.6.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", @@ -1724,6 +1622,7 @@ }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", + "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -1745,6 +1644,7 @@ }, "node_modules/babel-preset-jest": { "version": "29.6.3", + "dev": true, "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", @@ -1759,6 +1659,7 @@ }, "node_modules/balanced-match": { "version": "1.0.2", + "dev": true, "license": "MIT" }, "node_modules/base64-js": { @@ -1779,22 +1680,6 @@ ], "license": "MIT" }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "node_modules/bidi-js": { "version": "1.0.3", "license": "MIT", @@ -1802,59 +1687,9 @@ "require-from-string": "^2.0.2" } }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, "node_modules/brace-expansion": { "version": "1.1.11", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -1863,6 +1698,7 @@ }, "node_modules/braces": { "version": "3.0.2", + "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.0.1" @@ -1873,6 +1709,7 @@ }, "node_modules/browserslist": { "version": "4.23.0", + "dev": true, "funding": [ { "type": "opencollective", @@ -1914,6 +1751,7 @@ }, "node_modules/bser": { "version": "2.1.1", + "dev": true, "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" @@ -1943,38 +1781,12 @@ }, "node_modules/buffer-from": { "version": "1.1.2", + "dev": true, "license": "MIT" }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "peer": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -1982,6 +1794,7 @@ }, "node_modules/camelcase": { "version": "6.3.0", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -1991,7 +1804,8 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001594", + "version": "1.0.30001605", + "dev": true, "funding": [ { "type": "opencollective", @@ -2014,6 +1828,7 @@ }, "node_modules/chalk": { "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -2028,6 +1843,7 @@ }, "node_modules/char-regex": { "version": "1.0.2", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -2035,6 +1851,7 @@ }, "node_modules/ci-info": { "version": "3.9.0", + "dev": true, "funding": [ { "type": "github", @@ -2048,85 +1865,12 @@ }, "node_modules/cjs-module-lexer": { "version": "1.2.3", + "dev": true, "license": "MIT" }, - "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/cliui": { "version": "8.0.1", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -2139,6 +1883,7 @@ }, "node_modules/co": { "version": "4.6.0", + "dev": true, "license": "MIT", "engines": { "iojs": ">= 1.0.0", @@ -2147,10 +1892,12 @@ }, "node_modules/collect-v8-coverage": { "version": "1.0.2", + "dev": true, "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -2161,13 +1908,9 @@ }, "node_modules/color-name": { "version": "1.1.4", + "dev": true, "license": "MIT" }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, "node_modules/combined-stream": { "version": "1.0.8", "license": "MIT", @@ -2277,50 +2020,17 @@ }, "node_modules/concat-map": { "version": "0.0.1", + "dev": true, "license": "MIT" }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "peer": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { "version": "2.0.0", + "dev": true, "license": "MIT" }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "peer": true - }, "node_modules/create-jest": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -2338,20 +2048,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/cron": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cron/-/cron-3.1.6.tgz", - "integrity": "sha512-cvFiQCeVzsA+QPM6fhjBtlKGij7tLLISnTSvFxVdnFGLdz+ZdXN37kNe0i2gefmdD17XuZA6n2uPVwzl4FxW/w==", - "dependencies": { - "@types/luxon": "~3.3.0", - "luxon": "~3.4.0" - } - }, "node_modules/cross-fetch": { "version": "4.0.0", "license": "MIT", @@ -2361,6 +2057,7 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -2424,6 +2121,7 @@ }, "node_modules/dedent": { "version": "1.5.1", + "dev": true, "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -2443,28 +2141,12 @@ }, "node_modules/deepmerge": { "version": "4.3.1", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "peer": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "license": "MIT", @@ -2472,42 +2154,17 @@ "node": ">=0.4.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "peer": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-newline": { "version": "3.1.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { "version": "29.6.3", + "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -2560,29 +2217,14 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "peer": true - }, "node_modules/electron-to-chromium": { - "version": "1.4.693", + "version": "1.4.726", + "dev": true, "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -2593,17 +2235,9 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", + "dev": true, "license": "MIT" }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/entities": { "version": "4.5.0", "license": "BSD-2-Clause", @@ -2616,45 +2250,20 @@ }, "node_modules/error-ex": { "version": "1.3.2", + "dev": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "peer": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/escalade": { "version": "3.1.2", + "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "peer": true - }, "node_modules/escape-string-regexp": { "version": "1.0.5", "license": "MIT", @@ -2664,6 +2273,7 @@ }, "node_modules/esprima": { "version": "4.0.1", + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -2673,15 +2283,6 @@ "node": ">=4" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/event-target-shim": { "version": "5.0.1", "license": "MIT", @@ -2689,11 +2290,6 @@ "node": ">=6" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" - }, "node_modules/events": { "version": "3.3.0", "license": "MIT", @@ -2703,6 +2299,7 @@ }, "node_modules/execa": { "version": "5.1.1", + "dev": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", @@ -2724,12 +2321,14 @@ }, "node_modules/exit": { "version": "0.1.2", + "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", @@ -2742,69 +2341,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "peer": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, "node_modules/extract-cbd-shape": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/extract-cbd-shape/-/extract-cbd-shape-0.1.3.tgz", - "integrity": "sha512-CEiLo064GYJ7QKp7H0wvOg8RCRSwVmK7SlQFKvcowPdOjPueqtDrexRTQCcC514h/5OHHB/B16PQ7eo8oAvBrA==", + "version": "0.1.5", + "license": "MIT", "dependencies": { "@treecg/types": "^0.4.5", + "debug": "^4.3.4", "jsdom": "^23.0.1", "n3": "^1.17.0", "rdf-data-factory": "^1.1.2", @@ -2821,10 +2363,12 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", + "dev": true, "license": "MIT" }, "node_modules/fb-watchman": { "version": "2.0.2", + "dev": true, "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" @@ -2832,6 +2376,7 @@ }, "node_modules/fill-range": { "version": "7.0.1", + "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -2840,39 +2385,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, "node_modules/find-replace": { "version": "3.0.0", "license": "MIT", @@ -2885,6 +2397,7 @@ }, "node_modules/find-up": { "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -2906,30 +2419,14 @@ "node": ">= 6" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", + "dev": true, "license": "ISC" }, "node_modules/function-bind": { "version": "1.1.2", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2937,6 +2434,7 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -2944,43 +2442,15 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", + "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "peer": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-package-type": { "version": "0.1.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8.0.0" @@ -2988,6 +2458,7 @@ }, "node_modules/get-stream": { "version": "6.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -2998,6 +2469,7 @@ }, "node_modules/glob": { "version": "7.2.3", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -3016,70 +2488,25 @@ }, "node_modules/globals": { "version": "11.12.0", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "peer": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", + "dev": true, "license": "ISC" }, "node_modules/has-flag": { "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "peer": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hash.js": { "version": "1.1.7", "license": "MIT", @@ -3089,7 +2516,8 @@ } }, "node_modules/hasown": { - "version": "2.0.1", + "version": "2.0.2", + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -3117,6 +2545,7 @@ }, "node_modules/html-escaper": { "version": "2.0.2", + "dev": true, "license": "MIT" }, "node_modules/htmlparser2": { @@ -3136,24 +2565,8 @@ "entities": "^4.5.0" } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "peer": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/http-link-header": { - "version": "1.1.2", + "version": "1.1.3", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -3183,25 +2596,12 @@ }, "node_modules/human-signals": { "version": "2.1.0", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, - "node_modules/husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", - "bin": { - "husky": "bin.mjs" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "license": "MIT", @@ -3236,6 +2636,7 @@ }, "node_modules/import-local": { "version": "3.1.0", + "dev": true, "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", @@ -3253,6 +2654,7 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -3260,6 +2662,7 @@ }, "node_modules/inflight": { "version": "1.0.6", + "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -3270,21 +2673,14 @@ "version": "2.0.4", "license": "ISC" }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "peer": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", + "dev": true, "license": "MIT" }, "node_modules/is-core-module": { "version": "2.13.1", + "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.0" @@ -3295,6 +2691,7 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3302,6 +2699,7 @@ }, "node_modules/is-generator-fn": { "version": "2.1.0", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -3309,6 +2707,7 @@ }, "node_modules/is-number": { "version": "7.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -3330,10 +2729,12 @@ }, "node_modules/isexe": { "version": "2.0.0", + "dev": true, "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" @@ -3341,6 +2742,7 @@ }, "node_modules/istanbul-lib-instrument": { "version": "6.0.2", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", @@ -3355,6 +2757,7 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", @@ -3367,6 +2770,7 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", @@ -3379,6 +2783,7 @@ }, "node_modules/istanbul-reports": { "version": "3.1.7", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", @@ -3390,6 +2795,7 @@ }, "node_modules/jest": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", @@ -3414,6 +2820,7 @@ }, "node_modules/jest-changed-files": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "execa": "^5.0.0", @@ -3426,6 +2833,7 @@ }, "node_modules/jest-circus": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", @@ -3455,6 +2863,7 @@ }, "node_modules/jest-cli": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", @@ -3486,6 +2895,7 @@ }, "node_modules/jest-config": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", @@ -3529,6 +2939,7 @@ }, "node_modules/jest-diff": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -3542,6 +2953,7 @@ }, "node_modules/jest-docblock": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" @@ -3552,6 +2964,7 @@ }, "node_modules/jest-each": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -3566,6 +2979,7 @@ }, "node_modules/jest-environment-node": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", @@ -3581,6 +2995,7 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", + "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3588,6 +3003,7 @@ }, "node_modules/jest-haste-map": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -3611,6 +3027,7 @@ }, "node_modules/jest-leak-detector": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", @@ -3622,6 +3039,7 @@ }, "node_modules/jest-matcher-utils": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -3635,6 +3053,7 @@ }, "node_modules/jest-message-util": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", @@ -3653,6 +3072,7 @@ }, "node_modules/jest-mock": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -3665,6 +3085,7 @@ }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -3680,6 +3101,7 @@ }, "node_modules/jest-regex-util": { "version": "29.6.3", + "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3687,6 +3109,7 @@ }, "node_modules/jest-resolve": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -3705,6 +3128,7 @@ }, "node_modules/jest-resolve-dependencies": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", @@ -3716,6 +3140,7 @@ }, "node_modules/jest-runner": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", @@ -3746,6 +3171,7 @@ }, "node_modules/jest-runtime": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", @@ -3777,6 +3203,7 @@ }, "node_modules/jest-snapshot": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", @@ -3806,6 +3233,7 @@ }, "node_modules/jest-util": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -3821,6 +3249,7 @@ }, "node_modules/jest-validate": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -3836,6 +3265,7 @@ }, "node_modules/jest-watcher": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", @@ -3853,6 +3283,7 @@ }, "node_modules/jest-worker": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -3866,6 +3297,7 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -3879,10 +3311,12 @@ }, "node_modules/js-tokens": { "version": "4.0.0", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "3.14.1", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -3932,6 +3366,7 @@ }, "node_modules/jsesc": { "version": "2.5.2", + "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -3942,10 +3377,12 @@ }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", + "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", + "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -3969,7 +3406,7 @@ } }, "node_modules/jsonld-context-parser/node_modules/@types/node": { - "version": "18.19.21", + "version": "18.19.29", "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -3983,7 +3420,7 @@ } }, "node_modules/jsonld-streaming-parser": { - "version": "3.3.0", + "version": "3.4.0", "license": "MIT", "dependencies": { "@bergos/jsonparse": "^1.4.0", @@ -4007,6 +3444,7 @@ }, "node_modules/kleur": { "version": "3.0.3", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4014,275 +3452,20 @@ }, "node_modules/leven": { "version": "3.1.0", + "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", - "engines": { - "node": ">=14" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", + "dev": true, "license": "MIT" }, - "node_modules/lint-staged": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", - "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", - "dependencies": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "3.0.0", - "listr2": "8.0.1", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.4" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", - "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", - "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.0.0", - "rfdc": "^1.3.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" - }, - "node_modules/listr2/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/locate-path": { "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -4300,137 +3483,6 @@ "dev": true, "license": "MIT" }, - "node_modules/log-update": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", - "dependencies": { - "ansi-escapes": "^6.2.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^7.0.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/loglevel": { "version": "1.9.1", "license": "MIT", @@ -4448,6 +3500,7 @@ }, "node_modules/lru-cache": { "version": "6.0.0", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -4456,16 +3509,9 @@ "node": ">=10" } }, - "node_modules/luxon": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", - "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", - "engines": { - "node": ">=12" - } - }, "node_modules/make-dir": { "version": "4.0.0", + "dev": true, "license": "MIT", "dependencies": { "semver": "^7.5.3" @@ -4479,10 +3525,12 @@ }, "node_modules/make-error": { "version": "1.3.6", + "dev": true, "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" @@ -4492,33 +3540,11 @@ "version": "2.0.30", "license": "CC0-1.0" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "peer": true - }, "node_modules/merge-stream": { "version": "2.0.0", + "dev": true, "license": "MIT" }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/microdata-rdf-streaming-parser": { "version": "2.0.1", "license": "MIT", @@ -4549,6 +3575,7 @@ }, "node_modules/micromatch": { "version": "4.0.5", + "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.2", @@ -4558,18 +3585,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { "version": "1.52.0", "license": "MIT", @@ -4589,6 +3604,7 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4600,6 +3616,7 @@ }, "node_modules/minimatch": { "version": "3.1.2", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -4620,7 +3637,7 @@ "license": "MIT" }, "node_modules/n3": { - "version": "1.17.2", + "version": "1.17.3", "license": "MIT", "dependencies": { "queue-microtask": "^1.1.2", @@ -4632,17 +3649,9 @@ }, "node_modules/natural-compare": { "version": "1.4.0", + "dev": true, "license": "MIT" }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/node-fetch": { "version": "2.7.0", "license": "MIT", @@ -4679,14 +3688,17 @@ }, "node_modules/node-int64": { "version": "0.4.0", + "dev": true, "license": "MIT" }, "node_modules/node-releases": { "version": "2.0.14", + "dev": true, "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4694,6 +3706,7 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.0.0" @@ -4702,29 +3715,9 @@ "node": ">=8" } }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", + "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -4732,6 +3725,7 @@ }, "node_modules/onetime": { "version": "5.1.2", + "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -4745,6 +3739,7 @@ }, "node_modules/p-limit": { "version": "3.1.0", + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -4758,6 +3753,7 @@ }, "node_modules/p-locate": { "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -4768,6 +3764,7 @@ }, "node_modules/p-locate/node_modules/p-limit": { "version": "2.3.0", + "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -4781,6 +3778,7 @@ }, "node_modules/p-try": { "version": "2.2.0", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4788,6 +3786,7 @@ }, "node_modules/parse-json": { "version": "5.2.0", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -4812,17 +3811,9 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/path-exists": { "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4830,6 +3821,7 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4837,6 +3829,7 @@ }, "node_modules/path-key": { "version": "3.1.1", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4844,20 +3837,17 @@ }, "node_modules/path-parse": { "version": "1.0.7", + "dev": true, "license": "MIT" }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "peer": true - }, "node_modules/picocolors": { "version": "1.0.0", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -4866,19 +3856,9 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/pirates": { "version": "4.0.6", + "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -4886,6 +3866,7 @@ }, "node_modules/pkg-dir": { "version": "4.2.0", + "dev": true, "license": "MIT", "dependencies": { "find-up": "^4.0.0" @@ -4910,6 +3891,7 @@ }, "node_modules/pretty-format": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", @@ -4922,6 +3904,7 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -4943,6 +3926,7 @@ }, "node_modules/prompts": { "version": "2.4.2", + "dev": true, "license": "MIT", "dependencies": { "kleur": "^3.0.3", @@ -4952,19 +3936,6 @@ "node": ">= 6" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "peer": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/psl": { "version": "1.9.0", "license": "MIT" @@ -4977,7 +3948,8 @@ } }, "node_modules/pure-rand": { - "version": "6.0.4", + "version": "6.1.0", + "dev": true, "funding": [ { "type": "individual", @@ -4990,21 +3962,6 @@ ], "license": "MIT" }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "peer": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/querystringify": { "version": "2.2.0", "license": "MIT" @@ -5027,42 +3984,6 @@ ], "license": "MIT" }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/rdf-data-factory": { "version": "1.1.2", "license": "MIT", @@ -5209,6 +4130,7 @@ }, "node_modules/react-is": { "version": "18.2.0", + "dev": true, "license": "MIT" }, "node_modules/readable-stream": { @@ -5242,6 +4164,7 @@ }, "node_modules/require-directory": { "version": "2.1.1", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5260,6 +4183,7 @@ }, "node_modules/resolve": { "version": "1.22.8", + "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", @@ -5275,6 +4199,7 @@ }, "node_modules/resolve-cwd": { "version": "3.0.0", + "dev": true, "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" @@ -5285,6 +4210,7 @@ }, "node_modules/resolve-from": { "version": "5.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5292,31 +4218,12 @@ }, "node_modules/resolve.exports": { "version": "2.0.2", + "dev": true, "license": "MIT", "engines": { "node": ">=10" } }, - "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" - }, "node_modules/rrweb-cssom": { "version": "0.6.0", "license": "MIT" @@ -5355,6 +4262,7 @@ }, "node_modules/semver": { "version": "7.6.0", + "dev": true, "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" @@ -5366,89 +4274,6 @@ "node": ">=10" } }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "peer": true - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "peer": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "peer": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "peer": true - }, "node_modules/shaclc-parse": { "version": "1.4.0", "license": "MIT", @@ -5459,6 +4284,7 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -5469,90 +4295,40 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "peer": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/signal-exit": { "version": "3.0.7", + "dev": true, "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", + "dev": true, "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/source-map": { "version": "0.6.1", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.0.2", + "version": "1.2.0", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -5560,6 +4336,7 @@ }, "node_modules/source-map-support": { "version": "0.5.13", + "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -5599,10 +4376,12 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", + "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" @@ -5613,20 +4392,12 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/stream-to-array": { "version": "2.3.0", "license": "MIT", @@ -5648,16 +4419,9 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "engines": { - "node": ">=0.6.19" - } - }, "node_modules/string-length": { "version": "4.0.2", + "dev": true, "license": "MIT", "dependencies": { "char-regex": "^1.0.2", @@ -5669,6 +4433,7 @@ }, "node_modules/string-width": { "version": "4.2.3", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -5681,6 +4446,7 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -5691,6 +4457,7 @@ }, "node_modules/strip-bom": { "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5698,6 +4465,7 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5705,6 +4473,7 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5715,6 +4484,7 @@ }, "node_modules/supports-color": { "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -5725,6 +4495,7 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5766,6 +4537,7 @@ }, "node_modules/test-exclude": { "version": "6.0.0", + "dev": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", @@ -5776,22 +4548,14 @@ "node": ">=8" } }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.0.8", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/tmpl": { "version": "1.0.5", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/to-fast-properties": { "version": "2.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -5799,6 +4563,7 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -5807,15 +4572,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "peer": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/tough-cookie": { "version": "4.1.3", "license": "BSD-3-Clause", @@ -5881,50 +4637,9 @@ } } }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, "node_modules/type-detect": { "version": "4.0.8", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -5932,6 +4647,7 @@ }, "node_modules/type-fest": { "version": "0.21.3", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -5940,20 +4656,9 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typescript": { - "version": "5.3.3", + "version": "5.4.3", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -5981,17 +4686,9 @@ "node": ">= 4.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.13", + "dev": true, "funding": [ { "type": "opencollective", @@ -6026,22 +4723,9 @@ "requires-port": "^1.0.0" } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "peer": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, "node_modules/v8-to-istanbul": { "version": "9.2.0", + "dev": true, "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", @@ -6056,15 +4740,6 @@ "version": "1.0.1", "license": "MIT" }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "license": "MIT", @@ -6077,6 +4752,7 @@ }, "node_modules/walker": { "version": "1.0.8", + "dev": true, "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" @@ -6123,6 +4799,7 @@ }, "node_modules/which": { "version": "2.0.2", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -6154,6 +4831,7 @@ }, "node_modules/wrap-ansi": { "version": "7.0.0", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -6169,10 +4847,12 @@ }, "node_modules/wrappy": { "version": "1.0.2", + "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", + "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", @@ -6214,6 +4894,7 @@ }, "node_modules/y18n": { "version": "5.0.8", + "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -6221,18 +4902,12 @@ }, "node_modules/yallist": { "version": "4.0.0", + "dev": true, "license": "ISC" }, - "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", - "engines": { - "node": ">= 14" - } - }, "node_modules/yargs": { "version": "17.7.2", + "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -6249,21 +4924,15 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", + "dev": true, "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", + "dev": true, "license": "MIT", "engines": { "node": ">=10" diff --git a/package.json b/package.json index 32bf284..947424e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ldes-client", "description": "This package provides common tooling to work with LDESes.", - "version": "0.0.9-alpha.4", + "version": "0.0.9", "main": "dist/lib/client.js", "bin": { "ldes-client": "dist/bin/cli.js" @@ -22,14 +22,14 @@ "author": "Arthur Vercruysse", "license": "MIT", "dependencies": { - "@ajuvercr/js-runner": "^0.1.17", + "@ajuvercr/js-runner": "^0.1.18-alpha.0", "@treecg/types": "^0.4.6", - "@types/debug": "^4.1.10", + "@types/debug": "^4.1.12", "commander": "^11.1.0", "debug": "^4.3.4", - "extract-cbd-shape": "^0.1.3", + "extract-cbd-shape": "^0.1.5", "heap-js": "^2.3.0", - "n3": "^1.17.2", + "n3": "^1.17.3", "rdf-data-factory": "^1.1.2", "rdf-dereference": "^2.2.0", "rdf-stores": "^1.0.0" @@ -37,12 +37,12 @@ "devDependencies": { "@jest/globals": "^29.7.0", "@rdfjs/types": "^1.1.0", - "@types/n3": "^1.16.0", - "@types/node": "^20.11.4", + "@types/n3": "^1.16.4", + "@types/node": "^20.12.4", "jest": "^29.7.0", - "prettier": "^3.0.3", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" + "prettier": "^3.2.5", + "ts-jest": "^29.1.2", + "typescript": "^5.4.3" }, "browser": { "fs": false, diff --git a/processor.ttl b/processor.ttl index 9f03dfc..07bed7b 100644 --- a/processor.ttl +++ b/processor.ttl @@ -114,6 +114,7 @@ js:LdesClient a js:JsProcess; sh:path js:shapeFile; sh:name "Shape"; sh:minCount 0; + sh:maxCount 1; ], [ sh:datatype xsd:boolean; sh:path js:noShape; diff --git a/tests/data/shape-full-1.ttl b/tests/data/shape-full-1.ttl new file mode 100644 index 0000000..2b50a38 --- /dev/null +++ b/tests/data/shape-full-1.ttl @@ -0,0 +1,34 @@ +@prefix era: . +@prefix gsp: . +@prefix rdf: . +@prefix sh: . + +[ ] a sh:NodeShape; + sh:property [ # Required rdf:type property + sh:path rdf:type; + sh:minCount 1; + sh:or ( # These values are not validated during member extraction + [ sh:hasValue era:ContactLineSystem ] + [ sh:hasValue era:ETCSLevel ] + [ sh:hasValue era:LoadCapability ] + [ sh:hasValue era:NationalRailwayLine ] + [ sh:hasValue era:NetElement ] + [ sh:hasValue era:NetRelation ] + [ sh:hasValue era:OperationalPoint ] + [ sh:hasValue era:SectionOfLine ] + [ sh:hasValue era:Track ] + [ sh:hasValue era:TrainDetectionSystem ] + ) + ], [ # Optional named node property of era:OperationalPoint instances + sh:path gsp:hasGeometry; + sh:node [ + a sh:NodeShape; + sh:targetClass gsp:Geometry + ] + ], [ # Optional named node property of era:OperationalPoint instances + sh:path era:lineReference; + sh:node [ + a sh:NodeShape; + sh:targetClass era:LineReference + ] + ]. \ No newline at end of file diff --git a/tests/data/shape-full-2.ttl b/tests/data/shape-full-2.ttl new file mode 100644 index 0000000..cd13eae --- /dev/null +++ b/tests/data/shape-full-2.ttl @@ -0,0 +1,417 @@ +@prefix era: . +@prefix era-sh: . +@prefix gsp: . +@prefix rdf: . +@prefix rdfs: . +@prefix sh: . +@prefix xsd: . +@prefix wgs: . + +[ ] a sh:NodeShape ; + sh:xone ( + era-sh:contactLineSystemShape + era-sh:etcsLevelShape + era-sh:loadCapabilityShape + era-sh:nationalLineShape + era-sh:netElementShape + era-sh:netRelationShape + era-sh:operationalPointShape + era-sh:sectionOfLineShape + era-sh:opTrackShape + era-sh:solTrackShape + era-sh:trainDetectionSystemShape + # TODO: + #era-sh:platformShape + #era-sh:sidingShape + #era-sh:tunnelShape + ) . + +# Shape adapted from https://github.com/Interoperable-data/ERA_vocabulary/blob/main/era-shacl/RINF-contact-line-systems.ttl +era-sh:contactLineSystemShape a sh:NodeShape ; + sh:targetClass era:ContactLineSystem ; + sh:property [ + a sh:PropertyShape ; + rdfs:comment "Indication of the type of the contact line system" ; + era:rinfIndex "1.1.1.2.2.1.1" ; + sh:path era:contactLineSystemType ; + sh:minCount 0 ; #TODO: Not yet applicable + sh:nodeKind sh:IRI ; + #sh:class skos:Concept ; #TODO: Check error + #skos:inScheme era-cls:ContactLineSystems ; + sh:severity sh:Violation ; + sh:message "contactLineSystemType (1.1.1.2.2.1.1): The contact line system must define the type."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "Indication of the traction supply system" ; + era:rinfIndex "1.1.1.2.2.1.2" ; + sh:path era:energySupplySystem ; + sh:minCount 0 ; #TODO: Not yet applicable + sh:nodeKind sh:IRI ; + #sh:class skos:Concept ; #TODO: Check error + #skos:inScheme era-ess:EnergySupplySystems ; + sh:severity sh:Violation ; + sh:message "energySupplySystem (1.1.1.2.2.1.2): The contact line system must define the energy supply system."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "Indication if the traction supply system is fully compilant with TSI" ; + era:rinfIndex "1.1.1.2.2.1.2.1" ; + sh:path era:energySupplySystemTSICompliant ; + sh:minCount 0 ; #TODO: Not yet applicable + sh:datatype xsd:boolean ; + sh:severity sh:Violation ; + sh:message "energySupplySystemTSICompliant (1.1.1.2.2.1.2.1): The contact line system must define if the energy supply system is fully compilant with TSI."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "Umax2 for lines referred to in sections 7.4.2.2.1 and 7.4.2.11.1 of Regulation (EU) 1301/2014" ; + era:rinfIndex "1.1.1.2.2.1.3" ; + sh:path era:umax2 ; + sh:minCount 0 ; #TODO: Not yet applicable + sh:datatype xsd:integer ; + sh:pattern "[1-9]\\d{0,5}|0" ; + sh:severity sh:Violation ; + sh:message "umax2 (1.1.1.2.2.1.3): The contact line system must define the Umax2"@en + ], [ + a sh:PropertyShape ; + rdfs:comment "Indication of the maximum allowable train current" ; + era:rinfIndex "1.1.1.2.2.2" ; + sh:path era:maxTrainCurrent ; + sh:minCount 0 ; #TODO: Not yet applicable + sh:datatype xsd:integer ; + sh:pattern "[1-9]\\d{0,3}|0" ; + sh:severity sh:Violation ; + sh:message "maxTrainCurrent (1.1.1.2.2.2): The contact line system must define the maximum allowable train current."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "Indication of the maximum allowable current at standstill per pantograph" ; + era:rinfIndex "1.1.1.2.2.3" ; + sh:path era:maxCurrentStandstillPantograph ; + sh:minCount 0 ; #TODO: Not yet applicable + sh:datatype xsd:double ; + sh:pattern "[1-9]\\d{0,2}|0" ; + sh:severity sh:Violation ; + sh:message "maxCurrentStandstillPantograph (1.1.1.2.2.3): The contact line system must define the maximum allowable current at standstill per pantograph."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "Indication if the regenerative brake is permitted" ; + era:rinfIndex "1.1.1.2.2.4" ; + sh:path era:conditionalRegenerativeBrake ; + sh:minCount 0 ; #TODO: Not yet applicable + sh:datatype xsd:boolean ; + sh:severity sh:Violation ; + sh:message "conditionalRegenerativeBrake (1.1.1.2.2.4): The contact line system must define if the regenerative brake is permitted."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "Indication of the current or power limitation on board required" ; + era:rinfIndex "1.1.1.2.5.1" ; + sh:path era:currentLimitationRequired ; + sh:minCount 0 ; #TODO: Not yet applicable + sh:datatype xsd:boolean ; + sh:severity sh:Violation ; + sh:message "currentLimitationRequired (1.1.1.2.5.1): The contact line system must define the current or power limitation on board required."@en + ] . + +# TODO: adapt shape from https://github.com/Interoperable-data/ERA_vocabulary/blob/main/era-shacl/RINF-etcs-levels.ttl +era-sh:etcsLevelShape a sh:NodeShape ; + sh:targetClass era:ETCSLevel . + +# Shape extracted from https://github.com/Interoperable-data/ERA_vocabulary/blob/main/era-shacl/RINF-sol-tracks.ttl +era-sh:loadCapabilityShape a sh:NodeShape ; + sh:targetClass era:LoadCapability ; + sh:property [ + a sh:PropertyShape ; + rdfs:comment "Load capability is a combination of the line category and speed at the weakest point of the track."; + era:rinfIndex "1.1.1.1.2.4" ; + sh:path era:loadCapabilitySpeed ; + sh:minCount 0 ; #TODO: Not yet applicable + sh:datatype xsd:integer ; + sh:severity sh:Violation ; + sh:message "loadCapabilitySpeed (1.1.1.1.2.4): The track must have a load capability with a value of speed that is an integer. This error may be due to havong a load capability speed that is not an integer."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "Load capability is a combination of the line category and speed at the weakest point of the track."; + era:rinfIndex "1.1.1.1.2.4" ; + sh:path era:loadCapabilityLineCategory ; + sh:nodeKind sh:IRI ; + sh:severity sh:Violation ; + sh:message "loadCapabilityLineCategory (1.1.1.1.2.4): The track must have a load capability with a value of line category that is an URI. This error may be due to having a load capability line category that is not an URI."@en + ] . + +# Shape adapted from https://github.com/Interoperable-data/ERA_vocabulary/blob/main/era-shacl/RINF-national-lines.ttl +era-sh:nationalLineShape + a sh:NodeShape ; + sh:targetClass era:NationalRailwayLine ; + sh:property [ + a sh:PropertyShape; + rdfs:comment "Indicates the country to which the national line belongs" ; + sh:path era:inCountry ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI; + sh:severity sh:Violation ; + sh:message "inCountry: Each national line must have exactly one country. This error may be due to having national railway line without or with more than one country or its value is not a Concept."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "Classification of a line according to the INF TSI" ; + era:rinfIndex "1.1.1.1.2.2", "1.2.1.0.2.2"; + sh:path era:lineCategory ; + #sh:class skos:Concept ; todo + #skos:inScheme http://data.europa.eu/949/concepts/line-category/LineCategories + sh:severity sh:Violation ; + sh:message "lineCategory (1.1.1.1.2.2, 1.2.1.0.2.2): This error may be due to the national railway line having a value that does not belong to the corresponding concept scheme, http://data.europa.eu/949/concepts/line-category/LineCategories."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "Indication whether the line is designated to a Railway Freight Corridor" ; + era:rinfIndex "1.1.1.1.2.3", "1.2.1.0.2.3" ; + sh:path era:freightCorridor ; + #sh:class skos:Concept ; todo + #skos:inScheme http://data.europa.eu/949/concepts/freight-corridor/FreightCorridors + sh:severity sh:Violation ; + sh:message "freightCorridor (1.1.1.1.2.3, 1.2.1.0.2.3): This error may be due to the national railway line having a value that does not belong to the corresponding concept scheme, http://data.europa.eu/949/concepts/freight-corridor/FreightCorridors."@en + ] . + +# TODO: adapt shape from https://github.com/Interoperable-data/ERA_vocabulary/blob/main/era-shacl/RINF-meso-net-elements.ttl +era-sh:netElementShape a sh:NodeShape ; + sh:targetClass era:NetElement . + +# TODO: adapt shape from https://github.com/Interoperable-data/ERA_vocabulary/blob/main/era-shacl/RINF-meso-net-relations.ttl +era-sh:netRelationShape a sh:NodeShape ; + sh:targetClass era:NetRelation . + +# Shape adapted from https://github.com/Interoperable-data/ERA_vocabulary/blob/main/era-shacl/RINF-operational-points.ttl +era-sh:operationalPointShape a sh:NodeShape ; + sh:targetClass era:OperationalPoint ; + sh:property [ + a sh:PropertyShape; + rdfs:comment "Name normally related to the town or village or to traffic control purpose." ; + era:rinfIndex "1.2.0.0.0.1" ; + sh:path era:opName ; + sh:minCount 0 ; + sh:maxCount 1 ; + sh:datatype xsd:string ; + sh:severity sh:Warning ; + sh:message "opName (1.2.0.0.0.1): There has to be one opName as most, and must be represented as a String."@en + ], [ + a sh:PropertyShape; + rdfs:comment "Code composed of country code and alphanumeric OP code." ; + era:rinfIndex "1.2.0.0.0.2" ; + sh:path era:uopid ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:datatype xsd:string ; + sh:pattern "^[A-Z]{2}.{0,10}$" ; + sh:severity sh:Violation ; + sh:message "uopid (1.2.0.0.0.2): There must be exactly one UOPID, and its value must follow the pattern [AA+AAAAAAAAAA]."@en + ], [ + a sh:PropertyShape; + rdfs:comment "Primary code developed for TAF/TAP." ; + era:rinfIndex "1.2.0.0.0.3" ; + sh:path era:tafTAPCode ; + sh:minCount 0 ; + sh:datatype xsd:string ; + sh:pattern "^[A-Z]{2}\\d{5}$" ; + sh:severity sh:Violation ; + sh:message "tafTAPCode (1.2.0.0.0.3): Must follow the pattern [AANNNNN]."@en + ], [ + a sh:PropertyShape; + rdfs:comment "Type of facility in relation to the dominating operational functions.\nEach existing case has to be approximated to the one of the above defined types by including size, importance and dominating functions. It is most important to recognize the most important role of specific OP in the network. That is why only one type for one OP is permitted." ; + era:rinfIndex "1.2.0.0.0.4" ; + sh:path era:opType ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI; + #sh:class skos:Concept ; todo + sh:severity sh:Violation ; + sh:message "opType (1.2.0.0.0.4): Each OperationalPoint must have exactly one type. This error may be due to having an OP without or with more than one type or it value is not a Concept."@en + ], [ + a sh:PropertyShape; + rdfs:comment "Type of track gauge changeover facility." ; + era:rinfIndex "1.2.0.0.0.4.1" ; + sh:targetClass era:OperationalPoint ; + sh:path era:opTypeGaugeChangeover ; + sh:minCount 0 ; + sh:maxCount 1 ; + sh:datatype xsd:string ; + sh:severity sh:Violation ; + sh:message "opTypeGaugeChangeover (1.2.0.0.0.4.1): The Operational Point must have one opTypeGaugeChangeover at most and the type must be string."@en + ], [ + a sh:PropertyShape; + rdfs:comment "Geographical coordinates in decimal degrees normally given for the centre of the OP." ; + era:rinfIndex "1.2.0.0.0.5" ; + sh:path gsp:hasGeometry ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:severity sh:Violation ; + sh:message "hasGeometry (1.2.0.0.0.5): Each OP must have exactly one location. This error may be due to having an OP without or with more than one location or the object of the property is not a geosparql:Geometry."@en ; + sh:node [ # Added for the TREE member extraction algorithm + a sh:NodeShape ; + sh:targetClass gsp:Geometry; + sh:property [ + a sh:PropertyShape; + rdfs:comment "Geometry coordinates in WKT serialization format." ; + sh:path gsp:asWKT ; + #sh:minCount 1 ; # Ommited + sh:maxCount 1 ; + sh:datatype gsp:wktLiteral ; + sh:severity sh:Violation ; + sh:message "gsp:Geometry. This error This error may be due to having a Geometry without or with more than one asWKT property or it value is not from the wktLiteral type." + ], [ + a sh:PropertyShape; + rdfs:comment "Latitude following the spatial reference system WGS84." ; + sh:path wgs:lat ; + #sh:minCount 1 ; + sh:maxCount 1 ; + sh:minInclusive 34; + sh:maxExclusive 73; + sh:datatype xsd:double ; + sh:severity sh:Violation ; + sh:message "wgs:lat property. This error may be due to having a Geometry without or with more than one lat property or its value is out of the latitude range of Europe." + ], [ + a sh:PropertyShape; + rdfs:comment "Longitude following the spatial reference system WGS84." ; + sh:path wgs:long ; + #sh:minCount 1 ; + sh:maxCount 1 ; + sh:minInclusive -25; + sh:maxExclusive 46; + sh:datatype xsd:double ; + sh:severity sh:Violation ; + sh:message "wgs:long property. This error may be due to having a Geometry without or with more than one long property or it value is out of the longitude range of Europe." + ] + ] + ], [ + a sh:PropertyShape; + rdfs:comment "Kilometre related to line identification defining the location of the OP. This will normally be in the centre of the OP.\nThe railway location identifies the location of an OP in the system of reference of a given line.\nThe parameter can be repeated to allow to describe the location of the OP when it belongs to several lines." ; + era:rinfIndex "1.2.0.0.0.6" ; + sh:path era:lineReference ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:severity sh:Violation ; + sh:message "lineReference (1.2.0.0.0.6): The OperationalPoint must have one LineReference at least. This error may be due to having an OP without LineReference or it class is not LineReference."@en ; + sh:node [ # Added for the TREE member extraction algorithm + a sh:NodeShape; + sh:targetClass era:LineReference; + sh:property [ + a sh:PropertyShape; + rdfs:comment "A reference to the distance measured in kilometers from the origin of a national railway line." ; + sh:path era:kilometer ; + sh:minCount 1 ; + sh:datatype xsd:double; + sh:severity sh:Violation ; + sh:message "lineReference (1.2.0.0.0.6): The LineReference either does not have a value for kilometer that defines its location in the line, or the value of the kilometer is not a double (real) number."@en + ], [ + a sh:PropertyShape; + rdfs:comment "A reference to a specific national railway line." ; + sh:path era:lineNationalId ; + #sh:minCount 1 ; Ommited to avoid dereferencing during TREE member extraction + sh:nodeKind sh:IRI ; + sh:severity sh:Violation ; + sh:message "lineReference (1.2.0.0.0.6): The LineReference must have at least one reference to a specific national railway line."@en + ] + ] + ], [ + a sh:PropertyShape; + rdfs:comment "Existence of rules and restrictions of a strictly local nature." ; + era:rinfIndex "1.2.3.1" ; + sh:path era:localRulesOrRestrictions ; + sh:minCount 0 ; + sh:maxCount 1 ; + sh:datatype xsd:boolean ; + sh:severity sh:Warning ; + sh:message "localRulesOrRestrictions (1.2.3.1): The Operational Point must have one localRulesOrRestrictions at most and the type must be boolean."@en + ], [ + a sh:PropertyShape; + rdfs:comment "Reference of the documents regarding the rules or restrictions of a strictly local nature available by the IM." ; + era:rinfIndex "1.2.3.2" ; + sh:path era:localRulesOrRestrictionsDoc ; + sh:minCount 0 ; + sh:maxCount 1 ; #todo: might not have a maximum + sh:datatype xsd:string ; + sh:severity sh:Warning ; + sh:message "localRulesOrRestrictionsDoc (1.2.3.2): The Operational Point must have one localRulesOrRestrictionsDoc reference at most and the type must be string."@en + ], [ + a sh:PropertyShape; + rdfs:comment "Indicates the country in which the OP resides" ; + sh:path era:inCountry ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + #sh:class skos:Concept ; todo + sh:severity sh:Violation ; + sh:message "inCountry: Each OperationalPoint must have exactly one country. This error may be due to having an OP without or with more than one country or it value is not a Concept."@en + ] . + +# Shape adapted from https://github.com/Interoperable-data/ERA_vocabulary/blob/main/era-shacl/01_RINF-SOL-genericInformation.ttl +era-sh:sectionOfLineShape a sh:NodeShape ; + sh:targetClass era:SectionOfLine ; + sh:property [ + a sh:PropertyShape ; + rdfs:comment "Each SoL can belong to only one national line. In case the SoL is the track connecting OPs within a big node (resulting from the division of a big station into several smaller ones) the line can be identified using the name of this track." ; + era:rinfIndex "1.1.0.0.0.2" ; + sh:path era:lineNationalId ; + #sh:minCount 1 ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:severity sh:Violation ; + sh:message "lineNationalId (1.1.0.0.0.2): Each SoL can belong to only one national line."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "Each SoL may have only one start OP, and each OP has unique OP ID within the MS. The uniqueOPID is defined in parameter 1.2.0.0.0.2. Each SoL has the principal direction of the traffic defined by increasing kilometres running from the start OP to the end OP. That is why the start OP is always located at lowest kilometre of the line within the SoL. Data collected in the UK in miles will be transformed to km for uploading to the RINF application. \n The OP ID must exist in the MS file of RINF. The value of this parameter must be different from 1.1.0.0.0.4. No validation will be performed by RINF application regarding which is the start and which the end OP. This requires national verification." ; + era:rinfIndex "1.1.0.0.0.3" ; + sh:path era:opStart ; + sh:disjoint era:opEnd ; # value must be different to opEnd + # sh:minCount 1 ; checked in ea-sh:opStartExists + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:severity sh:Violation ; + sh:message "opStart (1.1.0.0.0.3): There must be at most one OP start for this section of line and it must be different from the OP end."@en + ], [ + sh:path gsp:hasGeometry ; # Avoid to dereferencing sub-entity as it is not yet populated in the ERA KG + sh:minCount 1 ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI + ], [ + a sh:PropertyShape ; + rdfs:comment "Each SoL may have only one end OP, and each OP has unique OP ID within the MS. The uniqueOPID is defined in parameter 1.2.0.0.0.2. Each SoL has the principal direction of the traffic defined by increasing kilometres running from the start OP to the end OP. That is why the start OP is always located at lowest kilometre of the line within the SoL. Data collected in the UK in miles will be transformed to km for uploading to the RINF application. \n The OP ID must exist in the MS file of RINF. The value of this parameter must be different from 1.1.0.0.0.3. No validation will be performed by RINF application regarding which is the start and which the end OP. This requires national verification." ; + era:rinfIndex "1.1.0.0.0.4" ; + sh:path era:opEnd ; + sh:disjoint era:opStart ; # value must be different to opStart + #sh:minCount 1 ; #checked in era-sh:opEndExists + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:severity sh:Violation ; + sh:message "opEnd (1.1.0.0.0.4): There must be at most one OP end for this section of line and it must be different from the OP start."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "General description: The length of SoL is theoretical distance between centre points of Ops which are selected in such a way to represent the average value for all tracks within the SoL. It is advised to include distances applied by IM for commercial purposes. \n Validation: No validation will be performed by RINF application regarding the length of SoL. This requires national verification." ; + era:rinfIndex "1.1.0.0.0.5" ; + sh:path era:length ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:datatype xsd:double ; + sh:severity sh:Warning ; + sh:message "SOL length (1.1.0.0.0.5): Although no validation is done by the RINF application, either there is no length for the specified SoL, or more than one length has been defined, or the datatype cannot be converted into an xsd:double."@en + ], [ + a sh:PropertyShape ; + rdfs:comment "General description: -- \n Validation: If the value of this parameter is \"Link\", then for all tracks belonging to this SoL, all the parameters of the following groups of parameters are not applicable:\n 1.1.1.1 Infrastructure subsystem \n 1.1.1.2 Energy subsystem \n 1.1.1.3 Control-command and signalling subsystem" ; + era:rinfIndex "1.1.0.0.0.6" ; + sh:path era:solNature ; + sh:minCount 1 ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + #sh:class skos:Concept ; #TODO: Check error + #skos:inScheme ; + sh:severity sh:Violation ; + sh:message "SoL nature (1.1.0.0.0.6): Either no SOL nature is specified for this SoL, or more than one SoL nature has been specified."@en + ] . + +# TODO: adapt shape from https://github.com/Interoperable-data/ERA_vocabulary/blob/main/era-shacl/RINF-op-tracks.ttl +era-sh:opTrackShape a sh:NodeShape ; + sh:targetClass era:Track . + +# TODO: adapt shape from https://github.com/Interoperable-data/ERA_vocabulary/blob/main/era-shacl/RINF-sol-tracks.ttl +era-sh:solTrackShape a sh:NodeShape ; + sh:targetClass era:Track . + +# TODO: adapt shape from https://github.com/Interoperable-data/ERA_vocabulary/blob/main/era-shacl/RINF-train-detection-systems.ttl +era-sh:trainDetectionSystemShape a sh:NodeShape ; + sh:targetClass era:TrainDetectionSystem . diff --git a/tests/data/shape-partial.ttl b/tests/data/shape-partial.ttl new file mode 100644 index 0000000..18f3d64 --- /dev/null +++ b/tests/data/shape-partial.ttl @@ -0,0 +1,22 @@ +@prefix era: . +@prefix gsp: . +@prefix rdf: . +@prefix sh: . + +[ ] a sh:NodeShape; + sh:property [ # Required rdf:type property + sh:path rdf:type; + sh:minCount 1; + sh:or ( # These values are not validated during member extraction + [ sh:hasValue era:ContactLineSystem ] + [ sh:hasValue era:ETCSLevel ] + [ sh:hasValue era:LoadCapability ] + [ sh:hasValue era:NationalRailwayLine ] + [ sh:hasValue era:NetElement ] + [ sh:hasValue era:NetRelation ] + [ sh:hasValue era:OperationalPoint ] + [ sh:hasValue era:SectionOfLine ] + [ sh:hasValue era:Track ] + [ sh:hasValue era:TrainDetectionSystem ] + ) + ]. \ No newline at end of file diff --git a/tests/data/shape1.ttl b/tests/data/shape1.ttl deleted file mode 100644 index e2313c1..0000000 --- a/tests/data/shape1.ttl +++ /dev/null @@ -1,19 +0,0 @@ -@prefix sh: . -@prefix era: . -@prefix gsp: . - -[ ] a sh:NodeShape; - sh:targetClass era:OperationalPoint; - sh:property [ - sh:path gsp:hasGeometry; - sh:node [ - a sh:NodeShape; - sh:targetClass gsp:Geometry - ] - ], [ - sh:path era:lineReference; - sh:node [ - a sh:NodeShape; - sh:targetClass era:LineReference - ] - ]. \ No newline at end of file diff --git a/tests/data/shape2.ttl b/tests/data/shape2.ttl deleted file mode 100644 index 2cbafc8..0000000 --- a/tests/data/shape2.ttl +++ /dev/null @@ -1,12 +0,0 @@ -@prefix sh: . -@prefix rdf: . -@prefix era: . - -[ ] a sh:NodeShape; - sh:targetClass era:Track; - sh:closed true; - sh:property [ - sh:path rdf:type - ], [ - sh:path era:trackId - ]. \ No newline at end of file diff --git a/tests/connector-architecture/ldes-client.test.ts b/tests/rdf-connect/ldes-client.test.ts similarity index 50% rename from tests/connector-architecture/ldes-client.test.ts rename to tests/rdf-connect/ldes-client.test.ts index 85bb21d..1112d72 100644 --- a/tests/connector-architecture/ldes-client.test.ts +++ b/tests/rdf-connect/ldes-client.test.ts @@ -2,10 +2,16 @@ import { describe, test, expect } from "@jest/globals"; import { SimpleStream } from "@ajuvercr/js-runner"; import { Parser } from "n3"; import { RdfStore } from "rdf-stores"; +import { DataFactory } from "rdf-data-factory"; import { processor } from "../../lib/client"; -import { DC, RDF, SDS } from "@treecg/types"; +import { createUriAndTermNamespace, DC, RDF, SDS } from "@treecg/types"; + +const df = new DataFactory(); describe("Functional tests for the js:LdesClient Connector Architecture function", () => { + const ERA_LDES = "https://era.ilabt.imec.be/rinf/ldes"; + const ERA = createUriAndTermNamespace("http://data.europa.eu/949/"); + const GSP = createUriAndTermNamespace("http://www.opengis.net/ont/geosparql#"); test("Fetching a remote LDES unordered and with after filter", async () => { const outputStream = new SimpleStream(); @@ -18,7 +24,7 @@ describe("Functional tests for the js:LdesClient Connector Architecture function // Setup client const exec = await processor( outputStream, - "https://era.ilabt.imec.be/rinf/ldes", + ERA_LDES, undefined, new Date("3024-03-09T15:00:00.000Z"), "none", @@ -42,7 +48,7 @@ describe("Functional tests for the js:LdesClient Connector Architecture function // Setup client const exec = await processor( outputStream, - "https://era.ilabt.imec.be/rinf/ldes", + ERA_LDES, new Date("1600-01-01T00:00:00.000Z"), undefined, "none", @@ -77,7 +83,7 @@ describe("Functional tests for the js:LdesClient Connector Architecture function // Setup client const exec = await processor( outputStream, - "https://era.ilabt.imec.be/rinf/ldes", + ERA_LDES, new Date("2024-03-08T11:43:00.000Z"), new Date("2024-03-08T11:39:00.000Z"), "none", @@ -116,7 +122,7 @@ describe("Functional tests for the js:LdesClient Connector Architecture function // Setup client const exec = await processor( outputStream, - "https://era.ilabt.imec.be/rinf/ldes", + ERA_LDES, new Date("2024-03-08T11:43:00.000Z"), new Date("2024-03-08T11:39:00.000Z"), "ascending", @@ -157,7 +163,7 @@ describe("Functional tests for the js:LdesClient Connector Architecture function // Setup client const exec = await processor( outputStream, - "https://era.ilabt.imec.be/rinf/ldes", + ERA_LDES, new Date("2024-03-08T11:43:00.000Z"), new Date("2024-03-08T11:39:00.000Z"), "descending", @@ -173,23 +179,23 @@ describe("Functional tests for the js:LdesClient Connector Architecture function expect(isSorted).toBeTruthy(); }); - test("Fetching a remote LDES unordered, with before and after filter and original shapes", async () => { + test("Fetching a remote LDES unordered, with before and after filter and LDES original shapes", async () => { const outputStream = new SimpleStream(); let count = 0; const observedClasses = new Map([ - ["ContactLineSystem", false], - ["ETCSLevel", false], - ["LoadCapability", false], - ["NationalRailwayLine", false], - ["NetElement", false], - ["NetRelation", false], - ["OperationalPoint", false], - ["Geometry", false], - ["LineReference", false], - ["SectionOfLine", false], - ["Track", false], - ["TrainDetectionSystem", false] + [ERA.custom("ContactLineSystem"), false], + [ERA.custom("ETCSLevel"), false], + [ERA.custom("LoadCapability"), false], + [ERA.custom("NationalRailwayLine"), false], + [ERA.custom("NetElement"), false], + [ERA.custom("NetRelation"), false], + [ERA.custom("OperationalPoint"), false], + //[ERA.custom("Geometry"), false], + //[ERA.custom("LineReference"), false], + [ERA.custom("SectionOfLine"), false], + [ERA.custom("Track"), false], + [ERA.custom("TrainDetectionSystem"), false] ]); outputStream.data(record => { for (const classSuffix of observedClasses.keys()) { @@ -203,7 +209,7 @@ describe("Functional tests for the js:LdesClient Connector Architecture function // Setup client const exec = await processor( outputStream, - "https://era.ilabt.imec.be/rinf/ldes", + ERA_LDES, new Date("2024-03-08T11:43:00.000Z"), new Date("2024-03-08T11:39:00.000Z"), "none", @@ -221,20 +227,50 @@ describe("Functional tests for the js:LdesClient Connector Architecture function expect(Array.from(observedClasses.values()).every(v => v === true)).toBeTruthy(); }); - test("Fetching a remote LDES unordered, with before and after filter and overridden shapes", async () => { + test("Fetching a remote LDES unordered, with before and after filter and overridden full shapes 1", async () => { const outputStream = new SimpleStream(); let count = 0; - const observedClasses = new Set(); + const observedClasses = new Map([ + [ERA.custom("ContactLineSystem"), false], + [ERA.custom("ETCSLevel"), false], + [ERA.custom("LoadCapability"), false], + [ERA.custom("NationalRailwayLine"), false], + [ERA.custom("NetElement"), false], + [ERA.custom("NetRelation"), false], + [ERA.custom("OperationalPoint"), false], + [GSP.custom("Geometry"), false], + [ERA.custom("LineReference"), false], + [ERA.custom("SectionOfLine"), false], + [ERA.custom("Track"), false], + [ERA.custom("TrainDetectionSystem"), false] + ]); + outputStream.data(record => { const store = RdfStore.createDefault(); new Parser().parse(record).forEach(q => store.addQuad(q)); - const typeQs = store.getQuads(null, RDF.terms.type); - typeQs.forEach(tq => observedClasses.add(tq.object.value)); + + // Check which classes we got + for (const classSuffix of observedClasses.keys()) { + if (record.includes(classSuffix)) { + observedClasses.set(classSuffix, true); + } + } - // Check era:Tracks only have the 2 properties defined in shape2.ttl - if (record.includes("/Track")) { - expect(store.getQuads(typeQs[0].subject).length).toBeLessThanOrEqual(2); + // Check era:OperationalPoint instances include triples of related gsp:Geometry (if not an as:Delete) + if ( + record.includes(ERA.custom("OperationalPoint")) && + !record.includes("") + ) { + expect(store.getQuads( + null, + RDF.terms.type, + df.namedNode("http://www.opengis.net/ont/geosparql#Geometry") + ).length).toBe(1); + expect(store.getQuads( + null, + df.namedNode(GSP.custom("asWKT")) + ).length).toBe(1); } count++; }); @@ -242,13 +278,13 @@ describe("Functional tests for the js:LdesClient Connector Architecture function // Setup client const exec = await processor( outputStream, - "https://era.ilabt.imec.be/rinf/ldes", + ERA_LDES, new Date("2024-03-08T11:43:00.000Z"), new Date("2024-03-08T11:39:00.000Z"), "none", false, undefined, - ["./tests/data/shape1.ttl", "./tests/data/shape2.ttl"], + "./tests/data/shape-full-1.ttl", false ); @@ -256,7 +292,140 @@ describe("Functional tests for the js:LdesClient Connector Architecture function await exec(); // Check we got some members expect(count).toBeGreaterThan(0); - // Check we only saw expected classes - expect(observedClasses.size).toBe(5); + // Check we saw all expected classes + expect(Array.from(observedClasses.values()).every(v => v === true)).toBeTruthy(); + }); + + test("Fetching a remote LDES unordered, with before and after filter and overridden full shapes 2", async () => { + const outputStream = new SimpleStream(); + + let count = 0; + const observedClasses = new Map([ + [ERA.custom("ContactLineSystem"), false], + [ERA.custom("ETCSLevel"), false], + [ERA.custom("LoadCapability"), false], + [ERA.custom("NationalRailwayLine"), false], + [ERA.custom("NetElement"), false], + [ERA.custom("NetRelation"), false], + [ERA.custom("OperationalPoint"), false], + [GSP.custom("Geometry"), false], + [ERA.custom("LineReference"), false], + [ERA.custom("SectionOfLine"), false], + [ERA.custom("Track"), false], + [ERA.custom("TrainDetectionSystem"), false] + ]); + + outputStream.data(record => { + const store = RdfStore.createDefault(); + new Parser().parse(record).forEach(q => store.addQuad(q)); + + // Check which classes we got + for (const classSuffix of observedClasses.keys()) { + if (record.includes(classSuffix)) { + observedClasses.set(classSuffix, true); + } + } + + // Check era:OperationalPoint instances include triples of related gsp:Geometry (if not an as:Delete) + if ( + record.includes(ERA.custom("OperationalPoint")) && + !record.includes("") + ) { + expect(store.getQuads( + null, + RDF.terms.type, + df.namedNode(GSP.custom("Geometry")) + ).length).toBe(1); + expect(store.getQuads( + null, + df.namedNode(GSP.custom("asWKT")) + ).length).toBe(1); + } + count++; + }); + + // Setup client + const exec = await processor( + outputStream, + ERA_LDES, + new Date("2024-03-08T11:43:00.000Z"), + new Date("2024-03-08T11:39:00.000Z"), + "none", + false, + undefined, + "./tests/data/shape-full-2.ttl", + false + ); + + // Run client + await exec(); + // Check we got some members + expect(count).toBeGreaterThan(0); + // Check we saw all expected classes + expect(Array.from(observedClasses.values()).every(v => v === true)).toBeTruthy(); + }); + + test("Fetching a remote LDES unordered, with before and after filter and overridden partial shapes", async () => { + const outputStream = new SimpleStream(); + + let count = 0; + // All classes except for classes of sub-entities gsp:Geometry and era:LineReference + const observedClasses = new Map([ + [ERA.custom("ContactLineSystem"), false], + [ERA.custom("ETCSLevel"), false], + [ERA.custom("LoadCapability"), false], + [ERA.custom("NationalRailwayLine"), false], + [ERA.custom("NetElement"), false], + [ERA.custom("NetRelation"), false], + [ERA.custom("OperationalPoint"), false], + [ERA.custom("SectionOfLine"), false], + [ERA.custom("Track"), false], + [ERA.custom("TrainDetectionSystem"), false] + ]); + + outputStream.data(record => { + const store = RdfStore.createDefault(); + new Parser().parse(record).forEach(q => store.addQuad(q)); + + // Check which classes we got + for (const classSuffix of observedClasses.keys()) { + if (record.includes(classSuffix)) { + observedClasses.set(classSuffix, true); + } + } + + // Check era:OperationalPoint instances does not include triples of a related gsp:Geometry (if not an as:Delete) + if ( + record.includes(ERA.custom("OperationalPoint")) && + !record.includes("") + ) { + expect(store.getQuads( + null, + RDF.terms.type, + df.namedNode("http://www.opengis.net/ont/geosparql#Geometry") + ).length).toBe(0); + } + count++; + }); + + // Setup client + const exec = await processor( + outputStream, + ERA_LDES, + new Date("2024-03-08T11:43:00.000Z"), + new Date("2024-03-08T11:39:00.000Z"), + "none", + false, + undefined, + "./tests/data/shape-partial.ttl", + false + ); + + // Run client + await exec(); + // Check we got some members + expect(count).toBeGreaterThan(0); + // Check we saw all expected classes + expect(Array.from(observedClasses.values()).every(v => v === true)).toBeTruthy(); }); }); \ No newline at end of file diff --git a/tests/connector-architecture/processor.test.ts b/tests/rdf-connect/processor.test.ts similarity index 98% rename from tests/connector-architecture/processor.test.ts rename to tests/rdf-connect/processor.test.ts index 8be99ed..1c79ebe 100644 --- a/tests/connector-architecture/processor.test.ts +++ b/tests/rdf-connect/processor.test.ts @@ -65,7 +65,7 @@ describe("Tests for js:LdesClient processor", async () => { expect(ordered).toBe("ascending"); expect(follow).toBeTruthy(); expect(pollInterval).toBe(5); - expect(shapeFiles[0]).toBe("/path/to/shape.ttl"); + expect(shapeFiles).toBe("/path/to/shape.ttl"); expect(noShape).toBeFalsy(); expect(savePath).toBe("/state/save.json"); expect(loose).toBeFalsy();