📄 index.ts¶
📊 Analysis Summary¶
| Metric | Count |
|---|---|
| 🔧 Functions | 2 |
| 📦 Imports | 4 |
| 📊 Variables & Constants | 3 |
| 📑 Type Aliases | 1 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/shared/createSharedComposable/index.ts
📦 Imports¶
| Name | Source |
|---|---|
EffectScope |
vue |
AnyFn |
../utils |
effectScope |
vue |
tryOnScopeDispose |
../tryOnScopeDispose |
Variables & Constants¶
| Name | Type | Kind | Value | Exported |
|---|---|---|---|---|
subscribers |
number |
let/var | 0 |
✗ |
state |
ReturnType<Fn> | undefined |
let/var | *not shown* |
✗ |
scope |
EffectScope | undefined |
let/var | *not shown* |
✗ |
Functions¶
createSharedComposable(composable: Fn): SharedComposableReturn<Fn>¶
Code
export function createSharedComposable<Fn extends AnyFn>(composable: Fn): SharedComposableReturn<Fn> {
let subscribers = 0
let state: ReturnType<Fn> | undefined
let scope: EffectScope | undefined
const dispose = () => {
subscribers -= 1
if (scope && subscribers <= 0) {
scope.stop()
state = undefined
scope = undefined
}
}
return <Fn>((...args) => {
subscribers += 1
if (!scope) {
scope = effectScope(true)
state = scope.run(() => composable(...args))
}
tryOnScopeDispose(dispose)
return state
})
}
-
JSDoc:
-
Parameters:
composable: Fn- Return Type:
SharedComposableReturn<Fn> - Calls:
scope.stopeffectScope (from vue)scope.runcomposabletryOnScopeDispose (from ../tryOnScopeDispose)
dispose(): void¶
Code
- Return Type:
void - Calls:
scope.stop