63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
import {
|
|
Checker,
|
|
StorageSchema,
|
|
Connector,
|
|
} from 'oak-domain/lib/types';
|
|
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
|
|
import { EntityDict } from 'oak-domain/lib/types/Entity';
|
|
import { CommonConfiguration, RenderConfiguration } from 'oak-domain/lib/types/Configuration';
|
|
|
|
import { initializeStep1 as initBasicFeaturesStep1, initializeStep2 as initBasicFeaturesStep2 } from './features';
|
|
import { makeIntrinsicCheckers } from 'oak-domain/lib/store/IntrinsicCheckers';
|
|
import { CacheStore } from './cacheStore/CacheStore';
|
|
import { FrontendRuntimeContext } from './context/FrontendRuntimeContext';
|
|
import { BackendRuntimeContext } from './context/BackendRuntimeContext';
|
|
|
|
/**
|
|
* @param storageSchema
|
|
* @param createFeatures
|
|
* @param contextBuilder
|
|
* @param context
|
|
* @param triggers
|
|
* @param checkers
|
|
* @param watchers
|
|
* @param aspectDict
|
|
* @param initialData
|
|
* @param actionDict
|
|
* @returns
|
|
*/
|
|
export function initialize<
|
|
ED extends EntityDict & BaseEntityDict,
|
|
Cxt extends BackendRuntimeContext<ED>,
|
|
FrontCxt extends FrontendRuntimeContext<ED>
|
|
>(
|
|
storageSchema: StorageSchema<ED>,
|
|
frontendContextBuilder: (store: CacheStore<ED>) => FrontCxt,
|
|
connector: Connector<ED, FrontCxt>,
|
|
checkers: Array<Checker<ED, keyof ED, Cxt | FrontCxt>>,
|
|
common: CommonConfiguration<ED>,
|
|
render: RenderConfiguration<ED>
|
|
) {
|
|
const { actionDefDict, attrUpdateMatrix } = common;
|
|
|
|
const intrinsicCheckers = makeIntrinsicCheckers<ED, Cxt, FrontCxt>(storageSchema, actionDefDict, attrUpdateMatrix);
|
|
const checkers2 = checkers.concat(intrinsicCheckers);
|
|
|
|
const features1 = initBasicFeaturesStep1();
|
|
|
|
const features2 = initBasicFeaturesStep2<ED, FrontCxt>(
|
|
features1,
|
|
connector,
|
|
storageSchema,
|
|
frontendContextBuilder,
|
|
checkers2,
|
|
common,
|
|
render
|
|
);
|
|
|
|
const features = Object.assign(features1, features2);
|
|
return {
|
|
features,
|
|
};
|
|
}
|