}
/* normalize */
- var directories = [];
- for (var i = 0; i < items.directories.length; i++) {
- var directory = items.directories[i];
- if (directory == '.') {
- } else if (directory == '..') {
- if (directories.length && directories[directories.length - 1] != '..')
- directories.pop();
- else
- directories.push('..');
- } else {
- directories.push(directory);
- }
- }
- items.directories = directories;
+ items.directories = require("path").normalizeArray(items.directories);
items.domains = items.domain.split(".");
var pathModule = createInternalModule("path", function (exports) {
exports.join = function () {
- var joined = "",
- dotre = /^\.\//,
- dotreplace = "",
- dotdotre = /(^|(\/)([^\/]+\/)?)\.\.\//g,
- dotdotreplace = ""
- for (var i = 0; i < arguments.length; i++) {
- var part = arguments[i].toString();
-
- /* Some logic to shorten paths */
- if (part === ".") continue;
- while (dotre.exec(part)) part = part.replace(dotre, dotreplace);
-
- if (i === 0) {
- part = part.replace(/\/*$/, "/");
- } else if (i === arguments.length - 1) {
- part = part.replace(/^\/*/, "");
+ return exports.normalize(Array.prototype.join.call(arguments, "/"));
+ };
+
+ function normalizeArray (parts) {
+ var directories = [];
+ for (var i = 0; i < parts.length; i++) {
+ var directory = parts[i];
+ if (directory === "." || (directory === "" && directories.length)) {
+ continue;
+ }
+ if (
+ directory === ".."
+ && directories.length
+ && directories[directories.length - 1] != '..'
+ ) {
+ directories.pop();
} else {
- part = part.replace(/^\/*/, "").replace(/\/*$/, "/");
+ directories.push(directory);
}
- joined += part;
}
- // replace /foo/../bar/baz with /bar/baz
- while (dotdotre.exec(joined)) joined = joined.replace(dotdotre, dotdotreplace);
- return joined;
-
+ return directories;
+ }
+
+ exports.normalize = function (path) {
+ return normalizeArray(path.split("/")).join("/");
};
exports.dirname = function (path) {
require.paths = process.paths;
require.async = requireAsync;
require.main = process.mainModule;
-
// create wrapper function
var wrapper = "var __wrap__ = function (exports, require, module, __filename) { "
+ content
var loadPromise = new process.Promise();
process.mainModule.load(process.ARGV[1], loadPromise);
+loadPromise.addErrback(function(e) {
+ throw e;
+});
+
// All our arguments are loaded. We've evaluated all of the scripts. We
// might even have created TCP servers. Now we enter the main eventloop. If
// there are no watchers on the loop (except for the ones that were
assert.equal(true, d4.D instanceof Function);
assert.equal("D", d4.D());
+debug("test index.js modules ids and relative loading")
+var one = require("./fixtures/nested-index/one"),
+ two = require("./fixtures/nested-index/two");
+assert.notEqual(one.hello, two.hello);
+
+debug("test cycles containing a .. path");
+var root = require("./fixtures/cycles/root"),
+ foo = require("./fixtures/cycles/folder/foo");
+assert.equal(root.foo, foo);
+assert.equal(root.sayHello(), root.hello);
+
var errorThrown = false;
try {
require("./fixtures/throws_error");
promise.addCallback(function (files) {
p(files);
- assert.deepEqual(["a.js", "b", "multipart.js", "test_ca.pem",
+ assert.deepEqual(["a.js", "b","cycles", "multipart.js",
+ "nested-index","test_ca.pem",
"test_cert.pem", "test_key.pem", "throws_error.js", "x.txt"], files.sort());
});