Created
October 17, 2013 20:11
-
-
Save adamrights/7031433 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require(X) from module at path Y | |
1. If X is a core module, | |
a. return the core module | |
b. STOP | |
2. If X begins with './' or '/' or '../' | |
a. LOAD_AS_FILE(Y + X) | |
b. LOAD_AS_DIRECTORY(Y + X) | |
3. LOAD_NODE_MODULES(X, dirname(Y)) | |
4. THROW "not found" | |
LOAD_AS_FILE(X) | |
1. If X is a file, load X as JavaScript text. STOP | |
2. If X.js is a file, load X.js as JavaScript text. STOP | |
3. If X.node is a file, load X.node as binary addon. STOP | |
LOAD_AS_DIRECTORY(X) | |
1. If X/package.json is a file, | |
a. Parse X/package.json, and look for "main" field. | |
b. let M = X + (json main field) | |
c. LOAD_AS_FILE(M) | |
2. If X/index.js is a file, load X/index.js as JavaScript text. STOP | |
3. If X/index.node is a file, load X/index.node as binary addon. STOP | |
LOAD_NODE_MODULES(X, START) | |
1. let DIRS=NODE_MODULES_PATHS(START) | |
2. for each DIR in DIRS: | |
a. LOAD_AS_FILE(DIR/X) | |
b. LOAD_AS_DIRECTORY(DIR/X) | |
NODE_MODULES_PATHS(START) | |
1. let PARTS = path split(START) | |
2. let ROOT = index of first instance of "node_modules" in PARTS, or 0 | |
3. let I = count of PARTS - 1 | |
4. let DIRS = [] | |
5. while I > ROOT, | |
a. if PARTS[I] = "node_modules" CONTINUE | |
c. DIR = path join(PARTS[0 .. I] + "node_modules") | |
b. DIRS = DIRS + DIR | |
c. let I = I - 1 | |
6. return DIRS |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment