@twin.org/data-json-ld 0.0.3-next.9 → 0.9.0-next.1

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 (151) hide show
  1. package/README.md +1 -1
  2. package/dist/es/helpers/jsonLdAliasKey.js +4 -0
  3. package/dist/es/helpers/jsonLdAliasKey.js.map +1 -0
  4. package/dist/es/helpers/jsonLdExistingProperty.js +4 -0
  5. package/dist/es/helpers/jsonLdExistingProperty.js.map +1 -0
  6. package/dist/es/helpers/jsonLdExistingPropertyEither.js +2 -0
  7. package/dist/es/helpers/jsonLdExistingPropertyEither.js.map +1 -0
  8. package/dist/es/helpers/jsonLdKeys.js +4 -0
  9. package/dist/es/helpers/jsonLdKeys.js.map +1 -0
  10. package/dist/es/helpers/jsonLdObjectWithAliases.js +2 -0
  11. package/dist/es/helpers/jsonLdObjectWithAliases.js.map +1 -0
  12. package/dist/es/helpers/jsonLdObjectWithAtId.js +2 -0
  13. package/dist/es/helpers/jsonLdObjectWithAtId.js.map +1 -0
  14. package/dist/es/helpers/jsonLdObjectWithAtType.js +2 -0
  15. package/dist/es/helpers/jsonLdObjectWithAtType.js.map +1 -0
  16. package/dist/es/helpers/jsonLdObjectWithContext.js +2 -0
  17. package/dist/es/helpers/jsonLdObjectWithContext.js.map +1 -0
  18. package/dist/es/helpers/jsonLdObjectWithId.js +2 -0
  19. package/dist/es/helpers/jsonLdObjectWithId.js.map +1 -0
  20. package/dist/es/helpers/jsonLdObjectWithNoAtId.js +4 -0
  21. package/dist/es/helpers/jsonLdObjectWithNoAtId.js.map +1 -0
  22. package/dist/es/helpers/jsonLdObjectWithNoAtType.js +4 -0
  23. package/dist/es/helpers/jsonLdObjectWithNoAtType.js.map +1 -0
  24. package/dist/es/helpers/jsonLdObjectWithNoContext.js +4 -0
  25. package/dist/es/helpers/jsonLdObjectWithNoContext.js.map +1 -0
  26. package/dist/es/helpers/jsonLdObjectWithNoId.js +4 -0
  27. package/dist/es/helpers/jsonLdObjectWithNoId.js.map +1 -0
  28. package/dist/es/helpers/jsonLdObjectWithNoType.js +4 -0
  29. package/dist/es/helpers/jsonLdObjectWithNoType.js.map +1 -0
  30. package/dist/es/helpers/jsonLdObjectWithOptionalAtId.js +2 -0
  31. package/dist/es/helpers/jsonLdObjectWithOptionalAtId.js.map +1 -0
  32. package/dist/es/helpers/jsonLdObjectWithOptionalAtType.js +2 -0
  33. package/dist/es/helpers/jsonLdObjectWithOptionalAtType.js.map +1 -0
  34. package/dist/es/helpers/jsonLdObjectWithOptionalContext.js +2 -0
  35. package/dist/es/helpers/jsonLdObjectWithOptionalContext.js.map +1 -0
  36. package/dist/es/helpers/jsonLdObjectWithOptionalId.js +2 -0
  37. package/dist/es/helpers/jsonLdObjectWithOptionalId.js.map +1 -0
  38. package/dist/es/helpers/jsonLdObjectWithOptionalType.js +2 -0
  39. package/dist/es/helpers/jsonLdObjectWithOptionalType.js.map +1 -0
  40. package/dist/es/helpers/jsonLdObjectWithType.js +2 -0
  41. package/dist/es/helpers/jsonLdObjectWithType.js.map +1 -0
  42. package/dist/es/helpers/jsonLdOptionalKeys.js +4 -0
  43. package/dist/es/helpers/jsonLdOptionalKeys.js.map +1 -0
  44. package/dist/es/helpers/jsonLdRequiredKeys.js +2 -0
  45. package/dist/es/helpers/jsonLdRequiredKeys.js.map +1 -0
  46. package/dist/es/helpers/jsonLdWithAliases.js +2 -0
  47. package/dist/es/helpers/jsonLdWithAliases.js.map +1 -0
  48. package/dist/es/index.js +23 -0
  49. package/dist/es/index.js.map +1 -1
  50. package/dist/es/models/IJsonLdDocument.js.map +1 -1
  51. package/dist/es/schemas/JsonLdContainerType.json +17 -7
  52. package/dist/es/schemas/JsonLdContainerTypeArray.json +129 -142
  53. package/dist/es/schemas/JsonLdContextDefinition.json +76 -18
  54. package/dist/es/schemas/JsonLdContextDefinitionElement.json +1 -0
  55. package/dist/es/schemas/JsonLdContextDefinitionRoot.json +1 -0
  56. package/dist/es/schemas/JsonLdDocument.json +3 -3
  57. package/dist/es/schemas/JsonLdExpandedTermDefinition.json +101 -89
  58. package/dist/es/schemas/JsonLdGraphObject.json +2 -2
  59. package/dist/es/schemas/JsonLdIdMap.json +1 -0
  60. package/dist/es/schemas/JsonLdIncludedBlock.json +1 -0
  61. package/dist/es/schemas/JsonLdIndexMap.json +2 -1
  62. package/dist/es/schemas/JsonLdIndexMapItem.json +1 -0
  63. package/dist/es/schemas/JsonLdJsonArray.json +1 -0
  64. package/dist/es/schemas/JsonLdJsonObject.json +2 -8
  65. package/dist/es/schemas/JsonLdJsonPrimitive.json +14 -5
  66. package/dist/es/schemas/JsonLdJsonValue.json +1 -0
  67. package/dist/es/schemas/JsonLdLanguageMap.json +1 -0
  68. package/dist/es/schemas/JsonLdListObject.json +2 -2
  69. package/dist/es/schemas/JsonLdListOrSetItem.json +1 -0
  70. package/dist/es/schemas/JsonLdNodeObject.json +12 -72
  71. package/dist/es/schemas/JsonLdNodePrimitive.json +1 -0
  72. package/dist/es/schemas/JsonLdObject.json +3 -3
  73. package/dist/es/schemas/JsonLdSetObject.json +2 -2
  74. package/dist/es/schemas/JsonLdTypeMap.json +1 -0
  75. package/dist/es/schemas/JsonLdValueObject.json +99 -87
  76. package/dist/es/utils/jsonLdHelper.js +85 -11
  77. package/dist/es/utils/jsonLdHelper.js.map +1 -1
  78. package/dist/es/utils/jsonLdProcessor.js +134 -40
  79. package/dist/es/utils/jsonLdProcessor.js.map +1 -1
  80. package/dist/types/helpers/jsonLdAliasKey.d.ts +4 -0
  81. package/dist/types/helpers/jsonLdExistingProperty.d.ts +6 -0
  82. package/dist/types/helpers/jsonLdExistingPropertyEither.d.ts +6 -0
  83. package/dist/types/helpers/jsonLdKeys.d.ts +4 -0
  84. package/dist/types/helpers/jsonLdObjectWithAliases.d.ts +7 -0
  85. package/dist/types/helpers/jsonLdObjectWithAtId.d.ts +7 -0
  86. package/dist/types/helpers/jsonLdObjectWithAtType.d.ts +7 -0
  87. package/dist/types/helpers/jsonLdObjectWithContext.d.ts +7 -0
  88. package/dist/types/helpers/jsonLdObjectWithId.d.ts +7 -0
  89. package/dist/types/helpers/jsonLdObjectWithNoAtId.d.ts +4 -0
  90. package/dist/types/helpers/jsonLdObjectWithNoAtType.d.ts +4 -0
  91. package/dist/types/helpers/jsonLdObjectWithNoContext.d.ts +5 -0
  92. package/dist/types/helpers/jsonLdObjectWithNoId.d.ts +4 -0
  93. package/dist/types/helpers/jsonLdObjectWithNoType.d.ts +4 -0
  94. package/dist/types/helpers/jsonLdObjectWithOptionalAtId.d.ts +7 -0
  95. package/dist/types/helpers/jsonLdObjectWithOptionalAtType.d.ts +7 -0
  96. package/dist/types/helpers/jsonLdObjectWithOptionalContext.d.ts +9 -0
  97. package/dist/types/helpers/jsonLdObjectWithOptionalId.d.ts +7 -0
  98. package/dist/types/helpers/jsonLdObjectWithOptionalType.d.ts +7 -0
  99. package/dist/types/helpers/jsonLdObjectWithType.d.ts +7 -0
  100. package/dist/types/helpers/jsonLdOptionalKeys.d.ts +6 -0
  101. package/dist/types/helpers/jsonLdRequiredKeys.d.ts +5 -0
  102. package/dist/types/helpers/jsonLdWithAliases.d.ts +13 -0
  103. package/dist/types/index.d.ts +23 -0
  104. package/dist/types/models/IJsonLdDocument.d.ts +0 -4
  105. package/dist/types/utils/jsonLdHelper.d.ts +31 -4
  106. package/dist/types/utils/jsonLdProcessor.d.ts +16 -13
  107. package/docs/changelog.md +381 -74
  108. package/docs/examples.md +214 -1
  109. package/docs/reference/classes/JsonLdDataTypes.md +1 -1
  110. package/docs/reference/classes/JsonLdHelper.md +130 -12
  111. package/docs/reference/classes/JsonLdProcessor.md +57 -64
  112. package/docs/reference/index.md +23 -0
  113. package/docs/reference/interfaces/IJsonLdContextDefinition.md +20 -20
  114. package/docs/reference/interfaces/IJsonLdGraphObject.md +7 -7
  115. package/docs/reference/interfaces/IJsonLdIdMap.md +1 -1
  116. package/docs/reference/interfaces/IJsonLdIndexMap.md +1 -1
  117. package/docs/reference/interfaces/IJsonLdJsonObject.md +1 -1
  118. package/docs/reference/interfaces/IJsonLdLanguageMap.md +1 -1
  119. package/docs/reference/interfaces/IJsonLdListObject.md +3 -3
  120. package/docs/reference/interfaces/IJsonLdNodeObject.md +17 -17
  121. package/docs/reference/interfaces/IJsonLdObject.md +16 -16
  122. package/docs/reference/interfaces/IJsonLdSetObject.md +3 -3
  123. package/docs/reference/interfaces/IJsonLdTypeMap.md +1 -1
  124. package/docs/reference/type-aliases/IJsonLdExpandedTermDefinition.md +7 -7
  125. package/docs/reference/type-aliases/IJsonLdValueObject.md +2 -2
  126. package/docs/reference/type-aliases/JsonLdAliasKey.md +15 -0
  127. package/docs/reference/type-aliases/JsonLdExistingProperty.md +19 -0
  128. package/docs/reference/type-aliases/JsonLdExistingPropertyEither.md +24 -0
  129. package/docs/reference/type-aliases/JsonLdKeys.md +11 -0
  130. package/docs/reference/type-aliases/JsonLdObjectWithAliases.md +16 -0
  131. package/docs/reference/type-aliases/JsonLdObjectWithAtId.md +21 -0
  132. package/docs/reference/type-aliases/JsonLdObjectWithAtType.md +21 -0
  133. package/docs/reference/type-aliases/JsonLdObjectWithContext.md +21 -0
  134. package/docs/reference/type-aliases/JsonLdObjectWithId.md +21 -0
  135. package/docs/reference/type-aliases/JsonLdObjectWithNoAtId.md +11 -0
  136. package/docs/reference/type-aliases/JsonLdObjectWithNoAtType.md +11 -0
  137. package/docs/reference/type-aliases/JsonLdObjectWithNoContext.md +12 -0
  138. package/docs/reference/type-aliases/JsonLdObjectWithNoId.md +11 -0
  139. package/docs/reference/type-aliases/JsonLdObjectWithNoType.md +11 -0
  140. package/docs/reference/type-aliases/JsonLdObjectWithOptionalAtId.md +21 -0
  141. package/docs/reference/type-aliases/JsonLdObjectWithOptionalAtType.md +21 -0
  142. package/docs/reference/type-aliases/JsonLdObjectWithOptionalContext.md +22 -0
  143. package/docs/reference/type-aliases/JsonLdObjectWithOptionalId.md +21 -0
  144. package/docs/reference/type-aliases/JsonLdObjectWithOptionalType.md +21 -0
  145. package/docs/reference/type-aliases/JsonLdObjectWithType.md +21 -0
  146. package/docs/reference/type-aliases/JsonLdOptionalKeys.md +11 -0
  147. package/docs/reference/type-aliases/JsonLdRequiredKeys.md +11 -0
  148. package/docs/reference/type-aliases/JsonLdWithAliases.md +17 -0
  149. package/docs/reference/variables/JsonLdContexts.md +3 -3
  150. package/docs/reference/variables/JsonLdTypes.md +26 -26
  151. package/package.json +10 -10
