[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Resource](https://evolu.dev/docs/api-reference/common/Resource) › SharedResourceByKeyWithClaims

Defined in: [packages/common/src/Resource.ts:558](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L558)

Shared [Resource](https://evolu.dev/docs/api-reference/common/Resource/type-aliases/Resource)s keyed by logical identity and retained by claims.

This combines [SharedResourceByKey](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResourceByKey) with claim tracking. Resources are
kept alive while at least one claim retains their key.

By default, [createSharedResourceByKeyWithClaims](https://evolu.dev/docs/api-reference/common/Resource/functions/createSharedResourceByKeyWithClaims) uses reference
identity for both resource keys and claims, matching native `Map` and `Set`.
Callers may instead provide [lookup](https://evolu.dev/docs/api-reference/common/Lookup/type-aliases/Lookup) functions so logical
equality is based on derived stable keys.

## Extends

- [`AsyncDisposable`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management)

## Methods

<a id="asyncdispose"></a>

### \[asyncDispose\]()

```ts
asyncDispose: PromiseLike<void>;
```

Defined in: node_modules/.bun/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts:40

#### Inherited from

```ts
AsyncDisposable.[asyncDispose]
```

## Properties

<a id="addclaim"></a>

### addClaim

```ts
readonly addClaim: (claim: C, resourceKeys: readonly K[]) => Task<void, never, D>;
```

Defined in: [packages/common/src/Resource.ts:565](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L565)

Retains each resource key for `claim`.

### getClaimsForResource

```ts
readonly getClaimsForResource: (key: K) => ReadonlySet<C>;
```

Defined in: [packages/common/src/Resource.ts:580](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L580)

Returns the current unique claims retaining `key`.

### getResource

```ts
readonly getResource: (key: K) =>
  | BorrowedResource<T>
  | undefined;
```

Defined in: [packages/common/src/Resource.ts:577](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L577)

Returns the current resource for `key`, or `undefined` if absent.

### getResourceKeysForClaim

```ts
readonly getResourceKeysForClaim: (claim: C) => ReadonlySet<K>;
```

Defined in: [packages/common/src/Resource.ts:583](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L583)

Returns the current unique resource keys retained by `claim`.

### getResourcesForClaim

```ts
readonly getResourcesForClaim: (claim: C) => ReadonlySet<BorrowedResource<T>>;
```

Defined in: [packages/common/src/Resource.ts:586](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L586)

Returns the current unique resources retained by `claim`.

### removeClaim

```ts
readonly removeClaim: (claim: C, resourceKeys: readonly K[]) => Task<void, never, D>;
```

Defined in: [packages/common/src/Resource.ts:571](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L571)

Releases each previously retained resource key for `claim`.