oak-frontend-base/src/initialize.ts

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,
};
}