From 4cea4838d1f40967186db944ba0c9c8478d251a1 Mon Sep 17 00:00:00 2001 From: Laurin Weger Date: Thu, 11 Sep 2025 11:37:30 +0300 Subject: [PATCH] mandatory id in nested/anonymous objects --- .../typing/ShexJTypingTransformerCompact.ts | 17 ++++++---- .../test/testData/singleAnonymous.ts | 32 +++++++++---------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/packages/schema-converter-shex/src/typing/ShexJTypingTransformerCompact.ts b/packages/schema-converter-shex/src/typing/ShexJTypingTransformerCompact.ts index b3ab31b..4bd31b4 100644 --- a/packages/schema-converter-shex/src/typing/ShexJTypingTransformerCompact.ts +++ b/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 (objLike) { if ((valueType as dom.ObjectType).kind === "object") { - const members = (valueType as unknown as { - members?: dom.PropertyDeclaration[]; - }).members; + 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, + dom.DeclarationFlags.None ) ); } @@ -516,15 +518,16 @@ export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer< 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 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, + dom.DeclarationFlags.None ) ); } diff --git a/packages/schema-converter-shex/test/testData/singleAnonymous.ts b/packages/schema-converter-shex/test/testData/singleAnonymous.ts index 21a168c..a31aabb 100644 --- a/packages/schema-converter-shex/test/testData/singleAnonymous.ts +++ b/packages/schema-converter-shex/test/testData/singleAnonymous.ts @@ -10,24 +10,24 @@ export const singleAnonymous: TestData = { baseNode: "http://ex/cfg1", successfulContext: {}, successfulTypings: "", - successfulCompactTypings: `export type IRI = string; + successfulCompactTypings: `export type IRI = string; export interface ConfigHolder { - id: IRI; - /** - * Original IRI: http://ex/config - */ - config: { - id: IRI; - /** - * Original IRI: http://ex/key - */ - key: any; - /** - * Original IRI: http://ex/val - */ - val: any; - }; + id: IRI; + /** + * Original IRI: http://ex/config + */ + config: { + id: IRI; + /** + * Original IRI: http://ex/key + */ + key: any; + /** + * Original IRI: http://ex/val + */ + val: any; + }; } `, };