UNPKG

cream-and-sugar

Version:

A deliciously functional syntax for JavaScript with native support for JSX

163 lines (111 loc) 3.06 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.compile = compile; exports.compileCode = compileCode; var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _utils = require('./utils'); var _finalize = require('./finalize'); var _finalize2 = _interopRequireDefault(_finalize); require('./nodes/Program'); require('./nodes/Functionizer'); require('./nodes/NewLine'); require('./nodes/Comment'); require('./nodes/String'); require('./nodes/Atom'); require('./nodes/Special'); require('./nodes/Identifier'); require('./nodes/Number'); require('./nodes/Lookup'); require('./nodes/Operation'); require('./nodes/Logic'); require('./nodes/Cons'); require('./nodes/Opposite'); require('./nodes/Binder'); require('./nodes/Arr'); require('./nodes/Obj'); require('./nodes/Comp'); require('./nodes/FunctionCall'); require('./nodes/Qualifier'); require('./nodes/Cond'); require('./nodes/Caseof'); require('./nodes/Fun-Polymorph'); require('./nodes/Assignment'); require('./nodes/TryCatch'); require('./nodes/Tuple'); require('./nodes/Import'); require('./nodes/Export'); require('./nodes/Html'); require('./nodes/List'); require('./nodes/Regexp'); require('./nodes/Wrap'); require('./nodes/BackCons'); require('./nodes/Pipe'); require('./nodes/Chain'); require('./nodes/ObjCons'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* * Export a function for initializing compilation. */ function compile(path, callback, options) { // Read in a file. return _fs2.default.readFile(path, function (err, result) { // Throw an error if we have one. if (err) { if (callback) { return callback(err); } else { throw err; } // If not, convert the result to a string and call compileCode with it. } else { return compileCode(result.toString(), callback, options); } }); } function compileCode(str, callback, options) { var tree = void 0; options = options || {}; // Make sure we always have a trailing newline str = /\n$/.test(str) ? str : str + '\n'; // Parse the tree. try { tree = _utils.parser.parse(str); } catch (err1) { if (callback) { return callback(err1); } else { throw err1; } } // Compile the tree try { tree.compile(); } catch (err2) { if (callback) { return callback(err2); } else { throw err2; } } // Get rid of some extraneous semis tree.shared.output = tree.shared.output.replace(/(\;)(\s+\;)+/g, '$1'); // Finalize the code if (options.finalize) { try { (0, _finalize2.default)(tree); } catch (err3) { if (callback) { return callback(err3); } else { throw err3; } } } // Log output if necessary options.log && console.log(tree.shared.output); // Return a call to the callback if it exists or the code if not return callback ? callback(undefined, tree.shared.output) : tree.shared.output; }