@kirill.konshin/core 0.0.1 → 0.0.2
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 +19 -10
- package/.turbo/turbo-build.log +15 -19
- package/.turbo/turbo-test.log +25 -91
- package/CHANGELOG.md +8 -0
- package/README.md +1 -91
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -22
- package/dist/index.js.map +1 -1
- package/package.json +2 -4
- package/src/index.ts +0 -6
- package/dist/files.d.ts +0 -4
- package/dist/files.d.ts.map +0 -1
- package/dist/files.js +0 -28
- package/dist/files.js.map +0 -1
- package/dist/ls.d.ts +0 -6
- package/dist/ls.d.ts.map +0 -1
- package/dist/ls.js +0 -12
- package/dist/ls.js.map +0 -1
- package/dist/measure.d.ts +0 -35
- package/dist/measure.d.ts.map +0 -1
- package/dist/measure.js +0 -60
- package/dist/measure.js.map +0 -1
- package/dist/worker.d.ts +0 -98
- package/dist/worker.d.ts.map +0 -1
- package/dist/worker.js +0 -226
- package/dist/worker.js.map +0 -1
- package/dist/worker.test.d.ts +0 -2
- package/dist/worker.test.d.ts.map +0 -1
- package/dist/workerUtils.d.ts +0 -3
- package/dist/workerUtils.d.ts.map +0 -1
- package/dist/workerUtils.js +0 -31
- package/dist/workerUtils.js.map +0 -1
- package/dist/wrpc.d.ts +0 -45
- package/dist/wrpc.d.ts.map +0 -1
- package/dist/wrpc.fixture.d.ts +0 -26
- package/dist/wrpc.fixture.d.ts.map +0 -1
- package/dist/wrpc.js +0 -241
- package/dist/wrpc.js.map +0 -1
- package/dist/wrpc.test.d.ts +0 -1
- package/dist/wrpc.test.d.ts.map +0 -1
- package/src/files.ts +0 -29
- package/src/ls.ts +0 -15
- package/src/measure.ts +0 -109
- package/src/worker.test.ts +0 -197
- package/src/worker.ts +0 -347
- package/src/workerUtils.ts +0 -32
- package/src/wrpc.fixture.ts +0 -106
- package/src/wrpc.test.ts +0 -225
- package/src/wrpc.ts +0 -377
package/.ctirc
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
"options": [
|
|
3
|
+
{
|
|
4
|
+
"mode": "create",
|
|
5
|
+
"project": "tsconfig.json",
|
|
6
|
+
"include": "src/**/*.{ts,tsx}",
|
|
7
|
+
"exclude": [
|
|
8
|
+
"**/*.stories.*",
|
|
9
|
+
"**/*.test.*",
|
|
10
|
+
"**/*.fixture.*"
|
|
11
|
+
],
|
|
12
|
+
"startFrom": "src",
|
|
13
|
+
"backup": false,
|
|
14
|
+
"overwrite": true,
|
|
15
|
+
"generationStyle": "default-alias-named-star",
|
|
16
|
+
"output": "src",
|
|
17
|
+
"verbose": true
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
[36mvite v7.0.6 [32mbuilding SSR bundle for production...[36m[39m
|
|
2
|
-
create
|
|
2
|
+
- ctix 'create' mode start, ...
|
|
3
|
+
✔ /home/runner/work/utils/utils/packages/core/tsconfig.json loading complete!
|
|
4
|
+
✔ analysis export statements completed!
|
|
5
|
+
- build "index.ts" file start
|
|
6
|
+
- output file exists check, ...
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
✔ ctix 'create' mode complete!
|
|
3
10
|
transforming...
|
|
4
|
-
[32m✓[39m
|
|
11
|
+
[32m✓[39m 4 modules transformed.
|
|
5
12
|
rendering chunks...
|
|
6
13
|
|
|
7
14
|
[vite:dts] Start generate declaration files...
|
|
8
|
-
[
|
|
9
|
-
|
|
10
|
-
[
|
|
11
|
-
[
|
|
12
|
-
|
|
13
|
-
[2mdist/[22m[36merrors.js [39m[1m[2m0.33 kB[22m[1m[22m[2m │ map: 0.90 kB[22m
|
|
14
|
-
[2mdist/[22m[36mmutex.js [39m[1m[2m0.40 kB[22m[1m[22m[2m │ map: 1.18 kB[22m
|
|
15
|
-
[2mdist/[22m[36mls.js [39m[1m[2m0.44 kB[22m[1m[22m[2m │ map: 1.05 kB[22m
|
|
16
|
-
[2mdist/[22m[36mfiles.js [39m[1m[2m0.84 kB[22m[1m[22m[2m │ map: 1.89 kB[22m
|
|
17
|
-
[2mdist/[22m[36mindex.js [39m[1m[2m0.92 kB[22m[1m[22m[2m │ map: 0.10 kB[22m
|
|
18
|
-
[2mdist/[22m[36mworkerUtils.js [39m[1m[2m0.97 kB[22m[1m[22m[2m │ map: 1.82 kB[22m
|
|
19
|
-
[2mdist/[22m[36mmeasure.js [39m[1m[2m1.44 kB[22m[1m[22m[2m │ map: 4.08 kB[22m
|
|
20
|
-
[2mdist/[22m[36mcache.js [39m[1m[2m2.92 kB[22m[1m[22m[2m │ map: 10.21 kB[22m
|
|
21
|
-
[2mdist/[22m[36mworker.js [39m[1m[2m7.06 kB[22m[1m[22m[2m │ map: 16.69 kB[22m
|
|
22
|
-
[2mdist/[22m[36mwrpc.js [39m[1m[2m8.73 kB[22m[1m[22m[2m │ map: 20.98 kB[22m
|
|
23
|
-
[vite:dts] Declaration files built in 1945ms.
|
|
15
|
+
[2mdist/[22m[36mindex.js [39m[1m[2m0.32 kB[22m[1m[22m[2m │ map: 0.09 kB[22m
|
|
16
|
+
[2mdist/[22m[36merrors.js [39m[1m[2m0.33 kB[22m[1m[22m[2m │ map: 0.90 kB[22m
|
|
17
|
+
[2mdist/[22m[36mmutex.js [39m[1m[2m0.40 kB[22m[1m[22m[2m │ map: 1.18 kB[22m
|
|
18
|
+
[2mdist/[22m[36mcache.js [39m[1m[2m2.92 kB[22m[1m[22m[2m │ map: 10.21 kB[22m
|
|
19
|
+
[vite:dts] Declaration files built in 1642ms.
|
|
24
20
|
|
|
25
|
-
[32m✓ built in
|
|
21
|
+
[32m✓ built in 4.86s[39m
|
|
26
22
|
Updated package.json with exports
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,103 +1,37 @@
|
|
|
1
|
-
create
|
|
1
|
+
- ctix 'create' mode start, ...
|
|
2
|
+
✔ /home/runner/work/utils/utils/packages/core/tsconfig.json loading complete!
|
|
3
|
+
✔ analysis export statements completed!
|
|
4
|
+
- build "index.ts" file start
|
|
5
|
+
- output file exists check, ...
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
✔ ctix 'create' mode complete!
|
|
2
9
|
|
|
3
10
|
[1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/utils/utils/packages/core[39m
|
|
4
11
|
[2mCoverage enabled with [22m[33mv8[39m
|
|
5
12
|
|
|
6
|
-
[90mstderr[2m | src/wrpc.test.ts
|
|
7
|
-
[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
|
|
8
|
-
|
|
9
13
|
[90mstdout[2m | src/cache.test.ts[2m > [22m[2mTransformerMap[2m > [22m[2mkey transform
|
|
10
14
|
[22m[39mCLEAR cache test
|
|
11
15
|
|
|
12
|
-
[
|
|
13
|
-
[22m[39mDATA [33m1[39m
|
|
14
|
-
|
|
15
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
16
|
-
[22m[39mDATA [33m2[39m
|
|
17
|
-
|
|
18
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
19
|
-
[22m[39mDATA [33m3[39m
|
|
20
|
-
|
|
21
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
22
|
-
[22m[39mDATA { value: [33m1[39m, done: [33mfalse[39m }
|
|
23
|
-
|
|
24
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
25
|
-
[22m[39mDATA { value: [33m2[39m, done: [33mfalse[39m }
|
|
26
|
-
|
|
27
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
28
|
-
[22m[39mDATA { value: [33m3[39m, done: [33mfalse[39m }
|
|
29
|
-
|
|
30
|
-
[32m✓[39m src/cache.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 13[2mms[22m[39m
|
|
31
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of return yield
|
|
32
|
-
[22m[39mDATA { value: [90mundefined[39m, done: [33mtrue[39m }
|
|
33
|
-
|
|
34
|
-
[32m✓[39m src/worker.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 13[2mms[22m[39m
|
|
35
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of separate return & yield
|
|
36
|
-
[22m[39mDATA { progress: [33m0[39m }
|
|
37
|
-
|
|
38
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of separate return & yield
|
|
39
|
-
[22m[39mDATA { progress: [33m0.5[39m }
|
|
40
|
-
|
|
41
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mfor await ... of separate return & yield
|
|
42
|
-
[22m[39mDATA { progress: [33m1[39m, aborted: [33mfalse[39m }
|
|
43
|
-
|
|
44
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mdo ... while
|
|
45
|
-
[22m[39mDATA { value: { progress: [33m0[39m }, done: [33mfalse[39m }
|
|
46
|
-
|
|
47
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mdo ... while
|
|
48
|
-
[22m[39mDATA { value: { progress: [33m0.5[39m }, done: [33mfalse[39m }
|
|
49
|
-
|
|
50
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mdo ... while
|
|
51
|
-
[22m[39mDATA { value: { progress: [33m1[39m, aborted: [33mfalse[39m }, done: [33mfalse[39m }
|
|
52
|
-
|
|
53
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mdo ... while
|
|
54
|
-
[22m[39mDATA { value: [32m'foo'[39m, done: [33mtrue[39m }
|
|
55
|
-
|
|
56
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mbreak
|
|
57
|
-
[22m[39mDATA { progress: [33m0[39m }
|
|
58
|
-
|
|
59
|
-
[90mstdout[2m | src/wrpc.test.ts[2m > [22m[2mWRPC[2m > [22m[2mabort
|
|
60
|
-
[22m[39mDATA { progress: [33m0[39m }
|
|
61
|
-
|
|
62
|
-
[32m✓[39m src/wrpc.test.ts [2m([22m[2m13 tests[22m[2m | [22m[33m1 skipped[39m[2m)[22m[33m 719[2mms[22m[39m
|
|
63
|
-
[33m[2m✓[22m[39m WRPC[2m > [22mstop [33m 503[2mms[22m[39m
|
|
64
|
-
Failed to convert coverage for file:///home/runner/work/utils/utils/packages/core/src/wrpc.ts.
|
|
65
|
-
TypeError: Cannot read properties of undefined (reading 'endCol')
|
|
66
|
-
at range.sliceRange (file:///home/runner/work/utils/utils/node_modules/@vitest/coverage-v8/dist/provider.js:556:55)
|
|
67
|
-
at CovSource.offsetToOriginalRelative (file:///home/runner/work/utils/utils/node_modules/@vitest/coverage-v8/dist/provider.js:1987:20)
|
|
68
|
-
at V8ToIstanbul._maybeRemapStartColEndCol (file:///home/runner/work/utils/utils/node_modules/@vitest/coverage-v8/dist/provider.js:2396:93)
|
|
69
|
-
at file:///home/runner/work/utils/utils/node_modules/@vitest/coverage-v8/dist/provider.js:2305:61
|
|
70
|
-
at Array.forEach (<anonymous>)
|
|
71
|
-
at file:///home/runner/work/utils/utils/node_modules/@vitest/coverage-v8/dist/provider.js:2303:21
|
|
72
|
-
at Array.forEach (<anonymous>)
|
|
73
|
-
at V8ToIstanbul.applyCoverage (file:///home/runner/work/utils/utils/node_modules/@vitest/coverage-v8/dist/provider.js:2302:13)
|
|
74
|
-
at V8CoverageProvider.v8ToIstanbul (file:///home/runner/work/utils/utils/node_modules/@vitest/coverage-v8/dist/provider.js:2732:14)
|
|
75
|
-
at async file:///home/runner/work/utils/utils/node_modules/@vitest/coverage-v8/dist/provider.js:2825:23
|
|
16
|
+
[32m✓[39m src/cache.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 10[2mms[22m[39m
|
|
76
17
|
|
|
77
|
-
[2m Test Files [22m [1m[
|
|
78
|
-
[2m Tests [22m [1m[
|
|
79
|
-
[2m Start at [22m
|
|
80
|
-
[2m Duration [22m
|
|
18
|
+
[2m Test Files [22m [1m[32m1 passed[39m[22m[90m (1)[39m
|
|
19
|
+
[2m Tests [22m [1m[32m4 passed[39m[22m[90m (4)[39m
|
|
20
|
+
[2m Start at [22m 03:27:08
|
|
21
|
+
[2m Duration [22m 465ms[2m (transform 54ms, setup 0ms, collect 47ms, tests 10ms, environment 0ms, prepare 83ms)[22m
|
|
81
22
|
|
|
82
23
|
[34m % [39m[2mCoverage report from [22m[33mv8[39m
|
|
83
|
-
|
|
84
|
-
File
|
|
85
|
-
|
|
86
|
-
All files
|
|
87
|
-
demo
|
|
88
|
-
worker-demo.ts
|
|
89
|
-
src
|
|
90
|
-
cache.ts
|
|
91
|
-
errors.ts
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
measure.ts | 0 | 0 | 0 | 0 | 1-109
|
|
96
|
-
mutex.ts | 0 | 100 | 100 | 0 | 3-22
|
|
97
|
-
worker.ts | 100 | 98.71 | 100 | 100 | 57
|
|
98
|
-
workerUtils.ts | 100 | 75 | 100 | 100 | 17,22,26,29
|
|
99
|
-
wrpc.fixture.ts | 81.81 | 78.57 | 75 | 81.81 | 70,73-76,95-99
|
|
100
|
-
wrpc.ts | 100 | 100 | 100 | 100 |
|
|
101
|
-
------------------|---------|----------|---------|---------|--------------------
|
|
24
|
+
-----------------|---------|----------|---------|---------|---------------------
|
|
25
|
+
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
26
|
+
-----------------|---------|----------|---------|---------|---------------------
|
|
27
|
+
All files | 42.85 | 84.84 | 55 | 42.85 |
|
|
28
|
+
demo | 0 | 0 | 0 | 0 |
|
|
29
|
+
worker-demo.ts | 0 | 0 | 0 | 0 | 1-73
|
|
30
|
+
src | 59.09 | 87.5 | 57.89 | 59.09 |
|
|
31
|
+
cache.ts | 81.25 | 89.65 | 56.25 | 81.25 | ...,200-201,224-225
|
|
32
|
+
errors.ts | 0 | 100 | 100 | 0 | 2-17
|
|
33
|
+
index.ts | 0 | 0 | 0 | 0 | 1-3
|
|
34
|
+
mutex.ts | 0 | 100 | 100 | 0 | 3-22
|
|
35
|
+
-----------------|---------|----------|---------|---------|---------------------
|
|
102
36
|
Updated package.json with exports
|
|
103
37
|
Updated package.json with exports
|
package/CHANGELOG.md
ADDED
package/README.md
CHANGED
|
@@ -1,91 +1 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
TODO
|
|
4
|
-
|
|
5
|
-
- [ ] Add to readme https://stackoverflow.com/questions/77727664/how-to-get-returned-value-from-async-generator-when-using-for-await
|
|
6
|
-
- [ ] Value passed to next are ignored https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncGenerator/next#sending_values_to_the_generator
|
|
7
|
-
|
|
8
|
-
```mermaid
|
|
9
|
-
sequenceDiagram
|
|
10
|
-
box Main
|
|
11
|
-
participant Code
|
|
12
|
-
participant Caller
|
|
13
|
-
end
|
|
14
|
-
box Worker
|
|
15
|
-
participant Worker
|
|
16
|
-
participant Resolver
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
%% autonumber
|
|
20
|
-
|
|
21
|
-
Code->>Caller: caller.generator(payload)
|
|
22
|
-
|
|
23
|
-
Caller-->>Code: iterator & promise
|
|
24
|
-
|
|
25
|
-
Code->>Code: Start main CONSUMER loop
|
|
26
|
-
|
|
27
|
-
Code->>Caller: iterator[Symbol]()
|
|
28
|
-
|
|
29
|
-
Caller->>Caller: Start replica GENERATOR loop
|
|
30
|
-
|
|
31
|
-
Code->>Caller: iterator.next()
|
|
32
|
-
|
|
33
|
-
Caller->>Worker: postMessage(payload)
|
|
34
|
-
|
|
35
|
-
Worker->>Resolver: resolver(payload)
|
|
36
|
-
|
|
37
|
-
Resolver-->>Worker: iterator
|
|
38
|
-
|
|
39
|
-
Worker->>Worker: Start replica CONSUMER loop
|
|
40
|
-
|
|
41
|
-
Worker->>Resolver: iterator[Symbol]()
|
|
42
|
-
|
|
43
|
-
Resolver->>Resolver: Start GENERATOR loop
|
|
44
|
-
|
|
45
|
-
rect rgb(232, 244, 248)
|
|
46
|
-
|
|
47
|
-
loop Synchronized iteration
|
|
48
|
-
Worker->>+Resolver: iterator.next(payload)
|
|
49
|
-
|
|
50
|
-
Resolver-->>-Worker: yield value
|
|
51
|
-
|
|
52
|
-
Worker-->>Caller: postMessage(value, done=false)
|
|
53
|
-
|
|
54
|
-
Note over Worker: Wait for ACK or ABORT
|
|
55
|
-
|
|
56
|
-
Caller-->>Code: yield value
|
|
57
|
-
|
|
58
|
-
Code->>Caller: iterator.next(nextPayload)
|
|
59
|
-
|
|
60
|
-
Caller->>Worker: postMessage(ack, nextPayload)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
break Break or AbortSignal (maybe)
|
|
66
|
-
Code-->>Code: Loop exits
|
|
67
|
-
Code->>Caller: signal.abort()
|
|
68
|
-
|
|
69
|
-
Caller-->>Caller: Loop exits
|
|
70
|
-
|
|
71
|
-
Caller->>Worker: postMessage(abort)
|
|
72
|
-
|
|
73
|
-
Worker-->>Worker: Loop exits via Break
|
|
74
|
-
|
|
75
|
-
Resolver-->>Resolver: Loop exits
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
opt Occurs on Error
|
|
79
|
-
Resolver-->>Worker: throw Error
|
|
80
|
-
|
|
81
|
-
Worker-->>Caller: postMessage(error, done=true)
|
|
82
|
-
|
|
83
|
-
Caller-->>Code: throw Error
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
Resolver-->>Worker: return value
|
|
87
|
-
|
|
88
|
-
Worker-->>Caller: postMessage(value, done=true)
|
|
89
|
-
|
|
90
|
-
Caller-->>Code: return value
|
|
91
|
-
```
|
|
1
|
+
# Core Utils
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
export * from './cache';
|
|
2
2
|
export * from './errors';
|
|
3
|
-
export * from './files';
|
|
4
|
-
export * from './ls';
|
|
5
|
-
export * from './measure';
|
|
6
3
|
export * from './mutex';
|
|
7
|
-
export * from './worker';
|
|
8
|
-
export * from './workerUtils';
|
|
9
|
-
export * from './wrpc';
|
|
10
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,35 +1,14 @@
|
|
|
1
1
|
import { ANY, TransformerMap, createTracker, equal, memo, shallowCompare } from "./cache.js";
|
|
2
2
|
import { catchErrors } from "./errors.js";
|
|
3
|
-
import { createFile, downloadFile, openFile } from "./files.js";
|
|
4
|
-
import { getStorage } from "./ls.js";
|
|
5
|
-
import { colored, createMeasurer, uncolored } from "./measure.js";
|
|
6
3
|
import { Mutex } from "./mutex.js";
|
|
7
|
-
import { RespondersBase, WorkerDialog } from "./worker.js";
|
|
8
|
-
import { getTransferrable, isTransferable } from "./workerUtils.js";
|
|
9
|
-
import { LogLevel, deriveController, rejectOnSignal, wrpc } from "./wrpc.js";
|
|
10
4
|
export {
|
|
11
5
|
ANY,
|
|
12
|
-
LogLevel,
|
|
13
6
|
Mutex,
|
|
14
|
-
RespondersBase,
|
|
15
7
|
TransformerMap,
|
|
16
|
-
WorkerDialog,
|
|
17
8
|
catchErrors,
|
|
18
|
-
colored,
|
|
19
|
-
createFile,
|
|
20
|
-
createMeasurer,
|
|
21
9
|
createTracker,
|
|
22
|
-
deriveController,
|
|
23
|
-
downloadFile,
|
|
24
10
|
equal,
|
|
25
|
-
getStorage,
|
|
26
|
-
getTransferrable,
|
|
27
|
-
isTransferable,
|
|
28
11
|
memo,
|
|
29
|
-
|
|
30
|
-
rejectOnSignal,
|
|
31
|
-
shallowCompare,
|
|
32
|
-
uncolored,
|
|
33
|
-
wrpc
|
|
12
|
+
shallowCompare
|
|
34
13
|
};
|
|
35
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kirill.konshin/core",
|
|
3
3
|
"description": "Utilities",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.2",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"----- BUILD -----": "",
|
|
8
8
|
"clean": "rm -rf dist .tscache tsconfig.tsbuildinfo",
|
|
9
9
|
"build": "vite build",
|
|
10
|
-
"build:index": "
|
|
10
|
+
"build:index": "ctix build",
|
|
11
11
|
"build:check-types": "attw --pack .",
|
|
12
12
|
"start": "yarn build --watch",
|
|
13
13
|
"wait": "wait-on ./dist/index.js",
|
|
@@ -19,8 +19,6 @@
|
|
|
19
19
|
"storybook:build": "storybook build"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"colors": "^1.4.0",
|
|
23
|
-
"file-saver": "^2.0.5",
|
|
24
22
|
"many-keys-map": "^3.0.3"
|
|
25
23
|
},
|
|
26
24
|
"devDependencies": {
|
package/src/index.ts
CHANGED
package/dist/files.d.ts
DELETED
package/dist/files.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,IAAI,CAM3D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,MAAM,GAAG,EAAE,iBAAsB,EAAE,aAAyB,KAAG,OAAO,CAAC,IAAI,CAE3G,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,OAAO,CAAC,MAAM,CAgBpC,CAAC"}
|
package/dist/files.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
const downloadFile = async (file) => {
|
|
2
|
-
const { saveAs } = require("file-saver");
|
|
3
|
-
return saveAs(file, file.name);
|
|
4
|
-
};
|
|
5
|
-
const createFile = async (text, filename = "file.json", type = "application/json") => {
|
|
6
|
-
return new File([new Blob([text], { type })], filename);
|
|
7
|
-
};
|
|
8
|
-
const openFile = () => new Promise((res, rej) => {
|
|
9
|
-
const input = document.createElement("input");
|
|
10
|
-
input.type = "file";
|
|
11
|
-
input.addEventListener("change", function readFile(e) {
|
|
12
|
-
input.removeEventListener("change", readFile);
|
|
13
|
-
const [file] = e.target.files;
|
|
14
|
-
if (!file) return;
|
|
15
|
-
const reader = new FileReader();
|
|
16
|
-
reader.onload = (e2) => res(e2.target?.result);
|
|
17
|
-
reader.onerror = rej;
|
|
18
|
-
reader.onabort = rej;
|
|
19
|
-
reader.readAsText(file);
|
|
20
|
-
});
|
|
21
|
-
input.click();
|
|
22
|
-
});
|
|
23
|
-
export {
|
|
24
|
-
createFile,
|
|
25
|
-
downloadFile,
|
|
26
|
-
openFile
|
|
27
|
-
};
|
|
28
|
-
//# sourceMappingURL=files.js.map
|
package/dist/files.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sources":["../src/files.ts"],"sourcesContent":["export const downloadFile = async (file: File): Promise<void> => {\n //FIXME https://github.com/eligrey/FileSaver.js/issues/471\n const { saveAs } = require('file-saver');\n\n //FIXME https://github.com/eligrey/FileSaver.js/issues/731\n return saveAs(file, file.name);\n};\n\nexport const createFile = async (text: any, filename = 'file.json', type = 'application/json'): Promise<File> => {\n return new File([new Blob([text], { type })], filename);\n};\n\nexport const openFile = (): Promise<string> =>\n new Promise((res, rej) => {\n const input = document.createElement('input');\n input.type = 'file';\n input.addEventListener('change', function readFile(e) {\n input.removeEventListener('change', readFile);\n // @ts-expect-error file is always there\n const [file] = e.target.files;\n if (!file) return;\n const reader = new FileReader();\n reader.onload = (e) => res(e.target?.result as string);\n reader.onerror = rej;\n reader.onabort = rej;\n reader.readAsText(file);\n });\n input.click();\n });\n"],"names":["e"],"mappings":"AAAO,MAAM,eAAe,OAAO,SAA8B;AAE7D,QAAM,EAAE,OAAA,IAAW,QAAQ,YAAY;AAGvC,SAAO,OAAO,MAAM,KAAK,IAAI;AACjC;AAEO,MAAM,aAAa,OAAO,MAAW,WAAW,aAAa,OAAO,uBAAsC;AAC7G,SAAO,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,KAAA,CAAM,CAAC,GAAG,QAAQ;AAC1D;AAEO,MAAM,WAAW,MACpB,IAAI,QAAQ,CAAC,KAAK,QAAQ;AACtB,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,OAAO;AACb,QAAM,iBAAiB,UAAU,SAAS,SAAS,GAAG;AAClD,UAAM,oBAAoB,UAAU,QAAQ;AAE5C,UAAM,CAAC,IAAI,IAAI,EAAE,OAAO;AACxB,QAAI,CAAC,KAAM;AACX,UAAM,SAAS,IAAI,WAAA;AACnB,WAAO,SAAS,CAACA,OAAM,IAAIA,GAAE,QAAQ,MAAgB;AACrD,WAAO,UAAU;AACjB,WAAO,UAAU;AACjB,WAAO,WAAW,IAAI;AAAA,EAC1B,CAAC;AACD,QAAM,MAAA;AACV,CAAC;"}
|
package/dist/ls.d.ts
DELETED
package/dist/ls.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../src/ls.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG;IACtC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;IAClC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACzC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAUA"}
|
package/dist/ls.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
function getStorage(pref) {
|
|
2
|
-
const prefix = (key) => `${pref}-${key}`;
|
|
3
|
-
const ls = typeof window !== "undefined" ? localStorage : null;
|
|
4
|
-
const read = (key) => JSON.parse(ls?.getItem(prefix(key)) || "null");
|
|
5
|
-
const write = (key, value) => ls?.setItem(prefix(key), JSON.stringify(value));
|
|
6
|
-
const remove = (key) => ls?.removeItem(prefix(key));
|
|
7
|
-
return { read, write, remove };
|
|
8
|
-
}
|
|
9
|
-
export {
|
|
10
|
-
getStorage
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=ls.js.map
|
package/dist/ls.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ls.js","sources":["../src/ls.ts"],"sourcesContent":["export function getStorage(pref: string): {\n read: (key: string) => null | any;\n write: (key: string, value: any) => void;\n remove: (key: string) => void;\n} {\n const prefix = (key) => `${pref}-${key}`;\n\n const ls = (typeof window !== 'undefined' ? localStorage : null) as Storage;\n\n const read = (key: string): any => JSON.parse(ls?.getItem(prefix(key)) || 'null');\n const write = (key: string, value: any): void => ls?.setItem(prefix(key), JSON.stringify(value));\n const remove = (key: string): void => ls?.removeItem(prefix(key));\n\n return { read, write, remove };\n}\n"],"names":[],"mappings":"AAAO,SAAS,WAAW,MAIzB;AACE,QAAM,SAAS,CAAC,QAAQ,GAAG,IAAI,IAAI,GAAG;AAEtC,QAAM,KAAM,OAAO,WAAW,cAAc,eAAe;AAE3D,QAAM,OAAO,CAAC,QAAqB,KAAK,MAAM,IAAI,QAAQ,OAAO,GAAG,CAAC,KAAK,MAAM;AAChF,QAAM,QAAQ,CAAC,KAAa,UAAqB,IAAI,QAAQ,OAAO,GAAG,GAAG,KAAK,UAAU,KAAK,CAAC;AAC/F,QAAM,SAAS,CAAC,QAAsB,IAAI,WAAW,OAAO,GAAG,CAAC;AAEhE,SAAO,EAAE,MAAM,OAAO,OAAA;AAC1B;"}
|
package/dist/measure.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { bold, magenta, cyan, yellow, red, green } from 'colors/safe';
|
|
2
|
-
export declare const colored: {
|
|
3
|
-
important: typeof bold;
|
|
4
|
-
subject: typeof magenta;
|
|
5
|
-
arg: typeof cyan;
|
|
6
|
-
sup: typeof yellow;
|
|
7
|
-
err: typeof red;
|
|
8
|
-
ok: typeof green;
|
|
9
|
-
};
|
|
10
|
-
export declare const uncolored: {
|
|
11
|
-
important: (str: any) => any;
|
|
12
|
-
subject: (str: any) => any;
|
|
13
|
-
arg: (str: any) => any;
|
|
14
|
-
sup: (str: any) => any;
|
|
15
|
-
err: (str: any) => any;
|
|
16
|
-
ok: (str: any) => any;
|
|
17
|
-
};
|
|
18
|
-
export declare function createMeasurer({ colors, prepend, padding, }: {
|
|
19
|
-
colors?: boolean;
|
|
20
|
-
prepend?: string;
|
|
21
|
-
padding?: number;
|
|
22
|
-
}): {
|
|
23
|
-
measure: (what: string, step: string, supplemental?: string, ...args: any[]) => {
|
|
24
|
-
done: (result?: string, ...args2: any[]) => void;
|
|
25
|
-
fail: (result?: string, ...args2: any[]) => void;
|
|
26
|
-
log: (...args2: any[]) => void;
|
|
27
|
-
};
|
|
28
|
-
important: (str: any) => any;
|
|
29
|
-
subject: (str: any) => any;
|
|
30
|
-
arg: (str: any) => any;
|
|
31
|
-
sup: (str: any) => any;
|
|
32
|
-
ok: (str: any) => any;
|
|
33
|
-
err: (str: any) => any;
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=measure.d.ts.map
|
package/dist/measure.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../src/measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEtE,eAAO,MAAM,OAAO,EAAE;IAClB,SAAS,EAAE,OAAO,IAAI,CAAC;IACvB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,GAAG,EAAE,OAAO,IAAI,CAAC;IACjB,GAAG,EAAE,OAAO,MAAM,CAAC;IACnB,GAAG,EAAE,OAAO,GAAG,CAAC;IAChB,EAAE,EAAE,OAAO,KAAK,CAAC;CAQpB,CAAC;AAIF,eAAO,MAAM,SAAS,EAAE;IACpB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IACvB,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IACvB,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IACvB,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;CAQzB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC3B,MAAa,EACb,OAAe,EACf,OAAY,GACf,EAAE;IACC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG;IACA,OAAO,EAAE,CACL,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,EACrB,GAAG,IAAI,EAAE,GAAG,EAAE,KACb;QACD,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QACjD,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QACjD,GAAG,EAAE,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KAClC,CAAC;IACF,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IACvB,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IACvB,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IACtB,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;CAC1B,CA+CA"}
|
package/dist/measure.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { green, red, yellow, cyan, magenta, bold } from "colors/safe";
|
|
2
|
-
const colored = {
|
|
3
|
-
important: bold,
|
|
4
|
-
subject: magenta,
|
|
5
|
-
arg: cyan,
|
|
6
|
-
sup: yellow,
|
|
7
|
-
err: red,
|
|
8
|
-
ok: green
|
|
9
|
-
};
|
|
10
|
-
const noColor = (str) => str;
|
|
11
|
-
const uncolored = {
|
|
12
|
-
important: noColor,
|
|
13
|
-
subject: noColor,
|
|
14
|
-
arg: noColor,
|
|
15
|
-
sup: noColor,
|
|
16
|
-
err: noColor,
|
|
17
|
-
ok: noColor
|
|
18
|
-
};
|
|
19
|
-
function createMeasurer({
|
|
20
|
-
colors = true,
|
|
21
|
-
prepend = "LOG",
|
|
22
|
-
padding = 10
|
|
23
|
-
}) {
|
|
24
|
-
const { important, subject, arg, sup, ok, err } = colors ? colored : uncolored;
|
|
25
|
-
function measure(what, step, supplemental = "", ...args) {
|
|
26
|
-
const time = performance.now();
|
|
27
|
-
const prefix = [
|
|
28
|
-
prepend,
|
|
29
|
-
important(subject(what.substring(0, padding).padStart(padding, " "))),
|
|
30
|
-
arg(step),
|
|
31
|
-
sup(supplemental),
|
|
32
|
-
...args
|
|
33
|
-
];
|
|
34
|
-
const done = (result = ok("DONE"), ...args2) => {
|
|
35
|
-
console.log(
|
|
36
|
-
...[
|
|
37
|
-
...prefix,
|
|
38
|
-
important(result),
|
|
39
|
-
...args2,
|
|
40
|
-
"in",
|
|
41
|
-
important((performance.now() - time).toFixed(0)),
|
|
42
|
-
"ms"
|
|
43
|
-
].filter(Boolean)
|
|
44
|
-
);
|
|
45
|
-
console.groupEnd();
|
|
46
|
-
};
|
|
47
|
-
const fail = (result = err("FAIL"), ...args2) => done(result, ...args2);
|
|
48
|
-
const log = (...args2) => {
|
|
49
|
-
console.log(...prefix, ...args2);
|
|
50
|
-
};
|
|
51
|
-
return { done, fail, log };
|
|
52
|
-
}
|
|
53
|
-
return { measure, important, subject, arg, sup, ok, err };
|
|
54
|
-
}
|
|
55
|
-
export {
|
|
56
|
-
colored,
|
|
57
|
-
createMeasurer,
|
|
58
|
-
uncolored
|
|
59
|
-
};
|
|
60
|
-
//# sourceMappingURL=measure.js.map
|
package/dist/measure.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"measure.js","sources":["../src/measure.ts"],"sourcesContent":["import { bold, magenta, cyan, yellow, red, green } from 'colors/safe';\n\nexport const colored: {\n important: typeof bold;\n subject: typeof magenta;\n arg: typeof cyan;\n sup: typeof yellow;\n err: typeof red;\n ok: typeof green;\n} = {\n important: bold,\n subject: magenta,\n arg: cyan,\n sup: yellow,\n err: red,\n ok: green,\n};\n\nconst noColor = (str) => str;\n\nexport const uncolored: {\n important: (str: any) => any;\n subject: (str: any) => any;\n arg: (str: any) => any;\n sup: (str: any) => any;\n err: (str: any) => any;\n ok: (str: any) => any;\n} = {\n important: noColor,\n subject: noColor,\n arg: noColor,\n sup: noColor,\n err: noColor,\n ok: noColor,\n};\n\nexport function createMeasurer({\n colors = true,\n prepend = 'LOG',\n padding = 10,\n}: {\n colors?: boolean;\n prepend?: string;\n padding?: number;\n}): {\n measure: (\n what: string,\n step: string,\n supplemental?: string,\n ...args: any[]\n ) => {\n done: (result?: string, ...args2: any[]) => void;\n fail: (result?: string, ...args2: any[]) => void;\n log: (...args2: any[]) => void;\n };\n important: (str: any) => any;\n subject: (str: any) => any;\n arg: (str: any) => any;\n sup: (str: any) => any;\n ok: (str: any) => any;\n err: (str: any) => any;\n} {\n const { important, subject, arg, sup, ok, err } = colors ? colored : uncolored;\n\n function measure(\n what: string,\n step: string,\n supplemental: string = '',\n ...args: any[]\n ): {\n done: (result?: string, ...args2: any[]) => void;\n fail: (result?: string, ...args2: any[]) => void;\n log: (...args2: any[]) => void;\n } {\n const time = performance.now();\n\n const prefix = [\n prepend,\n important(subject(what.substring(0, padding).padStart(padding, ' '))),\n arg(step),\n sup(supplemental),\n ...args,\n ];\n\n const done = (result: string = ok('DONE'), ...args2: any[]): void => {\n console.log(\n ...[\n ...prefix,\n important(result),\n ...args2,\n 'in',\n important((performance.now() - time).toFixed(0)),\n 'ms',\n ].filter(Boolean),\n );\n console.groupEnd();\n };\n\n const fail = (result: string = err('FAIL'), ...args2: any[]): void => done(result, ...args2);\n\n const log = (...args2: any[]): void => {\n console.log(...prefix, ...args2);\n };\n\n return { done, fail, log };\n }\n\n return { measure, important, subject, arg, sup, ok, err };\n}\n"],"names":[],"mappings":";AAEO,MAAM,UAOT;AAAA,EACA,WAAW;AAAA,EACX,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AACR;AAEA,MAAM,UAAU,CAAC,QAAQ;AAElB,MAAM,YAOT;AAAA,EACA,WAAW;AAAA,EACX,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AACR;AAEO,SAAS,eAAe;AAAA,EAC3B,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AACd,GAqBE;AACE,QAAM,EAAE,WAAW,SAAS,KAAK,KAAK,IAAI,IAAA,IAAQ,SAAS,UAAU;AAErE,WAAS,QACL,MACA,MACA,eAAuB,OACpB,MAKL;AACE,UAAM,OAAO,YAAY,IAAA;AAEzB,UAAM,SAAS;AAAA,MACX;AAAA,MACA,UAAU,QAAQ,KAAK,UAAU,GAAG,OAAO,EAAE,SAAS,SAAS,GAAG,CAAC,CAAC;AAAA,MACpE,IAAI,IAAI;AAAA,MACR,IAAI,YAAY;AAAA,MAChB,GAAG;AAAA,IAAA;AAGP,UAAM,OAAO,CAAC,SAAiB,GAAG,MAAM,MAAM,UAAuB;AACjE,cAAQ;AAAA,QACJ,GAAG;AAAA,UACC,GAAG;AAAA,UACH,UAAU,MAAM;AAAA,UAChB,GAAG;AAAA,UACH;AAAA,UACA,WAAW,YAAY,IAAA,IAAQ,MAAM,QAAQ,CAAC,CAAC;AAAA,UAC/C;AAAA,QAAA,EACF,OAAO,OAAO;AAAA,MAAA;AAEpB,cAAQ,SAAA;AAAA,IACZ;AAEA,UAAM,OAAO,CAAC,SAAiB,IAAI,MAAM,MAAM,UAAuB,KAAK,QAAQ,GAAG,KAAK;AAE3F,UAAM,MAAM,IAAI,UAAuB;AACnC,cAAQ,IAAI,GAAG,QAAQ,GAAG,KAAK;AAAA,IACnC;AAEA,WAAO,EAAE,MAAM,MAAM,IAAA;AAAA,EACzB;AAEA,SAAO,EAAE,SAAS,WAAW,SAAS,KAAK,KAAK,IAAI,IAAA;AACxD;"}
|