kopia lustrzana https://github.com/c9/core
226 wiersze
7.6 KiB
JavaScript
226 wiersze
7.6 KiB
JavaScript
var patchTemplate = ";(" +function() {
|
|
// automatically generated by architect-build
|
|
/*global main*/
|
|
var moduleMap = require("./module-map.json");
|
|
var Module = require("module");
|
|
var root = __dirname;
|
|
var path = require('path');
|
|
Module._resolveFilename_orig = Module._resolveFilename;
|
|
function relPath(filename) {
|
|
return path.relative(root, filename + "").replace(/\\/g, "/");
|
|
}
|
|
Module._resolveFilename = function(id, parent) {
|
|
var parentId = parent && relPath(parent.filename);
|
|
var key = /^[.][.\/]/.test(id)
|
|
? relPath(path.join(path.dirname(parentId), id))
|
|
: id + "|" + parentId;
|
|
|
|
if (moduleMap[key])
|
|
return path.join(root, moduleMap[key]);
|
|
var realPath = Module._resolveFilename_orig(id, parent);
|
|
// if (realPath != id) console.log(id, key);
|
|
return realPath;
|
|
};
|
|
main.onResolvePlugins = function(plugins, base) {
|
|
var resolvedConfig = moduleMap["!config"];
|
|
plugins.forEach(function(plugin, index) {
|
|
// Shortcut where string is used for plugin without any options.
|
|
if (typeof plugin === "string")
|
|
plugin = plugins[index] = { packagePath: plugin };
|
|
plugin.disableUnpackagedClient = true;
|
|
// The plugin is a package on the disk. We need to load it.
|
|
if (plugin.hasOwnProperty("packagePath") && !plugin.hasOwnProperty("setup")) {
|
|
try {
|
|
var defaults = resolvedConfig[plugin.packagePath];
|
|
plugin.packagePath = path.join(root, defaults.packagePath);
|
|
plugin.consumes = defaults.consumes;
|
|
plugin.provides = defaults.provides;
|
|
plugin.setup = require(plugin.packagePath);
|
|
} catch(e) {}
|
|
}
|
|
});
|
|
};
|
|
} + ")();";
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
var Module = require("module");
|
|
var path = require("path");
|
|
var fs = require("fs");
|
|
var convertPath = require("./copy").convertPath;
|
|
var loaded, moduleMap, root;
|
|
var ignore;
|
|
// loader modules that have non static require
|
|
var LOADERS = {
|
|
"amd-loader": 1,
|
|
"architect": 1,
|
|
"server.js": 1,
|
|
"vfs-local": 1,
|
|
"architect-build/build": 1,
|
|
};
|
|
|
|
function addModule(id, parent) {
|
|
if (ignore && ignore(id)) return;
|
|
if (!parent) {
|
|
parent = {
|
|
relPath: id,
|
|
id: id,
|
|
filename: root,
|
|
paths: [root] // Module._nodeModulePaths(path.dirname(filename))
|
|
};
|
|
}
|
|
var filename, text;
|
|
if (id.indexOf("!") != -1) {
|
|
|
|
}
|
|
try {
|
|
filename = Module._resolveFilename(id, parent);
|
|
} catch(e) {
|
|
console.error(id);
|
|
}
|
|
if (filename == parent.filename)
|
|
return;
|
|
var key = /^[.][.\/]/.test(id)
|
|
? relPath(path.join(path.dirname(parent.id), id))
|
|
: id + "|" + parent.relPath;
|
|
|
|
if (!/[\\\/]/.test(filename) || moduleMap[key] !== undefined)
|
|
return;
|
|
try {
|
|
text = fs.readFileSync(filename, "utf8")
|
|
.replace(/^\s*\/\/.+|^\s*\/\*[\s\S]*?\*\//gm, "");
|
|
} catch(e) {
|
|
moduleMap[key] = "";
|
|
return;
|
|
}
|
|
var re = /require\s*(?:\.\s*resolve\s*)?\(([^\)]+)\)/g, m;
|
|
var children = [];
|
|
while ((m = re.exec(text))) {
|
|
var name = m[1].trim();
|
|
if (!/^(['"])([^'"]*)\1$/.test(name)) {
|
|
m = /^(['"])([^'"]+)\1\s*[+]\s*\w+(\s*[+]\s*['"]\.js['"])?$/.exec(name);
|
|
if (m) {
|
|
var dirname = m[2];
|
|
if (dirname.slice(-1) !== "/")
|
|
dirname = path.dirname(dirname) + "/";
|
|
var dirpath = path.join(path.dirname(filename), dirname);
|
|
try {
|
|
var files = fs.readdirSync(dirpath);
|
|
files.forEach(function(f) {
|
|
var ext = f.substr(f.lastIndexOf("."));
|
|
if (ext != ".js") return;
|
|
if (!m[3]) f = f.slice(0, -ext.length);
|
|
children.push(dirname + f);
|
|
});
|
|
console.warn("adding drectory ", dirpath, "for", key);
|
|
console.warn("----| " + m[0]);
|
|
continue;
|
|
} catch(e) {}
|
|
}
|
|
var shortKey = key.replace(/\|[^|]+$/, "");
|
|
if (!LOADERS[shortKey])
|
|
console.error("non static require ", name, "from", shortKey);
|
|
} else {
|
|
children.push(name.slice(1, -1));
|
|
}
|
|
}
|
|
if (/\.json$/.test(filename))
|
|
children = [];
|
|
|
|
var module = {
|
|
relPath: relPath(filename),
|
|
id: filename,
|
|
filename: filename,
|
|
paths: Module._nodeModulePaths(path.dirname(filename))
|
|
};
|
|
|
|
loaded[filename] = module;
|
|
moduleMap[key] = module.relPath;
|
|
children.forEach(function(id) {
|
|
addModule(id, module);
|
|
});
|
|
}
|
|
|
|
function relPath(filename) {
|
|
return path.relative(root, filename).replace(/\\/g, "/");
|
|
}
|
|
|
|
function build(base, args, cb) {
|
|
root = path.resolve(base);
|
|
args.push("--_getConfig", "true");
|
|
loaded = Object.create(null);
|
|
moduleMap = Object.create(null);
|
|
|
|
var server = require(root + "/server");
|
|
server.onResolvePlugins = function(plugins, base) {
|
|
base = relPath(base);
|
|
plugins.forEach(function(plugin, index) {
|
|
if (typeof plugin === "string")
|
|
plugin = plugins[index] = { packagePath: plugin };
|
|
plugin.packagePath_orig = plugin.packagePath;
|
|
});
|
|
};
|
|
server(args, null, function(err, config, configPath) {
|
|
addModule("server.js");
|
|
addModule(configPath);
|
|
config.forEach(function(plugin) {
|
|
if (plugin.packagePath)
|
|
addModule(relPath(plugin.packagePath));
|
|
});
|
|
var resolvedConfig = moduleMap["!config"] = {};
|
|
config.forEach(function(plugin) {
|
|
if (plugin.packagePath && plugin.packagePath_orig) {
|
|
resolvedConfig[plugin.packagePath_orig] = {
|
|
packagePath: relPath(Module._resolveFilename(plugin.packagePath)),
|
|
consumes: plugin.consumes,
|
|
provides: plugin.provides
|
|
};
|
|
}
|
|
});
|
|
function unique(array) {
|
|
var map = Object.create(null);
|
|
array.forEach(function(x) {map[x] = 1});
|
|
return Object.keys(map);
|
|
}
|
|
var roots = unique(Object.keys(loaded).map(function(x) {
|
|
x = x.replace(/([\\\/](?:plugins|node_modules)[\\\/][^\\\/]+).*?$/, "$1");
|
|
return relPath(x);
|
|
}));
|
|
|
|
// console.log(loaded)
|
|
|
|
cb && cb(null, {
|
|
roots: roots,
|
|
moduleMap: moduleMap,
|
|
loaded: loaded
|
|
});
|
|
});
|
|
}
|
|
|
|
/*
|
|
root = "/newclient"
|
|
dest = "/build/webkitbuilds/app.nw"
|
|
var args = ["local","-s", "local"];
|
|
*/
|
|
module.exports = function(options, cb) {
|
|
var dest = options.dest && convertPath(options.dest);
|
|
var root = convertPath(options.root);
|
|
var args = options.args;
|
|
ignore = options.ignore && function(id) {
|
|
return options.ignore.test(id);
|
|
};
|
|
build(root, args, function(err, result) {
|
|
if (dest) {
|
|
var serverSource = fs.readFileSync(root + "/server.js", "utf8");
|
|
serverSource = serverSource.replace(/^(#.*|"use strict";?|\s)*/, function(a) {
|
|
return a.trim() + "\n\n" + patchTemplate + "\n\n";
|
|
});
|
|
fs.writeFileSync(dest + "/server.js", serverSource, "utf8");
|
|
fs.writeFileSync(dest + "/module-map.json", JSON.stringify(result.moduleMap), "utf8");
|
|
}
|
|
|
|
cb(null, result);
|
|
});
|
|
};
|
|
|