periodicjs
Version:
Periodic is a rapid enterprise application framework for data driven web and mobile applications.
258 lines (235 loc) • 9.7 kB
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Source: lib/periodicClass.js</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Source: lib/periodicClass.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>'use strict';
// const periodicSchema = require('./schema');
// const periodicModel = require('./model');
// const periodicConnect = require('./connect');
const Promisie = require('promisie');
const express = require('express');
const events = require('events');
const cache = require('memory-cache');
const CoreData = require('periodicjs.core.data');
const CoreFiles = require('periodicjs.core.files');
const CoreUtilities = require('periodicjs.core.utilities');
// const CoreController = require('periodicjs.core.controller');
const periodicInit = require('./init');
const periodicExtension = require('./extension');
const periodicCrud = require('./crud');
const periodicUtils = require('./utilities');
const periodicProxyHandler = require('./periodicProxyHandler');
/**
* periodic singleton class
*
* @class Periodic
*/
class Periodic {
/**
* Creates an instance of periodic.
* @param {any} [options={}]
* @param {boolean} options.debug use debugging logs
* @param {String} options.app_root the path to the application's root directory
* @return {object} proxied periodic singleton object
*
* @memberOf Periodic
*/
constructor(options = {}) {
//https://www.npmjs.com/package/express-react-engine
this.config = Object.assign({
debug: false,
setMaxListeners: 0,
app_root: process.cwd(),
configuration: {},
// settings: {},
}, options);
events.EventEmitter.defaultMaxListeners = this.config.setMaxListeners;
this.__class = {
init:periodicInit,
extension:periodicExtension,
crud:periodicCrud,
utils:periodicUtils,
proxyHandler:periodicProxyHandler,
};
this.settings = {};
this.utilities = periodicUtils;
this.cache = cache;
this.express = express;
this.workers;
this.numWorkers;
this.cluster;
this.app = express();
// this.connections = new Map();
this.status = new events.EventEmitter();
this.transforms = {
pre: {
CONNECT: {},
DELETE: {},
GET: {},
HEAD: {},
OPTIONS: {},
POST: {},
PUT: {},
},
post: {
CONNECT: {},
DELETE: {},
GET: {},
HEAD: {},
OPTIONS: {},
POST: {},
PUT: {},
},
};
this.controllers = {
core: new Map(),
extension: new Map(),
container: new Map(),
preTransforms: periodicUtils.middleware.preTransforms(this),
postTransforms: periodicUtils.middleware.postTransforms(this),
};
this.resources = {
standard_models: [],
databases: {
extensions: {},
container: {},
},
commands: {
extensions: new Map(),
container: new Map(),
},
};
this.locals = {
core: new Map(),
extensions: new Map(),
container: new Map(),
};
this.routers = new Map();
this.containers = new Map();
this.extensions = new Map();
this.servers = new Map();
this.datas = new Map();
this.dbs = new Map();
this.models = new Map();
this.tasks = {
resetExtensions: periodicInit.config.loadExtensions.bind(this),
installExtension: periodicExtension.install.installExtension.bind(this),
uninstallExtension: periodicExtension.uninstall.uninstallExtension.bind(this),
};
this.crud = {
config: {
create: periodicCrud.config.create.bind(this),
update: periodicCrud.config.update.bind(this),
remove: periodicCrud.config.remove.bind(this),
init: periodicCrud.config.init.bind(this),
get: periodicUtils.mock.tempPromise,
list: periodicUtils.mock.tempPromise,
},
ext: {
create: periodicCrud.ext.create.bind(this),
update: periodicUtils.mock.tempPromise,
remove: periodicCrud.ext.remove.bind(this),
get: periodicUtils.mock.tempPromise,
list: periodicCrud.ext.list.bind(this),
init: periodicCrud.ext.init.bind(this, false),
},
con: {
create: periodicUtils.mock.tempPromise,
update: periodicUtils.mock.tempPromise,
remove: periodicUtils.mock.tempPromise,
get: periodicUtils.mock.tempPromise,
list: periodicUtils.mock.tempPromise,
init: periodicCrud.ext.init.bind(this, 'container'),
},
};
this.logger = console;
this.logger.silly = console.log;
this.logger.debug = console.log;
this.logger.verbose = console.info;
this.logger.info = console.info;
this.logger.warn = console.info;
this.logger.error = console.error;
// this.db = undefined;
// this.app = {}; //express app
this.core = {
data: CoreData,
utilities: new CoreUtilities(this),
mailer: {},
files: CoreFiles,
// controller:
};
// console.log('this.core.controller',this.core.controller);
// this.controller = peroidicController.bind(this);
// this.container = peroidicContainer.bind(this);
// this.extension = peroidicExtension.bind(this);
return new Proxy(this, periodicProxyHandler.call(this));
}
/**
* initialize a periodic application, by creating folder structure, using a CLI application, cluster & fork the main thread, start the web server, use a socket server
* @param {Boolean} options.debug log debug output
* @param {String} options.app_root the path to the application's root directory
* @param {Object} options.settings set initial settings before configurations are loaded
*
* @returns {Promise} fully resolved periodic instance
* @memberOf periodic
*/
init(options = {}) {
process.setMaxListeners(this.config.setMaxListeners || 0);
this.status.emit('initializing', true);
this.config = Object.assign({}, this.config, options);
return new Promise((resolve, reject) => {
const completInit = periodicInit.runtime.completeInitialization.bind(this, resolve, reject);
Promisie.series([
periodicInit.timer.startTimer.bind(this),
periodicInit.setUpFolderStructure.bind(this),
periodicInit.config.loadConfiguration.bind(this),
periodicInit.runtime.configRuntimeEnvironment.bind(this),
periodicInit.config.loadAppSettings.bind(this),
periodicInit.logger.configureLogger.bind(this),
periodicInit.config.loadExtensions.bind(this),
periodicInit.config.setupGenericCoreMailer.bind(this),
periodicInit.config.setupGenericCoreController.bind(this),
periodicExtension.setup.setupExtensions.bind(this),
periodicExtension.setup.setupContainer.bind(this),
periodicInit.config.loadDatabases.bind(this),
periodicInit.config.loadExternalRouters.bind(this),
periodicInit.logger.catchProcessErrors.bind(this),
periodicInit.express.initializeExpress.bind(this),
periodicInit.cli.run.bind(this),
periodicInit.cluster.forkProcess.bind(this),
periodicInit.server.initializeServers.bind(this),
periodicInit.timer.endTimer.bind(this),
]).then(resolve)
.catch(completInit);
});
}
}
module.exports = Periodic;</code></pre>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-periodic.html">periodic</a></li></ul><h3>Classes</h3><ul><li><a href="Periodic.html">Periodic</a></li><li><a href="Periodic.Periodic.html">Periodic</a></li></ul><h3>Global</h3><ul><li><a href="global.html#_admin_prefix">_admin_prefix</a></li><li><a href="global.html#_manifest_prefix">_manifest_prefix</a></li><li><a href="global.html#_route_prefix">_route_prefix</a></li><li><a href="global.html#all_prefixes">all_prefixes</a></li><li><a href="global.html#configRuntimeEnvironment">configRuntimeEnvironment</a></li><li><a href="global.html#configureLogger">configureLogger</a></li><li><a href="global.html#configureLowkie">configureLowkie</a></li><li><a href="global.html#configureMongoose">configureMongoose</a></li><li><a href="global.html#configureSequelize">configureSequelize</a></li><li><a href="global.html#configureViews">configureViews</a></li><li><a href="global.html#endTimer">endTimer</a></li><li><a href="global.html#formatResponse">formatResponse</a></li><li><a href="global.html#getEnv">getEnv</a></li><li><a href="global.html#handler">handler</a></li><li><a href="global.html#initializeExpress">initializeExpress</a></li><li><a href="global.html#loadConfiguration">loadConfiguration</a></li><li><a href="global.html#setAppRunningEnv">setAppRunningEnv</a></li><li><a href="global.html#setUpFolderStructure">setUpFolderStructure</a></li><li><a href="global.html#startTimer">startTimer</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Jul 18 2018 23:08:12 GMT-0400 (Eastern Daylight Time)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>