Skip to content

Instantly share code, notes, and snippets.

@Lcfvs
Created July 19, 2021 11:26
Show Gist options
  • Save Lcfvs/f81834d3f426cfb77db239f98d1cf28f to your computer and use it in GitHub Desktop.
Save Lcfvs/f81834d3f426cfb77db239f98d1cf28f to your computer and use it in GitHub Desktop.
Late dependencies
export default new Proxy(new Map(), {
get: (target, name) => {
if (!target.has(name)) {
target.set(name, [[]])
}
const entry = target.get(name)
const [resolvers, value] = entry
return entry.length === 2
? Promise.resolve(value)
: new Promise(resolve => resolvers.push(resolve))
},
set: (target, name, value) => {
if (!target.has(name)) {
target.set(name, [[]])
}
const entry = target.get(name) ?? [[]]
const [resolvers] = entry
if (entry.length === 2) {
throw new Error(`Unable to redefine dependency: ${name}`)
}
entry.push(value)
for (const resolve of resolvers) {
resolve(value)
}
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment