wardens 0.6.0-rc.3 → 0.6.0-rc.4

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
9
9
  ### Added
10
10
 
11
11
  - New context API carries state down the tree without plumbing through arguments.
12
+ - New `ContextType<Handle>` utility type which gets the value type of a context.
12
13
 
13
14
  ### Changed
14
15
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wardens",
3
- "version": "0.6.0-rc.3",
3
+ "version": "0.6.0-rc.4",
4
4
  "description": "A framework for resource management",
5
5
  "type": "module",
6
6
  "main": "./dist/wardens.cjs",
@@ -1,4 +1,10 @@
1
- import { create, ResourceScope, ResourceHandle } from '../';
1
+ import {
2
+ create,
3
+ ResourceScope,
4
+ ResourceHandle,
5
+ createContext,
6
+ ContextType,
7
+ } from '../';
2
8
 
3
9
  describe('Utility types', () => {
4
10
  describe('ResourceHandle', () => {
@@ -29,4 +35,22 @@ describe('Utility types', () => {
29
35
  });
30
36
  });
31
37
  });
38
+
39
+ describe('ContextType', () => {
40
+ it('returns the type contained in context', async () => {
41
+ const Context = createContext(() => ({
42
+ hello: 'world',
43
+ }));
44
+
45
+ async function Test({ getContext }: ResourceScope) {
46
+ return { value: getContext(Context) };
47
+ }
48
+
49
+ const value = await create(Test);
50
+
51
+ expectTypeOf(value).toEqualTypeOf<ContextType<typeof Context>>({
52
+ hello: 'any string, really',
53
+ });
54
+ });
55
+ });
32
56
  });
package/src/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { default as bindContext } from './bind-context';
2
2
  export { createRoot as create, destroyRoot as destroy } from './root-lifecycle';
3
3
  export { createContext } from './inherited-context';
4
- export type { Resource, ResourceHandle } from './utility-types';
4
+ export type { Resource, ResourceHandle, ContextType } from './utility-types';
5
5
  export type { default as ResourceScope } from './resource-scope';
@@ -1,4 +1,5 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import type { ContextHandle } from './inherited-context';
2
3
  import type ResourceScope from './resource-scope';
3
4
 
4
5
  /**
@@ -29,3 +30,7 @@ export interface Resource<Value extends object> {
29
30
  export type ResourceHandle<
30
31
  Factory extends ParametrizedResourceFactory<object, Array<any>>,
31
32
  > = Awaited<ReturnType<Factory>>['value'];
33
+
34
+ /** The type returned when you call `getContext`. */
35
+ export type ContextType<Handle extends ContextHandle<unknown>> =
36
+ Handle extends ContextHandle<infer Value> ? Value : never;