package/docs/examples.md CHANGED
@@ -1 +1,214 @@
1
- # @twin.org/data-json-ld - Examples
1
+ # Data Json Ld Examples
2
+
3
+ These examples walk through context management, document processing, validation, and property access patterns for JSON-LD documents.
4
+
5
+ ## JsonLdProcessor
6
+
7
+ ```typescript
8
+ import { JsonLdProcessor } from '@twin.org/data-json-ld';
9
+
10
+ JsonLdProcessor.setCacheLimit(900000);
11
+ console.log('Cache limit:', JsonLdProcessor.getCacheLimit());
12
+
13
+ JsonLdProcessor.setRedirects([
14
+ {
15
+ from: /^https:\/\/raw\.githubusercontent\.com\//,
16
+ to: 'https://cdn.example.org/github-content'
17
+ }
18
+ ]);
19
+
20
+ JsonLdProcessor.addRedirect(/^https:\/\/schema\.org\//, 'https://schema.org/');
21
+ console.log('Has redirects:', JsonLdProcessor.getRedirects().length > 0);
22
+
23
+ const loader = JsonLdProcessor.getDocumentLoader();
24
+ console.log('Loader type:', typeof loader);
25
+ ```
26
+
27
+ ```typescript
28
+ import { JsonLdProcessor, type IJsonLdNodeObject } from '@twin.org/data-json-ld';
29
+
30
+ const compactedDoc = {
31
+ '@context': {
32
+ ex: 'https://example.org/vocab/',
33
+ name: 'ex:name'
34
+ },
35
+ '@id': 'urn:example:person:1',
36
+ name: 'Ada'
37
+ };
38
+
39
+ const expanded = await JsonLdProcessor.expand(compactedDoc);
40
+ const compactedAgain = await JsonLdProcessor.compact(expanded[0], compactedDoc['@context']);
41
+
42
+ console.log('Compacted id:', compactedAgain['@id']);
43
+
44
+ const canonical = await JsonLdProcessor.canonize(expanded[0] as IJsonLdNodeObject);
45
+ console.log('Canonical includes id:', canonical.includes('urn:example:person:1'));
46
+ ```
47
+
48
+ ```typescript
49
+ import { JsonLdProcessor, type IJsonLdNodeObject } from '@twin.org/data-json-ld';
50
+
51
+ const contextA = 'https://example.org/context/base';
52
+ const contextB = {
53
+ ex: 'https://example.org/vocab/',
54
+ name: 'ex:name'
55
+ };
56
+
57
+ const combined = JsonLdProcessor.combineContexts(contextA, contextB);
58
+
59
+ const documentWithNestedContexts: IJsonLdNodeObject = {
60
+ '@context': contextA,
61
+ '@graph': [
62
+ {
63
+ '@context': contextB,
64
+ '@id': 'urn:example:item:1',
65
+ '@type': 'ex:Person',
66
+ 'ex:name': 'Ada'
67
+ }
68
+ ]
69
+ };
70
+
71
+ const gathered = JsonLdProcessor.gatherContexts(documentWithNestedContexts);
72
+ const filtered = JsonLdProcessor.removeContexts(gathered, [contextB]);
73
+
74
+ console.log('Combined is array:', Array.isArray(combined));
75
+ console.log('Filtered context equals contextA:', filtered === contextA);
76
+ ```
77
+
78
+ ```typescript
79
+ import { JsonLdProcessor } from '@twin.org/data-json-ld';
80
+
81
+ await JsonLdProcessor.documentCacheAdd('https://example.org/context', {
82
+ '@context': {
83
+ ex: 'https://example.org/vocab/'
84
+ }
85
+ });
86
+
87
+ await JsonLdProcessor.documentCacheRemove('https://example.org/context');
88
+ ```
89
+
90
+ ### Remote `@context` URLs: redirects and HTTP `Link` discovery
91
+
92
+ When a remote `@context` URL is a string, the default document loader resolves it in this order:
93
+
94
+ 1. **Registered redirects** — `setRedirects` / `addRedirect` run first. If a pattern matches, the request uses the replacement URL only (no `HEAD` or discovery against the original namespace URL).
95
+ 2. **GET with `Accept: application/ld+json`**. If the response is an **HTTP error** (for example **404**), the load fails and discovery does not run. If the response is **OK** but the body is **not valid JSON** (for example HTML), retry **GET** with **`Accept: application/json`**.
96
+ 3. **HTTP `Link` discovery** — only if **both** `GET`s in step 2 failed with a **JSON decode** error: `HEAD` on the current URL (or `GET` if the server returns **405** / **501** for `HEAD`), then inspect `Link` for `rel="alternate"` and `type="application/ld+json"`, resolve the target URL, and **fetch that context document once** (at most **one** discovery hop per load chain).
97
+
98
+ Use **manual redirects** for stable overrides, offline tests, or hosts that do not expose a suitable `Link` header. Rely on **discovery** when the namespace URL serves HTML but advertises a JSON-LD context via `Link`.
99
+
100
+ ```typescript
101
+ import { JsonLdProcessor } from '@twin.org/data-json-ld';
102
+
103
+ // Optional: force a namespace URL to a known context document (runs before discovery).
104
+ JsonLdProcessor.addRedirect(
105
+ /^https:\/\/example\.org\/vocab\/?$/,
106
+ 'https://example.org/context/doc.jsonld'
107
+ );
108
+ ```
109
+
110
+ ### Standards packages and `registerRedirects()`
111
+
112
+ Vocabulary packages (for example `@twin.org/standards-schema-org`) often expose `SchemaOrgDataTypes.registerRedirects()`, which forwards to `JsonLdProcessor.addRedirect` for a known namespace URL. That call is **optional** in many deployments: the default loader can reach the same JSON-LD context via **HTTP `Link` discovery** when the namespace URL returns HTML and advertises `rel="alternate"` with `type="application/ld+json"`. Prefer **explicit redirects** when you want predictable URLs without an extra `HEAD`/`GET` for discovery, **fully offline** or hermetic tests, or when the host does not send a usable `Link` header.
113
+
114
+ ## JsonLdHelper
115
+
116
+ ```typescript
117
+ import { type IValidationFailure } from '@twin.org/core';
118
+ import { ValidationMode } from '@twin.org/data-core';
119
+ import { JsonLdHelper, type IJsonLdNodeObject } from '@twin.org/data-json-ld';
120
+
121
+ const compactedDocument = {
122
+ '@context': {
123
+ ex: 'https://example.org/vocab/',
124
+ id: '@id',
125
+ type: '@type',
126
+ name: 'ex:name'
127
+ },
128
+ id: 'urn:example:person:1',
129
+ type: 'ex:Person',
130
+ name: 'Ada'
131
+ };
132
+
133
+ const failures: IValidationFailure[] = [];
134
+ await JsonLdHelper.validate(compactedDocument, failures, {
135
+ validationMode: ValidationMode.Either,
136
+ failOnMissingType: false
137
+ });
138
+
139
+ const expanded = await JsonLdHelper.expand(compactedDocument);
140
+ const hasPersonType = await JsonLdHelper.isType(expanded, ['https://example.org/vocab/Person']);
141
+ const types = await JsonLdHelper.getType(expanded);
142
+ const id = await JsonLdHelper.getId(expanded);
143
+
144
+ console.log('Failure count:', failures.length);
145
+ console.log('Has person type:', hasPersonType);
146
+ console.log('Type list includes person:', types.includes('https://example.org/vocab/Person'));
147
+ console.log('Document id:', id);
148
+
149
+ const nodeObject = JsonLdHelper.toNodeObject(compactedDocument);
150
+ const structuredObject = JsonLdHelper.toStructuredObject<{ name: string }>(
151
+ nodeObject as IJsonLdNodeObject
152
+ );
153
+
154
+ console.log('Structured name:', structuredObject.name);
155
+ ```
156
+
157
+ ```typescript
158
+ import { JsonLdHelper } from '@twin.org/data-json-ld';
159
+
160
+ const expandedDocument = [
161
+ {
162
+ '@id': 'urn:example:article:1',
163
+ 'https://schema.org/name': [
164
+ { '@value': 'Hello', '@language': 'en' },
165
+ { '@value': 'Hallo', '@language': 'de' }
166
+ ],
167
+ 'https://schema.org/wordCount': [{ '@value': 240 }]
168
+ }
169
+ ];
170
+
171
+ const title = await JsonLdHelper.getPropertyValue(
172
+ expandedDocument,
173
+ 'https://schema.org/name',
174
+ 'en'
175
+ );
176
+ const [nameValues, wordCountValues] = await JsonLdHelper.getPropertyValues(expandedDocument, [
177
+ 'https://schema.org/name',
178
+ 'https://schema.org/wordCount'
179
+ ]);
180
+
181
+ console.log('English title:', title?.[0]);
182
+ console.log('Name value count:', nameValues?.length);
183
+ console.log('Word count value:', wordCountValues?.[0]);
184
+ ```
185
+
186
+ ```typescript
187
+ import { JsonLdHelper } from '@twin.org/data-json-ld';
188
+
189
+ const node = {
190
+ '@id': 'urn:example:item:1',
191
+ name: 'Ada',
192
+ role: 'Engineer'
193
+ };
194
+
195
+ const prefixed = JsonLdHelper.prefixProperties(node, 'ex', ['name', 'role']);
196
+ const stripped = JsonLdHelper.stripPrefixProperties(prefixed, 'ex');
197
+
198
+ console.log('Prefixed name:', prefixed['ex:name']);
199
+ console.log('Stripped name:', stripped.name);
200
+ ```
201
+
202
+ ## JsonLdDataTypes
203
+
204
+ ```typescript
205
+ import { DataTypeHelper } from '@twin.org/data-core';
206
+ import { JsonLdContexts, JsonLdDataTypes, JsonLdTypes } from '@twin.org/data-json-ld';
207
+
208
+ JsonLdDataTypes.registerTypes();
209
+
210
+ const schema = await DataTypeHelper.getSchemaForType(
211
+ `${JsonLdContexts.Namespace}${JsonLdTypes.Document}`
212
+ );
213
+ console.log('Registered schema type:', schema?.type);
214
+ ```
@@ -14,7 +14,7 @@ Handle all the data types for JSON-LD.
14
14
 
