conversion from php to nodejs started
This commit is contained in:
810
nodejs/node_modules/stylus/bin/stylus
generated
vendored
Executable file
810
nodejs/node_modules/stylus/bin/stylus
generated
vendored
Executable file
@@ -0,0 +1,810 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var fs = require('fs')
|
||||
, stylus = require('../lib/stylus')
|
||||
, basename = require('path').basename
|
||||
, dirname = require('path').dirname
|
||||
, extname = require('path').extname
|
||||
, resolve = require('path').resolve
|
||||
, join = require('path').join
|
||||
, isWindows = process.platform === 'win32';
|
||||
|
||||
/**
|
||||
* Arguments.
|
||||
*/
|
||||
|
||||
var args = process.argv.slice(2);
|
||||
|
||||
/**
|
||||
* Compare flag.
|
||||
*/
|
||||
|
||||
var compare = false;
|
||||
|
||||
/**
|
||||
* Compress flag.
|
||||
*/
|
||||
|
||||
var compress = false;
|
||||
|
||||
/**
|
||||
* CSS conversion flag.
|
||||
*/
|
||||
|
||||
var convertCSS = false;
|
||||
|
||||
/**
|
||||
* Line numbers flag.
|
||||
*/
|
||||
|
||||
var linenos = false;
|
||||
|
||||
/**
|
||||
* CSS class prefix.
|
||||
*/
|
||||
var prefix = '';
|
||||
|
||||
/**
|
||||
* Print to stdout flag.
|
||||
*/
|
||||
var print = false;
|
||||
|
||||
/**
|
||||
* Firebug flag
|
||||
*/
|
||||
|
||||
var firebug = false;
|
||||
|
||||
/**
|
||||
* Sourcemap flag
|
||||
*/
|
||||
|
||||
var sourcemap = false;
|
||||
|
||||
/**
|
||||
* Files to processes.
|
||||
*/
|
||||
|
||||
var files = [];
|
||||
|
||||
/**
|
||||
* Import paths.
|
||||
*/
|
||||
|
||||
var paths = [];
|
||||
|
||||
/**
|
||||
* Destination directory.
|
||||
*/
|
||||
|
||||
var dest;
|
||||
|
||||
/**
|
||||
* Watcher hash.
|
||||
*/
|
||||
|
||||
var watchers;
|
||||
|
||||
/**
|
||||
* Enable REPL.
|
||||
*/
|
||||
|
||||
var interactive;
|
||||
|
||||
/**
|
||||
* Plugins.
|
||||
*/
|
||||
|
||||
var plugins = [];
|
||||
|
||||
/**
|
||||
* Optional url() function.
|
||||
*/
|
||||
|
||||
var urlFunction = false;
|
||||
|
||||
/**
|
||||
* Include CSS on import.
|
||||
*/
|
||||
|
||||
var includeCSS = false;
|
||||
|
||||
/**
|
||||
* Set file imports.
|
||||
*/
|
||||
|
||||
var imports = [];
|
||||
|
||||
/**
|
||||
* Resolve relative urls
|
||||
*/
|
||||
|
||||
var resolveURL = false;
|
||||
|
||||
/**
|
||||
* Disable cache.
|
||||
*/
|
||||
|
||||
var disableCache = false;
|
||||
|
||||
/**
|
||||
* Display dependencies flag.
|
||||
*/
|
||||
|
||||
var deps = false;
|
||||
|
||||
/**
|
||||
* Hoist at-rules.
|
||||
*/
|
||||
|
||||
var hoist = false;
|
||||
|
||||
/**
|
||||
* Usage docs.
|
||||
*/
|
||||
|
||||
var usage = [
|
||||
''
|
||||
, ' Usage: stylus [options] [command] [< in [> out]]'
|
||||
, ' [file|dir ...]'
|
||||
, ''
|
||||
, ' Commands:'
|
||||
, ''
|
||||
, ' help [<type>:]<prop> Opens help info at MDN for <prop> in'
|
||||
, ' your default browser. Optionally'
|
||||
, ' searches other resources of <type>:'
|
||||
, ' safari opera w3c ms caniuse quirksmode'
|
||||
, ''
|
||||
, ' Options:'
|
||||
, ''
|
||||
, ' -i, --interactive Start interactive REPL'
|
||||
, ' -u, --use <path> Utilize the Stylus plugin at <path>'
|
||||
, ' -U, --inline Utilize image inlining via data URI support'
|
||||
, ' -w, --watch Watch file(s) for changes and re-compile'
|
||||
, ' -o, --out <dir> Output to <dir> when passing files'
|
||||
, ' -C, --css <src> [dest] Convert CSS input to Stylus'
|
||||
, ' -I, --include <path> Add <path> to lookup paths'
|
||||
, ' -c, --compress Compress CSS output'
|
||||
, ' -d, --compare Display input along with output'
|
||||
, ' -f, --firebug Emits debug infos in the generated CSS that'
|
||||
, ' can be used by the FireStylus Firebug plugin'
|
||||
, ' -l, --line-numbers Emits comments in the generated CSS'
|
||||
, ' indicating the corresponding Stylus line'
|
||||
, ' -m, --sourcemap Generates a sourcemap in sourcemaps v3 format'
|
||||
, ' --sourcemap-inline Inlines sourcemap with full source text in base64 format'
|
||||
, ' --sourcemap-root <url> "sourceRoot" property of the generated sourcemap'
|
||||
, ' --sourcemap-base <path> Base <path> from which sourcemap and all sources are relative'
|
||||
, ' -P, --prefix [prefix] prefix all css classes'
|
||||
, ' -p, --print Print out the compiled CSS'
|
||||
, ' --import <file> Import stylus <file>'
|
||||
, ' --include-css Include regular CSS on @import'
|
||||
, ' -D, --deps Display dependencies of the compiled file'
|
||||
, ' --disable-cache Disable caching'
|
||||
, ' --hoist-atrules Move @import and @charset to the top'
|
||||
, ' -r, --resolve-url Resolve relative urls inside imports'
|
||||
, ' --resolve-url-nocheck Like --resolve-url but without file existence check'
|
||||
, ' -V, --version Display the version of Stylus'
|
||||
, ' -h, --help Display help information'
|
||||
, ''
|
||||
].join('\n');
|
||||
|
||||
/**
|
||||
* Handle arguments.
|
||||
*/
|
||||
|
||||
var arg;
|
||||
while (args.length) {
|
||||
arg = args.shift();
|
||||
switch (arg) {
|
||||
case '-h':
|
||||
case '--help':
|
||||
console.error(usage);
|
||||
process.exit(0);
|
||||
case '-d':
|
||||
case '--compare':
|
||||
compare = true;
|
||||
break;
|
||||
case '-c':
|
||||
case '--compress':
|
||||
compress = true;
|
||||
break;
|
||||
case '-C':
|
||||
case '--css':
|
||||
convertCSS = true;
|
||||
break;
|
||||
case '-f':
|
||||
case '--firebug':
|
||||
firebug = true;
|
||||
break;
|
||||
case '-l':
|
||||
case '--line-numbers':
|
||||
linenos = true;
|
||||
break;
|
||||
case '-m':
|
||||
case '--sourcemap':
|
||||
sourcemap = {};
|
||||
break;
|
||||
case '--sourcemap-inline':
|
||||
sourcemap = sourcemap || {};
|
||||
sourcemap.inline = true;
|
||||
break;
|
||||
case '--sourcemap-root':
|
||||
var url = args.shift();
|
||||
if (!url) throw new Error('--sourcemap-root <url> required');
|
||||
sourcemap = sourcemap || {};
|
||||
sourcemap.sourceRoot = url;
|
||||
break;
|
||||
case '--sourcemap-base':
|
||||
var path = args.shift();
|
||||
if (!path) throw new Error('--sourcemap-base <path> required');
|
||||
sourcemap = sourcemap || {};
|
||||
sourcemap.basePath = path;
|
||||
break;
|
||||
case '-P':
|
||||
case '--prefix':
|
||||
prefix = args.shift();
|
||||
if (!prefix) throw new Error('--prefix <prefix> required');
|
||||
break;
|
||||
case '-p':
|
||||
case '--print':
|
||||
print = true;
|
||||
break;
|
||||
case '-V':
|
||||
case '--version':
|
||||
console.log(stylus.version);
|
||||
process.exit(0);
|
||||
break;
|
||||
case '-o':
|
||||
case '--out':
|
||||
dest = args.shift();
|
||||
if (!dest) throw new Error('--out <dir> required');
|
||||
break;
|
||||
case 'help':
|
||||
var name = args.shift()
|
||||
, browser = name.split(':');
|
||||
if (browser.length > 1) {
|
||||
name = [].slice.call(browser, 1).join(':');
|
||||
browser = browser[0];
|
||||
} else {
|
||||
name = browser[0];
|
||||
browser = '';
|
||||
}
|
||||
if (!name) throw new Error('help <property> required');
|
||||
help(name);
|
||||
break;
|
||||
case '--include-css':
|
||||
includeCSS = true;
|
||||
break;
|
||||
case '--disable-cache':
|
||||
disableCache = true;
|
||||
break;
|
||||
case '--hoist-atrules':
|
||||
hoist = true;
|
||||
break;
|
||||
case '-i':
|
||||
case '--repl':
|
||||
case '--interactive':
|
||||
interactive = true;
|
||||
break;
|
||||
case '-I':
|
||||
case '--include':
|
||||
var path = args.shift();
|
||||
if (!path) throw new Error('--include <path> required');
|
||||
paths.push(path);
|
||||
break;
|
||||
case '-w':
|
||||
case '--watch':
|
||||
watchers = {};
|
||||
break;
|
||||
case '-U':
|
||||
case '--inline':
|
||||
args.unshift('--use', 'url');
|
||||
break;
|
||||
case '-u':
|
||||
case '--use':
|
||||
var options;
|
||||
var path = args.shift();
|
||||
if (!path) throw new Error('--use <path> required');
|
||||
|
||||
// options
|
||||
if ('--with' == args[0]) {
|
||||
args.shift();
|
||||
options = args.shift();
|
||||
if (!options) throw new Error('--with <options> required');
|
||||
options = eval('(' + options + ')');
|
||||
}
|
||||
|
||||
// url support
|
||||
if ('url' == path) {
|
||||
urlFunction = options || {};
|
||||
} else {
|
||||
paths.push(dirname(path));
|
||||
plugins.push({ path: path, options: options });
|
||||
}
|
||||
break;
|
||||
case '--import':
|
||||
var file = args.shift();
|
||||
if (!file) throw new Error('--import <file> required');
|
||||
imports.push(file);
|
||||
break;
|
||||
case '-r':
|
||||
case '--resolve-url':
|
||||
resolveURL = {};
|
||||
break;
|
||||
case '--resolve-url-nocheck':
|
||||
resolveURL = { nocheck: true };
|
||||
break;
|
||||
case '-D':
|
||||
case '--deps':
|
||||
deps = true;
|
||||
break;
|
||||
default:
|
||||
files.push(arg);
|
||||
}
|
||||
}
|
||||
|
||||
// if --watch is used, assume we are
|
||||
// not working with stdio
|
||||
|
||||
if (watchers && !files.length) {
|
||||
files = fs.readdirSync(process.cwd())
|
||||
.filter(function(file){
|
||||
return file.match(/\.styl$/);
|
||||
});
|
||||
}
|
||||
|
||||
// --sourcemap flag is not working with stdio
|
||||
if (sourcemap && !files.length) sourcemap = false;
|
||||
|
||||
/**
|
||||
* Open the default browser to the CSS property `name`.
|
||||
*
|
||||
* @param {String} name
|
||||
*/
|
||||
|
||||
function help(name) {
|
||||
var url
|
||||
, exec = require('child_process').exec
|
||||
, command;
|
||||
|
||||
name = encodeURIComponent(name);
|
||||
|
||||
switch (browser) {
|
||||
case 'safari':
|
||||
case 'webkit':
|
||||
url = 'https://developer.apple.com/library/safari/search/?q=' + name;
|
||||
break;
|
||||
case 'opera':
|
||||
url = 'http://dev.opera.com/search/?term=' + name;
|
||||
break;
|
||||
case 'w3c':
|
||||
url = 'http://www.google.com/search?q=site%3Awww.w3.org%2FTR+' + name;
|
||||
break;
|
||||
case 'ms':
|
||||
url = 'http://social.msdn.microsoft.com/search/en-US/ie?query=' + name + '&refinement=59%2c61';
|
||||
break;
|
||||
case 'caniuse':
|
||||
url = 'http://caniuse.com/#search=' + name;
|
||||
break;
|
||||
case 'quirksmode':
|
||||
url = 'http://www.google.com/search?q=site%3Awww.quirksmode.org+' + name;
|
||||
break;
|
||||
default:
|
||||
url = 'https://developer.mozilla.org/en/CSS/' + name;
|
||||
}
|
||||
|
||||
switch (process.platform) {
|
||||
case 'linux': command = 'x-www-browser'; break;
|
||||
default: command = 'open';
|
||||
}
|
||||
|
||||
exec(command + ' "' + url + '"', function(){
|
||||
process.exit(0);
|
||||
});
|
||||
}
|
||||
|
||||
// Compilation options
|
||||
|
||||
if (files.length > 1 && extname(dest) === '.css') {
|
||||
dest = dirname(dest);
|
||||
}
|
||||
|
||||
var options = {
|
||||
filename: 'stdin'
|
||||
, compress: compress
|
||||
, firebug: firebug
|
||||
, linenos: linenos
|
||||
, sourcemap: sourcemap
|
||||
, paths: [process.cwd()].concat(paths)
|
||||
, prefix: prefix
|
||||
, dest: dest
|
||||
, 'hoist atrules': hoist
|
||||
};
|
||||
|
||||
// Buffer stdin
|
||||
|
||||
var str = '';
|
||||
|
||||
// Convert CSS to Stylus
|
||||
|
||||
if (convertCSS) {
|
||||
switch (files.length) {
|
||||
case 2:
|
||||
compileCSSFile(files[0], files[1]);
|
||||
break;
|
||||
case 1:
|
||||
var file = files[0];
|
||||
compileCSSFile(file, join(dirname(file), basename(file, extname(file))) + '.styl');
|
||||
break;
|
||||
default:
|
||||
var stdin = process.openStdin();
|
||||
stdin.setEncoding('utf8');
|
||||
stdin.on('data', function(chunk){ str += chunk; });
|
||||
stdin.on('end', function(){
|
||||
var out = stylus.convertCSS(str);
|
||||
console.log(out);
|
||||
});
|
||||
}
|
||||
} else if (interactive) {
|
||||
repl();
|
||||
} else if (deps) {
|
||||
// if --deps is used, just display list of the dependencies
|
||||
// not working with stdio and dirs
|
||||
displayDeps();
|
||||
} else {
|
||||
if (files.length) {
|
||||
compileFiles(files);
|
||||
} else {
|
||||
compileStdio();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Start Stylus REPL.
|
||||
*/
|
||||
|
||||
function repl() {
|
||||
var options = { cache: false, filename: 'stdin', imports: [join(__dirname, '..', 'lib', 'functions')] }
|
||||
, parser = new stylus.Parser('', options)
|
||||
, evaluator = new stylus.Evaluator(parser.parse(), options)
|
||||
, rl = require('readline')
|
||||
, repl = rl.createInterface(process.stdin, process.stdout, autocomplete)
|
||||
, global = evaluator.global.scope;
|
||||
|
||||
// expose BIFs
|
||||
evaluator.evaluate();
|
||||
|
||||
// readline
|
||||
repl.setPrompt('> ');
|
||||
repl.prompt();
|
||||
|
||||
// HACK: flat-list auto-complete
|
||||
function autocomplete(line){
|
||||
var out = process.stdout
|
||||
, keys = Object.keys(global.locals)
|
||||
, len = keys.length
|
||||
, words = line.split(/\s+/)
|
||||
, word = words.pop()
|
||||
, names = []
|
||||
, name
|
||||
, node
|
||||
, key;
|
||||
|
||||
// find words that match
|
||||
for (var i = 0; i < len; ++i) {
|
||||
key = keys[i];
|
||||
if (0 == key.indexOf(word)) {
|
||||
node = global.lookup(key);
|
||||
switch (node.nodeName) {
|
||||
case 'function':
|
||||
names.push(node.toString());
|
||||
break;
|
||||
default:
|
||||
names.push(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return [names, line];
|
||||
};
|
||||
|
||||
repl.on('line', function(line){
|
||||
if (!line.trim().length) return repl.prompt();
|
||||
parser = new stylus.Parser(line, options);
|
||||
parser.state.push('expression');
|
||||
evaluator.return = true;
|
||||
try {
|
||||
var expr = parser.parse();
|
||||
evaluator.root = expr;
|
||||
var ret = evaluator.evaluate();
|
||||
var node;
|
||||
while (node = ret.nodes.pop()) {
|
||||
if (!node.suppress) {
|
||||
var str = node.toString();
|
||||
if ('(' == str[0]) str = str.replace(/^\(|\)$/g, '');
|
||||
console.log('\033[90m=> \033[0m' + highlight(str));
|
||||
break;
|
||||
}
|
||||
}
|
||||
repl.prompt();
|
||||
} catch (err) {
|
||||
console.error('\033[31merror: %s\033[0m', err.message || err.stack);
|
||||
repl.prompt();
|
||||
}
|
||||
});
|
||||
|
||||
repl.on('SIGINT', function(){
|
||||
console.log();
|
||||
process.exit(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Highlight the given string of Stylus.
|
||||
*/
|
||||
|
||||
function highlight(str) {
|
||||
return str
|
||||
.replace(/(#)?(\d+(\.\d+)?)/g, function($0, $1, $2){
|
||||
return $1 ? $0 : '\033[36m' + $2 + '\033[0m';
|
||||
})
|
||||
.replace(/(#[\da-fA-F]+)/g, '\033[33m$1\033[0m')
|
||||
.replace(/('.*?'|".*?")/g, '\033[32m$1\033[0m');
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a CSS file to a Styl file
|
||||
*/
|
||||
|
||||
function compileCSSFile(file, fileOut) {
|
||||
fs.stat(file, function(err, stat){
|
||||
if (err) throw err;
|
||||
if (stat.isFile()) {
|
||||
fs.readFile(file, 'utf8', function(err, str){
|
||||
if (err) throw err;
|
||||
var styl = stylus.convertCSS(str);
|
||||
fs.writeFile(fileOut, styl, function(err){
|
||||
if (err) throw err;
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Compile with stdio.
|
||||
*/
|
||||
|
||||
function compileStdio() {
|
||||
process.stdin.setEncoding('utf8');
|
||||
process.stdin.on('data', function(chunk){ str += chunk; });
|
||||
process.stdin.on('end', function(){
|
||||
// Compile to css
|
||||
var style = stylus(str, options);
|
||||
if (includeCSS) style.set('include css', true);
|
||||
if (disableCache) style.set('cache', false);
|
||||
usePlugins(style);
|
||||
importFiles(style);
|
||||
style.render(function(err, css){
|
||||
if (err) throw err;
|
||||
if (compare) {
|
||||
console.log('\n\x1b[1mInput:\x1b[0m');
|
||||
console.log(str);
|
||||
console.log('\n\x1b[1mOutput:\x1b[0m');
|
||||
}
|
||||
console.log(css);
|
||||
if (compare) console.log();
|
||||
});
|
||||
}).resume();
|
||||
}
|
||||
|
||||
/**
|
||||
* Compile the given files.
|
||||
*/
|
||||
|
||||
function compileFiles(files) {
|
||||
files.forEach(compileFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display dependencies of the compiled files.
|
||||
*/
|
||||
|
||||
function displayDeps() {
|
||||
files.forEach(function(file){
|
||||
// ensure file exists
|
||||
fs.stat(file, function(err, stat){
|
||||
if (err) throw err;
|
||||
fs.readFile(file, 'utf8', function(err, str){
|
||||
if (err) throw err;
|
||||
options.filename = file;
|
||||
var style = stylus(str, options);
|
||||
|
||||
usePlugins(style);
|
||||
importFiles(style);
|
||||
console.log(style.deps().join('\n'));
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Compile the given file.
|
||||
*/
|
||||
|
||||
function compileFile(file) {
|
||||
// ensure file exists
|
||||
fs.stat(file, function(err, stat){
|
||||
if (err) throw err;
|
||||
// file
|
||||
if (stat.isFile()) {
|
||||
fs.readFile(file, 'utf8', function(err, str){
|
||||
if (err) throw err;
|
||||
options.filename = file;
|
||||
options._imports = [];
|
||||
var style = stylus(str, options);
|
||||
if (includeCSS) style.set('include css', true);
|
||||
if (disableCache) style.set('cache', false);
|
||||
if (sourcemap) style.set('sourcemap', sourcemap);
|
||||
|
||||
usePlugins(style);
|
||||
importFiles(style);
|
||||
style.render(function(err, css){
|
||||
watchImports(file, options._imports);
|
||||
if (err) {
|
||||
if (watchers) {
|
||||
console.error(err.stack || err.message);
|
||||
} else {
|
||||
throw err;
|
||||
}
|
||||
} else {
|
||||
writeFile(file, css);
|
||||
// write sourcemap
|
||||
if (sourcemap && !sourcemap.inline) {
|
||||
writeSourcemap(file, style.sourcemap);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
// directory
|
||||
} else if (stat.isDirectory()) {
|
||||
fs.readdir(file, function(err, files){
|
||||
if (err) throw err;
|
||||
files.filter(function(path){
|
||||
return path.match(/\.styl$/);
|
||||
}).map(function(path){
|
||||
return join(file, path);
|
||||
}).forEach(compileFile);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given CSS output.
|
||||
*/
|
||||
|
||||
function createPath(file, sourceMap) {
|
||||
var out;
|
||||
if (files.length === 1 && extname(dest) === '.css') {
|
||||
return [dest, sourceMap ? '.map' : ''].join('');
|
||||
}
|
||||
// --out support
|
||||
out = [basename(file, extname(file)), sourceMap ? '.css.map' : '.css'].join('');
|
||||
return dest
|
||||
? join(dest, out)
|
||||
: join(dirname(file), out);
|
||||
}
|
||||
|
||||
function writeFile(file, css) {
|
||||
// --print support
|
||||
if (print) return process.stdout.write(css);
|
||||
var path = createPath(file);
|
||||
fs.writeFile(path, css, function(err){
|
||||
if (err) throw err;
|
||||
console.log(' \033[90mcompiled\033[0m %s', path);
|
||||
// --watch support
|
||||
watch(file, file);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given sourcemap.
|
||||
*/
|
||||
|
||||
function writeSourcemap(file, sourcemap) {
|
||||
var path = createPath(file, true);
|
||||
fs.writeFile(path, JSON.stringify(sourcemap), function(err){
|
||||
if (err) throw err;
|
||||
// don't output log message if --print is present
|
||||
if (!print) console.log(' \033[90mgenerated\033[0m %s', path);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Watch the given `file` and recompiling `rootFile` when modified.
|
||||
*/
|
||||
|
||||
function watch(file, rootFile) {
|
||||
// not watching
|
||||
if (!watchers) return;
|
||||
|
||||
// already watched
|
||||
if (watchers[file]) {
|
||||
watchers[file][rootFile] = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// watch the file itself
|
||||
watchers[file] = {};
|
||||
watchers[file][rootFile] = true;
|
||||
if (print) {
|
||||
console.error('Stylus CLI Error: Watch and print cannot be used together');
|
||||
process.exit(1);
|
||||
}
|
||||
console.log(' \033[90mwatching\033[0m %s', file);
|
||||
// if is windows use fs.watch api instead
|
||||
// TODO: remove watchFile when fs.watch() works on osx etc
|
||||
if (isWindows) {
|
||||
fs.watch(file, function(event) {
|
||||
if (event === 'change') compile();
|
||||
});
|
||||
} else {
|
||||
fs.watchFile(file, { interval: 300 }, function(curr, prev) {
|
||||
if (curr.mtime > prev.mtime) compile();
|
||||
});
|
||||
}
|
||||
|
||||
function compile() {
|
||||
for (var rootFile in watchers[file]) {
|
||||
compileFile(rootFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Watch `imports`, re-compiling `file` when they change.
|
||||
*/
|
||||
|
||||
function watchImports(file, imports) {
|
||||
imports.forEach(function(imported){
|
||||
if (!imported.path) return;
|
||||
watch(imported.path, file);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Utilize plugins.
|
||||
*/
|
||||
|
||||
function usePlugins(style) {
|
||||
plugins.forEach(function(plugin){
|
||||
var path = plugin.path;
|
||||
var options = plugin.options;
|
||||
fn = require(/^\.+\//.test(path) ? resolve(path) : path);
|
||||
if ('function' != typeof fn) {
|
||||
throw new Error('plugin ' + path + ' does not export a function');
|
||||
}
|
||||
style.use(fn(options));
|
||||
});
|
||||
|
||||
if (urlFunction) {
|
||||
style.define('url', stylus.url(urlFunction));
|
||||
} else if (resolveURL) {
|
||||
style.define('url', stylus.resolver(resolveURL));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Imports the indicated files.
|
||||
*/
|
||||
|
||||
function importFiles(style) {
|
||||
imports.forEach(function(file) {
|
||||
style.import(file);
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user