@resin/pinejs
Version:
Pine.js is a sophisticated rules-driven API engine that enables you to define rules in a structured subset of English. Those rules are used in order for Pine.js to generate a database schema and the associated [OData](http://www.odata.org/) API. This make
82 lines (72 loc) • 2.53 kB
text/typescript
import type * as Express from 'express';
import './sbvr-loader';
import * as Bluebird from 'bluebird';
import * as dbModule from '../database-layer/db';
import * as configLoader from '../config-loader/config-loader';
import * as migrator from '../migrator/migrator';
import * as sbvrUtils from '../sbvr-api/sbvr-utils';
export * as dbModule from '../database-layer/db';
export { PinejsSessionStore } from '../pinejs-session-store/pinejs-session-store';
export * as sbvrUtils from '../sbvr-api/sbvr-utils';
export * as permissions from '../sbvr-api/permissions';
export * as errors from '../sbvr-api/errors';
export * as env from '../config-loader/env';
export * as types from '../sbvr-api/common-types';
export type { configLoader as ConfigLoader };
export type { migrator as Migrator };
let databaseOptions: {
engine: string;
params: string;
};
if (dbModule.engines.websql != null) {
databaseOptions = {
engine: 'websql',
params: 'rulemotion',
};
} else {
let databaseURL: string;
if (process.env.DATABASE_URL) {
databaseURL = process.env.DATABASE_URL;
} else if (dbModule.engines.postgres != null) {
databaseURL = 'postgres://postgres:.@localhost:5432/postgres';
} else if (dbModule.engines.mysql == null) {
databaseURL = 'mysql://mysql:.@localhost:3306';
} else {
throw new Error('No supported database options available');
}
databaseOptions = {
engine: databaseURL.slice(0, databaseURL.indexOf(':')),
params: databaseURL,
};
}
const db = dbModule.connect(databaseOptions);
export const init = (
app: Express.Application,
config?: string | configLoader.Config,
): Bluebird<ReturnType<typeof configLoader.setup>> =>
Bluebird.try(async () => {
try {
await sbvrUtils.setup(app, db);
const cfgLoader = await configLoader.setup(app);
await cfgLoader.loadConfig(migrator.config);
const promises: Array<Promise<void>> = [];
if (process.env.SBVR_SERVER_ENABLED) {
const sbvrServer = await import('../data-server/sbvr-server');
const transactions = require('../http-transactions/transactions');
promises.push(cfgLoader.loadConfig(sbvrServer.config));
promises.push(
cfgLoader
.loadConfig(transactions.config)
.then(() => transactions.addModelHooks('data')),
);
}
if (!process.env.CONFIG_LOADER_DISABLED) {
promises.push(cfgLoader.loadApplicationConfig(config));
}
await Promise.all(promises);
return cfgLoader;
} catch (err) {
console.error('Error initialising server', err, err.stack);
process.exit(1);
}
});