| const loader = importer.ctor(this) | const loader = importer.ctor(this) | ||||
| if (!loader) return undefined | if (!loader) return undefined | ||||
| importer.ext.forEach(iext => { | importer.ext.forEach(iext => { | ||||
| const regex = new RegExp(iext.startsWith('data:') ? '^' + iext + '\\/' : '\\.' + iext + '$', 'i') | |||||
| const regex = new RegExp(iext.startsWith('data:') ? '^' + escapeRegExp(iext) + '[\\/\\+\\:\\,\\;]' : '\\.' + iext + '$', 'i') | |||||
| this._loadingManager.addHandler(regex, loader) | this._loadingManager.addHandler(regex, loader) | ||||
| }) | }) | ||||
| importer.mime?.forEach(imime => { | importer.mime?.forEach(imime => { | ||||
| const regex = new RegExp('^data:' + imime + '$', 'i') | |||||
| const regex = new RegExp('^data:' + escapeRegExp(imime) + '[\\/\\+\\:\\,\\;]', 'i') | |||||
| this._loadingManager.addHandler(regex, loader) | this._loadingManager.addHandler(regex, loader) | ||||
| }) | }) | ||||
| this._loaderCache.push({loader, ext: importer.ext, mime: importer.mime}) | this._loaderCache.push({loader, ext: importer.ext, mime: importer.mime}) | ||||
| } | } | ||||
| function escapeRegExp(str: string) { | |||||
| // @ts-expect-error new browser feature | |||||
| return RegExp.escape ? RegExp.escape(str) : | |||||
| str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string | |||||
| } | |||||
| // function escapeReplacement(str: string) { | |||||
| // return str.replace(/\$/g, '$$$$') | |||||
| // } |