123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- "use strict";
- var _index = _interopRequireDefault(require("../index"));
- var _parseServer = _interopRequireDefault(require("./definitions/parse-server"));
- var _cluster = _interopRequireDefault(require("cluster"));
- var _os = _interopRequireDefault(require("os"));
- var _runner = _interopRequireDefault(require("./utils/runner"));
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
- /* eslint-disable no-console */
- const help = function () {
- console.log(' Get Started guide:');
- console.log('');
- console.log(' Please have a look at the get started guide!');
- console.log(' http://docs.parseplatform.org/parse-server/guide/');
- console.log('');
- console.log('');
- console.log(' Usage with npm start');
- console.log('');
- console.log(' $ npm start -- path/to/config.json');
- console.log(' $ npm start -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL');
- console.log(' $ npm start -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL');
- console.log('');
- console.log('');
- console.log(' Usage:');
- console.log('');
- console.log(' $ parse-server path/to/config.json');
- console.log(' $ parse-server -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL');
- console.log(' $ parse-server -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL');
- console.log('');
- };
- (0, _runner.default)({
- definitions: _parseServer.default,
- help,
- usage: '[options] <path/to/configuration.json>',
- start: function (program, options, logOptions) {
- if (!options.appId || !options.masterKey) {
- program.outputHelp();
- console.error('');
- console.error('\u001b[31mERROR: appId and masterKey are required\u001b[0m');
- console.error('');
- process.exit(1);
- }
- if (options['liveQuery.classNames']) {
- options.liveQuery = options.liveQuery || {};
- options.liveQuery.classNames = options['liveQuery.classNames'];
- delete options['liveQuery.classNames'];
- }
- if (options['liveQuery.redisURL']) {
- options.liveQuery = options.liveQuery || {};
- options.liveQuery.redisURL = options['liveQuery.redisURL'];
- delete options['liveQuery.redisURL'];
- }
- if (options['liveQuery.redisOptions']) {
- options.liveQuery = options.liveQuery || {};
- options.liveQuery.redisOptions = options['liveQuery.redisOptions'];
- delete options['liveQuery.redisOptions'];
- }
- if (options.cluster) {
- const numCPUs = typeof options.cluster === 'number' ? options.cluster : _os.default.cpus().length;
- if (_cluster.default.isMaster) {
- logOptions();
- for (let i = 0; i < numCPUs; i++) {
- _cluster.default.fork();
- }
- _cluster.default.on('exit', (worker, code) => {
- console.log(`worker ${worker.process.pid} died (${code})... Restarting`);
- _cluster.default.fork();
- });
- } else {
- _index.default.startApp(options).then(() => {
- printSuccessMessage();
- }).catch(e => {
- console.error(e);
- process.exit(1);
- });
- }
- } else {
- _index.default.startApp(options).then(() => {
- logOptions();
- console.log('');
- printSuccessMessage();
- }).catch(e => {
- console.error(e);
- process.exit(1);
- });
- }
- function printSuccessMessage() {
- console.log('[' + process.pid + '] parse-server running on ' + options.serverURL);
- if (options.mountGraphQL) {
- console.log('[' + process.pid + '] GraphQL running on http://localhost:' + options.port + options.graphQLPath);
- }
- if (options.mountPlayground) {
- console.log('[' + process.pid + '] Playground running on http://localhost:' + options.port + options.playgroundPath);
- }
- }
- }
- });
- /* eslint-enable no-console */
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXJzZVNlcnZlciIsIl9jbHVzdGVyIiwiX29zIiwiX3J1bm5lciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhlbHAiLCJjb25zb2xlIiwibG9nIiwicnVubmVyIiwiZGVmaW5pdGlvbnMiLCJ1c2FnZSIsInN0YXJ0IiwicHJvZ3JhbSIsIm9wdGlvbnMiLCJsb2dPcHRpb25zIiwiYXBwSWQiLCJtYXN0ZXJLZXkiLCJvdXRwdXRIZWxwIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsImxpdmVRdWVyeSIsImNsYXNzTmFtZXMiLCJyZWRpc1VSTCIsInJlZGlzT3B0aW9ucyIsImNsdXN0ZXIiLCJudW1DUFVzIiwib3MiLCJjcHVzIiwibGVuZ3RoIiwiaXNNYXN0ZXIiLCJpIiwiZm9yayIsIm9uIiwid29ya2VyIiwiY29kZSIsInBpZCIsIlBhcnNlU2VydmVyIiwic3RhcnRBcHAiLCJ0aGVuIiwicHJpbnRTdWNjZXNzTWVzc2FnZSIsImNhdGNoIiwic2VydmVyVVJMIiwibW91bnRHcmFwaFFMIiwicG9ydCIsImdyYXBoUUxQYXRoIiwibW91bnRQbGF5Z3JvdW5kIiwicGxheWdyb3VuZFBhdGgiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL3BhcnNlLXNlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgUGFyc2VTZXJ2ZXIgZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IGRlZmluaXRpb25zIGZyb20gJy4vZGVmaW5pdGlvbnMvcGFyc2Utc2VydmVyJztcbmltcG9ydCBjbHVzdGVyIGZyb20gJ2NsdXN0ZXInO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBydW5uZXIgZnJvbSAnLi91dGlscy9ydW5uZXInO1xuXG5jb25zdCBoZWxwID0gZnVuY3Rpb24gKCkge1xuICBjb25zb2xlLmxvZygnICBHZXQgU3RhcnRlZCBndWlkZTonKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZygnICAgIFBsZWFzZSBoYXZlIGEgbG9vayBhdCB0aGUgZ2V0IHN0YXJ0ZWQgZ3VpZGUhJyk7XG4gIGNvbnNvbGUubG9nKCcgICAgaHR0cDovL2RvY3MucGFyc2VwbGF0Zm9ybS5vcmcvcGFyc2Utc2VydmVyL2d1aWRlLycpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coJyAgVXNhZ2Ugd2l0aCBucG0gc3RhcnQnKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZygnICAgICQgbnBtIHN0YXJ0IC0tIHBhdGgvdG8vY29uZmlnLmpzb24nKTtcbiAgY29uc29sZS5sb2coJyAgICAkIG5wbSBzdGFydCAtLSAtLWFwcElkIEFQUF9JRCAtLW1hc3RlcktleSBNQVNURVJfS0VZIC0tc2VydmVyVVJMIHNlcnZlclVSTCcpO1xuICBjb25zb2xlLmxvZygnICAgICQgbnBtIHN0YXJ0IC0tIC0tYXBwSWQgQVBQX0lEIC0tbWFzdGVyS2V5IE1BU1RFUl9LRVkgLS1zZXJ2ZXJVUkwgc2VydmVyVVJMJyk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZygnICBVc2FnZTonKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZygnICAgICQgcGFyc2Utc2VydmVyIHBhdGgvdG8vY29uZmlnLmpzb24nKTtcbiAgY29uc29sZS5sb2coJyAgICAkIHBhcnNlLXNlcnZlciAtLSAtLWFwcElkIEFQUF9JRCAtLW1hc3RlcktleSBNQVNURVJfS0VZIC0tc2VydmVyVVJMIHNlcnZlclVSTCcpO1xuICBjb25zb2xlLmxvZygnICAgICQgcGFyc2Utc2VydmVyIC0tIC0tYXBwSWQgQVBQX0lEIC0tbWFzdGVyS2V5IE1BU1RFUl9LRVkgLS1zZXJ2ZXJVUkwgc2VydmVyVVJMJyk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbn07XG5cbnJ1bm5lcih7XG4gIGRlZmluaXRpb25zLFxuICBoZWxwLFxuICB1c2FnZTogJ1tvcHRpb25zXSA8cGF0aC90by9jb25maWd1cmF0aW9uLmpzb24+JyxcbiAgc3RhcnQ6IGZ1bmN0aW9uIChwcm9ncmFtLCBvcHRpb25zLCBsb2dPcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLmFwcElkIHx8ICFvcHRpb25zLm1hc3RlcktleSkge1xuICAgICAgcHJvZ3JhbS5vdXRwdXRIZWxwKCk7XG4gICAgICBjb25zb2xlLmVycm9yKCcnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1xcdTAwMWJbMzFtRVJST1I6IGFwcElkIGFuZCBtYXN0ZXJLZXkgYXJlIHJlcXVpcmVkXFx1MDAxYlswbScpO1xuICAgICAgY29uc29sZS5lcnJvcignJyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnNbJ2xpdmVRdWVyeS5jbGFzc05hbWVzJ10pIHtcbiAgICAgIG9wdGlvbnMubGl2ZVF1ZXJ5ID0gb3B0aW9ucy5saXZlUXVlcnkgfHwge307XG4gICAgICBvcHRpb25zLmxpdmVRdWVyeS5jbGFzc05hbWVzID0gb3B0aW9uc1snbGl2ZVF1ZXJ5LmNsYXNzTmFtZXMnXTtcbiAgICAgIGRlbGV0ZSBvcHRpb25zWydsaXZlUXVlcnkuY2xhc3NOYW1lcyddO1xuICAgIH1cbiAgICBpZiAob3B0aW9uc1snbGl2ZVF1ZXJ5LnJlZGlzVVJMJ10pIHtcbiAgICAgIG9wdGlvbnMubGl2ZVF1ZXJ5ID0gb3B0aW9ucy5saXZlUXVlcnkgfHwge307XG4gICAgICBvcHRpb25zLmxpdmVRdWVyeS5yZWRpc1VSTCA9IG9wdGlvbnNbJ2xpdmVRdWVyeS5yZWRpc1VSTCddO1xuICAgICAgZGVsZXRlIG9wdGlvbnNbJ2xpdmVRdWVyeS5yZWRpc1VSTCddO1xuICAgIH1cbiAgICBpZiAob3B0aW9uc1snbGl2ZVF1ZXJ5LnJlZGlzT3B0aW9ucyddKSB7XG4gICAgICBvcHRpb25zLmxpdmVRdWVyeSA9IG9wdGlvbnMubGl2ZVF1ZXJ5IHx8IHt9O1xuICAgICAgb3B0aW9ucy5saXZlUXVlcnkucmVkaXNPcHRpb25zID0gb3B0aW9uc1snbGl2ZVF1ZXJ5LnJlZGlzT3B0aW9ucyddO1xuICAgICAgZGVsZXRlIG9wdGlvbnNbJ2xpdmVRdWVyeS5yZWRpc09wdGlvbnMnXTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jbHVzdGVyKSB7XG4gICAgICBjb25zdCBudW1DUFVzID0gdHlwZW9mIG9wdGlvbnMuY2x1c3RlciA9PT0gJ251bWJlcicgPyBvcHRpb25zLmNsdXN0ZXIgOiBvcy5jcHVzKCkubGVuZ3RoO1xuICAgICAgaWYgKGNsdXN0ZXIuaXNNYXN0ZXIpIHtcbiAgICAgICAgbG9nT3B0aW9ucygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNQVXM7IGkrKykge1xuICAgICAgICAgIGNsdXN0ZXIuZm9yaygpO1xuICAgICAgICB9XG4gICAgICAgIGNsdXN0ZXIub24oJ2V4aXQnLCAod29ya2VyLCBjb2RlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coYHdvcmtlciAke3dvcmtlci5wcm9jZXNzLnBpZH0gZGllZCAoJHtjb2RlfSkuLi4gUmVzdGFydGluZ2ApO1xuICAgICAgICAgIGNsdXN0ZXIuZm9yaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFBhcnNlU2VydmVyLnN0YXJ0QXBwKG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcHJpbnRTdWNjZXNzTWVzc2FnZSgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgUGFyc2VTZXJ2ZXIuc3RhcnRBcHAob3B0aW9ucylcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGxvZ09wdGlvbnMoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzTWVzc2FnZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByaW50U3VjY2Vzc01lc3NhZ2UoKSB7XG4gICAgICBjb25zb2xlLmxvZygnWycgKyBwcm9jZXNzLnBpZCArICddIHBhcnNlLXNlcnZlciBydW5uaW5nIG9uICcgKyBvcHRpb25zLnNlcnZlclVSTCk7XG4gICAgICBpZiAob3B0aW9ucy5tb3VudEdyYXBoUUwpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgJ1snICtcbiAgICAgICAgICAgIHByb2Nlc3MucGlkICtcbiAgICAgICAgICAgICddIEdyYXBoUUwgcnVubmluZyBvbiBodHRwOi8vbG9jYWxob3N0OicgK1xuICAgICAgICAgICAgb3B0aW9ucy5wb3J0ICtcbiAgICAgICAgICAgIG9wdGlvbnMuZ3JhcGhRTFBhdGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLm1vdW50UGxheWdyb3VuZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAnWycgK1xuICAgICAgICAgICAgcHJvY2Vzcy5waWQgK1xuICAgICAgICAgICAgJ10gUGxheWdyb3VuZCBydW5uaW5nIG9uIGh0dHA6Ly9sb2NhbGhvc3Q6JyArXG4gICAgICAgICAgICBvcHRpb25zLnBvcnQgK1xuICAgICAgICAgICAgb3B0aW9ucy5wbGF5Z3JvdW5kUGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbiJdLCJtYXBwaW5ncyI6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
|