@traqula/test-utils 0.0.1-alpha.145 → 0.0.1-alpha.176

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # TRAQULA Test utils
1
+ # Traqula Test utils
2
2
 
3
- TRAQULA test utils contains some developer dependencies for testing packages and engines from the TRAQULA project.
3
+ Traqula test utils contains some developer dependencies for testing packages and engines from the Traqula project.
4
4
 
5
5
  ## Installation
6
6
 
@@ -12,4 +12,4 @@ or
12
12
 
13
13
  ```bash
14
14
  yarn add -D @traqula/test-utils.ts
15
- ```
15
+ ```
@@ -1,11 +1,10 @@
1
- import { DataFactory } from "rdf-data-factory";
2
- import { BaseQuad } from "@rdfjs/types";
1
+ import type { BaseQuad } from '@rdfjs/types';
2
+ import type { DataFactory } from 'rdf-data-factory';
3
3
  interface Parser {
4
- parse: (query: string) => unknown;
4
+ parse: (query: string, context?: {
5
+ prefixes?: Record<string, string>;
6
+ baseIRI?: string;
7
+ }) => unknown;
5
8
  }
6
- type ParserConstructor = (args?: {
7
- prefixes?: Record<string, string>;
8
- baseIRI?: string;
9
- }) => Parser;
10
- export declare function importSparql11NoteTests(constructor: ParserConstructor, dataFactory: DataFactory<BaseQuad>): void;
9
+ export declare function importSparql11NoteTests(parser: Parser, dataFactory: DataFactory<BaseQuad>): void;
11
10
  export {};
@@ -1,7 +1,6 @@
1
- import { describe, it } from "vitest";
2
- export function importSparql11NoteTests(constructor, dataFactory) {
3
- const parser = constructor();
4
- function testErroneousQuery(query, errorMsg) {
1
+ import { describe, it } from 'vitest';
2
+ export function importSparql11NoteTests(parser, dataFactory) {
3
+ function testErroneousQuery(query, _errorMsg) {
5
4
  return ({ expect }) => {
6
5
  let error = null;
7
6
  try {
@@ -38,10 +37,9 @@ export function importSparql11NoteTests(constructor, dataFactory) {
38
37
  it('should throw an error on an aggregate function within an aggregate function', testErroneousQuery('SELECT (SUM(COUNT(?lprice)) AS ?totalPrice) { }', 'An aggregate function is not allowed within an aggregate function'));
39
38
  describe('with pre-defined prefixes', () => {
40
39
  const prefixes = { a: 'ex:abc#', b: 'ex:def#' };
41
- const parser = constructor({ prefixes });
42
40
  it('should use those prefixes', ({ expect }) => {
43
41
  const query = 'SELECT * { a:a b:b "" }';
44
- expect(parser.parse(query)).toMatchObject({
42
+ expect(parser.parse(query, { prefixes })).toMatchObject({
45
43
  where: [
46
44
  {
47
45
  triples: [
@@ -57,7 +55,7 @@ export function importSparql11NoteTests(constructor, dataFactory) {
57
55
  });
58
56
  it('should allow temporarily overriding prefixes', ({ expect }) => {
59
57
  const query = 'PREFIX a: <ex:xyz#> SELECT * { a:a b:b "" }';
60
- expect(parser.parse(query)).toMatchObject({
58
+ expect(parser.parse(query, { prefixes })).toMatchObject({
61
59
  where: [{
62
60
  triples: [{
63
61
  subject: dataFactory.namedNode('ex:xyz#a'),
@@ -68,7 +66,7 @@ export function importSparql11NoteTests(constructor, dataFactory) {
68
66
  ],
69
67
  });
70
68
  const query2 = 'SELECT * { a:a b:b "" }';
71
- expect(parser.parse(query2)).toMatchObject({
69
+ expect(parser.parse(query2, { prefixes })).toMatchObject({
72
70
  where: [{
73
71
  triples: [{
74
72
  subject: dataFactory.namedNode('ex:abc#a'),
@@ -82,42 +80,28 @@ export function importSparql11NoteTests(constructor, dataFactory) {
82
80
  it('should not change the original prefixes', ({ expect }) => {
83
81
  expect(prefixes).toEqual({ a: 'ex:abc#', b: 'ex:def#' });
84
82
  });
85
- it('should not take over changes to the original prefixes', ({ expect }) => {
86
- const query = 'SELECT * { a:a b:b "" }';
87
- prefixes.a = 'ex:xyz#';
88
- expect(parser.parse(query)).toMatchObject({
89
- where: [{
90
- triples: [{
91
- subject: dataFactory.namedNode('ex:abc#a'),
92
- predicate: dataFactory.namedNode('ex:def#b'),
93
- object: dataFactory.literal(''),
94
- }],
95
- },
96
- ],
97
- });
98
- });
99
83
  });
100
84
  describe('with pre-defined base IRI', () => {
101
- const parser = constructor({ baseIRI: 'http://ex.org/' });
85
+ const context = { baseIRI: 'http://ex.org/' };
102
86
  it('contains the base', ({ expect }) => {
103
87
  const query = 'SELECT * { ?s ?p ?o }';
104
- expect(parser.parse(query)).toMatchObject({
105
- base: 'http://ex.org/'
88
+ expect(parser.parse(query, context)).toMatchObject({
89
+ base: 'http://ex.org/',
106
90
  });
107
91
  });
108
92
  it('using prefixed as relative iri', ({ expect }) => {
109
- const parser = constructor({ baseIRI: 'http://ex.org/apl' });
93
+ const context = { baseIRI: 'http://ex.org/apl' };
110
94
  const query = `
