From 9eebc33a85254712055e2f4469056446feae00fe Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sat, 24 Dec 2022 20:22:41 +0100 Subject: [PATCH 01/22] Added Text Extractor integration --- README.md | 10 ---------- src/cache-manager.ts | 41 ++++++++++++++++++++++++++++++++--------- src/globals.ts | 25 +++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index c884241..5fc0e46 100644 --- a/README.md +++ b/README.md @@ -120,16 +120,6 @@ There are several CSS classes you can use to customize the appearance of Omnisea .omnisearch-input-field ``` -For example, if you'd like the usual yellow highlight on search matches, you can add this code inside a CSS snippet -file: - -```css -.omnisearch-highlight { - color: var(--text-normal); - background-color: var(--text-highlight-bg); -} -``` - See [styles.css](./assets/styles.css) for more information. ## Issues & Solutions diff --git a/src/cache-manager.ts b/src/cache-manager.ts index 64e4834..502ef9d 100644 --- a/src/cache-manager.ts +++ b/src/cache-manager.ts @@ -1,5 +1,9 @@ import { Notice } from 'obsidian' -import type { DocumentRef, IndexedDocument } from './globals' +import { + getTextExtractor, + type DocumentRef, + type IndexedDocument, +} from './globals' import { database } from './database' import type { AsPlainObject } from 'minisearch' import type MiniSearch from 'minisearch' @@ -18,15 +22,30 @@ import { getImageText, getPdfText } from 'obsidian-text-extract' async function getIndexedDocument(path: string): Promise { const file = app.vault.getFiles().find(f => f.path === path) if (!file) throw new Error(`Invalid file path: "${path}"`) - let content: string + let content: string | null = null + + const extractor = getTextExtractor() if (isFilePlaintext(path)) { content = await app.vault.cachedRead(file) - } else if (isFilePDF(path)) { - content = await getPdfText(file) - } else if (isFileImage(file.path)) { - content = await getImageText(file) + } else if (extractor) { + if (extractor.canFileBeExtracted(path)) { + content = await extractor.extractText(file) + } else { + throw new Error('Invalid file format: ' + file.path) + } } else { - throw new Error('Invalid file format: ' + file.path) + if (isFilePDF(path)) { + content = await getPdfText(file) + } else if (isFileImage(file.path)) { + content = await getImageText(file) + } else { + throw new Error('Invalid file format: ' + file.path) + } + } + if (content === null || content === undefined) { + // This shouldn't happen + console.warn(`Omnisearch: ${content} content for file`, file.path) + content = '' } content = removeDiacritics(content) const metadata = app.metadataCache.getFileCache(file) @@ -81,8 +100,12 @@ class CacheManager { private documents: Map = new Map() public async addToLiveCache(path: string): Promise { - const doc = await getIndexedDocument(path) - this.documents.set(path, doc) + try { + const doc = await getIndexedDocument(path) + this.documents.set(path, doc) + } catch (e) { + console.warn('Omnisearch: Error while adding to live cache', e) + } } public removeFromLiveCache(path: string): void { diff --git a/src/globals.ts b/src/globals.ts index 25cbdc9..e24a7a5 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -1,6 +1,7 @@ import { EventBus } from './tools/event-bus' import { writable } from 'svelte/store' import { settings } from './settings' +import type { TFile } from 'obsidian' export const regexLineSplit = /\r?\n|\r|((\.|\?|!)( |\r?\n|\r))/g export const regexYaml = /^---\s*\n(.*?)\n?^---\s?/ms @@ -76,9 +77,33 @@ export function isInputComposition(): boolean { return inComposition } + +/** + * Plugin dependency - Chs Patch for Chinese word segmentation + * @returns + */ export function getChsSegmenter(): any | undefined { return (app as any).plugins.plugins['cm-chs-patch'] } +export type TextExtractorApi = { + extractText: ( + file: TFile, + ocrOptions?: { + langs: string[] + } + ) => Promise + getOcrLangs: () => string[] + canFileBeExtracted: (filePath: string) => boolean +} + +/** + * Plugin dependency - Text Extractor + * @returns + */ +export function getTextExtractor(): TextExtractorApi | undefined { + return (app as any).plugins?.plugins?.['text-extractor'].api +} + export const SPACE_OR_PUNCTUATION = /[|\n\r -#%-*,-/:;?@[-\]_{}\u00A0\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u1680\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2000-\u200A\u2010-\u2029\u202F-\u2043\u2045-\u2051\u2053-\u205F\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u3000-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]+/u From 3264e67eca28ff94d574397fc26df0df1ce05eb7 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sat, 31 Dec 2022 11:01:28 +0100 Subject: [PATCH 02/22] Updated build dependencies --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f05d51b..77cefeb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,13 +18,13 @@ jobs: - uses: pnpm/action-setup@v2.1.0 with: - version: 6.32.4 + version: 7.17.0 run_install: true - name: Use Node.js uses: actions/setup-node@v1 with: - node-version: "14.x" + node-version: "18.x" - name: Build id: build From d8109591505c6434fd457fa3c319892d09444943 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sat, 31 Dec 2022 11:01:57 +0100 Subject: [PATCH 03/22] Added funding links --- manifest.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 65fcb1e..cf07aed 100644 --- a/manifest.json +++ b/manifest.json @@ -6,5 +6,9 @@ "description": "A search engine that just works", "author": "Simon Cambier", "authorUrl": "https://github.com/scambier/obsidian-omnisearch", - "isDesktopOnly": false + "isDesktopOnly": false, + "fundingUrl": { + "Github": "https://github.com/sponsors/scambier", + "Ko-fi": "https://ko-fi.com/scambier" + } } From c8bdcad17c5979b49b659738711e1d73d021086d Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sat, 31 Dec 2022 21:26:15 +0100 Subject: [PATCH 04/22] Small (potential) bugfixes --- src/components/ModalVault.svelte | 2 ++ src/globals.ts | 8 +------- src/main.ts | 4 +++- src/tools/utils.ts | 3 +++ 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/components/ModalVault.svelte b/src/components/ModalVault.svelte index c92bd25..dee76be 100644 --- a/src/components/ModalVault.svelte +++ b/src/components/ModalVault.svelte @@ -31,6 +31,8 @@ searching = true updateResults().then(() => { searching = false + }).catch((e) => { + console.error(e) }) } else { searching = false diff --git a/src/globals.ts b/src/globals.ts index e24a7a5..7bdc5d1 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -87,13 +87,7 @@ export function getChsSegmenter(): any | undefined { } export type TextExtractorApi = { - extractText: ( - file: TFile, - ocrOptions?: { - langs: string[] - } - ) => Promise - getOcrLangs: () => string[] + extractText: (file: TFile) => Promise canFileBeExtracted: (filePath: string) => boolean } diff --git a/src/main.ts b/src/main.ts index 85269b9..d77ce59 100644 --- a/src/main.ts +++ b/src/main.ts @@ -46,7 +46,9 @@ export default class OmnisearchPlugin extends Plugin { id: 'show-modal-infile', name: 'In-file search', editorCallback: (_editor, view) => { - new OmnisearchInFileModal(app, view.file).open() + if (view.file) { + new OmnisearchInFileModal(app, view.file).open() + } }, }) diff --git a/src/tools/utils.ts b/src/tools/utils.ts index 51ad737..6137d10 100644 --- a/src/tools/utils.ts +++ b/src/tools/utils.ts @@ -202,6 +202,9 @@ export function getTagsFromMetadata(metadata: CachedMetadata | null): string[] { * https://stackoverflow.com/a/37511463 */ export function removeDiacritics(str: string): string { + if (str === null || str === undefined) { + return '' + } return str.normalize('NFD').replace(/\p{Diacritic}/gu, '') } From eecfc78be24461bde1e613cb276c515b757d9f61 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sat, 31 Dec 2022 21:26:53 +0100 Subject: [PATCH 05/22] Tweaking fuzzy search --- src/search/omnisearch.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/search/omnisearch.ts b/src/search/omnisearch.ts index 0f495d5..5a7ed53 100644 --- a/src/search/omnisearch.ts +++ b/src/search/omnisearch.ts @@ -104,8 +104,7 @@ export class Omnisearch { documents.filter(d => this.indexedDocuments.has(d.path)).map(d => d.path) ) - // Split the documents in smaller chunks to regularly save the cache. - // If the user shuts off Obsidian mid-indexing, we at least saved some + // Split the documents in smaller chunks to add them to minisearch const chunkedDocs = chunkArray(documents, 500) for (const docs of chunkedDocs) { // Update the list of indexed docs @@ -146,7 +145,10 @@ export class Omnisearch { let results = this.minisearch.search(query.segmentsToStr(), { prefix: term => term.length >= options.prefixLength, - fuzzy: 0.2, + // length <= 3: no fuzziness + // length <= 5: fuzziness of 10% + // length > 5: fuzziness of 20% + fuzzy: term => (term.length <= 3 ? 0 : term.length <= 5 ? 0.1 : 0.2), combineWith: 'AND', boost: { basename: settings.weightBasename, From 2854bb78b6f88b22d218382dad0c7372543d1c11 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Tue, 3 Jan 2023 10:25:38 +0100 Subject: [PATCH 06/22] Added some labels for Text Extractor --- src/cache-manager.ts | 9 +++++++-- src/main.ts | 8 +++----- src/settings.ts | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/cache-manager.ts b/src/cache-manager.ts index 502ef9d..faa87e0 100644 --- a/src/cache-manager.ts +++ b/src/cache-manager.ts @@ -25,15 +25,20 @@ async function getIndexedDocument(path: string): Promise { let content: string | null = null const extractor = getTextExtractor() + // Plain text if (isFilePlaintext(path)) { content = await app.vault.cachedRead(file) - } else if (extractor) { + } + // Image or PDF, with the text-extractor plugin + else if (extractor) { if (extractor.canFileBeExtracted(path)) { content = await extractor.extractText(file) } else { throw new Error('Invalid file format: ' + file.path) } - } else { + } + // Image or PDF, without the text-extractor plugin + else { if (isFilePDF(path)) { content = await getPdfText(file) } else if (isFileImage(file.path)) { diff --git a/src/main.ts b/src/main.ts index d77ce59..28f10ae 100644 --- a/src/main.ts +++ b/src/main.ts @@ -192,15 +192,13 @@ async function cleanOldCacheFiles() { } function executeFirstLaunchTasks(plugin: Plugin) { - const code = '1.8.0-beta.3' + const code = '1.10.0-beta.1' if (settings.welcomeMessage !== code) { const welcome = new DocumentFragment() welcome.createSpan({}, span => { - span.innerHTML = `Omnisearch has been updated -You can now enable "Images Indexing" to use Optical Character Recognition on your scanned documents -🔎🖼` + span.innerHTML = `🔎 Omnisearch will soon require the Text Extractor plugin to index PDF and images. See Omnisearch settings for more information.` }) - new Notice(welcome, 30000) + new Notice(welcome, 20_000) } settings.welcomeMessage = code diff --git a/src/settings.ts b/src/settings.ts index d503a99..a0a281a 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -8,6 +8,7 @@ import { } from 'obsidian' import { writable } from 'svelte/store' import { database } from './database' +import { getTextExtractor } from './globals' import type OmnisearchPlugin from './main' interface WeightingSettings { @@ -83,6 +84,20 @@ export class SettingsTab extends PluginSettingTab { new Setting(containerEl).setName('Indexing').setHeading() + if (getTextExtractor()) { + new Setting(containerEl).setDesc( + '👍 You have installed Text Extractor, Omnisearch will use it to index PDFs and images.' + ) + } else { + const label = new DocumentFragment() + label.createSpan({}, span => { + span.innerHTML = + `⚠️ Omnisearch will soon require Text Extractor to index PDFs and images. + You can already install it to get a head start.` + }) + new Setting(containerEl).setDesc(label) + } + // PDF Indexing if (!Platform.isMobileApp) { const indexPDFsDesc = new DocumentFragment() From c31cf745ab19f449c134db3797316ac037546dbb Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Tue, 3 Jan 2023 10:33:52 +0100 Subject: [PATCH 07/22] 1.10.0-beta.1 --- package.json | 6 +- pnpm-lock.yaml | 188 +++++++++++------------------------------------ version-bump.mjs | 1 + 3 files changed, 47 insertions(+), 148 deletions(-) diff --git a/package.json b/package.json index 14ab084..e484b45 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "scambier.obsidian-search", - "version": "1.9.1", + "version": "1.10.0-beta.1", "description": "A search engine for Obsidian", "main": "dist/main.js", "scripts": { "dev": "node esbuild.config.mjs", "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", "check": "svelte-check --tsconfig ./tsconfig.json", - "version": "node version-bump.mjs && git add manifest.json versions.json package.json", + "version": "node version-bump.mjs", "test": "jest" }, "keywords": [], @@ -43,7 +43,7 @@ "dexie": "^3.2.2", "lodash-es": "4.17.21", "minisearch": "6.0.0-beta.1", - "obsidian-text-extract": "1.0.4", + "obsidian-text-extract": "link:..\\obsidian-text-extract-lib", "pure-md5": "^0.1.14" }, "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 312c390..04ef0da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,7 +22,7 @@ specifiers: lodash-es: 4.17.21 minisearch: 6.0.0-beta.1 obsidian: latest - obsidian-text-extract: 1.0.4 + obsidian-text-extract: link:..\obsidian-text-extract-lib prettier: ^2.8.1 prettier-plugin-svelte: ^2.8.1 pure-md5: ^0.1.14 @@ -38,7 +38,7 @@ dependencies: dexie: 3.2.2 lodash-es: 4.17.21 minisearch: 6.0.0-beta.1 - obsidian-text-extract: 1.0.4 + obsidian-text-extract: link:../obsidian-text-extract-lib pure-md5: 0.1.14 devDependencies: @@ -56,7 +56,7 @@ devDependencies: esbuild-plugin-copy: 1.3.0_esbuild@0.14.0 esbuild-svelte: 0.7.1_wvi5wuag3veo5vm52k3h7pgaae jest: 27.5.1 - obsidian: 0.16.3 + obsidian: 1.1.1 prettier: 2.8.1 prettier-plugin-svelte: 2.8.1_sro2v6ld777payjtkjtiuogcxi svelte: 3.54.0 @@ -86,6 +86,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 + dev: true /@babel/compat-data/7.20.5: resolution: {integrity: sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==} @@ -122,6 +123,7 @@ packages: '@babel/types': 7.20.5 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 + dev: true /@babel/helper-annotate-as-pure/7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} @@ -208,6 +210,7 @@ packages: /@babel/helper-environment-visitor/7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-explode-assignable-expression/7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} @@ -222,12 +225,14 @@ packages: dependencies: '@babel/template': 7.18.10 '@babel/types': 7.20.5 + dev: true /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.5 + dev: true /@babel/helper-member-expression-to-functions/7.18.9: resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} @@ -317,14 +322,17 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.5 + dev: true /@babel/helper-string-parser/7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-identifier/7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-option/7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} @@ -361,6 +369,7 @@ packages: '@babel/helper-validator-identifier': 7.19.1 chalk: 2.4.2 js-tokens: 4.0.0 + dev: true /@babel/parser/7.20.5: resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==} @@ -368,6 +377,7 @@ packages: hasBin: true dependencies: '@babel/types': 7.20.5 + dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} @@ -1291,6 +1301,7 @@ packages: '@babel/code-frame': 7.18.6 '@babel/parser': 7.20.5 '@babel/types': 7.20.5 + dev: true /@babel/traverse/7.20.5: resolution: {integrity: sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==} @@ -1308,6 +1319,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true /@babel/types/7.20.5: resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==} @@ -1316,6 +1328,7 @@ packages: '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + dev: true /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1561,23 +1574,28 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 '@jridgewell/trace-mapping': 0.3.17 + dev: true /@jridgewell/resolve-uri/3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} + dev: true /@jridgewell/set-array/1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + dev: true /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true /@jridgewell/trace-mapping/0.3.17: resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + dev: true /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -1816,6 +1834,7 @@ packages: engines: {node: '>=4'} dependencies: color-convert: 1.9.3 + dev: true /ansi-styles/4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} @@ -1863,23 +1882,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /babel-eslint/10.1.0: - resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==} - engines: {node: '>=6'} - deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. - peerDependencies: - eslint: '>= 4.12.1' - dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.5 - '@babel/traverse': 7.20.5 - '@babel/types': 7.20.5 - eslint-visitor-keys: 1.3.0 - resolve: 1.22.1 - transitivePeerDependencies: - - supports-color - dev: false - /babel-jest/27.5.1: resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -2042,10 +2044,6 @@ packages: engines: {node: '>=8'} dev: true - /bmp-js/0.1.0: - resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} - dev: false - /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -2127,6 +2125,7 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 + dev: true /chalk/3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} @@ -2194,6 +2193,7 @@ packages: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 + dev: true /color-convert/2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -2204,6 +2204,7 @@ packages: /color-name/1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -2277,6 +2278,7 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true /decimal.js/10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -2802,6 +2804,7 @@ packages: /escape-string-regexp/1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + dev: true /escape-string-regexp/2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} @@ -2821,11 +2824,6 @@ packages: source-map: 0.6.1 dev: true - /eslint-visitor-keys/1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: false - /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -2903,11 +2901,6 @@ packages: bser: 2.1.1 dev: true - /file-type/12.4.2: - resolution: {integrity: sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==} - engines: {node: '>=8'} - dev: false - /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -2961,6 +2954,7 @@ packages: /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -3015,6 +3009,7 @@ packages: /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + dev: true /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -3045,6 +3040,7 @@ packages: /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + dev: true /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -3074,6 +3070,7 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 + dev: true /html-encoding-sniffer/2.0.1: resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} @@ -3119,10 +3116,6 @@ packages: safer-buffer: 2.1.2 dev: true - /idb-keyval/3.2.0: - resolution: {integrity: sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ==} - dev: false - /ignore/5.2.1: resolution: {integrity: sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==} engines: {node: '>= 4'} @@ -3208,6 +3201,7 @@ packages: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 + dev: true /is-date-object/1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -3216,10 +3210,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-electron/2.2.1: - resolution: {integrity: sha512-r8EEQQsqT+Gn0aXFx7lTFygYQhILLCB+wn0WCDL5LZRINeLH/Rvw1j2oKodELLXYNImQ3CRlVsY8wW4cGOsyuw==} - dev: false - /is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3308,10 +3298,6 @@ packages: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true - /is-url/1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - dev: false - /is-weakmap/2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} dev: true @@ -3845,6 +3831,7 @@ packages: /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true /js-yaml/3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} @@ -3905,6 +3892,7 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true + dev: true /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -4062,6 +4050,7 @@ packages: /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true /nanoid/3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} @@ -4073,18 +4062,6 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /node-fetch/2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true @@ -4136,21 +4113,8 @@ packages: object-keys: 1.1.1 dev: true - /obsidian-text-extract/1.0.4: - resolution: {integrity: sha512-lJ7HaEPGUoGVYr6iCSEU8oPrnA8xRBQgSU9KryWteq3wO+Yiw2Zue70G0rZf9Yj+DkgR92PtuR8aQZQxTy/uLA==} - dependencies: - dexie: 3.2.2 - p-limit: 4.0.0 - pure-md5: 0.1.14 - tesseract.js: 3.0.3 - transitivePeerDependencies: - - encoding - - eslint - - supports-color - dev: false - - /obsidian/0.16.3: - resolution: {integrity: sha512-hal9qk1A0GMhHSeLr2/+o3OpLmImiP+Y+sx2ewP13ds76KXsziG96n+IPFT0mSkup1zSwhEu+DeRhmbcyCCXWw==} + /obsidian/1.1.1: + resolution: {integrity: sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg==} peerDependencies: '@codemirror/state': ^6.0.0 '@codemirror/view': ^6.0.0 @@ -4172,11 +4136,6 @@ packages: mimic-fn: 2.1.0 dev: true - /opencollective-postinstall/2.0.3: - resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} - hasBin: true - dev: false - /optionator/0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -4196,13 +4155,6 @@ packages: p-try: 2.2.0 dev: true - /p-limit/4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - yocto-queue: 1.0.0 - dev: false - /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4253,6 +4205,7 @@ packages: /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true /path-type/4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -4380,6 +4333,7 @@ packages: /regenerator-runtime/0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true /regenerator-transform/0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} @@ -4445,11 +4399,6 @@ packages: engines: {node: '>=8'} dev: true - /resolve-url/0.2.1: - resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} - deprecated: https://github.com/lydell/resolve-url#deprecated - dev: false - /resolve.exports/1.1.0: resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} engines: {node: '>=10'} @@ -4462,6 +4411,7 @@ packages: is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -4668,6 +4618,7 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true /supports-color/7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -4694,6 +4645,7 @@ packages: /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + dev: true /svelte-check/2.10.2_svelte@3.54.0: resolution: {integrity: sha512-h1Tuiir0m8J5yqN+Vx6qgKKk1L871e6a9o7rMwVWfu8Qs6Wg7x2R+wcxS3SO3VpW5JCxCat90rxPsZMYgz+HaQ==} @@ -4802,33 +4754,6 @@ packages: supports-hyperlinks: 2.3.0 dev: true - /tesseract.js-core/3.0.2: - resolution: {integrity: sha512-2fD76ka9nO/C616R0fq+M9Zu91DA3vEfyozp0jlxaJOBmpfeprtgRP3cqVweZh2darE1kK/DazoxZ65g7WU99Q==} - dev: false - - /tesseract.js/3.0.3: - resolution: {integrity: sha512-eZ1+OGWvF5IMExAzIwnDf3S3kf2FeC+i4qrMTRvBSlZeHc3ONy0vCmaKmBQz6scjB6C1W2w2x0r4lCEh95qBnw==} - requiresBuild: true - dependencies: - babel-eslint: 10.1.0 - bmp-js: 0.1.0 - file-type: 12.4.2 - idb-keyval: 3.2.0 - is-electron: 2.2.1 - is-url: 1.2.4 - node-fetch: 2.6.7 - opencollective-postinstall: 2.0.3 - regenerator-runtime: 0.13.11 - resolve-url: 0.2.1 - tesseract.js-core: 3.0.2 - wasm-feature-detect: 1.3.0 - zlibjs: 0.3.1 - transitivePeerDependencies: - - encoding - - eslint - - supports-color - dev: false - /test-exclude/6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -4849,6 +4774,7 @@ packages: /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} + dev: true /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -4867,10 +4793,6 @@ packages: url-parse: 1.5.10 dev: true - /tr46/0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false - /tr46/2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} @@ -5025,14 +4947,6 @@ packages: makeerror: 1.0.12 dev: true - /wasm-feature-detect/1.3.0: - resolution: {integrity: sha512-w9datO3OReMouWgKOelvu1CozmLK/VbkXOtlzNTanBJpR0uBHyUwS3EYdXf5vBPoHKYS0lpuYo91rpqMNIZM9g==} - dev: false - - /webidl-conversions/3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false - /webidl-conversions/5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} @@ -5053,13 +4967,6 @@ packages: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} dev: true - /whatwg-url/5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - /whatwg-url/8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} engines: {node: '>=10'} @@ -5182,12 +5089,3 @@ packages: y18n: 5.0.8 yargs-parser: 20.2.9 dev: true - - /yocto-queue/1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: false - - /zlibjs/0.3.1: - resolution: {integrity: sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==} - dev: false diff --git a/version-bump.mjs b/version-bump.mjs index 3cce472..68e350d 100644 --- a/version-bump.mjs +++ b/version-bump.mjs @@ -1,6 +1,7 @@ import { readFileSync, writeFileSync } from 'fs' const targetVersion = process.env.npm_package_version +console.log(`Bumping version to ${targetVersion}`) // read minAppVersion from manifest.json and bump version to target version const manifest = JSON.parse(readFileSync('manifest-beta.json', 'utf8')) From b1f6a89e169263d739491563e9df87b4cc6693c4 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Tue, 3 Jan 2023 10:47:32 +0100 Subject: [PATCH 08/22] Fixed use directive --- src/components/InputSearch.svelte | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/InputSearch.svelte b/src/components/InputSearch.svelte index ff6c95f..e8a5387 100644 --- a/src/components/InputSearch.svelte +++ b/src/components/InputSearch.svelte @@ -19,12 +19,15 @@ } } - async function selectInput() { - await tick() - elInput.focus() - await tick() - elInput.select() - await tick() + function selectInput(_?: HTMLElement): void { + tick() + .then(() => { + elInput.focus() + return tick() + }) + .then(() => { + elInput.select() + }) } const debouncedOnInput = debounce(() => { From fbefe544ed3bc3535155c6947f92823887c7f444 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Tue, 3 Jan 2023 10:58:09 +0100 Subject: [PATCH 09/22] Fixed dependency --- package.json | 2 +- pnpm-lock.yaml | 183 ++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 144 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index e484b45..03f4b07 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "dexie": "^3.2.2", "lodash-es": "4.17.21", "minisearch": "6.0.0-beta.1", - "obsidian-text-extract": "link:..\\obsidian-text-extract-lib", + "obsidian-text-extract": "^1.0.4", "pure-md5": "^0.1.14" }, "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04ef0da..0acb019 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,7 +22,7 @@ specifiers: lodash-es: 4.17.21 minisearch: 6.0.0-beta.1 obsidian: latest - obsidian-text-extract: link:..\obsidian-text-extract-lib + obsidian-text-extract: ^1.0.4 prettier: ^2.8.1 prettier-plugin-svelte: ^2.8.1 pure-md5: ^0.1.14 @@ -38,7 +38,7 @@ dependencies: dexie: 3.2.2 lodash-es: 4.17.21 minisearch: 6.0.0-beta.1 - obsidian-text-extract: link:../obsidian-text-extract-lib + obsidian-text-extract: 1.0.4 pure-md5: 0.1.14 devDependencies: @@ -86,7 +86,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 - dev: true /@babel/compat-data/7.20.5: resolution: {integrity: sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==} @@ -123,7 +122,6 @@ packages: '@babel/types': 7.20.5 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 - dev: true /@babel/helper-annotate-as-pure/7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} @@ -210,7 +208,6 @@ packages: /@babel/helper-environment-visitor/7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-explode-assignable-expression/7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} @@ -225,14 +222,12 @@ packages: dependencies: '@babel/template': 7.18.10 '@babel/types': 7.20.5 - dev: true /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.5 - dev: true /@babel/helper-member-expression-to-functions/7.18.9: resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} @@ -322,17 +317,14 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.5 - dev: true /@babel/helper-string-parser/7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier/7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-option/7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} @@ -369,7 +361,6 @@ packages: '@babel/helper-validator-identifier': 7.19.1 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true /@babel/parser/7.20.5: resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==} @@ -377,7 +368,6 @@ packages: hasBin: true dependencies: '@babel/types': 7.20.5 - dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} @@ -1301,7 +1291,6 @@ packages: '@babel/code-frame': 7.18.6 '@babel/parser': 7.20.5 '@babel/types': 7.20.5 - dev: true /@babel/traverse/7.20.5: resolution: {integrity: sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==} @@ -1319,7 +1308,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/types/7.20.5: resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==} @@ -1328,7 +1316,6 @@ packages: '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 - dev: true /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1574,28 +1561,23 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 '@jridgewell/trace-mapping': 0.3.17 - dev: true /@jridgewell/resolve-uri/3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array/1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true /@jridgewell/trace-mapping/0.3.17: resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - dev: true /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -1834,7 +1816,6 @@ packages: engines: {node: '>=4'} dependencies: color-convert: 1.9.3 - dev: true /ansi-styles/4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} @@ -1882,6 +1863,23 @@ packages: engines: {node: '>= 0.4'} dev: true + /babel-eslint/10.1.0: + resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==} + engines: {node: '>=6'} + deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. + peerDependencies: + eslint: '>= 4.12.1' + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.20.5 + '@babel/traverse': 7.20.5 + '@babel/types': 7.20.5 + eslint-visitor-keys: 1.3.0 + resolve: 1.22.1 + transitivePeerDependencies: + - supports-color + dev: false + /babel-jest/27.5.1: resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -2044,6 +2042,10 @@ packages: engines: {node: '>=8'} dev: true + /bmp-js/0.1.0: + resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} + dev: false + /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -2125,7 +2127,6 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true /chalk/3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} @@ -2193,7 +2194,6 @@ packages: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 - dev: true /color-convert/2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -2204,7 +2204,6 @@ packages: /color-name/1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -2278,7 +2277,6 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: true /decimal.js/10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -2804,7 +2802,6 @@ packages: /escape-string-regexp/1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - dev: true /escape-string-regexp/2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} @@ -2824,6 +2821,11 @@ packages: source-map: 0.6.1 dev: true + /eslint-visitor-keys/1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: false + /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -2901,6 +2903,11 @@ packages: bser: 2.1.1 dev: true + /file-type/12.4.2: + resolution: {integrity: sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==} + engines: {node: '>=8'} + dev: false + /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -2954,7 +2961,6 @@ packages: /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -3009,7 +3015,6 @@ packages: /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: true /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -3040,7 +3045,6 @@ packages: /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - dev: true /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -3070,7 +3074,6 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - dev: true /html-encoding-sniffer/2.0.1: resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} @@ -3116,6 +3119,10 @@ packages: safer-buffer: 2.1.2 dev: true + /idb-keyval/3.2.0: + resolution: {integrity: sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ==} + dev: false + /ignore/5.2.1: resolution: {integrity: sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==} engines: {node: '>= 4'} @@ -3201,7 +3208,6 @@ packages: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 - dev: true /is-date-object/1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -3210,6 +3216,10 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-electron/2.2.1: + resolution: {integrity: sha512-r8EEQQsqT+Gn0aXFx7lTFygYQhILLCB+wn0WCDL5LZRINeLH/Rvw1j2oKodELLXYNImQ3CRlVsY8wW4cGOsyuw==} + dev: false + /is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3298,6 +3308,10 @@ packages: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true + /is-url/1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + dev: false + /is-weakmap/2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} dev: true @@ -3831,7 +3845,6 @@ packages: /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true /js-yaml/3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} @@ -3892,7 +3905,6 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - dev: true /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -4050,7 +4062,6 @@ packages: /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /nanoid/3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} @@ -4062,6 +4073,18 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /node-fetch/2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true @@ -4113,6 +4136,20 @@ packages: object-keys: 1.1.1 dev: true + /obsidian-text-extract/1.0.4: + resolution: {integrity: sha512-lJ7HaEPGUoGVYr6iCSEU8oPrnA8xRBQgSU9KryWteq3wO+Yiw2Zue70G0rZf9Yj+DkgR92PtuR8aQZQxTy/uLA==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + dexie: 3.2.2 + p-limit: 4.0.0 + pure-md5: 0.1.14 + tesseract.js: 3.0.3 + transitivePeerDependencies: + - encoding + - eslint + - supports-color + dev: false + /obsidian/1.1.1: resolution: {integrity: sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg==} peerDependencies: @@ -4136,6 +4173,11 @@ packages: mimic-fn: 2.1.0 dev: true + /opencollective-postinstall/2.0.3: + resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} + hasBin: true + dev: false + /optionator/0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -4155,6 +4197,13 @@ packages: p-try: 2.2.0 dev: true + /p-limit/4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: false + /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4205,7 +4254,6 @@ packages: /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-type/4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -4333,7 +4381,6 @@ packages: /regenerator-runtime/0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: true /regenerator-transform/0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} @@ -4399,6 +4446,11 @@ packages: engines: {node: '>=8'} dev: true + /resolve-url/0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: false + /resolve.exports/1.1.0: resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} engines: {node: '>=10'} @@ -4411,7 +4463,6 @@ packages: is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -4618,7 +4669,6 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - dev: true /supports-color/7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -4645,7 +4695,6 @@ packages: /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /svelte-check/2.10.2_svelte@3.54.0: resolution: {integrity: sha512-h1Tuiir0m8J5yqN+Vx6qgKKk1L871e6a9o7rMwVWfu8Qs6Wg7x2R+wcxS3SO3VpW5JCxCat90rxPsZMYgz+HaQ==} @@ -4754,6 +4803,33 @@ packages: supports-hyperlinks: 2.3.0 dev: true + /tesseract.js-core/3.0.2: + resolution: {integrity: sha512-2fD76ka9nO/C616R0fq+M9Zu91DA3vEfyozp0jlxaJOBmpfeprtgRP3cqVweZh2darE1kK/DazoxZ65g7WU99Q==} + dev: false + + /tesseract.js/3.0.3: + resolution: {integrity: sha512-eZ1+OGWvF5IMExAzIwnDf3S3kf2FeC+i4qrMTRvBSlZeHc3ONy0vCmaKmBQz6scjB6C1W2w2x0r4lCEh95qBnw==} + requiresBuild: true + dependencies: + babel-eslint: 10.1.0 + bmp-js: 0.1.0 + file-type: 12.4.2 + idb-keyval: 3.2.0 + is-electron: 2.2.1 + is-url: 1.2.4 + node-fetch: 2.6.7 + opencollective-postinstall: 2.0.3 + regenerator-runtime: 0.13.11 + resolve-url: 0.2.1 + tesseract.js-core: 3.0.2 + wasm-feature-detect: 1.3.0 + zlibjs: 0.3.1 + transitivePeerDependencies: + - encoding + - eslint + - supports-color + dev: false + /test-exclude/6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -4774,7 +4850,6 @@ packages: /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: true /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -4793,6 +4868,10 @@ packages: url-parse: 1.5.10 dev: true + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false + /tr46/2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} @@ -4947,6 +5026,14 @@ packages: makeerror: 1.0.12 dev: true + /wasm-feature-detect/1.3.0: + resolution: {integrity: sha512-w9datO3OReMouWgKOelvu1CozmLK/VbkXOtlzNTanBJpR0uBHyUwS3EYdXf5vBPoHKYS0lpuYo91rpqMNIZM9g==} + dev: false + + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + /webidl-conversions/5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} @@ -4967,6 +5054,13 @@ packages: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} dev: true + /whatwg-url/5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + /whatwg-url/8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} engines: {node: '>=10'} @@ -5089,3 +5183,12 @@ packages: y18n: 5.0.8 yargs-parser: 20.2.9 dev: true + + /yocto-queue/1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: false + + /zlibjs/0.3.1: + resolution: {integrity: sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==} + dev: false From 1593c459d11b8f298e01b01ad2070eb4ea545fe8 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Thu, 5 Jan 2023 17:02:33 +0100 Subject: [PATCH 10/22] Fixed #165 --- src/globals.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/globals.ts b/src/globals.ts index 7bdc5d1..3ea1ce0 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -96,7 +96,7 @@ export type TextExtractorApi = { * @returns */ export function getTextExtractor(): TextExtractorApi | undefined { - return (app as any).plugins?.plugins?.['text-extractor'].api + return (app as any).plugins?.plugins?.['text-extractor']?.api } export const SPACE_OR_PUNCTUATION = From dc13c03603715991be108b08925bac8d37d397d3 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Thu, 5 Jan 2023 17:04:25 +0100 Subject: [PATCH 11/22] 1.10.0-beta.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 03f4b07..aa77b9e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "scambier.obsidian-search", - "version": "1.10.0-beta.1", + "version": "1.10.0-beta.2", "description": "A search engine for Obsidian", "main": "dist/main.js", "scripts": { From d1b12f9142674398a66448956e277bd184abbda6 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Fri, 6 Jan 2023 10:46:58 +0100 Subject: [PATCH 12/22] #158 - greater range for weightings, clearing cache when toggling diacritics --- src/settings.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/settings.ts b/src/settings.ts index f324f0b..49f5c70 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -184,7 +184,8 @@ export class SettingsTab extends PluginSettingTab { const diacriticsDesc = new DocumentFragment() diacriticsDesc.createSpan({}, span => { span.innerHTML = `Normalize diacritics in search terms. Words like "brûlée" or "žluťoučký" will be indexed as "brulee" and "zlutoucky".
- ⚠️You probably should NOT disable this.
+ ⚠️ You probably should NOT disable this.
+ ⚠️ Changing this setting will clear the cache.
Needs a restart to fully take effect. ` }) @@ -193,6 +194,7 @@ export class SettingsTab extends PluginSettingTab { .setDesc(diacriticsDesc) .addToggle(toggle => toggle.setValue(settings.ignoreDiacritics).onChange(async v => { + await database.clearCache() settings.ignoreDiacritics = v await saveSettings(this.plugin) }) @@ -364,7 +366,7 @@ export class SettingsTab extends PluginSettingTab { } weightSlider(cb: SliderComponent, key: keyof WeightingSettings): void { - cb.setLimits(1, 3, 0.1) + cb.setLimits(1, 5, 0.1) .setValue(settings[key]) .setDynamicTooltip() .onChange(v => { From 7881120abdb0847c35f3348b2717ea2f59a658ea Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Fri, 6 Jan 2023 12:58:46 +0100 Subject: [PATCH 13/22] #157 - Basic canvas support --- src/cache-manager.ts | 47 ++++++++++++++++++++++++++++++++++++-------- src/tools/utils.ts | 9 +++++---- 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/cache-manager.ts b/src/cache-manager.ts index faa87e0..68b39e4 100644 --- a/src/cache-manager.ts +++ b/src/cache-manager.ts @@ -1,16 +1,15 @@ import { Notice } from 'obsidian' import { - getTextExtractor, type DocumentRef, + getTextExtractor, type IndexedDocument, } from './globals' import { database } from './database' -import type { AsPlainObject } from 'minisearch' -import type MiniSearch from 'minisearch' import { extractHeadingsFromCache, getAliasesFromMetadata, getTagsFromMetadata, + isFileCanvas, isFileImage, isFilePDF, isFilePlaintext, @@ -18,18 +17,50 @@ import { removeDiacritics, } from './tools/utils' import { getImageText, getPdfText } from 'obsidian-text-extract' +import type { CanvasData } from 'obsidian/canvas' +import type { AsPlainObject } from 'minisearch' +import type MiniSearch from 'minisearch' -async function getIndexedDocument(path: string): Promise { +/** + * This function is responsible for extracting the text from a file and + * returning it as an `IndexedDocument` object. + * @param path + */ +async function getAndMapIndexedDocument( + path: string +): Promise { const file = app.vault.getFiles().find(f => f.path === path) if (!file) throw new Error(`Invalid file path: "${path}"`) let content: string | null = null const extractor = getTextExtractor() - // Plain text + + // ** Plain text ** + // Just read the file content if (isFilePlaintext(path)) { content = await app.vault.cachedRead(file) } - // Image or PDF, with the text-extractor plugin + + // ** Canvas ** + // Extract the text fields from the json + else if (isFileCanvas(path)) { + const canvas = JSON.parse(await app.vault.cachedRead(file)) as CanvasData + let texts: string[] = [] + // Concatenate text from the canvas fields + for (const node of canvas.nodes) { + if (node.type === 'text') { + texts.push(node.text) + } else if (node.type === 'file') { + texts.push(node.file) + } + } + for (const edge of canvas.edges.filter(e => !!e.label)) { + texts.push(edge.label!) + } + content = texts.join('\r\n') + } + + // a) ** Image or PDF ** with Text Extractor else if (extractor) { if (extractor.canFileBeExtracted(path)) { content = await extractor.extractText(file) @@ -37,7 +68,7 @@ async function getIndexedDocument(path: string): Promise { throw new Error('Invalid file format: ' + file.path) } } - // Image or PDF, without the text-extractor plugin + // b) ** Image or PDF ** without the text-extractor plugin else { if (isFilePDF(path)) { content = await getPdfText(file) @@ -106,7 +137,7 @@ class CacheManager { public async addToLiveCache(path: string): Promise { try { - const doc = await getIndexedDocument(path) + const doc = await getAndMapIndexedDocument(path) this.documents.set(path, doc) } catch (e) { console.warn('Omnisearch: Error while adding to live cache', e) diff --git a/src/tools/utils.ts b/src/tools/utils.ts index 6137d10..5619e71 100644 --- a/src/tools/utils.ts +++ b/src/tools/utils.ts @@ -7,9 +7,9 @@ import { } from 'obsidian' import type { SearchMatch } from '../globals' import { - getChsSegmenter, excerptAfter, excerptBefore, + getChsSegmenter, highlightClass, isSearchMatch, regexLineSplit, @@ -215,6 +215,7 @@ export function getCtrlKeyLabel(): 'ctrl' | '⌘' { export function isFileIndexable(path: string): boolean { return ( isFilePlaintext(path) || + isFileCanvas(path) || (!Platform.isMobileApp && settings.PDFIndexing && isFilePDF(path)) || (!Platform.isMobileApp && settings.imagesIndexing && isFileImage(path)) ) @@ -231,11 +232,11 @@ export function isFilePDF(path: string): boolean { } export function isFilePlaintext(path: string): boolean { - return getPlaintextExtensions().some(t => path.endsWith(`.${t}`)) + return [...settings.indexedFileTypes, 'md'].some(t => path.endsWith(`.${t}`)) } -export function getPlaintextExtensions(): string[] { - return [...settings.indexedFileTypes, 'md'] +export function isFileCanvas(path: string): boolean { + return path.endsWith('.canvas') } export function getExtension(path: string): string { From b06153f5d92bbd28487f32b581f8db9d9bb7e5db Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Fri, 6 Jan 2023 15:29:59 +0100 Subject: [PATCH 14/22] #146 - Consider subtags as normal tags for search --- src/tools/utils.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/tools/utils.ts b/src/tools/utils.ts index 5619e71..67d6b8f 100644 --- a/src/tools/utils.ts +++ b/src/tools/utils.ts @@ -195,7 +195,25 @@ export function getAliasesFromMetadata( } export function getTagsFromMetadata(metadata: CachedMetadata | null): string[] { - return metadata ? getAllTags(metadata) ?? [] : [] + let tags = metadata ? getAllTags(metadata) ?? [] : [] + // This will "un-nest" tags that are in the form of "#tag/subtag" + // A tag like "#tag/subtag" will be split into 3 tags: '#tag/subtag", "#tag" and "#subtag" + // https://github.com/scambier/obsidian-omnisearch/issues/146 + tags = [ + ...new Set( + tags.reduce((acc, tag) => { + return [ + ...acc, + ...tag + .split('/') + .filter(t => t) + .map(t => (t.startsWith('#') ? t : `#${t}`)), + tag, + ] + }, [] as string[]) + ), + ] + return tags } /** From a5b069d0c289f13465d728202a13c94abf01b065 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Fri, 6 Jan 2023 16:19:15 +0100 Subject: [PATCH 15/22] #141 - add first excerpt for each result in the public api --- src/tools/api.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/tools/api.ts b/src/tools/api.ts index 7539c93..577e90e 100644 --- a/src/tools/api.ts +++ b/src/tools/api.ts @@ -1,6 +1,7 @@ import type { ResultNote } from '../globals' import { Query } from '../search/query' import { searchEngine } from '../search/omnisearch' +import { makeExcerpt } from './utils' type ResultNoteApi = { score: number @@ -8,6 +9,7 @@ type ResultNoteApi = { basename: string foundWords: string[] matches: SearchMatchApi[] + excerpt: string } export type SearchMatchApi = { @@ -17,7 +19,10 @@ export type SearchMatchApi = { function mapResults(results: ResultNote[]): ResultNoteApi[] { return results.map(result => { - const { score, path, basename, foundWords, matches } = result + const { score, path, basename, foundWords, matches, content } = result + + const excerpt = makeExcerpt(content, matches[0]?.offset ?? -1) + return { score, path, @@ -29,14 +34,18 @@ function mapResults(results: ResultNote[]): ResultNoteApi[] { offset: match.offset, } }), + excerpt, } }) } -async function search(q: string): Promise { +async function search( + q: string, + options: Partial<{ excerpt: boolean }> = {} +): Promise { const query = new Query(q) const raw = await searchEngine.getSuggestions(query) return mapResults(raw) } -export default {search} +export default { search } From 98e20130b40152432bb356069d47a4c3cfb46a41 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sun, 8 Jan 2023 10:13:20 +0100 Subject: [PATCH 16/22] Re-enabling PDF & Image indexing on mobile if Text Extractor is installed --- src/settings.ts | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/settings.ts b/src/settings.ts index 49f5c70..777a6b6 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -85,29 +85,29 @@ export class SettingsTab extends PluginSettingTab { new Setting(containerEl).setName('Indexing').setHeading() if (getTextExtractor()) { - new Setting(containerEl).setDesc( - '👍 You have installed Text Extractor, Omnisearch will use it to index PDFs and images.' - ) + const desc = new DocumentFragment() + desc.createSpan({}, span => { + span.innerHTML = `👍 You have installed Text Extractor, Omnisearch will use it to index PDFs and images. +
Text extraction only works on desktop, but the cache can be synchronized with your mobile device.` + }) + new Setting(containerEl).setDesc(desc) } else { const label = new DocumentFragment() label.createSpan({}, span => { - span.innerHTML = - `⚠️ Omnisearch will soon require Text Extractor to index PDFs and images. + span.innerHTML = `⚠️ Omnisearch will soon require Text Extractor to index PDFs and images. You can already install it to get a head start.` }) new Setting(containerEl).setDesc(label) } // PDF Indexing - if (!Platform.isMobileApp) { + if (!Platform.isMobileApp || getTextExtractor()) { const indexPDFsDesc = new DocumentFragment() indexPDFsDesc.createSpan({}, span => { - span.innerHTML = `Omnisearch will include PDFs in search results.
- ⚠️ PDFs first need to be processed. This can take anywhere from a few seconds to 2 minutes, then the resulting text is cached. - Needs a restart to fully take effect.` + span.innerHTML = `Include PDFs in search results - Will soon depend on Text Extractor.` }) new Setting(containerEl) - .setName('PDF Indexing') + .setName(`PDFs Indexing`) .setDesc(indexPDFsDesc) .addToggle(toggle => toggle.setValue(settings.PDFIndexing).onChange(async v => { @@ -115,21 +115,14 @@ export class SettingsTab extends PluginSettingTab { await saveSettings(this.plugin) }) ) - } - // Images Indexing - if (!Platform.isMobileApp) { + // Images Indexing const indexImagesDesc = new DocumentFragment() indexImagesDesc.createSpan({}, span => { - span.innerHTML = `Omnisearch will use Tesseract to index images from their text. -
    -
  • Only English is supported at the moment.
  • -
  • Not all images can be correctly read by the OCR, this feature works best with scanned documents.
  • -
