UNPKG

alpaca

Version:

Alpaca provides the easiest and fastest way to generate interactive forms for the web and mobile devices. It runs simply as HTML5 or more elaborately using Bootstrap, jQuery Mobile or jQuery UI. Alpaca uses Handlebars to process JSON schema and provide

85 lines (82 loc) 3.23 kB
#!/usr/bin/env node /* * JavaScript Templates Compiler 2.4.0 * https://github.com/blueimp/JavaScript-Templates * * Copyright 2011, Sebastian Tschan * https://blueimp.net * * Licensed under the MIT license: * http://www.opensource.org/licenses/MIT */ /*jslint nomen: true, stupid: true */ /*global require, __dirname, process, console */ (function () { "use strict"; var tmpl = require("./tmpl.js").tmpl, fs = require("fs"), path = require("path"), uglifyJS = require("uglify-js"), // Retrieve the content of the minimal runtime: runtime = fs.readFileSync(__dirname + "/runtime.js", "utf8"), // A regular expression to parse templates from script tags in a HTML page: regexp = /<script( id="([\w\-]+)")? type="text\/x-tmpl"( id="([\w\-]+)")?>([\s\S]+?)<\/script>/gi, // A regular expression to match the helper function names: helperRegexp = new RegExp( tmpl.helper.match(/\w+(?=\s*=\s*function\s*\()/g).join("\\s*\\(|") + "\\s*\\(" ), // A list to store the function bodies: list = [], code; // Extend the Templating engine with a print method for the generated functions: tmpl.print = function (str) { // Only add helper functions if they are used inside of the template: var helper = helperRegexp.test(str) ? tmpl.helper : "", body = str.replace(tmpl.regexp, tmpl.func); if (helper || (/_e\s*\(/.test(body))) { helper = "_e=tmpl.encode" + helper + ","; } return "function(" + tmpl.arg + ",tmpl){" + ("var " + helper + "_s='" + body + "';return _s;") .split("_s+='';").join("") + "}"; }; // Loop through the command line arguments: process.argv.forEach(function (file, index) { var listLength = list.length, stats, content, result, id; // Skipt the first two arguments, which are "node" and the script: if (index > 1) { stats = fs.statSync(file); if (!stats.isFile()) { console.error(file + ' is not a file.'); return; } content = fs.readFileSync(file, "utf8"); while (true) { // Find templates in script tags: result = regexp.exec(content); if (!result) { break; } id = result[2] || result[4]; list.push("'" + id + "':" + tmpl.print(result[5])); } if (listLength === list.length) { // No template script tags found, use the complete content: id = path.basename(file, path.extname(file)); list.push("'" + id + "':" + tmpl.print(content)); } } }); if (!list.length) { console.error('Missing input file.'); return; } // Combine the generated functions as cache of the minimal runtime: code = runtime.replace("{}", "{" + list.join(",") + "}"); // Generate the minified code and print it to the console output: console.log(uglifyJS.minify(code, {fromString: true}).code); }());