From 48bef13e4d61f2878b5f5c616092e4cb9d234fea Mon Sep 17 00:00:00 2001 From: mProjectsCode Date: Tue, 29 Nov 2022 19:45:55 +0100 Subject: [PATCH] fix eslint --- .eslintrc | 7 ++- package-lock.json | 16 +++++++ package.json | 1 + src/api/apis/BoardGameGeekAPI.ts | 2 +- src/api/apis/LocGovAPI.ts | 1 - src/api/apis/MALAPI.ts | 2 +- src/api/apis/MusicBrainzAPI.ts | 2 +- src/api/apis/OMDbAPI.ts | 2 +- src/api/apis/SteamAPI.ts | 6 +-- src/api/apis/WikipediaAPI.ts | 2 +- src/main.ts | 61 ++++++++++++------------ src/modals/MediaDbAdvancedSearchModal.ts | 6 +-- src/modals/MediaDbFolderImportModal.ts | 6 +-- src/modals/MediaDbIdSearchModal.ts | 6 +-- src/modals/MediaDbPreviewModal.ts | 4 +- src/modals/MediaDbSearchModal.ts | 20 +++----- src/modals/MediaDbSearchResultModal.ts | 8 ++-- src/modals/SelectModal.ts | 12 ++--- src/modals/SelectModalElement.ts | 2 +- src/settings/PropertyMapper.ts | 1 + src/settings/Settings.ts | 8 ++-- src/settings/suggesters/Suggest.ts | 8 ++-- src/utils/MediaTypeManager.ts | 9 ++-- src/utils/ModalHelper.ts | 25 ++++------ src/utils/Utils.ts | 58 ++++++---------------- 25 files changed, 126 insertions(+), 149 deletions(-) diff --git a/.eslintrc b/.eslintrc index c234081..cf46c54 100644 --- a/.eslintrc +++ b/.eslintrc @@ -2,7 +2,7 @@ "root": true, "parser": "@typescript-eslint/parser", "env": { "node": true }, - "plugins": ["@typescript-eslint"], + "plugins": ["@typescript-eslint", "only-warn"], "extends": ["eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended"], "parserOptions": { "sourceType": "module" @@ -12,6 +12,9 @@ "@typescript-eslint/no-unused-vars": ["error", { "args": "none" }], "@typescript-eslint/ban-ts-comment": "off", "no-prototype-builtins": "off", - "@typescript-eslint/no-empty-function": "off" + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-function-return-type": ["warn"] } } diff --git a/package-lock.json b/package-lock.json index b1a35b9..412a4f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "builtin-modules": "^3.2.0", "esbuild": "0.13.12", "esbuild-svelte": "^0.7.1", + "eslint-plugin-only-warn": "^1.0.3", "jest": "^28.1.2", "jest-fetch-mock": "^3.0.3", "obsidian": "latest", @@ -2494,6 +2495,15 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-plugin-only-warn": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.0.3.tgz", + "integrity": "sha512-XQOX/TfLoLw6h8ky51d29uUjXRTQHqBGXPylDEmy5fe/w7LIOnp8MA24b1OSMEn9BQoKow1q3g1kLe5/9uBTvw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -7245,6 +7255,12 @@ } } }, + "eslint-plugin-only-warn": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.0.3.tgz", + "integrity": "sha512-XQOX/TfLoLw6h8ky51d29uUjXRTQHqBGXPylDEmy5fe/w7LIOnp8MA24b1OSMEn9BQoKow1q3g1kLe5/9uBTvw==", + "dev": true + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", diff --git a/package.json b/package.json index 3fb465e..94a2ba3 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "builtin-modules": "^3.2.0", "esbuild": "0.13.12", "esbuild-svelte": "^0.7.1", + "eslint-plugin-only-warn": "^1.0.3", "jest": "^28.1.2", "jest-fetch-mock": "^3.0.3", "obsidian": "latest", diff --git a/src/api/apis/BoardGameGeekAPI.ts b/src/api/apis/BoardGameGeekAPI.ts index 9f3ea20..fb8a470 100644 --- a/src/api/apis/BoardGameGeekAPI.ts +++ b/src/api/apis/BoardGameGeekAPI.ts @@ -35,7 +35,7 @@ export class BoardGameGeekAPI extends APIModel { console.debug(response); - let ret: MediaTypeModel[] = []; + const ret: MediaTypeModel[] = []; for (const boardgame of Array.from(response.querySelectorAll('boardgame'))) { const id = boardgame.attributes.getNamedItem('objectid')!.value; diff --git a/src/api/apis/LocGovAPI.ts b/src/api/apis/LocGovAPI.ts index 9e45bb2..97addde 100644 --- a/src/api/apis/LocGovAPI.ts +++ b/src/api/apis/LocGovAPI.ts @@ -1,7 +1,6 @@ import { APIModel } from '../APIModel'; import { MediaTypeModel } from '../../models/MediaTypeModel'; import MediaDbPlugin from '../../main'; -import { debugLog } from '../../utils/Utils'; // WIP export class LocGovAPI extends APIModel { diff --git a/src/api/apis/MALAPI.ts b/src/api/apis/MALAPI.ts index 50667ba..a728316 100644 --- a/src/api/apis/MALAPI.ts +++ b/src/api/apis/MALAPI.ts @@ -38,7 +38,7 @@ export class MALAPI extends APIModel { console.debug(data); - let ret: MediaTypeModel[] = []; + const ret: MediaTypeModel[] = []; for (const result of data.data) { const type = this.typeMappings.get(result.type?.toLowerCase()); diff --git a/src/api/apis/MusicBrainzAPI.ts b/src/api/apis/MusicBrainzAPI.ts index 484566e..a731ecc 100644 --- a/src/api/apis/MusicBrainzAPI.ts +++ b/src/api/apis/MusicBrainzAPI.ts @@ -39,7 +39,7 @@ export class MusicBrainzAPI extends APIModel { const data = await fetchData.json; console.debug(data); - let ret: MediaTypeModel[] = []; + const ret: MediaTypeModel[] = []; for (const result of data['release-groups']) { ret.push( diff --git a/src/api/apis/OMDbAPI.ts b/src/api/apis/OMDbAPI.ts index 34d5bee..5460c7a 100644 --- a/src/api/apis/OMDbAPI.ts +++ b/src/api/apis/OMDbAPI.ts @@ -48,7 +48,7 @@ export class OMDbAPI extends APIModel { console.debug(data.Search); - let ret: MediaTypeModel[] = []; + const ret: MediaTypeModel[] = []; for (const result of data.Search) { const type = this.typeMappings.get(result.Type.toLowerCase()); diff --git a/src/api/apis/SteamAPI.ts b/src/api/apis/SteamAPI.ts index 3a02663..ae36d3a 100644 --- a/src/api/apis/SteamAPI.ts +++ b/src/api/apis/SteamAPI.ts @@ -37,7 +37,7 @@ export class SteamAPI extends APIModel { console.debug(data); - let filteredData = []; + const filteredData = []; for (const app of data.applist.apps) { if (app.name.toLowerCase().includes(title.toLowerCase())) { @@ -48,7 +48,7 @@ export class SteamAPI extends APIModel { } } - let ret: MediaTypeModel[] = []; + const ret: MediaTypeModel[] = []; for (const result of filteredData) { ret.push( @@ -69,7 +69,7 @@ export class SteamAPI extends APIModel { async getById(id: string): Promise { console.log(`MDB | api "${this.apiName}" queried by ID`); - const searchUrl = `http://store.steampowered.com/api/appdetails?appids=${encodeURIComponent(id)}`; + const searchUrl = `http://store.steampowered.com/api/appdetails?appids=${encodeURIComponent(id)}&l=en`; const fetchData = await requestUrl({ url: searchUrl, }); diff --git a/src/api/apis/WikipediaAPI.ts b/src/api/apis/WikipediaAPI.ts index 6947612..5193bb4 100644 --- a/src/api/apis/WikipediaAPI.ts +++ b/src/api/apis/WikipediaAPI.ts @@ -30,7 +30,7 @@ export class WikipediaAPI extends APIModel { const data = await fetchData.json(); console.debug(data); - let ret: MediaTypeModel[] = []; + const ret: MediaTypeModel[] = []; for (const result of data.query.search) { ret.push( diff --git a/src/main.ts b/src/main.ts index ded9ce2..76abff4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -25,7 +25,7 @@ export default class MediaDbPlugin extends Plugin { frontMatterRexExpPattern: string = '^(---)\\n[\\s\\S]*?\\n---'; - async onload() { + async onload(): Promise { this.apiManager = new APIManager(); // register APIs this.apiManager.registerAPI(new OMDbAPI(this)); @@ -48,7 +48,7 @@ export default class MediaDbPlugin extends Plugin { this.mediaTypeManager.updateFolders(this.settings); // add icon to the left ribbon - const ribbonIconEl = this.addRibbonIcon('database', 'Add new Media DB entry', (evt: MouseEvent) => this.createEntryWithAdvancedSearchModal()); + const ribbonIconEl = this.addRibbonIcon('database', 'Add new Media DB entry', () => this.createEntryWithAdvancedSearchModal()); ribbonIconEl.addClass('obsidian-media-db-plugin-ribbon-class'); this.registerEvent( @@ -136,8 +136,8 @@ export default class MediaDbPlugin extends Plugin { * - replace the detail query * - maybe custom link syntax */ - async createLinkWithSearchModal() { - let apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { + async createLinkWithSearchModal(): Promise { + const apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis); }); @@ -163,7 +163,7 @@ export default class MediaDbPlugin extends Plugin { } } - async createEntryWithSearchModal(searchModalOptions?: SearchModalOptions) { + async createEntryWithSearchModal(searchModalOptions?: SearchModalOptions): Promise { let types: string[] = []; let apiSearchResults: MediaTypeModel[] = await this.modalHelper.openSearchModal(searchModalOptions ?? {}, async searchModalData => { types = searchModalData.types; @@ -198,8 +198,8 @@ export default class MediaDbPlugin extends Plugin { await this.createMediaDbNotes(selectResults); } - async createEntryWithAdvancedSearchModal() { - let apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { + async createEntryWithAdvancedSearchModal(): Promise { + const apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis); }); @@ -254,7 +254,7 @@ export default class MediaDbPlugin extends Plugin { } async queryDetails(models: MediaTypeModel[]): Promise { - let detailModels: MediaTypeModel[] = []; + const detailModels: MediaTypeModel[] = []; for (const model of models) { try { detailModels.push(await this.apiManager.queryDetailedInfo(model)); @@ -270,7 +270,7 @@ export default class MediaDbPlugin extends Plugin { try { console.debug('MDB | creating new note'); - let fileContent = await this.generateMediaDbNoteContents(mediaTypeModel, options); + const fileContent = await this.generateMediaDbNoteContents(mediaTypeModel, options); if (!options.folder) { options.folder = await this.mediaTypeManager.getFolder(mediaTypeModel, this.app); @@ -283,7 +283,7 @@ export default class MediaDbPlugin extends Plugin { } } - async generateMediaDbNoteContents(mediaTypeModel: MediaTypeModel, options: CreateNoteOptions) { + async generateMediaDbNoteContents(mediaTypeModel: MediaTypeModel, options: CreateNoteOptions): Promise { let fileMetadata = this.modelPropertyMapper.convertObject(mediaTypeModel.toMetaDataObject()); let fileContent = ''; const template = options.attachTemplate ? await this.mediaTypeManager.getTemplate(mediaTypeModel, this.app) : ''; @@ -300,7 +300,7 @@ export default class MediaDbPlugin extends Plugin { return { fileMetadata: fileMetadata, fileContent: fileContent }; } - let attachFileMetadata: any = this.getMetadataFromFileCache(fileToAttach); + const attachFileMetadata: any = this.getMetadataFromFileCache(fileToAttach); fileMetadata = Object.assign(attachFileMetadata, fileMetadata); let attachFileContent: string = await this.app.vault.read(fileToAttach); @@ -317,7 +317,7 @@ export default class MediaDbPlugin extends Plugin { return { fileMetadata: fileMetadata, fileContent: fileContent }; } - let templateMetadata: any = this.getMetaDataFromFileContent(template); + const templateMetadata: any = this.getMetaDataFromFileContent(template); fileMetadata = Object.assign(templateMetadata, fileMetadata); const regExp = new RegExp(this.frontMatterRexExpPattern); @@ -353,7 +353,7 @@ export default class MediaDbPlugin extends Plugin { return metadata; } - getMetadataFromFileCache(file: TFile) { + getMetadataFromFileCache(file: TFile): any { let metadata: any = this.app.metadataCache.getFileCache(file).frontmatter; if (metadata) { metadata = Object.assign({}, metadata); // copy @@ -371,7 +371,7 @@ export default class MediaDbPlugin extends Plugin { * @param fileContent * @param options */ - async createNote(fileName: string, fileContent: string, options: CreateNoteOptions) { + async createNote(fileName: string, fileContent: string, options: CreateNoteOptions): Promise { // find and possibly create the folder set in settings or passed in folder const folder = options.folder ?? this.app.vault.getAbstractFileByPath('/'); @@ -403,7 +403,7 @@ export default class MediaDbPlugin extends Plugin { * Update the active note by querying the API again. * Tries to read the type, id and dataSource of the active note. If successful it will query the api, delete the old note and create a new one. */ - async updateActiveNote(onlyMetadata: boolean = false) { + async updateActiveNote(onlyMetadata: boolean = false): Promise { const activeFile: TFile = this.app.workspace.getActiveFile(); if (!activeFile) { throw new Error('MDB | there is no active note'); @@ -418,7 +418,7 @@ export default class MediaDbPlugin extends Plugin { throw new Error('MDB | active note is not a Media DB entry or is missing metadata'); } - let oldMediaTypeModel = this.mediaTypeManager.createMediaTypeModelFromMediaType(metadata, metadata.type); + const oldMediaTypeModel = this.mediaTypeManager.createMediaTypeModelFromMediaType(metadata, metadata.type); // console.debug(oldMediaTypeModel); let newMediaTypeModel = await this.apiManager.queryDetailedInfoById(metadata.id, metadata.dataSource); @@ -438,11 +438,11 @@ export default class MediaDbPlugin extends Plugin { } } - async createEntriesFromFolder(folder: TFolder) { + async createEntriesFromFolder(folder: TFolder): Promise { const erroredFiles: { filePath: string; error: string }[] = []; let canceled: boolean = false; - const { selectedAPI, titleFieldName, appendContent } = await new Promise<{ selectedAPI: string; titleFieldName: string; appendContent: boolean }>((resolve, reject) => { + const { selectedAPI, titleFieldName, appendContent } = await new Promise<{ selectedAPI: string; titleFieldName: string; appendContent: boolean }>(resolve => { new MediaDbFolderImportModal(this.app, this, (selectedAPI: string, titleFieldName: string, appendContent: boolean) => { resolve({ selectedAPI, titleFieldName, appendContent }); }).open(); @@ -456,11 +456,11 @@ export default class MediaDbPlugin extends Plugin { continue; } - let metadata: any = this.getMetadataFromFileCache(file); + const metadata: any = this.getMetadataFromFileCache(file); - let title = metadata[titleFieldName]; + const title = metadata[titleFieldName]; if (!title) { - erroredFiles.push({ filePath: file.path, error: `metadata field \'${titleFieldName}\' not found or empty` }); + erroredFiles.push({ filePath: file.path, error: `metadata field '${titleFieldName}' not found or empty` }); continue; } @@ -476,7 +476,7 @@ export default class MediaDbPlugin extends Plugin { continue; } - let { selectModalResult, selectModal } = await this.modalHelper.createSelectModal({ elements: results, skipButton: true, modalTitle: `Results for \'${title}\'` }); + const { selectModalResult, selectModal } = await this.modalHelper.createSelectModal({ elements: results, skipButton: true, modalTitle: `Results for '${title}'` }); if (selectModalResult.code === ModalResultCode.ERROR) { erroredFiles.push({ filePath: file.path, error: selectModalResult.error.message }); @@ -520,30 +520,29 @@ export default class MediaDbPlugin extends Plugin { const table = [['file', 'error']].concat(erroredFiles.map(x => [x.filePath, x.error])); - let fileContent = `# ${title}\n\n${markdownTable(table)}`; - - const targetFile = await this.app.vault.create(filePath, fileContent); + const fileContent = `# ${title}\n\n${markdownTable(table)}`; + await this.app.vault.create(filePath, fileContent); } - async loadSettings() { + async loadSettings(): Promise { // console.log(DEFAULT_SETTINGS); const diskSettings: MediaDbPluginSettings = await this.loadData(); const defaultSettings: MediaDbPluginSettings = getDefaultSettings(this); const loadedSettings: MediaDbPluginSettings = Object.assign({}, defaultSettings, diskSettings); // migrate the settings loaded from the disk to match the structure of the default settings - let newPropertyMappings: PropertyMappingModel[] = []; + const newPropertyMappings: PropertyMappingModel[] = []; for (const defaultPropertyMappingModel of defaultSettings.propertyMappingModels) { - let newPropertyMappingModel: PropertyMappingModel = loadedSettings.propertyMappingModels.find(x => x.type === defaultPropertyMappingModel.type); + const newPropertyMappingModel: PropertyMappingModel = loadedSettings.propertyMappingModels.find(x => x.type === defaultPropertyMappingModel.type); if (newPropertyMappingModel === undefined) { // if the propertyMappingModel exists in the default settings but not the loaded settings, add it newPropertyMappings.push(defaultPropertyMappingModel); } else { // if the propertyMappingModel also exists in the loaded settings, add it from there - let newProperties: PropertyMapping[] = []; + const newProperties: PropertyMapping[] = []; for (const defaultProperty of defaultPropertyMappingModel.properties) { - let newProperty = newPropertyMappingModel.properties.find(x => x.property === defaultProperty.property); + const newProperty = newPropertyMappingModel.properties.find(x => x.property === defaultProperty.property); if (newProperty === undefined) { // default property is an instance newProperties.push(defaultProperty); @@ -561,7 +560,7 @@ export default class MediaDbPlugin extends Plugin { this.settings = loadedSettings; } - async saveSettings() { + async saveSettings(): Promise { this.mediaTypeManager.updateTemplates(this.settings); this.mediaTypeManager.updateFolders(this.settings); diff --git a/src/modals/MediaDbAdvancedSearchModal.ts b/src/modals/MediaDbAdvancedSearchModal.ts index 53536b6..9a79ac1 100644 --- a/src/modals/MediaDbAdvancedSearchModal.ts +++ b/src/modals/MediaDbAdvancedSearchModal.ts @@ -38,7 +38,7 @@ export class MediaDbAdvancedSearchModal extends Modal { this.closeCallback = closeCallback; } - keyPressCallback(event: KeyboardEvent) { + keyPressCallback(event: KeyboardEvent): void { if (event.key === 'Enter') { this.search(); } @@ -66,7 +66,7 @@ export class MediaDbAdvancedSearchModal extends Modal { } } - onOpen() { + onOpen(): void { const { contentEl } = this; contentEl.createEl('h2', { text: this.title }); @@ -123,7 +123,7 @@ export class MediaDbAdvancedSearchModal extends Modal { }); } - onClose() { + onClose(): void { this.closeCallback(); const { contentEl } = this; contentEl.empty(); diff --git a/src/modals/MediaDbFolderImportModal.ts b/src/modals/MediaDbFolderImportModal.ts index e36a4a5..04c908f 100644 --- a/src/modals/MediaDbFolderImportModal.ts +++ b/src/modals/MediaDbFolderImportModal.ts @@ -16,12 +16,12 @@ export class MediaDbFolderImportModal extends Modal { this.selectedApi = plugin.apiManager.apis[0].apiName; } - submit() { + submit(): void { this.onSubmit(this.selectedApi, this.titleFieldName, this.appendContent); this.close(); } - onOpen() { + onOpen(): void { const { contentEl } = this; contentEl.createEl('h2', { text: 'Import folder as Media DB entries' }); @@ -90,7 +90,7 @@ export class MediaDbFolderImportModal extends Modal { }); } - onClose() { + onClose(): void { const { contentEl } = this; contentEl.empty(); } diff --git a/src/modals/MediaDbIdSearchModal.ts b/src/modals/MediaDbIdSearchModal.ts index 9956c86..b100b46 100644 --- a/src/modals/MediaDbIdSearchModal.ts +++ b/src/modals/MediaDbIdSearchModal.ts @@ -33,7 +33,7 @@ export class MediaDbIdSearchModal extends Modal { this.closeCallback = closeCallback; } - keyPressCallback(event: KeyboardEvent) { + keyPressCallback(event: KeyboardEvent): void { if (event.key === 'Enter') { this.search(); } @@ -59,7 +59,7 @@ export class MediaDbIdSearchModal extends Modal { } } - onOpen() { + onOpen(): void { const { contentEl } = this; contentEl.createEl('h2', { text: this.title }); @@ -108,7 +108,7 @@ export class MediaDbIdSearchModal extends Modal { }); } - onClose() { + onClose(): void { this.closeCallback(); const { contentEl } = this; contentEl.empty(); diff --git a/src/modals/MediaDbPreviewModal.ts b/src/modals/MediaDbPreviewModal.ts index f81c1f3..647cd48 100644 --- a/src/modals/MediaDbPreviewModal.ts +++ b/src/modals/MediaDbPreviewModal.ts @@ -37,14 +37,14 @@ export class MediaDbPreviewModal extends Modal { } async preview(): Promise { - let { contentEl } = this; + const { contentEl } = this; contentEl.addClass('media-db-plugin-preview-modal'); contentEl.createEl('h2', { text: this.title }); const previewWrapper = contentEl.createDiv({ cls: 'media-db-plugin-preview-wrapper' }); - for (let result of this.elements) { + for (const result of this.elements) { previewWrapper.createEl('h3', { text: result.englishTitle }); const fileDiv = previewWrapper.createDiv(); diff --git a/src/modals/MediaDbSearchModal.ts b/src/modals/MediaDbSearchModal.ts index b878371..b4c89a9 100644 --- a/src/modals/MediaDbSearchModal.ts +++ b/src/modals/MediaDbSearchModal.ts @@ -1,16 +1,10 @@ import { ButtonComponent, Modal, Notice, Setting, TextComponent, ToggleComponent } from 'obsidian'; import { MediaTypeModel } from '../models/MediaTypeModel'; import MediaDbPlugin from '../main'; -import { - ADVANCED_SEARCH_MODAL_DEFAULT_OPTIONS, - AdvancedSearchModalData, - AdvancedSearchModalOptions, - SEARCH_MODAL_DEFAULT_OPTIONS, - SearchModalData, - SearchModalOptions, -} from '../utils/ModalHelper'; +import { SEARCH_MODAL_DEFAULT_OPTIONS, SearchModalData, SearchModalOptions } from '../utils/ModalHelper'; import { MEDIA_TYPES } from '../utils/MediaTypeManager'; import { unCamelCase } from '../utils/Utils'; +import { MediaType } from '../utils/MediaType'; export class MediaDbSearchModal extends Modal { plugin: MediaDbPlugin; @@ -18,7 +12,7 @@ export class MediaDbSearchModal extends Modal { query: string; isBusy: boolean; title: string; - selectedTypes: { name: string; selected: boolean }[]; + selectedTypes: { name: MediaType; selected: boolean }[]; searchBtn: ButtonComponent; @@ -47,7 +41,7 @@ export class MediaDbSearchModal extends Modal { this.closeCallback = closeCallback; } - keyPressCallback(event: KeyboardEvent) { + keyPressCallback(event: KeyboardEvent): void { if (event.key === 'Enter') { this.search(); } @@ -59,7 +53,7 @@ export class MediaDbSearchModal extends Modal { return; } - const types: string[] = this.selectedTypes.filter(x => x.selected).map(x => x.name); + const types: MediaType[] = this.selectedTypes.filter(x => x.selected).map(x => x.name); if (types.length === 0) { new Notice('MDB | No Type selected'); @@ -75,7 +69,7 @@ export class MediaDbSearchModal extends Modal { } } - onOpen() { + onOpen(): void { const { contentEl } = this; contentEl.createEl('h2', { text: this.title }); @@ -130,7 +124,7 @@ export class MediaDbSearchModal extends Modal { }); } - onClose() { + onClose(): void { this.closeCallback(); const { contentEl } = this; contentEl.empty(); diff --git a/src/modals/MediaDbSearchResultModal.ts b/src/modals/MediaDbSearchResultModal.ts index 03e3d48..57c12f8 100644 --- a/src/modals/MediaDbSearchResultModal.ts +++ b/src/modals/MediaDbSearchResultModal.ts @@ -40,14 +40,14 @@ export class MediaDbSearchResultModal extends SelectModal { } // Renders each suggestion item. - renderElement(item: MediaTypeModel, el: HTMLElement) { + renderElement(item: MediaTypeModel, el: HTMLElement): void { el.createEl('div', { text: this.plugin.mediaTypeManager.getFileName(item) }); el.createEl('small', { text: `${item.getSummary()}\n` }); el.createEl('small', { text: `${item.type.toUpperCase() + (item.subType ? ` (${item.subType})` : '')} from ${item.dataSource}` }); } // Perform action on the selected suggestion. - submit() { + submit(): void { if (!this.busy) { this.busy = true; this.submitButton.setButtonText('Creating entry...'); @@ -55,12 +55,12 @@ export class MediaDbSearchResultModal extends SelectModal { } } - skip() { + skip(): void { this.skipButton.setButtonText('Skipping...'); this.skipCallback(); } - onClose() { + onClose(): void { this.closeCallback(); } } diff --git a/src/modals/SelectModal.ts b/src/modals/SelectModal.ts index e052e05..dd89d52 100644 --- a/src/modals/SelectModal.ts +++ b/src/modals/SelectModal.ts @@ -59,7 +59,7 @@ export abstract class SelectModal extends Modal { abstract skip(): void; - disableAllOtherElements(elementId: number) { + disableAllOtherElements(elementId: number): void { for (const selectModalElement of this.selectModalElements) { if (selectModalElement.id !== elementId) { selectModalElement.setActive(false); @@ -67,7 +67,7 @@ export abstract class SelectModal extends Modal { } } - deHighlightAllOtherElements(elementId: number) { + deHighlightAllOtherElements(elementId: number): void { for (const selectModalElement of this.selectModalElements) { if (selectModalElement.id !== elementId) { selectModalElement.setHighlighted(false); @@ -75,7 +75,7 @@ export abstract class SelectModal extends Modal { } } - async onOpen() { + async onOpen(): Promise { const { contentEl, titleEl } = this; titleEl.createEl('h2', { text: this.title }); @@ -122,7 +122,7 @@ export abstract class SelectModal extends Modal { }); } - activateHighlighted() { + activateHighlighted(): void { for (const selectModalElement of this.selectModalElements) { if (selectModalElement.isHighlighted()) { selectModalElement.setActive(!selectModalElement.isActive()); @@ -133,7 +133,7 @@ export abstract class SelectModal extends Modal { } } - highlightUp() { + highlightUp(): void { for (const selectModalElement of this.selectModalElements) { if (selectModalElement.isHighlighted()) { this.getPreviousSelectModalElement(selectModalElement).setHighlighted(true); @@ -145,7 +145,7 @@ export abstract class SelectModal extends Modal { this.selectModalElements.last().setHighlighted(true); } - highlightDown() { + highlightDown(): void { for (const selectModalElement of this.selectModalElements) { if (selectModalElement.isHighlighted()) { this.getNextSelectModalElement(selectModalElement).setHighlighted(true); diff --git a/src/modals/SelectModalElement.ts b/src/modals/SelectModalElement.ts index 28047d5..9b661b7 100644 --- a/src/modals/SelectModalElement.ts +++ b/src/modals/SelectModalElement.ts @@ -45,7 +45,7 @@ export class SelectModalElement { return this.highlighted; } - setHighlighted(value: boolean) { + setHighlighted(value: boolean): void { this.highlighted = value; if (this.highlighted) { this.addClass(this.hoverClass); diff --git a/src/settings/PropertyMapper.ts b/src/settings/PropertyMapper.ts index 40f24ca..1ca6a28 100644 --- a/src/settings/PropertyMapper.ts +++ b/src/settings/PropertyMapper.ts @@ -40,6 +40,7 @@ export class PropertyMapper { // @ts-ignore newObj[propertyMapping.newProperty] = value; } else if (propertyMapping.mapping === PropertyMappingOption.Remove) { + // do nothing } else if (propertyMapping.mapping === PropertyMappingOption.Default) { // @ts-ignore newObj[key] = value; diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index caf0cc3..4c37060 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -85,7 +85,7 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { export const lockedPropertyMappings: string[] = ['type', 'id', 'dataSource']; export function getDefaultSettings(plugin: MediaDbPlugin): MediaDbPluginSettings { - let defaultSettings = DEFAULT_SETTINGS; + const defaultSettings = DEFAULT_SETTINGS; // construct property mapping defaults const propertyMappingModels: PropertyMappingModel[] = []; @@ -406,7 +406,7 @@ export class MediaDbSettingTab extends PluginSettingTab { containerEl.createEl('h3', { text: 'Property Mappings' }); - let propertyMappingExplanation = containerEl.createEl('div'); + const propertyMappingExplanation = containerEl.createEl('div'); propertyMappingExplanation.innerHTML = `

Allow you to remap the metadata fields of newly created media db entries.

@@ -425,8 +425,8 @@ export class MediaDbSettingTab extends PluginSettingTab { target: this.containerEl, props: { models: this.plugin.settings.propertyMappingModels.map(x => x.copy()), - save: (model: PropertyMappingModel) => { - let propertyMappingModels: PropertyMappingModel[] = []; + save: (model: PropertyMappingModel): void => { + const propertyMappingModels: PropertyMappingModel[] = []; for (const model2 of this.plugin.settings.propertyMappingModels) { if (model2.type === model.type) { diff --git a/src/settings/suggesters/Suggest.ts b/src/settings/suggesters/Suggest.ts index 3e9e93a..331db6b 100644 --- a/src/settings/suggesters/Suggest.ts +++ b/src/settings/suggesters/Suggest.ts @@ -53,7 +53,7 @@ export class Suggest { this.setSelectedItem(item, false); } - setSuggestions(values: T[]) { + setSuggestions(values: T[]): void { this.containerEl.empty(); const suggestionEls: HTMLDivElement[] = []; @@ -68,14 +68,14 @@ export class Suggest { this.setSelectedItem(0, false); } - useSelectedItem(event: MouseEvent | KeyboardEvent) { + useSelectedItem(event: MouseEvent | KeyboardEvent): void { const currentValue = this.values[this.selectedItem]; if (currentValue) { this.owner.selectSuggestion(currentValue, event); } } - setSelectedItem(selectedIndex: number, scrollIntoView: boolean) { + setSelectedItem(selectedIndex: number, scrollIntoView: boolean): void { const normalizedIndex = this.suggestions.length > 0 ? wrapAround(selectedIndex, this.suggestions.length) : 0; const prevSelectedSuggestion = this.suggestions[this.selectedItem]; const selectedSuggestion = this.suggestions[normalizedIndex]; @@ -141,7 +141,7 @@ export abstract class TextInputSuggest implements ISuggestOwner { { name: 'sameWidth', enabled: true, - fn: ({ state, instance }) => { + fn: ({ state, instance }): void => { // Note: positioning needs to be calculated twice - // first pass - positioning it according to the width of the popper // second pass - position it with the width bound to the reference element diff --git a/src/utils/MediaTypeManager.ts b/src/utils/MediaTypeManager.ts index 1d7bc12..05bc4a3 100644 --- a/src/utils/MediaTypeManager.ts +++ b/src/utils/MediaTypeManager.ts @@ -9,7 +9,6 @@ import { GameModel } from '../models/GameModel'; import { WikiModel } from '../models/WikiModel'; import { MusicReleaseModel } from '../models/MusicReleaseModel'; import { BoardGameModel } from '../models/BoardGameModel'; -import { awaitExpression } from '@babel/types'; export const MEDIA_TYPES: MediaType[] = [MediaType.Movie, MediaType.Series, MediaType.Game, MediaType.Wiki, MediaType.MusicRelease, MediaType.BoardGame]; @@ -20,7 +19,7 @@ export class MediaTypeManager { constructor() {} - updateTemplates(settings: MediaDbPluginSettings) { + updateTemplates(settings: MediaDbPluginSettings): void { this.mediaFileNameTemplateMap = new Map(); this.mediaFileNameTemplateMap.set(MediaType.Movie, settings.movieFileNameTemplate); this.mediaFileNameTemplateMap.set(MediaType.Series, settings.seriesFileNameTemplate); @@ -38,7 +37,7 @@ export class MediaTypeManager { this.mediaTemplateMap.set(MediaType.BoardGame, settings.boardgameTemplate); } - updateFolders(settings: MediaDbPluginSettings) { + updateFolders(settings: MediaDbPluginSettings): void { this.mediaFolderMap = new Map(); this.mediaFolderMap.set(MediaType.Movie, settings.movieFolder); this.mediaFolderMap.set(MediaType.Series, settings.seriesFolder); @@ -52,7 +51,7 @@ export class MediaTypeManager { return replaceTags(this.mediaFileNameTemplateMap.get(mediaTypeModel.getMediaType()), mediaTypeModel); } - async getTemplate(mediaTypeModel: MediaTypeModel, app: App) { + async getTemplate(mediaTypeModel: MediaTypeModel, app: App): Promise { const templateFileName = this.mediaTemplateMap.get(mediaTypeModel.getMediaType()); if (!templateFileName) { @@ -84,7 +83,7 @@ export class MediaTypeManager { if (!(await app.vault.adapter.exists(folderPath))) { await app.vault.createFolder(folderPath); } - let folder: TAbstractFile = app.vault.getAbstractFileByPath(folderPath); + const folder: TAbstractFile = app.vault.getAbstractFileByPath(folderPath); if (!(folder instanceof TFolder)) { throw Error(`Expected ${folder} to be instance of TFolder`); diff --git a/src/utils/ModalHelper.ts b/src/utils/ModalHelper.ts index d8b6f2e..808aa5e 100644 --- a/src/utils/ModalHelper.ts +++ b/src/utils/ModalHelper.ts @@ -229,7 +229,7 @@ export class ModalHelper { */ async createSearchModal(searchModalOptions: SearchModalOptions): Promise<{ searchModalResult: SearchModalResult; searchModal: MediaDbSearchModal }> { const modal = new MediaDbSearchModal(this.plugin, searchModalOptions); - const res: SearchModalResult = await new Promise((resolve, reject) => { + const res: SearchModalResult = await new Promise(resolve => { modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res })); modal.setCloseCallback(err => { if (err) { @@ -269,8 +269,7 @@ export class ModalHelper { } try { - let callbackRes: MediaTypeModel[]; - callbackRes = await submitCallback(searchModalResult.data); + const callbackRes: MediaTypeModel[] = await submitCallback(searchModalResult.data); searchModal.close(); return callbackRes; } catch (e) { @@ -293,7 +292,7 @@ export class ModalHelper { advancedSearchModalOptions: AdvancedSearchModalOptions ): Promise<{ advancedSearchModalResult: AdvancedSearchModalResult; advancedSearchModal: MediaDbAdvancedSearchModal }> { const modal = new MediaDbAdvancedSearchModal(this.plugin, advancedSearchModalOptions); - const res: AdvancedSearchModalResult = await new Promise((resolve, reject) => { + const res: AdvancedSearchModalResult = await new Promise(resolve => { modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res })); modal.setCloseCallback(err => { if (err) { @@ -336,8 +335,7 @@ export class ModalHelper { } try { - let callbackRes: MediaTypeModel[]; - callbackRes = await submitCallback(advancedSearchModalResult.data); + const callbackRes: MediaTypeModel[] = await submitCallback(advancedSearchModalResult.data); advancedSearchModal.close(); return callbackRes; } catch (e) { @@ -358,7 +356,7 @@ export class ModalHelper { */ async createIdSearchModal(idSearchModalOptions: IdSearchModalOptions): Promise<{ idSearchModalResult: IdSearchModalResult; idSearchModal: MediaDbIdSearchModal }> { const modal = new MediaDbIdSearchModal(this.plugin, idSearchModalOptions); - const res: IdSearchModalResult = await new Promise((resolve, reject) => { + const res: IdSearchModalResult = await new Promise(resolve => { modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res })); modal.setCloseCallback(err => { if (err) { @@ -401,8 +399,7 @@ export class ModalHelper { } try { - let callbackRes: MediaTypeModel; - callbackRes = await submitCallback(idSearchModalResult.data); + const callbackRes: MediaTypeModel = await submitCallback(idSearchModalResult.data); idSearchModal.close(); return callbackRes; } catch (e) { @@ -423,7 +420,7 @@ export class ModalHelper { */ async createSelectModal(selectModalOptions: SelectModalOptions): Promise<{ selectModalResult: SelectModalResult; selectModal: MediaDbSearchResultModal }> { const modal = new MediaDbSearchResultModal(this.plugin, selectModalOptions); - const res: SelectModalResult = await new Promise((resolve, reject) => { + const res: SelectModalResult = await new Promise(resolve => { modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res })); modal.setSkipCallback(() => resolve({ code: ModalResultCode.SKIP })); modal.setCloseCallback(err => { @@ -469,8 +466,7 @@ export class ModalHelper { } try { - let callbackRes: MediaTypeModel[]; - callbackRes = await submitCallback(selectModalResult.data); + const callbackRes: MediaTypeModel[] = await submitCallback(selectModalResult.data); selectModal.close(); return callbackRes; } catch (e) { @@ -484,7 +480,7 @@ export class ModalHelper { async createPreviewModal(previewModalOptions: PreviewModalOptions): Promise<{ previewModalResult: PreviewModalResult; previewModal: MediaDbPreviewModal }> { //todo: handle attachFile for existing files const modal = new MediaDbPreviewModal(this.plugin, previewModalOptions); - const res: PreviewModalResult = await new Promise((resolve, reject) => { + const res: PreviewModalResult = await new Promise(resolve => { modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res })); modal.setCloseCallback(err => { if (err) { @@ -516,8 +512,7 @@ export class ModalHelper { } try { - let callbackRes: boolean; - callbackRes = await submitCallback(previewModalResult.data); + const callbackRes: boolean = await submitCallback(previewModalResult.data); previewModal.close(); return callbackRes; } catch (e) { diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 186abf2..32c388b 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -14,16 +14,6 @@ export function wrapAround(value: number, size: number): number { return mod(value, size); } -/** - * @deprecated use console.debug instead - * @param o - */ -export function debugLog(o: any): void { - if (debug) { - console.log(o); - } -} - export function containsOnlyLettersAndUnderscores(str: string): boolean { return /^[a-zA-Z_]+$/.test(str); } @@ -33,9 +23,7 @@ export function replaceIllegalFileNameCharactersInString(string: string): string } export function replaceTags(template: string, mediaTypeModel: MediaTypeModel): string { - const resolvedTemplate = template.replace(new RegExp('{{.*?}}', 'g'), (match: string) => replaceTag(match, mediaTypeModel)); - - return resolvedTemplate; + return template.replace(new RegExp('{{.*?}}', 'g'), (match: string) => replaceTag(match, mediaTypeModel)); } function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string { @@ -44,11 +32,11 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string { tag = tag.substring(0, tag.length - 2); tag = tag.trim(); - let parts = tag.split(':'); + const parts = tag.split(':'); if (parts.length === 1) { - let path = parts[0].split('.'); + const path = parts[0].split('.'); - let obj = traverseMetaData(path, mediaTypeModel); + const obj = traverseMetaData(path, mediaTypeModel); if (obj === undefined) { return '{{ INVALID TEMPLATE TAG - object undefined }}'; @@ -56,11 +44,11 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string { return obj; } else if (parts.length === 2) { - let operator = parts[0]; + const operator = parts[0]; - let path = parts[1].split('.'); + const path = parts[1].split('.'); - let obj = traverseMetaData(path, mediaTypeModel); + const obj = traverseMetaData(path, mediaTypeModel); if (obj === undefined) { return '{{ INVALID TEMPLATE TAG - object undefined }}'; @@ -87,7 +75,7 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string { function traverseMetaData(path: Array, mediaTypeModel: MediaTypeModel): any { let o: any = mediaTypeModel; - for (let part of path) { + for (const part of path) { if (o !== undefined) { o = o[part]; } @@ -97,12 +85,12 @@ function traverseMetaData(path: Array, mediaTypeModel: MediaTypeModel): } export function markdownTable(content: string[][]): string { - let rows = content.length; + const rows = content.length; if (rows === 0) { return ''; } - let columns = content[0].length; + const columns = content[0].length; if (columns === 0) { return ''; } @@ -112,7 +100,7 @@ export function markdownTable(content: string[][]): string { } } - let longestStringInColumns: number[] = []; + const longestStringInColumns: number[] = []; for (let i = 0; i < columns; i++) { let longestStringInColumn = 0; @@ -147,36 +135,18 @@ export function markdownTable(content: string[][]): string { return table; } -export function dateToString(date: Date) { +export function dateToString(date: Date): string { return `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`; } -export function timeToString(time: Date) { +export function timeToString(time: Date): string { return `${time.getHours()}-${time.getMinutes()}-${time.getSeconds()}`; } -export function dateTimeToString(dateTime: Date) { +export function dateTimeToString(dateTime: Date): string { return `${dateToString(dateTime)} ${timeToString(dateTime)}`; } -/** - * @deprecated - */ -export class UserCancelError extends Error { - constructor(message: string) { - super(message); - } -} - -/** - * @deprecated - */ -export class UserSkipError extends Error { - constructor(message: string) { - super(message); - } -} - // js can't even implement modulo correctly... export function mod(n: number, m: number): number { return ((n % m) + m) % m;