15
15
  ## Methods
16
16
 
17
- ### registerTypes()
17
+ ### registerTypes() {#registertypes}
18
18
 
19
19
  > `static` **registerTypes**(): `void`
20
20
 
@@ -14,7 +14,7 @@ Class to help with JSON LD.
14
14
 
15
15
  ## Methods
16
16
 
17
- ### validate()
17
+ ### validate() {#validate}
18
18
 
19
19
  > `static` **validate**\<`T`\>(`document`, `validationFailures`, `options?`): `Promise`\<`boolean`\>
20
20
 
@@ -64,11 +64,11 @@ True if the document was valid.
64
64
 
65
65
  ***
66
66
 
67
- ### toNodeObject()
67
+ ### toNodeObject() {#tonodeobject}
68
68
 
69
69
  > `static` **toNodeObject**\<`T`\>(`object`): `T` & [`IJsonLdNodeObject`](../interfaces/IJsonLdNodeObject.md)
70
70
 
71
- Expand an object to a JSON-LD node object.
71
+ Convert an object to a JSON-LD node object.
72
72
 
73
73
  #### Type Parameters
74
74
 
@@ -82,17 +82,45 @@ Expand an object to a JSON-LD node object.
82
82
 
83
83
  `T`
84
84
 
85
- The object to expand.
85
+ The object to convert.
86
86
 
