From 36a76489d8754e272c1b32d29bccc1becaadcad3 Mon Sep 17 00:00:00 2001 From: Giacomo Citi Date: Wed, 25 Sep 2024 18:27:04 +0200 Subject: [PATCH 1/3] shape version specified only once --- cli/lib/commands/publish.ts | 1 + cli/lib/replace.ts | 19 +++++++++++++++++++ cli/lib/variables.ts | 1 + cli/pipelines/publish.ttl | 10 ++++++++++ cli/shapes-all.ttl | 4 ++-- cli/shapes-default.ttl | 2 +- cli/shapes-opendataswiss.ttl | 2 +- cli/shapes-visualize.ttl | 2 +- 8 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 cli/lib/replace.ts diff --git a/cli/lib/commands/publish.ts b/cli/lib/commands/publish.ts index b1fb6cba6..ee6cb5ff5 100644 --- a/cli/lib/commands/publish.ts +++ b/cli/lib/commands/publish.ts @@ -42,6 +42,7 @@ export default runner.create({ variable.set('publish-graph-store-password', publishStore?.password || process.env.PUBLISH_GRAPH_STORE_PASSWORD) variable.set('metadata', $rdf.dataset()) variable.set('shapesPath', path.resolve(__dirname, `../../${profile}.ttl`)) + variable.set('shapesVersion', 'v0.2.2') if (cubeCreatorVersion) { variable.set('cubeCreatorVersion', cubeCreatorVersion) diff --git a/cli/lib/replace.ts b/cli/lib/replace.ts new file mode 100644 index 000000000..cc1686479 --- /dev/null +++ b/cli/lib/replace.ts @@ -0,0 +1,19 @@ +import through2 from 'through2' +import type { Quad } from '@rdfjs/types' +import $rdf from 'rdf-ext' + +function replace(version: string) { + const prefix = 'https://cube.link/latest/' + const replacement = `https://cube.link/${version}/` + return through2.obj(function (quad: Quad, _, done) { + if (quad.predicate.value === 'https://code.described.at/imports' && quad.object.value.startsWith(prefix)) { + const replaced = quad.object.value.replace(prefix, replacement) + const triple = $rdf.triple(quad.subject, quad.predicate, $rdf.namedNode(replaced)) + done(null, triple) + } else { + done(null, quad) + } + }) +} + +export default replace diff --git a/cli/lib/variables.ts b/cli/lib/variables.ts index e72a51abe..050be1db4 100644 --- a/cli/lib/variables.ts +++ b/cli/lib/variables.ts @@ -28,6 +28,7 @@ declare module 'barnard59-core' { bnodeUuid: string metadata: DatasetExt shapesPath: string + shapesVersion: string sourceCube: NamedNode sourceEndpoint: NamedNode sourceGraph: NamedNode | undefined diff --git a/cli/pipelines/publish.ttl b/cli/pipelines/publish.ttl index ede9a1d06..5f33072d4 100644 --- a/cli/pipelines/publish.ttl +++ b/cli/pipelines/publish.ttl @@ -94,6 +94,7 @@ :stepList ( <#open> + <#replace> <#imports> ) ] . @@ -107,6 +108,15 @@ code:arguments ( 'shapesPath'^^:VariableName ) . +<#replace> a :Step ; + code:implementedBy + [ + a code:EcmaScript ; + code:link + ] ; + code:arguments ( 'shapesVersion'^^:VariableName ) +. + <#imports> a :Step ; code:implementedBy [ diff --git a/cli/shapes-all.ttl b/cli/shapes-all.ttl index c7c898907..3f2a37d09 100644 --- a/cli/shapes-all.ttl +++ b/cli/shapes-all.ttl @@ -6,11 +6,11 @@ prefix code: ] . [ - code:imports ; + code:imports ; code:extension "ttl" ; ] . [ - code:imports ; + code:imports ; code:extension "ttl" ; ] . \ No newline at end of file diff --git a/cli/shapes-default.ttl b/cli/shapes-default.ttl index 4e05a7c46..115a63232 100644 --- a/cli/shapes-default.ttl +++ b/cli/shapes-default.ttl @@ -6,6 +6,6 @@ prefix code: ] . [ - code:imports ; + code:imports ; code:extension "ttl" ; ] . \ No newline at end of file diff --git a/cli/shapes-opendataswiss.ttl b/cli/shapes-opendataswiss.ttl index bd8a8f11f..da66d6268 100644 --- a/cli/shapes-opendataswiss.ttl +++ b/cli/shapes-opendataswiss.ttl @@ -6,6 +6,6 @@ prefix code: ] . [ - code:imports ; + code:imports ; code:extension "ttl" ; ] . diff --git a/cli/shapes-visualize.ttl b/cli/shapes-visualize.ttl index cdc741613..26fcb391b 100644 --- a/cli/shapes-visualize.ttl +++ b/cli/shapes-visualize.ttl @@ -6,6 +6,6 @@ prefix code: ] . [ - code:imports ; + code:imports ; code:extension "ttl" ; ] . From bb137febb5917bfc6f05454867f903ddb7c14657 Mon Sep 17 00:00:00 2001 From: Giacomo Citi Date: Thu, 26 Sep 2024 17:29:51 +0200 Subject: [PATCH 2/3] use async generator --- cli/lib/replace.ts | 26 +++++++++++++------------- cli/package.json | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/cli/lib/replace.ts b/cli/lib/replace.ts index cc1686479..845754790 100644 --- a/cli/lib/replace.ts +++ b/cli/lib/replace.ts @@ -1,19 +1,19 @@ -import through2 from 'through2' import type { Quad } from '@rdfjs/types' -import $rdf from 'rdf-ext' +import { Context } from 'barnard59-core' -function replace(version: string) { +export default function replace(this: Context, version: string) { const prefix = 'https://cube.link/latest/' const replacement = `https://cube.link/${version}/` - return through2.obj(function (quad: Quad, _, done) { - if (quad.predicate.value === 'https://code.described.at/imports' && quad.object.value.startsWith(prefix)) { - const replaced = quad.object.value.replace(prefix, replacement) - const triple = $rdf.triple(quad.subject, quad.predicate, $rdf.namedNode(replaced)) - done(null, triple) - } else { - done(null, quad) + const { env } = this + + return async function * (stream: AsyncIterable) { + for await (const quad of stream) { + if (quad.predicate.equals(env.ns.code.imports) && quad.object.value.startsWith(prefix)) { + const replaced = quad.object.value.replace(prefix, replacement) + yield env.quad(quad.subject, quad.predicate, env.namedNode(replaced)) + } else { + yield quad + } } - }) + } } - -export default replace diff --git a/cli/package.json b/cli/package.json index 547f9e78d..0b6acfea7 100644 --- a/cli/package.json +++ b/cli/package.json @@ -43,6 +43,7 @@ "alcaeus": "^2", "aws-sdk": "^2.559.0", "barnard59": "^5.0.4", + "barnard59-core": "^6.0.0", "barnard59-base": "^2.4.2", "barnard59-cube": "^1.4.8", "barnard59-formats": "^4.0.0", @@ -112,7 +113,6 @@ "@types/sinon-chai": "^3.2.4", "@types/sparql-http-client": "^2", "@types/through2": "^2.0.36", - "barnard59-core": "^6.0.0", "chai": "^4.3.4", "dotenv": "^16.0.0", "dotenv-cli": "^5.0.0", From 805f3705882e8bc99af72826f1297988817f52ef Mon Sep 17 00:00:00 2001 From: Giacomo Citi Date: Thu, 26 Sep 2024 17:47:44 +0200 Subject: [PATCH 3/3] renaming and optional variable --- cli/lib/commands/publish.ts | 1 - cli/lib/{replace.ts => replaceShapesVersion.ts} | 2 +- cli/pipelines/publish.ttl | 7 ++++++- 3 files changed, 7 insertions(+), 3 deletions(-) rename cli/lib/{replace.ts => replaceShapesVersion.ts} (88%) diff --git a/cli/lib/commands/publish.ts b/cli/lib/commands/publish.ts index ee6cb5ff5..b1fb6cba6 100644 --- a/cli/lib/commands/publish.ts +++ b/cli/lib/commands/publish.ts @@ -42,7 +42,6 @@ export default runner.create({ variable.set('publish-graph-store-password', publishStore?.password || process.env.PUBLISH_GRAPH_STORE_PASSWORD) variable.set('metadata', $rdf.dataset()) variable.set('shapesPath', path.resolve(__dirname, `../../${profile}.ttl`)) - variable.set('shapesVersion', 'v0.2.2') if (cubeCreatorVersion) { variable.set('cubeCreatorVersion', cubeCreatorVersion) diff --git a/cli/lib/replace.ts b/cli/lib/replaceShapesVersion.ts similarity index 88% rename from cli/lib/replace.ts rename to cli/lib/replaceShapesVersion.ts index 845754790..0c35b34d4 100644 --- a/cli/lib/replace.ts +++ b/cli/lib/replaceShapesVersion.ts @@ -1,7 +1,7 @@ import type { Quad } from '@rdfjs/types' import { Context } from 'barnard59-core' -export default function replace(this: Context, version: string) { +export default function replaceShapesVersion(this: Context, version = 'v0.2.2') { const prefix = 'https://cube.link/latest/' const replacement = `https://cube.link/${version}/` const { env } = this diff --git a/cli/pipelines/publish.ttl b/cli/pipelines/publish.ttl index 5f33072d4..82bcb39fe 100644 --- a/cli/pipelines/publish.ttl +++ b/cli/pipelines/publish.ttl @@ -21,6 +21,11 @@ :name "executionUrl" ; :required false ] ; + :variable + [ + :name "shapesVersion" ; + :required false + ] ; ] ; :steps [ @@ -112,7 +117,7 @@ code:implementedBy [ a code:EcmaScript ; - code:link + code:link ] ; code:arguments ( 'shapesVersion'^^:VariableName ) .