ente/thirdparty/face-api/env/index.ts
2021-11-17 16:41:45 +05:30

70 lines
1.8 KiB
TypeScript

import { createBrowserEnv } from './createBrowserEnv';
import { createFileSystem } from './createFileSystem';
import { createWorkerEnv } from './createWorkerEnv';
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
}
function isWorker() {
return typeof importScripts === 'function'
}
function initialize() {
// check for isBrowser() first to prevent electron renderer process
// to be initialized with wrong environment due to isNodejs() returning true
if (isWorker()) {
setEnv(createWorkerEnv())
} else if (isBrowser()) {
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'