- Needs a restart to fully take effect.` + span.innerHTML = `Include images in search results - Will soon depend on Text Extractor.` }) new Setting(containerEl) - .setName('BETA - Images Indexing') + .setName(`Images Indexing`) .setDesc(indexImagesDesc) .addToggle(toggle => toggle.setValue(settings.imagesIndexing).onChange(async v => { @@ -138,6 +131,7 @@ export class SettingsTab extends PluginSettingTab { }) ) } + // Additional files to index const indexedFileTypesDesc = new DocumentFragment() indexedFileTypesDesc.createSpan({}, span => { From f030f2a9c8f0c33d9fae6dd344833a36c8ca5627 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sun, 8 Jan 2023 10:31:03 +0100 Subject: [PATCH 17/22] 1.10.0-beta.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aa77b9e..93ab4b3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "scambier.obsidian-search", - "version": "1.10.0-beta.2", + "version": "1.10.0-beta.3", "description": "A search engine for Obsidian", "main": "dist/main.js", "scripts": { From aeb35c341bf1714f1173e0139b0825c3e14ae63e Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sun, 8 Jan 2023 13:23:56 +0100 Subject: [PATCH 18/22] Fixed pdf/images indexing on mobile --- src/tools/utils.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/tools/utils.ts b/src/tools/utils.ts index 67d6b8f..65fa036 100644 --- a/src/tools/utils.ts +++ b/src/tools/utils.ts @@ -5,7 +5,7 @@ import { parseFrontMatterAliases, Platform, } from 'obsidian' -import type { SearchMatch } from '../globals' +import { getTextExtractor, type SearchMatch } from '../globals' import { excerptAfter, excerptBefore, @@ -231,11 +231,13 @@ export function getCtrlKeyLabel(): 'ctrl' | '⌘' { } export function isFileIndexable(path: string): boolean { + const canIndexPDF = (!Platform.isMobileApp || !!getTextExtractor()) && settings.PDFIndexing + const canIndexImages = (!Platform.isMobileApp || !!getTextExtractor()) && settings.imagesIndexing return ( isFilePlaintext(path) || isFileCanvas(path) || - (!Platform.isMobileApp && settings.PDFIndexing && isFilePDF(path)) || - (!Platform.isMobileApp && settings.imagesIndexing && isFileImage(path)) + (canIndexPDF && isFilePDF(path)) || + (canIndexImages && isFileImage(path)) ) } From 5299389e89564658bbe74c4b4fec26804616e4fa Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sun, 8 Jan 2023 13:24:05 +0100 Subject: [PATCH 19/22] 1.10.0-beta.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 93ab4b3..daeba10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "scambier.obsidian-search", - "version": "1.10.0-beta.3", + "version": "1.10.0-beta.4", "description": "A search engine for Obsidian", "main": "dist/main.js", "scripts": { From dbd92dc71f99031962a943e98aec25f198a8327c Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Tue, 10 Jan 2023 21:51:20 +0100 Subject: [PATCH 20/22] Fixed #168 - prevent .removeDiacritics() to remove backticks --- src/tools/utils.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/tools/utils.ts b/src/tools/utils.ts index 65fa036..993a703 100644 --- a/src/tools/utils.ts +++ b/src/tools/utils.ts @@ -223,7 +223,12 @@ export function removeDiacritics(str: string): string { if (str === null || str === undefined) { return '' } - return str.normalize('NFD').replace(/\p{Diacritic}/gu, '') + // Keep backticks for code blocks, because otherwise they are removed by the .normalize() function + // https://stackoverflow.com/a/36100275 + str = str.replaceAll('`', '[__omnisearch__backtick__]') + str = str.normalize('NFD').replace(/\p{Diacritic}/gu, '') + str = str.replaceAll('[__omnisearch__backtick__]', '`') + return str } export function getCtrlKeyLabel(): 'ctrl' | '⌘' { From 54abf8a106ae8f2e284126c565d3c818886eb064 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Tue, 10 Jan 2023 22:27:49 +0100 Subject: [PATCH 21/22] Updated bug template --- .github/ISSUE_TEMPLATE/bug_report.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 8e1c62b..65af60d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,17 +1,12 @@ --- name: Bug report about: Create a report to help us improve -title: "[BUG]" +title: "[BUG] " labels: '' assignees: '' --- - - **Problem description:** @@ -20,8 +15,16 @@ make sure that you have the latest available version of Omnisearch. **Your environment:** -- Omnisearch version: -- Obsidian version: + + + +- Omnisearch version: +- Obsidian version: - Operating system: -- Number of notes in your vault (approx.): -- Other plugins that may be related to the issue: +- Number of indexed documents in your vault (approx.): + +**Things to try:** + +- Does the problem occur when Obsidian is the only active community plugin: +- Does the problem occur when you _don't_ index PDFs, images, or other non-notes files: +- Does the problem occur after a cache reset: From f0a2a6a7ae55e78bb0053f6e0baadd4c1aed167c Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Wed, 11 Jan 2023 20:10:56 +0100 Subject: [PATCH 22/22] Fixed history navigation --- src/components/InputSearch.svelte | 4 ++++ src/components/ModalVault.svelte | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/InputSearch.svelte b/src/components/InputSearch.svelte index e8a5387..f303c5d 100644 --- a/src/components/InputSearch.svelte +++ b/src/components/InputSearch.svelte @@ -11,6 +11,10 @@ let elInput: HTMLInputElement const dispatch = createEventDispatcher() + export function setInputValue(v:string): void { + value = v + } + $: { if (initialValue && !initialSet && !value) { initialSet = true diff --git a/src/components/ModalVault.svelte b/src/components/ModalVault.svelte index dee76be..84065c2 100644 --- a/src/components/ModalVault.svelte +++ b/src/components/ModalVault.svelte @@ -23,6 +23,7 @@ let query: Query let indexingStepDesc = '' let searching = true + let refInput: InputSearch|undefined $: selectedNote = resultNotes[selectedIndex] $: searchQuery = searchQuery ?? previousQuery @@ -87,7 +88,8 @@ if (++historySearchIndex >= history.length) { historySearchIndex = 0 } - previousQuery = history[historySearchIndex] + searchQuery = history[historySearchIndex] + refInput?.setInputValue(searchQuery) } async function nextSearchHistory() { @@ -95,7 +97,8 @@ if (--historySearchIndex < 0) { historySearchIndex = history.length ? history.length - 1 : 0 } - previousQuery = history[historySearchIndex] + searchQuery = history[historySearchIndex] + refInput?.setInputValue(searchQuery) } async function updateResults() { @@ -230,6 +233,7 @@ {#if settings.showCreateButton}