87
87
  #### Returns
88
88
 
89
89
  `T` & [`IJsonLdNodeObject`](../interfaces/IJsonLdNodeObject.md)
90
90
 
91
- The expanded JSON-LD node object.
91
+ The JSON-LD node object.
92
92
 
93
93
  ***
94
94
 
95
- ### expand()
95
+ ### toStructuredObject() {#tostructuredobject}
96
+
97
+ > `static` **toStructuredObject**\<`T`\>(`nodeObject`): `T`
98
+
99
+ Convert the JSON-LD node object to a structured object.
100
+
101
+ #### Type Parameters
102
+
103
+ ##### T
104
+
105
+ `T` = `unknown`
106
+
107
+ #### Parameters
108
+
109
+ ##### nodeObject
110
+
111
+ [`IJsonLdNodeObject`](../interfaces/IJsonLdNodeObject.md)
112
+
113
+ The JSON-LD node object to convert.
114
+
115
+ #### Returns
116
+
117
+ `T`
118
+
119
+ The structured object.
120
+
121
+ ***
122
+
123
+ ### expand() {#expand}
96
124
 
97
125
  > `static` **expand**(`document`): `Promise`\<[`IJsonLdNodeObject`](../interfaces/IJsonLdNodeObject.md)[]\>
98
126
 
