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. 17
      packages/schema-converter-shex/src/typing/ShexJTypingTransformerCompact.ts
  2. 32
      packages/schema-converter-shex/test/testData/singleAnonymous.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 = (
members?: dom.PropertyDeclaration[]; valueType as unknown as {
}).members; members?: dom.PropertyDeclaration[];
}
).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
) )
); );
} }

@ -10,24 +10,24 @@ export const singleAnonymous: TestData = {
baseNode: "http://ex/cfg1", baseNode: "http://ex/cfg1",
successfulContext: {}, successfulContext: {},
successfulTypings: "", successfulTypings: "",
successfulCompactTypings: `export type IRI = string; successfulCompactTypings: `export type IRI = string;
export interface ConfigHolder { export interface ConfigHolder {
id: IRI; id: IRI;
/** /**
* Original IRI: http://ex/config * Original IRI: http://ex/config
*/ */
config: { config: {
id: IRI; id: IRI;
/** /**
* Original IRI: http://ex/key * Original IRI: http://ex/key
*/ */
key: any; key: any;
/** /**
* Original IRI: http://ex/val * Original IRI: http://ex/val
*/ */
val: any; val: any;
}; };
} }
`, `,
}; };

Loading…
Cancel
Save