UNPKG

@aplus/core

Version:

⭐ Axway Amplify module building Alloy projects on Appcelerator Titanium SDK Framework

208 lines (176 loc) 6.82 kB
"use strict"; /*** * __ _ __ __ * ____ ___ ____ / /_ (_)/ /___ / /_ ___ _____ ____ * / __ `__ \ / __ \ / __ \ / // // _ \ / __ \ / _ \ / ___// __ \ * / / / / / // /_/ // /_/ // // // __// / / // __// / / /_/ / * /_/ /_/ /_/ \____//_.___//_//_/ \___//_/ /_/ \___//_/ \____/ * * mobile solutions for everyday heroes * * @file * Alloy+ => Mobile framework for building upon Appcelerator Alloy projects * * @module * @aplus/core * * @author * Brenton House <brenton.house@gmail.com> * * @copyright * Copyright (c) 2016 by Superhero Studios Incorporated. All Rights Reserved. * * @license * Licensed under the terms of the MIT License (MIT) * Please see the LICENSE.md included with this distribution for details. * */ var _ = require("lodash"); var path = require("path"); var resolve = require("resolve"); // var config; var _event; var debug = require('debug'); var log = debug('aplus'); var warn = debug('aplus'); debug.log = console.info.bind(console); function handler() {} module.exports = handler; // var uglifyjs = require("uglify-js"); handler.preparse = function(func) { console.error("********* WRAPPING uglifyjs.parse **********"); return _.wrap(func, function(func, code, options) { console.error("********* PRE:PARSE **********"); // console.warn(JSON.stringify(code, null, 2)); // console.warn(JSON.stringify(options, null, 2)); var params = { code: code }; executeScripts("preparse", params); // console.error("final-code: " + params.code); return func(params.code, options); }); } function splitTasks(tasks) { var results = []; if(!_.isArray(tasks)) { tasks = [tasks]; } // handler.logger.trace("tasks: " + JSON.stringify(tasks, null, 2)); _.forEach(tasks, function(task) { if(_.isArray(task.events) && !_.isEmpty(task.events)) { _.forEach(task.events, function(event) { var splitTask = _.cloneDeep(task); splitTask.events = event; results.push(splitTask); }); } else { results.push(task); } }); return results; } function configureTasks(tasks) { var configuredTasks = []; var importedTasks = []; // handler.logger.trace("tasks coming into configureTasks(): " + JSON.stringify(tasks, null, 2)); _.forEach(tasks, function(task) { // handler.logger.trace("task: " + JSON.stringify(task, null, 2)); if(_.isString(task)) { handler.logger.trace("getting default tasks for module: " + task); var target = require(resolve.sync(task, { basedir: handler.event.dir.project })); importedTasks = importedTasks.concat(target.tasks || []); // handler.logger.error("target.tasks: " + JSON.stringify(target.tasks, null, 2)); // handler.logger.warn("imported tasks: " + JSON.stringify(importedTasks, null, 2)); return true; } else { // handler.logger.trace("adding task: " + JSON.stringify(task, null, 2)); configuredTasks.push(task); } }); if(!_.isEmpty(importedTasks)) { handler.logger.debug("Configuring importedTasks") configuredTasks = configuredTasks.concat(configureTasks(importedTasks)); // tasks = _.uniqWith(tasks, function(task1,task2){ // return (task1.module === task2.module) && (task1.event === task2.event) && (task1.params === task2.params); // }); } else { handler.configuredTasks = splitTasks(configuredTasks); // handler.logger.trace("handler.configuredTasks: " + JSON.stringify(handler.configuredTasks, null, 2)); } // handler.configuredTasks = splitTasks(configuredTasks); // handler.logger.warn("handler.configuredTasks: " + JSON.stringify(handler.configuredTasks, null, 2)); // return configuredTasks; } var loadConfig = function() { handler.logger.debug("Loading alloy config file"); // handler.config = require(path.join(path.relative(__dirname, handler.event.dir.resourcesPlatform), "alloy", "CFG")); handler.config = require(path.join(handler.event.dir.resourcesPlatform, "alloy", "CFG")); handler.logger.trace(JSON.stringify(handler.event, null, 2)); // handler.logger.trace(JSON.stringify(handler.config, null, 2)); handler.config.tasks = handler.config.tasks || []; var tasks = _.cloneDeep(handler.config.tasks); // handler.logger.trace("handler.config.tasks: " + JSON.stringify(handler.config.tasks, null, 2)); tasks = configureTasks(tasks); } Object.defineProperty(handler, "event", { get: function() { return _event; }, set: function(event) { if(!_event) { _event = event; event.dir.resourcesPlatform = path.join(event.dir.resources, event.alloyConfig.platform === 'ios' ? 'iphone' : event.alloyConfig.platform); loadConfig(); } else { _event = event; } }, enumerable: true, configurable: false }); function executeScripts(eventName, params) { // handler.logger.trace("handler.configuredTasks: " + JSON.stringify(handler.configuredTasks, null, 2)); var tasks = _.filter(handler.configuredTasks || [], ['events', eventName]); handler.logger.trace("task to execute: " + JSON.stringify(tasks, null, 2)); params = params || {}; _.forEach(tasks, function(task) { //TODO: Check to make sure task is an object... var taskParams = { event: handler.event, config: handler.config, logger: handler.logger, code: params.code, }; _.defaults(taskParams, task); handler.logger.debug("executing task: " + task.module); var target = require(resolve.sync(task.module, { basedir: handler.event.dir.project })); _.isFunction(target.execute) && target.execute(taskParams); if(taskParams.code) { // handler.logger.error(taskParams.code); params.code = taskParams.code; } }); } var events = ["preload", "precompile", "postcompile", "appjs"]; _.forEach(events, function(eventName) { handler[eventName] = function(event, logger) { // handler.logger = logger; debug.trace = logger.trace.bind(logger); debug.warn = logger.debug.bind(logger); debug.info = logger.info.bind(logger); debug.warn = logger.warn.bind(logger); debug.error = logger.error.bind(logger); handler.logger = debug; handler.logger.warn("********************* STARTING EVENT: " + eventName + " ***************************"); handler.logger = logger; // debug.trace = logger.trace.bind(logger); // debug.warn = logger.debug.bind(logger); // debug.info = logger.info.bind(logger); // debug.warn = logger.warn.bind(logger); // debug.error = logger.error.bind(logger); // handler.logger = debug; // handler.logger.warn("THIS IS A TEST!!!"); handler.event = event; executeScripts(eventName); handler.logger.warn("********************* FINISHED EVENT: " + eventName + " ***************************"); } });