@noeldemartin/solid-utils 0.5.0 → 0.6.0-next.508449b33de64b0bcade86b642c9793381434231

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.
Files changed (66) hide show
  1. package/dist/chai.d.ts +31 -0
  2. package/dist/chai.js +23 -0
  3. package/dist/chai.js.map +1 -0
  4. package/dist/helpers-DGXMj9cx.js +107 -0
  5. package/dist/helpers-DGXMj9cx.js.map +1 -0
  6. package/dist/io-wCcrq4b9.js +401 -0
  7. package/dist/io-wCcrq4b9.js.map +1 -0
  8. package/dist/noeldemartin-solid-utils.d.ts +61 -65
  9. package/dist/noeldemartin-solid-utils.js +224 -0
  10. package/dist/noeldemartin-solid-utils.js.map +1 -0
  11. package/dist/testing.d.ts +40 -0
  12. package/dist/testing.js +7 -0
  13. package/dist/testing.js.map +1 -0
  14. package/dist/vitest.d.ts +50 -0
  15. package/dist/vitest.js +55 -0
  16. package/dist/vitest.js.map +1 -0
  17. package/package.json +67 -63
  18. package/src/chai/assertions.ts +35 -0
  19. package/src/chai/index.ts +19 -0
  20. package/src/errors/UnauthorizedError.ts +1 -3
  21. package/src/errors/UnsuccessfulNetworkRequestError.ts +2 -2
  22. package/src/helpers/auth.test.ts +221 -0
  23. package/src/helpers/auth.ts +28 -27
  24. package/src/helpers/identifiers.test.ts +76 -0
  25. package/src/helpers/identifiers.ts +14 -17
  26. package/src/helpers/index.ts +0 -1
  27. package/src/helpers/interop.ts +23 -16
  28. package/src/helpers/io.test.ts +228 -0
  29. package/src/helpers/io.ts +57 -77
  30. package/src/helpers/jsonld.ts +6 -6
  31. package/src/helpers/vocabs.ts +3 -6
  32. package/src/helpers/wac.test.ts +64 -0
  33. package/src/helpers/wac.ts +10 -6
  34. package/src/index.ts +4 -0
  35. package/src/models/SolidDocument.test.ts +77 -0
  36. package/src/models/SolidDocument.ts +14 -18
  37. package/src/models/SolidStore.ts +22 -12
  38. package/src/models/SolidThing.ts +5 -7
  39. package/src/models/index.ts +2 -0
  40. package/src/{helpers/testing.ts → testing/helpers.ts} +24 -27
  41. package/src/testing/hepers.test.ts +329 -0
  42. package/src/testing/index.ts +1 -2
  43. package/src/types/index.ts +2 -0
  44. package/src/types/n3.d.ts +0 -2
  45. package/src/vitest/index.ts +20 -0
  46. package/src/vitest/matchers.ts +68 -0
  47. package/.github/workflows/ci.yml +0 -16
  48. package/.nvmrc +0 -1
  49. package/CHANGELOG.md +0 -70
  50. package/dist/noeldemartin-solid-utils.cjs.js +0 -2
  51. package/dist/noeldemartin-solid-utils.cjs.js.map +0 -1
  52. package/dist/noeldemartin-solid-utils.esm.js +0 -2
  53. package/dist/noeldemartin-solid-utils.esm.js.map +0 -1
  54. package/dist/noeldemartin-solid-utils.umd.js +0 -90
  55. package/dist/noeldemartin-solid-utils.umd.js.map +0 -1
  56. package/noeldemartin.config.js +0 -9
  57. package/src/main.ts +0 -5
  58. package/src/plugins/chai/assertions.ts +0 -40
  59. package/src/plugins/chai/index.ts +0 -5
  60. package/src/plugins/cypress/types.d.ts +0 -15
  61. package/src/plugins/index.ts +0 -2
  62. package/src/plugins/jest/index.ts +0 -5
  63. package/src/plugins/jest/matchers.ts +0 -65
  64. package/src/plugins/jest/types.d.ts +0 -14
  65. package/src/testing/ResponseStub.ts +0 -46
  66. package/src/testing/mocking.ts +0 -33
