summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/ajv/scripts/compile-dots.js
diff options
context:
space:
mode:
authorRebecca Turner <me@re-becca.org>2018-04-20 18:26:37 -0700
committerRebecca Turner <me@re-becca.org>2018-05-24 23:24:45 -0700
commit468ab4519e1b92473acefb22801497a1af6aebae (patch)
treebdac1d062cd4b094bde3a21147bab5d82c792ece /deps/npm/node_modules/ajv/scripts/compile-dots.js
parentac8226115e2192a7a46ba07789fa5136f74223e1 (diff)
downloadandroid-node-v8-468ab4519e1b92473acefb22801497a1af6aebae.tar.gz
android-node-v8-468ab4519e1b92473acefb22801497a1af6aebae.tar.bz2
android-node-v8-468ab4519e1b92473acefb22801497a1af6aebae.zip
deps: upgrade npm to 6.1.0
PR-URL: https://github.com/nodejs/node/pull/20190 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Diffstat (limited to 'deps/npm/node_modules/ajv/scripts/compile-dots.js')
-rw-r--r--deps/npm/node_modules/ajv/scripts/compile-dots.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/deps/npm/node_modules/ajv/scripts/compile-dots.js b/deps/npm/node_modules/ajv/scripts/compile-dots.js
new file mode 100644
index 0000000000..5a21a7dddf
--- /dev/null
+++ b/deps/npm/node_modules/ajv/scripts/compile-dots.js
@@ -0,0 +1,73 @@
+//compile doT templates to js functions
+'use strict';
+
+var glob = require('glob')
+ , fs = require('fs')
+ , path = require('path')
+ , doT = require('dot')
+ , beautify = require('js-beautify').js_beautify;
+
+var defsRootPath = process.argv[2] || path.join(__dirname, '../lib');
+
+var defs = {};
+var defFiles = glob.sync('./dot/**/*.def', { cwd: defsRootPath });
+defFiles.forEach(function (f) {
+ var name = path.basename(f, '.def');
+ defs[name] = fs.readFileSync(path.join(defsRootPath, f));
+});
+
+var filesRootPath = process.argv[3] || path.join(__dirname, '../lib');
+var files = glob.sync('./dot/**/*.jst', { cwd: filesRootPath });
+
+var dotjsPath = path.join(filesRootPath, './dotjs');
+try { fs.mkdirSync(dotjsPath); } catch(e) {}
+
+console.log('\n\nCompiling:');
+
+var FUNCTION_NAME = /function\s+anonymous\s*\(it[^)]*\)\s*{/;
+var OUT_EMPTY_STRING = /out\s*\+=\s*'\s*';/g;
+var ISTANBUL = /'(istanbul[^']+)';/g;
+var ERROR_KEYWORD = /\$errorKeyword/g;
+var ERROR_KEYWORD_OR = /\$errorKeyword\s+\|\|/g;
+var VARS = [
+ '$errs', '$valid', '$lvl', '$data', '$dataLvl',
+ '$errorKeyword', '$closingBraces', '$schemaPath',
+ '$validate'
+];
+
+files.forEach(function (f) {
+ var keyword = path.basename(f, '.jst');
+ var targetPath = path.join(dotjsPath, keyword + '.js');
+ var template = fs.readFileSync(path.join(filesRootPath, f));
+ var code = doT.compile(template, defs);
+ code = code.toString()
+ .replace(OUT_EMPTY_STRING, '')
+ .replace(FUNCTION_NAME, 'function generate_' + keyword + '(it, $keyword, $ruleType) {')
+ .replace(ISTANBUL, '/* $1 */');
+ removeAlwaysFalsyInOr();
+ VARS.forEach(removeUnusedVar);
+ code = "'use strict';\nmodule.exports = " + code;
+ code = beautify(code, { indent_size: 2 }) + '\n';
+ fs.writeFileSync(targetPath, code);
+ console.log('compiled', keyword);
+
+ function removeUnusedVar(v) {
+ v = v.replace(/\$/g, '\\$$');
+ var regexp = new RegExp(v + '[^A-Za-z0-9_$]', 'g');
+ var count = occurrences(regexp);
+ if (count == 1) {
+ regexp = new RegExp('var\\s+' + v + '\\s*=[^;]+;|var\\s+' + v + ';');
+ code = code.replace(regexp, '');
+ }
+ }
+
+ function removeAlwaysFalsyInOr() {
+ var countUsed = occurrences(ERROR_KEYWORD);
+ var countOr = occurrences(ERROR_KEYWORD_OR);
+ if (countUsed == countOr + 1) code = code.replace(ERROR_KEYWORD_OR, '');
+ }
+
+ function occurrences(regexp) {
+ return (code.match(regexp) || []).length;
+ }
+});