mandatory id in nested/anonymous objects

main
Laurin Weger 3 weeks ago
parent 42a6476fb8
commit 4cea4838d1
No known key found for this signature in database
GPG Key ID: 9B372BB0B792770F
  1. 15
      packages/schema-converter-shex/src/typing/ShexJTypingTransformerCompact.ts

@ -497,16 +497,18 @@ export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer<
// If anonymous object or union of object-like types, ensure id: IRI is present (mandatory) // If anonymous object or union of object-like types, ensure id: IRI is present (mandatory)
if (objLike) { if (objLike) {
if ((valueType as dom.ObjectType).kind === "object") { if ((valueType as dom.ObjectType).kind === "object") {
const members = (valueType as unknown as { const members = (
valueType as unknown as {
members?: dom.PropertyDeclaration[]; members?: dom.PropertyDeclaration[];
}).members; }
).members;
const hasId = (members || []).some((m) => m.name === "id"); const hasId = (members || []).some((m) => m.name === "id");
if (!hasId && members) { if (!hasId && members) {
members.unshift( members.unshift(
dom.create.property( dom.create.property(
"id", "id",
dom.create.namedTypeReference("IRI"), dom.create.namedTypeReference("IRI"),
dom.DeclarationFlags.None, dom.DeclarationFlags.None
) )
); );
} }
@ -516,15 +518,16 @@ export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer<
valueType as dom.UnionType valueType as dom.UnionType
).members.map((m) => { ).members.map((m) => {
if ((m as dom.ObjectType).kind === "object") { if ((m as dom.ObjectType).kind === "object") {
const mems = (m as unknown as { members?: dom.PropertyDeclaration[] }) const mems = (
.members; m as unknown as { members?: dom.PropertyDeclaration[] }
).members;
const hasId = (mems || []).some((mm) => mm.name === "id"); const hasId = (mems || []).some((mm) => mm.name === "id");
if (!hasId && mems) { if (!hasId && mems) {
mems.unshift( mems.unshift(
dom.create.property( dom.create.property(
"id", "id",
dom.create.namedTypeReference("IRI"), dom.create.namedTypeReference("IRI"),
dom.DeclarationFlags.None, dom.DeclarationFlags.None
) )
); );
} }

Loading…
Cancel
Save