Comparing version 0.3.2 to 0.3.3
@@ -1,5 +0,6 @@ | ||
var fs = require('fs'), | ||
var | ||
fs = require('fs'), | ||
path = require('path'), | ||
compile = require('./compile'), | ||
cmd = require('./cmd'); | ||
fest = require('./fest'), | ||
cmd = require('./cmd'); | ||
var existsSync = fs.existsSync || path.existsSync; | ||
@@ -10,9 +11,12 @@ | ||
'Usage:', | ||
' fest-watch --dir=... [--out=...]', | ||
' fest-watch --dir=... [--out=...] [--wrapper=...] [--exclude=...]', | ||
'', | ||
'Options:', | ||
' --dir directory where .xml files are', | ||
' --out out directory for compiled files if omited --out = --dir', | ||
' --version current version', | ||
' --help display these usage instructions', | ||
' --dir directory where .xml files are', | ||
' --wrapper type of postcompile wrappers, fest|jsLoader|source|variable (default is fest)', | ||
' --exclude regexp, which files ignore', | ||
' --out out directory for compiled files if omited --out = --dir', | ||
'', | ||
' --version current version', | ||
' --help display these usage instructions', | ||
'' | ||
@@ -33,3 +37,2 @@ ].join('\n')); | ||
} | ||
var prefix = ''; | ||
@@ -40,3 +43,4 @@ var recursive = cmd.recursive !== 'no'; | ||
if (!dir){ | ||
console.log('You need to print directory "fest-watch dir=..."'); | ||
console.log('You need to print directory "fest-watch dir=..."\n'); | ||
help(); | ||
process.exit(1); | ||
@@ -57,10 +61,10 @@ } | ||
} | ||
var fest = (cmd.fest === 'no' ? false : true); | ||
var not_anonymous = cmd.anonymous === 'no'; | ||
if (not_anonymous) fest = false; | ||
var wrapper = cmd.wrapper || 'fest'; | ||
var watched_files = {}; | ||
var excludeRegexp = cmd.exclude ? new RegExp("^" + dir + "(" + cmd.exclude + ")") : null; | ||
function do_compile(file, dir, out_dir, prefix){ | ||
console.log('compile: ' + dir + file); | ||
var source = compile(dir + file, '', ''); | ||
var source = fest.compile(dir + file, cmd.compile || '', ''); | ||
var file_name = (out_dir + file).replace(/\.xml/, '.js'); | ||
@@ -70,23 +74,28 @@ if (!existsSync(out_dir)){ | ||
} | ||
if (fest){ | ||
fs.writeFileSync(file_name, ';(function(){var x=Function("return this")();if(!x.fest)x.fest={};x.fest["' + prefix + file.replace(/\.xml$/, '') + '"]=' + source + '})();', 'utf8'); | ||
} else if (not_anonymous) { | ||
fs.writeFileSync(file_name, "var " + prefix + file.replace(/\.xml$/, '') + "=" + source, 'utf8'); | ||
} else { | ||
fs.writeFileSync(file_name, source, 'utf8'); | ||
} | ||
fs.writeFileSync(file_name, fest.compileTpl(prefix + file.replace(/\.xml$/, ''), source, wrapper), 'utf8'); | ||
} | ||
function findfiles(dir, out_dir, prefix){ | ||
if(excludeRegexp && excludeRegexp.test(dir)) { | ||
console.log('exclude dir: ' + dir); | ||
return; | ||
} | ||
fs.readdir(dir, function(err, files){ | ||
files.filter(function(file){return file.indexOf('.xml') > 0;}) | ||
.forEach(function(file){ | ||
console.log('watch: ' + file); | ||
do_compile(file, dir, out_dir, prefix); | ||
}); | ||
files.filter(function(file){ | ||
return file.indexOf('.xml') > 0; | ||
}).forEach(function(file){ | ||
console.log('watch: ' + file); | ||
do_compile(file, dir, out_dir, prefix); | ||
}); | ||
if (recursive){ | ||
files.filter(function(file){ return fs.statSync(dir + file).isDirectory() }) | ||
.forEach(function(file){ | ||
console.log('watch directory: ' + dir + file); | ||
findfiles(dir + file + '/', out_dir + file + '/', prefix + file + '/'); | ||
}); | ||
files.filter(function(file){ | ||
return fs.statSync(dir + file).isDirectory() | ||
}).forEach(function(file){ | ||
console.log('watch directory: ' + dir + file); | ||
findfiles(dir + file + '/', out_dir + file + '/', prefix + file + '/'); | ||
}); | ||
} | ||
@@ -93,0 +102,0 @@ }); |
module.exports = function() { | ||
var result = []; | ||
process.argv.slice(2).forEach(function (arg) { | ||
if (0 === arg.indexOf('--')) { | ||
var kv = arg.slice(2).split(/\s*=\s*/); | ||
result[kv[0]] = typeof kv[1] === 'undefined' ? true : kv[1]; | ||
var key = kv[0]; | ||
var value = typeof kv[1] === 'undefined' ? true : kv[1]; | ||
if(value === 'true') { | ||
value = true; | ||
} | ||
if(value === 'false') { | ||
value = false; | ||
} | ||
// support for multilevel parameters | ||
if(key.indexOf('.')) { | ||
var arr = result; | ||
var parts = key.split('.'); | ||
parts.forEach(function(part, i) { | ||
if(i < parts.length - 1) { | ||
if(arr[part] == undefined) { | ||
arr[part] = {}; | ||
} | ||
arr = arr[part]; | ||
} else { | ||
arr[part] = value; | ||
} | ||
}) | ||
} else { | ||
result[key] = value; | ||
} | ||
} else { | ||
@@ -11,3 +46,4 @@ result.push(arg); | ||
}) | ||
return result; | ||
}() |
@@ -622,2 +622,3 @@ var compile = (function(){ | ||
build_template(_compile(file, '__fest_context', callbacks, options)); | ||
if (options.beautify) template = js_beautify(template); | ||
@@ -624,0 +625,0 @@ } catch (e) { |
@@ -9,2 +9,3 @@ var fs = require('fs'), | ||
compile: compile, | ||
render: function (file, json, options) { | ||
@@ -14,2 +15,18 @@ var compiled = this.compile(file, options), | ||
return template(json); | ||
}, | ||
compileTpl: function(file, source, wrapper) { | ||
var wrapperFile = __dirname + '/wrappers/' + wrapper; | ||
try { | ||
var wrapperTemplate = fs.readFileSync(wrapperFile, 'utf-8'); | ||
file = file.replace(/\'/g, "\\'").replace(/\"/g, '\\"').replace(/\\/g, '\\'); | ||
return wrapperTemplate.replace(/##file##/g, file).replace(/##source##/g, source); | ||
} catch(e) { | ||
console.error('Postcompile wrapper template file '+wrapperFile+' dosn\'t exists') | ||
process.exit(); | ||
} | ||
} | ||
@@ -16,0 +33,0 @@ }; |
@@ -99,3 +99,3 @@ /** | ||
console.log(err.message); | ||
return compileErrorTpl(file, srcPath+file + ' -- template not found'); | ||
return compileErrorTpl(file, srcPath+file + ' -- template not found', options); | ||
} | ||
@@ -108,11 +108,11 @@ | ||
console.log(err.message); | ||
return compileErrorTpl(file, 'fest.compile failed'); | ||
return compileErrorTpl(file, 'fest.compile failed', options); | ||
} | ||
return complieTpl(file, source); | ||
return compileTpl(file, source, options); | ||
} | ||
function complieTpl(file, source){ | ||
return ';(function(){var x=Function("return this")();if(!x.fest)x.fest={};x.fest["'+file+'"]='+source+'})();'; | ||
function compileTpl(file, source, options){ | ||
return fest.compileTpl(file, source, options.wrapper); | ||
} | ||
@@ -122,3 +122,3 @@ | ||
function compileErrorTpl(file, txt){ | ||
return complieTpl(file, 'function(){return "[fest.proxy.compile.error] '+ txt +'"}'); | ||
return compileTpl(file, 'function(){return "[fest.proxy.compile.error] '+ txt +'"}'); | ||
} | ||
@@ -125,0 +125,0 @@ |
@@ -1,91 +0,1 @@ | ||
var fs = require('fs'), | ||
path = require('path'), | ||
compile = require('./compile'), | ||
cmd = require('./cmd'); | ||
var existsSync = fs.existsSync || path.existsSync; | ||
function help() { | ||
console.log([ | ||
'Usage:', | ||
' fest-watch --dir=... [--out=...]', | ||
'', | ||
'Options:', | ||
' --dir directory where .xml files are', | ||
' --out out directory for compiled files if omited --out = --dir', | ||
' --version current version', | ||
' --help display these usage instructions', | ||
'' | ||
].join('\n')); | ||
process.exit(0); | ||
} | ||
function version() { | ||
console.log(JSON.parse(fs.readFileSync(__dirname + '/../package.json')).version); | ||
process.exit(0); | ||
} | ||
if (cmd.help) { | ||
help(); | ||
} else if (cmd.version) { | ||
version(); | ||
} | ||
var prefix = ''; | ||
var recursive = cmd.recursive !== 'no'; | ||
var dir = cmd.dir; | ||
if (!dir){ | ||
console.log('You need to print directory "fest-watch dir=..."'); | ||
process.exit(1); | ||
} | ||
if (dir[0] !== '/'){ | ||
dir = process.env.PWD + '/' + dir; | ||
} | ||
dir = dir.replace(/\/$/, '') + '/'; | ||
if (!existsSync(dir)){ | ||
console.log('directory "' + dir + '" does not exists'); | ||
process.exit(1); | ||
} | ||
var out_dir = cmd.out || dir; | ||
out_dir = out_dir.replace(/\/$/, '') + '/'; | ||
if (out_dir[0] !== '/'){ | ||
out_dir = process.env.PWD + '/' + out_dir; | ||
} | ||
var fest = (cmd.fest === 'no' ? false : true); | ||
var not_anonymous = cmd.anonymous === 'no'; | ||
if (not_anonymous) fest = false; | ||
var watched_files = {}; | ||
function do_compile(file, dir, out_dir, prefix){ | ||
console.log('compile: ' + dir + file); | ||
var source = compile(dir + file, '', ''); | ||
var file_name = (out_dir + file).replace(/\.xml/, '.js'); | ||
if (!existsSync(out_dir)){ | ||
fs.mkdirSync(out_dir); | ||
} | ||
if (fest){ | ||
fs.writeFileSync(file_name, ';(function(){var x=Function("return this")();if(!x.fest)x.fest={};x.fest["' + prefix + file.replace(/\.xml$/, '') + '"]=' + source + '})();', 'utf8'); | ||
} else if (not_anonymous) { | ||
fs.writeFileSync(file_name, "var " + prefix + file.replace(/\.xml$/, '') + "=" + source, 'utf8'); | ||
} else { | ||
fs.writeFileSync(file_name, source, 'utf8'); | ||
} | ||
} | ||
function findfiles(dir, out_dir, prefix){ | ||
fs.readdir(dir, function(err, files){ | ||
files.filter(function(file){return file.indexOf('.xml') > 0;}) | ||
.forEach(function(file){ | ||
console.log('watch: ' + file); | ||
do_compile(file, dir, out_dir, prefix); | ||
}); | ||
if (recursive){ | ||
files.filter(function(file){ return fs.statSync(dir + file).isDirectory() }) | ||
.forEach(function(file){ | ||
console.log('watch directory: ' + dir + file); | ||
findfiles(dir + file + '/', out_dir + file + '/', prefix + file + '/'); | ||
}); | ||
} | ||
}); | ||
} | ||
findfiles(dir, out_dir, prefix); | ||
require('./build')(); |
@@ -5,3 +5,3 @@ { | ||
"keywords": ["template", "templating", "html", "xml"], | ||
"version": "0.3.2", | ||
"version": "0.3.3", | ||
"repository": { | ||
@@ -8,0 +8,0 @@ "type": "git", |
@@ -42,4 +42,2 @@ # Fest | ||
```xml | ||
@@ -49,2 +47,12 @@ <fest:get name="name">{'some': 'data'}</fest:get> | ||
Если указать тег select, то выражение внутри выполнится и результирующая строка будет именем блока set. | ||
```xml | ||
<fest:script> | ||
var name = 'foo' | ||
</fest:srcipt> | ||
<fest:get select="name"/> | ||
<fest:set name="foo">foo</fest:set> | ||
<fest:set name="bar">bar</fest:set> | ||
``` | ||
### fest:element | ||
@@ -51,0 +59,0 @@ |
Sorry, the diff of this file is not supported yet
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
29
419
7
9
184915
2801