hem
Version:
stitches CommonJS, and ties up other lose ends of web-app development.
185 lines (163 loc) • 4.78 kB
JavaScript
// Generated by CoffeeScript 1.12.7
(function() {
var clean, extend, flatten, fs, isWin, path, tmplCache, utils,
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
slice = [].slice;
path = require('path');
fs = require('fs-extra');
utils = {};
isWin = !!require('os').platform().match(/^win/);
utils.flatten = flatten = function(array, results) {
var i, item, len;
if (results == null) {
results = [];
}
for (i = 0, len = array.length; i < len; i++) {
item = array[i];
if (Array.isArray(item)) {
flatten(item, results);
} else if (item) {
results.push(item);
}
}
return results;
};
utils.arrayToString = function(value) {
var i, len, line, result;
if (Array.isArray(value)) {
result = "";
for (i = 0, len = value.length; i < len; i++) {
line = value[i];
result += line + "\n";
}
return result;
} else {
return value;
}
};
utils.removeDuplicateValues = function(array) {
var i, len, newArray, value;
newArray = [];
for (i = 0, len = array.length; i < len; i++) {
value = array[i];
if (indexOf.call(newArray, value) < 0) {
newArray.push(value);
}
}
return newArray;
};
utils.toArray = function(value) {
if (value == null) {
value = [];
}
if (Array.isArray(value)) {
return value;
} else {
return [value];
}
};
utils.startsWith = function(str, value) {
return (str != null ? str.slice(0, value.length) : void 0) === value;
};
utils.endsWith = function(str, value) {
return (str != null ? str.slice(-value.length) : void 0) === value;
};
utils.extend = extend = function(a, b) {
var x;
for (x in b) {
if (typeof b[x] === 'object' && !Array.isArray(b[x])) {
a[x] || (a[x] = {});
extend(a[x], b[x]);
} else {
a[x] = b[x];
}
}
return a;
};
utils.loadAsset = function(asset) {
return require("../assets/" + asset);
};
utils.copyFile = function(from, to) {
var BUF_LENGTH, _buff, bytesRead, fdr, fdw, pos;
fs.createFileSync(to);
BUF_LENGTH = 64 * 1024;
_buff = new Buffer(BUF_LENGTH);
fdr = fs.openSync(from, 'r');
fdw = fs.openSync(to, 'w');
bytesRead = 1;
pos = 0;
while (bytesRead > 0) {
bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos);
fs.writeSync(fdw, _buff, 0, bytesRead);
pos += bytesRead;
}
fs.closeSync(fdr);
return fs.closeSync(fdw);
};
utils.isDirectory = function(dir) {
var e, stats;
try {
stats = fs.lstatSync(dir);
return stats.isDirectory();
} catch (error) {
e = error;
return false;
}
};
tmplCache = {};
utils.tmpl = function(str, data) {
var fn, template;
if (!/[\t\r\n% ]/.test(str)) {
if (tmplCache[str]) {
fn = tmplCache[str];
} else {
template = utils.loadAsset(str + ".tmpl");
fn = utils.tmpl(template);
}
} else {
str = str.split("'").join("\\'").split("\n").join("\\n").replace(/<%([\s\S]*?)%>/mg, function(m, t) {
return '<%' + t.split("\\'").join("'").split("\\n").join("\n") + '%>';
}).replace(/<%=(.+?)%>/g, "',$1,'").split("<%").join("');").split("%>").join("p.push('");
fn = new Function("obj", "var p=[]\nvar print = function(){ p.push.apply(p,arguments); };\nwith(obj){\n p.push('" + str + "');\n}\nreturn p.join('');");
}
return data && fn(data) || fn;
};
clean = function(values, sep, trimStart) {
var i, len, regexp, result, value;
if (trimStart == null) {
trimStart = false;
}
result = "";
for (i = 0, len = values.length; i < len; i++) {
value = values[i];
if (value) {
result = result + sep + value;
}
}
regexp = new RegExp(sep + "+", "g");
result = result.replace(regexp, sep);
if (trimStart && utils.startsWith(result, sep)) {
result = result.slice(sep.length);
}
if (utils.endsWith(result, sep)) {
result = result.slice(0, -sep.length);
}
return result;
};
utils.cleanPath = function() {
var cleanPath, paths, result;
paths = 1 <= arguments.length ? slice.call(arguments, 0) : [];
result = clean(paths, path.sep, true);
if (isWin || true) {
cleanPath = new RegExp(/\//g);
result = result.replace(cleanPath, path.sep);
}
return result;
};
utils.cleanRoute = function() {
var routes;
routes = 1 <= arguments.length ? slice.call(arguments, 0) : [];
return clean(routes, "/");
};
module.exports = utils;
}).call(this);