@@ -114,7 +142,7 @@ The expanded JSON-LD document.
114
142
 
115
143
  ***
116
144
 
117
- ### isType()
145
+ ### isType() {#istype}
118
146
 
119
147
  > `static` **isType**(`documentOrExpanded`, `type`): `Promise`\<`boolean`\>
120
148
 
@@ -142,7 +170,7 @@ True if the document is of the specified type.
142
170
 
143
171
  ***
144
172
 
145
- ### getType()
173
+ ### getType() {#gettype}
146
174
 
147
175
  > `static` **getType**(`documentOrExpanded`): `Promise`\<`string`[]\>
148
176
 
@@ -164,9 +192,9 @@ The type(s) extracted from the document.
164
192
 
165
193
  ***
166
194
 
167
- ### getId()
195
+ ### getId() {#getid}
168
196
 
169
- > `static` **getId**(`documentOrExpanded`): `Promise`\<`string` \| `undefined`\>
197
+ > `static` **getId**(`documentOrExpanded`, `additionalIdProperties?`): `Promise`\<`string` \| `undefined`\>
170
198
 
171
199
  Get the id from the document.
172
200
 
@@ -178,6 +206,12 @@ Get the id from the document.
178
206
 
179
207
  The JSON-LD document to get the id from or already expanded document.
