| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- "use strict";
- var async = require('async');
- var exec = require('child_process').exec;
- function compact(list) {
- return list.filter(function (i) {
- if (typeof i.length !== 'undefined') {
- return i.length > 0;
- }
- return !!i;
- });
- }
- function combine(string, repls) {
- var pats = string.match(/\$\([^\)]+\)/g);
- if (!pats) {
- return [string];
- }
- var res = [];
- var pat = pats[0];
- var rep = repls[pat];
- for (var i = 0; i < rep.length; i++) {
- res = res.concat(combine(string.replace(pat, rep[i]), repls));
- }
- return res;
- }
- module.exports = function (string, cb) {
- var pats = string.match(/\$\([^\)]+\)/g);
- if (!pats) {
- return cb(null, [string]);
- }
- var exps = {};
- async.forEach(pats, function (pat, cb) {
- var cmd = pat.slice(2, -1);
- var res = exec(cmd, function (err, stdout, stderr) {
- if (err) {
- return cb(err);
- }
- exps[pat] = compact(stdout.toString().split('\n'));
- cb(null);
- });
- }, function (err) {
- if (err) {
- return cb(err);
- }
- cb(null, combine(string, exps));
- });
- };
|