30 lines
745 B
TypeScript
30 lines
745 B
TypeScript
|
import axios from "axios"
|
||
|
|
||
|
export interface DoricJSLoader {
|
||
|
filter(source: string): boolean;
|
||
|
request(source: string): Promise<string>;
|
||
|
}
|
||
|
|
||
|
|
||
|
const loaders: DoricJSLoader[] = [
|
||
|
{
|
||
|
filter: () => true,
|
||
|
request: async (source) => {
|
||
|
const result = await axios.get(source)
|
||
|
return result.data;
|
||
|
}
|
||
|
}
|
||
|
];
|
||
|
|
||
|
export function registerDoricJSLoader(loader: DoricJSLoader) {
|
||
|
loaders.push(loader);
|
||
|
}
|
||
|
|
||
|
export async function loadDoricJSBundle(source: string): Promise<string> {
|
||
|
const matched = loaders.filter(e => e.filter(source))
|
||
|
if (matched.length > 0) {
|
||
|
return matched[matched.length - 1].request(source)
|
||
|
}
|
||
|
throw new Error(`Cannot find matched loader for '${source}'`);
|
||
|
|
||
|
}
|