Skip to content

Commit

Permalink
feat: add defineLogger
Browse files Browse the repository at this point in the history
  • Loading branch information
kermanx committed Jun 24, 2024
1 parent 54da4b5 commit 9094044
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 0 deletions.
49 changes: 49 additions & 0 deletions packages/core/src/utils/defineLogger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { computed, shallowRef } from '@reactive-vscode/reactivity'
import type { UseLoggerOptions } from '../composables'
import { useLogger } from '../composables'
import { onActivate } from './onActivate'

/**
* Define a logger which is usable before activation.
*
* @category view
*/
export function defineLogger(name: string, options?: UseLoggerOptions) {
type Logger = ReturnType<typeof useLogger>
const logger = shallowRef<Logger | null>(null)

const delayedOps: [string, any[]][] = []
const createDelayedOp = <K extends Exclude<keyof Logger, 'outputChannel'>>(key: K) =>
(...args: Parameters<Logger[K]>): ReturnType<Logger[K]> | null => {
if (logger.value) {
// @ts-expect-error - K is always a literal string
return logger.value[key](...args)
}
else {
delayedOps.push([key, args])
return null
}
}

onActivate(() => {
logger.value = useLogger(name, options)
for (const [key, args] of delayedOps) {
// @ts-expect-error - missing types
logger.value[key](...args)
}
})

return {
logger,
outputChannel: computed(() => logger.value?.outputChannel),
info: createDelayedOp('info'),
warn: createDelayedOp('warn'),
error: createDelayedOp('error'),
append: createDelayedOp('append'),
appendLine: createDelayedOp('appendLine'),
replace: createDelayedOp('replace'),
clear: createDelayedOp('clear'),
show: createDelayedOp('show'),
hide: createDelayedOp('hide'),
}
}
1 change: 1 addition & 0 deletions packages/core/src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ export * from './createKeyedComposable'
export * from './createSingletonComposable'
export * from './defineConfigs'
export * from './defineExtension'
export * from './defineLogger'
export * from './executeCommand'
export * from './onActivate'
export * from './onDeactivate'
Expand Down

0 comments on commit 9094044

Please sign in to comment.