back to esbuild- imports changed
This commit is contained in:
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"jsc": {
|
||||
"parser": {
|
||||
"syntax": "typescript",
|
||||
"tsx": false,
|
||||
"decorators": true,
|
||||
"dynamicImport": true
|
||||
},
|
||||
"target": "es2020",
|
||||
"baseUrl": "."
|
||||
},
|
||||
"module": {
|
||||
"type": "commonjs"
|
||||
}
|
||||
}
|
||||
54
src/node/consumer/esbuild.js
Normal file
54
src/node/consumer/esbuild.js
Normal file
@@ -0,0 +1,54 @@
|
||||
import {build} from "esbuild";
|
||||
import {readFileSync, rmSync} from "fs";
|
||||
|
||||
const {devDependencies} = JSON.parse(readFileSync("./package.json", "utf8"));
|
||||
|
||||
const start = Date.now();
|
||||
|
||||
try {
|
||||
const outdir = "dist";
|
||||
|
||||
rmSync(outdir, {recursive: true, force: true});
|
||||
|
||||
build({
|
||||
bundle: true,
|
||||
entryPoints: [
|
||||
"./src/main.ts",
|
||||
],
|
||||
external: [...(devDependencies && Object.keys(devDependencies))],
|
||||
keepNames: true,
|
||||
minify: true,
|
||||
outbase: "./src",
|
||||
outdir,
|
||||
outExtension: {
|
||||
".js": ".cjs",
|
||||
},
|
||||
platform: "node",
|
||||
plugins: [
|
||||
{
|
||||
name: "populate-import-meta",
|
||||
setup: ({onLoad}) => {
|
||||
onLoad({filter: new RegExp(`${import.meta.dirname}/src/.*.(js|ts)$`)}, args => {
|
||||
const contents = readFileSync(args.path, "utf8");
|
||||
|
||||
const transformedContents = contents
|
||||
.replace(/import\.meta/g, `{dirname:__dirname,filename:__filename}`)
|
||||
.replace(/import\.meta\.filename/g, "__filename")
|
||||
.replace(/import\.meta\.dirname/g, "__dirname");
|
||||
|
||||
return {contents: transformedContents, loader: "default"};
|
||||
});
|
||||
},
|
||||
}
|
||||
],
|
||||
}).then(() => {
|
||||
// biome-ignore lint/style/useTemplate: <explanation>
|
||||
// eslint-disable-next-line no-undef
|
||||
console.log("⚡ " + "\x1b[32m" + `Done in ${Date.now() - start}ms`);
|
||||
});
|
||||
} catch (e) {
|
||||
// eslint-disable-next-line no-undef
|
||||
console.log(e);
|
||||
// eslint-disable-next-line no-undef
|
||||
process.exit(1);
|
||||
}
|
||||
1662
src/node/consumer/package-lock.json
generated
1662
src/node/consumer/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -3,14 +3,12 @@
|
||||
"version": "0.0.1",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "swc src -d dist",
|
||||
"watch-compile": "swc src -w --out-dir dist",
|
||||
"watch-dev": "nodemon --watch \"dist/**/*\" -e js ./dist/main.js",
|
||||
"dev": "concurrently \"npm run watch-compile\" \"npm run watch-dev\"",
|
||||
"start": "node dist/main.js",
|
||||
"clean": "rm -rf dist",
|
||||
"lint": "eslint --ext .ts src",
|
||||
"lint:fix": "eslint --ext .ts src --fix"
|
||||
"build": "node esbuild.js",
|
||||
"dev": "tsx watch --ignore node_modules src/main.ts | pino-pretty",
|
||||
"start": "node dist/main.cjs",
|
||||
"lint": "npx eslint ./src --ext .ts,.js",
|
||||
"lint-fix": "npm run lint -- --fix"
|
||||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -35,21 +33,24 @@
|
||||
"webtorrent": "^2.1.35"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@swc/cli": "^0.3.9",
|
||||
"@swc/core": "^1.4.0",
|
||||
"node-gyp": "^10.0.1",
|
||||
"nodemon": "^3.0.3",
|
||||
"@types/amqplib": "^0.10.4",
|
||||
"@types/magnet-uri": "^5.1.5",
|
||||
"@types/node": "^20.11.16",
|
||||
"@types/validator": "^13.11.8",
|
||||
"@types/webtorrent": "^0.109.7",
|
||||
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
||||
"@typescript-eslint/parser": "^6.21.0",
|
||||
"@types/webtorrent": "^0.109.7",
|
||||
"concurrently": "^8.2.2",
|
||||
"esbuild": "^0.20.0",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-import-helpers": "^1.3.1",
|
||||
"pino-pretty": "^10.3.1",
|
||||
"tsx": "^4.7.0",
|
||||
"ts-node": "^10.9.2",
|
||||
"tsconfig-paths": "^4.2.0",
|
||||
"typescript": "^5.3.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {CacheMethod} from "../services/cache_service";
|
||||
import {CacheMethod} from "@services/cache_service";
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
export interface ICacheService {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {ICommonVideoMetadata} from "./common_video_metadata";
|
||||
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
|
||||
|
||||
export interface ICinemetaJsonResponse {
|
||||
meta?: ICinemetaMetaData;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {IKitsuLink, IKitsuTrailer} from "./kitsu_metadata";
|
||||
import {IKitsuLink, IKitsuTrailer} from "@interfaces/kitsu_metadata";
|
||||
|
||||
export interface IKitsuCatalogJsonResponse {
|
||||
metas: IKitsuCatalogMetaData[];
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {ICommonVideoMetadata} from "./common_video_metadata";
|
||||
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
|
||||
|
||||
export interface IKitsuJsonResponse {
|
||||
cacheMaxAge?: number;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {ICommonVideoMetadata} from "./common_video_metadata";
|
||||
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
|
||||
|
||||
export interface IMetadataResponse {
|
||||
kitsuId?: number;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import {IMetaDataQuery} from "./metadata_query";
|
||||
import {IMetadataResponse} from "./metadata_response";
|
||||
import {IMetaDataQuery} from "@interfaces/metadata_query";
|
||||
import {IMetadataResponse} from "@interfaces/metadata_response";
|
||||
|
||||
export interface IMetadataService {
|
||||
getKitsuId(info: IMetaDataQuery): Promise<number | Error>;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {IFileAttributes} from "../repository/interfaces/file_attributes";
|
||||
import {IFileAttributes} from "@repository/interfaces/file_attributes";
|
||||
|
||||
export interface IParseTorrentTitleResult {
|
||||
title?: string;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {TorrentType} from "../enums/torrent_types";
|
||||
import {IParseTorrentTitleResult} from "./parse_torrent_title_result";
|
||||
import {ITorrentFileCollection} from "./torrent_file_collection";
|
||||
import {TorrentType} from "@enums/torrent_types";
|
||||
import {IParseTorrentTitleResult} from "@interfaces/parse_torrent_title_result";
|
||||
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
|
||||
|
||||
export interface IParsedTorrent extends IParseTorrentTitleResult {
|
||||
size?: number;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {ICommonVideoMetadata} from "./common_video_metadata";
|
||||
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
|
||||
|
||||
export interface ISeasonEpisodeMap {
|
||||
[season: number]: {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import {IParsedTorrent} from "./parsed_torrent";
|
||||
import {ITorrentFileCollection} from "./torrent_file_collection";
|
||||
import {IParsedTorrent} from "@interfaces/parsed_torrent";
|
||||
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
|
||||
|
||||
export interface ITorrentDownloadService {
|
||||
getTorrentFiles(torrent: IParsedTorrent, timeout: number): Promise<ITorrentFileCollection>;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import {ITorrentAttributes} from "../repository/interfaces/torrent_attributes";
|
||||
import {SkipTorrent} from "../repository/models/skipTorrent";
|
||||
import {Torrent} from "../repository/models/torrent";
|
||||
import {IParsedTorrent} from "./parsed_torrent";
|
||||
import {IParsedTorrent} from "@interfaces/parsed_torrent";
|
||||
import {ITorrentAttributes} from "@repository/interfaces/torrent_attributes";
|
||||
import {SkipTorrent} from "@repository/models/skipTorrent";
|
||||
import {Torrent} from "@repository/models/torrent";
|
||||
|
||||
export interface ITorrentEntriesService {
|
||||
createTorrentEntry(torrent: IParsedTorrent, overwrite: boolean): Promise<void>;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {IContentAttributes} from "../repository/interfaces/content_attributes";
|
||||
import {IFileAttributes} from "../repository/interfaces/file_attributes";
|
||||
import {ISubtitleAttributes} from "../repository/interfaces/subtitle_attributes";
|
||||
import {IContentAttributes} from "@repository/interfaces/content_attributes";
|
||||
import {IFileAttributes} from "@repository/interfaces/file_attributes";
|
||||
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
|
||||
|
||||
export interface ITorrentFileCollection {
|
||||
contents?: IContentAttributes[];
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import {IParsedTorrent} from "./parsed_torrent";
|
||||
import {ITorrentFileCollection} from "./torrent_file_collection";
|
||||
import {IParsedTorrent} from "@interfaces/parsed_torrent";
|
||||
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
|
||||
|
||||
export interface ITorrentFileService {
|
||||
parseTorrentFiles(torrent: IParsedTorrent): Promise<ITorrentFileCollection>;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {IIngestedTorrentAttributes} from "../repository/interfaces/ingested_torrent_attributes";
|
||||
import {IIngestedTorrentAttributes} from "@repository/interfaces/ingested_torrent_attributes";
|
||||
|
||||
export interface ITorrentProcessingService {
|
||||
processTorrentRecord(torrent: IIngestedTorrentAttributes): Promise<void>;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {ITorrentFileCollection} from "./torrent_file_collection";
|
||||
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
|
||||
|
||||
export interface ITorrentSubtitleService {
|
||||
assignSubtitles(fileCollection: ITorrentFileCollection): ITorrentFileCollection;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import client, {Channel, Connection, ConsumeMessage, Options} from 'amqplib'
|
||||
import {IIngestedRabbitMessage, IIngestedRabbitTorrent} from "@interfaces/ingested_rabbit_message";
|
||||
import {ILoggingService} from "@interfaces/logging_service";
|
||||
import {IProcessTorrentsJob} from "@interfaces/process_torrents_job";
|
||||
import {ITorrentProcessingService} from "@interfaces/torrent_processing_service";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
import {IIngestedTorrentAttributes} from "@repository/interfaces/ingested_torrent_attributes";
|
||||
import {configurationService} from '@services/configuration_service';
|
||||
import client, {Channel, Connection, ConsumeMessage, Options} from 'amqplib'
|
||||
import {inject, injectable} from "inversify";
|
||||
import {IIngestedRabbitMessage, IIngestedRabbitTorrent} from "../interfaces/ingested_rabbit_message";
|
||||
import {ILoggingService} from "../interfaces/logging_service";
|
||||
import {IProcessTorrentsJob} from "../interfaces/process_torrents_job";
|
||||
import {ITorrentProcessingService} from "../interfaces/torrent_processing_service";
|
||||
import {IocTypes} from "../models/ioc_types";
|
||||
import {IIngestedTorrentAttributes} from "../repository/interfaces/ingested_torrent_attributes";
|
||||
import {configurationService} from '../services/configuration_service';
|
||||
|
||||
@injectable()
|
||||
export class ProcessTorrentsJob implements IProcessTorrentsJob {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import {ICompositionalRoot} from "@interfaces/composition_root";
|
||||
import {IProcessTorrentsJob} from "@interfaces/process_torrents_job";
|
||||
import {ITrackerService} from "@interfaces/tracker_service";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
import {IDatabaseRepository} from "@repository/interfaces/database_repository";
|
||||
import {inject, injectable} from "inversify";
|
||||
import {ICompositionalRoot} from "../interfaces/composition_root";
|
||||
import {IProcessTorrentsJob} from "../interfaces/process_torrents_job";
|
||||
import {ITrackerService} from "../interfaces/tracker_service";
|
||||
import {IDatabaseRepository} from "../repository/interfaces/database_repository";
|
||||
import {IocTypes} from "./ioc_types";
|
||||
|
||||
@injectable()
|
||||
export class CompositionalRoot implements ICompositionalRoot {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {BooleanHelpers} from "../../helpers/boolean_helpers";
|
||||
import {BooleanHelpers} from "@helpers/boolean_helpers";
|
||||
|
||||
export const cacheConfig = {
|
||||
MONGODB_HOST: process.env.MONGODB_HOST || 'mongodb',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {BooleanHelpers} from "../../helpers/boolean_helpers";
|
||||
import {BooleanHelpers} from "@helpers/boolean_helpers";
|
||||
|
||||
export const databaseConfig = {
|
||||
POSTGRES_HOST: process.env.POSTGRES_HOST || 'postgres',
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {BooleanHelpers} from "../../helpers/boolean_helpers";
|
||||
import {BooleanHelpers} from "@helpers/boolean_helpers";
|
||||
|
||||
export const jobConfig = {
|
||||
JOB_CONCURRENCY: parseInt(process.env.JOB_CONCURRENCY || "1", 10),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {BooleanHelpers} from "../../helpers/boolean_helpers";
|
||||
import {BooleanHelpers} from "@helpers/boolean_helpers";
|
||||
|
||||
export const trackerConfig = {
|
||||
TRACKERS_URL: process.env.TRACKERS_URL || 'https://ngosang.github.io/trackerslist/trackers_all.txt',
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
import {ICacheService} from "@interfaces/cache_service";
|
||||
import {ICompositionalRoot} from "@interfaces/composition_root";
|
||||
import {ILoggingService} from "@interfaces/logging_service";
|
||||
import {IMetadataService} from "@interfaces/metadata_service";
|
||||
import {IProcessTorrentsJob} from "@interfaces/process_torrents_job";
|
||||
import {ITorrentDownloadService} from "@interfaces/torrent_download_service";
|
||||
import {ITorrentEntriesService} from "@interfaces/torrent_entries_service";
|
||||
import {ITorrentFileService} from "@interfaces/torrent_file_service";
|
||||
import {ITorrentProcessingService} from "@interfaces/torrent_processing_service";
|
||||
import {ITorrentSubtitleService} from "@interfaces/torrent_subtitle_service";
|
||||
import {ITrackerService} from "@interfaces/tracker_service";
|
||||
import {ProcessTorrentsJob} from "@jobs/process_torrents_job";
|
||||
import {CompositionalRoot} from "@models/composition_root";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
import {DatabaseRepository} from "@repository/database_repository";
|
||||
import {IDatabaseRepository} from "@repository/interfaces/database_repository";
|
||||
import {CacheService} from "@services/cache_service";
|
||||
import {LoggingService} from "@services/logging_service";
|
||||
import {MetadataService} from "@services/metadata_service";
|
||||
import {TorrentDownloadService} from "@services/torrent_download_service";
|
||||
import {TorrentEntriesService} from "@services/torrent_entries_service";
|
||||
import {TorrentFileService} from "@services/torrent_file_service";
|
||||
import {TorrentProcessingService} from "@services/torrent_processing_service";
|
||||
import {TorrentSubtitleService} from "@services/torrent_subtitle_service";
|
||||
import {TrackerService} from "@services/tracker_service";
|
||||
import {Container} from "inversify";
|
||||
import {ICacheService} from "../interfaces/cache_service";
|
||||
import {ICompositionalRoot} from "../interfaces/composition_root";
|
||||
import {ILoggingService} from "../interfaces/logging_service";
|
||||
import {IMetadataService} from "../interfaces/metadata_service";
|
||||
import {IProcessTorrentsJob} from "../interfaces/process_torrents_job";
|
||||
import {ITorrentDownloadService} from "../interfaces/torrent_download_service";
|
||||
import {ITorrentEntriesService} from "../interfaces/torrent_entries_service";
|
||||
import {ITorrentFileService} from "../interfaces/torrent_file_service";
|
||||
import {ITorrentProcessingService} from "../interfaces/torrent_processing_service";
|
||||
import {ITorrentSubtitleService} from "../interfaces/torrent_subtitle_service";
|
||||
import {ITrackerService} from "../interfaces/tracker_service";
|
||||
import {ProcessTorrentsJob} from "../jobs/process_torrents_job";
|
||||
import {DatabaseRepository} from "../repository/database_repository";
|
||||
import {IDatabaseRepository} from "../repository/interfaces/database_repository";
|
||||
import {CacheService} from "../services/cache_service";
|
||||
import {LoggingService} from "../services/logging_service";
|
||||
import {MetadataService} from "../services/metadata_service";
|
||||
import {TorrentDownloadService} from "../services/torrent_download_service";
|
||||
import {TorrentEntriesService} from "../services/torrent_entries_service";
|
||||
import {TorrentFileService} from "../services/torrent_file_service";
|
||||
import {TorrentProcessingService} from "../services/torrent_processing_service";
|
||||
import {TorrentSubtitleService} from "../services/torrent_subtitle_service";
|
||||
import {TrackerService} from "../services/tracker_service";
|
||||
import {CompositionalRoot} from "./composition_root";
|
||||
import {IocTypes} from "./ioc_types";
|
||||
|
||||
const serviceContainer = new Container();
|
||||
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
import {PromiseHelpers} from '@helpers/promises_helpers';
|
||||
import {ILoggingService} from "@interfaces/logging_service";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
import {IContentCreationAttributes} from "@repository/interfaces/content_attributes";
|
||||
import {IDatabaseRepository} from "@repository/interfaces/database_repository";
|
||||
import {IFileAttributes, IFileCreationAttributes} from "@repository/interfaces/file_attributes";
|
||||
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "@repository/interfaces/subtitle_attributes";
|
||||
import {ITorrentAttributes, ITorrentCreationAttributes} from "@repository/interfaces/torrent_attributes";
|
||||
import {Content} from "@repository/models/content";
|
||||
import {File} from "@repository/models/file";
|
||||
import {IngestedPage} from "@repository/models/ingestedPage";
|
||||
import {IngestedTorrent} from "@repository/models/ingestedTorrent";
|
||||
import {Provider} from "@repository/models/provider";
|
||||
import {SkipTorrent} from "@repository/models/skipTorrent";
|
||||
import {Subtitle} from "@repository/models/subtitle";
|
||||
import {Torrent} from "@repository/models/torrent";
|
||||
import {configurationService} from '@services/configuration_service';
|
||||
import {inject, injectable} from "inversify";
|
||||
import moment from 'moment';
|
||||
import {literal, Op, WhereOptions} from "sequelize";
|
||||
import {Model, Sequelize} from 'sequelize-typescript';
|
||||
import {PromiseHelpers} from '../helpers/promises_helpers';
|
||||
import {ILoggingService} from "../interfaces/logging_service";
|
||||
import {IocTypes} from "../models/ioc_types";
|
||||
import {configurationService} from '../services/configuration_service';
|
||||
import {IContentCreationAttributes} from "./interfaces/content_attributes";
|
||||
import {IDatabaseRepository} from "./interfaces/database_repository";
|
||||
import {IFileAttributes, IFileCreationAttributes} from "./interfaces/file_attributes";
|
||||
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "./interfaces/subtitle_attributes";
|
||||
import {ITorrentAttributes, ITorrentCreationAttributes} from "./interfaces/torrent_attributes";
|
||||
import {Content} from "./models/content";
|
||||
import {File} from "./models/file";
|
||||
import {IngestedPage} from "./models/ingestedPage";
|
||||
import {IngestedTorrent} from "./models/ingestedTorrent";
|
||||
import {Provider} from "./models/provider";
|
||||
import {SkipTorrent} from "./models/skipTorrent";
|
||||
import {Subtitle} from "./models/subtitle";
|
||||
import {Torrent} from "./models/torrent";
|
||||
|
||||
@injectable()
|
||||
export class DatabaseRepository implements IDatabaseRepository {
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import {IContentCreationAttributes} from "@repository/interfaces/content_attributes";
|
||||
import {IFileAttributes, IFileCreationAttributes} from "@repository/interfaces/file_attributes";
|
||||
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "@repository/interfaces/subtitle_attributes";
|
||||
import {ITorrentAttributes, ITorrentCreationAttributes} from "@repository/interfaces/torrent_attributes";
|
||||
import {Content} from "@repository/models/content";
|
||||
import {File} from "@repository/models/file";
|
||||
import {Provider} from "@repository/models/provider";
|
||||
import {SkipTorrent} from "@repository/models/skipTorrent";
|
||||
import {Subtitle} from "@repository/models/subtitle";
|
||||
import {Torrent} from "@repository/models/torrent";
|
||||
import {WhereOptions} from "sequelize";
|
||||
import {Model} from "sequelize-typescript";
|
||||
import {Content} from "../models/content";
|
||||
import {File} from "../models/file";
|
||||
import {Provider} from "../models/provider";
|
||||
import {SkipTorrent} from "../models/skipTorrent";
|
||||
import {Subtitle} from "../models/subtitle";
|
||||
import {Torrent} from "../models/torrent";
|
||||
import {IContentCreationAttributes} from "./content_attributes";
|
||||
import {IFileAttributes, IFileCreationAttributes} from "./file_attributes";
|
||||
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "./subtitle_attributes";
|
||||
import {ITorrentAttributes, ITorrentCreationAttributes} from "./torrent_attributes";
|
||||
|
||||
export interface IDatabaseRepository {
|
||||
connect(): Promise<void>;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {IParseTorrentTitleResult} from "@interfaces/parse_torrent_title_result";
|
||||
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
|
||||
import {Optional} from "sequelize";
|
||||
import {IParseTorrentTitleResult} from "../../interfaces/parse_torrent_title_result";
|
||||
import {ISubtitleAttributes} from "./subtitle_attributes";
|
||||
|
||||
export interface IFileAttributes extends IParseTorrentTitleResult {
|
||||
id?: number;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import {IContentAttributes} from "@repository/interfaces/content_attributes";
|
||||
import {IFileAttributes} from "@repository/interfaces/file_attributes";
|
||||
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
|
||||
import {Optional} from "sequelize";
|
||||
import {IContentAttributes} from "./content_attributes";
|
||||
import {IFileAttributes} from "./file_attributes";
|
||||
import {ISubtitleAttributes} from "./subtitle_attributes";
|
||||
|
||||
export interface ITorrentAttributes {
|
||||
infoHash: string;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {IContentAttributes, IContentCreationAttributes} from "@repository/interfaces/content_attributes";
|
||||
import {Torrent} from "@repository/models/torrent";
|
||||
import {BelongsTo, Column, DataType, ForeignKey, Model, Table} from 'sequelize-typescript';
|
||||
import {IContentAttributes, IContentCreationAttributes} from "../interfaces/content_attributes";
|
||||
import {Torrent} from "./torrent";
|
||||
|
||||
@Table({modelName: 'content', timestamps: false})
|
||||
export class Content extends Model<IContentAttributes, IContentCreationAttributes> {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import {IFileAttributes, IFileCreationAttributes} from "@repository/interfaces/file_attributes";
|
||||
import {Subtitle} from "@repository/models/subtitle";
|
||||
import {Torrent} from "@repository/models/torrent";
|
||||
import {BelongsTo, Column, DataType, ForeignKey, HasMany, Model, Table} from 'sequelize-typescript';
|
||||
import {IFileAttributes, IFileCreationAttributes} from "../interfaces/file_attributes";
|
||||
import {Subtitle} from "./subtitle";
|
||||
import {Torrent} from "./torrent";
|
||||
|
||||
const indexes = [
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import {IIngestedPageAttributes, IIngestedPageCreationAttributes} from "@repository/interfaces/ingested_page_attributes";
|
||||
import {Column, DataType, Model, Table} from 'sequelize-typescript';
|
||||
import {IIngestedPageAttributes, IIngestedPageCreationAttributes} from "../interfaces/ingested_page_attributes";
|
||||
|
||||
const indexes = [
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import {IIngestedTorrentAttributes, IIngestedTorrentCreationAttributes} from "@repository/interfaces/ingested_torrent_attributes";
|
||||
import {Column, DataType, Model, Table} from 'sequelize-typescript';
|
||||
import {IIngestedTorrentAttributes, IIngestedTorrentCreationAttributes} from "../interfaces/ingested_torrent_attributes";
|
||||
|
||||
const indexes = [
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import {IProviderAttributes, IProviderCreationAttributes} from "@repository/interfaces/provider_attributes";
|
||||
import {Column, DataType, Model, Table} from 'sequelize-typescript';
|
||||
import {IProviderAttributes, IProviderCreationAttributes} from "../interfaces/provider_attributes";
|
||||
|
||||
@Table({modelName: 'provider', timestamps: false})
|
||||
export class Provider extends Model<IProviderAttributes, IProviderCreationAttributes> {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import {ISkipTorrentAttributes, ISkipTorrentCreationAttributes} from "@repository/interfaces/skip_torrent_attributes";
|
||||
import {Column, DataType, Model, Table} from 'sequelize-typescript';
|
||||
import {ISkipTorrentAttributes, ISkipTorrentCreationAttributes} from "../interfaces/skip_torrent_attributes";
|
||||
|
||||
|
||||
@Table({modelName: 'skip_torrent', timestamps: false})
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "@repository/interfaces/subtitle_attributes";
|
||||
import {File} from "@repository/models/file";
|
||||
import {BelongsTo, Column, DataType, ForeignKey, Model, Table} from 'sequelize-typescript';
|
||||
import {ISubtitleAttributes, ISubtitleCreationAttributes} from "../interfaces/subtitle_attributes";
|
||||
import {File} from "./file";
|
||||
|
||||
const indexes = [
|
||||
{
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import {ITorrentAttributes, ITorrentCreationAttributes} from "@repository/interfaces/torrent_attributes";
|
||||
import {Content} from "@repository/models/content";
|
||||
import {File} from "@repository/models/file";
|
||||
import {Subtitle} from "@repository/models/subtitle";
|
||||
import {Column, DataType, HasMany, Model, Table} from 'sequelize-typescript';
|
||||
import {ITorrentAttributes, ITorrentCreationAttributes} from "../interfaces/torrent_attributes";
|
||||
import {Content} from "./content";
|
||||
import {File} from "./file";
|
||||
import {Subtitle} from "./subtitle";
|
||||
|
||||
@Table({modelName: 'torrent', timestamps: true})
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import {CacheType} from "@enums/cache_types";
|
||||
import {ICacheOptions} from "@interfaces/cache_options";
|
||||
import {ICacheService} from "@interfaces/cache_service";
|
||||
import {ILoggingService} from "@interfaces/logging_service";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
import {configurationService} from '@services/configuration_service';
|
||||
import {mongoDbStore} from '@tirke/node-cache-manager-mongodb'
|
||||
import {Cache, createCache, MemoryCache, memoryStore} from 'cache-manager';
|
||||
import {inject, injectable} from "inversify";
|
||||
import {CacheType} from "../enums/cache_types";
|
||||
import {ICacheOptions} from "../interfaces/cache_options";
|
||||
import {ICacheService} from "../interfaces/cache_service";
|
||||
import {ILoggingService} from "../interfaces/logging_service";
|
||||
import {IocTypes} from "../models/ioc_types";
|
||||
import {configurationService} from './configuration_service';
|
||||
|
||||
const GLOBAL_KEY_PREFIX = 'knightcrawler-consumer';
|
||||
const IMDB_ID_PREFIX = `${GLOBAL_KEY_PREFIX}|imdb_id`;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import {cacheConfig} from "../models/configuration/cache_config";
|
||||
import {databaseConfig} from "../models/configuration/database_config";
|
||||
import {jobConfig} from "../models/configuration/job_config";
|
||||
import {metadataConfig} from "../models/configuration/metadata_config";
|
||||
import {rabbitConfig} from "../models/configuration/rabbit_config";
|
||||
import {torrentConfig} from "../models/configuration/torrent_config";
|
||||
import {trackerConfig} from "../models/configuration/tracker_config";
|
||||
import {cacheConfig} from "@models/configuration/cache_config";
|
||||
import {databaseConfig} from "@models/configuration/database_config";
|
||||
import {jobConfig} from "@models/configuration/job_config";
|
||||
import {metadataConfig} from "@models/configuration/metadata_config";
|
||||
import {rabbitConfig} from "@models/configuration/rabbit_config";
|
||||
import {torrentConfig} from "@models/configuration/torrent_config";
|
||||
import {trackerConfig} from "@models/configuration/tracker_config";
|
||||
|
||||
export const configurationService = {
|
||||
rabbitConfig: rabbitConfig,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {ILoggingService} from "@interfaces/logging_service";
|
||||
import {injectable} from "inversify";
|
||||
import {Logger, pino} from "pino";
|
||||
import {ILoggingService} from "../interfaces/logging_service";
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
@injectable()
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
|
||||
import {TorrentType} from '@enums/torrent_types';
|
||||
import {ICacheService} from "@interfaces/cache_service";
|
||||
import {ICinemetaJsonResponse} from "@interfaces/cinemeta_metadata";
|
||||
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
|
||||
import {IKitsuCatalogJsonResponse} from "@interfaces/kitsu_catalog_metadata";
|
||||
import {IKitsuJsonResponse} from "@interfaces/kitsu_metadata";
|
||||
import {IMetaDataQuery} from "@interfaces/metadata_query";
|
||||
import {IMetadataResponse} from "@interfaces/metadata_response";
|
||||
import {IMetadataService} from "@interfaces/metadata_service";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
import axios, {AxiosResponse} from 'axios';
|
||||
import {ResultTypes, search} from 'google-sr';
|
||||
import {inject, injectable} from "inversify";
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-expect-error
|
||||
import nameToImdb from 'name-to-imdb';
|
||||
import {TorrentType} from '../enums/torrent_types';
|
||||
import {ICacheService} from "../interfaces/cache_service";
|
||||
import {ICinemetaJsonResponse} from "../interfaces/cinemeta_metadata";
|
||||
import {ICommonVideoMetadata} from "../interfaces/common_video_metadata";
|
||||
import {IKitsuCatalogJsonResponse} from "../interfaces/kitsu_catalog_metadata";
|
||||
import {IKitsuJsonResponse} from "../interfaces/kitsu_metadata";
|
||||
import {IMetaDataQuery} from "../interfaces/metadata_query";
|
||||
import {IMetadataResponse} from "../interfaces/metadata_response";
|
||||
import {IMetadataService} from "../interfaces/metadata_service";
|
||||
import {IocTypes} from "../models/ioc_types";
|
||||
|
||||
const CINEMETA_URL = 'https://v3-cinemeta.strem.io';
|
||||
const KITSU_URL = 'https://anime-kitsu.strem.fun';
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
import {ExtensionHelpers} from '@helpers/extension_helpers';
|
||||
import {ILoggingService} from "@interfaces/logging_service";
|
||||
import {IParsedTorrent} from "@interfaces/parsed_torrent";
|
||||
import {ITorrentDownloadService} from "@interfaces/torrent_download_service";
|
||||
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
import {IContentAttributes} from "@repository/interfaces/content_attributes";
|
||||
import {IFileAttributes} from "@repository/interfaces/file_attributes";
|
||||
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
|
||||
import {configurationService} from '@services/configuration_service';
|
||||
import {inject, injectable} from "inversify";
|
||||
import {encode} from 'magnet-uri';
|
||||
import {parse} from "parse-torrent-title";
|
||||
import WebTorrent from "webtorrent";
|
||||
import {ExtensionHelpers} from '../helpers/extension_helpers';
|
||||
import {ILoggingService} from "../interfaces/logging_service";
|
||||
import {IParsedTorrent} from "../interfaces/parsed_torrent";
|
||||
import {ITorrentDownloadService} from "../interfaces/torrent_download_service";
|
||||
import {ITorrentFileCollection} from "../interfaces/torrent_file_collection";
|
||||
import {IocTypes} from "../models/ioc_types";
|
||||
import {IContentAttributes} from "../repository/interfaces/content_attributes";
|
||||
import {IFileAttributes} from "../repository/interfaces/file_attributes";
|
||||
import {ISubtitleAttributes} from "../repository/interfaces/subtitle_attributes";
|
||||
import {configurationService} from './configuration_service';
|
||||
|
||||
interface ITorrentFile {
|
||||
name: string;
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
import {TorrentType} from '@enums/torrent_types';
|
||||
import {PromiseHelpers} from '@helpers/promises_helpers';
|
||||
import {ILoggingService} from "@interfaces/logging_service";
|
||||
import {IMetaDataQuery} from "@interfaces/metadata_query";
|
||||
import {IMetadataService} from "@interfaces/metadata_service";
|
||||
import {IParsedTorrent} from "@interfaces/parsed_torrent";
|
||||
import {ITorrentEntriesService} from "@interfaces/torrent_entries_service";
|
||||
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
|
||||
import {ITorrentFileService} from "@interfaces/torrent_file_service";
|
||||
import {ITorrentSubtitleService} from "@interfaces/torrent_subtitle_service";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
import {IDatabaseRepository} from "@repository/interfaces/database_repository";
|
||||
import {IFileCreationAttributes} from "@repository/interfaces/file_attributes";
|
||||
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
|
||||
import {ITorrentAttributes, ITorrentCreationAttributes} from "@repository/interfaces/torrent_attributes";
|
||||
import {File} from "@repository/models/file";
|
||||
import {SkipTorrent} from "@repository/models/skipTorrent";
|
||||
import {Subtitle} from "@repository/models/subtitle";
|
||||
import {Torrent} from "@repository/models/torrent";
|
||||
import {inject, injectable} from "inversify";
|
||||
import {parse} from 'parse-torrent-title';
|
||||
import {TorrentType} from '../enums/torrent_types';
|
||||
import {PromiseHelpers} from '../helpers/promises_helpers';
|
||||
import {ILoggingService} from "../interfaces/logging_service";
|
||||
import {IMetaDataQuery} from "../interfaces/metadata_query";
|
||||
import {IMetadataService} from "../interfaces/metadata_service";
|
||||
import {IParsedTorrent} from "../interfaces/parsed_torrent";
|
||||
import {ITorrentEntriesService} from "../interfaces/torrent_entries_service";
|
||||
import {ITorrentFileCollection} from "../interfaces/torrent_file_collection";
|
||||
import {ITorrentFileService} from "../interfaces/torrent_file_service";
|
||||
import {ITorrentSubtitleService} from "../interfaces/torrent_subtitle_service";
|
||||
import {IocTypes} from "../models/ioc_types";
|
||||
import {IDatabaseRepository} from "../repository/interfaces/database_repository";
|
||||
import {IFileCreationAttributes} from "../repository/interfaces/file_attributes";
|
||||
import {ISubtitleAttributes} from "../repository/interfaces/subtitle_attributes";
|
||||
import {ITorrentAttributes, ITorrentCreationAttributes} from "../repository/interfaces/torrent_attributes";
|
||||
import {File} from "../repository/models/file";
|
||||
import {SkipTorrent} from "../repository/models/skipTorrent";
|
||||
import {Subtitle} from "../repository/models/subtitle";
|
||||
import {Torrent} from "../repository/models/torrent";
|
||||
|
||||
@injectable()
|
||||
export class TorrentEntriesService implements ITorrentEntriesService {
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
import {TorrentType} from '@enums/torrent_types';
|
||||
import {ExtensionHelpers} from '@helpers/extension_helpers';
|
||||
import {PromiseHelpers} from '@helpers/promises_helpers';
|
||||
import {ICommonVideoMetadata} from "@interfaces/common_video_metadata";
|
||||
import {ILoggingService} from "@interfaces/logging_service";
|
||||
import {IMetaDataQuery} from "@interfaces/metadata_query";
|
||||
import {IMetadataResponse} from "@interfaces/metadata_response";
|
||||
import {IMetadataService} from "@interfaces/metadata_service";
|
||||
import {IParsedTorrent} from "@interfaces/parsed_torrent";
|
||||
import {ISeasonEpisodeMap} from "@interfaces/season_episode_map";
|
||||
import {ITorrentDownloadService} from "@interfaces/torrent_download_service";
|
||||
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
|
||||
import {ITorrentFileService} from "@interfaces/torrent_file_service";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
import {IContentAttributes} from "@repository/interfaces/content_attributes";
|
||||
import {IFileAttributes} from "@repository/interfaces/file_attributes";
|
||||
import {configurationService} from '@services/configuration_service';
|
||||
import Bottleneck from 'bottleneck';
|
||||
import {inject, injectable} from "inversify";
|
||||
import moment from 'moment';
|
||||
import {parse} from 'parse-torrent-title';
|
||||
import {TorrentType} from '../enums/torrent_types';
|
||||
import {ExtensionHelpers} from '../helpers/extension_helpers';
|
||||
import {PromiseHelpers} from '../helpers/promises_helpers';
|
||||
import {ICommonVideoMetadata} from "../interfaces/common_video_metadata";
|
||||
import {ILoggingService} from "../interfaces/logging_service";
|
||||
import {IMetaDataQuery} from "../interfaces/metadata_query";
|
||||
import {IMetadataResponse} from "../interfaces/metadata_response";
|
||||
import {IMetadataService} from "../interfaces/metadata_service";
|
||||
import {IParsedTorrent} from "../interfaces/parsed_torrent";
|
||||
import {ISeasonEpisodeMap} from "../interfaces/season_episode_map";
|
||||
import {ITorrentDownloadService} from "../interfaces/torrent_download_service";
|
||||
import {ITorrentFileCollection} from "../interfaces/torrent_file_collection";
|
||||
import {ITorrentFileService} from "../interfaces/torrent_file_service";
|
||||
import {IocTypes} from "../models/ioc_types";
|
||||
import {IContentAttributes} from "../repository/interfaces/content_attributes";
|
||||
import {IFileAttributes} from "../repository/interfaces/file_attributes";
|
||||
import {configurationService} from './configuration_service';
|
||||
|
||||
const MIN_SIZE: number = 5 * 1024 * 1024; // 5 MB
|
||||
const MULTIPLE_FILES_SIZE = 4 * 1024 * 1024 * 1024; // 4 GB
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import {TorrentType} from "@enums/torrent_types";
|
||||
import {ILoggingService} from "@interfaces/logging_service";
|
||||
import {IParsedTorrent} from "@interfaces/parsed_torrent";
|
||||
import {ITorrentEntriesService} from "@interfaces/torrent_entries_service";
|
||||
import {ITorrentProcessingService} from "@interfaces/torrent_processing_service";
|
||||
import {ITrackerService} from "@interfaces/tracker_service";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
import {IIngestedTorrentAttributes} from "@repository/interfaces/ingested_torrent_attributes";
|
||||
import {inject, injectable} from "inversify";
|
||||
import {TorrentType} from "../enums/torrent_types";
|
||||
import {ILoggingService} from "../interfaces/logging_service";
|
||||
import {IParsedTorrent} from "../interfaces/parsed_torrent";
|
||||
import {ITorrentEntriesService} from "../interfaces/torrent_entries_service";
|
||||
import {ITorrentProcessingService} from "../interfaces/torrent_processing_service";
|
||||
import {ITrackerService} from "../interfaces/tracker_service";
|
||||
import {IocTypes} from "../models/ioc_types";
|
||||
import {IIngestedTorrentAttributes} from "../repository/interfaces/ingested_torrent_attributes";
|
||||
|
||||
@injectable()
|
||||
export class TorrentProcessingService implements ITorrentProcessingService {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import {ITorrentFileCollection} from "@interfaces/torrent_file_collection";
|
||||
import {ITorrentSubtitleService} from "@interfaces/torrent_subtitle_service";
|
||||
import {IFileAttributes} from "@repository/interfaces/file_attributes";
|
||||
import {ISubtitleAttributes} from "@repository/interfaces/subtitle_attributes";
|
||||
import {injectable} from "inversify";
|
||||
import {parse} from 'parse-torrent-title';
|
||||
import {ITorrentFileCollection} from "../interfaces/torrent_file_collection";
|
||||
import {ITorrentSubtitleService} from "../interfaces/torrent_subtitle_service";
|
||||
import {IFileAttributes} from "../repository/interfaces/file_attributes";
|
||||
import {ISubtitleAttributes} from "../repository/interfaces/subtitle_attributes";
|
||||
|
||||
@injectable()
|
||||
export class TorrentSubtitleService implements ITorrentSubtitleService {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import {ICacheService} from "@interfaces/cache_service";
|
||||
import {ILoggingService} from "@interfaces/logging_service";
|
||||
import {ITrackerService} from "@interfaces/tracker_service";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
import {configurationService} from '@services/configuration_service';
|
||||
import axios, {AxiosResponse} from 'axios';
|
||||
import {inject, injectable} from "inversify";
|
||||
import {ICacheService} from "../interfaces/cache_service";
|
||||
import {ILoggingService} from "../interfaces/logging_service";
|
||||
import {ITrackerService} from "../interfaces/tracker_service";
|
||||
import {IocTypes} from "../models/ioc_types";
|
||||
import {configurationService} from './configuration_service';
|
||||
|
||||
@injectable()
|
||||
export class TrackerService implements ITrackerService {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import "reflect-metadata"; // required
|
||||
import {ICompositionalRoot} from "./lib/interfaces/composition_root";
|
||||
import {serviceContainer} from "./lib/models/inversify_config";
|
||||
import {IocTypes} from "./lib/models/ioc_types";
|
||||
import {ICompositionalRoot} from "@interfaces/composition_root";
|
||||
import {serviceContainer} from "@models/inversify_config";
|
||||
import {IocTypes} from "@models/ioc_types";
|
||||
|
||||
(async (): Promise<void> => {
|
||||
const compositionalRoot = serviceContainer.get<ICompositionalRoot>(IocTypes.ICompositionalRoot);
|
||||
|
||||
@@ -1,29 +1,36 @@
|
||||
{
|
||||
"compileOnSave": false,
|
||||
"compilerOptions": {
|
||||
"target": "es2020",
|
||||
"module": "es2020",
|
||||
"allowJs": true,
|
||||
"removeComments": true,
|
||||
"resolveJsonModule": true,
|
||||
"typeRoots": [
|
||||
"./node_modules/@types"
|
||||
],
|
||||
"sourceMap": true,
|
||||
"outDir": "dist",
|
||||
"strict": true,
|
||||
"lib": [
|
||||
"es2020"
|
||||
],
|
||||
"baseUrl": ".",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"esModuleInterop": true,
|
||||
"target": "ESNext",
|
||||
"lib": ["ESNext"],
|
||||
"typeRoots": ["node_modules/@types"],
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"moduleResolution": "Node",
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"moduleResolution": "node",
|
||||
"module": "ESNext",
|
||||
"pretty": true,
|
||||
"sourceMap": true,
|
||||
"declaration": true,
|
||||
"outDir": "dist",
|
||||
"allowJs": false,
|
||||
"noEmit": false,
|
||||
"esModuleInterop": true,
|
||||
"resolveJsonModule": true,
|
||||
"importHelpers": true,
|
||||
"baseUrl": "src",
|
||||
"paths": {
|
||||
"@/*": ["*"],
|
||||
"@enums/*": ["lib/enums/*"],
|
||||
"@repository/*": ["lib/repository/*"],
|
||||
"@interfaces/*": ["lib/interfaces/*"],
|
||||
"@models/*": ["lib/models/*"],
|
||||
"@services/*": ["lib/services/*"],
|
||||
"@helpers/*": ["lib/helpers/*"],
|
||||
"@jobs/*": ["lib/jobs/*"]
|
||||
}
|
||||
},
|
||||
"include": [
|
||||
"src/**/*"
|
||||
],
|
||||
"exclude": ["node_modules"],
|
||||
"include": ["src/**/*.ts"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
Reference in New Issue
Block a user