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
|
/* <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 FS = require("fs");
var PATH = require("path");
var MontageBoot = require("./montage");
var Require = require("./require/require");
var Promise = require("./core/promise");
var URL = require("./core/url");
exports.bootstrap = function (callback) {
var command = process.argv.slice(0, 3);
var args = process.argv.slice(2);
var program = args.shift();
FS.realpath(program, function (error, program) {
if (error) {
throw new Error(error);
}
findPackage(program, function (error, directory) {
if (error === "Can't find package") {
loadFreeModule(program, command, args);
} else if (error) {
throw new Error(error);
} else {
loadPackagedModule(directory, program, command, args);
}
});
});
};
MontageBoot.loadPackage = function (location, config) {
var config = {};
config.location = URL.resolve('file:/', location + '/');
// setup the reel loader
config.makeLoader = function (config) {
return MontageBoot.ReelLoader(config,
Require.DefaultLoaderConstructor(config));
};
// setup serialization compiler
config.makeCompiler = function (config) {
return MontageBoot.TemplateCompiler(config,
MontageBoot.SerializationCompiler(config,
Require.DefaultCompilerConstructor(config)));
};
return Require.PackageSandbox(config.location, config);
};
var findPackage = function (path, callback) {
var directory = PATH.dirname(path);
if (directory === path)
return callback("Can't find package");
var packageJson = PATH.join(directory, "package.json");
FS.stat(path, function (error, stat) {
if (error) callback(error);
if (stat.isFile()) {
callback(null, directory);
} else {
findPackage(directory, callback);
}
});
}
var loadFreeModule = function (program, command, args) {
throw new Error("Can't load module that is not in a package");
};
var loadPackagedModule = function (directory, program, command, args) {
MontageBoot.loadPackage(directory)
.then(function (require) {
var id = program.slice(directory.length + 1);
return require.async(id);
})
.end();
};
|