File tree 6 files changed +108
-18
lines changed
6 files changed +108
-18
lines changed Original file line number Diff line number Diff line change
1
+ export { default as createDeepMemo } from "./src/createDeepMemo" ;
2
+ export { default as createDeepSignal } from "./src/createDeepSignal" ;
Original file line number Diff line number Diff line change 1
1
{
2
- "name" : " {{data.name}} " ,
2
+ "name" : " create-deep " ,
3
3
"version" : " 0.1.0" ,
4
- "description" : " {{data.description}} " ,
4
+ "description" : " Mimics SolidJS's `createSignal()` and `createMemo()` but with deep equality checks " ,
5
5
"license" : " MIT" ,
6
- "repository" : " astoilkov/{{data.name}} " ,
6
+ "repository" : " astoilkov/create-deep " ,
7
7
"funding" : " https://github.com/sponsors/astoilkov" ,
8
8
"author" : {
9
9
"name" : " Antonio Stoilkov" ,
10
10
"email" : " hello@astoilkov.com" ,
11
11
"url" : " https://astoilkov.com"
12
12
},
13
13
"keywords" : [
14
- " {{data.keywords}}"
14
+ " SolidJS" ,
15
+ " memo" ,
16
+ " signal" ,
17
+ " createMemo" ,
18
+ " createSignal" ,
19
+ " createDeepMemo" ,
20
+ " createDeepSignal" ,
21
+ " deep equality" ,
22
+ " reactivity"
15
23
],
16
24
"type" : " module" ,
17
25
"exports" : {
33
41
" src/*.js" ,
34
42
" src/*.d.ts"
35
43
],
44
+ "dependencies" : {
45
+ "dequal" : " ^2.0.3"
46
+ },
47
+ "peerDependencies" : {
48
+ "solid-js" : " >=1.5"
49
+ },
36
50
"devDependencies" : {
37
51
"@vitest/coverage-v8" : " ^0.33.0" ,
38
52
"jsdom" : " ^22.1.0" ,
39
53
"np" : " ^8.0.4" ,
40
54
"prettier" : " ^3.0.3" ,
55
+ "solid-js" : " ^1.8.6" ,
41
56
"typescript" : " ^5.2.2" ,
42
57
"vitest" : " ^0.34.6"
43
58
}
Original file line number Diff line number Diff line change 1
- # ` {{data.name}} `
1
+ # ` create-deep `
2
2
3
- > {{data.description}}
3
+ > Mimics SolidJS's ` createSignal() ` and ` createMemo() ` but with deep equality checks.
4
4
5
- [ ![ Gzipped Size] ( https://img.shields.io/bundlephobia/minzip/{{data.name}} )] ( https://bundlephobia.com/result?p={{data.name}} )
6
- [ ![ Build Status] ( https://img.shields.io/github/actions/workflow/status/astoilkov/{{data.name}} /main.yml?branch=main )] ( https://github.com/astoilkov/{{data.name}} /actions/workflows/main.yml )
5
+ [ ![ Gzipped Size] ( https://img.shields.io/bundlephobia/minzip/create-deep )] ( https://bundlephobia.com/result?p=create-deep )
6
+ [ ![ Build Status] ( https://img.shields.io/github/actions/workflow/status/astoilkov/create-deep /main.yml?branch=main )] ( https://github.com/astoilkov/create-deep /actions/workflows/main.yml )
7
7
8
8
## Install
9
9
10
10
``` bash
11
- npm install {{data.name}}
11
+ npm install create-deep
12
12
```
13
13
14
- ## Why
14
+ ## API
15
15
16
- ## Usage
16
+ [ ` dequal ` ] ( https://github.com/lukeed/dequal ) is used for the deep equality checks.
17
17
18
- ## API
18
+ #### ` createDeepSignal<T>(value?: T) `
19
+
20
+ ``` ts
21
+ function Component() {
22
+ const [value, setValue] = createDeepSignal ([1 , 2 , 3 ])
23
+ }
24
+ ```
25
+
26
+ #### ` createDeepMemo<T>(() => T) `
27
+
28
+ ``` ts
29
+ function Component() {
30
+ const value = createDeepMemo (() => {
31
+ return items ().filter (item => item .size > 0 )
32
+ })
33
+ }
34
+ ```
19
35
20
- ## Alternatives
21
36
22
- ## Related
Original file line number Diff line number Diff line change
1
+ import { dequal } from "dequal" ;
2
+ import {
3
+ Accessor ,
4
+ createMemo ,
5
+ EffectFunction ,
6
+ MemoOptions ,
7
+ NoInfer ,
8
+ } from "solid-js" ;
9
+
10
+ export default function createDeepMemo < Next extends Prev , Prev = Next > (
11
+ fn : EffectFunction < undefined | NoInfer < Prev > , Next > ,
12
+ ) : Accessor < Next > ;
13
+ export default function createDeepMemo <
14
+ Next extends Prev ,
15
+ Init = Next ,
16
+ Prev = Next ,
17
+ > (
18
+ fn : EffectFunction < Init | Prev , Next > ,
19
+ value : Init ,
20
+ options ?: MemoOptions < Next > ,
21
+ ) : Accessor < Next > ;
22
+ export default function createDeepMemo <
23
+ Next extends Prev ,
24
+ Init = Next ,
25
+ Prev = Next ,
26
+ > (
27
+ fn : EffectFunction < undefined | NoInfer < Prev > | Init | Prev , Next > ,
28
+ value ?: Init ,
29
+ options ?: MemoOptions < Next > ,
30
+ ) : Accessor < Next > {
31
+ return createMemo ( fn , value , {
32
+ equals : dequal ,
33
+ ...options ,
34
+ } ) ;
35
+ }
Original file line number Diff line number Diff line change
1
+ import { dequal } from "dequal" ;
2
+ import { createSignal , Signal , SignalOptions } from "solid-js" ;
3
+
4
+ export default function createDeepSignal < T > ( ) : Signal < T | undefined > ;
5
+ export default function createDeepSignal < T > (
6
+ value : T ,
7
+ options ?: SignalOptions < T > ,
8
+ ) : Signal < T > ;
9
+ export default function createDeepSignal < T > (
10
+ value ?: T ,
11
+ options ?: SignalOptions < T | undefined > ,
12
+ ) : Signal < T | undefined > {
13
+ return createSignal ( value , {
14
+ equals : dequal ,
15
+ ...options ,
16
+ } ) ;
17
+ }
Original file line number Diff line number Diff line change 1
- import { describe , expect , test } from "vitest" ;
1
+ import { describe , test } from "vitest" ;
2
+ import createDeepMemo from "./src/createDeepMemo" ;
3
+ import createDeepSignal from "./src/createDeepSignal" ;
2
4
3
- describe ( "{{data.name}}" , ( ) => {
4
- test ( "" , ( ) => {
5
- expect ( true ) . toBe ( true ) ;
5
+ // for some reason, Solid reactivity doesn't work in tests
6
+ describe ( "create-deep" , ( ) => {
7
+ test ( "createDeepSignal()" , ( ) => {
8
+ createDeepSignal ( ( ) => [ 1 , 2 , 3 ] ) ;
9
+ } ) ;
10
+
11
+ test ( "createDeepMemo()" , ( ) => {
12
+ createDeepMemo ( ( ) => [ 1 , 2 , 3 ] ) ;
6
13
} ) ;
7
14
} ) ;
You can’t perform that action at this time.
0 commit comments