| @@ -1,6 +1,14 | |||
|
|
1 | 1 | HISTORY |
|
|
2 | 2 | ======= |
|
|
3 | 3 | |
|
|
4 | 1.2.16 | |
|
|
5 | ------ | |
|
|
6 | ||
|
|
7 | Minor fixes and improvements | |
|
|
8 | ||
|
|
9 | - added `isCancellable` type predicate function to `safe` module | |
|
|
10 | - `isString, isNumber, isInteger, isPrimitive` are now type predicates | |
|
|
11 | ||
|
|
4 | 12 | 1.2.0 |
|
|
5 | 13 | ----- |
|
|
6 | 14 | |
| @@ -90,7 +90,7 | |||
|
|
90 | 90 | }, |
|
|
91 | 91 | "duplexer": { |
|
|
92 | 92 | "version": "0.1.1", |
|
|
93 | "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", | |
|
|
93 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", | |
|
|
94 | 94 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", |
|
|
95 | 95 | "dev": true |
|
|
96 | 96 | }, |
| @@ -144,7 +144,7 | |||
|
|
144 | 144 | "dependencies": { |
|
|
145 | 145 | "tape": { |
|
|
146 | 146 | "version": "2.3.3", |
|
|
147 | "resolved": "http://registry.npmjs.org/tape/-/tape-2.3.3.tgz", | |
|
|
147 | "resolved": "https://registry.npmjs.org/tape/-/tape-2.3.3.tgz", | |
|
|
148 | 148 | "integrity": "sha1-Lnzgox3wn41oUWZKcYQuDKUFevc=", |
|
|
149 | 149 | "dev": true, |
|
|
150 | 150 | "requires": { |
| @@ -277,7 +277,7 | |||
|
|
277 | 277 | }, |
|
|
278 | 278 | "minimist": { |
|
|
279 | 279 | "version": "0.0.5", |
|
|
280 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", | |
|
|
280 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", | |
|
|
281 | 281 | "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=", |
|
|
282 | 282 | "dev": true |
|
|
283 | 283 | }, |
| @@ -316,7 +316,7 | |||
|
|
316 | 316 | }, |
|
|
317 | 317 | "readable-stream": { |
|
|
318 | 318 | "version": "1.1.14", |
|
|
319 | "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", | |
|
|
319 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", | |
|
|
320 | 320 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", |
|
|
321 | 321 | "dev": true, |
|
|
322 | 322 | "requires": { |
| @@ -369,7 +369,7 | |||
|
|
369 | 369 | }, |
|
|
370 | 370 | "string_decoder": { |
|
|
371 | 371 | "version": "0.10.31", |
|
|
372 | "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", | |
|
|
372 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", | |
|
|
373 | 373 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", |
|
|
374 | 374 | "dev": true |
|
|
375 | 375 | }, |
| @@ -432,7 +432,7 | |||
|
|
432 | 432 | }, |
|
|
433 | 433 | "through2": { |
|
|
434 | 434 | "version": "0.2.3", |
|
|
435 | "resolved": "http://registry.npmjs.org/through2/-/through2-0.2.3.tgz", | |
|
|
435 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", | |
|
|
436 | 436 | "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", |
|
|
437 | 437 | "dev": true, |
|
|
438 | 438 | "requires": { |
| @@ -1,6 +1,6 | |||
|
|
1 | 1 | import { Uuid } from "../Uuid"; |
|
|
2 | 2 | import { argumentNotEmptyString, getGlobal, isNullOrEmptyString } from "../safe"; |
|
|
3 |
import { TraceSource |
|
|
|
3 | import { TraceSource } from "../log/TraceSource"; | |
|
|
4 | 4 | import m = require("module"); |
|
|
5 | 5 | |
|
|
6 | 6 | const sandboxId = Uuid(); |
| @@ -11,38 +11,13 const globalRequire = getGlobal().requir | |||
|
|
11 | 11 | |
|
|
12 | 12 | const trace = TraceSource.get(m.id); |
|
|
13 | 13 | |
|
|
14 | export async function createContextRequire(moduleName: string): Promise<Require> { | |
|
|
15 | argumentNotEmptyString(moduleName, "moduleName"); | |
|
|
16 | ||
|
|
17 | const parts = moduleName.split("/"); | |
|
|
18 | if (parts[0] === ".") | |
|
|
19 | throw new Error("An absolute module path is required"); | |
|
|
20 | ||
|
|
21 | if (parts.length > 1) | |
|
|
22 | parts.splice(-1, 1, Uuid()); | |
|
|
23 | else | |
|
|
24 | parts.push(Uuid()); | |
|
|
25 | ||
|
|
26 | const shim = parts.join("/"); | |
|
|
27 | ||
|
|
28 | trace.debug(`define shim ${shim}`); | |
|
|
29 | ||
|
|
30 | return new Promise<Require>(cb => { | |
|
|
31 | define(shim, ["require"], r => { | |
|
|
32 | trace.debug("shim resolved"); | |
|
|
33 | return r; | |
|
|
34 | }); | |
|
|
35 | require([shim], cb); | |
|
|
36 | }); | |
|
|
37 | } | |
|
|
38 | ||
|
|
39 | 14 | class ModuleResolver { |
|
|
40 | 15 | _base: string; |
|
|
41 | 16 | _require: Require; |
|
|
42 | 17 | |
|
|
43 | 18 | constructor(req: Require, base?: string) { |
|
|
44 | 19 | this._base = base; |
|
|
45 |
this._require = req |
|
|
|
20 | this._require = req; | |
|
|
46 | 21 | } |
|
|
47 | 22 | |
|
|
48 | 23 | resolve(moduleName: string) { |
| @@ -58,17 +33,9 class ModuleResolver { | |||
|
|
58 | 33 | } |
|
|
59 | 34 | } |
|
|
60 | 35 | |
|
|
61 |
export |
|
|
|
62 | trace.debug( | |
|
|
63 | "makeResolver moduleName={0}, contextRequire={1}", | |
|
|
64 | moduleName || "<nil>", | |
|
|
65 | contextRequire ? typeof (contextRequire) : "<nil>" | |
|
|
66 | ); | |
|
|
36 | export function makeResolver(moduleName: string, contextRequire: Require) { | |
|
|
37 | const base = moduleName && moduleName.split("/").slice(0, -1).join("/"); | |
|
|
67 | 38 | |
|
|
68 | const nestedRequire = isNullOrEmptyString(moduleName) ? null : await createContextRequire(moduleName); | |
|
|
69 | ||
|
|
70 | // const base = moduleName && moduleName.split("/").slice(0, -1).join("/"); | |
|
|
71 | ||
|
|
72 | const resolver = new ModuleResolver(nestedRequire, null); | |
|
|
39 | const resolver = new ModuleResolver(contextRequire, base); | |
|
|
73 | 40 | return (id: string) => resolver.resolve(id); |
|
|
74 | 41 | } |
| @@ -178,7 +178,7 export class Configuration { | |||
|
|
178 | 178 | trace.debug("<{0}", name); |
|
|
179 | 179 | } |
|
|
180 | 180 | |
|
|
181 |
_visit(data, name: string) |
|
|
|
181 | async _visit(data, name: string) { | |
|
|
182 | 182 | if (isPrimitive(data) || isDescriptor(data)) |
|
|
183 | 183 | return data; |
|
|
184 | 184 | |
| @@ -1,3 +1,5 | |||
|
|
1 | import { ICancellable } from "./interfaces"; | |
|
|
2 | ||
|
|
1 | 3 | let _nextOid = 0; |
|
|
2 | 4 | const _oid = typeof Symbol === "function" ? |
|
|
3 | 5 | Symbol("__implab__oid__") : |
| @@ -40,20 +42,20 export function isNull(arg) { | |||
|
|
40 | 42 | return (arg === null || arg === undefined); |
|
|
41 | 43 | } |
|
|
42 | 44 | |
|
|
43 | export function isPrimitive(arg) { | |
|
|
45 | export function isPrimitive(arg): arg is string | number | boolean | undefined | null { | |
|
|
44 | 46 | return (arg === null || arg === undefined || typeof (arg) === "string" || |
|
|
45 | 47 | typeof (arg) === "number" || typeof (arg) === "boolean"); |
|
|
46 | 48 | } |
|
|
47 | 49 | |
|
|
48 | export function isInteger(arg) { | |
|
|
50 | export function isInteger(arg): arg is number { | |
|
|
49 | 51 | return parseInt(arg, 10) === arg; |
|
|
50 | 52 | } |
|
|
51 | 53 | |
|
|
52 | export function isNumber(arg) { | |
|
|
54 | export function isNumber(arg): arg is number { | |
|
|
53 | 55 | return parseFloat(arg) === arg; |
|
|
54 | 56 | } |
|
|
55 | 57 | |
|
|
56 | export function isString(val) { | |
|
|
58 | export function isString(val): val is string { | |
|
|
57 | 59 | return typeof (val) === "string" || val instanceof String; |
|
|
58 | 60 | } |
|
|
59 | 61 | |
| @@ -61,6 +63,10 export function isPromise(val): val is P | |||
|
|
61 | 63 | return val && typeof val.then === "function"; |
|
|
62 | 64 | } |
|
|
63 | 65 | |
|
|
66 | export function isCancellable(val): val is ICancellable { | |
|
|
67 | return val && typeof val.cancel === "function"; | |
|
|
68 | } | |
|
|
69 | ||
|
|
64 | 70 | export function isNullOrEmptyString(str) { |
|
|
65 | 71 | if (str === null || str === undefined || |
|
|
66 | 72 | ((typeof (str) === "string" || str instanceof String) && str.length === 0)) |
General Comments 0
You need to be logged in to leave comments.
Login now
