UNPKG

mylingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

51 lines 2.04 kB
import { createEffect } from "@lincode/reactivity"; import { forceGet, splitFileName } from "@lincode/utils"; import dirPath from "../../../api/path/dirPath"; import isRelativePath from "../../../api/path/isRelativePath"; import joinPaths from "../../../api/path/joinPaths"; import { getFileCurrent } from "../../../states/useFileCurrent"; import { getFiles } from "../../../states/useFiles"; import setURLModifier from "../../utils/loaders/setURLModifier"; const objectURLExtensionMap = new Map(); const fileObjectURLMap = new Map(); export const objectURLFileMap = new Map(); export const getExtensionIncludingObjectURL = (src) => objectURLExtensionMap.get(src) ?? splitFileName(src)[1]?.toLowerCase(); export const createObjectURL = (file, extension = splitFileName(file.webkitRelativePath)[1]?.toLowerCase()) => forceGet(fileObjectURLMap, file, () => { const url = URL.createObjectURL(file); extension && objectURLExtensionMap.set(url, extension); objectURLFileMap.set(url, file); return url; }); const pathFileMap = new Map(); createEffect(() => { const files = getFiles(); if (!files) return; for (const file of files) pathFileMap.set(file.webkitRelativePath, file); return () => { for (const objecURL of fileObjectURLMap.values()) URL.revokeObjectURL(objecURL); pathFileMap.clear(); objectURLExtensionMap.clear(); fileObjectURLMap.clear(); objectURLFileMap.clear(); }; }, [getFiles]); createEffect(() => { const urlCurrent = getFileCurrent()?.webkitRelativePath; if (!urlCurrent) return; setURLModifier((url) => { if (isRelativePath(url)) { const file = pathFileMap.get(joinPaths(dirPath(urlCurrent), url)); if (file) return createObjectURL(file); } return url; }); return () => { setURLModifier(undefined); }; }, [getFileCurrent]); //# sourceMappingURL=objectURL.js.map