3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-06-08 08:05:03 +00:00
zeppelin/backend/src/utils/validateNoObjectAliases.ts
2023-05-08 22:58:51 +03:00

25 lines
627 B
TypeScript

const scalarTypes = ["string", "number", "boolean", "bigint"];
export class ObjectAliasError extends Error {}
/**
* Removes object aliases/anchors from a loaded YAML object
*/
export function validateNoObjectAliases<T extends object>(obj: T, seen?: WeakSet<any>): void {
if (!seen) {
seen = new WeakSet();
}
for (const [, value] of Object.entries(obj)) {
if (value == null || scalarTypes.includes(typeof value)) {
continue;
}
if (seen.has(value)) {
throw new ObjectAliasError("Object aliases are not allowed");
}
validateNoObjectAliases(value, seen);
seen.add(value);
}
}