UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

60 lines (42 loc) 1.26 kB
/** * * @param {Map<*, TypeEditor>} registry * @param {*} value * @returns {TypeEditor|void} */ export function findNearestRegisteredType(registry, value) { const path = []; let editor; let t = value; do { if (t === undefined || t === null) { return; } editor = registry.get(t); if (editor !== undefined) { return editor; } if (typeof t === "function" && t !== Function) { // t is a class, classes have Function prototype, this is confusing, but we want to skip going to function class in this case t = t.prototype; continue; } if (t.constructor !== undefined) { editor = registry.get(t.constructor); if (editor !== undefined) { return editor; } } const proto = Object.getPrototypeOf(t); if (proto === undefined || proto === null) { return; } const ctor = proto; t = ctor; if (path.includes(t)) { // circular dependency detected return; } path.push(t); } while (true); }