111
95
  CONSTRUCT
112
96
  FROM <data.ttl>
113
97
  WHERE { ?s ?p ?o }
114
98
  `;
115
- expect(parser.parse(query)).toMatchObject({
99
+ expect(parser.parse(query, context)).toMatchObject({
116
100
  from: {
117
101
  default: [
118
102
  dataFactory.namedNode('http://ex.org/data.ttl'),
119
- ]
120
- }
103
+ ],
104
+ },
121
105
  });
122
106
  });
123
107
  it('should use the base IRI', ({ expect }) => {
@@ -127,21 +111,21 @@ WHERE { ?s ?p ?o }
127
111
  predicate: dataFactory.namedNode('http://ex.org/#b'),
128
112
  object: dataFactory.literal(''),
129
113
  };
130
- expect(parser.parse(query)).toMatchObject({
114
+ expect(parser.parse(query, context)).toMatchObject({
131
115
  where: [{ triples: [result] }],
132
116
  });
133
117
  });
134
118
  it('should work after a previous query failed', ({ expect }) => {
135
119
  const badQuery = 'SELECT * { <> <#b> "" } invalid!';
136
- expect(() => parser.parse(badQuery)).toThrow(Error);
120
+ expect(() => parser.parse(badQuery, context)).toThrow(Error);
137
121
  const goodQuery = 'SELECT * { <> <#b> "" }';
138
- const parser = constructor({ baseIRI: 'http://ex2.org/' });
122
+ const context = { baseIRI: 'http://ex2.org/' };
139
123
  const result = {
140
124
  subject: dataFactory.namedNode('http://ex2.org/'),
141
125
  predicate: dataFactory.namedNode('http://ex2.org/#b'),
142
126
  object: dataFactory.literal(''),
143
127
  };
144
- const data = parser.parse(goodQuery);
128
+ const data = parser.parse(goodQuery, context);
145
129
  expect(data).toMatchObject({
146
130
  where: [{ triples: [result] }],
147
131
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Sparql11NotesTest.js","sourceRoot":"","sources":["Sparql11NotesTest.ts"],"names":[],"mappings":"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","sourcesContent":["import {describe, it} from \"vitest\";\nimport type {TestFunction} from \"vitest\";\nimport {DataFactory} from \"rdf-data-factory\";\nimport {BaseQuad} from \"@rdfjs/types\";\n\ninterface Parser {\n parse: (query: string) => unknown;\n}\n\ntype ParserConstructor = (args?: {prefixes?: Record<string, string>, baseIRI?: string}) => Parser;\n\nexport function importSparql11NoteTests(constructor: ParserConstructor, dataFactory: DataFactory<BaseQuad>) {\n const parser = constructor();\n\n function testErroneousQuery(query: string, errorMsg: string): TestFunction<object> {\n return ({ expect }) => {\n let error: any = null;\n try {\n parser.parse(query);\n } catch (e) {\n error = e;\n }\n expect(error).not.toBeUndefined();\n expect(error).toBeInstanceOf(Error);\n // Expect(error.message).toContain(errorMsg);\n };\n }\n\n\n it('should throw an error on an invalid query', testErroneousQuery('invalid', 'Parse error on line 1'));\n\n it('should throw an error on a projection of ungrouped variable', testErroneousQuery(\n 'PREFIX : <http://www.example.org/> SELECT ?o WHERE { ?s ?p ?o } GROUP BY ?s',\n 'Projection of ungrouped variable (?o)',\n ));\n\n it('should throw an error on a values class with LESS variables than value', testErroneousQuery(\n 'SELECT * WHERE { } VALUES ( ?S ) { ( true false ) }',\n 'Number of dataBlockValues does not match number of variables. Too much values.',\n ));\n\n it('should throw an error on a values class with MORE variables than value', testErroneousQuery(\n 'SELECT * WHERE { } VALUES ( ?S ?O ) { ( true ) }',\n 'Number of dataBlockValues does not match number of variables. Too few values.',\n ));\n\n it('should NOT throw on a values class with correct amount of values', ({ expect }) => {\n const query = 'SELECT * WHERE { } VALUES ( ?S ) { ( true ) }';\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on an invalid selectscope', testErroneousQuery(\n 'SELECT (1 AS ?X ) { SELECT (2 AS ?X ) {} }',\n 'Target id of \\'AS\\' (?X) already used in subquery',\n ));\n\n it('should throw an error on bind to variable in scope', testErroneousQuery(\n 'SELECT * { ?s ?p ?o BIND(?o AS ?o) }',\n 'Target id of \\'AS\\' (?X) already used in subquery',\n ));\n\n it('should preserve BGP and filter pattern order', ({ expect }) => {\n const query = 'SELECT * { ?s ?p \"1\" . FILTER(true) . ?s ?p \"2\" }';\n expect(parser.parse(query)).toMatchObject({\n where: [\n { type: 'bgp' },\n { type: 'filter' },\n { type: 'bgp' },\n ],\n });\n });\n\n it('should throw an error on an aggregate function within an aggregate function', testErroneousQuery(\n 'SELECT (SUM(COUNT(?lprice)) AS ?totalPrice) { }',\n 'An aggregate function is not allowed within an aggregate function',\n ));\n\n describe('with pre-defined prefixes', () => {\n const prefixes = { a: 'ex:abc#', b: 'ex:def#' };\n const parser = constructor({ prefixes });\n\n it('should use those prefixes', ({ expect }) => {\n const query = 'SELECT * { a:a b:b \"\" }';\n expect(parser.parse(query)).toMatchObject({\n where: [\n {\n triples: [\n {\n subject: dataFactory.namedNode('ex:abc#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.literal(''),\n },\n ],\n },\n ],\n });\n });\n\n it('should allow temporarily overriding prefixes', ({ expect }) => {\n const query = 'PREFIX a: <ex:xyz#> SELECT * { a:a b:b \"\" }';\n expect(parser.parse(query)).toMatchObject({\n where: [{\n triples: [{\n subject: dataFactory.namedNode('ex:xyz#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.literal(''),\n }],\n },\n ],\n });\n\n const query2 = 'SELECT * { a:a b:b \"\" }';\n expect(parser.parse(query2)).toMatchObject({\n where: [{\n triples: [{\n subject: dataFactory.namedNode('ex:abc#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.literal(''),\n }],\n },\n ],\n });\n });\n\n it('should not change the original prefixes', ({ expect }) => {\n expect(prefixes).toEqual({ a: 'ex:abc#', b: 'ex:def#' });\n });\n\n it('should not take over changes to the original prefixes', ({ expect }) => {\n const query = 'SELECT * { a:a b:b \"\" }';\n prefixes.a = 'ex:xyz#';\n expect(parser.parse(query)).toMatchObject({\n where: [{\n triples: [{\n subject: dataFactory.namedNode('ex:abc#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.literal(''),\n }],\n },\n ],\n });\n });\n });\n\n describe('with pre-defined base IRI', () => {\n const parser = constructor({ baseIRI: 'http://ex.org/' });\n\n it('contains the base', ({expect}) => {\n const query = 'SELECT * { ?s ?p ?o }';\n expect(parser.parse(query)).toMatchObject({\n base: 'http://ex.org/'\n });\n })\n\n it('using prefixed as relative iri', ({expect}) => {\n const parser = constructor({ baseIRI: 'http://ex.org/apl' });\n const query = `\nCONSTRUCT\nFROM <data.ttl>\nWHERE { ?s ?p ?o }\n`;\n expect(parser.parse(query)).toMatchObject({\n from: {\n default: [\n dataFactory.namedNode('http://ex.org/data.ttl'),\n ]\n }\n })\n\n })\n\n it('should use the base IRI', ({ expect }) => {\n const query = 'SELECT * { <> <#b> \"\" }';\n const result = {\n subject: dataFactory.namedNode('http://ex.org/'),\n predicate: dataFactory.namedNode('http://ex.org/#b'),\n object: dataFactory.literal(''),\n };\n\n expect(parser.parse(query)).toMatchObject({\n where: [{ triples: [ result ]}],\n });\n });\n\n it('should work after a previous query failed', ({ expect }) => {\n const badQuery = 'SELECT * { <> <#b> \"\" } invalid!';\n expect(() => parser.parse(badQuery)).toThrow(Error);\n\n const goodQuery = 'SELECT * { <> <#b> \"\" }';\n\n const parser = constructor({ baseIRI: 'http://ex2.org/' });\n const result = {\n subject: dataFactory.namedNode('http://ex2.org/'),\n predicate: dataFactory.namedNode('http://ex2.org/#b'),\n object: dataFactory.literal(''),\n };\n const data = parser.parse(goodQuery);\n expect(data).toMatchObject({\n where: [{ triples: [ result ]}],\n });\n });\n });\n\n it('should throw an error on relative IRIs if no base IRI is specified', testErroneousQuery(\n 'SELECT * { <a> <b> <c> }',\n 'Cannot resolve relative IRI a because no base IRI was set.',\n ));\n\n describe('with group collapsing disabled', () => {\n it('should keep explicit pattern group', ({ expect }) => {\n const query = 'SELECT * WHERE { { ?s ?p ?o } ?a ?b ?c }';\n const result = [\n {\n type: 'group',\n patterns: [\n {\n type: 'bgp',\n triples: [\n {\n subject: dataFactory.variable('s'),\n predicate: dataFactory.variable('p'),\n object: dataFactory.variable('o'),\n },\n ],\n },\n ],\n },\n {\n type: 'bgp',\n triples: [\n {\n subject: dataFactory.variable('a'),\n predicate: dataFactory.variable('b'),\n object: dataFactory.variable('c'),\n },\n ],\n },\n ];\n\n expect(parser.parse(query)).toMatchObject({ where: result });\n });\n\n it('should still collapse immediate union groups', ({ expect }) => {\n const query = 'SELECT * WHERE { { ?s ?p ?o } UNION { ?a ?b ?c } }';\n\n const result = [\n {\n type: 'union',\n patterns: [{\n type: 'bgp',\n triples: [{\n subject: {\n termType: 'Variable',\n value: 's',\n },\n predicate: {\n termType: 'Variable',\n value: 'p',\n },\n object: {\n termType: 'Variable',\n value: 'o',\n },\n }],\n }, {\n type: 'bgp',\n triples: [{\n subject: {\n termType: 'Variable',\n value: 'a',\n },\n predicate: {\n termType: 'Variable',\n value: 'b',\n },\n object: {\n termType: 'Variable',\n value: 'c',\n },\n }],\n }],\n },\n ];\n\n expect(parser.parse(query)).toMatchObject({ where: result });\n });\n });\n\n describe('for update queries', () => {\n it('should throw an error on blank nodes in DELETE clause', testErroneousQuery(\n 'DELETE { ?a <ex:knows> [] . } WHERE { ?a <ex:knows> \"Alan\" . }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should not throw on blank nodes in INSERT clause', ({ expect }) => {\n const query = 'INSERT { ?a <ex:knows> [] . } WHERE { ?a <ex:knows> \"Alan\" . }';\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on blank nodes in compact DELETE clause', testErroneousQuery(\n 'DELETE WHERE { _:a <ex:p> <ex:o> }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should throw an error on variables in DELETE DATA clause', testErroneousQuery(\n 'DELETE DATA { ?a <ex:p> <ex:o> }',\n 'Detected illegal variable in BGP',\n ));\n\n it('should throw an error on blank nodes in DELETE DATA clause', testErroneousQuery(\n 'DELETE DATA { _:a <ex:p> <ex:o> }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should throw an error on variables in DELETE DATA clause with GRAPH', testErroneousQuery(\n 'DELETE DATA { GRAPH ?a { <ex:s> <ex:p> <ex:o> } }',\n 'Detected illegal variable in GRAPH',\n ));\n\n it('should throw an error on variables in INSERT DATA clause', testErroneousQuery(\n 'INSERT DATA { ?a <ex:p> <ex:o> }',\n 'Detected illegal variable in BGP',\n ));\n\n it('should not throw on reused blank nodes in one INSERT DATA clause', ({ expect }) => {\n const query = 'INSERT DATA { _:a <ex:p> <ex:o> . _:a <ex:p> <ex:o> . }';\n // Todo: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on reused blank nodes across INSERT DATA clauses', testErroneousQuery(\n 'INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { _:a <ex:p> <ex:o> }',\n 'Detected reuse blank node across different INSERT DATA clauses',\n ));\n\n it('should throw an error on reused blank nodes across INSERT DATA clauses with GRAPH', testErroneousQuery(\n 'INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { GRAPH <ex:g> { _:a <ex:p> <ex:o> } }',\n 'Detected reuse blank node across different INSERT DATA clauses',\n ));\n\n it('should not throw on comment between INSERT and DATA', ({ expect }) => {\n const query = `INSERT\n# Comment\nDATA { GRAPH <ex:G> { <ex:s> <ex:p> 'o1', 'o2', 'o3' } }`;\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should not throw on comment after INSERT that could be confused with DATA', ({ expect }) => {\n const query = `INSERT # DATA\nDATA { GRAPH <ex:G> { <ex:s> <ex:p> 'o1', 'o2', 'o3' } }`;\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on commented DATA after INSERT', testErroneousQuery(\n 'INSERT # DATA { GRAPH <ex:G> { <ex:s> <ex:p> \\'o1\\', \\'o2\\', \\'o3\\' } }',\n 'Parse error',\n ));\n });\n\n it('should throw an error on unicode codepoint escaping in literal with partial surrogate pair', testErroneousQuery(\n 'SELECT * WHERE { ?s <ex:p> \\'\\uD800\\' }',\n 'Invalid unicode codepoint of surrogate pair without corresponding codepoint',\n ));\n\n it(\n 'should not throw an error on unicode codepoint escaping in literal with complete surrogate pair',\n ({ expect }) => {\n const query = 'SELECT * WHERE { ?s <ex:p> \\'\\uD800\\uDFFF\\' }';\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n },\n );\n}"]}
1
+ {"version":3,"file":"Sparql11NotesTest.js","sourceRoot":"","sources":["Sparql11NotesTest.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BaseQuad } from '@rdfjs/types';\nimport type { DataFactory } from 'rdf-data-factory';\nimport { describe, it } from 'vitest';\nimport type { TestFunction } from 'vitest';\n\ninterface Parser {\n parse: (query: string, context?: { prefixes?: Record<string, string>; baseIRI?: string }) => unknown;\n}\n\nexport function importSparql11NoteTests(parser: Parser, dataFactory: DataFactory<BaseQuad>): void {\n function testErroneousQuery(query: string, _errorMsg: string): TestFunction<object> {\n return ({ expect }) => {\n let error: any = null;\n try {\n parser.parse(query);\n } catch (e) {\n error = e;\n }\n expect(error).not.toBeUndefined();\n expect(error).toBeInstanceOf(Error);\n // Expect(error.message).toContain(errorMsg);\n };\n }\n\n it('should throw an error on an invalid query', testErroneousQuery('invalid', 'Parse error on line 1'));\n\n it('should throw an error on a projection of ungrouped variable', testErroneousQuery(\n 'PREFIX : <http://www.example.org/> SELECT ?o WHERE { ?s ?p ?o } GROUP BY ?s',\n 'Projection of ungrouped variable (?o)',\n ));\n\n it('should throw an error on a values class with LESS variables than value', testErroneousQuery(\n 'SELECT * WHERE { } VALUES ( ?S ) { ( true false ) }',\n 'Number of dataBlockValues does not match number of variables. Too much values.',\n ));\n\n it('should throw an error on a values class with MORE variables than value', testErroneousQuery(\n 'SELECT * WHERE { } VALUES ( ?S ?O ) { ( true ) }',\n 'Number of dataBlockValues does not match number of variables. Too few values.',\n ));\n\n it('should NOT throw on a values class with correct amount of values', ({ expect }) => {\n const query = 'SELECT * WHERE { } VALUES ( ?S ) { ( true ) }';\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on an invalid selectscope', testErroneousQuery(\n 'SELECT (1 AS ?X ) { SELECT (2 AS ?X ) {} }',\n 'Target id of \\'AS\\' (?X) already used in subquery',\n ));\n\n it('should throw an error on bind to variable in scope', testErroneousQuery(\n 'SELECT * { ?s ?p ?o BIND(?o AS ?o) }',\n 'Target id of \\'AS\\' (?X) already used in subquery',\n ));\n\n it('should preserve BGP and filter pattern order', ({ expect }) => {\n const query = 'SELECT * { ?s ?p \"1\" . FILTER(true) . ?s ?p \"2\" }';\n expect(parser.parse(query)).toMatchObject({\n where: [\n { type: 'bgp' },\n { type: 'filter' },\n { type: 'bgp' },\n ],\n });\n });\n\n it('should throw an error on an aggregate function within an aggregate function', testErroneousQuery(\n 'SELECT (SUM(COUNT(?lprice)) AS ?totalPrice) { }',\n 'An aggregate function is not allowed within an aggregate function',\n ));\n\n describe('with pre-defined prefixes', () => {\n const prefixes = { a: 'ex:abc#', b: 'ex:def#' };\n\n it('should use those prefixes', ({ expect }) => {\n const query = 'SELECT * { a:a b:b \"\" }';\n expect(parser.parse(query, { prefixes })).toMatchObject({\n where: [\n {\n triples: [\n {\n subject: dataFactory.namedNode('ex:abc#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.literal(''),\n },\n ],\n },\n ],\n });\n });\n\n it('should allow temporarily overriding prefixes', ({ expect }) => {\n const query = 'PREFIX a: <ex:xyz#> SELECT * { a:a b:b \"\" }';\n expect(parser.parse(query, { prefixes })).toMatchObject({\n where: [{\n triples: [{\n subject: dataFactory.namedNode('ex:xyz#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.literal(''),\n }],\n },\n ],\n });\n\n const query2 = 'SELECT * { a:a b:b \"\" }';\n expect(parser.parse(query2, { prefixes })).toMatchObject({\n where: [{\n triples: [{\n subject: dataFactory.namedNode('ex:abc#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.literal(''),\n }],\n },\n ],\n });\n });\n\n it('should not change the original prefixes', ({ expect }) => {\n expect(prefixes).toEqual({ a: 'ex:abc#', b: 'ex:def#' });\n });\n });\n\n describe('with pre-defined base IRI', () => {\n const context = { baseIRI: 'http://ex.org/' };\n\n it('contains the base', ({ expect }) => {\n const query = 'SELECT * { ?s ?p ?o }';\n expect(parser.parse(query, context)).toMatchObject({\n base: 'http://ex.org/',\n });\n });\n\n it('using prefixed as relative iri', ({ expect }) => {\n const context = { baseIRI: 'http://ex.org/apl' };\n const query = `\nCONSTRUCT\nFROM <data.ttl>\nWHERE { ?s ?p ?o }\n`;\n expect(parser.parse(query, context)).toMatchObject({\n from: {\n default: [\n dataFactory.namedNode('http://ex.org/data.ttl'),\n ],\n },\n });\n });\n\n it('should use the base IRI', ({ expect }) => {\n const query = 'SELECT * { <> <#b> \"\" }';\n const result = {\n subject: dataFactory.namedNode('http://ex.org/'),\n predicate: dataFactory.namedNode('http://ex.org/#b'),\n object: dataFactory.literal(''),\n };\n\n expect(parser.parse(query, context)).toMatchObject({\n where: [{ triples: [ result ]}],\n });\n });\n\n it('should work after a previous query failed', ({ expect }) => {\n const badQuery = 'SELECT * { <> <#b> \"\" } invalid!';\n expect(() => parser.parse(badQuery, context)).toThrow(Error);\n\n const goodQuery = 'SELECT * { <> <#b> \"\" }';\n\n const context = { baseIRI: 'http://ex2.org/' };\n const result = {\n subject: dataFactory.namedNode('http://ex2.org/'),\n predicate: dataFactory.namedNode('http://ex2.org/#b'),\n object: dataFactory.literal(''),\n };\n const data = parser.parse(goodQuery, context);\n expect(data).toMatchObject({\n where: [{ triples: [ result ]}],\n });\n });\n });\n\n it('should throw an error on relative IRIs if no base IRI is specified', testErroneousQuery(\n 'SELECT * { <a> <b> <c> }',\n 'Cannot resolve relative IRI a because no base IRI was set.',\n ));\n\n describe('with group collapsing disabled', () => {\n it('should keep explicit pattern group', ({ expect }) => {\n const query = 'SELECT * WHERE { { ?s ?p ?o } ?a ?b ?c }';\n const result = [\n {\n type: 'group',\n patterns: [\n {\n type: 'bgp',\n triples: [\n {\n subject: dataFactory.variable('s'),\n predicate: dataFactory.variable('p'),\n object: dataFactory.variable('o'),\n },\n ],\n },\n ],\n },\n {\n type: 'bgp',\n triples: [\n {\n subject: dataFactory.variable('a'),\n predicate: dataFactory.variable('b'),\n object: dataFactory.variable('c'),\n },\n ],\n },\n ];\n\n expect(parser.parse(query)).toMatchObject({ where: result });\n });\n\n it('should still collapse immediate union groups', ({ expect }) => {\n const query = 'SELECT * WHERE { { ?s ?p ?o } UNION { ?a ?b ?c } }';\n\n const result = [\n {\n type: 'union',\n patterns: [{\n type: 'bgp',\n triples: [{\n subject: {\n termType: 'Variable',\n value: 's',\n },\n predicate: {\n termType: 'Variable',\n value: 'p',\n },\n object: {\n termType: 'Variable',\n value: 'o',\n },\n }],\n }, {\n type: 'bgp',\n triples: [{\n subject: {\n termType: 'Variable',\n value: 'a',\n },\n predicate: {\n termType: 'Variable',\n value: 'b',\n },\n object: {\n termType: 'Variable',\n value: 'c',\n },\n }],\n }],\n },\n ];\n\n expect(parser.parse(query)).toMatchObject({ where: result });\n });\n });\n\n describe('for update queries', () => {\n it('should throw an error on blank nodes in DELETE clause', testErroneousQuery(\n 'DELETE { ?a <ex:knows> [] . } WHERE { ?a <ex:knows> \"Alan\" . }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should not throw on blank nodes in INSERT clause', ({ expect }) => {\n const query = 'INSERT { ?a <ex:knows> [] . } WHERE { ?a <ex:knows> \"Alan\" . }';\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on blank nodes in compact DELETE clause', testErroneousQuery(\n 'DELETE WHERE { _:a <ex:p> <ex:o> }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should throw an error on variables in DELETE DATA clause', testErroneousQuery(\n 'DELETE DATA { ?a <ex:p> <ex:o> }',\n 'Detected illegal variable in BGP',\n ));\n\n it('should throw an error on blank nodes in DELETE DATA clause', testErroneousQuery(\n 'DELETE DATA { _:a <ex:p> <ex:o> }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should throw an error on variables in DELETE DATA clause with GRAPH', testErroneousQuery(\n 'DELETE DATA { GRAPH ?a { <ex:s> <ex:p> <ex:o> } }',\n 'Detected illegal variable in GRAPH',\n ));\n\n it('should throw an error on variables in INSERT DATA clause', testErroneousQuery(\n 'INSERT DATA { ?a <ex:p> <ex:o> }',\n 'Detected illegal variable in BGP',\n ));\n\n it('should not throw on reused blank nodes in one INSERT DATA clause', ({ expect }) => {\n const query = 'INSERT DATA { _:a <ex:p> <ex:o> . _:a <ex:p> <ex:o> . }';\n // Todo: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on reused blank nodes across INSERT DATA clauses', testErroneousQuery(\n 'INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { _:a <ex:p> <ex:o> }',\n 'Detected reuse blank node across different INSERT DATA clauses',\n ));\n\n it('should throw an error on reused blank nodes across INSERT DATA clauses with GRAPH', testErroneousQuery(\n 'INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { GRAPH <ex:g> { _:a <ex:p> <ex:o> } }',\n 'Detected reuse blank node across different INSERT DATA clauses',\n ));\n\n it('should not throw on comment between INSERT and DATA', ({ expect }) => {\n const query = `INSERT\n# Comment\nDATA { GRAPH <ex:G> { <ex:s> <ex:p> 'o1', 'o2', 'o3' } }`;\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should not throw on comment after INSERT that could be confused with DATA', ({ expect }) => {\n const query = `INSERT # DATA\nDATA { GRAPH <ex:G> { <ex:s> <ex:p> 'o1', 'o2', 'o3' } }`;\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on commented DATA after INSERT', testErroneousQuery(\n 'INSERT # DATA { GRAPH <ex:G> { <ex:s> <ex:p> \\'o1\\', \\'o2\\', \\'o3\\' } }',\n 'Parse error',\n ));\n });\n\n it('should throw an error on unicode codepoint escaping in literal with partial surrogate pair', testErroneousQuery(\n 'SELECT * WHERE { ?s <ex:p> \\'\\uD800\\' }',\n 'Invalid unicode codepoint of surrogate pair without corresponding codepoint',\n ));\n\n it(\n 'should not throw an error on unicode codepoint escaping in literal with complete surrogate pair',\n ({ expect }) => {\n const query = 'SELECT * WHERE { ?s <ex:p> \\'\\uD800\\uDFFF\\' }';\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n },\n );\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { PathLike } from 'node:fs';
2
+ import type { FileHandle } from 'node:fs/promises';
3
+ export declare function readFile(path: PathLike | FileHandle, encoding: BufferEncoding): Promise<string>;
@@ -0,0 +1,6 @@
1
+ import fsp from 'node:fs/promises';
2
+ export async function readFile(path, encoding) {
3
+ const content = await fsp.readFile(path, encoding);
4
+ return content.replaceAll(/\r?\n/gu, '\n');
5
+ }
6
+ //# sourceMappingURL=fileUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["fileUtils.ts"],"names":[],"mappings":"AAGA,OAAO,GAAG,MAAM,kBAAkB,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAA2B,EAAE,QAAwB;IAClF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnD,OAAO,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["/* eslint-disable import/no-nodejs-modules */\nimport type { PathLike } from 'node:fs';\nimport type { FileHandle } from 'node:fs/promises';\nimport fsp from 'node:fs/promises';\n\nexport async function readFile(path: PathLike | FileHandle, encoding: BufferEncoding): Promise<string> {\n const content = await fsp.readFile(path, encoding);\n return content.replaceAll(/\\r?\\n/gu, '\\n');\n}\n"]}