From 194dd4c3892b6f4a89346577e28ecea0287c302c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Fri, 25 Feb 2022 00:30:15 +0100 Subject: [PATCH 01/21] service with @PVahldiek --- adapter/src/services/adapterService.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/adapter/src/services/adapterService.ts b/adapter/src/services/adapterService.ts index 005d7d8c0..e009aec9f 100644 --- a/adapter/src/services/adapterService.ts +++ b/adapter/src/services/adapterService.ts @@ -1,3 +1,4 @@ +import { Importer } from "../importer/Importer"; import { Interpreter } from "../interpreter/Interpreter"; import { AdapterConfig } from "../model/AdapterConfig"; import { DataImportResponse } from "../model/DataImportResponse"; @@ -19,7 +20,7 @@ export class AdapterService { } - static getAllProtocols(): Array { + static getAllProtocols(): Array { return [Protocol.HTTP] } From 5a28af0d2fb488c9ff4a4a60a74315a20d744cd5 Mon Sep 17 00:00:00 2001 From: Pascal Vahldiek Date: Mon, 28 Feb 2022 23:27:55 +0100 Subject: [PATCH 02/21] Interpreter validateParameters() and InterpreterErrors with @MarcoDoell --- adapter/src/interpreter/Interpreter.ts | 4 ++-- .../src/interpreter/InterpreterParameterDescription.ts | 0 adapter/src/model/exceptions/AdapterError.ts | 0 adapter/src/model/exceptions/InterpreterParameterError.ts | 8 ++++++++ 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 adapter/src/interpreter/InterpreterParameterDescription.ts create mode 100644 adapter/src/model/exceptions/AdapterError.ts create mode 100644 adapter/src/model/exceptions/InterpreterParameterError.ts diff --git a/adapter/src/interpreter/Interpreter.ts b/adapter/src/interpreter/Interpreter.ts index 6d44997b7..206e86dc8 100644 --- a/adapter/src/interpreter/Interpreter.ts +++ b/adapter/src/interpreter/Interpreter.ts @@ -3,7 +3,7 @@ export abstract class Interpreter { description: string | undefined; parameters: Record | undefined; - + interpret(data: string, parameters: Record): string { //throws IOException this.validateParameters(parameters); return this.doInterpret(data, parameters); @@ -12,7 +12,7 @@ export abstract class Interpreter { abstract doInterpret(data: string, parameters: Record): string //throws IOException; validateParameters(inputParameters: Record) { //throws InterpreterParameterException - /*boolean illegalArguments = false; + /*boolean illegalArguments = false; String illegalArgumentsMessage = ""; for (InterpreterParameterDescription requiredParameter : getAvailableParameters()) { diff --git a/adapter/src/interpreter/InterpreterParameterDescription.ts b/adapter/src/interpreter/InterpreterParameterDescription.ts new file mode 100644 index 000000000..e69de29bb diff --git a/adapter/src/model/exceptions/AdapterError.ts b/adapter/src/model/exceptions/AdapterError.ts new file mode 100644 index 000000000..e69de29bb diff --git a/adapter/src/model/exceptions/InterpreterParameterError.ts b/adapter/src/model/exceptions/InterpreterParameterError.ts new file mode 100644 index 000000000..238ce7666 --- /dev/null +++ b/adapter/src/model/exceptions/InterpreterParameterError.ts @@ -0,0 +1,8 @@ +import { AdapterError } from "./AdapterError"; + +export class InterpreterParameterError extends AdapterError{ + + constructor(msg: string){ + super(msg); + } +} \ No newline at end of file From 4e08fcea06bcdfceb9cf10c190f1a1dd2ca57e28 Mon Sep 17 00:00:00 2001 From: Pascal Vahldiek Date: Mon, 28 Feb 2022 23:59:08 +0100 Subject: [PATCH 03/21] Importer validateParameters() and ImporterErrors with @MarcoDoell --- adapter/src/importer/Importer.ts | 74 ++++++------------- .../exceptions/ImporterParameterError.ts | 0 2 files changed, 24 insertions(+), 50 deletions(-) create mode 100644 adapter/src/model/exceptions/ImporterParameterError.ts diff --git a/adapter/src/importer/Importer.ts b/adapter/src/importer/Importer.ts index 66a7a33b6..2d5ca61a4 100644 --- a/adapter/src/importer/Importer.ts +++ b/adapter/src/importer/Importer.ts @@ -1,9 +1,10 @@ import { ImporterParameterDescription } from "./ImporterParameterDescription"; +import { ImporterParameterError } from "../model/exceptions/ImporterParameterError"; export abstract class Importer { type: string | undefined; description: string | undefined; - parameters: Record | undefined; + parameters: Map | undefined; getRequiredParameters(): Array { return [] @@ -11,68 +12,41 @@ export abstract class Importer { abstract getAvailableParameters() :Array; - fetch(parameters:Record ): string { //throws ImporterParameterException + fetch(parameters:Map ): string { //throws ImporterParameterException this.validateParameters(parameters); return this.doFetch(parameters); } - abstract doFetch(parameters: Record): string; //throws ImporterParameterException + abstract doFetch(parameters: Map): string; //throws ImporterParameterException - validateParameters(inputParameters: Record) { //throws ImporterParameterException; + validateParameters(inputParameters: Map) { //throws ImporterParameterException; - } -/** - * - * public abstract String getType(); - - public abstract String getDescription(); - - @JsonProperty("parameters") - public abstract List getAvailableParameters(); - - protected List getRequiredParameters() { - return getAvailableParameters().stream() - .filter(ImporterParameterDescription::isRequired).collect(Collectors.toList()); - } - - public final String fetch(Map parameters) throws ImporterParameterException { - validateParameters(parameters); - return doFetch(parameters); - } + let illegalArguments: boolean = false; + let illegalArgumentsMessage: string = ""; - protected abstract String doFetch(Map parameters) throws ImporterParameterException; - - protected void validateParameters(Map inputParameters) throws ImporterParameterException { - boolean illegalArguments = false; - String illegalArgumentsMessage = ""; - - - List possibleParameters = getAvailableParameters().stream() - .map(ImporterParameterDescription::getName).collect(Collectors.toList()); - var unnecessaryArguments = inputParameters.keySet().stream() - .filter(o -> !possibleParameters.contains(o)).collect(Collectors.toList()); - if (unnecessaryArguments.size() > 0) { + let possibleParameters: Array = this.getAvailableParameters(); + // TODO is that OK? + let unnecessaryArguments = Array.from(inputParameters.values()).filter((item: any) => possibleParameters.includes(item)) + if(unnecessaryArguments.length > 0){ illegalArguments = true; - for (var argument : - unnecessaryArguments) { - illegalArgumentsMessage += argument + " is not needed by importer \n"; + for(let argument of unnecessaryArguments){ + illegalArgumentsMessage += argument + " is not needed by importer \n" } } - - for (ImporterParameterDescription requiredParameter : getRequiredParameters()) { - if (inputParameters.get(requiredParameter.getName()) == null) { + for (let requiredParameter of this.getRequiredParameters()){ + if (inputParameters.get(requiredParameter.name) == null){ illegalArguments = true; - illegalArgumentsMessage = illegalArgumentsMessage + getType() + " importer requires parameter " - + requiredParameter.getName() + "/n"; - - } else if (inputParameters.get(requiredParameter.getName()).getClass() != requiredParameter.getType()) { + illegalArgumentsMessage = illegalArgumentsMessage + this.type + "importer requires parameter " + requiredParameter.name + "\n"; + } + // TODO is that OK? + else if((inputParameters.get(requiredParameter.name) as any).constructor.name != requiredParameter.type){ illegalArguments = true; - illegalArgumentsMessage = illegalArgumentsMessage + getType() + " importer requires parameter " - + requiredParameter.getName() + " to be type " + requiredParameter.getType().toString() + "/n"; + illegalArgumentsMessage = illegalArgumentsMessage + this.type + " importer requires parameter " + + requiredParameter.name + " to be type " + (requiredParameter.type as string) + "\n"; } } - if (illegalArguments) { - throw new ImporterParameterException(illegalArgumentsMessage); + if(illegalArguments){ + throw new ImporterParameterError(illegalArgumentsMessage); } - */ + } } \ No newline at end of file diff --git a/adapter/src/model/exceptions/ImporterParameterError.ts b/adapter/src/model/exceptions/ImporterParameterError.ts new file mode 100644 index 000000000..e69de29bb From eac4fdb438b555d020980f8416cc6da88d82efa9 Mon Sep 17 00:00:00 2001 From: Pascal Vahldiek Date: Tue, 1 Mar 2022 00:12:14 +0100 Subject: [PATCH 04/21] implementation for interpreter and importer with @MarcoDoell --- adapter/src/importer/HttpImporter.ts | 2 +- adapter/src/importer/Importer.ts | 2 +- adapter/src/interpreter/CsvInterpreter.ts | 6 ++- adapter/src/interpreter/Interpreter.ts | 47 ++++++++++--------- .../InterpreterParameterDescription.ts | 13 +++++ adapter/src/interpreter/JsonInterpreter.ts | 6 ++- adapter/src/interpreter/XmlInterpreter.ts | 6 ++- adapter/src/model/exceptions/AdapterError.ts | 5 ++ .../exceptions/ImporterParameterError.ts | 8 ++++ 9 files changed, 69 insertions(+), 26 deletions(-) diff --git a/adapter/src/importer/HttpImporter.ts b/adapter/src/importer/HttpImporter.ts index ea98e43bc..084571e08 100644 --- a/adapter/src/importer/HttpImporter.ts +++ b/adapter/src/importer/HttpImporter.ts @@ -5,7 +5,7 @@ export class HttpImporter extends Importer { getAvailableParameters(): ImporterParameterDescription[] { throw new Error("Method not implemented."); } - doFetch(parameters: Record): string { + doFetch(parameters: Map): string { throw new Error("Method not implemented."); } /** diff --git a/adapter/src/importer/Importer.ts b/adapter/src/importer/Importer.ts index 2d5ca61a4..94ee41118 100644 --- a/adapter/src/importer/Importer.ts +++ b/adapter/src/importer/Importer.ts @@ -7,7 +7,7 @@ export abstract class Importer { parameters: Map | undefined; getRequiredParameters(): Array { - return [] + return this.getAvailableParameters().filter((item: any) => item.required) as Array } abstract getAvailableParameters() :Array; diff --git a/adapter/src/interpreter/CsvInterpreter.ts b/adapter/src/interpreter/CsvInterpreter.ts index 3af13c6db..ae197ccb6 100644 --- a/adapter/src/interpreter/CsvInterpreter.ts +++ b/adapter/src/interpreter/CsvInterpreter.ts @@ -1,8 +1,12 @@ import {Interpreter} from "./Interpreter"; +import { InterpreterParameterDescription } from "./InterpreterParameterDescription"; export class CsvInterpreter extends Interpreter { - doInterpret(data: string, parameters: Record): string { + getAvailableParameters(): InterpreterParameterDescription[] { + throw new Error("Method not implemented."); + } + doInterpret(data: string, parameters: Map): string { throw new Error("Method not implemented."); } diff --git a/adapter/src/interpreter/Interpreter.ts b/adapter/src/interpreter/Interpreter.ts index 206e86dc8..4415684ea 100644 --- a/adapter/src/interpreter/Interpreter.ts +++ b/adapter/src/interpreter/Interpreter.ts @@ -1,34 +1,39 @@ +import { stringifiers } from "@jvalue/node-dry-basics"; +import { InterpreterParameterError } from "../model/exceptions/InterpreterParameterError"; +import { InterpreterParameterDescription } from "./InterpreterParameterDescription"; + export abstract class Interpreter { type: string | undefined; description: string | undefined; - parameters: Record | undefined; + parameters: Map | undefined; - interpret(data: string, parameters: Record): string { //throws IOException + interpret(data: string, parameters: Map): string { //throws IOException this.validateParameters(parameters); return this.doInterpret(data, parameters); } - abstract doInterpret(data: string, parameters: Record): string //throws IOException; - - validateParameters(inputParameters: Record) { //throws InterpreterParameterException - /*boolean illegalArguments = false; - String illegalArgumentsMessage = ""; - - for (InterpreterParameterDescription requiredParameter : getAvailableParameters()) { - if (inputParameters.get(requiredParameter.getName()) == null) { - illegalArguments = true; - illegalArgumentsMessage = illegalArgumentsMessage + getType() + " interpreter requires parameter " - + requiredParameter.getName() + "/n"; + abstract doInterpret(data: string, parameters: Map): string //throws IOException; + abstract getAvailableParameters(): Array; - } else if (inputParameters.get(requiredParameter.getName()).getClass() != requiredParameter.getType()) { - illegalArguments = true; - illegalArgumentsMessage = illegalArgumentsMessage + getType() + " interpreter requires parameter " - + requiredParameter.getName() + " to be type " + requiredParameter.getType().toString() + "/n"; - } + validateParameters(inputParameters: Map) { //throws InterpreterParameterException + let illegalArguments: boolean = false; + let illegalArgumentsMessage: string = ""; + + for (let requiredParameter of this.getAvailableParameters()){ + if (inputParameters.get(requiredParameter.name) == null){ + illegalArguments = true; + illegalArgumentsMessage = illegalArgumentsMessage + this.type + "interpreter requires parameter " + requiredParameter.name + "\n"; } - if (illegalArguments) { - throw new InterpreterParameterException(illegalArgumentsMessage); - }*/ + // TODO is that OK? + else if((inputParameters.get(requiredParameter.name) as any).constructor.name != requiredParameter.type){ + illegalArguments = true; + illegalArgumentsMessage = illegalArgumentsMessage + this.type + " interpreter requires parameter " + + requiredParameter.name + " to be type " + (requiredParameter.type as string) + "\n"; + } + } + if(illegalArguments){ + throw new InterpreterParameterError(illegalArgumentsMessage); } } +} diff --git a/adapter/src/interpreter/InterpreterParameterDescription.ts b/adapter/src/interpreter/InterpreterParameterDescription.ts index e69de29bb..36ea23c1e 100644 --- a/adapter/src/interpreter/InterpreterParameterDescription.ts +++ b/adapter/src/interpreter/InterpreterParameterDescription.ts @@ -0,0 +1,13 @@ +export class InterpreterParameterDescription{ + + name: string; + description: string; + required: boolean | undefined; + type: unknown; + + constructor (name: string, description: string, type: unknown) { + this.name = name; + this.description = description; + this.type = type; + } +} \ No newline at end of file diff --git a/adapter/src/interpreter/JsonInterpreter.ts b/adapter/src/interpreter/JsonInterpreter.ts index d4e3604ee..6aefe4d6b 100644 --- a/adapter/src/interpreter/JsonInterpreter.ts +++ b/adapter/src/interpreter/JsonInterpreter.ts @@ -1,7 +1,11 @@ import {Interpreter} from "./Interpreter"; +import { InterpreterParameterDescription } from "./InterpreterParameterDescription"; export class JsonInterpreter extends Interpreter { - doInterpret(data: string, parameters: Record): string { + getAvailableParameters(): InterpreterParameterDescription[] { + throw new Error("Method not implemented."); + } + doInterpret(data: string, parameters: Map): string { throw new Error("Method not implemented."); } diff --git a/adapter/src/interpreter/XmlInterpreter.ts b/adapter/src/interpreter/XmlInterpreter.ts index e871ff965..9b2e4f5a9 100644 --- a/adapter/src/interpreter/XmlInterpreter.ts +++ b/adapter/src/interpreter/XmlInterpreter.ts @@ -1,7 +1,11 @@ import {Interpreter} from "./Interpreter"; +import { InterpreterParameterDescription } from "./InterpreterParameterDescription"; export class XmlInterpreter extends Interpreter{ - doInterpret(data: string, parameters: Record): string { + getAvailableParameters(): InterpreterParameterDescription[] { + throw new Error("Method not implemented."); + } + doInterpret(data: string, parameters: Map): string { throw new Error("Method not implemented."); } diff --git a/adapter/src/model/exceptions/AdapterError.ts b/adapter/src/model/exceptions/AdapterError.ts index e69de29bb..3a235cda0 100644 --- a/adapter/src/model/exceptions/AdapterError.ts +++ b/adapter/src/model/exceptions/AdapterError.ts @@ -0,0 +1,5 @@ +export class AdapterError extends Error{ + constructor(msg: string){ + super(msg); + } +} \ No newline at end of file diff --git a/adapter/src/model/exceptions/ImporterParameterError.ts b/adapter/src/model/exceptions/ImporterParameterError.ts index e69de29bb..f7ffcd91d 100644 --- a/adapter/src/model/exceptions/ImporterParameterError.ts +++ b/adapter/src/model/exceptions/ImporterParameterError.ts @@ -0,0 +1,8 @@ +import { AdapterError } from "./AdapterError"; + +export class ImporterParameterError extends AdapterError{ + + constructor(msg: string){ + super(msg); + } +} \ No newline at end of file From 2ff5f505cc4d87d3f3ae6ff3b2cebbafce820c70 Mon Sep 17 00:00:00 2001 From: ChristoffSchaub Date: Sun, 6 Mar 2022 11:32:18 +0100 Subject: [PATCH 05/21] add first implementation of dataImportEndpoint --- .../datasource/api/rest/dataImportEndpoint.ts | 45 +++ adapter/src/index.ts | 3 + package-lock.json | 372 +++++++++++++++++- 3 files changed, 417 insertions(+), 3 deletions(-) create mode 100644 adapter/src/datasource/api/rest/dataImportEndpoint.ts diff --git a/adapter/src/datasource/api/rest/dataImportEndpoint.ts b/adapter/src/datasource/api/rest/dataImportEndpoint.ts new file mode 100644 index 000000000..ec3f0e904 --- /dev/null +++ b/adapter/src/datasource/api/rest/dataImportEndpoint.ts @@ -0,0 +1,45 @@ +import express, {Express} from "express"; +import {asyncHandler} from "../../../api/rest/utils"; + +export class DataImportEndpoint { + + registerRoutes = (app: express.Application): void => { + app.get('/datasources/:datasourceId/imports', asyncHandler(this.getDataImportsForDatasource)); + app.get('/datasources/:datasourceId/imports/latest', asyncHandler(this.getLatestDataImportForDatasource)); + app.get('/datasources/:datasourceId/imports/latest/data', asyncHandler(this.getLatestDataImportForDatasource)); + app.get('/datasources/:datasourceId/imports/:dataImportId', asyncHandler(this.getDataImportForDatasource)); + app.get('/datasources/:datasourceId/imports/:dataImportId/data', asyncHandler(this.getDataImportForDatasource)); + }; + + getDataImportsForDatasource = async ( + req: express.Request, + res: express.Response, + ): Promise => { + + // access param : + // res.send('profile with id' + req.params.id) + const param = req.params.datasourceId; + res.status(200).send("You called: /datasources/"+param+"/imports"); + + }; + + getLatestDataImportForDatasource = async ( + req: express.Request, + res: express.Response, + ): Promise => { + // access param : + // res.send('profile with id' + req.params.id) + res.status(200).send("test"); + }; + + getDataImportForDatasource = async ( + req: express.Request, + res: express.Response, + ): Promise => { + // access param : + // res.send('profile with id' + req.params.id) + const param = req.params.datasourceId; + const dataImportId= req.params.dataImportId; + res.status(200).send("You called: /datasources/"+param+"/imports/"+dataImportId+"/data"); + }; +} diff --git a/adapter/src/index.ts b/adapter/src/index.ts index 6686f4c6d..d29e75adc 100644 --- a/adapter/src/index.ts +++ b/adapter/src/index.ts @@ -4,6 +4,7 @@ import bodyParser from 'body-parser'; import cors from 'cors'; import express from 'express'; import { AdapterEndpoint } from './api/rest/adapterEndpoint'; +import { DataImportEndpoint } from './datasource/api/rest/dataImportEndpoint'; export const port = 8080; const API_VERSION = '0.0.1'; @@ -23,6 +24,8 @@ async function main(): Promise { const adapterEndpoint = new AdapterEndpoint(); adapterEndpoint.registerRoutes(app); + const dataImportEndpoint = new DataImportEndpoint(); + dataImportEndpoint.registerRoutes(app); server = app.listen(port, () => { console.log(`Listening on port ${port}`); diff --git a/package-lock.json b/package-lock.json index 987d6128b..cd3ef4a3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,372 @@ { - "name": "ods", - "lockfileVersion": 2, "requires": true, - "packages": {} + "lockfileVersion": 1, + "dependencies": { + "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==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "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==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "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==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "requires": { + "mime-db": "1.51.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "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==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" + }, + "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==" + }, + "raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "requires": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + } + } } From d3dc280edd1844fa6581bc62a01659c1d8afb5b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 19:53:50 +0100 Subject: [PATCH 06/21] refactoring of project structure with @PVahldiek --- adapter/src/{ => adapter}/api/rest/adapterEndpoint.ts | 0 adapter/src/{ => adapter}/api/rest/utils.ts | 0 adapter/src/{ => adapter}/importer/HttpImporter.ts | 0 adapter/src/{ => adapter}/importer/Importer.ts | 0 .../src/{ => adapter}/importer/ImporterParameterDescription.ts | 0 adapter/src/{ => adapter}/interpreter/CsvInterpreter.ts | 0 adapter/src/{ => adapter}/interpreter/Interpreter.ts | 0 .../{ => adapter}/interpreter/InterpreterParameterDescription.ts | 0 adapter/src/{ => adapter}/interpreter/JsonInterpreter.ts | 0 adapter/src/{ => adapter}/interpreter/XmlInterpreter.ts | 0 adapter/src/{ => adapter}/model/AdapterConfig.ts | 0 adapter/src/{ => adapter}/model/DataImportResponse.ts | 0 adapter/src/{ => adapter}/model/FormatConfig.ts | 0 adapter/src/{ => adapter}/model/ProtocolConfig.ts | 0 adapter/src/{ => adapter}/model/enum/Format.ts | 0 adapter/src/{ => adapter}/model/enum/Protocol.ts | 0 adapter/src/{ => adapter}/model/exceptions/AdapterError.ts | 0 .../src/{ => adapter}/model/exceptions/ImporterParameterError.ts | 0 .../{ => adapter}/model/exceptions/InterpreterParameterError.ts | 0 adapter/src/{ => adapter}/services/adapterService.ts | 0 20 files changed, 0 insertions(+), 0 deletions(-) rename adapter/src/{ => adapter}/api/rest/adapterEndpoint.ts (100%) rename adapter/src/{ => adapter}/api/rest/utils.ts (100%) rename adapter/src/{ => adapter}/importer/HttpImporter.ts (100%) rename adapter/src/{ => adapter}/importer/Importer.ts (100%) rename adapter/src/{ => adapter}/importer/ImporterParameterDescription.ts (100%) rename adapter/src/{ => adapter}/interpreter/CsvInterpreter.ts (100%) rename adapter/src/{ => adapter}/interpreter/Interpreter.ts (100%) rename adapter/src/{ => adapter}/interpreter/InterpreterParameterDescription.ts (100%) rename adapter/src/{ => adapter}/interpreter/JsonInterpreter.ts (100%) rename adapter/src/{ => adapter}/interpreter/XmlInterpreter.ts (100%) rename adapter/src/{ => adapter}/model/AdapterConfig.ts (100%) rename adapter/src/{ => adapter}/model/DataImportResponse.ts (100%) rename adapter/src/{ => adapter}/model/FormatConfig.ts (100%) rename adapter/src/{ => adapter}/model/ProtocolConfig.ts (100%) rename adapter/src/{ => adapter}/model/enum/Format.ts (100%) rename adapter/src/{ => adapter}/model/enum/Protocol.ts (100%) rename adapter/src/{ => adapter}/model/exceptions/AdapterError.ts (100%) rename adapter/src/{ => adapter}/model/exceptions/ImporterParameterError.ts (100%) rename adapter/src/{ => adapter}/model/exceptions/InterpreterParameterError.ts (100%) rename adapter/src/{ => adapter}/services/adapterService.ts (100%) diff --git a/adapter/src/api/rest/adapterEndpoint.ts b/adapter/src/adapter/api/rest/adapterEndpoint.ts similarity index 100% rename from adapter/src/api/rest/adapterEndpoint.ts rename to adapter/src/adapter/api/rest/adapterEndpoint.ts diff --git a/adapter/src/api/rest/utils.ts b/adapter/src/adapter/api/rest/utils.ts similarity index 100% rename from adapter/src/api/rest/utils.ts rename to adapter/src/adapter/api/rest/utils.ts diff --git a/adapter/src/importer/HttpImporter.ts b/adapter/src/adapter/importer/HttpImporter.ts similarity index 100% rename from adapter/src/importer/HttpImporter.ts rename to adapter/src/adapter/importer/HttpImporter.ts diff --git a/adapter/src/importer/Importer.ts b/adapter/src/adapter/importer/Importer.ts similarity index 100% rename from adapter/src/importer/Importer.ts rename to adapter/src/adapter/importer/Importer.ts diff --git a/adapter/src/importer/ImporterParameterDescription.ts b/adapter/src/adapter/importer/ImporterParameterDescription.ts similarity index 100% rename from adapter/src/importer/ImporterParameterDescription.ts rename to adapter/src/adapter/importer/ImporterParameterDescription.ts diff --git a/adapter/src/interpreter/CsvInterpreter.ts b/adapter/src/adapter/interpreter/CsvInterpreter.ts similarity index 100% rename from adapter/src/interpreter/CsvInterpreter.ts rename to adapter/src/adapter/interpreter/CsvInterpreter.ts diff --git a/adapter/src/interpreter/Interpreter.ts b/adapter/src/adapter/interpreter/Interpreter.ts similarity index 100% rename from adapter/src/interpreter/Interpreter.ts rename to adapter/src/adapter/interpreter/Interpreter.ts diff --git a/adapter/src/interpreter/InterpreterParameterDescription.ts b/adapter/src/adapter/interpreter/InterpreterParameterDescription.ts similarity index 100% rename from adapter/src/interpreter/InterpreterParameterDescription.ts rename to adapter/src/adapter/interpreter/InterpreterParameterDescription.ts diff --git a/adapter/src/interpreter/JsonInterpreter.ts b/adapter/src/adapter/interpreter/JsonInterpreter.ts similarity index 100% rename from adapter/src/interpreter/JsonInterpreter.ts rename to adapter/src/adapter/interpreter/JsonInterpreter.ts diff --git a/adapter/src/interpreter/XmlInterpreter.ts b/adapter/src/adapter/interpreter/XmlInterpreter.ts similarity index 100% rename from adapter/src/interpreter/XmlInterpreter.ts rename to adapter/src/adapter/interpreter/XmlInterpreter.ts diff --git a/adapter/src/model/AdapterConfig.ts b/adapter/src/adapter/model/AdapterConfig.ts similarity index 100% rename from adapter/src/model/AdapterConfig.ts rename to adapter/src/adapter/model/AdapterConfig.ts diff --git a/adapter/src/model/DataImportResponse.ts b/adapter/src/adapter/model/DataImportResponse.ts similarity index 100% rename from adapter/src/model/DataImportResponse.ts rename to adapter/src/adapter/model/DataImportResponse.ts diff --git a/adapter/src/model/FormatConfig.ts b/adapter/src/adapter/model/FormatConfig.ts similarity index 100% rename from adapter/src/model/FormatConfig.ts rename to adapter/src/adapter/model/FormatConfig.ts diff --git a/adapter/src/model/ProtocolConfig.ts b/adapter/src/adapter/model/ProtocolConfig.ts similarity index 100% rename from adapter/src/model/ProtocolConfig.ts rename to adapter/src/adapter/model/ProtocolConfig.ts diff --git a/adapter/src/model/enum/Format.ts b/adapter/src/adapter/model/enum/Format.ts similarity index 100% rename from adapter/src/model/enum/Format.ts rename to adapter/src/adapter/model/enum/Format.ts diff --git a/adapter/src/model/enum/Protocol.ts b/adapter/src/adapter/model/enum/Protocol.ts similarity index 100% rename from adapter/src/model/enum/Protocol.ts rename to adapter/src/adapter/model/enum/Protocol.ts diff --git a/adapter/src/model/exceptions/AdapterError.ts b/adapter/src/adapter/model/exceptions/AdapterError.ts similarity index 100% rename from adapter/src/model/exceptions/AdapterError.ts rename to adapter/src/adapter/model/exceptions/AdapterError.ts diff --git a/adapter/src/model/exceptions/ImporterParameterError.ts b/adapter/src/adapter/model/exceptions/ImporterParameterError.ts similarity index 100% rename from adapter/src/model/exceptions/ImporterParameterError.ts rename to adapter/src/adapter/model/exceptions/ImporterParameterError.ts diff --git a/adapter/src/model/exceptions/InterpreterParameterError.ts b/adapter/src/adapter/model/exceptions/InterpreterParameterError.ts similarity index 100% rename from adapter/src/model/exceptions/InterpreterParameterError.ts rename to adapter/src/adapter/model/exceptions/InterpreterParameterError.ts diff --git a/adapter/src/services/adapterService.ts b/adapter/src/adapter/services/adapterService.ts similarity index 100% rename from adapter/src/services/adapterService.ts rename to adapter/src/adapter/services/adapterService.ts From 2f85da1cf14a8d905dc7bfc8bc6ac626d8e18313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 19:59:57 +0100 Subject: [PATCH 07/21] override abstract methods in httpimporter with @PVahldiek --- adapter/src/adapter/importer/HttpImporter.ts | 24 ++++++++++---------- adapter/src/adapter/importer/Importer.ts | 3 +++ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/adapter/src/adapter/importer/HttpImporter.ts b/adapter/src/adapter/importer/HttpImporter.ts index 084571e08..99184e6b5 100644 --- a/adapter/src/adapter/importer/HttpImporter.ts +++ b/adapter/src/adapter/importer/HttpImporter.ts @@ -2,10 +2,20 @@ import { Importer } from "./Importer"; import { ImporterParameterDescription } from "./ImporterParameterDescription"; export class HttpImporter extends Importer { - getAvailableParameters(): ImporterParameterDescription[] { + + // Override annotation is not necessary, but will be used for a better understanding of the code + override getType(): string { + return "HTTP"; + } + + override getDescription(): string { + return "Plain HTTP"; + } + + override getAvailableParameters(): ImporterParameterDescription[] { throw new Error("Method not implemented."); } - doFetch(parameters: Map): string { + override doFetch(parameters: Map): string { throw new Error("Method not implemented."); } /** @@ -18,16 +28,6 @@ export class HttpImporter extends Importer { RuntimeParameters.class)); private final RestTemplate restTemplate; - @Override - public String getType() { - return "HTTP"; - } - - @Override - public String getDescription() { - return "Plain HTTP"; - } - @Override protected void validateParameters(Map inputParameters) throws ImporterParameterException { super.validateParameters(inputParameters); diff --git a/adapter/src/adapter/importer/Importer.ts b/adapter/src/adapter/importer/Importer.ts index 94ee41118..52fc17156 100644 --- a/adapter/src/adapter/importer/Importer.ts +++ b/adapter/src/adapter/importer/Importer.ts @@ -17,6 +17,9 @@ export abstract class Importer { return this.doFetch(parameters); } + abstract getType(): string; + abstract getDescription(): string; + abstract doFetch(parameters: Map): string; //throws ImporterParameterException validateParameters(inputParameters: Map) { //throws ImporterParameterException; From c57f073fe914affdaf09828588c56a559ee773da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 20:14:49 +0100 Subject: [PATCH 08/21] httimporter parameter list with @PVahldiek --- adapter/src/adapter/importer/HttpImporter.ts | 14 +++++++++++++- adapter/src/adapter/importer/Importer.ts | 4 ++-- .../importer/ImporterParameterDescription.ts | 7 +++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/adapter/src/adapter/importer/HttpImporter.ts b/adapter/src/adapter/importer/HttpImporter.ts index 99184e6b5..c167608c0 100644 --- a/adapter/src/adapter/importer/HttpImporter.ts +++ b/adapter/src/adapter/importer/HttpImporter.ts @@ -3,6 +3,18 @@ import { ImporterParameterDescription } from "./ImporterParameterDescription"; export class HttpImporter extends Importer { + parameters = [new ImporterParameterDescription({name:"location", description:"String of the URI for the HTTP call", type:"string"}), + new ImporterParameterDescription({name:"encoding", description:"Encoding of the source. Available encodings: ISO-8859-1, US-ASCII, UTF-8", type:"string"}), + new ImporterParameterDescription({name:"defaultParameters", description:"Default values for open parameters in the URI", required:false, type:"string"})] + /** + * + * private final List parameters = List.of( + new ImporterParameterDescription("location", "String of the URI for the HTTP call", String.class), + new ImporterParameterDescription("encoding", + "Encoding of the source. Available encodings: ISO-8859-1, US-ASCII, UTF-8", String.class), + new ImporterParameterDescription("defaultParameters", "Default values for open parameters in the URI", false, + RuntimeParameters.class)); + **/ // Override annotation is not necessary, but will be used for a better understanding of the code override getType(): string { return "HTTP"; @@ -13,7 +25,7 @@ export class HttpImporter extends Importer { } override getAvailableParameters(): ImporterParameterDescription[] { - throw new Error("Method not implemented."); + return this.parameters; } override doFetch(parameters: Map): string { throw new Error("Method not implemented."); diff --git a/adapter/src/adapter/importer/Importer.ts b/adapter/src/adapter/importer/Importer.ts index 52fc17156..1d75627cc 100644 --- a/adapter/src/adapter/importer/Importer.ts +++ b/adapter/src/adapter/importer/Importer.ts @@ -4,12 +4,12 @@ import { ImporterParameterError } from "../model/exceptions/ImporterParameterErr export abstract class Importer { type: string | undefined; description: string | undefined; - parameters: Map | undefined; getRequiredParameters(): Array { return this.getAvailableParameters().filter((item: any) => item.required) as Array } + //@JsonProperty("parameters") abstract getAvailableParameters() :Array; fetch(parameters:Map ): string { //throws ImporterParameterException @@ -19,7 +19,7 @@ export abstract class Importer { abstract getType(): string; abstract getDescription(): string; - + abstract doFetch(parameters: Map): string; //throws ImporterParameterException validateParameters(inputParameters: Map) { //throws ImporterParameterException; diff --git a/adapter/src/adapter/importer/ImporterParameterDescription.ts b/adapter/src/adapter/importer/ImporterParameterDescription.ts index a845c1f6c..2f5244764 100644 --- a/adapter/src/adapter/importer/ImporterParameterDescription.ts +++ b/adapter/src/adapter/importer/ImporterParameterDescription.ts @@ -1,12 +1,15 @@ export class ImporterParameterDescription { name: string; description: string; - required: boolean | undefined; + required: boolean; + + //TODO @Georg: need to check how to store the class in typescript, can use instance.constructor.name to get the name probably type: unknown; - constructor (name: string, description: string, type: unknown) { + constructor ({name,description,required=true,type}: {name:string, description:string, required?:boolean, type:unknown}) { this.name = name; this.description = description; + this.required = required; this.type = type; } } \ No newline at end of file From db8f7c033e398a581e00b0303178d9a1d3094964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 20:23:36 +0100 Subject: [PATCH 09/21] added axios for http calls with @PVahldiek --- adapter/package-lock.json | 121 ++++++++----------- adapter/package.json | 4 +- adapter/src/adapter/importer/HttpImporter.ts | 23 +--- 3 files changed, 54 insertions(+), 94 deletions(-) diff --git a/adapter/package-lock.json b/adapter/package-lock.json index 2fd4f14ec..5100c1a1a 100644 --- a/adapter/package-lock.json +++ b/adapter/package-lock.json @@ -11,10 +11,10 @@ "@jvalue/node-dry-amqp": "0.1.2", "@jvalue/node-dry-basics": "0.0.3", "@jvalue/node-dry-pg": "1.2.1", + "axios": "^0.26.0", "body-parser": "^1.19.0", "cors": "^2.8.5", - "express": "^4.17.1", - "jackson-js": "^1.1.0" + "express": "^4.17.1" }, "devDependencies": { "@jvalue/eslint-config-jvalue": "^1.1.0", @@ -2088,6 +2088,14 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "node_modules/axios": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz", + "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, "node_modules/babel-jest": { "version": "27.4.6", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz", @@ -3848,6 +3856,25 @@ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -4626,17 +4653,6 @@ "node": ">=8" } }, - "node_modules/jackson-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jackson-js/-/jackson-js-1.1.0.tgz", - "integrity": "sha512-EDKwt9U6dd/zNW/7p3VejSYUYgUkZ5c7v4gGAO7KhA1qLp6DXPpBjIx9ELI9LzQjpFtoL8g6CAQAhBuDmzkYMw==", - "dependencies": { - "lodash.clone": "^4.5.0", - "lodash.clonedeep": "^4.5.0", - "meriyah": "^1.9.12", - "reflect-metadata": "^0.1.13" - } - }, "node_modules/jest": { "version": "27.0.5", "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.5.tgz", @@ -6902,16 +6918,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.clone": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -7003,14 +7009,6 @@ "node": ">= 8" } }, - "node_modules/meriyah": { - "version": "1.9.15", - "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-1.9.15.tgz", - "integrity": "sha512-D4rT6XIYGqZab0EI/xbihUpwh0WbNRVQ35l2J/5QC2atxaI8h3KvA55DEJLBB/FRdaji7JwkNehfCRjCyjCjqw==", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -7969,11 +7967,6 @@ "string_decoder": "~0.10.x" } }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -8920,9 +8913,9 @@ } }, "node_modules/url-parse": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", - "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -10825,6 +10818,14 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "axios": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz", + "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==", + "requires": { + "follow-redirects": "^1.14.8" + } + }, "babel-jest": { "version": "27.4.6", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz", @@ -12212,6 +12213,11 @@ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, + "follow-redirects": { + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -12764,17 +12770,6 @@ "istanbul-lib-report": "^3.0.0" } }, - "jackson-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jackson-js/-/jackson-js-1.1.0.tgz", - "integrity": "sha512-EDKwt9U6dd/zNW/7p3VejSYUYgUkZ5c7v4gGAO7KhA1qLp6DXPpBjIx9ELI9LzQjpFtoL8g6CAQAhBuDmzkYMw==", - "requires": { - "lodash.clone": "^4.5.0", - "lodash.clonedeep": "^4.5.0", - "meriyah": "^1.9.12", - "reflect-metadata": "^0.1.13" - } - }, "jest": { "version": "27.0.5", "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.5.tgz", @@ -14459,16 +14454,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.clone": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -14544,11 +14529,6 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "meriyah": { - "version": "1.9.15", - "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-1.9.15.tgz", - "integrity": "sha512-D4rT6XIYGqZab0EI/xbihUpwh0WbNRVQ35l2J/5QC2atxaI8h3KvA55DEJLBB/FRdaji7JwkNehfCRjCyjCjqw==" - }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -15254,11 +15234,6 @@ "string_decoder": "~0.10.x" } }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -15974,9 +15949,9 @@ } }, "url-parse": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", - "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" diff --git a/adapter/package.json b/adapter/package.json index 89a0eb85f..7cc44329d 100644 --- a/adapter/package.json +++ b/adapter/package.json @@ -19,7 +19,8 @@ "@jvalue/node-dry-pg": "1.2.1", "body-parser": "^1.19.0", "cors": "^2.8.5", - "express": "^4.17.1" + "express": "^4.17.1", + "axios": "^0.26.0" }, "devDependencies": { "@jvalue/eslint-config-jvalue": "^1.1.0", @@ -31,7 +32,6 @@ "@typescript-eslint/parser": "^4.30.0", "eslint": "^7.31.0", "eslint-config-prettier": "^8.3.0", - "eslint-plugin-import": "^2.23.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^3.4.0", "eslint-plugin-promise": "^5.1.0", diff --git a/adapter/src/adapter/importer/HttpImporter.ts b/adapter/src/adapter/importer/HttpImporter.ts index c167608c0..b075bb92f 100644 --- a/adapter/src/adapter/importer/HttpImporter.ts +++ b/adapter/src/adapter/importer/HttpImporter.ts @@ -3,18 +3,11 @@ import { ImporterParameterDescription } from "./ImporterParameterDescription"; export class HttpImporter extends Importer { + //TODO RuntimeParameters type is probably wrong parameters = [new ImporterParameterDescription({name:"location", description:"String of the URI for the HTTP call", type:"string"}), new ImporterParameterDescription({name:"encoding", description:"Encoding of the source. Available encodings: ISO-8859-1, US-ASCII, UTF-8", type:"string"}), - new ImporterParameterDescription({name:"defaultParameters", description:"Default values for open parameters in the URI", required:false, type:"string"})] - /** - * - * private final List parameters = List.of( - new ImporterParameterDescription("location", "String of the URI for the HTTP call", String.class), - new ImporterParameterDescription("encoding", - "Encoding of the source. Available encodings: ISO-8859-1, US-ASCII, UTF-8", String.class), - new ImporterParameterDescription("defaultParameters", "Default values for open parameters in the URI", false, - RuntimeParameters.class)); - **/ + new ImporterParameterDescription({name:"defaultParameters", description:"Default values for open parameters in the URI", required:false, type:"RuntimeParameters"})] + // Override annotation is not necessary, but will be used for a better understanding of the code override getType(): string { return "HTTP"; @@ -30,16 +23,8 @@ export class HttpImporter extends Importer { override doFetch(parameters: Map): string { throw new Error("Method not implemented."); } - /** - * - * private final List parameters = List.of( - new ImporterParameterDescription("location", "String of the URI for the HTTP call", String.class), - new ImporterParameterDescription("encoding", - "Encoding of the source. Available encodings: ISO-8859-1, US-ASCII, UTF-8", String.class), - new ImporterParameterDescription("defaultParameters", "Default values for open parameters in the URI", false, - RuntimeParameters.class)); - private final RestTemplate restTemplate; + /* @Override protected void validateParameters(Map inputParameters) throws ImporterParameterException { super.validateParameters(inputParameters); From 2a8574f056938a90360545adcb2e596abd29d5e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 20:45:08 +0100 Subject: [PATCH 10/21] implemented doFtech and validateParameters in HttpImporter with @PVahldiek --- adapter/src/adapter/importer/HttpImporter.ts | 66 +++++++++++++------ .../datasource/api/rest/dataImportEndpoint.ts | 2 +- adapter/src/index.ts | 2 +- 3 files changed, 48 insertions(+), 22 deletions(-) diff --git a/adapter/src/adapter/importer/HttpImporter.ts b/adapter/src/adapter/importer/HttpImporter.ts index b075bb92f..12b2307a5 100644 --- a/adapter/src/adapter/importer/HttpImporter.ts +++ b/adapter/src/adapter/importer/HttpImporter.ts @@ -1,5 +1,7 @@ +import { ImporterParameterError } from "../model/exceptions/ImporterParameterError"; import { Importer } from "./Importer"; import { ImporterParameterDescription } from "./ImporterParameterDescription"; +const axios = require('axios'); export class HttpImporter extends Importer { @@ -20,31 +22,55 @@ export class HttpImporter extends Importer { override getAvailableParameters(): ImporterParameterDescription[] { return this.parameters; } - override doFetch(parameters: Map): string { - throw new Error("Method not implemented."); + + override validateParameters(inputParameters: Map): void { + super.validateParameters(inputParameters); + let encoding = inputParameters.get("encoding"); + + // TODO CHECK IF ENCODING ARE WRITTEN CORRECT + if (encoding !== "ISO-8859-1" && encoding !== "US-ASCII" && encoding !== "UTF-8") { + throw new Error(this.getType() + " interpreter requires parameter encoding to have value " + + "ISO-8859-1" + ", " + + "US-ASCII" + ", " + + "UTF-8" + + ". Your given value " + encoding + " is invalid!"); + } } + /** + protected void validateParameters(Map inputParameters) throws ImporterParameterException { + super.validateParameters(inputParameters); - /* - @Override - protected void validateParameters(Map inputParameters) throws ImporterParameterException { - super.validateParameters(inputParameters); - - String encoding = (String) inputParameters.get("encoding"); - if (!encoding.equals(StandardCharsets.ISO_8859_1.name()) && !encoding.equals(StandardCharsets.US_ASCII.name()) && !encoding.equals(StandardCharsets.UTF_8.name())) { - throw new IllegalArgumentException(getType() + " interpreter requires parameter encoding to have value " + - StandardCharsets.ISO_8859_1 + ", " + - StandardCharsets.US_ASCII + ", " + - StandardCharsets.UTF_8 - + ". Your given value " + encoding + " is invalid!"); + String encoding = (String) inputParameters.get("encoding"); + if (!encoding.equals(StandardCharsets.ISO_8859_1.name()) && !encoding.equals(StandardCharsets.US_ASCII.name()) && !encoding.equals(StandardCharsets.UTF_8.name())) { + throw new IllegalArgumentException(getType() + " interpreter requires parameter encoding to have value " + + StandardCharsets.ISO_8859_1 + ", " + + StandardCharsets.US_ASCII + ", " + + StandardCharsets.UTF_8 + + ". Your given value " + encoding + " is invalid!"); + } + } + */ + override doFetch(parameters: Map): string { + let uri = parameters.get("location") + let encoding = parameters.get("encoding") + // TODO see if encoding from response is good + axios({ + method: 'get', + url: uri, + responseEncoding: encoding + }).then(function (response: any) { + console.log(response.data) + return response.data + }).catch(function (error: any) { + console.error(error) + throw new ImporterParameterError("Could not Fetch from URI:" + uri) + }); + throw new ImporterParameterError("Could not Fetch from URI:" + uri) } - } - @Override - public List getAvailableParameters() { - return parameters; - } + /* - @Override + @Override protected String doFetch(Map parameters) throws ImporterParameterException { String location = parameters.get("location").toString(); try { diff --git a/adapter/src/datasource/api/rest/dataImportEndpoint.ts b/adapter/src/datasource/api/rest/dataImportEndpoint.ts index ec3f0e904..58a6ca113 100644 --- a/adapter/src/datasource/api/rest/dataImportEndpoint.ts +++ b/adapter/src/datasource/api/rest/dataImportEndpoint.ts @@ -1,5 +1,5 @@ import express, {Express} from "express"; -import {asyncHandler} from "../../../api/rest/utils"; +import {asyncHandler} from "../../../adapter/api/rest/utils"; export class DataImportEndpoint { diff --git a/adapter/src/index.ts b/adapter/src/index.ts index d29e75adc..166be038e 100644 --- a/adapter/src/index.ts +++ b/adapter/src/index.ts @@ -3,7 +3,7 @@ import { Server } from 'http'; import bodyParser from 'body-parser'; import cors from 'cors'; import express from 'express'; -import { AdapterEndpoint } from './api/rest/adapterEndpoint'; +import { AdapterEndpoint } from './adapter/api/rest/adapterEndpoint'; import { DataImportEndpoint } from './datasource/api/rest/dataImportEndpoint'; export const port = 8080; From e61714622fcb64a78d8a3e555b377c2d990ffcc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 20:48:01 +0100 Subject: [PATCH 11/21] added abstract methods for interpreter + implement in subclasses with @PVahldiek --- .../importer/ImporterParameterDescription.ts | 2 +- .../src/adapter/interpreter/CsvInterpreter.ts | 16 ++++++---------- adapter/src/adapter/interpreter/Interpreter.ts | 3 ++- .../InterpreterParameterDescription.ts | 1 + .../src/adapter/interpreter/JsonInterpreter.ts | 16 ++++++---------- .../src/adapter/interpreter/XmlInterpreter.ts | 16 ++++++---------- 6 files changed, 22 insertions(+), 32 deletions(-) diff --git a/adapter/src/adapter/importer/ImporterParameterDescription.ts b/adapter/src/adapter/importer/ImporterParameterDescription.ts index 2f5244764..00696e168 100644 --- a/adapter/src/adapter/importer/ImporterParameterDescription.ts +++ b/adapter/src/adapter/importer/ImporterParameterDescription.ts @@ -3,7 +3,7 @@ export class ImporterParameterDescription { description: string; required: boolean; - //TODO @Georg: need to check how to store the class in typescript, can use instance.constructor.name to get the name probably + //TODO @Georg: need to check how to store the class in typescript, can use instance.constructor.name to get the name probably -> is stored as string type: unknown; constructor ({name,description,required=true,type}: {name:string, description:string, required?:boolean, type:unknown}) { diff --git a/adapter/src/adapter/interpreter/CsvInterpreter.ts b/adapter/src/adapter/interpreter/CsvInterpreter.ts index ae197ccb6..5b1118ece 100644 --- a/adapter/src/adapter/interpreter/CsvInterpreter.ts +++ b/adapter/src/adapter/interpreter/CsvInterpreter.ts @@ -3,6 +3,12 @@ import { InterpreterParameterDescription } from "./InterpreterParameterDescripti export class CsvInterpreter extends Interpreter { + getType(): string { + return "CSV" + } + getDescription(): string { + return "Interpret data as CSV data"; + } getAvailableParameters(): InterpreterParameterDescription[] { throw new Error("Method not implemented."); } @@ -20,16 +26,6 @@ export class CsvInterpreter extends Interpreter { private final CsvMapper mapper = new CsvMapper().enable(CsvParser.Feature.WRAP_AS_ARRAY); private final ObjectMapper jsonMapper = new ObjectMapper(); - @Override - public String getType() { - return "CSV"; - } - - @Override - public String getDescription() { - return "Interpret data as CSV data"; - } - @Override public List getAvailableParameters() { return parameters; diff --git a/adapter/src/adapter/interpreter/Interpreter.ts b/adapter/src/adapter/interpreter/Interpreter.ts index 4415684ea..bab44b246 100644 --- a/adapter/src/adapter/interpreter/Interpreter.ts +++ b/adapter/src/adapter/interpreter/Interpreter.ts @@ -5,7 +5,6 @@ import { InterpreterParameterDescription } from "./InterpreterParameterDescripti export abstract class Interpreter { type: string | undefined; description: string | undefined; - parameters: Map | undefined; interpret(data: string, parameters: Map): string { //throws IOException @@ -13,6 +12,8 @@ export abstract class Interpreter { return this.doInterpret(data, parameters); } + abstract getType(): string; + abstract getDescription(): string; abstract doInterpret(data: string, parameters: Map): string //throws IOException; abstract getAvailableParameters(): Array; diff --git a/adapter/src/adapter/interpreter/InterpreterParameterDescription.ts b/adapter/src/adapter/interpreter/InterpreterParameterDescription.ts index 36ea23c1e..c1045c30d 100644 --- a/adapter/src/adapter/interpreter/InterpreterParameterDescription.ts +++ b/adapter/src/adapter/interpreter/InterpreterParameterDescription.ts @@ -3,6 +3,7 @@ export class InterpreterParameterDescription{ name: string; description: string; required: boolean | undefined; + //TODO @Georg: need to check how to store the class in typescript, can use instance.constructor.name to get the name probably -> is stored as string -> Same as in Importer type: unknown; constructor (name: string, description: string, type: unknown) { diff --git a/adapter/src/adapter/interpreter/JsonInterpreter.ts b/adapter/src/adapter/interpreter/JsonInterpreter.ts index 6aefe4d6b..fd036bc4b 100644 --- a/adapter/src/adapter/interpreter/JsonInterpreter.ts +++ b/adapter/src/adapter/interpreter/JsonInterpreter.ts @@ -2,6 +2,12 @@ import {Interpreter} from "./Interpreter"; import { InterpreterParameterDescription } from "./InterpreterParameterDescription"; export class JsonInterpreter extends Interpreter { + getType(): string { + return "JSON"; + } + getDescription(): string { + return "Interpret data as JSON data"; + } getAvailableParameters(): InterpreterParameterDescription[] { throw new Error("Method not implemented."); } @@ -13,16 +19,6 @@ export class JsonInterpreter extends Interpreter { private final List parameters = List.of(); private final ObjectMapper mapper = new ObjectMapper(); - @Override - public String getType() { - return "JSON"; - } - - @Override - public String getDescription() { - return "Interpret data as JSON data"; - } - @Override public List getAvailableParameters() { return parameters; diff --git a/adapter/src/adapter/interpreter/XmlInterpreter.ts b/adapter/src/adapter/interpreter/XmlInterpreter.ts index 9b2e4f5a9..3c3cf728b 100644 --- a/adapter/src/adapter/interpreter/XmlInterpreter.ts +++ b/adapter/src/adapter/interpreter/XmlInterpreter.ts @@ -2,6 +2,12 @@ import {Interpreter} from "./Interpreter"; import { InterpreterParameterDescription } from "./InterpreterParameterDescription"; export class XmlInterpreter extends Interpreter{ + getType(): string { + return "XML"; + } + getDescription(): string { + return "Interpret data as XML data"; + } getAvailableParameters(): InterpreterParameterDescription[] { throw new Error("Method not implemented."); } @@ -17,16 +23,6 @@ export class XmlInterpreter extends Interpreter{ mapper.registerModule(new SimpleModule().addDeserializer(Object.class, new UntypedXMLArrayDeserializer())); } - @Override - public String getType() { - return "XML"; - } - - @Override - public String getDescription() { - return "Interpret data as XML data"; - } - @Override public List getAvailableParameters() { return parameters; From 103e071b29bd44bd045b4cb7f8b1e5ff1606691d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 20:49:09 +0100 Subject: [PATCH 12/21] added overrides with @PVahldiek --- adapter/src/adapter/interpreter/CsvInterpreter.ts | 9 +++++---- adapter/src/adapter/interpreter/JsonInterpreter.ts | 9 +++++---- adapter/src/adapter/interpreter/XmlInterpreter.ts | 10 ++++++---- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/adapter/src/adapter/interpreter/CsvInterpreter.ts b/adapter/src/adapter/interpreter/CsvInterpreter.ts index 5b1118ece..7861f14e7 100644 --- a/adapter/src/adapter/interpreter/CsvInterpreter.ts +++ b/adapter/src/adapter/interpreter/CsvInterpreter.ts @@ -3,16 +3,17 @@ import { InterpreterParameterDescription } from "./InterpreterParameterDescripti export class CsvInterpreter extends Interpreter { - getType(): string { + + override getType(): string { return "CSV" } - getDescription(): string { + override getDescription(): string { return "Interpret data as CSV data"; } - getAvailableParameters(): InterpreterParameterDescription[] { + override getAvailableParameters(): InterpreterParameterDescription[] { throw new Error("Method not implemented."); } - doInterpret(data: string, parameters: Map): string { + override doInterpret(data: string, parameters: Map): string { throw new Error("Method not implemented."); } diff --git a/adapter/src/adapter/interpreter/JsonInterpreter.ts b/adapter/src/adapter/interpreter/JsonInterpreter.ts index fd036bc4b..afa15886f 100644 --- a/adapter/src/adapter/interpreter/JsonInterpreter.ts +++ b/adapter/src/adapter/interpreter/JsonInterpreter.ts @@ -2,16 +2,17 @@ import {Interpreter} from "./Interpreter"; import { InterpreterParameterDescription } from "./InterpreterParameterDescription"; export class JsonInterpreter extends Interpreter { - getType(): string { + + override getType(): string { return "JSON"; } - getDescription(): string { + override getDescription(): string { return "Interpret data as JSON data"; } - getAvailableParameters(): InterpreterParameterDescription[] { + override getAvailableParameters(): InterpreterParameterDescription[] { throw new Error("Method not implemented."); } - doInterpret(data: string, parameters: Map): string { + override doInterpret(data: string, parameters: Map): string { throw new Error("Method not implemented."); } diff --git a/adapter/src/adapter/interpreter/XmlInterpreter.ts b/adapter/src/adapter/interpreter/XmlInterpreter.ts index 3c3cf728b..a7e73223b 100644 --- a/adapter/src/adapter/interpreter/XmlInterpreter.ts +++ b/adapter/src/adapter/interpreter/XmlInterpreter.ts @@ -2,18 +2,20 @@ import {Interpreter} from "./Interpreter"; import { InterpreterParameterDescription } from "./InterpreterParameterDescription"; export class XmlInterpreter extends Interpreter{ - getType(): string { + + override getType(): string { return "XML"; } - getDescription(): string { + override getDescription(): string { return "Interpret data as XML data"; } - getAvailableParameters(): InterpreterParameterDescription[] { + override getAvailableParameters(): InterpreterParameterDescription[] { throw new Error("Method not implemented."); } - doInterpret(data: string, parameters: Map): string { + override doInterpret(data: string, parameters: Map): string { throw new Error("Method not implemented."); } + /* private final List parameters = List.of(); From 9f0aae6374509be7bea896636b938a10d538e2da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 20:55:54 +0100 Subject: [PATCH 13/21] added xml2js for decoding of xml string with @PVahldiek --- adapter/package-lock.json | 1604 +---------------- adapter/package.json | 3 +- adapter/src/adapter/importer/HttpImporter.ts | 2 +- .../adapter/interpreter/JsonInterpreter.ts | 25 +- .../src/adapter/interpreter/XmlInterpreter.ts | 18 +- package-lock.json | 372 +--- 6 files changed, 87 insertions(+), 1937 deletions(-) diff --git a/adapter/package-lock.json b/adapter/package-lock.json index 5100c1a1a..d392127c6 100644 --- a/adapter/package-lock.json +++ b/adapter/package-lock.json @@ -14,7 +14,8 @@ "axios": "^0.26.0", "body-parser": "^1.19.0", "cors": "^2.8.5", - "express": "^4.17.1" + "express": "^4.17.1", + "xml2js": "^0.4.23" }, "devDependencies": { "@jvalue/eslint-config-jvalue": "^1.1.0", @@ -26,7 +27,6 @@ "@typescript-eslint/parser": "^4.30.0", "eslint": "^7.31.0", "eslint-config-prettier": "^8.3.0", - "eslint-plugin-import": "^2.23.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^3.4.0", "eslint-plugin-promise": "^5.1.0", @@ -1595,12 +1595,6 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -2028,25 +2022,6 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -2056,23 +2031,6 @@ "node": ">=8" } }, - "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -2427,19 +2385,6 @@ "node": ">= 0.8" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2728,18 +2673,6 @@ "node": ">=0.10.0" } }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2874,66 +2807,6 @@ "node": ">=8.6" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3108,47 +2981,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", - "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/eslint-plugin-es": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", @@ -3192,62 +3024,6 @@ "node": ">=4" } }, - "node_modules/eslint-plugin-import": { - "version": "2.23.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", - "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.1", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.4.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.3", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/eslint-plugin-node": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", @@ -3810,18 +3586,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -3941,20 +3705,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -3976,22 +3726,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -4086,15 +3820,6 @@ "node": ">= 0.4.0" } }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -4104,39 +3829,6 @@ "node": ">=4" } }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -4285,20 +3977,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -4307,52 +3985,6 @@ "node": ">= 0.10" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", @@ -4365,21 +3997,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4419,18 +4036,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4440,52 +4045,12 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -4498,54 +4063,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -6811,12 +6334,6 @@ "node": ">=4" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6875,43 +6392,6 @@ "node": ">= 0.8.0" } }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -7131,27 +6611,6 @@ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -7173,71 +6632,18 @@ "node": ">=8" } }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, "node_modules/on-finished": { @@ -7292,39 +6698,6 @@ "node": ">= 0.8.0" } }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", @@ -7342,19 +6715,6 @@ "node": ">=6" } }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -7369,15 +6729,6 @@ "node": ">= 0.8" } }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -7508,15 +6859,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/pirates": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", @@ -7608,18 +6950,6 @@ "node": ">=8" } }, - "node_modules/pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -7917,45 +7247,6 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", @@ -8115,6 +7406,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "node_modules/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -8223,20 +7519,6 @@ "node": ">=8" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/signal-exit": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", @@ -8327,38 +7609,6 @@ "source-map": "^0.6.0" } }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, "node_modules/split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", @@ -8434,32 +7684,6 @@ "node": ">=8" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -8744,39 +7968,6 @@ "typescript": ">=3.8 <5.0" } }, - "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/tslib": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", @@ -8871,21 +8062,6 @@ "node": ">=4.2.0" } }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -8958,16 +8134,6 @@ "node": ">= 8" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -9059,22 +8225,6 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -9179,6 +8329,26 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", @@ -10458,12 +9628,6 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, "@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -10776,36 +9940,12 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - } - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -11093,16 +10233,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -11342,15 +10472,6 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -11451,54 +10572,6 @@ "ansi-colors": "^4.1.1" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -11705,120 +10778,29 @@ "dev": true, "requires": {} }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", - "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, "eslint-plugin-es": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.23.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", - "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.1", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.4.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.3", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { + "eslint-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { - "esutils": "^2.0.2" + "eslint-visitor-keys": "^1.1.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true } } @@ -12177,15 +11159,6 @@ } } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -12265,17 +11238,6 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -12288,16 +11250,6 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -12367,39 +11319,12 @@ "function-bind": "^1.1.1" } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -12509,53 +11434,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, "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==" }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, "is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", @@ -12565,15 +11448,6 @@ "has": "^1.0.3" } }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -12601,88 +11475,30 @@ "is-extglob": "^2.1.1" } }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true - }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -14369,12 +13185,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -14418,36 +13228,6 @@ "type-check": "~0.4.0" } }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -14618,26 +13398,6 @@ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -14664,41 +13424,6 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -14739,30 +13464,6 @@ "word-wrap": "^1.2.3" } }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, "packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", @@ -14777,16 +13478,6 @@ "callsites": "^3.0.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -14798,12 +13489,6 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -14900,12 +13585,6 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, "pirates": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", @@ -14972,15 +13651,6 @@ } } }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, "postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -15191,38 +13861,6 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - } - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", @@ -15322,6 +13960,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -15413,17 +14056,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, "signal-exit": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", @@ -15495,38 +14127,6 @@ "source-map": "^0.6.0" } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, "split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", @@ -15586,26 +14186,6 @@ "strip-ansi": "^6.0.1" } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -15819,35 +14399,6 @@ "yargs-parser": "20.x" } }, - "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, "tslib": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", @@ -15916,18 +14467,6 @@ "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", "dev": true }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -15987,16 +14526,6 @@ } } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -16070,19 +14599,6 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -16157,6 +14673,20 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", diff --git a/adapter/package.json b/adapter/package.json index 7cc44329d..c2bf3bcfc 100644 --- a/adapter/package.json +++ b/adapter/package.json @@ -20,7 +20,8 @@ "body-parser": "^1.19.0", "cors": "^2.8.5", "express": "^4.17.1", - "axios": "^0.26.0" + "axios": "^0.26.0", + "xml2js": "^0.4.23" }, "devDependencies": { "@jvalue/eslint-config-jvalue": "^1.1.0", diff --git a/adapter/src/adapter/importer/HttpImporter.ts b/adapter/src/adapter/importer/HttpImporter.ts index 12b2307a5..ef8ecc238 100644 --- a/adapter/src/adapter/importer/HttpImporter.ts +++ b/adapter/src/adapter/importer/HttpImporter.ts @@ -6,7 +6,7 @@ const axios = require('axios'); export class HttpImporter extends Importer { //TODO RuntimeParameters type is probably wrong - parameters = [new ImporterParameterDescription({name:"location", description:"String of the URI for the HTTP call", type:"string"}), + parameters:ImporterParameterDescription[] = [new ImporterParameterDescription({name:"location", description:"String of the URI for the HTTP call", type:"string"}), new ImporterParameterDescription({name:"encoding", description:"Encoding of the source. Available encodings: ISO-8859-1, US-ASCII, UTF-8", type:"string"}), new ImporterParameterDescription({name:"defaultParameters", description:"Default values for open parameters in the URI", required:false, type:"RuntimeParameters"})] diff --git a/adapter/src/adapter/interpreter/JsonInterpreter.ts b/adapter/src/adapter/interpreter/JsonInterpreter.ts index afa15886f..5bfc1476d 100644 --- a/adapter/src/adapter/interpreter/JsonInterpreter.ts +++ b/adapter/src/adapter/interpreter/JsonInterpreter.ts @@ -3,32 +3,21 @@ import { InterpreterParameterDescription } from "./InterpreterParameterDescripti export class JsonInterpreter extends Interpreter { + parameters: InterpreterParameterDescription[] = [] + override getType(): string { return "JSON"; } + override getDescription(): string { return "Interpret data as JSON data"; } - override getAvailableParameters(): InterpreterParameterDescription[] { - throw new Error("Method not implemented."); - } - override doInterpret(data: string, parameters: Map): string { - throw new Error("Method not implemented."); - } - /* - private final List parameters = List.of(); - private final ObjectMapper mapper = new ObjectMapper(); - - @Override - public List getAvailableParameters() { - return parameters; + override getAvailableParameters(): InterpreterParameterDescription[] { + return this.parameters; } - @Override - protected JsonNode doInterpret(String data, Map parameters) throws IOException { - return mapper.readTree(data); + override doInterpret(data: string, parameters: Map): string { + return JSON.parse(data); } -} - */ } diff --git a/adapter/src/adapter/interpreter/XmlInterpreter.ts b/adapter/src/adapter/interpreter/XmlInterpreter.ts index a7e73223b..04b569266 100644 --- a/adapter/src/adapter/interpreter/XmlInterpreter.ts +++ b/adapter/src/adapter/interpreter/XmlInterpreter.ts @@ -3,34 +3,30 @@ import { InterpreterParameterDescription } from "./InterpreterParameterDescripti export class XmlInterpreter extends Interpreter{ + parameters: InterpreterParameterDescription[] = [] + override getType(): string { return "XML"; } + override getDescription(): string { return "Interpret data as XML data"; } + override getAvailableParameters(): InterpreterParameterDescription[] { - throw new Error("Method not implemented."); + return this.parameters; } + override doInterpret(data: string, parameters: Map): string { - throw new Error("Method not implemented."); + return JSON.parse(data); } /* - private final List parameters = List.of(); - private final XmlMapper mapper = new XmlMapper(); - public XmlInterpreter() { mapper.registerModule(new SimpleModule().addDeserializer(Object.class, new UntypedXMLArrayDeserializer())); } - @Override - public List getAvailableParameters() { - return parameters; - - } - @Override public JsonNode doInterpret(String data, Map parameters) throws IOException { Object result = mapper.readValue(data, Object.class); diff --git a/package-lock.json b/package-lock.json index cd3ef4a3b..987d6128b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,372 +1,6 @@ { + "name": "ods", + "lockfileVersion": 2, "requires": true, - "lockfileVersion": 1, - "dependencies": { - "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==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "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==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.19.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.4.2", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.9.7", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", - "setprototypeof": "1.2.0", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "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==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "requires": { - "mime-db": "1.51.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "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==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" - }, - "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==" - }, - "raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", - "requires": { - "bytes": "3.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "1.8.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.2" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - } - } + "packages": {} } From fbc2203a97c075f76c93e9be9977daf5e0a46eb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 20:58:40 +0100 Subject: [PATCH 14/21] finished implementation of xmlinterpreter with @PVahldiek --- adapter/src/adapter/interpreter/XmlInterpreter.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/adapter/src/adapter/interpreter/XmlInterpreter.ts b/adapter/src/adapter/interpreter/XmlInterpreter.ts index 04b569266..6e35cfe66 100644 --- a/adapter/src/adapter/interpreter/XmlInterpreter.ts +++ b/adapter/src/adapter/interpreter/XmlInterpreter.ts @@ -1,5 +1,6 @@ import {Interpreter} from "./Interpreter"; import { InterpreterParameterDescription } from "./InterpreterParameterDescription"; +const xml2js = require('xml2js'); export class XmlInterpreter extends Interpreter{ @@ -18,7 +19,17 @@ export class XmlInterpreter extends Interpreter{ } override doInterpret(data: string, parameters: Map): string { - return JSON.parse(data); + xml2js.parseString(data, (err: any, result: any) => { + if(err) { + throw err; + } + + // `result` is a JavaScript object + // convert it to a JSON string + const json = JSON.stringify(result); + return json; + }); + throw Error("could not convert data into json"); } From 4b01a041851b21555356d0aa3eb7a6c5c6ff37d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 21:02:35 +0100 Subject: [PATCH 15/21] parameters for csv interpreter with @PVahldiek --- adapter/src/adapter/interpreter/CsvInterpreter.ts | 7 ++++++- adapter/src/adapter/interpreter/Interpreter.ts | 6 +++--- .../interpreter/InterpreterParameterDescription.ts | 1 + adapter/src/adapter/interpreter/XmlInterpreter.ts | 14 +------------- 4 files changed, 11 insertions(+), 17 deletions(-) diff --git a/adapter/src/adapter/interpreter/CsvInterpreter.ts b/adapter/src/adapter/interpreter/CsvInterpreter.ts index 7861f14e7..3dfec8d58 100644 --- a/adapter/src/adapter/interpreter/CsvInterpreter.ts +++ b/adapter/src/adapter/interpreter/CsvInterpreter.ts @@ -4,6 +4,11 @@ import { InterpreterParameterDescription } from "./InterpreterParameterDescripti export class CsvInterpreter extends Interpreter { + parameters: InterpreterParameterDescription[] = [new InterpreterParameterDescription("columnSeparator", "Column delimiter character, only one character supported", "string"), + new InterpreterParameterDescription("lineSeparator", "Line delimiter character, only \\r, \\r\\n, and \\n supported", "string",), + new InterpreterParameterDescription("skipFirstDataRow", "Skip first data row (after header)", "boolean"), + new InterpreterParameterDescription("firstRowAsHeader", "Interpret first row as header for columns", "boolean")] + override getType(): string { return "CSV" } @@ -11,7 +16,7 @@ export class CsvInterpreter extends Interpreter { return "Interpret data as CSV data"; } override getAvailableParameters(): InterpreterParameterDescription[] { - throw new Error("Method not implemented."); + return this.parameters; } override doInterpret(data: string, parameters: Map): string { throw new Error("Method not implemented."); diff --git a/adapter/src/adapter/interpreter/Interpreter.ts b/adapter/src/adapter/interpreter/Interpreter.ts index bab44b246..1f713c165 100644 --- a/adapter/src/adapter/interpreter/Interpreter.ts +++ b/adapter/src/adapter/interpreter/Interpreter.ts @@ -7,17 +7,17 @@ export abstract class Interpreter { description: string | undefined; - interpret(data: string, parameters: Map): string { //throws IOException + interpret(data: string, parameters: Map): string { this.validateParameters(parameters); return this.doInterpret(data, parameters); } abstract getType(): string; abstract getDescription(): string; - abstract doInterpret(data: string, parameters: Map): string //throws IOException; + abstract doInterpret(data: string, parameters: Map): string abstract getAvailableParameters(): Array; - validateParameters(inputParameters: Map) { //throws InterpreterParameterException + validateParameters(inputParameters: Map) { let illegalArguments: boolean = false; let illegalArgumentsMessage: string = ""; diff --git a/adapter/src/adapter/interpreter/InterpreterParameterDescription.ts b/adapter/src/adapter/interpreter/InterpreterParameterDescription.ts index c1045c30d..59252aabc 100644 --- a/adapter/src/adapter/interpreter/InterpreterParameterDescription.ts +++ b/adapter/src/adapter/interpreter/InterpreterParameterDescription.ts @@ -2,6 +2,7 @@ export class InterpreterParameterDescription{ name: string; description: string; + // TODO default value? is not used in Interpreters required: boolean | undefined; //TODO @Georg: need to check how to store the class in typescript, can use instance.constructor.name to get the name probably -> is stored as string -> Same as in Importer type: unknown; diff --git a/adapter/src/adapter/interpreter/XmlInterpreter.ts b/adapter/src/adapter/interpreter/XmlInterpreter.ts index 6e35cfe66..218f066ef 100644 --- a/adapter/src/adapter/interpreter/XmlInterpreter.ts +++ b/adapter/src/adapter/interpreter/XmlInterpreter.ts @@ -18,6 +18,7 @@ export class XmlInterpreter extends Interpreter{ return this.parameters; } + // TODO @Georg check if this package can be used.. override doInterpret(data: string, parameters: Map): string { xml2js.parseString(data, (err: any, result: any) => { if(err) { @@ -31,17 +32,4 @@ export class XmlInterpreter extends Interpreter{ }); throw Error("could not convert data into json"); } - - - /* - public XmlInterpreter() { - mapper.registerModule(new SimpleModule().addDeserializer(Object.class, new UntypedXMLArrayDeserializer())); - } - - @Override - public JsonNode doInterpret(String data, Map parameters) throws IOException { - Object result = mapper.readValue(data, Object.class); - return mapper.valueToTree(result); - } - */ } From 74690cc9b68e63fca00ce19c4f347e5a2c1a3bba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 21:27:20 +0100 Subject: [PATCH 16/21] csvinterpreter implementation + added csvtojson package with @PVahldiek --- adapter/package-lock.json | 86 +++++++++++++++---- adapter/package.json | 4 +- adapter/src/adapter/importer/HttpImporter.ts | 2 +- .../src/adapter/interpreter/CsvInterpreter.ts | 78 +++++++++++------ 4 files changed, 128 insertions(+), 42 deletions(-) diff --git a/adapter/package-lock.json b/adapter/package-lock.json index d392127c6..daf20cacb 100644 --- a/adapter/package-lock.json +++ b/adapter/package-lock.json @@ -14,6 +14,7 @@ "axios": "^0.26.0", "body-parser": "^1.19.0", "cors": "^2.8.5", + "csvtojson": "^2.0.10", "express": "^4.17.1", "xml2js": "^0.4.23" }, @@ -1942,11 +1943,6 @@ "node": ">=10" } }, - "node_modules/amqplib/node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -2253,6 +2249,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, "node_modules/body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -2615,6 +2616,33 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, + "node_modules/csvtojson": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/csvtojson/-/csvtojson-2.0.10.tgz", + "integrity": "sha512-lUWFxGKyhraKCW8Qghz6Z0f2l/PqB1W3AO0HKJzGIQ5JRSlR651ekJDiGJbBT4sRNNv5ddnSGVEnsxP9XRCVpQ==", + "dependencies": { + "bluebird": "^3.5.1", + "lodash": "^4.17.3", + "strip-bom": "^2.0.0" + }, + "bin": { + "csvtojson": "bin/csvtojson" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/csvtojson/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -4069,6 +4097,11 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -6395,8 +6428,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -9875,13 +9907,6 @@ "readable-stream": "1.x >=1.1.9", "safe-buffer": "~5.2.1", "url-parse": "~1.5.1" - }, - "dependencies": { - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - } } }, "ansi-colors": { @@ -10124,6 +10149,11 @@ } } }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -10428,6 +10458,26 @@ } } }, + "csvtojson": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/csvtojson/-/csvtojson-2.0.10.tgz", + "integrity": "sha512-lUWFxGKyhraKCW8Qghz6Z0f2l/PqB1W3AO0HKJzGIQ5JRSlR651ekJDiGJbBT4sRNNv5ddnSGVEnsxP9XRCVpQ==", + "requires": { + "bluebird": "^3.5.1", + "lodash": "^4.17.3", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -11499,6 +11549,11 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -13231,8 +13286,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.merge": { "version": "4.6.2", diff --git a/adapter/package.json b/adapter/package.json index c2bf3bcfc..97ad46d38 100644 --- a/adapter/package.json +++ b/adapter/package.json @@ -20,8 +20,10 @@ "body-parser": "^1.19.0", "cors": "^2.8.5", "express": "^4.17.1", + // TODO MIT License für die folgenden 3 Pakete -> @Georg ist das in Ordnung? "axios": "^0.26.0", - "xml2js": "^0.4.23" + "xml2js": "^0.4.23", + "csvtojson": "^2.0.10" }, "devDependencies": { "@jvalue/eslint-config-jvalue": "^1.1.0", diff --git a/adapter/src/adapter/importer/HttpImporter.ts b/adapter/src/adapter/importer/HttpImporter.ts index ef8ecc238..7c612f81e 100644 --- a/adapter/src/adapter/importer/HttpImporter.ts +++ b/adapter/src/adapter/importer/HttpImporter.ts @@ -25,7 +25,7 @@ export class HttpImporter extends Importer { override validateParameters(inputParameters: Map): void { super.validateParameters(inputParameters); - let encoding = inputParameters.get("encoding"); + let encoding: string = inputParameters.get("encoding") as string; // TODO CHECK IF ENCODING ARE WRITTEN CORRECT if (encoding !== "ISO-8859-1" && encoding !== "US-ASCII" && encoding !== "UTF-8") { diff --git a/adapter/src/adapter/interpreter/CsvInterpreter.ts b/adapter/src/adapter/interpreter/CsvInterpreter.ts index 3dfec8d58..c01f55b22 100644 --- a/adapter/src/adapter/interpreter/CsvInterpreter.ts +++ b/adapter/src/adapter/interpreter/CsvInterpreter.ts @@ -9,6 +9,8 @@ export class CsvInterpreter extends Interpreter { new InterpreterParameterDescription("skipFirstDataRow", "Skip first data row (after header)", "boolean"), new InterpreterParameterDescription("firstRowAsHeader", "Interpret first row as header for columns", "boolean")] + + override getType(): string { return "CSV" } @@ -18,26 +20,47 @@ export class CsvInterpreter extends Interpreter { override getAvailableParameters(): InterpreterParameterDescription[] { return this.parameters; } - override doInterpret(data: string, parameters: Map): string { - throw new Error("Method not implemented."); + /* + @Override + protected JsonNode doInterpret(String data, Map parameters) throws IOException { + CsvSchema csvSchema = createSchema(parameters); + if ((boolean) parameters.get("firstRowAsHeader")) { + return parseWithHeader(data, csvSchema); + } else { + return parseWithoutHeader(data, csvSchema); + } } + */ + override doInterpret(data: string, parameters: Map): string { + let columnSeparator = (parameters.get("columnSeparator") as string).charAt(0) + let lineSeparator: string = parameters.get("lineSeparator") as string; + let skipFirstDataRow: boolean = parameters.get("skipFirstDataRow") as boolean; + + var result = []; + var lines = data.split(lineSeparator); + var headers = lines[0].split(","); + + for(var i=1; i parameters = List.of( - new InterpreterParameterDescription("columnSeparator", "Column delimiter character, only one character supported", String.class), - new InterpreterParameterDescription("lineSeparator", "Line delimiter character, only \\r, \\r\\n, and \\n supported", String.class), - new InterpreterParameterDescription("skipFirstDataRow", "Skip first data row (after header)", Boolean.class), - new InterpreterParameterDescription("firstRowAsHeader", "Interpret first row as header for columns", Boolean.class) - ); - private final CsvMapper mapper = new CsvMapper().enable(CsvParser.Feature.WRAP_AS_ARRAY); - private final ObjectMapper jsonMapper = new ObjectMapper(); - - @Override - public List getAvailableParameters() { - return parameters; + + + return JSON.stringify(result); } - @Override + /* + @Override protected void validateParameters(Map inputParameters) throws InterpreterParameterException { super.validateParameters(inputParameters); @@ -53,17 +76,24 @@ export class CsvInterpreter extends Interpreter { " length 1. Your given value " + columnSeparator + " is invalid!"); } } - - @Override - protected JsonNode doInterpret(String data, Map parameters) throws IOException { - CsvSchema csvSchema = createSchema(parameters); - if ((boolean) parameters.get("firstRowAsHeader")) { - return parseWithHeader(data, csvSchema); - } else { - return parseWithoutHeader(data, csvSchema); + */ + override validateParameters(inputParameters: Map): void { + super.validateParameters(inputParameters); + let lineSeparator: string = inputParameters.get("lineSeparator") as string; + + if (lineSeparator !== "\n" && lineSeparator !== "\r" && lineSeparator !== "\r\n") { + throw new Error(this.getType() + " interpreter requires parameter lineSeparator to have" + + " value \\n, \\r, or \\r\\n. Your given value " + lineSeparator + " is invalid!"); + } + + var columnSeparator: string = inputParameters.get("columnSeparator") as string; + if (columnSeparator.length !== 1) { + throw new Error(this.getType() + " interpreter requires parameter columnSeparator to have" + + " length 1. Your given value " + columnSeparator + " is invalid!"); } } + /* private CsvSchema createSchema(Map parameters) { CsvSchema csvSchema = CsvSchema .emptySchema() From f3673cbe4e40bebc89c40a7d08c7b41a3de00ef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 21:31:42 +0100 Subject: [PATCH 17/21] comment deleted --- adapter/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/adapter/package.json b/adapter/package.json index 97ad46d38..cf271b026 100644 --- a/adapter/package.json +++ b/adapter/package.json @@ -20,7 +20,6 @@ "body-parser": "^1.19.0", "cors": "^2.8.5", "express": "^4.17.1", - // TODO MIT License für die folgenden 3 Pakete -> @Georg ist das in Ordnung? "axios": "^0.26.0", "xml2js": "^0.4.23", "csvtojson": "^2.0.10" From 398ce77ba2b3942f34ae6057f0eb51914cc7d95a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 21:54:44 +0100 Subject: [PATCH 18/21] finished csvinterpreter implementation with @PVahldiek --- .../src/adapter/interpreter/CsvInterpreter.ts | 115 ++++-------------- 1 file changed, 23 insertions(+), 92 deletions(-) diff --git a/adapter/src/adapter/interpreter/CsvInterpreter.ts b/adapter/src/adapter/interpreter/CsvInterpreter.ts index c01f55b22..464135b50 100644 --- a/adapter/src/adapter/interpreter/CsvInterpreter.ts +++ b/adapter/src/adapter/interpreter/CsvInterpreter.ts @@ -1,5 +1,6 @@ import {Interpreter} from "./Interpreter"; import { InterpreterParameterDescription } from "./InterpreterParameterDescription"; +const csv=require('csvtojson') export class CsvInterpreter extends Interpreter { @@ -20,63 +21,36 @@ export class CsvInterpreter extends Interpreter { override getAvailableParameters(): InterpreterParameterDescription[] { return this.parameters; } - /* - @Override - protected JsonNode doInterpret(String data, Map parameters) throws IOException { - CsvSchema csvSchema = createSchema(parameters); - if ((boolean) parameters.get("firstRowAsHeader")) { - return parseWithHeader(data, csvSchema); - } else { - return parseWithoutHeader(data, csvSchema); - } - } - */ + override doInterpret(data: string, parameters: Map): string { let columnSeparator = (parameters.get("columnSeparator") as string).charAt(0) let lineSeparator: string = parameters.get("lineSeparator") as string; + let firstRowAsHeader: boolean = parameters.get("firstRowAsHeader") as boolean; // True = With header, False = WithoutHeader let skipFirstDataRow: boolean = parameters.get("skipFirstDataRow") as boolean; - - var result = []; - var lines = data.split(lineSeparator); - var headers = lines[0].split(","); - - for(var i=1; i{ + if(skipFirstDataRow && ((count == 0 && !firstRowAsHeader) || (count == 1 && firstRowAsHeader))) { + // Skip First Row + } + else { + json.push(csvRow); + } - - - return JSON.stringify(result); + count = count+1; + }) + + return JSON.stringify(json); } - /* - @Override - protected void validateParameters(Map inputParameters) throws InterpreterParameterException { - super.validateParameters(inputParameters); - - String lineSeparator = (String) inputParameters.get("lineSeparator"); - if (!lineSeparator.equals("\n") && !lineSeparator.equals("\r") && !lineSeparator.equals("\r\n")) { - throw new InterpreterParameterException(getType() + " interpreter requires parameter lineSeparator to have" + - " value \\n, \\r, or \\r\\n. Your given value " + lineSeparator + " is invalid!"); - } - - String columnSeparator = (String) inputParameters.get("columnSeparator"); - if (columnSeparator.length() != 1) { - throw new InterpreterParameterException(getType() + " interpreter requires parameter columnSeparator to have" + - " length 1. Your given value " + columnSeparator + " is invalid!"); - } - } - */ override validateParameters(inputParameters: Map): void { super.validateParameters(inputParameters); let lineSeparator: string = inputParameters.get("lineSeparator") as string; @@ -92,47 +66,4 @@ export class CsvInterpreter extends Interpreter { " length 1. Your given value " + columnSeparator + " is invalid!"); } } - - /* - private CsvSchema createSchema(Map parameters) { - CsvSchema csvSchema = CsvSchema - .emptySchema() - .withColumnSeparator(((String) parameters.get("columnSeparator")).charAt(0)) - .withLineSeparator((String) parameters.get("lineSeparator")) - .withSkipFirstDataRow((boolean) parameters.get("skipFirstDataRow")); - if ((boolean) parameters.get("firstRowAsHeader")) { - csvSchema = csvSchema - .withHeader(); - } - return csvSchema; - } - - private JsonNode parseWithoutHeader(String data, CsvSchema csvSchema) throws IOException { - MappingIterator allLines = mapper - .readerFor(Object[].class) - .with(csvSchema) - .readValues(data); - - ArrayNode result = mapper.createArrayNode(); - while (allLines.hasNext()) { - result.add(jsonMapper.valueToTree(allLines.next())); - } - - return result; - } - - private JsonNode parseWithHeader(String data, CsvSchema csvSchema) throws IOException { - MappingIterator> allLines = mapper - .readerFor(Map.class) - .with(csvSchema) - .readValues(data); - - ArrayNode result = mapper.createArrayNode(); - while (allLines.hasNext()) { - result.add(jsonMapper.valueToTree(allLines.next())); - } - - return result; - } - */ } From c737c6b9413811403a5561441aba8e6291fced4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 22:06:09 +0100 Subject: [PATCH 19/21] implementation of adapterservice finished with @PVahldiek --- adapter/src/adapter/model/FormatConfig.ts | 4 ++-- adapter/src/adapter/model/ProtocolConfig.ts | 8 ++++++-- adapter/src/adapter/model/enum/Format.ts | 10 ++++++---- adapter/src/adapter/model/enum/Protocol.ts | 10 ++++++---- adapter/src/adapter/services/adapterService.ts | 12 +++++++++++- 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/adapter/src/adapter/model/FormatConfig.ts b/adapter/src/adapter/model/FormatConfig.ts index 4e8d8a7ee..9b746f4a4 100644 --- a/adapter/src/adapter/model/FormatConfig.ts +++ b/adapter/src/adapter/model/FormatConfig.ts @@ -2,8 +2,8 @@ import { Format } from "./enum/Format"; export class FormatConfig { format:Format; - parameters: Record | undefined; - constructor(format: Format, parameters: Record) { + parameters: Map; + constructor(format: Format, parameters: Map) { this.format = format; this.parameters = parameters; } diff --git a/adapter/src/adapter/model/ProtocolConfig.ts b/adapter/src/adapter/model/ProtocolConfig.ts index c8b7fbbfd..eb4b03fc0 100644 --- a/adapter/src/adapter/model/ProtocolConfig.ts +++ b/adapter/src/adapter/model/ProtocolConfig.ts @@ -1,9 +1,13 @@ import { Protocol } from "./enum/Protocol"; import { validators } from '@jvalue/node-dry-basics'; -export interface ProtocolConfig { +export class ProtocolConfig { protocol:Protocol; - parameters: Map | undefined; + parameters: Map; + constructor(protocol: Protocol, parameters: Map) { + this.protocol = protocol; + this.parameters = parameters; + } } export class ProtocolConfigValidator { diff --git a/adapter/src/adapter/model/enum/Format.ts b/adapter/src/adapter/model/enum/Format.ts index 264fe2a91..0d4695f92 100644 --- a/adapter/src/adapter/model/enum/Format.ts +++ b/adapter/src/adapter/model/enum/Format.ts @@ -1,4 +1,5 @@ import { CsvInterpreter } from "../../interpreter/CsvInterpreter"; +import { Interpreter } from "../../interpreter/Interpreter"; import { JsonInterpreter } from "../../interpreter/JsonInterpreter"; import { XmlInterpreter } from "../../interpreter/XmlInterpreter"; @@ -7,11 +8,12 @@ export class Format { static readonly XML = new XmlInterpreter(); static readonly CSV = new CsvInterpreter(); - // private to disallow creating other instances of this type - private constructor(private readonly key: string, public readonly value: any) { + interpreter: Interpreter; + private constructor(interpreter: Interpreter) { + this.interpreter = interpreter; } - toString() { - return this.key; + getInterpreter() { + return this.interpreter; } } \ No newline at end of file diff --git a/adapter/src/adapter/model/enum/Protocol.ts b/adapter/src/adapter/model/enum/Protocol.ts index 5de7b34b7..54f3ba5a9 100644 --- a/adapter/src/adapter/model/enum/Protocol.ts +++ b/adapter/src/adapter/model/enum/Protocol.ts @@ -1,13 +1,15 @@ import { HttpImporter } from "../../importer/HttpImporter"; +import { Importer } from "../../importer/Importer"; export class Protocol { static readonly HTTP = new HttpImporter(); - private constructor(private readonly key: string, public readonly value: any) { + importer: Importer; + private constructor(importer: Importer) { + this.importer = importer; } - toString() { - return this.key; + getImporter() { + return this.importer } - } \ No newline at end of file diff --git a/adapter/src/adapter/services/adapterService.ts b/adapter/src/adapter/services/adapterService.ts index e009aec9f..6c979f718 100644 --- a/adapter/src/adapter/services/adapterService.ts +++ b/adapter/src/adapter/services/adapterService.ts @@ -4,6 +4,7 @@ import { AdapterConfig } from "../model/AdapterConfig"; import { DataImportResponse } from "../model/DataImportResponse"; import { Format } from "../model/enum/Format"; import { Protocol } from "../model/enum/Protocol"; +import { FormatConfig } from "../model/FormatConfig"; import { ProtocolConfig } from "../model/ProtocolConfig"; @@ -34,6 +35,15 @@ export class AdapterService { return new DataImportResponse("Data_test") } + static executeProtocol (config: ProtocolConfig): string{ + var importer = config.protocol.getImporter(); + return importer.fetch(config.parameters); + } + + static executeFormat(rawData: string, config: FormatConfig): string { + var interpreter = config.format.getInterpreter(); + return interpreter.interpret(rawData, config.parameters); + } } - module.exports = AdapterService; +module.exports = AdapterService; From 178a71e7b5a787e6d7129094dcb01c2514eaab09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Sun, 6 Mar 2022 22:07:03 +0100 Subject: [PATCH 20/21] implementation of adapterservice finished with @PVahldiek --- adapter/src/adapter/services/adapterService.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/adapter/src/adapter/services/adapterService.ts b/adapter/src/adapter/services/adapterService.ts index 6c979f718..9aa536f9f 100644 --- a/adapter/src/adapter/services/adapterService.ts +++ b/adapter/src/adapter/services/adapterService.ts @@ -26,13 +26,14 @@ export class AdapterService { } static executeJob(_adapterConfig: AdapterConfig): DataImportResponse { - // TODO IMPLEMENT - return new DataImportResponse("Data_test") + var rawData = this.executeProtocol(_adapterConfig.protocolConfig); + var result = this.executeFormat(rawData, _adapterConfig.formatConfig); + return new DataImportResponse(result.toString()); } static executeRawJob(_protocolConfig: ProtocolConfig): DataImportResponse { - // TODO IMPLEMENT - return new DataImportResponse("Data_test") + var rawData = this.executeProtocol(_protocolConfig); + return new DataImportResponse(rawData); } static executeProtocol (config: ProtocolConfig): string{ From f2ce925f331b30ca34ec686d7bdacfc0901b6cf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marco=20d=C3=B6ll?= Date: Mon, 7 Mar 2022 01:43:26 +0100 Subject: [PATCH 21/21] comment --- adapter/src/adapter/interpreter/CsvInterpreter.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/adapter/src/adapter/interpreter/CsvInterpreter.ts b/adapter/src/adapter/interpreter/CsvInterpreter.ts index 464135b50..4fa2a4d61 100644 --- a/adapter/src/adapter/interpreter/CsvInterpreter.ts +++ b/adapter/src/adapter/interpreter/CsvInterpreter.ts @@ -37,7 +37,8 @@ export class CsvInterpreter extends Interpreter { eol: lineSeparator }) .fromString(data) - .then((csvRow: any)=>{ + .then((csvRow: any)=>{ + // Todo need to test if this works if(skipFirstDataRow && ((count == 0 && !firstRowAsHeader) || (count == 1 && firstRowAsHeader))) { // Skip First Row }