180
208
 
209
+ ##### additionalIdProperties?
210
+
211
+ `string`[]
212
+
213
+ Optional additional properties to check for the id, in addition to "@id" and "id".
214
+
181
215
  #### Returns
182
216
 
183
217
  `Promise`\<`string` \| `undefined`\>
@@ -186,7 +220,7 @@ The id extracted from the document.
186
220
 
187
221
  ***
188
222
 
189
- ### getPropertyValue()
223
+ ### getPropertyValue() {#getpropertyvalue}
190
224
 
191
225
  > `static` **getPropertyValue**(`documentOrExpanded`, `propertyFullName`, `language?`): `Promise`\<[`IJsonLdNodePrimitive`](../type-aliases/IJsonLdNodePrimitive.md)[] \| `undefined`\>
192
226
 
@@ -220,7 +254,7 @@ Matching property values for the input property.
220
254
 
221
255
  ***
222
256
 
223
- ### getPropertyValues()
257
+ ### getPropertyValues() {#getpropertyvalues}
224
258
 
225
259
  > `static` **getPropertyValues**(`documentOrExpanded`, `propertyFullNames`, `language?`): `Promise`\<([`IJsonLdNodePrimitive`](../type-aliases/IJsonLdNodePrimitive.md)[] \| `undefined`)[]\>
226
260
 
@@ -251,3 +285,87 @@ Optional filter values by their language property.
251
285
  `Promise`\<([`IJsonLdNodePrimitive`](../type-aliases/IJsonLdNodePrimitive.md)[] \| `undefined`)[]\>
252
286
 
253
287
  Matching property values for each input property, in the same index order.
288
+
289
+ ***
290
+
291
+ ### prefixProperties() {#prefixproperties}
292
+
293
+ > `static` **prefixProperties**\<`T`\>(`nodeObject`, `prefix`, `properties?`): [`IJsonLdNodeObject`](../interfaces/IJsonLdNodeObject.md)
294
+
295
+ Prefix all properties in the document with the provided prefix, except for JSON-LD properties.
296
+ This is useful for ensuring that all properties are fully qualified with a namespace.
297
+ For example, if the prefix is "ex" and the document has a property "name", it will be transformed to "ex:name".
298
+
299
+ #### Type Parameters
300
+
301
+ ##### T
302
+
303
+ `T` *extends* [`IJsonLdNodeObject`](../interfaces/IJsonLdNodeObject.md)
304
+
305
+ #### Parameters
306
+
307
+ ##### nodeObject
308
+
309
+ `T`
310
+
311
+ The JSON-LD node object to prefix properties on.
312
+
313
+ ##### prefix
314
+
315
+ `string`
316
+
317
+ The prefix to add to the properties.
318
+
319
+ ##### properties?
320
+
321
+ `string`[]
322
+
323
+ Optional list of properties to prefix. If not provided, all properties except for JSON-LD properties.
324
+
325
+ #### Returns
326
+
327
+ [`IJsonLdNodeObject`](../interfaces/IJsonLdNodeObject.md)
328
+
329
+ A new JSON-LD node object with the properties prefixed.
330
+
331
+ ***
332
+
333
+ ### stripPrefixProperties() {#stripprefixproperties}
334
+
335
+ > `static` **stripPrefixProperties**\<`T`\>(`nodeObject`, `prefix`, `properties?`): [`IJsonLdNodeObject`](../interfaces/IJsonLdNodeObject.md)
336
+
337
+ Strip a prefix from properties in the document, except for JSON-LD properties.
338
+ This is useful for converting fully qualified namespaced properties back to local names.
339
+ For example, if the prefix is "ex" and the document has a property "ex:name", it will be transformed to "name".
340
+
341
+ #### Type Parameters
342
+
343
+ ##### T
344
+
345
+ `T` *extends* [`IJsonLdNodeObject`](../interfaces/IJsonLdNodeObject.md)
346
+
347
+ #### Parameters
348
+
349
+ ##### nodeObject
350
+
351
+ `T`
352
+
353
+ The JSON-LD node object to strip prefixed properties from.
354
+
355
+ ##### prefix
356
+
357
+ `string`
358
+
359
+ The prefix to remove from the properties.
360
+
361
+ ##### properties?
362
+
363
+ `string`[]
364
+
365
+ Optional list of unprefixed properties to strip. If not provided, all matching prefixed properties.
366
+
367
+ #### Returns
368
+
369
+ [`IJsonLdNodeObject`](../interfaces/IJsonLdNodeObject.md)
370
+
371
+ A new JSON-LD node object with the prefix stripped from matching properties.
@@ -14,11 +14,11 @@ JSON-LD Processor.
14
14
 
