Skip to content

Commit 9094044

Browse files
committed
feat: add defineLogger
1 parent 54da4b5 commit 9094044

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { computed, shallowRef } from '@reactive-vscode/reactivity'
2+
import type { UseLoggerOptions } from '../composables'
3+
import { useLogger } from '../composables'
4+
import { onActivate } from './onActivate'
5+
6+
/**
7+
* Define a logger which is usable before activation.
8+
*
9+
* @category view
10+
*/
11+
export function defineLogger(name: string, options?: UseLoggerOptions) {
12+
type Logger = ReturnType<typeof useLogger>
13+
const logger = shallowRef<Logger | null>(null)
14+
15+
const delayedOps: [string, any[]][] = []
16+
const createDelayedOp = <K extends Exclude<keyof Logger, 'outputChannel'>>(key: K) =>
17+
(...args: Parameters<Logger[K]>): ReturnType<Logger[K]> | null => {
18+
if (logger.value) {
19+
// @ts-expect-error - K is always a literal string
20+
return logger.value[key](...args)
21+
}
22+
else {
23+
delayedOps.push([key, args])
24+
return null
25+
}
26+
}
27+
28+
onActivate(() => {
29+
logger.value = useLogger(name, options)
30+
for (const [key, args] of delayedOps) {
31+
// @ts-expect-error - missing types
32+
logger.value[key](...args)
33+
}
34+
})
35+
36+
return {
37+
logger,
38+
outputChannel: computed(() => logger.value?.outputChannel),
39+
info: createDelayedOp('info'),
40+
warn: createDelayedOp('warn'),
41+
error: createDelayedOp('error'),
42+
append: createDelayedOp('append'),
43+
appendLine: createDelayedOp('appendLine'),
44+
replace: createDelayedOp('replace'),
45+
clear: createDelayedOp('clear'),
46+
show: createDelayedOp('show'),
47+
hide: createDelayedOp('hide'),
48+
}
49+
}

packages/core/src/utils/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export * from './createKeyedComposable'
22
export * from './createSingletonComposable'
33
export * from './defineConfigs'
44
export * from './defineExtension'
5+
export * from './defineLogger'
56
export * from './executeCommand'
67
export * from './onActivate'
78
export * from './onDeactivate'

0 commit comments

Comments
 (0)