2021-11-17 08:44:43 +00:00
|
|
|
import { createBrowserEnv } from './createBrowserEnv';
|
|
|
|
import { createFileSystem } from './createFileSystem';
|
2021-11-17 11:11:45 +00:00
|
|
|
import { createWorkerEnv } from './createWorkerEnv';
|
2021-11-17 08:44:43 +00:00
|
|
|
import { isBrowser } from './isBrowser';
|
|
|
|
import { isNodejs } from './isNodejs';
|
|
|
|
import { Environment } from './types';
|
|
|
|
|
|
|
|
let environment: Environment | null
|
|
|
|
|
|
|
|
function getEnv(): Environment {
|
|
|
|
if (!environment) {
|
|
|
|
throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()')
|
|
|
|
}
|
|
|
|
return environment
|
|
|
|
}
|
|
|
|
|
|
|
|
function setEnv(env: Environment) {
|
|
|
|
environment = env
|
|
|
|
}
|
|
|
|
|
2021-11-17 11:11:45 +00:00
|
|
|
function isWorker() {
|
|
|
|
return typeof importScripts === 'function'
|
|
|
|
}
|
|
|
|
|
2021-11-17 08:44:43 +00:00
|
|
|
function initialize() {
|
|
|
|
// check for isBrowser() first to prevent electron renderer process
|
|
|
|
// to be initialized with wrong environment due to isNodejs() returning true
|
2021-11-17 11:11:45 +00:00
|
|
|
if (isWorker()) {
|
|
|
|
setEnv(createWorkerEnv())
|
|
|
|
} else if (isBrowser()) {
|
2021-11-17 08:44:43 +00:00
|
|
|
setEnv(createBrowserEnv())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function monkeyPatch(env: Partial<Environment>) {
|
|
|
|
if (!environment) {
|
|
|
|
initialize()
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!environment) {
|
|
|
|
throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()')
|
|
|
|
}
|
|
|
|
|
|
|
|
const { Canvas = environment.Canvas, Image = environment.Image } = env
|
|
|
|
environment.Canvas = Canvas
|
|
|
|
environment.Image = Image
|
|
|
|
environment.createCanvasElement = env.createCanvasElement || (() => new Canvas())
|
|
|
|
environment.createImageElement = env.createImageElement || (() => new Image())
|
|
|
|
|
|
|
|
environment.ImageData = env.ImageData || environment.ImageData
|
|
|
|
environment.Video = env.Video || environment.Video
|
|
|
|
environment.fetch = env.fetch || environment.fetch
|
|
|
|
environment.readFile = env.readFile || environment.readFile
|
|
|
|
}
|
|
|
|
|
|
|
|
export const env = {
|
|
|
|
getEnv,
|
|
|
|
setEnv,
|
|
|
|
initialize,
|
|
|
|
createBrowserEnv,
|
|
|
|
createFileSystem,
|
|
|
|
monkeyPatch,
|
|
|
|
isBrowser,
|
|
|
|
isNodejs
|
|
|
|
}
|
|
|
|
|
|
|
|
initialize()
|
|
|
|
|
|
|
|
export * from './types'
|