@kirill.konshin/utils 0.0.14 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ctirc +2 -1
- package/.turbo/turbo-build.log +18 -13
- package/.turbo/turbo-test.log +78 -25
- package/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/demo/{cache-demo-clean.ts → worker-demo.ts} +1 -1
- package/dist/bootstrap/controls.d.ts +5 -2
- package/dist/bootstrap/controls.d.ts.map +1 -1
- package/dist/bootstrap/controls.js +1 -0
- package/dist/bootstrap/controls.js.map +1 -1
- package/dist/bootstrap/controls.stories.d.ts +9 -0
- package/dist/bootstrap/controls.stories.d.ts.map +1 -0
- package/dist/bootstrap/error.stories.d.ts +8 -0
- package/dist/bootstrap/error.stories.d.ts.map +1 -0
- package/dist/bootstrap/field.stories.d.ts +8 -0
- package/dist/bootstrap/field.stories.d.ts.map +1 -0
- package/dist/bootstrap/globalLoading.stories.d.ts +7 -0
- package/dist/bootstrap/globalLoading.stories.d.ts.map +1 -0
- package/dist/bootstrap/index.js +2 -1
- package/dist/bootstrap/loading.stories.d.ts +9 -0
- package/dist/bootstrap/loading.stories.d.ts.map +1 -0
- package/dist/bootstrap/screen.stories.d.ts +14 -0
- package/dist/bootstrap/screen.stories.d.ts.map +1 -0
- package/dist/bootstrap/toaster.stories.d.ts +8 -0
- package/dist/bootstrap/toaster.stories.d.ts.map +1 -0
- package/dist/bootstrap/useModal.stories.d.ts +9 -0
- package/dist/bootstrap/useModal.stories.d.ts.map +1 -0
- package/dist/core/cache.d.ts +7 -8
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +7 -4
- package/dist/core/cache.js.map +1 -1
- package/dist/core/cache.test.d.ts +2 -0
- package/dist/core/cache.test.d.ts.map +1 -0
- package/dist/core/files.d.ts +3 -0
- package/dist/core/files.d.ts.map +1 -0
- package/dist/core/files.js +27 -0
- package/dist/core/files.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +14 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/ls.d.ts +6 -0
- package/dist/core/ls.d.ts.map +1 -0
- package/dist/core/ls.js +12 -0
- package/dist/core/ls.js.map +1 -0
- package/dist/core/worker.d.ts +23 -9
- package/dist/core/worker.d.ts.map +1 -1
- package/dist/core/worker.js +93 -90
- package/dist/core/worker.js.map +1 -1
- package/dist/core/worker.test.d.ts +2 -0
- package/dist/core/worker.test.d.ts.map +1 -0
- package/dist/core/workerUtils.d.ts +3 -0
- package/dist/core/workerUtils.d.ts.map +1 -0
- package/dist/core/workerUtils.js +31 -0
- package/dist/core/workerUtils.js.map +1 -0
- package/dist/core/wrpc.d.ts +45 -0
- package/dist/core/wrpc.d.ts.map +1 -0
- package/dist/core/wrpc.fixture.d.ts +29 -0
- package/dist/core/wrpc.fixture.d.ts.map +1 -0
- package/dist/core/wrpc.js +242 -0
- package/dist/core/wrpc.js.map +1 -0
- package/dist/core/wrpc.test.d.ts +1 -0
- package/dist/core/wrpc.test.d.ts.map +1 -0
- package/dist/mui/formControlFieldset.stories.d.ts +7 -0
- package/dist/mui/formControlFieldset.stories.d.ts.map +1 -0
- package/dist/react/form/form.d.ts +7 -6
- package/dist/react/form/form.d.ts.map +1 -1
- package/dist/react/form/form.js +14 -20
- package/dist/react/form/form.js.map +1 -1
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +8 -2
- package/dist/react/index.js.map +1 -1
- package/dist/react/keyboard.d.ts +11 -0
- package/dist/react/keyboard.d.ts.map +1 -0
- package/dist/react/keyboard.js +38 -0
- package/dist/react/keyboard.js.map +1 -0
- package/package.json +5 -2
- package/src/bootstrap/controls.stories.tsx +2 -2
- package/src/bootstrap/controls.tsx +3 -3
- package/src/bootstrap/error.stories.tsx +3 -3
- package/src/bootstrap/field.stories.tsx +2 -2
- package/src/bootstrap/globalLoading.stories.tsx +2 -2
- package/src/bootstrap/loading.stories.tsx +2 -2
- package/src/bootstrap/screen.stories.tsx +2 -2
- package/src/bootstrap/toaster.stories.tsx +2 -2
- package/src/bootstrap/useModal.stories.tsx +3 -3
- package/src/core/README.md +91 -0
- package/src/core/cache.ts +12 -12
- package/src/core/files.ts +24 -0
- package/src/core/index.ts +4 -0
- package/src/core/ls.ts +11 -0
- package/src/core/worker.test.ts +197 -0
- package/src/core/worker.ts +106 -93
- package/src/core/workerUtils.ts +32 -0
- package/src/core/wrpc.fixture.ts +72 -0
- package/src/core/wrpc.test.ts +225 -0
- package/src/core/wrpc.ts +359 -0
- package/src/mui/formControlFieldset.stories.tsx +1 -1
- package/src/react/form/form.tsx +53 -33
- package/src/react/index.ts +1 -0
- package/src/react/keyboard.tsx +49 -0
- package/src/tailwind/README.md +8 -0
- package/tsconfig.json +2 -1
- package/vite.config.ts +10 -3
- package/vite.exports.ts +3 -3
- package/demo/cache-demo.ts +0 -343
package/.ctirc
CHANGED
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
[36mvite v6.0.11 [32mbuilding SSR bundle for production...[36m[39m
|
|
2
2
|
create succeeded: /home/runner/work/utils/utils/packages/utils/src/bootstrap
|
|
3
|
-
create succeeded: /home/runner/work/utils/utils/packages/utils/src/core
|
|
4
3
|
create succeeded: /home/runner/work/utils/utils/packages/utils/src/electron
|
|
4
|
+
create succeeded: /home/runner/work/utils/utils/packages/utils/src/core
|
|
5
5
|
create succeeded: /home/runner/work/utils/utils/packages/utils/src/electron-builder
|
|
6
6
|
create succeeded: /home/runner/work/utils/utils/packages/utils/src/mui
|
|
7
|
-
create succeeded: /home/runner/work/utils/utils/packages/utils/src/react-native
|
|
8
|
-
create succeeded: /home/runner/work/utils/utils/packages/utils/src/tailwind
|
|
9
7
|
create succeeded: /home/runner/work/utils/utils/packages/utils/src/next
|
|
8
|
+
create succeeded: /home/runner/work/utils/utils/packages/utils/src/tailwind
|
|
9
|
+
create succeeded: /home/runner/work/utils/utils/packages/utils/src/react-native
|
|
10
10
|
create succeeded: /home/runner/work/utils/utils/packages/utils/src/react
|
|
11
11
|
transforming...
|
|
12
|
-
[32m✓[39m
|
|
12
|
+
[32m✓[39m 55 modules transformed.
|
|
13
13
|
rendering chunks...
|
|
14
14
|
|
|
15
15
|
[vite:dts] Start generate declaration files...
|
|
@@ -29,23 +29,27 @@ rendering chunks...
|
|
|
29
29
|
[2mdist/[22m[36mbootstrap/globalLoading.js [39m[1m[2m0.43 kB[22m[1m[22m[2m │ map: 0.82 kB[22m
|
|
30
30
|
[2mdist/[22m[36mnext/noSSR.js [39m[1m[2m0.45 kB[22m[1m[22m[2m │ map: 0.89 kB[22m
|
|
31
31
|
[2mdist/[22m[36mreact-native/useAppState.js [39m[1m[2m0.47 kB[22m[1m[22m[2m │ map: 0.84 kB[22m
|
|
32
|
-
[2mdist/[22m[36mreact/index.js [39m[1m[2m0.48 kB[22m[1m[22m[2m │ map: 0.09 kB[22m
|
|
33
32
|
[2mdist/[22m[36mmui/genericControl.js [39m[1m[2m0.50 kB[22m[1m[22m[2m │ map: 1.02 kB[22m
|
|
33
|
+
[2mdist/[22m[36mcore/ls.js [39m[1m[2m0.50 kB[22m[1m[22m[2m │ map: 0.90 kB[22m
|
|
34
34
|
[2mdist/[22m[36mbootstrap/loading.js [39m[1m[2m0.54 kB[22m[1m[22m[2m │ map: 1.01 kB[22m
|
|
35
|
-
[2mdist/[22m[36mcore/index.js [39m[1m[2m0.56 kB[22m[1m[22m[2m │ map: 0.09 kB[22m
|
|
36
35
|
[2mdist/[22m[36mreact/useFetch.js [39m[1m[2m0.57 kB[22m[1m[22m[2m │ map: 1.70 kB[22m
|
|
37
36
|
[2mdist/[22m[36mmui/formControlFieldset.js [39m[1m[2m0.64 kB[22m[1m[22m[2m │ map: 1.23 kB[22m
|
|
37
|
+
[2mdist/[22m[36mreact/index.js [39m[1m[2m0.65 kB[22m[1m[22m[2m │ map: 0.10 kB[22m
|
|
38
38
|
[2mdist/[22m[36mcore/mutex.js [39m[1m[2m0.76 kB[22m[1m[22m[2m │ map: 1.19 kB[22m
|
|
39
39
|
[2mdist/[22m[36mnext/appLink.js [39m[1m[2m0.77 kB[22m[1m[22m[2m │ map: 1.58 kB[22m
|
|
40
|
+
[2mdist/[22m[36mcore/files.js [39m[1m[2m0.79 kB[22m[1m[22m[2m │ map: 1.57 kB[22m
|
|
40
41
|
[2mdist/[22m[36mbootstrap/field.js [39m[1m[2m0.79 kB[22m[1m[22m[2m │ map: 1.56 kB[22m
|
|
41
42
|
[2mdist/[22m[36mbootstrap/error.js [39m[1m[2m0.79 kB[22m[1m[22m[2m │ map: 1.66 kB[22m
|
|
42
43
|
[2mdist/[22m[36mtailwind/responsiveHelper.js [39m[1m[2m0.84 kB[22m[1m[22m[2m │ map: 1.14 kB[22m
|
|
43
44
|
[2mdist/[22m[36mreact-native/share.js [39m[1m[2m0.85 kB[22m[1m[22m[2m │ map: 1.75 kB[22m
|
|
44
45
|
[2mdist/[22m[36mreact/apiCall.js [39m[1m[2m0.85 kB[22m[1m[22m[2m │ map: 1.47 kB[22m
|
|
45
46
|
[2mdist/[22m[36mbootstrap/useWrappedForm.js [39m[1m[2m0.90 kB[22m[1m[22m[2m │ map: 2.22 kB[22m
|
|
46
|
-
[2mdist/[22m[
|
|
47
|
+
[2mdist/[22m[36mcore/index.js [39m[1m[2m0.90 kB[22m[1m[22m[2m │ map: 0.10 kB[22m
|
|
48
|
+
[2mdist/[22m[36mbootstrap/index.js [39m[1m[2m0.97 kB[22m[1m[22m[2m │ map: 0.10 kB[22m
|
|
49
|
+
[2mdist/[22m[36mcore/workerUtils.js [39m[1m[2m0.97 kB[22m[1m[22m[2m │ map: 1.83 kB[22m
|
|
47
50
|
[2mdist/[22m[36melectron-builder/images.js [39m[1m[2m1.02 kB[22m[1m[22m[2m │ map: 1.95 kB[22m
|
|
48
51
|
[2mdist/[22m[36mreact-native/update.js [39m[1m[2m1.03 kB[22m[1m[22m[2m │ map: 1.97 kB[22m
|
|
52
|
+
[2mdist/[22m[36mreact/keyboard.js [39m[1m[2m1.19 kB[22m[1m[22m[2m │ map: 2.31 kB[22m
|
|
49
53
|
[2mdist/[22m[36mreact/useFetcher.js [39m[1m[2m1.20 kB[22m[1m[22m[2m │ map: 2.47 kB[22m
|
|
50
54
|
[2mdist/[22m[36mbootstrap/toaster.js [39m[1m[2m1.25 kB[22m[1m[22m[2m │ map: 2.08 kB[22m
|
|
51
55
|
[2mdist/[22m[36mcore/measure.js [39m[1m[2m1.43 kB[22m[1m[22m[2m │ map: 2.88 kB[22m
|
|
@@ -54,14 +58,15 @@ rendering chunks...
|
|
|
54
58
|
[2mdist/[22m[36mreact/form/client.js [39m[1m[2m1.58 kB[22m[1m[22m[2m │ map: 3.36 kB[22m
|
|
55
59
|
[2mdist/[22m[36mbootstrap/responsiveHelper.js [39m[1m[2m1.78 kB[22m[1m[22m[2m │ map: 2.87 kB[22m
|
|
56
60
|
[2mdist/[22m[36mbootstrap/useModal.js [39m[1m[2m2.09 kB[22m[1m[22m[2m │ map: 4.75 kB[22m
|
|
57
|
-
[2mdist/[22m[36mreact/form/form.js [39m[1m[2m2.
|
|
58
|
-
[2mdist/[22m[36mbootstrap/controls.js [39m[1m[2m2.
|
|
59
|
-
[2mdist/[22m[36mcore/cache.js [39m[1m[2m3.
|
|
61
|
+
[2mdist/[22m[36mreact/form/form.js [39m[1m[2m2.34 kB[22m[1m[22m[2m │ map: 6.18 kB[22m
|
|
62
|
+
[2mdist/[22m[36mbootstrap/controls.js [39m[1m[2m2.75 kB[22m[1m[22m[2m │ map: 5.83 kB[22m
|
|
63
|
+
[2mdist/[22m[36mcore/cache.js [39m[1m[2m3.08 kB[22m[1m[22m[2m │ map: 9.97 kB[22m
|
|
60
64
|
[2mdist/[22m[36melectron-builder/builder.js [39m[1m[2m3.09 kB[22m[1m[22m[2m │ map: 6.76 kB[22m
|
|
61
65
|
[2mdist/[22m[36mbootstrap/screen.js [39m[1m[2m3.37 kB[22m[1m[22m[2m │ map: 7.04 kB[22m
|
|
62
66
|
[2mdist/[22m[36melectron/createWindow.js [39m[1m[2m5.39 kB[22m[1m[22m[2m │ map: 10.88 kB[22m
|
|
63
|
-
[2mdist/[22m[36mcore/worker.js [39m[1m[2m7.
|
|
64
|
-
[
|
|
67
|
+
[2mdist/[22m[36mcore/worker.js [39m[1m[2m7.95 kB[22m[1m[22m[2m │ map: 16.41 kB[22m
|
|
68
|
+
[2mdist/[22m[36mcore/wrpc.js [39m[1m[2m8.83 kB[22m[1m[22m[2m │ map: 20.60 kB[22m
|
|
69
|
+
[vite:dts] Declaration files built in 6324ms.
|
|
65
70
|
|
|
66
|
-
[32m✓ built in
|
|
71
|
+
[32m✓ built in 6.68s[39m
|
|
67
72
|
Updated package.json with exports
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,46 +1,93 @@
|
|
|
1
1
|
[?25lcreate succeeded: /home/runner/work/utils/utils/packages/utils/src/bootstrap
|
|
2
2
|
create succeeded: /home/runner/work/utils/utils/packages/utils/src/electron
|
|
3
|
-
create succeeded: /home/runner/work/utils/utils/packages/utils/src/
|
|
3
|
+
create succeeded: /home/runner/work/utils/utils/packages/utils/src/mui
|
|
4
4
|
create succeeded: /home/runner/work/utils/utils/packages/utils/src/electron-builder
|
|
5
|
+
create succeeded: /home/runner/work/utils/utils/packages/utils/src/core
|
|
5
6
|
create succeeded: /home/runner/work/utils/utils/packages/utils/src/next
|
|
6
|
-
create succeeded: /home/runner/work/utils/utils/packages/utils/src/react-native
|
|
7
|
-
create succeeded: /home/runner/work/utils/utils/packages/utils/src/mui
|
|
8
7
|
create succeeded: /home/runner/work/utils/utils/packages/utils/src/tailwind
|
|
8
|
+
create succeeded: /home/runner/work/utils/utils/packages/utils/src/react-native
|
|
9
9
|
create succeeded: /home/runner/work/utils/utils/packages/utils/src/react
|
|
10
10
|
|
|
11
11
|
[1m[7m[36m RUN [39m[27m[22m [36mv3.0.4 [39m[90m/home/runner/work/utils/utils/packages/utils[39m
|
|
12
12
|
[2mCoverage enabled with [22m[33mv8[39m
|
|
13
13
|
|
|
14
|
-
[90mstderr[2m | src/core/cache.test.ts[2m > [22m[2mTransformerMap[2m > [22m[2msimple
|
|
15
|
-
[22m[39mCREATE cache test
|
|
16
|
-
|
|
17
|
-
[90mstderr[2m | src/core/cache.test.ts[2m > [22m[2mTransformerMap[2m > [22m[2mkey transform
|
|
18
|
-
[22m[39mCREATE cache test
|
|
19
|
-
|
|
20
14
|
[90mstdout[2m | src/core/cache.test.ts[2m > [22m[2mTransformerMap[2m > [22m[2mkey transform
|
|
21
15
|
[22m[39mCLEAR cache test
|
|
22
16
|
|
|
23
|
-
|
|
17
|
+
[90mstderr[2m | src/core/wrpc.test.ts
|
|
18
|
+
[22m[39mUsing an object as a third argument is deprecated. Vitest 4 will throw an error if the third argument is not a timeout number. Please use the second argument for options. See more at https://vitest.dev/guide/migration
|
|
19
|
+
|
|
20
|
+
[32m✓[39m src/core/cache.test.ts [2m([22m[2m4 tests[22m[2m)[22m[90m 14[2mms[22m[39m
|
|
21
|
+
[32m✓[39m src/core/worker.test.ts [2m([22m[2m8 tests[22m[2m)[22m[90m 16[2mms[22m[39m
|
|
22
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
23
|
+
[22m[39mDATA [33m1[39m
|
|
24
|
+
|
|
25
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
26
|
+
[22m[39mDATA [33m2[39m
|
|
27
|
+
|
|
28
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
29
|
+
[22m[39mDATA [33m3[39m
|
|
30
|
+
|
|
31
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
32
|
+
[22m[39mDATA { value: [33m1[39m, done: [33mfalse[39m }
|
|
33
|
+
|
|
34
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
35
|
+
[22m[39mDATA { value: [33m2[39m, done: [33mfalse[39m }
|
|
36
|
+
|
|
37
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
38
|
+
[22m[39mDATA { value: [33m3[39m, done: [33mfalse[39m }
|
|
24
39
|
|
|
25
|
-
[2m
|
|
26
|
-
[
|
|
27
|
-
|
|
28
|
-
[2m
|
|
40
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
41
|
+
[22m[39mDATA { value: [90mundefined[39m, done: [33mtrue[39m }
|
|
42
|
+
|
|
43
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of separate return & yield
|
|
44
|
+
[22m[39mDATA { progress: [33m0[39m }
|
|
45
|
+
|
|
46
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of separate return & yield
|
|
47
|
+
[22m[39mDATA { progress: [33m0.5[39m }
|
|
48
|
+
|
|
49
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of separate return & yield
|
|
50
|
+
[22m[39mDATA { progress: [33m1[39m, aborted: [33mfalse[39m }
|
|
51
|
+
|
|
52
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mdo ... while
|
|
53
|
+
[22m[39mDATA { value: { progress: [33m0[39m }, done: [33mfalse[39m }
|
|
54
|
+
|
|
55
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mdo ... while
|
|
56
|
+
[22m[39mDATA { value: { progress: [33m0.5[39m }, done: [33mfalse[39m }
|
|
57
|
+
|
|
58
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mdo ... while
|
|
59
|
+
[22m[39mDATA { value: { progress: [33m1[39m, aborted: [33mfalse[39m }, done: [33mfalse[39m }
|
|
60
|
+
|
|
61
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mdo ... while
|
|
62
|
+
[22m[39mDATA { value: [32m'foo'[39m, done: [33mtrue[39m }
|
|
63
|
+
|
|
64
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mbreak
|
|
65
|
+
[22m[39mDATA { progress: [33m0[39m }
|
|
66
|
+
|
|
67
|
+
[90mstdout[2m | src/core/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mabort
|
|
68
|
+
[22m[39mDATA { progress: [33m0[39m }
|
|
69
|
+
|
|
70
|
+
[32m✓[39m src/core/wrpc.test.ts [2m([22m[2m13 tests[22m[2m | [22m[33m1 skipped[39m[2m)[22m[33m 729[2mms[22m[39m
|
|
71
|
+
[33m[2m✓[22m[39m WRPC[2m > [22mstop [33m503[2mms[22m[39m
|
|
72
|
+
|
|
73
|
+
[2m Test Files [22m [1m[32m3 passed[39m[22m[90m (3)[39m
|
|
74
|
+
[2m Tests [22m [1m[32m24 passed[39m[22m[2m | [22m[33m1 skipped[39m[90m (25)[39m
|
|
75
|
+
[2m Start at [22m 20:57:07
|
|
76
|
+
[2m Duration [22m 1.84s[2m (transform 251ms, setup 0ms, collect 344ms, tests 759ms, environment 1ms, prepare 370ms)[22m
|
|
29
77
|
|
|
30
78
|
[34m % [39m[2mCoverage report from [22m[33mv8[39m
|
|
31
79
|
-------------------|---------|----------|---------|---------|-------------------
|
|
32
80
|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
33
81
|
-------------------|---------|----------|---------|---------|-------------------
|
|
34
|
-
All files |
|
|
82
|
+
All files | 22.23 | 81.64 | 66.44 | 22.23 |
|
|
35
83
|
utils | 0 | 0 | 0 | 0 |
|
|
36
84
|
vite.exports.ts | 0 | 0 | 0 | 0 | 1-121
|
|
37
85
|
utils/builders | 0 | 0 | 0 | 0 |
|
|
38
86
|
bun.build.js | 0 | 0 | 0 | 0 | 1-23
|
|
39
87
|
perf.mjs | 0 | 0 | 0 | 0 | 1-63
|
|
40
88
|
rslib.config.ts | 0 | 0 | 0 | 0 | 1-26
|
|
41
|
-
utils/demo | 0 |
|
|
42
|
-
|
|
43
|
-
cache-demo.ts | 0 | 100 | 100 | 0 | 3-343
|
|
89
|
+
utils/demo | 0 | 0 | 0 | 0 |
|
|
90
|
+
worker-demo.ts | 0 | 0 | 0 | 0 | 1-73
|
|
44
91
|
utils/src-todo | 0 | 0 | 0 | 0 |
|
|
45
92
|
auth0.tsx | 0 | 0 | 0 | 0 |
|
|
46
93
|
.../src/bootstrap | 0 | 71.42 | 71.42 | 0 |
|
|
@@ -65,13 +112,18 @@ All files | 3.28 | 63.82 | 53.08 | 3.28 |
|
|
|
65
112
|
...l.stories.tsx | 0 | 100 | 100 | 0 | 3-51
|
|
66
113
|
useModal.tsx | 0 | 0 | 0 | 0 | 1-88
|
|
67
114
|
...rappedForm.ts | 0 | 0 | 0 | 0 | 1-40
|
|
68
|
-
utils/src/core |
|
|
69
|
-
cache.ts | 81.25 | 89.65 | 56.25 | 81.25 | ...
|
|
115
|
+
utils/src/core | 78.75 | 88.28 | 75 | 78.75 |
|
|
116
|
+
cache.ts | 81.25 | 89.65 | 56.25 | 81.25 | ...94-195,218-219
|
|
70
117
|
errors.ts | 0 | 100 | 100 | 0 | 2-14
|
|
71
|
-
|
|
118
|
+
files.ts | 0 | 0 | 0 | 0 | 1-24
|
|
119
|
+
index.ts | 0 | 0 | 0 | 0 | 1-9
|
|
120
|
+
ls.ts | 0 | 0 | 0 | 0 | 1-11
|
|
72
121
|
measure.ts | 0 | 0 | 0 | 0 | 1-61
|
|
73
122
|
mutex.ts | 0 | 100 | 100 | 0 | 3-22
|
|
74
|
-
worker.ts |
|
|
123
|
+
worker.ts | 100 | 98.71 | 100 | 100 | 57
|
|
124
|
+
workerUtils.ts | 100 | 83.33 | 100 | 100 | 26-27
|
|
125
|
+
wrpc.fixture.ts | 78.84 | 77.77 | 66.66 | 78.84 | 28,62-63,65-72
|
|
126
|
+
wrpc.ts | 97.11 | 85.24 | 69.69 | 97.11 | ...79-180,225-226
|
|
75
127
|
...s/src/electron | 0 | 33.33 | 33.33 | 0 |
|
|
76
128
|
createWindow.ts | 0 | 0 | 0 | 0 | 1-234
|
|
77
129
|
index.ts | 0 | 0 | 0 | 0 | 1-2
|
|
@@ -94,9 +146,10 @@ All files | 3.28 | 63.82 | 53.08 | 3.28 |
|
|
|
94
146
|
noSSR.tsx | 0 | 100 | 100 | 0 | 3-17
|
|
95
147
|
redirect.tsx | 0 | 100 | 100 | 0 | 3-13
|
|
96
148
|
useIsInner.ts | 0 | 100 | 100 | 0 | 3-13
|
|
97
|
-
utils/src/react | 0 |
|
|
149
|
+
utils/src/react | 0 | 40 | 40 | 0 |
|
|
98
150
|
apiCall.ts | 0 | 0 | 0 | 0 | 1-25
|
|
99
|
-
index.ts | 0 | 0 | 0 | 0 | 1-
|
|
151
|
+
index.ts | 0 | 0 | 0 | 0 | 1-5
|
|
152
|
+
keyboard.tsx | 0 | 100 | 100 | 0 | 3-49
|
|
100
153
|
useFetch.ts | 0 | 100 | 100 | 0 | 3-29
|
|
101
154
|
useFetcher.ts | 0 | 0 | 0 | 0 | 1-49
|
|
102
155
|
...c/react-native | 0 | 0 | 0 | 0 |
|
|
@@ -106,7 +159,7 @@ All files | 3.28 | 63.82 | 53.08 | 3.28 |
|
|
|
106
159
|
useAppState.ts | 0 | 0 | 0 | 0 | 1-18
|
|
107
160
|
...src/react/form | 0 | 33.33 | 33.33 | 0 |
|
|
108
161
|
client.tsx | 0 | 100 | 100 | 0 | 3-62
|
|
109
|
-
form.tsx | 0 | 0 | 0 | 0 | 1-
|
|
162
|
+
form.tsx | 0 | 0 | 0 | 0 | 1-129
|
|
110
163
|
index.ts | 0 | 0 | 0 | 0 | 1-2
|
|
111
164
|
...s/src/tailwind | 0 | 66.66 | 66.66 | 0 |
|
|
112
165
|
fullpage.tsx | 0 | 100 | 100 | 0 | 3-10
|
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -36,7 +36,7 @@ https://jakeginnivan.medium.com/options-for-publishing-typescript-libraries-9c37
|
|
|
36
36
|
- ⚠️ Seem to reemit all files all the time
|
|
37
37
|
- `vite`
|
|
38
38
|
- ✅ Fast
|
|
39
|
-
- ✅ Comes with `vitest`
|
|
39
|
+
- ✅ Comes with `vitest` (reasoning https://youtu.be/w9xQRJXKrV0)
|
|
40
40
|
- ✅ Comes with Storybook plugin
|
|
41
41
|
- ⚠️ Based on Rollup, inherits its quirks
|
|
42
42
|
- ⚠️ Awkward configuration, half Vite half Rollup
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { default as React, HTMLInputTypeAttribute } from 'react';
|
|
2
|
-
interface ControlProps {
|
|
2
|
+
export interface ControlProps {
|
|
3
3
|
value?: any;
|
|
4
4
|
setValue?: (v: any) => void;
|
|
5
5
|
defaultValue?: any;
|
|
@@ -22,6 +22,10 @@ interface ControlProps {
|
|
|
22
22
|
} & any;
|
|
23
23
|
hideValue?: boolean;
|
|
24
24
|
}
|
|
25
|
+
export type LabelProps = Pick<ControlProps, 'name' | 'value' | 'defaultValue'> & {
|
|
26
|
+
reset: () => void;
|
|
27
|
+
};
|
|
28
|
+
export declare const Label: React.NamedExoticComponent<LabelProps>;
|
|
25
29
|
export declare const Control: React.NamedExoticComponent<ControlProps>;
|
|
26
30
|
export interface RangeProps extends ControlProps {
|
|
27
31
|
min: number;
|
|
@@ -31,5 +35,4 @@ export interface RangeProps extends ControlProps {
|
|
|
31
35
|
export declare const Range: React.NamedExoticComponent<RangeProps>;
|
|
32
36
|
export declare const Checkbox: React.NamedExoticComponent<ControlProps>;
|
|
33
37
|
export declare const Select: React.NamedExoticComponent<ControlProps>;
|
|
34
|
-
export {};
|
|
35
38
|
//# sourceMappingURL=controls.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../src/bootstrap/controls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,sBAAsB,EAAQ,MAAM,OAAO,CAAC;AAM5D,
|
|
1
|
+
{"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../src/bootstrap/controls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,sBAAsB,EAAQ,MAAM,OAAO,CAAC;AAM5D,MAAM,WAAW,YAAY;IACzB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,KAAK,IAAI,CAAC;IACjD,cAAc,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE;QACT,IAAI,EAAE,sBAAsB,CAAC;QAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;QACjC,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,GAAG,CAAC;IACR,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC;AAEvG,eAAO,MAAM,KAAK,wCAahB,CAAC;AAEH,eAAO,MAAM,OAAO,0CAsClB,CAAC;AAEH,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,KAAK,wCAchB,CAAC;AAEH,eAAO,MAAM,QAAQ,0CAOnB,CAAC;AAEH,eAAO,MAAM,MAAM,0CAMjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controls.js","sources":["../../src/bootstrap/controls.tsx"],"sourcesContent":["import React, { HTMLInputTypeAttribute, memo } from 'react';\n\nconst lcFirst = (str) => str[0].toLowerCase() + str.substring(1, str.length);\n\nconst toProperty = (str) => lcFirst(str).split(' ').join('');\n\
|
|
1
|
+
{"version":3,"file":"controls.js","sources":["../../src/bootstrap/controls.tsx"],"sourcesContent":["import React, { HTMLInputTypeAttribute, memo } from 'react';\n\nconst lcFirst = (str) => str[0].toLowerCase() + str.substring(1, str.length);\n\nconst toProperty = (str) => lcFirst(str).split(' ').join('');\n\nexport interface ControlProps {\n value?: any;\n setValue?: (v: any) => void;\n defaultValue?: any;\n options?: { [key: string]: any };\n setOptions?: (v: { [key: string]: any }) => void;\n defaultOptions?: { [key: string]: any };\n name: string;\n children?: React.ReactNode;\n inputProps?: {\n type: HTMLInputTypeAttribute;\n property?: string;\n valueExtractor?: (e: any) => any;\n className?: string;\n } & any;\n hideValue?: boolean;\n}\n\nexport type LabelProps = Pick<ControlProps, 'name' | 'value' | 'defaultValue'> & { reset: () => void };\n\nexport const Label = memo<LabelProps>(function Label({ name, reset, value, defaultValue }) {\n return (\n <label className=\"flex-grow-1 mb-0 d-flex align-items-center justify-content-start gap-2\">\n {name}\n {value !== defaultValue && (\n <>\n <a href=\"javascript: void(0)\" onClick={reset}>\n <small>reset</small>\n </a>\n </>\n )}\n </label>\n );\n});\n\nexport const Control = memo<ControlProps>(function Control({\n value = null,\n setValue,\n defaultValue = null,\n options = {},\n setOptions,\n defaultOptions = {},\n name,\n inputProps: { Tag = 'input', property = 'value', valueExtractor = (e) => e.target.value, ...inputProps } = {},\n hideValue = false,\n children,\n}) {\n const prop = toProperty(name);\n\n defaultValue = defaultValue || defaultOptions[prop];\n value = value || options?.[prop];\n setValue = setValue || ((v) => setOptions?.({ [prop]: v }));\n\n const reset = () => setValue(defaultValue);\n\n return (\n <div className=\"d-flex align-items-center gap-2\">\n <Label name={name} reset={reset} value={value} defaultValue={defaultValue} />\n <Tag\n {...inputProps}\n {...{ [property]: value || '' }} // null is needed to make it always controlled\n className={`${value === defaultValue ? 'opacity-75' : ''} ${inputProps.className}`}\n onChange={(e) => setValue(valueExtractor(e))}\n >\n {children}\n </Tag>\n {!hideValue && (\n <span onDoubleClick={reset} className=\"text-start\" style={{ width: '20px' }}>\n {value}\n </span>\n )}\n </div>\n );\n});\n\nexport interface RangeProps extends ControlProps {\n min: number;\n max: number;\n step?: number;\n}\n\nexport const Range = memo<RangeProps>(function Range({ min, max, step = 0.1, ...props }) {\n return (\n <Control\n inputProps={{\n type: 'range',\n min,\n max,\n step,\n className: 'form-control-range',\n valueExtractor: (e) => parseFloat(e.target.value),\n }}\n {...props}\n />\n );\n});\n\nexport const Checkbox = memo<ControlProps>(function Checkbox(props) {\n return (\n <Control\n inputProps={{ type: 'checkbox', property: 'checked', valueExtractor: (e) => e.target.checked }}\n {...props}\n />\n );\n});\n\nexport const Select = memo<ControlProps>(function Select({ children, ...props }) {\n return (\n <Control inputProps={{ Tag: 'select', className: 'form-select' }} {...props} hideValue={true}>\n {children}\n </Control>\n );\n});\n"],"names":["Label","Control","Range","Checkbox","Select"],"mappings":";;AAEA,MAAM,UAAU,CAAC,QAAQ,IAAI,CAAC,EAAE,gBAAgB,IAAI,UAAU,GAAG,IAAI,MAAM;AAE3E,MAAM,aAAa,CAAC,QAAQ,QAAQ,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE;AAsB9C,MAAA,QAAQ,KAAiB,SAASA,OAAM,EAAE,MAAM,OAAO,OAAO,gBAAgB;AAEnF,SAAA,qBAAC,SAAM,EAAA,WAAU,0EACZ,UAAA;AAAA,IAAA;AAAA,IACA,UAAU,gBAEH,oBAAA,UAAA,EAAA,UAAA,oBAAC,KAAE,EAAA,MAAK,uBAAsB,SAAS,OACnC,UAAA,oBAAC,SAAM,EAAA,UAAA,SAAK,GAChB,EACJ,CAAA;AAAA,EAAA,GAER;AAER,CAAC;AAEY,MAAA,UAAU,KAAmB,SAASC,SAAQ;AAAA,EACvD,QAAQ;AAAA,EACR;AAAA,EACA,eAAe;AAAA,EACf,UAAU,CAAC;AAAA,EACX;AAAA,EACA,iBAAiB,CAAC;AAAA,EAClB;AAAA,EACA,YAAY,EAAE,MAAM,SAAS,WAAW,SAAS,iBAAiB,CAAC,MAAM,EAAE,OAAO,OAAO,GAAG,eAAe,CAAC;AAAA,EAC5G,YAAY;AAAA,EACZ;AACJ,GAAG;AACO,QAAA,OAAO,WAAW,IAAI;AAEb,iBAAA,gBAAgB,eAAe,IAAI;AAC1C,UAAA,UAAS,mCAAU;AAChB,aAAA,aAAa,CAAC,MAAM,yCAAa,EAAE,CAAC,IAAI,GAAG,EAAA;AAEhD,QAAA,QAAQ,MAAM,SAAS,YAAY;AAGrC,SAAA,qBAAC,OAAI,EAAA,WAAU,mCACX,UAAA;AAAA,IAAA,oBAAC,OAAM,EAAA,MAAY,OAAc,OAAc,cAA4B;AAAA,IAC3E;AAAA,MAAC;AAAA,MAAA;AAAA,QACI,GAAG;AAAA,QACH,GAAG,EAAE,CAAC,QAAQ,GAAG,SAAS,GAAG;AAAA,QAC9B,WAAW,GAAG,UAAU,eAAe,eAAe,EAAE,IAAI,WAAW,SAAS;AAAA,QAChF,UAAU,CAAC,MAAM,SAAS,eAAe,CAAC,CAAC;AAAA,QAE1C;AAAA,MAAA;AAAA,IACL;AAAA,IACC,CAAC,aACG,oBAAA,QAAA,EAAK,eAAe,OAAO,WAAU,cAAa,OAAO,EAAE,OAAO,OAAA,GAC9D,UACL,MAAA,CAAA;AAAA,EAAA,GAER;AAER,CAAC;AAQY,MAAA,QAAQ,KAAiB,SAASC,OAAM,EAAE,KAAK,KAAK,OAAO,KAAK,GAAG,SAAS;AAEjF,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,YAAY;AAAA,QACR,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,gBAAgB,CAAC,MAAM,WAAW,EAAE,OAAO,KAAK;AAAA,MACpD;AAAA,MACC,GAAG;AAAA,IAAA;AAAA,EACR;AAER,CAAC;AAEM,MAAM,WAAW,KAAmB,SAASC,UAAS,OAAO;AAE5D,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,YAAY,EAAE,MAAM,YAAY,UAAU,WAAW,gBAAgB,CAAC,MAAM,EAAE,OAAO,QAAQ;AAAA,MAC5F,GAAG;AAAA,IAAA;AAAA,EACR;AAER,CAAC;AAEY,MAAA,SAAS,KAAmB,SAASC,QAAO,EAAE,UAAU,GAAG,SAAS;AAC7E,SACK,oBAAA,SAAA,EAAQ,YAAY,EAAE,KAAK,UAAU,WAAW,cAAA,GAAkB,GAAG,OAAO,WAAW,MACnF,SACL,CAAA;AAER,CAAC;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Control } from './controls';
|
|
3
|
+
declare const meta: Meta<typeof Control>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const RangeControl: Story;
|
|
7
|
+
export declare const CheckboxControl: Story;
|
|
8
|
+
export declare const SelectControl: Story;
|
|
9
|
+
//# sourceMappingURL=controls.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls.stories.d.ts","sourceRoot":"","sources":["../../src/bootstrap/controls.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAU,OAAO,EAAmB,MAAM,YAAY,CAAC;AAK9D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAyB9B,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAI7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { ErrorAlert } from './error';
|
|
3
|
+
declare const meta: Meta<typeof ErrorAlert>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const String: Story;
|
|
7
|
+
export declare const ErrorObject: Story;
|
|
8
|
+
//# sourceMappingURL=error.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.stories.d.ts","sourceRoot":"","sources":["../../src/bootstrap/error.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAYjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,MAAM,EAAE,KAIpB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { FieldGroup } from './field';
|
|
3
|
+
declare const meta: Meta<typeof FieldGroup>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Vertical: Story;
|
|
7
|
+
export declare const Horizontal: Story;
|
|
8
|
+
//# sourceMappingURL=field.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field.stories.d.ts","sourceRoot":"","sources":["../../src/bootstrap/field.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAajC,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { GlobalLoading } from './globalLoading';
|
|
3
|
+
declare const meta: Meta<typeof GlobalLoading>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
//# sourceMappingURL=globalLoading.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalLoading.stories.d.ts","sourceRoot":"","sources":["../../src/bootstrap/globalLoading.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,aAAa,CAUpC,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC"}
|
package/dist/bootstrap/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AdaptiveContainer } from "./adaptiveContainer.js";
|
|
2
|
-
import { Checkbox, Control, Range, Select } from "./controls.js";
|
|
2
|
+
import { Checkbox, Control, Label, Range, Select } from "./controls.js";
|
|
3
3
|
import { ErrorAlert } from "./error.js";
|
|
4
4
|
import { FieldGroup } from "./field.js";
|
|
5
5
|
import { Footer, FooterNavItem } from "./footer.js";
|
|
@@ -19,6 +19,7 @@ export {
|
|
|
19
19
|
Footer,
|
|
20
20
|
FooterNavItem,
|
|
21
21
|
GlobalLoading,
|
|
22
|
+
Label,
|
|
22
23
|
Loading,
|
|
23
24
|
Range,
|
|
24
25
|
ResponsiveHelperBS,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Loading } from './loading';
|
|
3
|
+
declare const meta: Meta<typeof Loading>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Children: Story;
|
|
8
|
+
export declare const Size: Story;
|
|
9
|
+
//# sourceMappingURL=loading.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading.stories.d.ts","sourceRoot":"","sources":["../../src/bootstrap/loading.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAY9B,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,QAAQ,EAAE,KAItB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAIlB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Screen } from './screen';
|
|
3
|
+
declare const meta: Meta<typeof Screen>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const LongContent: Story;
|
|
8
|
+
export declare const Loader: Story;
|
|
9
|
+
export declare const Centered: Story;
|
|
10
|
+
export declare const ForwardCb: Story;
|
|
11
|
+
export declare const ForwardIcon: Story;
|
|
12
|
+
export declare const ForwardBtn: Story;
|
|
13
|
+
export declare const HeaderForm: Story;
|
|
14
|
+
//# sourceMappingURL=screen.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen.stories.d.ts","sourceRoot":"","sources":["../../src/bootstrap/screen.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AA2ClC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CA8B7B,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAcpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAIvB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAgBxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAaxB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Toaster } from './toaster';
|
|
3
|
+
declare const meta: Meta<typeof Toaster>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Object: Story;
|
|
8
|
+
//# sourceMappingURL=toaster.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toaster.stories.d.ts","sourceRoot":"","sources":["../../src/bootstrap/toaster.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAS9B,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAIpB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { UseModalProps } from './useModal';
|
|
4
|
+
declare const meta: Meta<FC<UseModalProps>>;
|
|
5
|
+
export default meta;
|
|
6
|
+
type Story = StoryObj<typeof meta>;
|
|
7
|
+
export declare const Default: Story;
|
|
8
|
+
export declare const Offcanvas: Story;
|
|
9
|
+
//# sourceMappingURL=useModal.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useModal.stories.d.ts","sourceRoot":"","sources":["../../src/bootstrap/useModal.stories.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAY,aAAa,EAAE,MAAM,YAAY,CAAC;AAIrD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CA8BjC,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAIvB,CAAC"}
|
package/dist/core/cache.d.ts
CHANGED
|
@@ -37,17 +37,12 @@ export declare function memo<Key extends any[], Val, SerializedKey extends any[]
|
|
|
37
37
|
*
|
|
38
38
|
* This makes possible to implement various one-off and subsequent transformations.
|
|
39
39
|
*
|
|
40
|
-
* 1. `write`:
|
|
41
|
-
* 2. `read`:
|
|
42
|
-
* TODO Better names: once, folloing
|
|
43
|
-
* TODO Better names: memoize, recover
|
|
44
|
-
* TODO Better names: writeTransformer, readTransformer
|
|
45
|
-
* TODO Better names: writeModifier, readModifier
|
|
46
|
-
* TODO Better names: write, read
|
|
40
|
+
* 1. `write`: Transform value BEFORE writing to cache, called only once if cache IS NOT present or IS NOT valid
|
|
41
|
+
* 2. `read`: Transform value AFTER it's read from cache, always called if cache IS valid, keep in mind this transform is applied on top of BEFORE
|
|
47
42
|
*
|
|
48
43
|
* Both should return same type or null.
|
|
49
44
|
*
|
|
50
|
-
* If newValue is null, old is returned, and no cache is set.
|
|
45
|
+
* If `newValue` is null, old is returned, and no cache is set.
|
|
51
46
|
*
|
|
52
47
|
* ```ts
|
|
53
48
|
* class InputCache extends TypedCache<string, ImageBitmap> {
|
|
@@ -113,6 +108,10 @@ export declare abstract class TransformerMap<Key, Val = Key> extends Map<Key, Va
|
|
|
113
108
|
protected write(key: Key, newValue?: Val, oldValue?: Val): MaybePromise<Val>;
|
|
114
109
|
protected read(oldValue: Val, key: Key): MaybePromise<Val>;
|
|
115
110
|
delete(key: Key): boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Do something with the value and key before removing it from cache
|
|
113
|
+
* For example, close a file or a bitmap
|
|
114
|
+
*/
|
|
116
115
|
protected dispose(value: Val, key: Key): void;
|
|
117
116
|
clear(): void;
|
|
118
117
|
set(key: Key, value: Val): this;
|
package/dist/core/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C,eAAO,MAAM,cAAc,SAAU,GAAG,QAAQ,GAAG,YAC0D,CAAC;AAE9G,eAAO,MAAM,KAAK,SAAU,GAAG,QAAQ,GAAG,YAAkB,CAAC;AAG7D,eAAO,MAAM,GAAG,eAAc,CAAC;AAE/B,wBAAgB,aAAa,CAAC,GAAG,GAAG,GAAG,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,OAAO,UAAQ,gBAK/D,GAAG,SAgB1C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,CAAC,GAAG,SAAS,GAAG,EAAE,EAAE,GAAG,EAAE,aAAa,SAAS,GAAG,EAAE,GAAG,GAAG,EAC1E,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,YAAY,CAAC,GAAG,CAAC,EACvC,EACI,GAAgD,EAChD,UAAU,EACV,OAAO,GACV,GAAE;IACC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;IAC3D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CACnD;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C,eAAO,MAAM,cAAc,SAAU,GAAG,QAAQ,GAAG,YAC0D,CAAC;AAE9G,eAAO,MAAM,KAAK,SAAU,GAAG,QAAQ,GAAG,YAAkB,CAAC;AAG7D,eAAO,MAAM,GAAG,eAAc,CAAC;AAE/B,wBAAgB,aAAa,CAAC,GAAG,GAAG,GAAG,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,OAAO,UAAQ,gBAK/D,GAAG,SAgB1C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,CAAC,GAAG,SAAS,GAAG,EAAE,EAAE,GAAG,EAAE,aAAa,SAAS,GAAG,EAAE,GAAG,GAAG,EAC1E,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,YAAY,CAAC,GAAG,CAAC,EACvC,EACI,GAAgD,EAChD,UAAU,EACV,OAAO,GACV,GAAE;IACC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;IAC3D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CACnD;cAyB2B,GAAG;;;;0BApBP,GAAG,GAAG,GAAG,EAAE;;EA2C3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,8BAAsB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,SAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAC1D,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;IAK3C,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;IAI5E,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;IAI1D,MAAM,CAAC,GAAG,EAAE,GAAG;IAQf;;;OAGG;IACH,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;IAEtC,KAAK;IAML,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAIzB,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAkBrD"}
|
package/dist/core/cache.js
CHANGED
|
@@ -54,7 +54,6 @@ function memo(fn, {
|
|
|
54
54
|
}
|
|
55
55
|
class TransformerMap extends Map {
|
|
56
56
|
constructor(name) {
|
|
57
|
-
console.warn("CREATE cache", name);
|
|
58
57
|
super();
|
|
59
58
|
this.name = name;
|
|
60
59
|
}
|
|
@@ -65,12 +64,16 @@ class TransformerMap extends Map {
|
|
|
65
64
|
return oldValue;
|
|
66
65
|
}
|
|
67
66
|
delete(key) {
|
|
68
|
-
const
|
|
69
|
-
|
|
67
|
+
const val = this.get(key);
|
|
68
|
+
const has = typeof val !== "undefined";
|
|
69
|
+
if (has) this.dispose(val, key);
|
|
70
70
|
super.delete(key);
|
|
71
71
|
return has;
|
|
72
72
|
}
|
|
73
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Do something with the value and key before removing it from cache
|
|
75
|
+
* For example, close a file or a bitmap
|
|
76
|
+
*/
|
|
74
77
|
dispose(value, key) {
|
|
75
78
|
}
|
|
76
79
|
clear() {
|
package/dist/core/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sources":["../../src/core/cache.ts"],"sourcesContent":["import ManyKeysMap from 'many-keys-map';\n\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport const shallowCompare = (prev: any, next: any) =>\n Array.from(new Set([...Object.keys(prev), ...Object.keys(next)])).every((key) => prev[key] === next[key]);\n\nexport const equal = (prev: any, next: any) => prev === next;\n\nconst UNUSED = Symbol('UNUSED');\nexport const ANY = Symbol('*');\n\nexport function createTracker<Dep = any>(whenDifferent: (next: Dep, prev?: Dep) => any, shallow = false) {\n let lastDependency: Dep = UNUSED as any;\n\n const comparator = shallow ? shallowCompare : equal;\n\n return function tracker(dependency: Dep) {\n // console.log('Tracker', lastDependency, dependency);\n\n if (lastDependency !== UNUSED && comparator(lastDependency, dependency)) {\n // console.log('RETAINED cache', { lastDependency, dependency });\n return false;\n }\n\n // console.log('INVALIDATED cache', {lastDependency, dependency});\n\n const res = whenDifferent(dependency, lastDependency === UNUSED ? undefined : lastDependency) || true;\n\n lastDependency = dependency;\n\n return res;\n };\n}\n\n/**\n * https://github.com/futpib/deep-weak-map\n * https://github.com/fregante/many-keys-map\n * https://github.com/fregante/many-keys-weakmap\n * https://github.com/sindresorhus/memoize?tab=readme-ov-file#example-multiple-non-serializable-arguments\n *\n * ```ts\n * const memoized = memo(\n * (file, options, ...args) => { ... },\n * {\n * key: (file, options, ...args) => [file, JSON.stringify(options), ...args],\n * invalidate: (bitmap) => !bitmap.width,\n * dispose: (bitmap) => bitmap.close(),\n * }\n * );\n * ```\n */\nexport function memo<Key extends any[], Val, SerializedKey extends any[] = Key>(\n fn: (...args: Key) => MaybePromise<Val>,\n {\n key = (...k: Key) => k as never as SerializedKey,\n invalidate,\n dispose,\n }: {\n key?: (...key: Key) => SerializedKey;\n invalidate?: (prev: Val, ...key: SerializedKey) => boolean;\n dispose?: (prev: Val, ...key: SerializedKey) => void;\n } = {},\n) {\n const map = new ManyKeysMap<SerializedKey, Val>();\n\n const clear = (...condition: Key | any[]) => {\n if (!condition?.length) {\n map.forEach((value, serializedKey) => {\n dispose?.(value, ...serializedKey);\n });\n map.clear();\n return;\n }\n\n const keyToClear = key(...(condition as any));\n\n map.forEach((value, serializedKey) => {\n if (!serializedKey.every((kk, i) => keyToClear[i] === ANY || kk === keyToClear[i])) return;\n dispose?.(value, ...serializedKey);\n map.delete(serializedKey);\n });\n };\n\n const size = () => map.size;\n\n async function memoized(...args: Key) {\n const k = key(...args);\n\n const has = map.has(k);\n const old = map.get(k);\n\n if (has && !invalidate?.(old as never as Val, ...k)) {\n return { value: map.get(k), hit: true };\n }\n\n const value = await fn(...args);\n\n map.set(k, value);\n\n return { hit: false, value };\n }\n\n memoized.clear = clear;\n memoized.size = size;\n\n //TODO return mimic-function(memorized, fn);\n\n return memoized;\n}\n\n/**\n * Allows to memoize values by key and invalidate them based on the previous value.\n *\n * This makes possible to implement various one-off and subsequent transformations.\n *\n * 1. `write`:
|
|
1
|
+
{"version":3,"file":"cache.js","sources":["../../src/core/cache.ts"],"sourcesContent":["import ManyKeysMap from 'many-keys-map';\n\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport const shallowCompare = (prev: any, next: any) =>\n Array.from(new Set([...Object.keys(prev), ...Object.keys(next)])).every((key) => prev[key] === next[key]);\n\nexport const equal = (prev: any, next: any) => prev === next;\n\nconst UNUSED = Symbol('UNUSED');\nexport const ANY = Symbol('*');\n\nexport function createTracker<Dep = any>(whenDifferent: (next: Dep, prev?: Dep) => any, shallow = false) {\n let lastDependency: Dep = UNUSED as any;\n\n const comparator = shallow ? shallowCompare : equal;\n\n return function tracker(dependency: Dep) {\n // console.log('Tracker', lastDependency, dependency);\n\n if (lastDependency !== UNUSED && comparator(lastDependency, dependency)) {\n // console.log('RETAINED cache', { lastDependency, dependency });\n return false;\n }\n\n // console.log('INVALIDATED cache', {lastDependency, dependency});\n\n const res = whenDifferent(dependency, lastDependency === UNUSED ? undefined : lastDependency) || true;\n\n lastDependency = dependency;\n\n return res;\n };\n}\n\n/**\n * https://github.com/futpib/deep-weak-map\n * https://github.com/fregante/many-keys-map\n * https://github.com/fregante/many-keys-weakmap\n * https://github.com/sindresorhus/memoize?tab=readme-ov-file#example-multiple-non-serializable-arguments\n *\n * ```ts\n * const memoized = memo(\n * (file, options, ...args) => { ... },\n * {\n * key: (file, options, ...args) => [file, JSON.stringify(options), ...args],\n * invalidate: (bitmap) => !bitmap.width,\n * dispose: (bitmap) => bitmap.close(),\n * }\n * );\n * ```\n */\nexport function memo<Key extends any[], Val, SerializedKey extends any[] = Key>(\n fn: (...args: Key) => MaybePromise<Val>,\n {\n key = (...k: Key) => k as never as SerializedKey,\n invalidate,\n dispose,\n }: {\n key?: (...key: Key) => SerializedKey;\n invalidate?: (prev: Val, ...key: SerializedKey) => boolean;\n dispose?: (prev: Val, ...key: SerializedKey) => void;\n } = {},\n) {\n const map = new ManyKeysMap<SerializedKey, Val>();\n\n //TODO Extend ManyKeysMap\n const clear = (...condition: Key | any[]) => {\n if (!condition?.length) {\n map.forEach((value, serializedKey) => {\n dispose?.(value, ...serializedKey);\n });\n map.clear();\n return;\n }\n\n const keyToClear = key(...(condition as any));\n\n map.forEach((value, serializedKey) => {\n if (!serializedKey.every((kk, i) => keyToClear[i] === ANY || kk === keyToClear[i])) return;\n dispose?.(value, ...serializedKey);\n map.delete(serializedKey);\n });\n };\n\n const size = () => map.size;\n\n async function memoized(...args: Key) {\n const k = key(...args);\n\n const has = map.has(k);\n const old = map.get(k);\n\n if (has && !invalidate?.(old as never as Val, ...k)) {\n return { value: map.get(k), hit: true };\n }\n\n const value = await fn(...args);\n\n map.set(k, value);\n\n return { hit: false, value };\n }\n\n memoized.clear = clear;\n memoized.size = size;\n\n //TODO return mimic-function(memorized, fn);\n\n return memoized;\n}\n\n/**\n * Allows to memoize values by key and invalidate them based on the previous value.\n *\n * This makes possible to implement various one-off and subsequent transformations.\n *\n * 1. `write`: Transform value BEFORE writing to cache, called only once if cache IS NOT present or IS NOT valid\n * 2. `read`: Transform value AFTER it's read from cache, always called if cache IS valid, keep in mind this transform is applied on top of BEFORE\n *\n * Both should return same type or null.\n *\n * If `newValue` is null, old is returned, and no cache is set.\n *\n * ```ts\n * class InputCache extends TypedCache<string, ImageBitmap> {\n * dispose(bitmap: ImageBitmap, key: string) {\n * bitmap.close();\n * }\n * }\n *\n * const cache = new InputCache('input');\n *\n * // Cache provided OffscreenCanvas by name and create context once per canvas\n *\n * class CanvasCache extends TypedCache<string, OffscreenCanvas> {\n * protected write(key: string, canvas: OffscreenCanvas): OffscreenCanvas {\n * const canvas = newValue.getContext('2d');\n * canvas.ctx = canvas;\n * return canvas;\n * }\n * }\n *\n * // Transfer control to offscreen canvas and track removal of original\n * // When called again, always return null, because canvas is handed to worker, and never returned to main\n *\n * class CanvasCache extends TypedCache<HTMLCanvasElement, OffscreenCanvas> {\n *\n * protected write(canvas: HTMLCanvasElement): OffscreenCanvas {\n * let l;\n * canvas.addEventListener(\n * 'remove',\n * (l = () => {\n * console.log('Removing canvas from cache', key);\n * this.delete(canvas);\n * key.removeEventListener('remove', l);\n * }),\n * );\n * return canvas.transferControlToOffscreen();\n * }\n *\n * protected read() {\n * return null;\n * }\n * }\n *\n * // Create bitmap from file and check if was used, return null if used\n * // Since bitmaps are also cached in worker, used bitmaps are not sent\n *\n * class BitmapCache extends TypedCache<File, ImageBitmap, File> {\n * protected async write(file: File): Promise<ImageBitmap> {\n * return await createImageBitmap(file);\n * }\n *\n * protected read(bitmap: ImageBitmap): Promise<ImageBitmap> | ImageBitmap {\n * if (!bitmap.width) return null;\n * return bitmap;\n * }\n * }\n *\n * ```\n */\nexport abstract class TransformerMap<Key, Val = Key> extends Map<Key, Val> {\n constructor(protected readonly name: string) {\n // console.warn('CREATE cache', name);\n super();\n }\n\n protected write(key: Key, newValue?: Val, oldValue?: Val): MaybePromise<Val> {\n return newValue as Val;\n }\n\n protected read(oldValue: Val, key: Key): MaybePromise<Val> {\n return oldValue;\n }\n\n delete(key: Key) {\n const val = this.get(key);\n const has = typeof val !== 'undefined';\n if (has) this.dispose(val, key);\n super.delete(key);\n return has;\n }\n\n /**\n * Do something with the value and key before removing it from cache\n * For example, close a file or a bitmap\n */\n protected dispose(value: Val, key: Key) {}\n\n clear() {\n console.log('CLEAR cache', this.name);\n this.forEach(this.dispose);\n super.clear();\n }\n\n set(key: Key, value: Val): this {\n throw new Error('Use memo() method instead');\n }\n\n async memo(key: Key, newValue?: Val): Promise<Val> {\n const oldValue = this.get(key);\n\n if (!!oldValue && (!newValue || newValue === oldValue)) {\n // console.log('FROM cache', this.name, key, 'old value', oldValue);\n return this.read?.(oldValue, key);\n }\n\n if (this.has(key)) this.delete(key);\n\n const value = await this.write(key, newValue, oldValue);\n\n super.set(key, value);\n\n // console.log('INVALIDATED KEY cache', this.name, key, 'has', has, 'invalidate', invalidate, 'new value', value);\n\n return value;\n }\n}\n"],"names":[],"mappings":"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"}
|