Skip to content

Commit a3521c0

Browse files
committed
feat: add useExtensionSecret
1 parent 35736b7 commit a3521c0

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

packages/core/src/composables/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export * from './useDocumentText'
1616
export * from './useEditorDecorations'
1717
export * from './useEvent'
1818
export * from './useEventEmitter'
19+
export * from './useExtensionSecret'
1920
export * from './useFetchTasks'
2021
export * from './useFileUri'
2122
export * from './useFoldingRangeProvider'

packages/core/src/composables/useAllExtensions.ts

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useDisposable } from './useDisposable'
55

66
/**
77
* @reactive `extensions.all`
8+
* @category extension
89
*/
910
export const useAllExtensions = createSingletonComposable(() => {
1011
const allExtensions = shallowRef(extensions.all)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import type { Ref } from '@reactive-vscode/reactivity'
2+
import { ref, watch } from '@reactive-vscode/reactivity'
3+
import { extensionContext } from '../utils'
4+
import { useDisposable } from './useDisposable'
5+
6+
/**
7+
* Get a reactive secret value from the extension's secrets.
8+
*
9+
* @reactive `ExtensionContext.secrets`
10+
* @category extension
11+
*/
12+
export async function useExtensionSecret(key: string) {
13+
const secrets = extensionContext.value!.secrets
14+
15+
const value = ref(await secrets.get(key)) as Ref<string | undefined> & {
16+
set: (newValue: string) => Promise<void>
17+
remove: () => Promise<void>
18+
}
19+
20+
value.set = async (newValue: string) => {
21+
value.value = newValue
22+
await secrets.store(key, newValue)
23+
}
24+
25+
value.remove = async () => {
26+
value.value = undefined
27+
await secrets.delete(key)
28+
}
29+
30+
useDisposable(secrets.onDidChange(async (ev) => {
31+
if (ev.key === key)
32+
value.value = await secrets.get(key)
33+
}))
34+
35+
watch(value, (newValue) => {
36+
if (newValue === undefined)
37+
secrets.delete(key)
38+
else
39+
secrets.store(key, newValue)
40+
})
41+
42+
return value
43+
}

0 commit comments

Comments
 (0)