@socketsupply/socket
Version:
A Cross-Platform, Native Runtime for Desktop and Mobile Apps — Create apps using HTML, CSS, and JavaScript. Written from the ground up to be small and maintainable.
47 lines (38 loc) • 930 B
JavaScript
import Promise from './promise.js'
/**
* Symbolic global registry
* @ignore
*/
export class GlobalsRegistry {
get global () {
return globalThis ?? this
}
symbol (name) {
return Symbol.for(`socket.runtime.global.${name}`)
}
register (name, value) {
this.global[this.symbol(name)] = value
return value
}
get (name) {
return this.global[this.symbol(name)] ?? null
}
}
const registry = (
globalThis.top?.__globals ??
globalThis.__globals ??
new GlobalsRegistry()
)
const RuntimeReadyPromiseResolvers = Promise.withResolvers()
registry.register('RuntimeReadyPromiseResolvers', RuntimeReadyPromiseResolvers)
registry.register('RuntimeReadyPromise', RuntimeReadyPromiseResolvers.promise)
/**
* Gets a runtime global value by name.
* @ignore
* @param {string} name
* @return {any|null}
*/
export function get (name) {
return registry.get(name) ?? null
}
export default registry