(function (exports) { "use strict"; var path = exports.path || require("path"); function escapeRegExp(str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); } function safeResolve(basename, target) { basename = path.resolve(basename); var targetname = path.resolve(basename, target), re = new RegExp("^" + escapeRegExp(basename) + "(/|$)"); return re.test(targetname) && targetname; } exports.safeResolve = safeResolve; exports.escapeRegExp = escapeRegExp; function create(Desi) { var fsapi = Desi.fsapi || require("./node-adapters").fsapi; fsapi.getConfigs = function (confs) { var opts = { extensions: ["yml", "yaml", "json"], dotfiles: false, contents: true, sha1sum: true, }; return fsapi.getMeta(confs, opts).then(function (collections) { var obj = {}; Object.keys(collections).forEach(function (key) { var files = collections[key], keyname = key.replace(/\.(json|ya?ml|\/)$/i, ""); obj[keyname] = obj[keyname] || {}; files.forEach(function (file) { var filename = file.name.replace(/\.(json|ya?ml)$/i, ""), data = {}; if (file.error) { console.error(file); console.error(file.error); return; } if (/\.(ya?ml)$/i.test(file.name)) { try { data = Desi.YAML.parse(file.contents) || {}; if ("undefined" === data) { data = {}; } } catch (e) { data = { error: e }; console.error("Could not parse yaml for " + filename); console.error(file); console.error(e); } } else if (/\.(json)$/i.test(file.name)) { try { data = JSON.parse(file.contents) || {}; } catch (e) { data = { error: e }; console.error("Could not parse json for " + filename); console.error(file); console.error(e); } } else { console.error("Not sure what to do with this one..."); console.error(file); } data = obj[keyname][filename] = data || obj[keyname][filename]; if (data) { data.filename = file.name; } /* if (!obj[keyname][filename]) { obj[keyname][filename] = {}; } Object.keys(data).forEach(function (key) { obj[keyname][filename][key] = data[key]; }); */ }); }); return obj; }); }; fsapi.getAllPartials = function () { return fsapi .getConfigs(["partials", "partials.yml"]) .then(function (results) { var partials = {}; Object.keys(results.partials).forEach(function (key) { var partial = results.partials[key]; Object.keys(partial).forEach(function (prop) { if (partials[prop]) { console.warn("partial '" + prop + "' overwritten by " + key); } partials[prop] = partial[prop]; }); }); return partials; }); }; fsapi.getAllConfigFiles = function () { return fsapi .getConfigs(["config.yml", "site.yml", "authors"]) .then(function (results) { var authors = results.authors, config = results.config.config, site = results.site.site; return { config: config, authors: authors, site: site }; }); }; return exports; } if (exports.Desirae) { create(exports.Desirae); } else { exports.create = create; } })(("undefined" !== typeof exports && exports) || window);