From 892b5f5921565a45e32a48b0b8b50b914779a38f Mon Sep 17 00:00:00 2001 From: Joachim Van Herwegen Date: Mon, 2 Nov 2020 14:54:46 +0100 Subject: [PATCH] feat: Create multiple configs supporting different store backends --- config/config-default.json | 5 +- config/config-file.json | 19 +++++++ config/config-sparql-endpoint.json | 19 +++++++ config/presets/cli-params.json | 4 ++ config/presets/representation-conversion.json | 43 +++++++++++++++ .../storage-backend/storage-filesystem.json | 47 ++++++++++++++++ .../storage-memory.json} | 0 .../storage-sparql-endpoint.json | 55 +++++++++++++++++++ ...rage_wrapper.json => storage-wrapper.json} | 49 +++++------------ jest.config.js | 2 +- src/init/CliRunner.ts | 5 +- test/unit/init/CliRunner.test.ts | 4 +- 12 files changed, 212 insertions(+), 40 deletions(-) create mode 100644 config/config-file.json create mode 100644 config/config-sparql-endpoint.json create mode 100644 config/presets/representation-conversion.json create mode 100644 config/presets/storage-backend/storage-filesystem.json rename config/presets/{storage.json => storage-backend/storage-memory.json} (100%) create mode 100644 config/presets/storage-backend/storage-sparql-endpoint.json rename config/presets/{storage_wrapper.json => storage-wrapper.json} (52%) diff --git a/config/config-default.json b/config/config-default.json index 02e5320e2..4b4eade19 100644 --- a/config/config-default.json +++ b/config/config-default.json @@ -10,9 +10,10 @@ "files-scs:config/presets/ldp/permissions-extractor.json", "files-scs:config/presets/ldp/request-parser.json", "files-scs:config/presets/logging.json", + "files-scs:config/presets/representation-conversion.json", "files-scs:config/presets/setup.json", - "files-scs:config/presets/storage.json", - "files-scs:config/presets/storage_wrapper.json", + "files-scs:config/presets/storage-backend/storage-memory.json", + "files-scs:config/presets/storage-wrapper.json", "files-scs:config/presets/cli-params.json" ] } diff --git a/config/config-file.json b/config/config-file.json new file mode 100644 index 000000000..9015f9d23 --- /dev/null +++ b/config/config-file.json @@ -0,0 +1,19 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld", + "import": [ + "files-scs:config/presets/acl.json", + "files-scs:config/presets/http.json", + "files-scs:config/presets/ldp.json", + "files-scs:config/presets/ldp/credentials-extractor.json", + "files-scs:config/presets/ldp/metadata-handler.json", + "files-scs:config/presets/ldp/operation-handler.json", + "files-scs:config/presets/ldp/permissions-extractor.json", + "files-scs:config/presets/ldp/request-parser.json", + "files-scs:config/presets/logging.json", + "files-scs:config/presets/representation-conversion.json", + "files-scs:config/presets/setup.json", + "files-scs:config/presets/storage-backend/storage-filesystem.json", + "files-scs:config/presets/storage-wrapper.json", + "files-scs:config/presets/cli-params.json" + ] +} diff --git a/config/config-sparql-endpoint.json b/config/config-sparql-endpoint.json new file mode 100644 index 000000000..b9542cb64 --- /dev/null +++ b/config/config-sparql-endpoint.json @@ -0,0 +1,19 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld", + "import": [ + "files-scs:config/presets/acl.json", + "files-scs:config/presets/http.json", + "files-scs:config/presets/ldp.json", + "files-scs:config/presets/ldp/credentials-extractor.json", + "files-scs:config/presets/ldp/metadata-handler.json", + "files-scs:config/presets/ldp/operation-handler.json", + "files-scs:config/presets/ldp/permissions-extractor.json", + "files-scs:config/presets/ldp/request-parser.json", + "files-scs:config/presets/logging.json", + "files-scs:config/presets/representation-conversion.json", + "files-scs:config/presets/setup.json", + "files-scs:config/presets/storage-backend/storage-sparql-endpoint.json", + "files-scs:config/presets/storage-wrapper.json", + "files-scs:config/presets/cli-params.json" + ] +} diff --git a/config/presets/cli-params.json b/config/presets/cli-params.json index e55d73320..af95638df 100644 --- a/config/presets/cli-params.json +++ b/config/presets/cli-params.json @@ -13,6 +13,10 @@ "@id": "urn:solid-server:default:variable:rootFilePath", "@type": "Variable" }, + { + "@id": "urn:solid-server:default:variable:sparqlEndpoint", + "@type": "Variable" + }, { "@id": "urn:solid-server:default:variable:loggingLevel", "@type": "Variable" diff --git a/config/presets/representation-conversion.json b/config/presets/representation-conversion.json new file mode 100644 index 000000000..f868d51a5 --- /dev/null +++ b/config/presets/representation-conversion.json @@ -0,0 +1,43 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld", + "@graph": [ + { + "@id": "urn:solid-server:default:RdfToQuadConverter", + "@type": "RdfToQuadConverter" + }, + + { + "@id": "urn:solid-server:default:QuadToRdfConverter", + "@type": "QuadToRdfConverter" + }, + + { + "@id": "urn:solid-server:default:RdfRepresentationConverter", + "@type": "ChainedConverter", + "ChainedConverter:_converters": [ + { + "@id": "urn:solid-server:default:RdfToQuadConverter" + }, + { + "@id": "urn:solid-server:default:QuadToRdfConverter" + } + ] + }, + + { + "@id": "urn:solid-server:default:RepresentationConverter", + "@type": "CompositeAsyncHandler", + "CompositeAsyncHandler:_handlers": [ + { + "@id": "urn:solid-server:default:RdfToQuadConverter" + }, + { + "@id": "urn:solid-server:default:QuadToRdfConverter" + }, + { + "@id": "urn:solid-server:default:RdfRepresentationConverter" + } + ] + } + ] +} diff --git a/config/presets/storage-backend/storage-filesystem.json b/config/presets/storage-backend/storage-filesystem.json new file mode 100644 index 000000000..d29b825e3 --- /dev/null +++ b/config/presets/storage-backend/storage-filesystem.json @@ -0,0 +1,47 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld", + "@graph": [ + { + "@id": "urn:solid-server:default:MetadataController", + "@type": "MetadataController" + }, + { + "@id": "urn:solid-server:default:FileIdentifierMapper", + "@type": "ExtensionBasedMapper", + "ExtensionBasedMapper:_base": { + "@id": "urn:solid-server:default:variable:base" + }, + "ExtensionBasedMapper:_rootFilepath": { + "@id": "urn:solid-server:default:variable:rootFilePath" + }, + "ExtensionBasedMapper:_acl": "text/turtle", + "ExtensionBasedMapper:_meta": "text/turtle" + }, + { + "@id": "urn:solid-server:default:DataAccessor", + "@type": "FileDataAccessor", + "FileDataAccessor:_resourceMapper": { + "@id": "urn:solid-server:default:FileIdentifierMapper" + }, + "FileDataAccessor:_metadataController": { + "@id": "urn:solid-server:default:MetadataController" + } + }, + { + "@id": "urn:solid-server:default:ResourceStore", + "@type": "DataAccessorBasedStore", + "DataAccessorBasedStore:_accessor": { + "@id": "urn:solid-server:default:DataAccessor" + }, + "DataAccessorBasedStore:_base": { + "@id": "urn:solid-server:default:variable:base" + }, + "DataAccessorBasedStore:_metadataController": { + "@id": "urn:solid-server:default:MetadataController" + }, + "DataAccessorBasedStore:_containerManager": { + "@id": "urn:solid-server:default:UrlContainerManager" + } + } + ] +} diff --git a/config/presets/storage.json b/config/presets/storage-backend/storage-memory.json similarity index 100% rename from config/presets/storage.json rename to config/presets/storage-backend/storage-memory.json diff --git a/config/presets/storage-backend/storage-sparql-endpoint.json b/config/presets/storage-backend/storage-sparql-endpoint.json new file mode 100644 index 000000000..bd6ca5cca --- /dev/null +++ b/config/presets/storage-backend/storage-sparql-endpoint.json @@ -0,0 +1,55 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld", + "@graph": [ + { + "@id": "urn:solid-server:default:MetadataController", + "@type": "MetadataController" + }, + + { + "@id": "urn:solid-server:default:DataAccessor", + "@type": "SparqlDataAccessor", + "SparqlDataAccessor:_endpoint": { + "@id": "urn:solid-server:default:variable:sparqlEndpoint" + }, + "SparqlDataAccessor:_base": { + "@id": "urn:solid-server:default:variable:base" + }, + "SparqlDataAccessor:_containerManager": { + "@id": "urn:solid-server:default:UrlContainerManager" + }, + "SparqlDataAccessor:_metadataController": { + "@id": "urn:solid-server:default:MetadataController" + } + }, + + { + "@id": "urn:solid-server:default:DataAccessorBasedStore", + "@type": "DataAccessorBasedStore", + "DataAccessorBasedStore:_accessor": { + "@id": "urn:solid-server:default:DataAccessor" + }, + "DataAccessorBasedStore:_base": { + "@id": "urn:solid-server:default:variable:base" + }, + "DataAccessorBasedStore:_metadataController": { + "@id": "urn:solid-server:default:MetadataController" + }, + "DataAccessorBasedStore:_containerManager": { + "@id": "urn:solid-server:default:UrlContainerManager" + } + }, + + { + "@id": "urn:solid-server:default:ResourceStore", + "@type": "RepresentationConvertingStore", + "RepresentationConvertingStore:_source": { + "@id": "urn:solid-server:default:DataAccessorBasedStore" + }, + "RepresentationConvertingStore:_inConverter": { + "@id": "urn:solid-server:default:RepresentationConverter" + }, + "RepresentationConvertingStore:_inType": "internal/quads" + } + ] +} diff --git a/config/presets/storage_wrapper.json b/config/presets/storage-wrapper.json similarity index 52% rename from config/presets/storage_wrapper.json rename to config/presets/storage-wrapper.json index c6eca7e97..c4ced9d3f 100644 --- a/config/presets/storage_wrapper.json +++ b/config/presets/storage-wrapper.json @@ -16,7 +16,7 @@ "@id": "urn:solid-server:default:PatchHandler", "@type": "SparqlUpdatePatchHandler", "SparqlUpdatePatchHandler:_source": { - "@id": "urn:solid-server:default:ResourceStore_Converting" + "@id": "urn:solid-server:default:ResourceStore_ToTurtle" }, "SparqlUpdatePatchHandler:_locker": { "@id": "urn:solid-server:default:ResourceLocker" @@ -25,26 +25,18 @@ }, { - "@id": "urn:solid-server:default:ResourceStore_Converting_RdfToQuad", - "@type": "RdfToQuadConverter" - }, - - { - "@id": "urn:solid-server:default:ResourceStore_Converting_QuadToRdf", - "@type": "QuadToRdfConverter" - }, - - { - "@id": "urn:solid-server:default:ResourceStore_Converting_Chained", - "@type": "ChainedConverter", - "ChainedConverter:_converters": [ - { - "@id": "urn:solid-server:default:ResourceStore_Converting_RdfToQuad" - }, - { - "@id": "urn:solid-server:default:ResourceStore_Converting_QuadToRdf" - } - ] + "@id": "urn:solid-server:default:ResourceStore_ToTurtle", + "@type": "RepresentationConvertingStore", + "RepresentationConvertingStore:_source": { + "@id": "urn:solid-server:default:ResourceStore" + }, + "RepresentationConvertingStore:_outConverter": { + "@id": "urn:solid-server:default:RepresentationConverter" + }, + "RepresentationConvertingStore:_inConverter": { + "@id": "urn:solid-server:default:RepresentationConverter" + }, + "RepresentationConvertingStore:_inType": "text/turtle" }, { @@ -53,19 +45,8 @@ "RepresentationConvertingStore:_source": { "@id": "urn:solid-server:default:ResourceStore" }, - "RepresentationConvertingStore:_converter": { - "@type": "CompositeAsyncHandler", - "CompositeAsyncHandler:_handlers": [ - { - "@id": "urn:solid-server:default:ResourceStore_Converting_RdfToQuad" - }, - { - "@id": "urn:solid-server:default:ResourceStore_Converting_QuadToRdf" - }, - { - "@id": "urn:solid-server:default:ResourceStore_Converting_Chained" - } - ] + "RepresentationConvertingStore:_outConverter": { + "@id": "urn:solid-server:default:RepresentationConverter" } }, diff --git a/jest.config.js b/jest.config.js index f9ad6d7f2..8c72089e8 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,7 +1,7 @@ module.exports = { "globals": { "ts-jest": { - "tsConfig": "tsconfig.json" + "tsconfig": "tsconfig.json" } }, "transform": { diff --git a/src/init/CliRunner.ts b/src/init/CliRunner.ts index a13437084..d7222ba34 100644 --- a/src/init/CliRunner.ts +++ b/src/init/CliRunner.ts @@ -28,6 +28,8 @@ export const runCustom = function( .options({ port: { type: 'number', alias: 'p', default: 3000 }, config: { type: 'string', alias: 'c' }, + rootFilePath: { type: 'string', alias: 'f' }, + sparqlEndpoint: { type: 'string', alias: 's' }, level: { type: 'string', alias: 'l', default: 'info' }, }) .help(); @@ -46,7 +48,8 @@ export const runCustom = function( variables: { 'urn:solid-server:default:variable:port': argv.port, 'urn:solid-server:default:variable:base': `http://localhost:${argv.port}/`, - 'urn:solid-server:default:variable:rootFilePath': process.cwd(), + 'urn:solid-server:default:variable:rootFilePath': argv.rootFilePath ?? process.cwd(), + 'urn:solid-server:default:variable:sparqlEndpoint': argv.sparqlEndpoint, 'urn:solid-server:default:variable:loggingLevel': argv.level, }, }) as Setup; diff --git a/test/unit/init/CliRunner.test.ts b/test/unit/init/CliRunner.test.ts index e1a627a8e..a4cbb118e 100644 --- a/test/unit/init/CliRunner.test.ts +++ b/test/unit/init/CliRunner.test.ts @@ -40,10 +40,10 @@ jest.mock('yargs', (): any => ({ return this; }, help(): any { - // Return once with and once without config value so that both branches are tested. + // Return once with and once without values so that both branches are tested. if (throwError) { return { - argv: { config: 'value' }, + argv: { config: 'value', rootFilePath: 'root' }, }; } return {