import { interfaces } from 'inversify'; import { preferences as filesPreferences, filesModule, FilesDataSource, filesModuleReload } from '@files-stack/server-core'; import { IFileService, INodeTextFileService, TYPES, IDataSources, IServerService, ICustomTextFileService } from '@files-stack/core'; import { proxyFilesServiceModule, FileClientMoleculerService } from '@files-stack/microservice-nats'; import { FileService, NodeTextFileService } from '@files-stack/hemera-files'; import { CommonType } from '@common-stack/core'; import { CdmLogger } from '@cdm-logger/core'; import { Feature } from '@common-stack/server-core'; import { fileSchema, textfileSchema, fileResolver, textfileResolver, filesConfigurationSchema } from './graphql'; import { preClientStart } from './initializations'; const filesServiceGen = (container: interfaces.Container): IServerService => { return { fileService: container.get(TYPES.IFileService), textFileService: container.get(TYPES.ITextFileService), }; }; // per document, Datasource should not be single instance // https://www.apollographql.com/docs/tutorial/data-source/#build-a-custom-data-source const dataSources: ({ context, logger}) => IDataSources = ({context, logger}) => { return { textFileCache: new FilesDataSource(context, logger), }; }; export default new Feature({ createPreference: filesPreferences as any, createContainerFunc: [proxyFilesServiceModule], createResolversFunc: [fileResolver, textfileResolver], schema: [fileSchema, textfileSchema, filesConfigurationSchema], createDataSourceFunc: dataSources, createServiceFunc: filesServiceGen, updateContainerFunc: [{ files: filesModuleReload }], disposeFunc: [{ ctx: 'fileService', container: 'files' }], createHemeraContainerFunc: [filesModule], addBrokerClientServiceClass: [FileService, NodeTextFileService], addBrokerMainServiceClass: [FileClientMoleculerService], microservicePreStartFunc: [preClientStart], });