unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
157 lines • 9.38 kB
JavaScript
import { AccessService, FeatureToggleService, GroupService, } from '../../services/index.js';
import FeatureStrategiesStore from './feature-toggle-strategies-store.js';
import FeatureToggleStore from './feature-toggle-store.js';
import FeatureToggleClientStore from '../client-feature-toggles/client-feature-toggle-store.js';
import ProjectStore from '../project/project-store.js';
import { FeatureEnvironmentStore } from '../../db/feature-environment-store.js';
import ContextFieldStore from '../context/context-field-store.js';
import GroupStore from '../../db/group-store.js';
import { AccountStore } from '../../db/account-store.js';
import { AccessStore } from '../../db/access-store.js';
import RoleStore from '../../db/role-store.js';
import EnvironmentStore from '../project-environments/environment-store.js';
import FakeEventStore from '../../../test/fixtures/fake-event-store.js';
import FakeFeatureStrategiesStore from './fakes/fake-feature-strategies-store.js';
import FakeFeatureToggleStore from './fakes/fake-feature-toggle-store.js';
import FakeClientFeatureToggleStore from '../client-feature-toggles/fakes/fake-client-feature-toggle-store.js';
import FakeProjectStore from '../../../test/fixtures/fake-project-store.js';
import FakeFeatureEnvironmentStore from '../../../test/fixtures/fake-feature-environment-store.js';
import FakeContextFieldStore from '../context/fake-context-field-store.js';
import FakeGroupStore from '../../../test/fixtures/fake-group-store.js';
import { FakeAccountStore } from '../../../test/fixtures/fake-account-store.js';
import FakeAccessStore from '../../../test/fixtures/fake-access-store.js';
import FakeRoleStore from '../../../test/fixtures/fake-role-store.js';
import FakeEnvironmentStore from '../project-environments/fake-environment-store.js';
import { createChangeRequestAccessReadModel, createFakeChangeRequestAccessService, } from '../change-request-access-service/createChangeRequestAccessReadModel.js';
import { createFakeSegmentService, createSegmentService, } from '../segment/createSegmentService.js';
import StrategyStore from '../../db/strategy-store.js';
import FakeStrategiesStore from '../../../test/fixtures/fake-strategies-store.js';
import { createFakePrivateProjectChecker, createPrivateProjectChecker, } from '../private-project/createPrivateProjectChecker.js';
import { DependentFeaturesReadModel } from '../dependent-features/dependent-features-read-model.js';
import { FakeDependentFeaturesReadModel } from '../dependent-features/fake-dependent-features-read-model.js';
import FeatureTagStore from '../../db/feature-tag-store.js';
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store.js';
import { createDependentFeaturesService, createFakeDependentFeaturesService, } from '../dependent-features/createDependentFeaturesService.js';
import { createEventsService, createFakeEventsService, } from '../events/createEventsService.js';
import EventEmitter from 'node:stream';
import { FeatureLifecycleReadModel } from '../feature-lifecycle/feature-lifecycle-read-model.js';
import { FakeFeatureLifecycleReadModel } from '../feature-lifecycle/fake-feature-lifecycle-read-model.js';
import { FakeFeatureCollaboratorsReadModel } from './fake-feature-collaborators-read-model.js';
import { FeatureCollaboratorsReadModel } from './feature-collaborators-read-model.js';
import { FeatureLinksReadModel } from '../feature-links/feature-links-read-model.js';
import { FakeFeatureLinksReadModel } from '../feature-links/fake-feature-links-read-model.js';
import { createFakeFeatureLinkService, createFeatureLinkService, } from '../feature-links/createFeatureLinkService.js';
export const createFeatureToggleService = (db, config) => {
const { getLogger, eventBus, flagResolver, resourceLimits } = config;
const featureStrategiesStore = new FeatureStrategiesStore(db, eventBus, getLogger, flagResolver);
const featureToggleStore = new FeatureToggleStore(db, eventBus, getLogger, flagResolver);
const featureToggleClientStore = new FeatureToggleClientStore(db, eventBus, config);
const projectStore = new ProjectStore(db, eventBus, config);
const featureEnvironmentStore = new FeatureEnvironmentStore(db, eventBus, config);
const contextFieldStore = new ContextFieldStore(db, getLogger, flagResolver);
const groupStore = new GroupStore(db);
const strategyStore = new StrategyStore(db, getLogger);
const accountStore = new AccountStore(db, getLogger);
const accessStore = new AccessStore(db, eventBus, getLogger);
const featureTagStore = new FeatureTagStore(db, eventBus, getLogger);
const roleStore = new RoleStore(db, eventBus, getLogger);
const environmentStore = new EnvironmentStore(db, eventBus, config);
const eventService = createEventsService(db, config);
const groupService = new GroupService({ groupStore, accountStore }, { getLogger }, eventService);
const accessService = new AccessService({ accessStore, accountStore, roleStore, environmentStore }, { getLogger }, groupService, eventService);
const segmentService = createSegmentService(db, config);
const changeRequestAccessReadModel = createChangeRequestAccessReadModel(db, config);
const privateProjectChecker = createPrivateProjectChecker(db, config);
const dependentFeaturesReadModel = new DependentFeaturesReadModel(db);
const featureLifecycleReadModel = new FeatureLifecycleReadModel(db);
const dependentFeaturesService = createDependentFeaturesService(config)(db);
const featureCollaboratorsReadModel = new FeatureCollaboratorsReadModel(db);
const featureLinksReadModel = new FeatureLinksReadModel(db, eventBus);
const featureLinkService = createFeatureLinkService(config)(db);
const featureToggleService = new FeatureToggleService({
featureStrategiesStore,
featureToggleStore,
clientFeatureToggleStore: featureToggleClientStore,
projectStore,
featureTagStore,
featureEnvironmentStore,
contextFieldStore,
strategyStore,
}, { getLogger, flagResolver, eventBus, resourceLimits }, {
segmentService,
accessService,
eventService,
changeRequestAccessReadModel,
privateProjectChecker,
dependentFeaturesReadModel,
dependentFeaturesService,
featureLifecycleReadModel,
featureCollaboratorsReadModel,
featureLinksReadModel,
featureLinkService,
});
return featureToggleService;
};
export const createFakeFeatureToggleService = (config) => {
const { getLogger, flagResolver, resourceLimits } = config;
const eventStore = new FakeEventStore();
const strategyStore = new FakeStrategiesStore();
const featureStrategiesStore = new FakeFeatureStrategiesStore();
const featureToggleStore = new FakeFeatureToggleStore();
const featureToggleClientStore = new FakeClientFeatureToggleStore();
const projectStore = new FakeProjectStore();
const featureEnvironmentStore = new FakeFeatureEnvironmentStore();
const contextFieldStore = new FakeContextFieldStore();
const groupStore = new FakeGroupStore();
const accountStore = new FakeAccountStore();
const accessStore = new FakeAccessStore();
const featureTagStore = new FakeFeatureTagStore();
const roleStore = new FakeRoleStore();
const environmentStore = new FakeEnvironmentStore();
const eventService = createFakeEventsService(config);
const groupService = new GroupService({ groupStore, accountStore }, { getLogger }, eventService);
const accessService = new AccessService({ accessStore, accountStore, roleStore, environmentStore, groupStore }, { getLogger }, groupService, eventService);
const segmentService = createFakeSegmentService(config);
const changeRequestAccessReadModel = createFakeChangeRequestAccessService();
const fakePrivateProjectChecker = createFakePrivateProjectChecker();
const dependentFeaturesReadModel = new FakeDependentFeaturesReadModel();
const dependentFeaturesService = createFakeDependentFeaturesService(config);
const featureLifecycleReadModel = new FakeFeatureLifecycleReadModel();
const featureCollaboratorsReadModel = new FakeFeatureCollaboratorsReadModel();
const featureLinksReadModel = new FakeFeatureLinksReadModel();
const { featureLinkService } = createFakeFeatureLinkService(config);
const featureToggleService = new FeatureToggleService({
featureStrategiesStore,
featureToggleStore,
clientFeatureToggleStore: featureToggleClientStore,
projectStore,
featureTagStore,
featureEnvironmentStore,
contextFieldStore,
strategyStore,
}, {
getLogger,
flagResolver,
eventBus: new EventEmitter(),
resourceLimits,
}, {
segmentService,
accessService,
eventService,
changeRequestAccessReadModel,
privateProjectChecker: fakePrivateProjectChecker,
dependentFeaturesReadModel,
dependentFeaturesService,
featureLifecycleReadModel,
featureCollaboratorsReadModel,
featureLinksReadModel,
featureLinkService,
});
return {
featureToggleService,
featureToggleStore,
projectStore,
featureStrategiesStore,
};
};
//# sourceMappingURL=createFeatureToggleService.js.map