RequireJsHelper.ts
41 lines
| 1.0 KiB
| video/mp2t
|
TypeScriptLexer
|
|
r48 | import { Uuid } from "../Uuid"; | ||
|
|
r50 | import { argumentNotEmptyString, argumentNotNull } from "../safe"; | ||
|
|
r48 | import { TraceSource } from "../log/TraceSource"; | ||
|
|
r51 | import m = require("module"); | ||
|
|
r48 | |||
|
|
r51 | const trace = TraceSource.get(m.id); | ||
|
|
r48 | |||
|
|
r49 | export async function createContextRequire(moduleName: string): Promise<Require> { | ||
|
|
r48 | 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}`); | ||||
|
|
r50 | return new Promise<Require>(cb => { | ||
|
|
r48 | define(shim, ["require"], r => { | ||
| trace.debug("shim resolved"); | ||||
| return r; | ||||
| }); | ||||
|
|
r50 | require([shim], cb); | ||
|
|
r48 | }); | ||
| } | ||||
|
|
r50 | |||
| export function makeResolver(req: Require) { | ||||
| argumentNotNull(req, "req"); | ||||
| return (name: string) => { | ||||
| return new Promise<any>((cb, eb) => { | ||||
| req([name], cb, eb); | ||||
| }); | ||||
| }; | ||||
| } | ||||