@@ -1,3 +1,5 @@
1
1
  export { default as SolidDocument, SolidDocumentPermission } from './SolidDocument';
2
2
  export { default as SolidStore } from './SolidStore';
3
3
  export { default as SolidThing } from './SolidThing';
4
+
5
+ export * from './SolidStore';
@@ -1,8 +1,14 @@
1
1
  import { JSError, arrayRemove, pull, stringMatchAll } from '@noeldemartin/utils';
2
- import type { JsonLD } from '@/helpers/jsonld';
3
- import type { Quad, Quad_Object } from 'rdf-js';
2
+ import type { Quad, Quad_Object } from '@rdfjs/types';
4
3
 
5
- import { jsonldToQuads, quadToTurtle, quadsToTurtle, sparqlToQuadsSync, turtleToQuadsSync } from './io';
4
+ import {
5
+ jsonldToQuads,
6
+ quadToTurtle,
7
+ quadsToTurtle,
8
+ sparqlToQuadsSync,
9
+ turtleToQuadsSync,
10
+ } from '@noeldemartin/solid-utils/helpers/io';
11
+ import type { JsonLD } from '@noeldemartin/solid-utils/helpers/jsonld';
6
12
 
7
13
  let patternsRegExpsIndex: Record<string, RegExp> = {};
8
14
  const builtInPatterns: Record<string, string> = {
@@ -19,10 +25,9 @@ class ExpectedQuadAssertionError extends JSError {
19
25
 
20
26
  function assertExpectedQuadsExist(expectedQuads: Quad[], actualQuads: Quad[]): void {
21
27
  for (const expectedQuad of expectedQuads) {
22
- const matchingQuad = actualQuads.find(actualQuad => quadEquals(expectedQuad, actualQuad));
28
+ const matchingQuad = actualQuads.find((actualQuad) => quadEquals(expectedQuad, actualQuad));
23
29
 
24
- if (!matchingQuad)
25
- throw new ExpectedQuadAssertionError(expectedQuad);
30
+ if (!matchingQuad) throw new ExpectedQuadAssertionError(expectedQuad);
26
31
 
27
32
  arrayRemove(actualQuads, matchingQuad);
28
33
  }
@@ -34,10 +39,7 @@ function containsPatterns(value: string): boolean {
34
39
 
35
40
  function createPatternRegexp(expected: string): RegExp {
36
41
  const patternAliases = [];
37
- const patternMatches = stringMatchAll<4, 1 | 2>(
38
- expected,
39
- /\[\[((.*?)\]\[)?([^\]]+)\]\]/g,
40
- );
42
+ const patternMatches = stringMatchAll<4, 1 | 2>(expected, /\[\[((.*?)\]\[)?([^\]]+)\]\]/g);
41
43
  const patterns: string[] = [];
42
44
  let expectedRegExp = expected;
43
45
 
@@ -65,12 +67,10 @@ function quadValueEquals(expected: string, actual: string): boolean {
65
67
  }
66
68
 
67
69
  function quadObjectEquals(expected: Quad_Object, actual: Quad_Object): boolean {
68
- if (expected.termType !== actual.termType)
69
- return false;
70
+ if (expected.termType !== actual.termType) return false;
70
71
 
71
72
  if (expected.termType === 'Literal' && actual.termType === 'Literal') {
72
- if (expected.datatype.value !== actual.datatype.value)
73
- return false;
73
+ if (expected.datatype.value !== actual.datatype.value) return false;
74
74
 
75
75
  if (!containsPatterns(expected.value))
76
76
  return expected.datatype.value === 'http://www.w3.org/2001/XMLSchema#dateTime'
@@ -82,9 +82,11 @@ function quadObjectEquals(expected: Quad_Object, actual: Quad_Object): boolean {
82
82
  }
83
83
 
84
84
  function quadEquals(expected: Quad, actual: Quad): boolean {
85
- return quadObjectEquals(expected.object, actual.object)
86
- && quadValueEquals(expected.subject.value, actual.subject.value)
87
- && quadValueEquals(expected.predicate.value, actual.predicate.value);
85
+ return (
86
+ quadObjectEquals(expected.object, actual.object) &&
87
+ quadValueEquals(expected.subject.value, actual.subject.value) &&
88
+ quadValueEquals(expected.predicate.value, actual.predicate.value)
89
+ );
88
90
  }
89
91
 
90
92
  function resetPatterns(): void {
@@ -119,8 +121,7 @@ export async function jsonldEquals(expected: JsonLD, actual: JsonLD): Promise<Eq
119
121
  try {
120
122
  assertExpectedQuadsExist(expectedQuads, actualQuads);
121
123
  } catch (error) {
122
- if (!(error instanceof ExpectedQuadAssertionError))
123
- throw error;
124
+ if (!(error instanceof ExpectedQuadAssertionError)) throw error;
124
125
 
125
126
  return result(false, error.message);
126
127
  }
@@ -137,8 +138,7 @@ export function sparqlEquals(expected: string, actual: string): EqualityResult {
137
138
  const result = (success: boolean, message: string) => ({ success, message, expected, actual });
138
139
 
139
140
  for (const operation of Object.keys(expectedOperations)) {
140
- if (!(operation in actualOperations))
141
- return result(false, `Couldn't find expected ${operation} operation.`);
141
+ if (!(operation in actualOperations)) return result(false, `Couldn't find expected ${operation} operation.`);
142
142
 
143
143
  const expectedQuads = pull(expectedOperations, operation);
144
144
  const actualQuads = pull(actualOperations, operation);
@@ -149,8 +149,7 @@ export function sparqlEquals(expected: string, actual: string): EqualityResult {
149
149
  try {
150
150
  assertExpectedQuadsExist(expectedQuads, actualQuads);
151
151
  } catch (error) {
152
- if (!(error instanceof ExpectedQuadAssertionError))
153
- throw error;
152
+ if (!(error instanceof ExpectedQuadAssertionError)) throw error;
154
153
 
155
154
  return result(
156
155
  false,
@@ -160,8 +159,7 @@ export function sparqlEquals(expected: string, actual: string): EqualityResult {
160
159
  }
161
160
 
162
161
  const unexpectedOperation = Object.keys(actualOperations)[0] ?? null;
163
- if (unexpectedOperation)
164
- return result(false, `Did not expect to find ${unexpectedOperation} triples.`);
162
+ if (unexpectedOperation) return result(false, `Did not expect to find ${unexpectedOperation} triples.`);
165
163
 
166
164
  return result(true, 'sparql matches');
167
165
  }
@@ -180,8 +178,7 @@ export function turtleEquals(expected: string, actual: string): EqualityResult {
180
178
  try {
181
179
  assertExpectedQuadsExist(expectedQuads, actualQuads);
182
180
  } catch (error) {
183
- if (!(error instanceof ExpectedQuadAssertionError))
184
- throw error;
181
+ if (!(error instanceof ExpectedQuadAssertionError)) throw error;
185
182
 
186
183
  return result(false, error.message);
187
184
  }
@@ -0,0 +1,329 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ import { sparqlEquals, turtleEquals } from './helpers';
4
+
5
+ describe('Testing helpers', () => {
6
+
7
+ it('Compares sparql', () => {
8
+ // Arrange
9
+ const expected = 'INSERT DATA { <#me> a <http://xmlns.com/foaf/0.1/Person> . }';
10
+ const actual = 'INSERT DATA { <#me> a <http://xmlns.com/foaf/0.1/Person> . }';
11
+
12
+ // Act
13
+ const result = sparqlEquals(expected, actual);
14
+
15
+ // Assert
16
+ expect(result.success).toBe(true);
17
+ });
18
+
19
+ it('Compares sparql operations', () => {
20
+ // Arrange
21
+ const expected = `
22
+ INSERT DATA { <#me> <http://xmlns.com/foaf/0.1/name> "Amy Doe" . } ;
23
+ DELETE DATA { <#me> <http://xmlns.com/foaf/0.1/name> "John Doe" . }
24
+ `;
25
+ const actual = 'INSERT DATA { <#me> <http://xmlns.com/foaf/0.1/name> "Amy Doe" . }';
26
+
27
+ // Act
28
+ const result = sparqlEquals(expected, actual);
29
+
30
+ // Assert
31
+ expect(result.success).toBe(false);
32
+ });
33
+
34
+ it('Compares sparql triples', () => {
35
+ // Arrange
36
+ const expected = 'INSERT DATA { <#me> a <http://xmlns.com/foaf/0.1/Person> . }';
37
+ const actual = 'INSERT DATA { <#me> <http://xmlns.com/foaf/0.1/name> "Amy Doe" . }';
38
+
39
+ // Act
40
+ const result = sparqlEquals(expected, actual);
41
+
42
+ // Assert
43
+ expect(result.success).toBe(false);
44
+ });
45
+
46
+ it('Compares expanded ordered lists in Turtle', () => {
47
+ // Arrange
48
+ const expected = `
49
+ @prefix schema: <https://schema.org/> .
50
+
51
+ <#ramen>
52
+ a schema:Recipe ;
53
+ schema:name "Ramen" ;
54
+ schema:recipeIngredient ( "Broth" "Noodles" ) .
55
+ `;
56
+ const actual = `
57
+ @prefix schema: <https://schema.org/> .
58
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
59
+
60
+ <#ramen>
61
+ a schema:Recipe ;
62
+ schema:name "Ramen" ;
63
+ schema:recipeIngredient _:b0 .
64
+
65
+ _:b0
66
+ rdf:first "Broth" ;
67
+ rdf:rest _:b1 .
68
+
69
+ _:b1
70
+ rdf:first "Noodles" ;
71
+ rdf:rest rdf:nil .
72
+ `;
73
+
74
+ // Act
75
+ const result = turtleEquals(expected, actual);
76
+
77
+ // Assert
78
+ expect(result.success).toBe(true);
79
+ });
80
+
81
+ it('Compares different ordered lists in Turtle', () => {
82
+ // Arrange
83
+ const expected = `
84
+ @prefix schema: <https://schema.org/> .
85
+
86
+ <#ramen>
87
+ a schema:Recipe ;
88
+ schema:name "Ramen" ;
89
+ schema:recipeIngredient ( "Broth" "Noodles" ) .
90
+ `;
91
+ const actual = `
92
+ @prefix schema: <https://schema.org/> .
93
+
94
+ <#ramen>
95
+ a schema:Recipe ;
96
+ schema:name "Ramen" ;
97
+ schema:recipeIngredient ( "Noodles" "Broth" ) .
98
+ `;
99
+
100
+ // Act
101
+ const result = turtleEquals(expected, actual);
102
+
103
+ // Assert
104
+ expect(result.success).toBe(false);
105
+ });
106
+
107
+ it('Compares different unordered lists in Turtle', () => {
108
+ // Arrange
109
+ const expected = `
110
+ @prefix schema: <https://schema.org/> .
111
+
112
+ <#ramen>
113
+ a schema:Recipe ;
114
+ schema:name "Ramen" ;
115
+ schema:recipeIngredient "Broth", "Noodles" .
116
+ `;
117
+ const actual = `
118
+ @prefix schema: <https://schema.org/> .
119
+
120
+ <#ramen>
121
+ a schema:Recipe ;
122
+ schema:name "Ramen" ;
123
+ schema:recipeIngredient "Noodles", "Broth" .
124
+ `;
125
+
126
+ // Act
127
+ const result = turtleEquals(expected, actual);
128
+
129
+ // Assert
130
+ expect(result.success).toBe(true);
131
+ });
132
+
133
+ it('Compares sparql using regex patterns', () => {
134
+ // Arrange
135
+ const expected = `
136
+ INSERT DATA {
137
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
138
+ @prefix foaf: <http://xmlns.com/foaf/> .
139
+ @prefix purl: <http://purl.org/dc/terms/> .
140
+
141
+ <#me>
142
+ foaf:name "[[.*]] Doe" ;
143
+ foaf:age 42 .
144
+
145
+ <#something-[[.*]]>
146
+ purl:created "[[.*]]"^^xsd:dateTime ;
147
+ purl:modified "2021-01-16T[[.*]]"^^xsd:dateTime ;
148
+ purl:available "2021-01-16T12:34:56Z"^^xsd:dateTime .
149
+ }
150
+ `;
151
+ const actual = `
152
+ INSERT DATA {
153
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
154
+ @prefix foaf: <http://xmlns.com/foaf/> .
155
+ @prefix purl: <http://purl.org/dc/terms/> .
156
+
157
+ <#me>
158
+ foaf:name "John Doe" ;
159
+ foaf:age 42 .
160
+
161
+ <#something-123456>
162
+ purl:created "2021-01-16T12:12:50.123Z"^^xsd:dateTime ;
163
+ purl:modified "2021-01-16T12:12:50.123Z"^^xsd:dateTime ;
164
+ purl:available "2021-01-16T12:34:56.000Z"^^xsd:dateTime .
165
+ }
166
+ `;
167
+
168
+ // Act
169
+ const result = sparqlEquals(expected, actual);
170
+
171
+ // Assert
172
+ expect(result.success).toBe(true);
173
+ });
174
+
175
+ it('supports aliases in regex patterns', () => {
176
+ // Arrange
177
+ const expected = `
178
+ @prefix schema: <https://schema.org/> .
179
+
180
+ <#ramen>
181
+ a schema:Recipe ;
182
+ schema:name "Ramen" ;
183
+ schema:recipeInstructions <#[[step-1][.*]]>, <#[[step-2][.*]]> .
184
+
185
+ <#[[step-1][.*]]>
186
+ a schema:HowToStep ;
187
+ schema:text "Boil the noodles" .
188
+
189
+ <#[[step-2][.*]]>
190
+ a schema:HowToStep ;
191
+ schema:text "Dip them into the broth" .
192
+ `;
193
+ const actual = `
194
+ @prefix schema: <https://schema.org/> .
195
+
196
+ <#ramen>
197
+ a schema:Recipe ;
198
+ schema:name "Ramen" ;
199
+ schema:recipeInstructions <#ramen-step-1>, <#ramen-step-2> .
200
+
201
+ <#ramen-step-1>
202
+ a schema:HowToStep ;
203
+ schema:text "Boil the noodles" .
204
+
205
+ <#ramen-step-2>
206
+ a schema:HowToStep ;
207
+ schema:text "Dip them into the broth" .
208
+ `;
209
+
210
+ // Act
211
+ const result = turtleEquals(expected, actual);
212
+
213
+ // Assert
214
+ expect(result.success).toBe(true);
215
+ });
216
+
217
+ it('counts matching triples only once', () => {
218
+ // Arrange
219
+ const expected = `
220
+ @prefix schema: <https://schema.org/> .
221
+
222
+ <#ramen>
223
+ a schema:Recipe ;
224
+ schema:name "Ramen", "Ramen" .
225
+ `;
226
+ const actual = `
227
+ @prefix schema: <https://schema.org/> .
228
+
229
+ <#ramen>
230
+ a schema:Recipe ;
231
+ schema:name "Ramen" ;
232
+ schema:description "is life" .
233
+ `;
234
+
235
+ // Act
236
+ const result = turtleEquals(expected, actual);
237
+
238
+ // Assert
239
+ expect(result.success).toBe(false);
240
+ });
241
+
242
+ it('allows regex patterns to be mixed up', () => {
243
+ // Arrange
244
+ const expected = `
245
+ @prefix schema: <https://schema.org/> .
246
+
247
+ <#[[instruction-1][.*]]-operation-[[operation-1][.*]]> schema:object <#[[instruction-1][.*]]> .
248
+ <#[[instruction-1][.*]]-metadata> schema:object <#[[instruction-1][.*]]> .
249
+ `;
250
+ const actual = `
251
+ @prefix schema: <https://schema.org/> .
252
+
253
+ <#ramen-step-1-metadata> schema:object <#ramen> .
254
+ <#ramen-step-1-operation-1> schema:object <#ramen> .
255
+ `;
256
+
257
+ // Act
258
+ const result = turtleEquals(expected, actual);
259
+
260
+ // Assert
261
+ expect(result.success).toBe(true);
262
+ });
263
+
264
+ it('matches built-in patterns', () => {
265
+ // Arrange
266
+ const expected = `
267
+ @prefix schema: <https://schema.org/> .
268
+
269
+ <#[[foobar][%uuid%]]> schema:description "Lorem ipsum" .
270
+ <#[[%uuid%]]> schema:description "Dolor sit amet" .
271
+ `;
272
+ const actual = `
273
+ @prefix schema: <https://schema.org/> .
274
+
275
+ <#20421db7-0c7d-419c-b27e-2c9b3cc026b3> schema:description "Lorem ipsum" .
276
+ <#d4b41533-dd5d-4a66-9d3f-316f80f135b2> schema:description "Dolor sit amet" .
277
+ `;
278
+
279
+ // Act
280
+ const result = turtleEquals(expected, actual);
281
+
282
+ // Assert
283
+ expect(result.success).toBe(true);
284
+ });
285
+
286
+ // TODO
287
+ it.skip('aliases match regex patterns', () => {
288
+ // Arrange
289
+ const expected = `
290
+ @prefix schema: <https://schema.org/> .
291
+
292
+ <#ramen>
293
+ a schema:Recipe ;
294
+ schema:name "Ramen" ;
295
+ schema:recipeInstructions <#[[step-1][.*]]>, <#[[step-2][.*]]> .
296
+
297
+ <#[[step-1][.*]]>
298
+ a schema:HowToStep ;
299
+ schema:text "Boil the noodles" .
300
+
301
+ <#[[step-2][.*]]>
302
+ a schema:HowToStep ;
303
+ schema:text "Dip them into the broth" .
304
+ `;
305
+ const actual = `
306
+ @prefix schema: <https://schema.org/> .
307
+
308
+ <#ramen>
309
+ a schema:Recipe ;
310
+ schema:name "Ramen" ;
311
+ schema:recipeInstructions <#ramen-step-1>, <#ramen-step-2> .
312
+
313
+ <#ramen-step-1>
314
+ a schema:HowToStep ;
315
+ schema:text "Boil the noodles" .
316
+
317
+ <#ramen-step-3>
318
+ a schema:HowToStep ;
319
+ schema:text "Dip them into the broth" .
320
+ `;
321
+
322
+ // Act
323
+ const result = turtleEquals(expected, actual);
324
+
325
+ // Assert
326
+ expect(result.success).toBe(false);
327
+ });
328
+
329
+ });
@@ -1,2 +1 @@
1
- export * from './mocking';
2
- export { default as ResponseStub } from './ResponseStub';
1
+ export * from './helpers';
@@ -0,0 +1,2 @@
1
+ export type { ChaiSolidAssertions } from '@noeldemartin/solid-utils/chai';
2
+ export type { VitestSolidMatchers } from '@noeldemartin/solid-utils/vitest';
package/src/types/n3.d.ts CHANGED
@@ -1,9 +1,7 @@
1
1
  import '@types/n3';
2
2
 
3
3
  declare module 'n3' {
4
-
5
4
  interface Parser {
6
5
  _resolveRelativeIRI(iri: string): string;
7
6
  }
8
-
9
7
  }
@@ -0,0 +1,20 @@
1
+ import { expect } from 'vitest';
2
+
3
+ import matchers from './matchers';
4
+
5
+ export type VitestSolidMatchers<R = unknown> = {
6
+ [K in keyof typeof matchers]: (
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ ...args: Parameters<(typeof matchers)[K]> extends [any, ...infer Rest] ? Rest : never
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ ) => ReturnType<(typeof matchers)[K]> extends Promise<any> ? Promise<R> : R;
11
+ };
12
+
13
+ export function installVitestSolidMatchers(): void {
14
+ expect.extend(matchers);
15
+ }
16
+
17
+ declare module '@vitest/expect' {
18
+ interface Assertion<T> extends VitestSolidMatchers<T> {}
19
+ interface AsymmetricMatchersContaining extends VitestSolidMatchers {}
20
+ }
@@ -0,0 +1,68 @@
1
+ import type { MatcherState, MatchersObject } from '@vitest/expect';
2
+
3
+ import { normalizeSparql, normalizeTurtle } from '@noeldemartin/solid-utils/helpers/io';
4
+ import { jsonldEquals, sparqlEquals, turtleEquals } from '@noeldemartin/solid-utils/testing/helpers';
5
+ import type { EqualityResult } from '@noeldemartin/solid-utils/testing/helpers';
6
+ import type { JsonLD } from '@noeldemartin/solid-utils/helpers';
7
+
8
+ interface FormatResultOptions {
9
+ state: MatcherState;
10
+ hint: string;
11
+ expected: unknown;
12
+ received: unknown;
13
+ }
14
+
15
+ function formatResult(result: EqualityResult, options: FormatResultOptions) {
16
+ const pass = result.success;
17
+ const utils = options.state.utils;
18
+ const message = pass
19
+ ? () => [result.message, utils.matcherHint(options.hint)].join('\n\n')
20
+ : () =>
21
+ [
22
+ result.message,
23
+ utils.matcherHint(options.hint),
24
+ [
25
+ `Expected: not ${utils.printExpected(options.expected)}`,
26
+ `Received: ${utils.printReceived(options.received)}`,
27
+ ].join('\n'),
28
+ ].join('\n\n');
29
+
30
+ return { pass, message };
31
+ }
32
+
33
+ export function defineMatchers<T extends MatchersObject>(matchers: T): T {
34
+ return matchers;
35
+ }
36
+
37
+ export default defineMatchers({
38
+ async toEqualJsonLD(received, expected: JsonLD) {
39
+ const result = await jsonldEquals(expected, received);
40
+
41
+ return formatResult(result, {
42
+ state: this,
43
+ hint: 'toEqualJsonLD',
44
+ expected,
45
+ received,
46
+ });
47
+ },
48
+ toEqualSparql(received, expected: string) {
49
+ const result = sparqlEquals(expected, received);
50
+
51
+ return formatResult(result, {
52
+ state: this,
53
+ hint: 'toEqualSparql',
54
+ expected: normalizeSparql(expected),
55
+ received: normalizeSparql(received),
56
+ });
57
+ },
58
+ toEqualTurtle(received, expected: string) {
59
+ const result = turtleEquals(expected, received);
60
+
61
+ return formatResult(result, {
62
+ state: this,
63
+ hint: 'toEqualTurtle',
64
+ expected: normalizeTurtle(expected),
65
+ received: normalizeTurtle(received),
66
+ });
67
+ },
68
+ });
@@ -1,16 +0,0 @@
1
- name: CI
2
-
3
- on: [push, pull_request]
4
-
5
- jobs:
6
- ci:
7
- runs-on: ubuntu-latest
8
- steps:
9
- - uses: actions/checkout@v3
10
- - uses: actions/setup-node@v3
11
- with:
12
- node-version-file: '.nvmrc'
13
- - run: npm ci
14
- - run: npm run build
15
- - run: npm run lint
16
- - run: npm run test
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- v16
package/CHANGELOG.md DELETED
@@ -1,70 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
-
7
- ## [v0.5.0](https://github.com/NoelDeMartin/solid-utils/releases/tag/v0.5.0) - 2025-01-05
8
-
9
- ### Added
10
-
11
- - `ldp:` prefix.
12
- - `toEqualTurtle` matcher.
13
-
14
- ### Fixed
15
-
16
- - Parsing JsonLD with anonymous subjects (meaning subjects with ids such as `#it`, without a full url).
17
-
18
- ### Changed
19
-
20
- - `@types/rdf-js` dependency for `@rdfjs/types`.
21
- - Many of the `fetch*` helpers now take an options object instead of a `fetch` method.
22
- - Disabled caching when reading user profiles, in order to fix an issue with CSS v7.1.3 (See [CommunitySolidServer/CommunitySolidServer#1972](https://github.com/CommunitySolidServer/CommunitySolidServer/issues/1972)).
23
-
24
- ### Removed
25
-
26
- - Faking helpers have been extracted into `@noeldemartin/testing` in order to avoid including them (and the `faker` dependency) on production bundles.
27
-
28
- ## [v0.4.0](https://github.com/NoelDeMartin/solid-utils/releases/tag/v0.4.0) - 2023-12-17
29
-
30
- ### Changed
31
-
32
- - Retrieving user profiles will now fail if no storage urls are found. In reality, this is only an improvement for the TypeScript types since [according to the spec](https://solidproject.org/TR/protocol#storage-resource) this should never happen.
33
-
34
- ### Deprecated
35
-
36
- - Interoperability helpers such as `createPublicTypeIndex`, `createPrivateTypeIndex`, `findContainerRegistrations`, and `findInstanceRegistrations`. Use [soukai-solid interoperability helpers](https://github.com/noeldemartin/soukai-solid#interoperability) instead.
37
-
38
- ### Removed
39
-
40
- - Required jest dependencies. This was previously causing some problems using other test runners like [Vitest](https://vitest.dev/).
41
-
42
- ## [v0.3.0](https://github.com/NoelDeMartin/solid-utils/releases/tag/v0.3.0) - 2023-03-10
43
-
44
- ### Fixed
45
-
46
- - Tree-shaking by declaring `"sideEffects": false`.
47
-
48
- ### Changed
49
-
50
- - `fetchLoginUserProfile` now takes an options object instead of an optional fetch function.
51
-
52
- ## [v0.2.0](https://github.com/NoelDeMartin/solid-utils/releases/tag/v0.2.0) - 2023-01-20
53
-
54
- ### Added
55
-
56
- - `rdf:` prefix for `http://www.w3.org/1999/02/22-rdf-syntax-ns#` (previously was `rdfs:`).
57
-
58
- ### Changed
59
-
60
- - The `rdfs:` has been changed to be `http://www.w3.org/2000/01/rdf-schema#`.
61
-
62
- ## [v0.1.1](https://github.com/NoelDeMartin/solid-utils/releases/tag/v0.1.1) - 2021-09-04
63
-
64
- No documented changes.
65
-
66
- ## [v0.1.0](https://github.com/NoelDeMartin/solid-utils/releases/tag/v0.1.0) - 2021-09-04
67
-
68
- ### Added
69
-
70
- - Everything!