1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/* <copyright>
This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
</copyright> */
var Require = require("./require");
var URL = require("../core/url");
var Promise = require("../core/promise").Promise;
var FS = require("fs");
var globalEval = eval;
Require.getLocation = function () {
return URL.resolve("file:///", process.cwd() + "/");
};
var urlToPath = function (url) {
var parsed = URL.parse(url);
return parsed.path;
};
Require.read = function (url) {
var deferred = Promise.defer();
var path = urlToPath(url);
FS.readFile(path, "utf-8", function (error, text) {
if (error) {
deferred.reject(new Error(error));
} else {
deferred.resolve(text);
}
});
return deferred.promise;
};
// Compiles module text into a function.
// Can be overriden by the platform to make the engine aware of the source path. Uses sourceURL hack by default.
Require.Compiler = function (config) {
config.scope = config.scope || {};
var names = ["require", "exports", "module"];
var scopeNames = Object.keys(config.scope);
names.push.apply(names, scopeNames);
return function(module) {
if (module.factory)
return module;
if (!module.factory && module.text !== void 0) {
var factory = globalEval(
"(function(" + names.join(",") + "){" +
module.text +
"\n//*/\n})\n//@ sourceURL=" + module.location
);
module.factory = function (require, exports, module) {
Array.prototype.push.apply(arguments, scopeNames.map(function (name) {
return config.scope[name];
}));
return factory.apply(this, arguments);
};
// new Function will have its body reevaluated at every call, hence using eval instead
// https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope
//module.factory = new Function("require", "exports", "module", module.text + "\n//*/\n//@ sourceURL="+module.path);
}
return module;
};
};
Require.DefaultLoaderConstructor = function(config) {
return Require.MappingsLoader(
config,
Require.ExtensionsLoader(
config,
Require.PathsLoader(
config,
Require.CachingLoader(
config,
Require.Loader(
config,
Require.NodeLoader(config)
)
)
)
)
);
};
Require.NodeLoader = function (config) {
return function (url, module) {
var id = url.slice(config.location.length);
return {
type: "native",
exports: require(id),
location: url
}
};
}
Require.main = function () {
var require = Require.Sandbox();
require.async(process.argv[2]).end();
};
Require.overlays = ["node", "server", "montage"];
if (require.main === module) {
Require.main();
}
|