RenaiApp/src/main/core/container.ts

186 lines
10 KiB
TypeScript

import 'reflect-metadata';
import { Container, interfaces } from 'inversify';
import type { AppWindowInterface } from '../modules/app-window/app-window-interface';
import { MainAppWindow } from '../modules/app-window/main-app-window';
import { Dialog } from '../modules/dialog/dialog';
import type { DialogInterface } from '../modules/dialog/dialog-interface';
import { Logger } from '../modules/logger/logger';
import { NhentaiApi } from '../modules/nhentai/nhentai-api';
import { NhentaiAppWindow } from '../modules/nhentai/nhentai-app-window';
import type { NhentaiAppWindowInterface } from '../modules/nhentai/nhentai-app-window-interface';
import { NhentaiSourceGetter } from '../modules/nhentai/nhentai-source-getter';
import { AuthorNameSerializer } from '../modules/serialization/serializers/author-name-serializer';
import { AuthorRoleNameSerializer } from '../modules/serialization/serializers/author-role-name-serializer';
import { AuthorRoleSerializer } from '../modules/serialization/serializers/author-role-serializer';
import { AuthorSerializer } from '../modules/serialization/serializers/author-serializer';
import { CharacterTagSerializer } from '../modules/serialization/serializers/character-tag-serializer';
import { CollectionNameSerializer } from '../modules/serialization/serializers/collection-name-serializer';
import { CollectionPartSerializer } from '../modules/serialization/serializers/collection-part-serializer';
import { CollectionSerializer } from '../modules/serialization/serializers/collection-serializer';
import { CopySerializer } from '../modules/serialization/serializers/copy-serializer';
import { InteractionTagSerializer } from '../modules/serialization/serializers/interaction-tag-serializer';
import { LanguageSerializer } from '../modules/serialization/serializers/language-serializer';
import { SiteNameSerializer } from '../modules/serialization/serializers/site-name-serializer';
import { SiteSerializer } from '../modules/serialization/serializers/site-serializer';
import { SourceSerializer } from '../modules/serialization/serializers/source-serializer';
import { TagNameSerializer } from '../modules/serialization/serializers/tag-name-serializer';
import { TagSerializer } from '../modules/serialization/serializers/tag-serializer';
import { TransformationSerializer } from '../modules/serialization/serializers/transformation-serializer';
import { TransformationTypeNameSerializer } from '../modules/serialization/serializers/transformation-type-name-serializer';
import { TransformationTypeSerializer } from '../modules/serialization/serializers/transformation-type-serializer';
import { WorkAuthorSerializer } from '../modules/serialization/serializers/work-author-serializer';
import { WorkCharacterNameSerializer } from '../modules/serialization/serializers/work-character-name-serializer';
import { WorkCharacterSerializer } from '../modules/serialization/serializers/work-character-serializer';
import { WorkNameSerializer } from '../modules/serialization/serializers/work-name-serializer';
import { WorkSerializer } from '../modules/serialization/serializers/work-serializer';
import { WorkTagSerializer } from '../modules/serialization/serializers/work-tag-serializer';
import { WorldCharacterNameSerializer } from '../modules/serialization/serializers/world-character-name-serializer';
import { WorldCharacterSerializer } from '../modules/serialization/serializers/world-character-serializer';
import { WorldNameSerializer } from '../modules/serialization/serializers/world-name-serializer';
import { WorldSerializer } from '../modules/serialization/serializers/world-serializer';
import type { SourceGetterInterface } from '../modules/source/source-getter-interface';
import { Store } from '../modules/store/store';
import BindingToSyntax = interfaces.BindingToSyntax;
export const enum Service {
LOGGER = 'LOGGER',
AUTHOR_SERIALIZER = 'AUTHOR_SERIALIZER',
AUTHOR_NAME_SERIALIZER = 'AUTHOR_NAME_SERIALIZER',
AUTHOR_ROLE_SERIALIZER = 'AUTHOR_ROLE_SERIALIZER',
AUTHOR_ROLE_NAME_SERIALIZER = 'AUTHOR_ROLE_NAME_SERIALIZER',
CHARACTER_TAG_SERIALIZER = 'CHARACTER_TAG_SERIALIZER',
COLLECTION_SERIALIZER = 'COLLECTION_SERIALIZER',
COLLECTION_NAME_SERIALIZER = 'COLLECTION_NAME_SERIALIZER',
COLLECTION_PART_SERIALIZER = 'COLLECTION_PART_SERIALIZER',
COPY_SERIALIZER = 'COPY_SERIALIZER',
INTERACTION_TAG_SERIALIZER = 'INTERACTION_TAG_SERIALIZER',
LANGUAGE_SERIALIZER = 'LANGUAGE_SERIALIZER',
SITE_SERIALIZER = 'SITE_SERIALIZER',
SITE_NAME_SERIALIZER = 'SITE_NAME_SERIALIZER',
SOURCE_SERIALIZER = 'SOURCE_SERIALIZER',
TAG_SERIALIZER = 'TAG_SERIALIZER',
TAG_NAME_SERIALIZER = 'TAG_NAME_SERIALIZER',
TRANSFORMATION_SERIALIZER = 'TRANSFORMATION_SERIALIZER',
TRANSFORMATION_TYPE_SERIALIZER = 'TRANSFORMATION_TYPE_SERIALIZER',
TRANSFORMATION_TYPE_NAME_SERIALIZER = 'TRANSFORMATION_TYPE_NAME_SERIALIZER',
WORK_AUTHOR_SERIALIZER = 'WORK_AUTHOR_SERIALIZER',
WORK_CHARACTER_SERIALIZER = 'WORK_CHARACTER_SERIALIZER',
WORK_CHARACTER_NAME_SERIALIZER = 'WORK_CHARACTER_NAME_SERIALIZER',
WORK_SERIALIZER = 'WORK_SERIALIZER',
WORK_NAME_SERIALIZER = 'WORK_NAME_SERIALIZER',
WORK_TAG_SERIALIZER = 'WORK_TAG_SERIALIZER',
WORLD_SERIALIZER = 'WORLD_SERIALIZER',
WORLD_NAME_SERIALIZER = 'WORLD_NAME_SERIALIZER',
WORLD_CHARACTER_SERIALIZER = 'WORLD_CHARACTER_SERIALIZER',
WORLD_CHARACTER_NAME_SERIALIZER = 'WORLD_CHARACTER_NAME_SERIALIZER',
DIALOG = 'DIALOG',
STORE = 'STORE',
NHENTAI_APP_WINDOW = 'NHENTAI_APP_WINDOW',
NHENTAI_API = 'NHENTAI_API',
NHENTAI_SOURCE_GETTER = 'NHENTAI_SOURCE_GETTER',
APP_WINDOW_MAIN = 'APP_WINDOW_MAIN',
}
type ServiceType = {
[Service.LOGGER]: LoggerInterface;
[Service.AUTHOR_SERIALIZER]: AuthorSerializer;
[Service.AUTHOR_NAME_SERIALIZER]: AuthorNameSerializer;
[Service.AUTHOR_ROLE_SERIALIZER]: AuthorRoleSerializer;
[Service.AUTHOR_ROLE_NAME_SERIALIZER]: AuthorRoleNameSerializer;
[Service.CHARACTER_TAG_SERIALIZER]: CharacterTagSerializer;
[Service.COLLECTION_SERIALIZER]: CollectionSerializer;
[Service.COLLECTION_NAME_SERIALIZER]: CollectionNameSerializer;
[Service.COLLECTION_PART_SERIALIZER]: CollectionPartSerializer;
[Service.COPY_SERIALIZER]: CopySerializer;
[Service.INTERACTION_TAG_SERIALIZER]: InteractionTagSerializer;
[Service.LANGUAGE_SERIALIZER]: LanguageSerializer;
[Service.SITE_SERIALIZER]: SiteSerializer;
[Service.SITE_NAME_SERIALIZER]: SiteNameSerializer;
[Service.SOURCE_SERIALIZER]: SourceSerializer;
[Service.TAG_SERIALIZER]: TagSerializer;
[Service.TAG_NAME_SERIALIZER]: TagNameSerializer;
[Service.TRANSFORMATION_SERIALIZER]: TransformationSerializer;
[Service.TRANSFORMATION_TYPE_SERIALIZER]: TransformationTypeSerializer;
[Service.TRANSFORMATION_TYPE_NAME_SERIALIZER]: TransformationTypeNameSerializer;
[Service.WORK_AUTHOR_SERIALIZER]: WorkAuthorSerializer;
[Service.WORK_CHARACTER_SERIALIZER]: WorkCharacterSerializer;
[Service.WORK_CHARACTER_NAME_SERIALIZER]: WorkCharacterNameSerializer;
[Service.WORK_SERIALIZER]: WorkSerializer;
[Service.WORK_NAME_SERIALIZER]: WorkNameSerializer;
[Service.WORK_TAG_SERIALIZER]: WorkTagSerializer;
[Service.WORLD_SERIALIZER]: WorldSerializer;
[Service.WORLD_NAME_SERIALIZER]: WorldNameSerializer;
[Service.WORLD_CHARACTER_SERIALIZER]: WorldCharacterSerializer;
[Service.WORLD_CHARACTER_NAME_SERIALIZER]: WorldCharacterNameSerializer;
[Service.DIALOG]: DialogInterface;
[Service.STORE]: StoreInterface;
[Service.NHENTAI_APP_WINDOW]: NhentaiAppWindowInterface;
[Service.NHENTAI_API]: NhentaiApiInterface;
[Service.NHENTAI_SOURCE_GETTER]: SourceGetterInterface;
[Service.APP_WINDOW_MAIN]: AppWindowInterface;
};
export const container = {
original: new Container({ defaultScope: 'Singleton', skipBaseClassChecks: true }),
bind<S extends Service>(key: S): BindingToSyntax<ServiceType[S]> {
return this.original.bind<ServiceType[S]>(Symbol.for(key));
},
unbind(key: Service): void {
return this.original.unbind(Symbol.for(key));
},
get<S extends Service>(key: S): ServiceType[S] {
return this.original.get<ServiceType[S]>(Symbol.for(key));
},
};
container.bind(Service.LOGGER).to(Logger);
container.bind(Service.AUTHOR_SERIALIZER).to(AuthorSerializer);
container.bind(Service.AUTHOR_NAME_SERIALIZER).to(AuthorNameSerializer);
container.bind(Service.AUTHOR_ROLE_SERIALIZER).to(AuthorRoleSerializer);
container.bind(Service.AUTHOR_ROLE_NAME_SERIALIZER).to(AuthorRoleNameSerializer);
container.bind(Service.CHARACTER_TAG_SERIALIZER).to(CharacterTagSerializer);
container.bind(Service.COLLECTION_SERIALIZER).to(CollectionSerializer);
container.bind(Service.COLLECTION_NAME_SERIALIZER).to(CollectionNameSerializer);
container.bind(Service.COLLECTION_PART_SERIALIZER).to(CollectionPartSerializer);
container.bind(Service.COPY_SERIALIZER).to(CopySerializer);
container.bind(Service.INTERACTION_TAG_SERIALIZER).to(InteractionTagSerializer);
container.bind(Service.LANGUAGE_SERIALIZER).to(LanguageSerializer);
container.bind(Service.SITE_SERIALIZER).to(SiteSerializer);
container.bind(Service.SITE_NAME_SERIALIZER).to(SiteNameSerializer);
container.bind(Service.SOURCE_SERIALIZER).to(SourceSerializer);
container.bind(Service.TAG_SERIALIZER).to(TagSerializer);
container.bind(Service.TAG_NAME_SERIALIZER).to(TagNameSerializer);
container.bind(Service.TRANSFORMATION_SERIALIZER).to(TransformationSerializer);
container.bind(Service.TRANSFORMATION_TYPE_SERIALIZER).to(TransformationTypeSerializer);
container.bind(Service.TRANSFORMATION_TYPE_NAME_SERIALIZER).to(TransformationTypeNameSerializer);
container.bind(Service.WORK_AUTHOR_SERIALIZER).to(WorkAuthorSerializer);
container.bind(Service.WORK_CHARACTER_SERIALIZER).to(WorkCharacterSerializer);
container.bind(Service.WORK_CHARACTER_NAME_SERIALIZER).to(WorkCharacterNameSerializer);
container.bind(Service.WORK_SERIALIZER).to(WorkSerializer);
container.bind(Service.WORK_NAME_SERIALIZER).to(WorkNameSerializer);
container.bind(Service.WORK_TAG_SERIALIZER).to(WorkTagSerializer);
container.bind(Service.WORLD_SERIALIZER).to(WorldSerializer);
container.bind(Service.WORLD_NAME_SERIALIZER).to(WorldNameSerializer);
container.bind(Service.WORLD_CHARACTER_SERIALIZER).to(WorldCharacterSerializer);
container.bind(Service.WORLD_CHARACTER_NAME_SERIALIZER).to(WorldCharacterNameSerializer);
container.bind(Service.DIALOG).to(Dialog);
container.bind(Service.STORE).to(Store);
container.bind(Service.NHENTAI_APP_WINDOW).to(NhentaiAppWindow);
container.bind(Service.NHENTAI_API).to(NhentaiApi);
container.bind(Service.NHENTAI_SOURCE_GETTER).to(NhentaiSourceGetter);
container.bind(Service.APP_WINDOW_MAIN).to(MainAppWindow);