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 (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
)
);
}

@ -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;
};
}
`,
};

Loading…
Cancel
Save