kopia lustrzana https://github.com/c9/core
83 wiersze
2.6 KiB
JavaScript
83 wiersze
2.6 KiB
JavaScript
(function(mod) {
|
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
|
return mod(require("../lib/infer"), require("../lib/tern"), require("./commonjs"), require)
|
|
if (typeof define == "function" && define.amd) // AMD
|
|
return define(["../lib/infer", "../lib/tern", "./commonjs"], mod)
|
|
mod(tern, tern)
|
|
})(function(infer, tern, _, require) {
|
|
"use strict"
|
|
|
|
function resolve(name, parentFile) {
|
|
var resolved = resolveToFile(name, parentFile)
|
|
return resolved && infer.cx().parent.normalizeFilename(resolved)
|
|
}
|
|
|
|
function findDeclaredDeps() {}
|
|
|
|
var resolveToFile
|
|
if (require) (function() {
|
|
var module_ = require("module"), path = require("path"), fs = require("fs")
|
|
|
|
resolveToFile = function(name, parentFile) {
|
|
var projectDir = infer.cx().parent.projectDir
|
|
var fullParent = path.resolve(projectDir, parentFile)
|
|
var parentDir = path.dirname(fullParent)
|
|
if (/^\.\.?\//.test(name))
|
|
name = path.resolve(projectDir, parentDir, name)
|
|
|
|
var parentModule = {
|
|
id: fullParent,
|
|
paths: module_._nodeModulePaths(parentDir)
|
|
}
|
|
try {
|
|
return module_._resolveFilename(name, parentModule)
|
|
} catch(e) {
|
|
return null
|
|
}
|
|
}
|
|
|
|
function findPackageFile(dir) {
|
|
for (;;) {
|
|
try {
|
|
return JSON.parse(fs.readFileSync(path.resolve(dir, "package.json")))
|
|
} catch(e) {}
|
|
var shorter = path.dirname(dir)
|
|
if (shorter == dir) return null
|
|
dir = shorter
|
|
}
|
|
}
|
|
|
|
findDeclaredDeps = function(path, knownModules) {
|
|
var packageFile = findPackageFile(path)
|
|
if (!packageFile) return null
|
|
|
|
function add(obj) {
|
|
for (var name in obj) if (!(name in knownModules)) knownModules[name] = null
|
|
}
|
|
add(packageFile.dependencies)
|
|
add(packageFile.devDependencies)
|
|
add(packageFile.peerDependencies)
|
|
}
|
|
|
|
})(); else (function() {
|
|
function resolvePath(base, path) {
|
|
if (path[0] == "/") return path;
|
|
var slash = base.lastIndexOf("/"), m;
|
|
if (slash >= 0) path = base.slice(0, slash + 1) + path;
|
|
while (m = /[^\/]*[^\/\.][^\/]*\/\.\.\//.exec(path))
|
|
path = path.slice(0, m.index) + path.slice(m.index + m[0].length);
|
|
return path.replace(/(^|[^\.])\.\//g, "$1");
|
|
}
|
|
|
|
resolveToFile = function(name, parentFile) {
|
|
return /^\.\.?\//.test(name) ? resolvePath(parentFile, name) : name
|
|
}
|
|
})()
|
|
|
|
tern.registerPlugin("node_resolve", function(server) {
|
|
server.loadPlugin("commonjs")
|
|
server.mod.modules.resolvers.push(resolve)
|
|
findDeclaredDeps(server.projectDir, server.mod.modules.knownModules)
|
|
})
|
|
})
|