@dwk/rdf 0.1.0-beta.0

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/dist/jsonld.js ADDED
@@ -0,0 +1,620 @@
1
+ import { DataFactory } from "n3";
2
+ /** Error raised for malformed or unsupported JSON-LD input. */
3
+ export class JsonLdError extends Error {
4
+ constructor(message) {
5
+ super(`@dwk/rdf: ${message}`);
6
+ this.name = "JsonLdError";
7
+ }
8
+ }
9
+ const RDF = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
10
+ const XSD = "http://www.w3.org/2001/XMLSchema#";
11
+ const RDF_TYPE = `${RDF}type`;
12
+ const RDF_FIRST = `${RDF}first`;
13
+ const RDF_REST = `${RDF}rest`;
14
+ const RDF_NIL = `${RDF}nil`;
15
+ const RDF_LIST = `${RDF}List`;
16
+ const RDF_LANGSTRING = `${RDF}langString`;
17
+ const XSD_STRING = `${XSD}string`;
18
+ const XSD_BOOLEAN = `${XSD}boolean`;
19
+ const XSD_INTEGER = `${XSD}integer`;
20
+ const XSD_DOUBLE = `${XSD}double`;
21
+ function isObject(value) {
22
+ return typeof value === "object" && value !== null && !Array.isArray(value);
23
+ }
24
+ function arrayify(value) {
25
+ if (value === undefined || value === null)
26
+ return [];
27
+ return Array.isArray(value) ? value : [value];
28
+ }
29
+ function isKeyword(value) {
30
+ return value.startsWith("@");
31
+ }
32
+ function isIriType(type) {
33
+ return type !== undefined && type !== "@id" && type !== "@vocab";
34
+ }
35
+ // An absolute IRI begins with a scheme (`http:`, `urn:`, …). A value without a
36
+ // scheme is a relative reference; JSON-LD 1.0 drops it (rather than emitting a
37
+ // bogus RDF term) when no base resolves it to an absolute IRI.
38
+ const ABSOLUTE_IRI = /^[A-Za-z][A-Za-z0-9+.-]*:/;
39
+ function isAbsoluteIri(value) {
40
+ return ABSOLUTE_IRI.test(value);
41
+ }
42
+ function resolveIri(base, value) {
43
+ if (base === undefined)
44
+ return value;
45
+ try {
46
+ return new URL(value, base).href;
47
+ }
48
+ catch {
49
+ return value;
50
+ }
51
+ }
52
+ /**
53
+ * Expand a term, CURIE, or IRI against the active context. With `vocab`, terms
54
+ * and `@vocab` apply (property / `@type` position); otherwise relative IRIs are
55
+ * resolved against `@base` (`@id` position).
56
+ */
57
+ function expandIri(active, value, opts = {}) {
58
+ if (isKeyword(value))
59
+ return value;
60
+ const term = active.terms.get(value);
61
+ // A term whose definition is `null` is explicitly disabled: it expands to
62
+ // nothing (callers drop empty results) rather than to a bogus IRI.
63
+ if (opts.vocab && term)
64
+ return term.id ?? "";
65
+ const colon = value.indexOf(":");
66
+ if (colon > 0) {
67
+ const prefix = value.slice(0, colon);
68
+ const suffix = value.slice(colon + 1);
69
+ if (prefix === "_" || suffix.startsWith("//"))
70
+ return value;
71
+ const prefixDef = active.terms.get(prefix);
72
+ if (prefixDef?.id)
73
+ return prefixDef.id + suffix;
74
+ return value;
75
+ }
76
+ if (opts.vocab) {
77
+ return active.vocab !== undefined ? active.vocab + value : value;
78
+ }
79
+ return resolveIri(active.base, value);
80
+ }
81
+ function createTermDefinition(active, term, definition) {
82
+ if (definition === null)
83
+ return { id: null };
84
+ if (typeof definition === "string") {
85
+ return { id: expandIri(active, definition, { vocab: true }) };
86
+ }
87
+ if (!isObject(definition)) {
88
+ throw new JsonLdError(`invalid term definition for "${term}"`);
89
+ }
90
+ const def = { id: null };
91
+ if ("@reverse" in definition && definition["@reverse"] != null) {
92
+ def.reverse = true;
93
+ def.id = expandIri(active, String(definition["@reverse"]), { vocab: true });
94
+ }
95
+ else if ("@id" in definition) {
96
+ const id = definition["@id"];
97
+ def.id = id == null ? null : expandIri(active, String(id), { vocab: true });
98
+ }
99
+ else {
100
+ def.id = expandIri(active, term, { vocab: true });
101
+ }
102
+ if ("@type" in definition && definition["@type"] != null) {
103
+ const type = String(definition["@type"]);
104
+ def.type =
105
+ type === "@id" || type === "@vocab"
106
+ ? type
107
+ : expandIri(active, type, { vocab: true });
108
+ }
109
+ if ("@language" in definition) {
110
+ const language = definition["@language"];
111
+ def.language = language == null ? null : String(language).toLowerCase();
112
+ }
113
+ if ("@container" in definition && definition["@container"] != null) {
114
+ const container = definition["@container"];
115
+ def.container = String(Array.isArray(container) ? container[0] : container);
116
+ }
117
+ return def;
118
+ }
119
+ function processContext(active, local) {
120
+ const result = { ...active, terms: new Map(active.terms) };
121
+ for (const entry of arrayify(local)) {
122
+ if (entry === null) {
123
+ result.terms = new Map();
124
+ delete result.vocab;
125
+ delete result.language;
126
+ continue;
127
+ }
128
+ if (typeof entry === "string") {
129
+ throw new JsonLdError(`remote @context (${JSON.stringify(entry)}) is not supported; inline the context`);
130
+ }
131
+ if (!isObject(entry)) {
132
+ throw new JsonLdError("invalid @context entry");
133
+ }
134
+ for (const [key, value] of Object.entries(entry)) {
135
+ switch (key) {
136
+ case "@base":
137
+ result.base = value == null ? undefined : String(value);
138
+ break;
139
+ case "@vocab":
140
+ result.vocab = value == null ? undefined : String(value);
141
+ break;
142
+ case "@language":
143
+ result.language =
144
+ value == null ? undefined : String(value).toLowerCase();
145
+ break;
146
+ case "@version":
147
+ case "@protected":
148
+ case "@import":
149
+ break;
150
+ default:
151
+ result.terms.set(key, createTermDefinition(result, key, value));
152
+ }
153
+ }
154
+ }
155
+ return result;
156
+ }
157
+ // --- Expansion to RDF -----------------------------------------------------
158
+ class RdfEmitter {
159
+ quads = [];
160
+ counter = 0;
161
+ blanks = new Map();
162
+ blankFor(label) {
163
+ let blank = this.blanks.get(label);
164
+ if (!blank) {
165
+ blank = DataFactory.blankNode(`b${this.counter++}`);
166
+ this.blanks.set(label, blank);
167
+ }
168
+ return blank;
169
+ }
170
+ fresh() {
171
+ return DataFactory.blankNode(`b${this.counter++}`);
172
+ }
173
+ emit(subject, predicate, object, graph) {
174
+ this.quads.push(DataFactory.quad(subject, predicate, object, graph));
175
+ }
176
+ /** Process a top-level document (node, array of nodes, or default-graph wrapper). */
177
+ toRdf(input, active) {
178
+ for (const item of arrayify(input)) {
179
+ if (!isObject(item))
180
+ continue;
181
+ const ctx = "@context" in item ? processContext(active, item["@context"]) : active;
182
+ if ("@graph" in item && !("@id" in item)) {
183
+ for (const node of arrayify(item["@graph"])) {
184
+ if (isObject(node)) {
185
+ this.processNode(node, ctx, DataFactory.defaultGraph());
186
+ }
187
+ }
188
+ continue;
189
+ }
190
+ this.processNode(item, ctx, DataFactory.defaultGraph());
191
+ }
192
+ }
193
+ /**
194
+ * Resolve an already-expanded `@id` to a subject/object term, or `null` when
195
+ * it is still a relative reference (JSON-LD 1.0 drops such terms rather than
196
+ * minting an invalid NamedNode).
197
+ */
198
+ idToTerm(id) {
199
+ if (id.startsWith("_:"))
200
+ return this.blankFor(id);
201
+ return isAbsoluteIri(id) ? DataFactory.namedNode(id) : null;
202
+ }
203
+ nodeSubject(node, active) {
204
+ if ("@id" in node && node["@id"] != null) {
205
+ return this.idToTerm(expandIri(active, String(node["@id"])));
206
+ }
207
+ return this.fresh();
208
+ }
209
+ processNode(node, context, graph) {
210
+ const active = "@context" in node ? processContext(context, node["@context"]) : context;
211
+ const subject = this.nodeSubject(node, active);
212
+ // An explicit but unresolvable (relative) @id drops the whole node.
213
+ if (!subject)
214
+ return null;
215
+ for (const type of arrayify(node["@type"])) {
216
+ const iri = expandIri(active, String(type), { vocab: true });
217
+ if (iri && !isKeyword(iri) && isAbsoluteIri(iri)) {
218
+ this.emit(subject, DataFactory.namedNode(RDF_TYPE), DataFactory.namedNode(iri), graph);
219
+ }
220
+ }
221
+ for (const [key, value] of Object.entries(node)) {
222
+ if (key === "@context" || key === "@id" || key === "@type")
223
+ continue;
224
+ if (key === "@graph") {
225
+ for (const inner of arrayify(value)) {
226
+ if (isObject(inner))
227
+ this.processNode(inner, active, subject);
228
+ }
229
+ continue;
230
+ }
231
+ if (key === "@reverse") {
232
+ if (isObject(value))
233
+ this.processReverse(value, subject, active, graph);
234
+ continue;
235
+ }
236
+ if (isKeyword(key))
237
+ continue; // @index, @included, … unsupported — skip
238
+ const predicateIri = expandIri(active, key, { vocab: true });
239
+ if (!predicateIri ||
240
+ isKeyword(predicateIri) ||
241
+ !isAbsoluteIri(predicateIri)) {
242
+ continue;
243
+ }
244
+ const predicate = DataFactory.namedNode(predicateIri);
245
+ const def = active.terms.get(key);
246
+ if (def?.container === "@list") {
247
+ const head = this.buildList(arrayify(value), def, active, graph);
248
+ this.emit(subject, predicate, head, graph);
249
+ continue;
250
+ }
251
+ for (const item of arrayify(value)) {
252
+ if (isObject(item) && "@list" in item) {
253
+ const head = this.buildList(arrayify(item["@list"]), def, active, graph);
254
+ this.emit(subject, predicate, head, graph);
255
+ continue;
256
+ }
257
+ const object = this.valueToObject(item, def, active, graph);
258
+ if (!object)
259
+ continue;
260
+ if (def?.reverse) {
261
+ // A literal cannot be the subject of a triple — drop reverse literals.
262
+ if (object.termType !== "Literal") {
263
+ this.emit(object, predicate, subject, graph);
264
+ }
265
+ }
266
+ else {
267
+ this.emit(subject, predicate, object, graph);
268
+ }
269
+ }
270
+ }
271
+ return subject;
272
+ }
273
+ processReverse(reverse, subject, active, graph) {
274
+ for (const [key, value] of Object.entries(reverse)) {
275
+ const predicateIri = expandIri(active, key, { vocab: true });
276
+ if (!predicateIri ||
277
+ isKeyword(predicateIri) ||
278
+ !isAbsoluteIri(predicateIri)) {
279
+ continue;
280
+ }
281
+ const predicate = DataFactory.namedNode(predicateIri);
282
+ const def = active.terms.get(key);
283
+ for (const item of arrayify(value)) {
284
+ const object = this.valueToObject(item, def, active, graph);
285
+ // A literal cannot be the subject of a triple — drop reverse literals.
286
+ if (object && object.termType !== "Literal") {
287
+ this.emit(object, predicate, subject, graph);
288
+ }
289
+ }
290
+ }
291
+ }
292
+ valueToObject(value, def, active, graph) {
293
+ if (value === null)
294
+ return null;
295
+ if (typeof value === "string") {
296
+ if (def?.type === "@id") {
297
+ return this.idToTerm(expandIri(active, value));
298
+ }
299
+ if (def?.type === "@vocab") {
300
+ const id = expandIri(active, value, { vocab: true });
301
+ return isAbsoluteIri(id) ? DataFactory.namedNode(id) : null;
302
+ }
303
+ return this.literalFor(value, def, active);
304
+ }
305
+ if (typeof value === "number" || typeof value === "boolean") {
306
+ return this.literalFor(value, def, active);
307
+ }
308
+ if (Array.isArray(value))
309
+ return null; // nested arrays are not valid here
310
+ if ("@value" in value)
311
+ return this.valueObjectToLiteral(value, active);
312
+ if ("@list" in value) {
313
+ return this.buildList(arrayify(value["@list"]), def, active, graph);
314
+ }
315
+ if ("@id" in value && Object.keys(value).length === 1) {
316
+ return this.idToTerm(expandIri(active, String(value["@id"])));
317
+ }
318
+ return this.processNode(value, active, graph);
319
+ }
320
+ literalFor(value, def, active) {
321
+ if (typeof value === "boolean") {
322
+ const datatype = isIriType(def?.type) ? def.type : XSD_BOOLEAN;
323
+ return DataFactory.literal(value ? "true" : "false", DataFactory.namedNode(datatype));
324
+ }
325
+ if (typeof value === "number") {
326
+ const datatype = isIriType(def?.type)
327
+ ? def.type
328
+ : isJsonLdDouble(value)
329
+ ? XSD_DOUBLE
330
+ : XSD_INTEGER;
331
+ return DataFactory.literal(numberToLexical(value, datatype), DataFactory.namedNode(datatype));
332
+ }
333
+ if (isIriType(def?.type)) {
334
+ return DataFactory.literal(value, DataFactory.namedNode(def.type));
335
+ }
336
+ const language = def?.language !== undefined ? def.language : active.language;
337
+ if (language)
338
+ return DataFactory.literal(value, language);
339
+ return DataFactory.literal(value);
340
+ }
341
+ valueObjectToLiteral(valueObject, active) {
342
+ const raw = valueObject["@value"];
343
+ // JSON-LD 1.0: a value object whose @value is null (or absent) produces no
344
+ // triple — drop it rather than emit a bogus "null" literal.
345
+ if (raw === null || raw === undefined)
346
+ return null;
347
+ // Resolve the explicit datatype first so a numeric @value coerced to
348
+ // xsd:double uses the canonical double lexical form.
349
+ const explicitType = "@type" in valueObject && valueObject["@type"] != null
350
+ ? expandIri(active, String(valueObject["@type"]), { vocab: true })
351
+ : undefined;
352
+ const lexical = typeof raw === "boolean"
353
+ ? raw
354
+ ? "true"
355
+ : "false"
356
+ : typeof raw === "number"
357
+ ? numberToLexical(raw, explicitType ?? (isJsonLdDouble(raw) ? XSD_DOUBLE : XSD_INTEGER))
358
+ : String(raw);
359
+ if (explicitType !== undefined) {
360
+ return DataFactory.literal(lexical, DataFactory.namedNode(explicitType));
361
+ }
362
+ if ("@language" in valueObject && valueObject["@language"] != null) {
363
+ return DataFactory.literal(lexical, String(valueObject["@language"]).toLowerCase());
364
+ }
365
+ if (typeof raw === "boolean") {
366
+ return DataFactory.literal(lexical, DataFactory.namedNode(XSD_BOOLEAN));
367
+ }
368
+ if (typeof raw === "number") {
369
+ return DataFactory.literal(lexical, DataFactory.namedNode(isJsonLdDouble(raw) ? XSD_DOUBLE : XSD_INTEGER));
370
+ }
371
+ if (active.language)
372
+ return DataFactory.literal(lexical, active.language);
373
+ return DataFactory.literal(lexical);
374
+ }
375
+ buildList(items, def, active, graph) {
376
+ // Strip the list container so list members aren't re-wrapped as lists.
377
+ const itemDef = def?.container ? { ...def, container: undefined } : def;
378
+ const objects = items
379
+ .map((item) => this.valueToObject(item, itemDef, active, graph))
380
+ .filter((object) => object !== null);
381
+ if (objects.length === 0)
382
+ return DataFactory.namedNode(RDF_NIL);
383
+ let rest = DataFactory.namedNode(RDF_NIL);
384
+ for (let i = objects.length - 1; i >= 0; i--) {
385
+ const node = this.fresh();
386
+ this.emit(node, DataFactory.namedNode(RDF_FIRST), objects[i], graph);
387
+ this.emit(node, DataFactory.namedNode(RDF_REST), rest, graph);
388
+ rest = node;
389
+ }
390
+ return rest;
391
+ }
392
+ }
393
+ /**
394
+ * Whether a JSON number maps to `xsd:double` rather than `xsd:integer`. Matches
395
+ * conformant processors: a number is a double when it has a fractional part or
396
+ * its magnitude is `>= 1e21` (the point past which decimal integer notation is
397
+ * no longer used); otherwise it is an integer.
398
+ */
399
+ function isJsonLdDouble(value) {
400
+ return !Number.isInteger(value) || Math.abs(value) >= 1e21;
401
+ }
402
+ function numberToLexical(value, datatype) {
403
+ // xsd:double/float canonical forms for the non-finite values; reachable only
404
+ // via pre-parsed object input since JSON itself has no NaN/Infinity.
405
+ if (Number.isNaN(value))
406
+ return "NaN";
407
+ if (value === Infinity)
408
+ return "INF";
409
+ if (value === -Infinity)
410
+ return "-INF";
411
+ // Canonical xsd:double lexical form — a mantissa with a decimal point and no
412
+ // trailing zeros, an uppercase "E", and a signed exponent (100 → "1.0E2",
413
+ // 1e-7 → "1.0E-7"). Used when the datatype is xsd:double, the value has a
414
+ // fractional part, or (when not explicitly typed xsd:integer) its magnitude is
415
+ // >= 1e21. An explicit xsd:integer is kept in integer form so it never lands
416
+ // outside that datatype's lexical space.
417
+ if (datatype === XSD_DOUBLE ||
418
+ !Number.isInteger(value) ||
419
+ (datatype !== XSD_INTEGER && Math.abs(value) >= 1e21)) {
420
+ return value.toExponential(15).replace(/(\d)0*e\+?/, "$1E");
421
+ }
422
+ // Canonical xsd:integer form. `toFixed(0)` renders magnitudes >= 1e21 in
423
+ // exponential notation (invalid for xsd:integer), so fall back to BigInt for
424
+ // those — only reachable when a value is explicitly typed xsd:integer.
425
+ return Math.abs(value) < 1e21 ? value.toFixed(0) : BigInt(value).toString();
426
+ }
427
+ /**
428
+ * Parse a JSON-LD document (string or already-parsed value) into quads.
429
+ *
430
+ * Supports the subset documented in the package README: inline contexts only —
431
+ * no remote (URL) contexts.
432
+ */
433
+ export async function parseJsonLd(input, options) {
434
+ let document;
435
+ try {
436
+ document =
437
+ typeof input === "string" ? JSON.parse(input) : input;
438
+ }
439
+ catch (error) {
440
+ throw new JsonLdError(`invalid JSON: ${error instanceof Error ? error.message : String(error)}`);
441
+ }
442
+ const active = { terms: new Map(), base: options?.base };
443
+ const emitter = new RdfEmitter();
444
+ emitter.toRdf(document, active);
445
+ return emitter.quads;
446
+ }
447
+ // --- Serialization from RDF -----------------------------------------------
448
+ function termId(term) {
449
+ return term.termType === "BlankNode" ? `_:${term.value}` : term.value;
450
+ }
451
+ function literalToValueObject(literal) {
452
+ const datatype = literal.datatype.value;
453
+ if (datatype === RDF_LANGSTRING) {
454
+ return { "@value": literal.value, "@language": literal.language };
455
+ }
456
+ if (datatype === XSD_STRING) {
457
+ return { "@value": literal.value };
458
+ }
459
+ return { "@value": literal.value, "@type": datatype };
460
+ }
461
+ function objectToValue(object) {
462
+ switch (object.termType) {
463
+ case "NamedNode":
464
+ return { "@id": object.value };
465
+ case "BlankNode":
466
+ return { "@id": `_:${object.value}` };
467
+ case "Literal":
468
+ return literalToValueObject(object);
469
+ default:
470
+ return { "@id": object.value };
471
+ }
472
+ }
473
+ function pushValue(node, key, value) {
474
+ const existing = node[key];
475
+ if (Array.isArray(existing))
476
+ existing.push(value);
477
+ else
478
+ node[key] = [value];
479
+ }
480
+ function isBlankId(value) {
481
+ return typeof value === "string" && value.startsWith("_:");
482
+ }
483
+ /**
484
+ * A node that is a well-formed list cell: exactly one `rdf:first` and one
485
+ * `rdf:rest`, and at most a `@type` of `rdf:List`.
486
+ */
487
+ function isListNode(node) {
488
+ const first = node[RDF_FIRST];
489
+ const rest = node[RDF_REST];
490
+ if (!Array.isArray(first) || first.length !== 1)
491
+ return false;
492
+ if (!Array.isArray(rest) || rest.length !== 1)
493
+ return false;
494
+ for (const key of Object.keys(node)) {
495
+ if (key === "@id" || key === RDF_FIRST || key === RDF_REST)
496
+ continue;
497
+ if (key === "@type") {
498
+ const type = node["@type"];
499
+ if (Array.isArray(type) && type.length === 1 && type[0] === RDF_LIST) {
500
+ continue;
501
+ }
502
+ }
503
+ return false;
504
+ }
505
+ return true;
506
+ }
507
+ /**
508
+ * Collapse well-formed `rdf:first`/`rdf:rest`/`rdf:nil` chains in a graph back
509
+ * into JSON-LD `@list` value objects (the fromRDF list-conversion step), so
510
+ * lists round-trip through their `@list` abstraction rather than as a raw cell
511
+ * chain. An empty list is `rdf:nil`, which — per the JSON-LD data model — is
512
+ * indistinguishable from a property whose value is literally `rdf:nil`, so it is
513
+ * left as a node reference.
514
+ */
515
+ function convertLists(nodes) {
516
+ // Record, for every blank-node object reference, the single place it is used
517
+ // (`false` once referenced more than once), plus every use of `rdf:nil`.
518
+ const referencedOnce = new Map();
519
+ const nilUsages = [];
520
+ for (const node of nodes.values()) {
521
+ for (const [property, values] of Object.entries(node)) {
522
+ if (property === "@id" || !Array.isArray(values))
523
+ continue;
524
+ for (const value of values) {
525
+ if (!isObject(value))
526
+ continue;
527
+ const ref = value["@id"];
528
+ if (ref === RDF_NIL) {
529
+ nilUsages.push({ node, property, value });
530
+ }
531
+ else if (isBlankId(ref)) {
532
+ referencedOnce.set(ref, referencedOnce.has(ref) ? false : { node, property, value });
533
+ }
534
+ }
535
+ }
536
+ }
537
+ // Walk each `rdf:nil` terminator back up the `rdf:rest` chain, gathering a
538
+ // list whose cells are each referenced exactly once.
539
+ for (const nilUsage of nilUsages) {
540
+ let { node, property, value: head } = nilUsage;
541
+ const list = [];
542
+ const listNodes = [];
543
+ while (property === RDF_REST) {
544
+ const id = node["@id"];
545
+ if (!isBlankId(id))
546
+ break;
547
+ const usage = referencedOnce.get(id);
548
+ if (!usage || !isListNode(node))
549
+ break;
550
+ list.push(node[RDF_FIRST][0]);
551
+ listNodes.push(id);
552
+ ({ node, property, value: head } = usage);
553
+ }
554
+ if (listNodes.length === 0)
555
+ continue;
556
+ // `head` is the reference that points at the list head; rewrite it in place.
557
+ delete head["@id"];
558
+ list.reverse();
559
+ head["@list"] = list;
560
+ for (const id of listNodes)
561
+ nodes.delete(id);
562
+ }
563
+ }
564
+ /**
565
+ * Serialize quads into JSON-LD in **expanded / flattened** form (node objects,
566
+ * no `@context`). Lists are re-emitted as `@list`. This form round-trips
567
+ * through {@link parseJsonLd} at the RDF (quad) level; note an empty list and a
568
+ * literal `rdf:nil` reference share one representation (see {@link convertLists}).
569
+ */
570
+ function quadsToJsonLd(quads) {
571
+ const graphs = new Map();
572
+ const order = [];
573
+ for (const quad of quads) {
574
+ const graphKey = quad.graph.termType === "DefaultGraph" ? "" : termId(quad.graph);
575
+ let bucket = graphs.get(graphKey);
576
+ if (!bucket) {
577
+ bucket = { nodes: new Map() };
578
+ graphs.set(graphKey, bucket);
579
+ order.push(graphKey);
580
+ }
581
+ const subjectKey = termId(quad.subject);
582
+ let node = bucket.nodes.get(subjectKey);
583
+ if (!node) {
584
+ node = { "@id": subjectKey };
585
+ bucket.nodes.set(subjectKey, node);
586
+ }
587
+ if (quad.predicate.value === RDF_TYPE &&
588
+ quad.object.termType === "NamedNode") {
589
+ pushValue(node, "@type", quad.object.value);
590
+ }
591
+ else {
592
+ pushValue(node, quad.predicate.value, objectToValue(quad.object));
593
+ }
594
+ }
595
+ for (const bucket of graphs.values())
596
+ convertLists(bucket.nodes);
597
+ const output = [];
598
+ const defaultBucket = graphs.get("");
599
+ if (defaultBucket) {
600
+ for (const node of defaultBucket.nodes.values())
601
+ output.push(node);
602
+ }
603
+ for (const graphKey of order) {
604
+ if (graphKey === "")
605
+ continue;
606
+ const bucket = graphs.get(graphKey);
607
+ output.push({
608
+ "@id": graphKey,
609
+ "@graph": [...bucket.nodes.values()],
610
+ });
611
+ }
612
+ return output;
613
+ }
614
+ /**
615
+ * Serialize quads into a JSON-LD document string (expanded / flattened form).
616
+ */
617
+ export async function writeJsonLd(quads, options) {
618
+ return JSON.stringify(quadsToJsonLd(quads), null, options?.space ?? 2);
619
+ }
620
+ //# sourceMappingURL=jsonld.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonld.js","sourceRoot":"","sources":["../src/jsonld.ts"],"names":[],"mappings":"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"}