|
|
|
@ -248,7 +248,8 @@ export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer< |
|
|
|
|
dom.create.property( |
|
|
|
|
"id", |
|
|
|
|
dom.create.namedTypeReference("IRI"), |
|
|
|
|
dom.DeclarationFlags.Optional |
|
|
|
|
// Root interfaces should have mandatory id
|
|
|
|
|
dom.DeclarationFlags.None |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
@ -308,7 +309,6 @@ export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer< |
|
|
|
|
idSeen.add(idx); |
|
|
|
|
// normalize id type to IRI
|
|
|
|
|
m.type = dom.create.namedTypeReference("IRI"); |
|
|
|
|
m.flags = dom.DeclarationFlags.Optional; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
@ -451,7 +451,7 @@ export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer< |
|
|
|
|
dom.create.property( |
|
|
|
|
"id", |
|
|
|
|
dom.create.namedTypeReference("IRI"), |
|
|
|
|
dom.DeclarationFlags.Optional |
|
|
|
|
dom.DeclarationFlags.None |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
@ -470,7 +470,7 @@ export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer< |
|
|
|
|
dom.create.property( |
|
|
|
|
"id", |
|
|
|
|
dom.create.namedTypeReference("IRI"), |
|
|
|
|
dom.DeclarationFlags.Optional |
|
|
|
|
dom.DeclarationFlags.None |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
@ -493,6 +493,45 @@ export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer< |
|
|
|
|
} as dom.Type; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
// Singular
|
|
|
|
|
// If anonymous object or union of object-like types, ensure id: IRI is present (mandatory)
|
|
|
|
|
if (objLike) { |
|
|
|
|
if ((valueType as dom.ObjectType).kind === "object") { |
|
|
|
|
const members = (valueType as unknown as { |
|
|
|
|
members?: dom.PropertyDeclaration[]; |
|
|
|
|
}).members; |
|
|
|
|
const hasId = (members || []).some((m) => m.name === "id"); |
|
|
|
|
if (!hasId && members) { |
|
|
|
|
members.unshift( |
|
|
|
|
dom.create.property( |
|
|
|
|
"id", |
|
|
|
|
dom.create.namedTypeReference("IRI"), |
|
|
|
|
dom.DeclarationFlags.None, |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else if (isUnion && unionAllObjLike) { |
|
|
|
|
(valueType as dom.UnionType).members = ( |
|
|
|
|
valueType as dom.UnionType |
|
|
|
|
).members.map((m) => { |
|
|
|
|
if ((m as dom.ObjectType).kind === "object") { |
|
|
|
|
const mems = (m as unknown as { members?: dom.PropertyDeclaration[] }) |
|
|
|
|
.members; |
|
|
|
|
const hasId = (mems || []).some((mm) => mm.name === "id"); |
|
|
|
|
if (!hasId && mems) { |
|
|
|
|
mems.unshift( |
|
|
|
|
dom.create.property( |
|
|
|
|
"id", |
|
|
|
|
dom.create.namedTypeReference("IRI"), |
|
|
|
|
dom.DeclarationFlags.None, |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return m; |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
// Singular: always the interface/object type itself (never Id union)
|
|
|
|
|
if ( |
|
|
|
|
(valueType as dom.InterfaceDeclaration).kind === "interface" && |
|
|
|
|