update shex typing transformer to use @id, @type

feat/orm-diffs
Laurin Weger 10 hours ago
parent 624d0c5a6d
commit d78b7dabd5
No known key found for this signature in database
GPG Key ID: 9B372BB0B792770F
  1. 18
      sdk/js/shex-orm/src/schema-converter/transformers/ShexJTypingTransformer.ts
  2. 2
      sdk/js/shex-orm/src/types.ts

@ -225,7 +225,7 @@ function dedupeCompactProperties(
return merged;
}
// Helpers to add id: IRI to anonymous object(-union) types
// Helpers to add @id: IRI to anonymous object(-union) types
function ensureIdOnMembers(members?: any[]): void {
if (!members) return;
const props = (members.filter?.((m: any) => m?.kind === "property") ||
@ -233,9 +233,9 @@ function ensureIdOnMembers(members?: any[]): void {
if (!props.some((m) => m.name === "id")) {
members.unshift(
dom.create.property(
"id",
"@id",
dom.create.namedTypeReference("IRI"),
dom.DeclarationFlags.None
dom.DeclarationFlags.ReadOnly
)
);
}
@ -322,15 +322,15 @@ export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer<
shapeInterface.shapeId = shapeDecl.id;
if (
!shapeInterface.members.find(
(m) => m.kind === "property" && m.name === "id"
(m) => m.kind === "property" && m.name === "@id"
)
) {
shapeInterface.members.unshift(
dom.create.property(
"id",
"@id",
dom.create.namedTypeReference("IRI"),
// Root interfaces should have mandatory id
dom.DeclarationFlags.None
// Root interfaces should have mandatory @id
dom.DeclarationFlags.ReadOnly
)
);
}
@ -380,7 +380,7 @@ export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer<
const merged = [
...extInt.members.filter(
(m) =>
!(m.kind === "property" && m.name === "id")
!(m.kind === "property" && m.name === "@id")
),
...newInterface.members,
].filter(
@ -394,7 +394,7 @@ export const ShexJTypingTransformerCompact = ShexJTraverser.createTransformer<
// Final pass: ensure only a single id property
const idSeen = new Set<number>();
newInterface.members = newInterface.members.filter((m, idx) => {
if (m.kind !== "property" || m.name !== "id") return true;
if (m.kind !== "property" || m.name !== "@id") return true;
if (idSeen.size === 0) {
idSeen.add(idx);
// normalize id type to IRI

@ -4,7 +4,7 @@ export interface ShapeType<T extends BaseType> {
}
export interface BaseType extends Record<string, any> {
id: string;
"@id": string;
}
export type Schema = {

Loading…
Cancel
Save