15
15
  ## Methods
16
16
 
17
- ### setDocumentLoader()
17
+ ### setDocumentLoader() {#setdocumentloader}
18
18
 
19
19
  > `static` **setDocumentLoader**(`documentLoader`): `void`
20
20
 
21
- The document loader to use.
21
+ Set the document loader used for retrieving JSON-LD documents.
22
22
 
23
23
  #### Parameters
24
24
 
@@ -34,31 +34,21 @@ The document loader to use.
34
34
 
35
35
  ***
36
36
 
37
- ### getDocumentLoader()
37
+ ### getDocumentLoader() {#getdocumentloader}
38
38
 
39
39
  > `static` **getDocumentLoader**(): (`url`) => `Promise`\<`RemoteDocument`\>
40
40
 
41
- The document loader to use for retrieving JSON-LD documents.
41
+ Get the document loader used for retrieving JSON-LD documents.
42
42
 
43
43
  #### Returns
44
44
 
45
- The document loader.
46
-
47
- > (`url`): `Promise`\<`RemoteDocument`\>
48
-
49
- ##### Parameters
45
+ The active document loader function.
50
46
 
51
- ###### url
52
-
53
- `string`
54
-
55
- ##### Returns
56
-
57
- `Promise`\<`RemoteDocument`\>
47
+ (`url`) => `Promise`\<`RemoteDocument`\>
58
48
 
59
49
  ***
60
50
 
61
- ### setCacheLimit()
51
+ ### setCacheLimit() {#setcachelimit}
62
52
 
63
53
  > `static` **setCacheLimit**(`cacheLimitMs`): `void`
64
54
 
@@ -78,7 +68,7 @@ The cache limit in milliseconds.
78
68
 
79
69
  ***
80
70
 
81
- ### getCacheLimit()
71
+ ### getCacheLimit() {#getcachelimit}
82
72
 
83
73
  > `static` **getCacheLimit**(): `number`
84
74
 
@@ -88,15 +78,16 @@ Get the cache limit for documents.
88
78
 
89
79
  `number`
90
80
 
91
- The document loader.
81
+ The cache limit in milliseconds.
92
82
 
93
83
  ***
94
84
 
95
- ### setRedirects()
85
+ ### setRedirects() {#setredirects}
96
86
 
97
87
  > `static` **setRedirects**(`redirects`): `void`
98
88
 
