API reference / @evolu/common / Resources / createResources
Function: createResources()
function createResources<
TResource,
TResourceKey,
TResourceConfig,
TConsumer,
TConsumerId,
>(
config,
): Resources<TResource, TResourceKey, TResourceConfig, TConsumer, TConsumerId>;
Defined in: packages/common/src/Resources.ts:168
Creates Resources.
This tracks which consumers are using which resources and maintains reference counts to know when it's safe to dispose resources. Resources are created on-demand and disposed with a configurable delay to avoid churn.
Example Usage
// WebSocket connections
interface WebSocketConfig {
readonly url: WebSocketUrl;
}
type WebSocketUrl = string & Brand<"WebSocketUrl">;
type UserId = string & Brand<"UserId">;
const webSockets = createResources<
WebSocket,
WebSocketUrl,
WebSocketConfig,
User,
UserId
>({
createResource: (config) => new WebSocket(config.url),
getResourceKey: (config) => config.url,
getConsumerId: (user) => user.id,
disposalDelay: 1000,
});
// Add users to WebSocket connections
webSockets.addConsumer(user1, [
{ url: "ws://server1.com" as WebSocketUrl },
{ url: "ws://server2.com" as WebSocketUrl },
]);
webSockets.addConsumer(user2, [{ url: "ws://server1.com" as WebSocketUrl }]);
// Remove users - server1 stays alive (user2 still using it)
webSockets.removeConsumer(user1, [
{ url: "ws://server1.com" as WebSocketUrl },
{ url: "ws://server2.com" as WebSocketUrl },
]);
// server2 gets disposed after delay, server1 stays alive
Type Parameters
| Type Parameter |
|---|
TResource extends Disposable |
TResourceKey extends string |
TResourceConfig |
TConsumer |
TConsumerId extends string |
Parameters
| Parameter | Type |
|---|---|
config | ResourcesConfig<TResource, TResourceKey, TResourceConfig, TConsumer, TConsumerId> |
Returns
Resources<TResource, TResourceKey, TResourceConfig, TConsumer, TConsumerId>