diff --git a/package.json b/package.json index 47ccbd3..c65aa10 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "typescript": "4.4.4" }, "dependencies": { - "markdown-to-txt": "^2.0.0", "minisearch": "^5.0.0-beta1" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9eb4bdd..99d4fb9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,6 @@ specifiers: eslint-plugin-import: 2.22.1 eslint-plugin-node: 11.1.0 eslint-plugin-promise: 5.0.0 - markdown-to-txt: ^2.0.0 minisearch: ^5.0.0-beta1 obsidian: latest prettier: ^2.6.2 @@ -21,7 +20,6 @@ specifiers: typescript: 4.4.4 dependencies: - markdown-to-txt: 2.0.0 minisearch: 5.0.0-beta1 devDependencies: @@ -36,7 +34,7 @@ devDependencies: eslint-plugin-import: 2.22.1_eslint@7.12.1 eslint-plugin-node: 11.1.0_eslint@7.12.1 eslint-plugin-promise: 5.0.0_eslint@7.12.1 - obsidian: 0.14.4 + obsidian: 0.14.6 prettier: 2.6.2 prettier-eslint: 13.0.0 tslib: 2.3.1 @@ -1490,18 +1488,10 @@ packages: path-exists: 3.0.0 dev: true - /lodash.escape/4.0.1: - resolution: {integrity: sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=} - dev: false - /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lodash.unescape/4.0.1: - resolution: {integrity: sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=} - dev: false - /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true @@ -1525,20 +1515,6 @@ packages: yallist: 4.0.0 dev: true - /markdown-to-txt/2.0.0: - resolution: {integrity: sha512-H5DSAY6frUQ6/CR0nJMlGCEuSA3pvi14dYfICJPKLAvd/rDk6eb+cj84zU5XTNYzECyCcujoAL1PHhjmOgeqUw==} - dependencies: - lodash.escape: 4.0.1 - lodash.unescape: 4.0.1 - marked: 3.0.8 - dev: false - - /marked/3.0.8: - resolution: {integrity: sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==} - engines: {node: '>= 12'} - hasBin: true - dev: false - /merge2/1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -1573,8 +1549,8 @@ packages: minimist: 1.2.6 dev: true - /moment/2.29.1: - resolution: {integrity: sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==} + /moment/2.29.2: + resolution: {integrity: sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==} dev: true /ms/2.0.0: @@ -1626,13 +1602,13 @@ packages: es-abstract: 1.19.2 dev: true - /obsidian/0.14.4: - resolution: {integrity: sha512-lWU1w/NlXuswAa35ImAbyElLOOno1C13KCZE19kqtcxSPIquvi5Fzy8zBbQ6ZRZZvkvftUiToCp5lcZFRMGxrQ==} + /obsidian/0.14.6: + resolution: {integrity: sha512-oXPJ8Zt10WhN19bk5l4mZuXRZbbdT1QoMgxGGJ0bB7UcJa0bozDzugS5L/QiV9gDoujpUPxDWNVahEel6r0Fpw==} dependencies: '@codemirror/state': 0.19.9 '@codemirror/view': 0.19.48 '@types/codemirror': 0.0.108 - moment: 2.29.1 + moment: 2.29.2 dev: true /once/1.4.0: diff --git a/src/main.ts b/src/main.ts index 9dabc41..1d69fc2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,10 +1,6 @@ import { Notice, Plugin, TAbstractFile, TFile } from 'obsidian' import MiniSearch from 'minisearch' -import { - clearContent, - extractHeadingsFromCache, - wait, -} from './utils' +import { escapeHTML, extractHeadingsFromCache, wait } from './utils' import { IndexedNote } from './globals' import { OmnisearchModal } from './modal' @@ -97,7 +93,7 @@ export default class OmnisearchPlugin extends Plugin { } // Fetch content from the cache, // trim the markdown, remove embeds and clear wikilinks - const content = clearContent(await this.app.vault.cachedRead(file)) + const content = escapeHTML(await this.app.vault.cachedRead(file)) // Purge HTML before indexing const tmp = document.createElement('div') @@ -106,11 +102,17 @@ export default class OmnisearchPlugin extends Plugin { // Make the document and index it const note: IndexedNote = { basename: file.basename, - content: tmp.innerText, + content: tmp.innerText, // content, path: file.path, - headings1: fileCache ? extractHeadingsFromCache(fileCache, 1).join(' ') : '', - headings2: fileCache ? extractHeadingsFromCache(fileCache, 2).join(' ') : '', - headings3: fileCache ? extractHeadingsFromCache(fileCache, 3).join(' ') : '', + headings1: fileCache + ? extractHeadingsFromCache(fileCache, 1).join(' ') + : '', + headings2: fileCache + ? extractHeadingsFromCache(fileCache, 2).join(' ') + : '', + headings3: fileCache + ? extractHeadingsFromCache(fileCache, 3).join(' ') + : '', } this.minisearch.add(note) this.indexedNotes[file.path] = note diff --git a/src/modal.ts b/src/modal.ts index 952f8a8..e218438 100644 --- a/src/modal.ts +++ b/src/modal.ts @@ -1,7 +1,7 @@ import { MarkdownView, SuggestModal, TFile } from 'obsidian' import { ResultNote } from './globals' import OmnisearchPlugin from './main' -import { escapeRegex, getAllIndexes, highlighter } from './utils' +import { escapeHTML, escapeRegex, getAllIndexes, highlighter } from './utils' export class OmnisearchModal extends SuggestModal { private plugin: OmnisearchPlugin @@ -64,7 +64,8 @@ export class OmnisearchModal extends SuggestModal { const record = events.find(event => (event.target as HTMLDivElement).classList.contains('is-selected'), ) - const id = (record?.target as HTMLElement)?.getAttribute('data-note-id') ?? null + const id = + (record?.target as HTMLElement)?.getAttribute('data-note-id') ?? null if (id) { this.selectedNoteId = id } @@ -119,7 +120,9 @@ export class OmnisearchModal extends SuggestModal { results.map(async result => { const file = this.app.vault.getAbstractFileByPath(result.id) as TFile // const metadata = this.app.metadataCache.getFileCache(file) - let content = (await this.app.vault.cachedRead(file)).toLowerCase() + let content = escapeHTML( + await this.app.vault.cachedRead(file), + ).toLowerCase() let basename = file.basename // Sort the terms from smaller to larger diff --git a/src/utils.ts b/src/utils.ts index b80293a..e3286a4 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,3 @@ -import markdownToTxt from 'markdown-to-txt' import { CachedMetadata } from 'obsidian' import { isSearchMatch, @@ -12,12 +11,13 @@ export function highlighter(str: string): string { return '' + str + '' } -/** - * Strips the markdown and frontmatter - * @param text - */ -export function clearContent(text: string): string { - return markdownToTxt(removeFrontMatter(text)) +export function escapeHTML(html: string): string { + return html + .replaceAll('&', '&') + .replaceAll('<', '<') + .replaceAll('>', '>') + .replaceAll('"', '"') + .replaceAll("'", ''') } /** diff --git a/tsconfig.json b/tsconfig.json index f70dba1..ca5af98 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,9 +13,7 @@ "isolatedModules": true, "lib": [ "DOM", - "ES5", - "ES6", - "ES7" + "ES2021" ] }, "include": [