Permalink
Browse files

refactor path module to lib/path.js

  • Loading branch information...
1 parent 7ff53f4 commit e0061a511d6e9b4ac3ea0049c836e68278eaff42 @isaacs isaacs committed with ry Apr 21, 2010
Showing with 72 additions and 66 deletions.
  1. +64 −0 lib/path.js
  2. +1 −0 src/node.cc
  3. +7 −66 src/node.js
View
@@ -0,0 +1,64 @@
+
+exports.join = function () {
+ return exports.normalize(Array.prototype.join.call(arguments, "/"));
+};
+
+exports.normalizeArray = function (parts, keepBlanks) {
+ var directories = [], prev;
+ for (var i = 0, l = parts.length - 1; i <= l; i++) {
+ var directory = parts[i];
+
+ // if it's blank, but it's not the first thing, and not the last thing, skip it.
+ if (directory === "" && i !== 0 && i !== l && !keepBlanks) continue;
+
+ // if it's a dot, and there was some previous dir already, then skip it.
+ if (directory === "." && prev !== undefined) continue;
+
+ if (
+ directory === ".."
+ && directories.length
+ && prev !== ".."
+ && prev !== "."
+ && prev !== undefined
+ && (prev !== "" || keepBlanks)
+ ) {
+ directories.pop();
+ prev = directories.slice(-1)[0]
+ } else {
+ if (prev === ".") directories.pop();
+ directories.push(directory);
+ prev = directory;
+ }
+ }
+ return directories;
+};
+
+exports.normalize = function (path, keepBlanks) {
+ return exports.normalizeArray(path.split("/"), keepBlanks).join("/");
+};
+
+exports.dirname = function (path) {
+ return path && path.substr(0, path.lastIndexOf("/")) || ".";
+};
+
+exports.filename = function () {
+ throw new Error("path.filename is deprecated. Please use path.basename instead.");
+};
+exports.basename = function (path, ext) {
+ var f = path.substr(path.lastIndexOf("/") + 1);
+ if (ext && f.substr(-1 * ext.length) === ext) {
+ f = f.substr(0, f.length - ext.length);
+ }
+ return f;
+};
+
+exports.extname = function (path) {
+ var index = path.lastIndexOf('.');
+ return index < 0 ? '' : path.substring(index);
+};
+
+exports.exists = function (path, callback) {
+ process.binding('fs').stat(path, function (err, stats) {
+ if (callback) callback(err ? false : true);
+ });
+};
View
@@ -1308,6 +1308,7 @@ static Handle<Value> Binding(const Arguments& args) {
exports->Set(String::New("url"), String::New(native_url));
exports->Set(String::New("utils"), String::New(native_utils));
exports->Set(String::New("events"), String::New(native_events));
+ exports->Set(String::New("path"), String::New(native_path));
binding_cache->Set(module, exports);
}
View
@@ -196,72 +196,13 @@ function debug (x) {
}
}
-
-var pathModule = createInternalModule("path", function (exports) {
- exports.join = function () {
- return exports.normalize(Array.prototype.join.call(arguments, "/"));
- };
-
- exports.normalizeArray = function (parts, keepBlanks) {
- var directories = [], prev;
- for (var i = 0, l = parts.length - 1; i <= l; i++) {
- var directory = parts[i];
-
- // if it's blank, but it's not the first thing, and not the last thing, skip it.
- if (directory === "" && i !== 0 && i !== l && !keepBlanks) continue;
-
- // if it's a dot, and there was some previous dir already, then skip it.
- if (directory === "." && prev !== undefined) continue;
-
- if (
- directory === ".."
- && directories.length
- && prev !== ".."
- && prev !== "."
- && prev !== undefined
- && (prev !== "" || keepBlanks)
- ) {
- directories.pop();
- prev = directories.slice(-1)[0]
- } else {
- if (prev === ".") directories.pop();
- directories.push(directory);
- prev = directory;
- }
- }
- return directories;
- };
-
- exports.normalize = function (path, keepBlanks) {
- return exports.normalizeArray(path.split("/"), keepBlanks).join("/");
- };
-
- exports.dirname = function (path) {
- return path.substr(0, path.lastIndexOf("/")) || ".";
- };
-
- exports.filename = function () {
- throw new Error("path.filename is deprecated. Please use path.basename instead.");
- };
- exports.basename = function (path, ext) {
- var f = path.substr(path.lastIndexOf("/") + 1);
- if (ext && f.substr(-1 * ext.length) === ext) {
- f = f.substr(0, f.length - ext.length);
- }
- return f;
- };
-
- exports.extname = function (path) {
- var index = path.lastIndexOf('.');
- return index < 0 ? '' : path.substring(index);
- };
-
- exports.exists = function (path, callback) {
- requireNative('fs').stat(path, function (err, stats) {
- if (callback) callback(err ? false : true);
- });
- };
-});
+var pathModule = createInternalModule
+ ( 'path'
+ , process.compile
+ ( "(function (exports) {" + natives.path + "})"
+ , "path"
+ )
+ );
var path = pathModule.exports;

0 comments on commit e0061a5

Please sign in to comment.