unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
123 lines • 7.37 kB
JavaScript
import { EventStore } from '../events/event-store.js';
import GroupStore from '../../db/group-store.js';
import { AccountStore } from '../../db/account-store.js';
import EnvironmentStore from '../project-environments/environment-store.js';
import { ApiTokenService, FavoritesService, GroupService, ProjectService, } from '../../services/index.js';
import FakeGroupStore from '../../../test/fixtures/fake-group-store.js';
import FakeEventStore from '../../../test/fixtures/fake-event-store.js';
import ProjectStore from './project-store.js';
import FeatureToggleStore from '../feature-toggle/feature-toggle-store.js';
import { FeatureEnvironmentStore } from '../../db/feature-environment-store.js';
import ProjectStatsStore from '../../db/project-stats-store.js';
import { createAccessService, createFakeAccessService, } from '../access/createAccessService.js';
import { createFakeFeatureToggleService, createFeatureToggleService, } from '../feature-toggle/createFeatureToggleService.js';
import { FavoriteFeaturesStore } from '../../db/favorite-features-store.js';
import { FavoriteProjectsStore } from '../../db/favorite-projects-store.js';
import FakeProjectStore from '../../../test/fixtures/fake-project-store.js';
import FakeFeatureToggleStore from '../feature-toggle/fakes/fake-feature-toggle-store.js';
import FakeEnvironmentStore from '../project-environments/fake-environment-store.js';
import FakeFeatureEnvironmentStore from '../../../test/fixtures/fake-feature-environment-store.js';
import FakeProjectStatsStore from '../../../test/fixtures/fake-project-stats-store.js';
import FakeFavoriteFeaturesStore from '../../../test/fixtures/fake-favorite-features-store.js';
import FakeFavoriteProjectsStore from '../../../test/fixtures/fake-favorite-projects-store.js';
import { FakeAccountStore } from '../../../test/fixtures/fake-account-store.js';
import { createFakePrivateProjectChecker, createPrivateProjectChecker, } from '../private-project/createPrivateProjectChecker.js';
import { ProjectOwnersReadModel } from './project-owners-read-model.js';
import { FakeProjectOwnersReadModel } from './fake-project-owners-read-model.js';
import { FakeProjectFlagCreatorsReadModel } from './fake-project-flag-creators-read-model.js';
import { ProjectFlagCreatorsReadModel } from './project-flag-creators-read-model.js';
import FakeApiTokenStore from '../../../test/fixtures/fake-api-token-store.js';
import { ApiTokenStore } from '../../db/api-token-store.js';
import { createEventsService, createFakeEventsService, } from '../events/createEventsService.js';
import { createFakeProjectReadModel, createProjectReadModel, } from './createProjectReadModel.js';
import { createFakeOnboardingReadModel, createOnboardingReadModel, } from '../onboarding/createOnboardingReadModel.js';
export const createProjectService = (db, config) => {
const { eventBus, getLogger, flagResolver } = config;
const eventStore = new EventStore(db, getLogger);
const projectStore = new ProjectStore(db, eventBus, config);
const projectOwnersReadModel = new ProjectOwnersReadModel(db);
const projectFlagCreatorsReadModel = new ProjectFlagCreatorsReadModel(db);
const groupStore = new GroupStore(db);
const featureToggleStore = new FeatureToggleStore(db, eventBus, getLogger, flagResolver);
const accountStore = new AccountStore(db, getLogger);
const environmentStore = new EnvironmentStore(db, eventBus, config);
const featureEnvironmentStore = new FeatureEnvironmentStore(db, eventBus, config);
const projectStatsStore = new ProjectStatsStore(db, eventBus, getLogger);
const accessService = createAccessService(db, config);
const featureToggleService = createFeatureToggleService(db, config);
const favoriteFeaturesStore = new FavoriteFeaturesStore(db, eventBus, getLogger);
const favoriteProjectsStore = new FavoriteProjectsStore(db, eventBus, getLogger);
const eventService = createEventsService(db, config);
const favoriteService = new FavoritesService({
favoriteFeaturesStore,
favoriteProjectsStore,
}, config, eventService);
const groupService = new GroupService({ groupStore, accountStore }, { getLogger }, eventService);
const apiTokenStore = new ApiTokenStore(db, eventBus, getLogger, flagResolver);
const privateProjectChecker = createPrivateProjectChecker(db, config);
const apiTokenService = new ApiTokenService({ apiTokenStore, environmentStore }, config, eventService);
const projectReadModel = createProjectReadModel(db, eventBus, config.flagResolver);
const onboardingReadModel = createOnboardingReadModel(db);
return new ProjectService({
projectStore,
eventStore,
featureToggleStore,
environmentStore,
featureEnvironmentStore,
accountStore,
projectStatsStore,
projectOwnersReadModel,
projectFlagCreatorsReadModel,
projectReadModel,
onboardingReadModel,
}, config, accessService, featureToggleService, groupService, favoriteService, eventService, privateProjectChecker, apiTokenService);
};
export const createFakeProjectService = (config) => {
const { getLogger } = config;
const eventStore = new FakeEventStore();
const projectOwnersReadModel = new FakeProjectOwnersReadModel();
const projectFlagCreatorsReadModel = new FakeProjectFlagCreatorsReadModel();
const projectStore = new FakeProjectStore();
const groupStore = new FakeGroupStore();
const featureToggleStore = new FakeFeatureToggleStore();
const accountStore = new FakeAccountStore();
const environmentStore = new FakeEnvironmentStore();
const featureEnvironmentStore = new FakeFeatureEnvironmentStore();
const projectStatsStore = new FakeProjectStatsStore();
const { accessService } = createFakeAccessService(config);
const { featureToggleService } = createFakeFeatureToggleService(config);
const favoriteFeaturesStore = new FakeFavoriteFeaturesStore();
const favoriteProjectsStore = new FakeFavoriteProjectsStore();
const apiTokenStore = new FakeApiTokenStore();
const privateProjectChecker = createFakePrivateProjectChecker();
const eventService = createFakeEventsService(config);
const favoriteService = new FavoritesService({
favoriteFeaturesStore,
favoriteProjectsStore,
}, config, eventService);
const groupService = new GroupService({ groupStore, accountStore }, { getLogger }, eventService);
const apiTokenService = new ApiTokenService({ apiTokenStore, environmentStore }, config, eventService);
const projectReadModel = createFakeProjectReadModel();
const onboardingReadModel = createFakeOnboardingReadModel();
const projectService = new ProjectService({
projectStore,
projectOwnersReadModel,
projectFlagCreatorsReadModel,
eventStore,
featureToggleStore,
environmentStore,
featureEnvironmentStore,
accountStore,
projectStatsStore,
projectReadModel,
onboardingReadModel,
}, config, accessService, featureToggleService, groupService, favoriteService, eventService, privateProjectChecker, apiTokenService);
return {
projectService,
environmentStore,
accessService,
eventService,
projectStore,
};
};
//# sourceMappingURL=createProjectService.js.map