31 lines
860 B
TypeScript
31 lines
860 B
TypeScript
/// <reference types="vite/client" />
|
|
import CanvasKitInit, { type CanvasKit } from 'canvaskit-wasm'
|
|
|
|
import { IS_BROWSER } from './constants'
|
|
|
|
let instance: CanvasKit | null = null
|
|
|
|
export interface CanvasKitOptions {
|
|
locateFile?: (file: string) => string
|
|
}
|
|
|
|
export async function getCanvasKit(options?: CanvasKitOptions): Promise<CanvasKit> {
|
|
if (instance) return instance
|
|
|
|
const defaultLocate = (file: string) => {
|
|
if (!IS_BROWSER) {
|
|
const ckPath = import.meta.resolve('canvaskit-wasm')
|
|
return decodeURIComponent(new URL(file, ckPath).pathname)
|
|
}
|
|
const base = 'env' in import.meta ? import.meta.env.BASE_URL : '/'
|
|
const prefix = base === '/' ? '' : base.replace(/\/$/, '')
|
|
return `${prefix}/${file}`
|
|
}
|
|
|
|
instance = await CanvasKitInit({
|
|
locateFile: options?.locateFile ?? defaultLocate
|
|
})
|
|
|
|
return instance
|
|
}
|