RequireJsHelper.ts
46 lines
| 1.3 KiB
| video/mp2t
|
TypeScriptLexer
|
|
r44 | import { Uuid } from "../Uuid"; | ||
| import { argumentNotEmptyString } from "../safe"; | ||||
| import { TraceSource } from "../log/TraceSource"; | ||||
| export interface RequireFn { | ||||
| (module: string): any; | ||||
| (modules: string[], cb?: (...args: any[]) => any): void; | ||||
| } | ||||
| declare const require: RequireFn; | ||||
| export const rjs = require; | ||||
| declare function define(name: string, modules: string[], cb?: (...args: any[]) => any, eb?: (e) => any): void; | ||||
| declare function define(modules: string[], cb?: (...args: any[]) => any, eb?: (e) => any): void; | ||||
| interface RequireJsResolverParams { | ||||
| contextRequire: RequireFn; | ||||
| } | ||||
| const trace = TraceSource.get("@implab/core/di/RequireJsHelper"); | ||||
| export async function createContextRequire(moduleName: string): Promise<RequireFn> { | ||||
| argumentNotEmptyString(moduleName, "moduleName"); | ||||
| const parts = moduleName.split("/"); | ||||
| if (parts[0] === ".") | ||||
| throw new Error("An absolute module path is required"); | ||||
| if (parts.length > 1) | ||||
| parts.splice(-1, 1, Uuid()); | ||||
| else | ||||
| parts.push(Uuid()); | ||||
| const shim = parts.join("/"); | ||||
| trace.debug(`define shim ${shim}`); | ||||
| return new Promise<RequireFn>(fulfill => { | ||||
| define(shim, ["require"], r => { | ||||
| trace.debug("shim resolved"); | ||||
| return r; | ||||
| }); | ||||
| require([shim], fulfill); | ||||
| }); | ||||
| } | ||||