99
- Set the global redirects for JSON-LD, use addRedirect for default handling.
89
+ Replace the global redirect list (use [JsonLdProcessor.addRedirect](#addredirect) to append without replacing).
90
+ Redirects run before any HTTP GET or `Link` discovery; use them for stable overrides, tests, or hosts that do not expose a suitable `Link` header.
100
91
 
101
92
  #### Parameters
102
93
 
@@ -112,7 +103,7 @@ The redirects to use.
112
103
 
113
104
  ***
114
105
 
115
- ### getRedirects()
106
+ ### getRedirects() {#getredirects}
116
107
 
117
108
  > `static` **getRedirects**(): `object`[]
118
109
 
@@ -126,7 +117,35 @@ The registered redirects.
126
117
 
127
118
  ***
128
119
 
129
- ### compact()
120
+ ### addRedirect() {#addredirect}
121
+
122
+ > `static` **addRedirect**(`from`, `to`): `void`
123
+
124
+ Append a redirect rule (ignored if the same `RegExp.source` is already registered).
125
+ Optional when the vocabulary URL supports HTTP `Link` discovery (`rel` includes `alternate`, `type` is `application/ld+json`) via the default document loader.
126
+ Standards packages often expose `registerRedirects()` helpers that call this method; those are optional for the same reason.
127
+
128
+ #### Parameters
129
+
130
+ ##### from
131
+
132
+ `RegExp`
133
+
134
+ The URL to redirect from.
135
+
136
+ ##### to
137
+
138
+ `string`
139
+
140
+ The URL to redirect to.
141
+
142
+ #### Returns
143
+
144
+ `void`
145
+
146
+ ***
147
+
148
+ ### compact() {#compact}
130
149
 
131
150
  > `static` **compact**\<`T`\>(`document`, `context?`, `options?`): `Promise`\<`T`\>
132
151
 
@@ -170,7 +189,7 @@ The compacted JSON-LD document.
170
189
 
171
190
  ***
172
191
 
173
- ### expand()
192
+ ### expand() {#expand}
174
193
 
175
194
  > `static` **expand**\<`T`\>(`compacted`): `Promise`\<[`IJsonLdNodeObject`](../interfaces/IJsonLdNodeObject.md)[]\>
176
195
 
@@ -198,7 +217,7 @@ The expanded JSON-LD document.
198
217
 
199
218
  ***
200
219
 
201
- ### canonize()
220
+ ### canonize() {#canonize}
202
221
 
203
222
  > `static` **canonize**\<`T`\>(`document`, `options?`): `Promise`\<`string`\>
204
223
 
@@ -236,33 +255,7 @@ The canonized document.
236
255
 
237
256
  ***
238
257
 
239
- ### addRedirect()
240
-
241
- > `static` **addRedirect**(`from`, `to`): `void`
242
-
243
- Add a redirect to use during document resolution.
244
-
245
- #### Parameters
246
-
247
- ##### from
248
-
249
- `RegExp`
250
-
251
- The URL to redirect from.
252
-
253
- ##### to
254
-
255
- `string`
256
-
257
- The URL to redirect to.
258
-
259
- #### Returns
260
-
261
- `void`
262
-
263
- ***
264
-
265
- ### combineContexts()
258
+ ### combineContexts() {#combinecontexts}
266
259
 
267
260
  > `static` **combineContexts**(`context1`, `context2`): [`IJsonLdContextDefinitionRoot`](../type-aliases/IJsonLdContextDefinitionRoot.md) \| `undefined`
268
261
 
@@ -272,15 +265,15 @@ Combine contexts.
272
265
 
273
266
  ##### context1
274
267
 
275
- The first JSON-LD context to combine.
268
+ [`IJsonLdContextDefinitionRoot`](../type-aliases/IJsonLdContextDefinitionRoot.md) \| `undefined`
276
269
 
277
- [`IJsonLdContextDefinitionRoot`](../type-aliases/IJsonLdContextDefinitionRoot.md) | `undefined`
270
+ The first JSON-LD context to combine.
278
271
 
279
272
  ##### context2
280
273
 
281
- The second JSON-LD context to combine.
274
+ [`IJsonLdContextDefinitionRoot`](../type-aliases/IJsonLdContextDefinitionRoot.md) \| `undefined`
282
275
 
283
- [`IJsonLdContextDefinitionRoot`](../type-aliases/IJsonLdContextDefinitionRoot.md) | `undefined`
276
+ The second JSON-LD context to combine.
284
277
 
285
278
  #### Returns
286
279
 
@@ -290,7 +283,7 @@ The combined context.
290
283
 
291
284
  ***
292
285
 
293
- ### gatherContexts()
286
+ ### gatherContexts() {#gathercontexts}
294
287
 
295
288
  > `static` **gatherContexts**\<`T`\>(`element`, `initial?`): [`IJsonLdContextDefinitionRoot`](../type-aliases/IJsonLdContextDefinitionRoot.md) \| `undefined`
296
289
 
@@ -324,7 +317,7 @@ The combined contexts.
324
317
 
325
318
  ***
326
319
 
327
- ### removeContexts()
320
+ ### removeContexts() {#removecontexts}
328
321
 
329
322
  > `static` **removeContexts**(`context`, `match?`): [`IJsonLdContextDefinitionRoot`](../type-aliases/IJsonLdContextDefinitionRoot.md) \| `undefined`
330
323
 
@@ -334,9 +327,9 @@ Remove all the contexts that match the pattern.
334
327
 
335
328
  ##### context
336
329
 
337
- The context to remove the entries from.
330
+ [`IJsonLdContextDefinitionRoot`](../type-aliases/IJsonLdContextDefinitionRoot.md) \| `undefined`
338
331
 
339
- [`IJsonLdContextDefinitionRoot`](../type-aliases/IJsonLdContextDefinitionRoot.md) | `undefined`
332
+ The context to remove the entries from.
340
333
 
341
334
  ##### match?
342
335
 
@@ -352,7 +345,7 @@ The updated contexts.
352
345
 
353
346
  ***
354
347
 
355
- ### documentCacheAdd()
348
+ ### documentCacheAdd() {#documentcacheadd}
356
349
 
357
350
  > `static` **documentCacheAdd**(`url`, `ldContext`): `Promise`\<`void`\>
358
351
 
@@ -376,11 +369,11 @@ The context to add.
376
369
 
377
370
  `Promise`\<`void`\>
378
371
 
379
- Nothing.
372
+ A promise that resolves when the entry has been stored in the cache.
380
373
 
381
374
  ***
382
375
 
383
- ### documentCacheRemove()
376
+ ### documentCacheRemove() {#documentcacheremove}
384
377
 
385
378
  > `static` **documentCacheRemove**(`url`): `Promise`\<`void`\>
386
379
 
@@ -398,4 +391,4 @@ The url the ld context is for.
398
391
 
399
392
  `Promise`\<`void`\>
400
393
 
401
- Nothing.
394
+ A promise that resolves when the entry has been removed from the cache.