Skip to content

Commit

Permalink
Support JSON param ranges via rdf:JSON, Closes #37
Browse files Browse the repository at this point in the history
  • Loading branch information
rubensworks committed Jun 14, 2021
1 parent 2c0c1a6 commit 08b7950
Show file tree
Hide file tree
Showing 6 changed files with 1,423 additions and 1,578 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { RdfObjectLoader, Resource } from 'rdf-object';
import { IRIS_XSD } from '../../rdf/Iris';
import { IRIS_RDF, IRIS_XSD } from '../../rdf/Iris';
import { ErrorResourcesContext } from '../../util/ErrorResourcesContext';
import type { IParameterPropertyHandler } from './IParameterPropertyHandler';

Expand Down Expand Up @@ -71,6 +71,14 @@ export class ParameterPropertyHandlerRange implements IParameterPropertyHandler
(<any>value.term).valueRaw = parsed;
}
break;
case IRIS_RDF.JSON:
try {
parsed = JSON.parse(value.value);
(<any>value.term).valueRaw = parsed;
} catch {
this.throwIncorrectTypeError(value, param);
}
break;
}
}
return value;
Expand Down
1 change: 1 addition & 0 deletions lib/rdf/Iris.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export const IRIS_RDF = {
subject: PREFIX_RDF('subject'),
object: PREFIX_RDF('object'),
type: PREFIX_RDF('type'),
JSON: PREFIX_RDF('JSON'),
};

export const PREFIX_RDFS = definePrefix('http://www.w3.org/2000/01/rdf-schema#');
Expand Down
2 changes: 1 addition & 1 deletion lib/rdf/RdfParser.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { createReadStream } from 'fs';
import type { Readable } from 'stream';
import type * as RDF from 'rdf-js';
import type { ParseOptions } from 'rdf-parse';
import rdfParser from 'rdf-parse';
import type { Logger } from 'winston';
import { PrefetchedDocumentLoader } from './PrefetchedDocumentLoader';
import { RdfStreamIncluder } from './RdfStreamIncluder';
import { createReadStream } from 'fs';
// Import syntax only works in Node > 12
const fs = require('fs').promises;

Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"minimist": "^1.2.0",
"rdf-data-factory": "^1.0.4",
"rdf-object": "^1.8.0",
"rdf-parse": "^1.8.0",
"rdf-parse": "^1.8.1",
"rdf-quad": "^1.5.0",
"rdf-terms": "^1.6.2",
"semver": "^7.3.2",
Expand All @@ -53,7 +53,7 @@
"@typescript-eslint/parser": "^4.6.1",
"@types/jest": "^26.0.23",
"eslint": "^7.12.1",
"eslint-config-es": "^3.25.3",
"eslint-config-es": "3.25.3",
"eslint-import-resolver-typescript": "^2.3.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jest": "^24.1.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import 'jest-rdf';
import {
ParameterPropertyHandlerRange,
} from '../../../../lib/preprocess/parameterproperty/ParameterPropertyHandlerRange';
import { IRIS_XSD } from '../../../../lib/rdf/Iris';
import { IRIS_RDF, IRIS_XSD } from '../../../../lib/rdf/Iris';

const DF = new DataFactory();

Expand Down Expand Up @@ -137,5 +137,19 @@ describe('ParameterPropertyHandlerRange', () => {
objectLoader.createCompactedResource({ range: IRIS_XSD.double }))).term.valueRaw)
.toEqual(256.36);
});

it('should capture JSON', () => {
expect((<any> handler.captureType(objectLoader.createCompactedResource('"1"'),
objectLoader.createCompactedResource({ range: IRIS_RDF.JSON }))).term.valueRaw)
.toEqual(1);
expect((<any> handler.captureType(objectLoader.createCompactedResource('"{"a":"b"}"'),
objectLoader.createCompactedResource({ range: IRIS_RDF.JSON }))).term.valueRaw)
.toEqual({ a: 'b' });
});
it('should error on invalid JSON', () => {
expect(() => handler.captureType(objectLoader.createCompactedResource('"{a:\\"b\\"}"'),
objectLoader.createCompactedResource({ range: IRIS_RDF.JSON, '@id': 'param' })))
.toThrowError(/^Parameter value .* is not of required range type/u);
});
});
});

0 comments on commit 08b7950

Please sign in to comment.