Skip to content

Commit 34a4f48

Browse files
Patch types fixed
1 parent 482b3b7 commit 34a4f48

File tree

4 files changed

+21
-52
lines changed

4 files changed

+21
-52
lines changed

src/patchers/backlinks-patcher.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export default class BacklinksPatcher extends Patcher {
1313
const backlinkPatch = PatchHelper.tryPatchWorkspacePrototype<Backlink>(this.plugin, () => (
1414
(this.plugin.app.workspace.getLeavesOfType('backlink').first()?.view as any)?.backlink
1515
), {
16-
recomputeBacklink: PatchHelper.OverrideExisting(next => function (file: TFile, ...args: any[]) {
16+
recomputeBacklink: PatchHelper.OverrideExisting(next => function (file: TFile, ...args: any[]): void {
1717
that.isRecomputingBacklinks = true
1818
const result = next.call(this, file, ...args)
1919
that.isRecomputingBacklinks = false
@@ -33,7 +33,7 @@ export default class BacklinksPatcher extends Patcher {
3333
}
3434
}
3535
},
36-
getMarkdownFiles: PatchHelper.OverrideExisting(next => function (...args: any[]) {
36+
getMarkdownFiles: PatchHelper.OverrideExisting(next => function (...args: any[]): TFile[] {
3737
if (!that.isRecomputingBacklinks) return next.call(this, ...args)
3838

3939
// If we are recomputing backlinks, we need to include markdown as well as canvas files
@@ -46,7 +46,7 @@ export default class BacklinksPatcher extends Patcher {
4646
}
4747
})
4848

49-
return "files"
49+
return files
5050
})
5151
})
5252

src/patchers/canvas-patcher.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,14 @@ export default class CanvasPatcher extends Patcher {
4040

4141
// Patch canvas view
4242
PatchHelper.patchPrototype<CanvasView>(this.plugin, canvasView, {
43-
getViewData: PatchHelper.OverrideExisting(next => function (...args: any) {
43+
getViewData: PatchHelper.OverrideExisting(next => function (...args: any): string {
4444
const canvasData = this.canvas.getData()
4545

4646
try {
47-
return JSONSS(canvasData, { space: 2 })
47+
const stringified = JSONSS(canvasData, { space: 2 })
48+
if (stringified === undefined) throw new Error('Failed to stringify canvas data using json-stable-stringify')
49+
50+
return stringified
4851
} catch (e) {
4952
console.error('Failed to stringify canvas data using json-stable-stringify:', e)
5053

src/utils/_type-test.ts

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/utils/patch-helper.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { around } from "monkey-around"
22
import { Plugin } from "obsidian"
33

4+
// Is any
5+
type IsAny<T> = 0 extends 1 & T ? true : false
6+
type NotAny<T> = IsAny<T> extends true ? never : T
7+
48
// All keys in T that are functions
59
type FunctionKeys<T> = {
610
[K in keyof T]: T[K] extends (...args: any[]) => any ? K : never
@@ -11,21 +15,23 @@ type KeyFunction<T, K extends FunctionKeys<T>> =
1115
T[K] extends (...args: any[]) => any ? T[K] : never
1216

1317
// The type of a patch function for key K in T
14-
type KeyFunctionReplacement<T, K extends FunctionKeys<T>> =
15-
(this: T, ...args: Parameters<KeyFunction<T, K>>) => ReturnType<KeyFunction<T, K>>
18+
type KeyFunctionReplacement<T, K extends FunctionKeys<T>, R extends ReturnType<KeyFunction<T, K>>> =
19+
(this: T, ...args: Parameters<KeyFunction<T, K>>) => IsAny<ReturnType<KeyFunction<T, K>>> extends false
20+
? ReturnType<KeyFunction<T, K>> & NotAny<R>
21+
: any
1622

1723
// The wrapper of a patch function for key K in T
18-
type PatchFunctionWrapper<T, K extends FunctionKeys<T>> =
19-
(next: KeyFunction<T, K>) => KeyFunctionReplacement<T, K>
24+
type PatchFunctionWrapper<T, K extends FunctionKeys<T>, R extends ReturnType<KeyFunction<T, K>>> =
25+
(next: KeyFunction<T, K>) => KeyFunctionReplacement<T, K, R>
2026

2127
// The object of patch functions for T
2228
type FunctionPatchObject<T> = {
23-
[K in FunctionKeys<T>]?: PatchFunctionWrapper<T, K> & { __overrideExisting?: boolean }
29+
[K in FunctionKeys<T>]?: PatchFunctionWrapper<T, K, ReturnType<KeyFunction<T, K>>> & { __overrideExisting?: boolean }
2430
}
2531

2632
export default class PatchHelper {
27-
static OverrideExisting<T, K extends FunctionKeys<T>>(
28-
fn: PatchFunctionWrapper<T, K> & { __overrideExisting?: boolean }
33+
static OverrideExisting<T, K extends FunctionKeys<T>, R extends ReturnType<KeyFunction<T, K>>>(
34+
fn: PatchFunctionWrapper<T, K, R> & { __overrideExisting?: boolean }
2935
) { return Object.assign(fn, { __overrideExisting: true }) }
3036

3137
static patchPrototype<T>(

0 commit comments

Comments
 (0)