@@ -1,30 +1,30 @@
|
||||
import authDataManager from '../Adapters/Auth';
|
||||
import { ParseServerOptions } from '../Options';
|
||||
import { loadAdapter } from '../Adapters/AdapterLoader';
|
||||
import defaults from '../defaults';
|
||||
import url from 'url';
|
||||
import authDataManager from '../Adapters/Auth';
|
||||
import { ParseServerOptions } from '../Options';
|
||||
import { loadAdapter } from '../Adapters/AdapterLoader';
|
||||
import defaults from '../defaults';
|
||||
import url from 'url';
|
||||
// Controllers
|
||||
import { LoggerController } from './LoggerController';
|
||||
import { FilesController } from './FilesController';
|
||||
import { HooksController } from './HooksController';
|
||||
import { UserController } from './UserController';
|
||||
import { CacheController } from './CacheController';
|
||||
import { LiveQueryController } from './LiveQueryController';
|
||||
import { AnalyticsController } from './AnalyticsController';
|
||||
import { PushController } from './PushController';
|
||||
import { PushQueue } from '../Push/PushQueue';
|
||||
import { PushWorker } from '../Push/PushWorker';
|
||||
import DatabaseController from './DatabaseController';
|
||||
import SchemaCache from './SchemaCache';
|
||||
import { LoggerController } from './LoggerController';
|
||||
import { FilesController } from './FilesController';
|
||||
import { HooksController } from './HooksController';
|
||||
import { UserController } from './UserController';
|
||||
import { CacheController } from './CacheController';
|
||||
import { LiveQueryController } from './LiveQueryController';
|
||||
import { AnalyticsController } from './AnalyticsController';
|
||||
import { PushController } from './PushController';
|
||||
import { PushQueue } from '../Push/PushQueue';
|
||||
import { PushWorker } from '../Push/PushWorker';
|
||||
import DatabaseController from './DatabaseController';
|
||||
import SchemaCache from './SchemaCache';
|
||||
|
||||
// Adapters
|
||||
import { GridStoreAdapter } from '../Adapters/Files/GridStoreAdapter';
|
||||
import { GridStoreAdapter } from '../Adapters/Files/GridStoreAdapter';
|
||||
import { WinstonLoggerAdapter } from '../Adapters/Logger/WinstonLoggerAdapter';
|
||||
import { InMemoryCacheAdapter } from '../Adapters/Cache/InMemoryCacheAdapter';
|
||||
import { AnalyticsAdapter } from '../Adapters/Analytics/AnalyticsAdapter';
|
||||
import MongoStorageAdapter from '../Adapters/Storage/Mongo/MongoStorageAdapter';
|
||||
import PostgresStorageAdapter from '../Adapters/Storage/Postgres/PostgresStorageAdapter';
|
||||
import ParsePushAdapter from '@parse/push-adapter';
|
||||
import { AnalyticsAdapter } from '../Adapters/Analytics/AnalyticsAdapter';
|
||||
import MongoStorageAdapter from '../Adapters/Storage/Mongo/MongoStorageAdapter';
|
||||
import PostgresStorageAdapter from '../Adapters/Storage/Postgres/PostgresStorageAdapter';
|
||||
import ParsePushAdapter from '@parse/push-adapter';
|
||||
|
||||
export function getControllers(options: ParseServerOptions) {
|
||||
const loggerController = getLoggerController(options);
|
||||
@@ -35,7 +35,7 @@ export function getControllers(options: ParseServerOptions) {
|
||||
hasPushScheduledSupport,
|
||||
hasPushSupport,
|
||||
pushControllerQueue,
|
||||
pushWorker
|
||||
pushWorker,
|
||||
} = getPushController(options);
|
||||
const cacheController = getCacheController(options);
|
||||
const analyticsController = getAnalyticsController(options);
|
||||
@@ -61,7 +61,9 @@ export function getControllers(options: ParseServerOptions) {
|
||||
};
|
||||
}
|
||||
|
||||
export function getLoggerController(options: ParseServerOptions): LoggerController {
|
||||
export function getLoggerController(
|
||||
options: ParseServerOptions
|
||||
): LoggerController {
|
||||
const {
|
||||
appId,
|
||||
jsonLogs,
|
||||
@@ -72,11 +74,17 @@ export function getLoggerController(options: ParseServerOptions): LoggerControll
|
||||
loggerAdapter,
|
||||
} = options;
|
||||
const loggerOptions = { jsonLogs, logsFolder, verbose, logLevel, silent };
|
||||
const loggerControllerAdapter = loadAdapter(loggerAdapter, WinstonLoggerAdapter, loggerOptions);
|
||||
const loggerControllerAdapter = loadAdapter(
|
||||
loggerAdapter,
|
||||
WinstonLoggerAdapter,
|
||||
loggerOptions
|
||||
);
|
||||
return new LoggerController(loggerControllerAdapter, appId, loggerOptions);
|
||||
}
|
||||
|
||||
export function getFilesController(options: ParseServerOptions): FilesController {
|
||||
export function getFilesController(
|
||||
options: ParseServerOptions
|
||||
): FilesController {
|
||||
const {
|
||||
appId,
|
||||
databaseURI,
|
||||
@@ -90,43 +98,52 @@ export function getFilesController(options: ParseServerOptions): FilesController
|
||||
const filesControllerAdapter = loadAdapter(filesAdapter, () => {
|
||||
return new GridStoreAdapter(databaseURI);
|
||||
});
|
||||
return new FilesController(filesControllerAdapter, appId, { preserveFileName });
|
||||
return new FilesController(filesControllerAdapter, appId, {
|
||||
preserveFileName,
|
||||
});
|
||||
}
|
||||
|
||||
export function getUserController(options: ParseServerOptions): UserController {
|
||||
const {
|
||||
appId,
|
||||
emailAdapter,
|
||||
verifyUserEmails,
|
||||
} = options;
|
||||
const { appId, emailAdapter, verifyUserEmails } = options;
|
||||
const emailControllerAdapter = loadAdapter(emailAdapter);
|
||||
return new UserController(emailControllerAdapter, appId, { verifyUserEmails });
|
||||
return new UserController(emailControllerAdapter, appId, {
|
||||
verifyUserEmails,
|
||||
});
|
||||
}
|
||||
|
||||
export function getCacheController(options: ParseServerOptions): CacheController {
|
||||
const {
|
||||
appId,
|
||||
export function getCacheController(
|
||||
options: ParseServerOptions
|
||||
): CacheController {
|
||||
const { appId, cacheAdapter, cacheTTL, cacheMaxSize } = options;
|
||||
const cacheControllerAdapter = loadAdapter(
|
||||
cacheAdapter,
|
||||
cacheTTL,
|
||||
cacheMaxSize,
|
||||
} = options;
|
||||
const cacheControllerAdapter = loadAdapter(cacheAdapter, InMemoryCacheAdapter, {appId: appId, ttl: cacheTTL, maxSize: cacheMaxSize });
|
||||
InMemoryCacheAdapter,
|
||||
{ appId: appId, ttl: cacheTTL, maxSize: cacheMaxSize }
|
||||
);
|
||||
return new CacheController(cacheControllerAdapter, appId);
|
||||
}
|
||||
|
||||
export function getAnalyticsController(options: ParseServerOptions): AnalyticsController {
|
||||
const {
|
||||
export function getAnalyticsController(
|
||||
options: ParseServerOptions
|
||||
): AnalyticsController {
|
||||
const { analyticsAdapter } = options;
|
||||
const analyticsControllerAdapter = loadAdapter(
|
||||
analyticsAdapter,
|
||||
} = options;
|
||||
const analyticsControllerAdapter = loadAdapter(analyticsAdapter, AnalyticsAdapter);
|
||||
AnalyticsAdapter
|
||||
);
|
||||
return new AnalyticsController(analyticsControllerAdapter);
|
||||
}
|
||||
|
||||
export function getLiveQueryController(options: ParseServerOptions): LiveQueryController {
|
||||
export function getLiveQueryController(
|
||||
options: ParseServerOptions
|
||||
): LiveQueryController {
|
||||
return new LiveQueryController(options.liveQuery);
|
||||
}
|
||||
|
||||
export function getDatabaseController(options: ParseServerOptions, cacheController: CacheController): DatabaseController {
|
||||
export function getDatabaseController(
|
||||
options: ParseServerOptions,
|
||||
cacheController: CacheController
|
||||
): DatabaseController {
|
||||
const {
|
||||
databaseURI,
|
||||
databaseOptions,
|
||||
@@ -134,39 +151,48 @@ export function getDatabaseController(options: ParseServerOptions, cacheControll
|
||||
schemaCacheTTL,
|
||||
enableSingleSchemaCache,
|
||||
} = options;
|
||||
let {
|
||||
let { databaseAdapter } = options;
|
||||
if (
|
||||
(databaseOptions ||
|
||||
(databaseURI && databaseURI !== defaults.databaseURI) ||
|
||||
collectionPrefix !== defaults.collectionPrefix) &&
|
||||
databaseAdapter
|
||||
} = options;
|
||||
if ((databaseOptions || (databaseURI && databaseURI !== defaults.databaseURI) || collectionPrefix !== defaults.collectionPrefix) && databaseAdapter) {
|
||||
) {
|
||||
throw 'You cannot specify both a databaseAdapter and a databaseURI/databaseOptions/collectionPrefix.';
|
||||
} else if (!databaseAdapter) {
|
||||
databaseAdapter = getDatabaseAdapter(databaseURI, collectionPrefix, databaseOptions)
|
||||
databaseAdapter = getDatabaseAdapter(
|
||||
databaseURI,
|
||||
collectionPrefix,
|
||||
databaseOptions
|
||||
);
|
||||
} else {
|
||||
databaseAdapter = loadAdapter(databaseAdapter)
|
||||
databaseAdapter = loadAdapter(databaseAdapter);
|
||||
}
|
||||
return new DatabaseController(databaseAdapter, new SchemaCache(cacheController, schemaCacheTTL, enableSingleSchemaCache));
|
||||
return new DatabaseController(
|
||||
databaseAdapter,
|
||||
new SchemaCache(cacheController, schemaCacheTTL, enableSingleSchemaCache)
|
||||
);
|
||||
}
|
||||
|
||||
export function getHooksController(options: ParseServerOptions, databaseController: DatabaseController): HooksController {
|
||||
const {
|
||||
appId,
|
||||
webhookKey,
|
||||
} = options;
|
||||
export function getHooksController(
|
||||
options: ParseServerOptions,
|
||||
databaseController: DatabaseController
|
||||
): HooksController {
|
||||
const { appId, webhookKey } = options;
|
||||
return new HooksController(appId, databaseController, webhookKey);
|
||||
}
|
||||
|
||||
interface PushControlling {
|
||||
pushController: PushController,
|
||||
hasPushScheduledSupport: boolean,
|
||||
pushControllerQueue: PushQueue,
|
||||
pushWorker: PushWorker
|
||||
pushController: PushController;
|
||||
hasPushScheduledSupport: boolean;
|
||||
pushControllerQueue: PushQueue;
|
||||
pushWorker: PushWorker;
|
||||
}
|
||||
|
||||
export function getPushController(options: ParseServerOptions): PushControlling {
|
||||
const {
|
||||
scheduledPush,
|
||||
push,
|
||||
} = options;
|
||||
export function getPushController(
|
||||
options: ParseServerOptions
|
||||
): PushControlling {
|
||||
const { scheduledPush, push } = options;
|
||||
|
||||
const pushOptions = Object.assign({}, push);
|
||||
const pushQueueOptions = pushOptions.queueOptions || {};
|
||||
@@ -175,16 +201,18 @@ export function getPushController(options: ParseServerOptions): PushControlling
|
||||
}
|
||||
|
||||
// Pass the push options too as it works with the default
|
||||
const pushAdapter = loadAdapter(pushOptions && pushOptions.adapter, ParsePushAdapter, pushOptions);
|
||||
const pushAdapter = loadAdapter(
|
||||
pushOptions && pushOptions.adapter,
|
||||
ParsePushAdapter,
|
||||
pushOptions
|
||||
);
|
||||
// We pass the options and the base class for the adatper,
|
||||
// Note that passing an instance would work too
|
||||
const pushController = new PushController();
|
||||
const hasPushSupport = !!(pushAdapter && push);
|
||||
const hasPushScheduledSupport = hasPushSupport && (scheduledPush === true);
|
||||
const hasPushScheduledSupport = hasPushSupport && scheduledPush === true;
|
||||
|
||||
const {
|
||||
disablePushWorker
|
||||
} = pushQueueOptions;
|
||||
const { disablePushWorker } = pushQueueOptions;
|
||||
|
||||
const pushControllerQueue = new PushQueue(pushQueueOptions);
|
||||
let pushWorker;
|
||||
@@ -196,36 +224,39 @@ export function getPushController(options: ParseServerOptions): PushControlling
|
||||
hasPushSupport,
|
||||
hasPushScheduledSupport,
|
||||
pushControllerQueue,
|
||||
pushWorker
|
||||
}
|
||||
pushWorker,
|
||||
};
|
||||
}
|
||||
|
||||
export function getAuthDataManager(options: ParseServerOptions) {
|
||||
const {
|
||||
auth,
|
||||
enableAnonymousUsers
|
||||
} = options;
|
||||
return authDataManager(auth, enableAnonymousUsers)
|
||||
const { auth, enableAnonymousUsers } = options;
|
||||
return authDataManager(auth, enableAnonymousUsers);
|
||||
}
|
||||
|
||||
export function getDatabaseAdapter(databaseURI, collectionPrefix, databaseOptions) {
|
||||
export function getDatabaseAdapter(
|
||||
databaseURI,
|
||||
collectionPrefix,
|
||||
databaseOptions
|
||||
) {
|
||||
let protocol;
|
||||
try {
|
||||
const parsedURI = url.parse(databaseURI);
|
||||
protocol = parsedURI.protocol ? parsedURI.protocol.toLowerCase() : null;
|
||||
} catch(e) { /* */ }
|
||||
} catch (e) {
|
||||
/* */
|
||||
}
|
||||
switch (protocol) {
|
||||
case 'postgres:':
|
||||
return new PostgresStorageAdapter({
|
||||
uri: databaseURI,
|
||||
collectionPrefix,
|
||||
databaseOptions
|
||||
});
|
||||
default:
|
||||
return new MongoStorageAdapter({
|
||||
uri: databaseURI,
|
||||
collectionPrefix,
|
||||
mongoOptions: databaseOptions,
|
||||
});
|
||||
case 'postgres:':
|
||||
return new PostgresStorageAdapter({
|
||||
uri: databaseURI,
|
||||
collectionPrefix,
|
||||
databaseOptions,
|
||||
});
|
||||
default:
|
||||
return new MongoStorageAdapter({
|
||||
uri: databaseURI,
|
||||
collectionPrefix,
|
||||
mongoOptions: databaseOptions,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user