@ima/core
Version:
IMA.js framework for isomorphic javascript application
177 lines (176 loc) • 6.83 kB
JavaScript
import * as $Helper from '@ima/helpers';
import { Cache } from '../cache/Cache';
import { CacheFactory } from '../cache/CacheFactory';
import { CacheImpl } from '../cache/CacheImpl';
import { ControllerDecorator } from '../controller/ControllerDecorator';
import { Dictionary } from '../dictionary/Dictionary';
import { MessageFormatDictionary } from '../dictionary/MessageFormatDictionary';
import { GenericError } from '../error/GenericError';
import { Dispatcher } from '../event/Dispatcher';
import { DispatcherImpl } from '../event/DispatcherImpl';
import { EventBus } from '../event/EventBus';
import { EventBusImpl } from '../event/EventBusImpl';
import { Observable } from '../event/Observable';
import { ObservableImpl } from '../event/ObservableImpl';
import { HttpAgent } from '../http/HttpAgent';
import { HttpAgentImpl } from '../http/HttpAgentImpl';
import { HttpProxy } from '../http/HttpProxy';
import { HttpStatusCode } from '../http/HttpStatusCode';
import { UrlTransformer } from '../http/UrlTransformer';
import { MetaManager } from '../meta/MetaManager';
import { MetaManagerImpl } from '../meta/MetaManagerImpl';
import { PageHandlerRegistry } from '../page/handler/PageHandlerRegistry';
import { PageMetaHandler } from '../page/handler/PageMetaHandler';
import { PageNavigationHandler } from '../page/handler/PageNavigationHandler';
import { ClientPageManager } from '../page/manager/ClientPageManager';
import { PageManager } from '../page/manager/PageManager';
import { ServerPageManager } from '../page/manager/ServerPageManager';
import { PageFactory } from '../page/PageFactory';
import { ComponentUtils } from '../page/renderer/ComponentUtils';
import { PageStateManager } from '../page/state/PageStateManager';
import { PageStateManagerDecorator } from '../page/state/PageStateManagerDecorator';
import { PageStateManagerImpl } from '../page/state/PageStateManagerImpl';
import { ClientRouter } from '../router/ClientRouter';
import { Request } from '../router/Request';
import { Response } from '../router/Response';
import { RouteFactory } from '../router/RouteFactory';
import { RouteNames } from '../router/RouteNames';
import { Router } from '../router/Router';
import { RouterEvents } from '../router/RouterEvents';
import { ServerRouter } from '../router/ServerRouter';
import { CookieStorage } from '../storage/CookieStorage';
import { MapStorage } from '../storage/MapStorage';
import { SessionMapStorage } from '../storage/SessionMapStorage';
import { SessionStorage } from '../storage/SessionStorage';
import { WeakMapStorage } from '../storage/WeakMapStorage';
import { ClientWindow } from '../window/ClientWindow';
import { ServerWindow } from '../window/ServerWindow';
import { Window } from '../window/Window';
export const initBind = (ns, oc, config)=>{
oc.constant('$Helper', $Helper);
oc.constant('$oc', oc);
oc.constant('$Settings', config);
oc.constant('$Env', config.$Env);
oc.constant('$Protocol', config.$Protocol);
oc.constant('$Secure', config.$Protocol === 'https:');
// Request & Response
oc.bind('$Request', Request);
oc.bind('$Response', Response);
// Window helper
if (typeof window !== 'undefined' && window !== null) {
oc.provide(Window, ClientWindow);
} else {
oc.provide(Window, ServerWindow);
}
oc.bind('$Window', Window);
oc.bind('$Error', GenericError);
// Dictionary
oc.provide(Dictionary, MessageFormatDictionary);
oc.bind('$Dictionary', Dictionary);
// Storage
oc.constant('$CookieTransformFunction', {
encode: (s)=>s,
decode: (s)=>s
});
oc.bind('$CookieStorage', CookieStorage);
if (oc.get(Window).hasSessionStorage()) {
oc.bind('$SessionStorage', SessionStorage);
} else {
oc.bind('$SessionStorage', MapStorage);
}
oc.bind('$MapStorage', MapStorage);
oc.inject(WeakMapStorage, [
{
entryTtl: 30 * 60 * 1000,
maxEntries: 1000,
gcInterval: 60 * 1000,
gcEntryCountTreshold: 16
}
]);
oc.bind('$WeakMapStorage', WeakMapStorage);
oc.bind('$SessionMapStorage', SessionMapStorage);
// Dispatcher
oc.provide(Dispatcher, DispatcherImpl);
oc.bind('$Dispatcher', Dispatcher);
// Custom Event Bus
oc.provide(EventBus, EventBusImpl);
oc.bind('$EventBus', EventBus);
// Observable
oc.provide(Observable, ObservableImpl);
oc.bind('$Observable', Observable);
// Cache
oc.constant('$CacheStorage', oc.get(MapStorage));
oc.bind('$CacheFactory', CacheFactory);
oc.provide(Cache, CacheImpl, [
'$CacheStorage',
CacheFactory,
'$Helper',
config.$Cache || {}
]);
oc.bind('$Cache', Cache);
// SEO
oc.provide(MetaManager, MetaManagerImpl);
oc.bind('$MetaManager', MetaManager);
oc.bind('$ControllerDecorator', ControllerDecorator);
oc.bind('$PageStateManagerDecorator', PageStateManagerDecorator);
// Page
oc.provide(PageStateManager, PageStateManagerImpl);
oc.bind('$PageStateManager', PageStateManager);
oc.inject(PageFactory, [
oc
]);
oc.bind('$PageFactory', PageFactory);
oc.inject(ComponentUtils, [
oc
]);
oc.bind('$ComponentUtils', ComponentUtils);
oc.get(ComponentUtils).register({
$Dictionary: Dictionary,
$Dispatcher: Dispatcher,
$EventBus: EventBus,
$Observable: Observable,
$Helper: '$Helper',
$Http: HttpAgent,
$PageStateManager: PageStateManager,
$Router: Router,
$Settings: '$Settings',
$Window: Window
});
if (oc.get(Window).isClient()) {
oc.bind('$PageHandlerRegistry', PageHandlerRegistry, [
PageNavigationHandler,
PageMetaHandler
]);
oc.provide(PageManager, ClientPageManager);
} else {
oc.bind('$PageHandlerRegistry', PageHandlerRegistry, []);
oc.provide(PageManager, ServerPageManager);
}
oc.bind('$PageManager', PageManager);
// Router
oc.bind('$RouteFactory', RouteFactory);
if (oc.get(Window).isClient()) {
oc.provide(Router, ClientRouter);
} else {
oc.provide(Router, ServerRouter);
}
oc.bind('$Router', Router);
oc.constant('$RouteNames', RouteNames);
oc.constant('$RouterEvents', RouterEvents);
// Http agent
oc.bind('$HttpUrlTransformer', UrlTransformer);
oc.bind('$HttpAgentProxy', HttpProxy, [
'$HttpUrlTransformer',
'$Window'
]);
oc.provide(HttpAgent, HttpAgentImpl, [
'$HttpAgentProxy',
'$Cache',
CookieStorage,
config.$Http,
'$Helper'
]);
oc.bind('$Http', HttpAgent);
oc.constant('$HttpStatusCode', HttpStatusCode);
};
//# sourceMappingURL=bind.js.map