Skip to content

Commit 2ee232a

Browse files
committed
Expand values and subject references under typed scope.
1 parent 42392d5 commit 2ee232a

File tree

1 file changed

+32
-3
lines changed

1 file changed

+32
-3
lines changed

lib/expand.js

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,37 @@ api.expand = ({
152152

153153
// recursively expand object:
154154

155-
if(!insideIndex) {
155+
// First determine if any type-scoped context should be reverted; it should
156+
// only be reverted when the following are all true:
157+
// 1. `element` is not a value or subject reference
158+
// 2. `insideIndex` is false
159+
const typeScopedContext = activeCtx.previousContext ? activeCtx : null;
160+
let keys = Object.keys(element).sort();
161+
let mustRevert = !insideIndex;
162+
if(mustRevert && typeScopedContext && keys[0] !== '@context') {
163+
// check if element is a subject reference
164+
if(keys.length === 1) {
165+
const expandedProperty = _expandIri(
166+
typeScopedContext, keys[0], {vocab: true}, options);
167+
if(expandedProperty === '@id') {
168+
// subject reference found, use type-scoped context to expand it
169+
mustRevert = false;
170+
}
171+
} else if(keys.length <= 2) {
172+
// check if element is a value
173+
for(const key of keys) {
174+
const expandedProperty = _expandIri(
175+
typeScopedContext, key, {vocab: true}, options);
176+
if(expandedProperty === '@value') {
177+
// value found, use type-scoped context to expand it
178+
mustRevert = false;
179+
break;
180+
}
181+
}
182+
}
183+
}
184+
185+
if(mustRevert) {
156186
// revert type scoped context
157187
activeCtx = activeCtx.revertTypeScopedContext();
158188
}
@@ -163,8 +193,7 @@ api.expand = ({
163193
{activeCtx, localCtx: element['@context'], options});
164194
}
165195

166-
// look for scoped context on @type
167-
let keys = Object.keys(element).sort();
196+
// look for scoped contexts on `@type`
168197
for(const key of keys) {
169198
const expandedProperty = _expandIri(activeCtx, key, {vocab: true}, options);
170199
if(expandedProperty === '@type') {

0 commit comments

Comments
 (0)