@storve/core 1.0.2 → 1.0.3
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/LICENSE +21 -0
- package/README.md +0 -16
- package/dist/adapters/indexedDB.cjs +0 -1
- package/dist/adapters/indexedDB.mjs +0 -1
- package/dist/adapters/localStorage.cjs +0 -1
- package/dist/adapters/localStorage.mjs +0 -1
- package/dist/adapters/memory.cjs +0 -1
- package/dist/adapters/memory.mjs +0 -1
- package/dist/adapters/sessionStorage.cjs +0 -1
- package/dist/adapters/sessionStorage.mjs +0 -1
- package/dist/async-entry.d.ts +0 -1
- package/dist/async.cjs +0 -1
- package/dist/async.d.ts +0 -1
- package/dist/async.mjs +0 -1
- package/dist/batch.d.ts +0 -1
- package/dist/compose.d.ts +0 -1
- package/dist/computed-entry.d.ts +0 -1
- package/dist/computed.cjs +0 -1
- package/dist/computed.d.ts +0 -1
- package/dist/computed.mjs +0 -1
- package/dist/devtools/history.d.ts +0 -1
- package/dist/devtools/index.d.ts +0 -1
- package/dist/devtools/redux-bridge.d.ts +0 -1
- package/dist/devtools/snapshots.d.ts +0 -1
- package/dist/devtools/withDevtools.d.ts +0 -1
- package/dist/devtools.cjs +0 -1
- package/dist/devtools.mjs +0 -1
- package/dist/extensions/noop.d.ts +0 -1
- package/dist/index.cjs +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.mjs +0 -1
- package/dist/persist/adapters/indexedDB.d.ts +0 -1
- package/dist/persist/adapters/localStorage.d.ts +0 -1
- package/dist/persist/adapters/memory.d.ts +0 -1
- package/dist/persist/adapters/sessionStorage.d.ts +0 -1
- package/dist/persist/debounce.d.ts +0 -1
- package/dist/persist/hydrate.d.ts +0 -1
- package/dist/persist/index.d.ts +0 -1
- package/dist/persist/serialize.d.ts +0 -1
- package/dist/persist.cjs +0 -1
- package/dist/persist.mjs +0 -1
- package/dist/proxy.d.ts +0 -1
- package/dist/registry-qtr1UpFU.js +0 -1
- package/dist/registry-zaKZ1P-s.js +0 -1
- package/dist/registry.d.ts +0 -1
- package/dist/signals/createSignal.d.ts +0 -1
- package/dist/signals/index.d.ts +0 -1
- package/dist/signals/useSignal.d.ts +0 -1
- package/dist/signals.cjs +0 -1
- package/dist/signals.mjs +0 -1
- package/dist/store.d.ts +0 -1
- package/dist/sync/channel.d.ts +0 -1
- package/dist/sync/index.d.ts +0 -1
- package/dist/sync/protocol.d.ts +0 -1
- package/dist/sync/withSync.d.ts +0 -1
- package/dist/sync.cjs +0 -1
- package/dist/sync.mjs +0 -1
- package/dist/types.d.ts +0 -1
- package/package.json +9 -3
- package/CHANGELOG.md +0 -151
- package/benchmarks/run.ts +0 -102
- package/benchmarks/week2.md +0 -9
- package/benchmarks/week2.ts +0 -64
- package/benchmarks/week4.md +0 -13
- package/benchmarks/week4.ts +0 -178
- package/benchmarks/week5.md +0 -15
- package/benchmarks/week5.ts +0 -184
- package/coverage/coverage-summary.json +0 -31
- package/dist/adapters/indexedDB.cjs.map +0 -1
- package/dist/adapters/indexedDB.mjs.map +0 -1
- package/dist/adapters/localStorage.cjs.map +0 -1
- package/dist/adapters/localStorage.mjs.map +0 -1
- package/dist/adapters/memory.cjs.map +0 -1
- package/dist/adapters/memory.mjs.map +0 -1
- package/dist/adapters/sessionStorage.cjs.map +0 -1
- package/dist/adapters/sessionStorage.mjs.map +0 -1
- package/dist/async-entry.d.ts.map +0 -1
- package/dist/async.cjs.map +0 -1
- package/dist/async.d.ts.map +0 -1
- package/dist/async.mjs.map +0 -1
- package/dist/batch.d.ts.map +0 -1
- package/dist/compose.d.ts.map +0 -1
- package/dist/computed-entry.d.ts.map +0 -1
- package/dist/computed.cjs.map +0 -1
- package/dist/computed.d.ts.map +0 -1
- package/dist/computed.mjs.map +0 -1
- package/dist/devtools/history.d.ts.map +0 -1
- package/dist/devtools/index.d.ts.map +0 -1
- package/dist/devtools/redux-bridge.d.ts.map +0 -1
- package/dist/devtools/snapshots.d.ts.map +0 -1
- package/dist/devtools/withDevtools.d.ts.map +0 -1
- package/dist/devtools.cjs.map +0 -1
- package/dist/devtools.mjs.map +0 -1
- package/dist/extensions/noop.d.ts.map +0 -1
- package/dist/index.cjs.js +0 -118
- package/dist/index.cjs.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.esm.js +0 -116
- package/dist/index.esm.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/persist/adapters/indexedDB.d.ts.map +0 -1
- package/dist/persist/adapters/localStorage.d.ts.map +0 -1
- package/dist/persist/adapters/memory.d.ts.map +0 -1
- package/dist/persist/adapters/sessionStorage.d.ts.map +0 -1
- package/dist/persist/debounce.d.ts.map +0 -1
- package/dist/persist/hydrate.d.ts.map +0 -1
- package/dist/persist/index.d.ts.map +0 -1
- package/dist/persist/serialize.d.ts.map +0 -1
- package/dist/persist.cjs.map +0 -1
- package/dist/persist.mjs.map +0 -1
- package/dist/proxy.d.ts.map +0 -1
- package/dist/registry-D3X0HSbl.js +0 -26
- package/dist/registry-D3X0HSbl.js.map +0 -1
- package/dist/registry-RDjbeJdx.js +0 -29
- package/dist/registry-RDjbeJdx.js.map +0 -1
- package/dist/registry-qtr1UpFU.js.map +0 -1
- package/dist/registry-zaKZ1P-s.js.map +0 -1
- package/dist/registry.d.ts.map +0 -1
- package/dist/signals/createSignal.d.ts.map +0 -1
- package/dist/signals/index.d.ts.map +0 -1
- package/dist/signals/useSignal.d.ts.map +0 -1
- package/dist/signals.cjs.map +0 -1
- package/dist/signals.mjs.map +0 -1
- package/dist/stats.html +0 -4949
- package/dist/store.d.ts.map +0 -1
- package/dist/sync/channel.d.ts.map +0 -1
- package/dist/sync/index.d.ts.map +0 -1
- package/dist/sync/protocol.d.ts.map +0 -1
- package/dist/sync/withSync.d.ts.map +0 -1
- package/dist/sync.cjs.map +0 -1
- package/dist/sync.mjs.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/rollup.config.mjs +0 -44
- package/src/async-entry.ts +0 -6
- package/src/async.ts +0 -240
- package/src/batch.ts +0 -33
- package/src/compose.ts +0 -50
- package/src/computed-entry.ts +0 -6
- package/src/computed.ts +0 -187
- package/src/devtools/history.ts +0 -103
- package/src/devtools/index.ts +0 -5
- package/src/devtools/redux-bridge.ts +0 -70
- package/src/devtools/snapshots.ts +0 -54
- package/src/devtools/withDevtools.ts +0 -196
- package/src/extensions/noop.ts +0 -12
- package/src/index.ts +0 -4
- package/src/persist/adapters/indexedDB.ts +0 -114
- package/src/persist/adapters/localStorage.ts +0 -28
- package/src/persist/adapters/memory.ts +0 -26
- package/src/persist/adapters/sessionStorage.ts +0 -28
- package/src/persist/debounce.ts +0 -28
- package/src/persist/hydrate.ts +0 -60
- package/src/persist/index.ts +0 -141
- package/src/persist/serialize.ts +0 -60
- package/src/proxy.ts +0 -87
- package/src/registry.ts +0 -67
- package/src/signals/createSignal.ts +0 -81
- package/src/signals/index.ts +0 -20
- package/src/signals/useSignal.ts +0 -18
- package/src/store.ts +0 -250
- package/src/sync/channel.ts +0 -15
- package/src/sync/index.ts +0 -3
- package/src/sync/protocol.ts +0 -18
- package/src/sync/withSync.ts +0 -147
- package/src/types.ts +0 -159
- package/tests/async.test.ts +0 -1100
- package/tests/batch.test.ts +0 -41
- package/tests/compose.test.ts +0 -209
- package/tests/computed.test.ts +0 -867
- package/tests/devtools.test.ts +0 -1039
- package/tests/integration/persist.integration.test.ts +0 -258
- package/tests/integration/signals.integration.test.ts +0 -309
- package/tests/integration.test.ts +0 -278
- package/tests/persist/adapters/indexedDB.adapter.test.ts +0 -185
- package/tests/persist/adapters/localStorage.adapter.test.ts +0 -105
- package/tests/persist/adapters/memory.adapter.test.ts +0 -112
- package/tests/persist/adapters/sessionStorage.adapter.test.ts +0 -128
- package/tests/persist/debounce.test.ts +0 -121
- package/tests/persist/hydrate.test.ts +0 -120
- package/tests/persist/migrate.test.ts +0 -208
- package/tests/persist/persist.test.ts +0 -357
- package/tests/persist/serialize.test.ts +0 -128
- package/tests/proxy.test.ts +0 -473
- package/tests/registry.test.ts +0 -67
- package/tests/signals/derived.test.ts +0 -244
- package/tests/signals/inference.test.ts +0 -108
- package/tests/signals/signal.test.ts +0 -348
- package/tests/signals/useSignal.test.tsx +0 -275
- package/tests/store.test.ts +0 -482
- package/tests/stress.test.ts +0 -268
- package/tests/sync.test.ts +0 -576
- package/tests/types.test.ts +0 -32
- package/tests/v0.3.test.ts +0 -813
- package/tree-shake-test.js +0 -1
- package/tsconfig.json +0 -15
- package/vitest.config.ts +0 -22
- package/vitest_play.ts +0 -7
package/benchmarks/run.ts
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { performance } from 'perf_hooks'
|
|
2
|
-
import { createStore } from '../src/index'
|
|
3
|
-
|
|
4
|
-
type BenchmarkResult = {
|
|
5
|
-
operation: string
|
|
6
|
-
averageMs: string
|
|
7
|
-
status: string
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function bench(label: string, fn: () => void, iterations = 100_000): BenchmarkResult {
|
|
11
|
-
// Warmup
|
|
12
|
-
for (let i = 0; i < 1000; i++) fn()
|
|
13
|
-
|
|
14
|
-
const start = performance.now()
|
|
15
|
-
for (let i = 0; i < iterations; i++) fn()
|
|
16
|
-
const avg = (performance.now() - start) / iterations
|
|
17
|
-
|
|
18
|
-
const limits: Record<string, number> = {
|
|
19
|
-
'createStore() call': 1,
|
|
20
|
-
'getState() read': 0.1,
|
|
21
|
-
'setState() write + notify (100 subs)': 1,
|
|
22
|
-
'Nested read (3 levels deep)': 0.1,
|
|
23
|
-
'Subscribe + Unsubscribe cycle': 0.1,
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const limit = limits[label]
|
|
27
|
-
const status = avg <= limit ? '✅ PASS' : '❌ FAIL'
|
|
28
|
-
|
|
29
|
-
return {
|
|
30
|
-
operation: label,
|
|
31
|
-
averageMs: avg.toFixed(8) + 'ms',
|
|
32
|
-
status,
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function runBenchmarks(): void {
|
|
37
|
-
console.log('\n⚡ Storve — Benchmark Results\n')
|
|
38
|
-
|
|
39
|
-
const results: BenchmarkResult[] = []
|
|
40
|
-
|
|
41
|
-
// 1. createStore
|
|
42
|
-
results.push(bench('createStore() call', () => {
|
|
43
|
-
createStore({ count: 0, name: 'test' })
|
|
44
|
-
}, 10_000))
|
|
45
|
-
|
|
46
|
-
// 2. getState
|
|
47
|
-
const storeForGet = createStore({ count: 0 })
|
|
48
|
-
results.push(bench('getState() read', () => {
|
|
49
|
-
storeForGet.getState()
|
|
50
|
-
}))
|
|
51
|
-
|
|
52
|
-
// 3. setState + notify with 100 subscribers
|
|
53
|
-
const storeForSet = createStore({ count: 0 })
|
|
54
|
-
for (let i = 0; i < 100; i++) storeForSet.subscribe(() => { })
|
|
55
|
-
let counter = 0
|
|
56
|
-
results.push(bench('setState() write + notify (100 subs)', () => {
|
|
57
|
-
storeForSet.setState({ count: counter++ })
|
|
58
|
-
}, 10_000))
|
|
59
|
-
|
|
60
|
-
// 4. Nested read
|
|
61
|
-
const storeForNested = createStore({
|
|
62
|
-
level1: { level2: { level3: { value: 42 } } },
|
|
63
|
-
})
|
|
64
|
-
results.push(bench('Nested read (3 levels deep)', () => {
|
|
65
|
-
storeForNested.getState().level1.level2.level3.value
|
|
66
|
-
}))
|
|
67
|
-
|
|
68
|
-
// 5. Subscribe + Unsubscribe
|
|
69
|
-
const storeForSub = createStore({ count: 0 })
|
|
70
|
-
results.push(bench('Subscribe + Unsubscribe cycle', () => {
|
|
71
|
-
const unsub = storeForSub.subscribe(() => { })
|
|
72
|
-
unsub()
|
|
73
|
-
}))
|
|
74
|
-
|
|
75
|
-
// Print table
|
|
76
|
-
const colWidths = { operation: 45, averageMs: 20, status: 10 }
|
|
77
|
-
const header =
|
|
78
|
-
'Operation'.padEnd(colWidths.operation) +
|
|
79
|
-
'Average Time'.padEnd(colWidths.averageMs) +
|
|
80
|
-
'Status'
|
|
81
|
-
const divider = '-'.repeat(header.length)
|
|
82
|
-
|
|
83
|
-
console.log(header)
|
|
84
|
-
console.log(divider)
|
|
85
|
-
|
|
86
|
-
let allPassed = true
|
|
87
|
-
for (const r of results) {
|
|
88
|
-
if (r.status.includes('FAIL')) allPassed = false
|
|
89
|
-
console.log(
|
|
90
|
-
r.operation.padEnd(colWidths.operation) +
|
|
91
|
-
r.averageMs.padEnd(colWidths.averageMs) +
|
|
92
|
-
r.status
|
|
93
|
-
)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
console.log(divider)
|
|
97
|
-
console.log(allPassed ? '\n✅ All benchmarks passed!\n' : '\n❌ Some benchmarks failed!\n')
|
|
98
|
-
|
|
99
|
-
if (!allPassed) process.exit(1)
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
runBenchmarks()
|
package/benchmarks/week2.md
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Week 2 Benchmarks
|
|
2
|
-
|
|
3
|
-
| Operation | Average Time (ms) |
|
|
4
|
-
|---|---|
|
|
5
|
-
| createStore() call | 0.0891ms |
|
|
6
|
-
| getState() read | 0.000001ms |
|
|
7
|
-
| setState() write + notify (100 subs) | 0.001450ms |
|
|
8
|
-
| Nested read (3 levels deep) | 0.000005ms |
|
|
9
|
-
| Subscribe + Unsubscribe cycle | 0.000159ms |
|
package/benchmarks/week2.ts
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { performance } from 'perf_hooks';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
import { createStore } from '../src/store';
|
|
5
|
-
|
|
6
|
-
function measure(name: string, fn: () => void, iterations = 10000) {
|
|
7
|
-
const start = performance.now();
|
|
8
|
-
for (let i = 0; i < iterations; i++) {
|
|
9
|
-
fn();
|
|
10
|
-
}
|
|
11
|
-
const duration = performance.now() - start;
|
|
12
|
-
const avg = duration / iterations;
|
|
13
|
-
return `| ${name} | ${avg.toFixed(6)}ms |`;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
async function run() {
|
|
17
|
-
const results = [
|
|
18
|
-
`# Week 2 Benchmarks`,
|
|
19
|
-
``,
|
|
20
|
-
`| Operation | Average Time (ms) |`,
|
|
21
|
-
`|---|---|`
|
|
22
|
-
];
|
|
23
|
-
|
|
24
|
-
// createStore() call (< 1ms)
|
|
25
|
-
const t0 = performance.now();
|
|
26
|
-
const store = createStore({ count: 0 });
|
|
27
|
-
const createTime = performance.now() - t0;
|
|
28
|
-
results.push(`| createStore() call | ${createTime.toFixed(4)}ms |`);
|
|
29
|
-
|
|
30
|
-
// getState() read (< 0.1ms)
|
|
31
|
-
results.push(measure('getState() read', () => {
|
|
32
|
-
store.getState();
|
|
33
|
-
}, 1000000));
|
|
34
|
-
|
|
35
|
-
// setState() write + notify (< 1ms for 100 subscribers)
|
|
36
|
-
const storeWithSubs = createStore({ value: 0 });
|
|
37
|
-
for (let i = 0; i < 100; i++) {
|
|
38
|
-
storeWithSubs.subscribe(() => { });
|
|
39
|
-
}
|
|
40
|
-
results.push(measure('setState() write + notify (100 subs)', () => {
|
|
41
|
-
storeWithSubs.setState({ value: Math.random() });
|
|
42
|
-
}, 1000));
|
|
43
|
-
|
|
44
|
-
// Nested read (3 levels deep) (< 0.1ms)
|
|
45
|
-
const nestedStore = createStore({ root: { level1: { level2: { val: 42 } } } });
|
|
46
|
-
results.push(measure('Nested read (3 levels deep)', () => {
|
|
47
|
-
void nestedStore.getState().root.level1.level2.val;
|
|
48
|
-
}, 1000000));
|
|
49
|
-
|
|
50
|
-
// Subscribe + Unsubscribe cycle (< 0.1ms)
|
|
51
|
-
const subStore = createStore({ x: 1 });
|
|
52
|
-
results.push(measure('Subscribe + Unsubscribe cycle', () => {
|
|
53
|
-
const unsub = subStore.subscribe(() => { });
|
|
54
|
-
unsub();
|
|
55
|
-
}));
|
|
56
|
-
|
|
57
|
-
const content = results.join('\n');
|
|
58
|
-
console.log(content);
|
|
59
|
-
|
|
60
|
-
fs.mkdirSync(path.join(process.cwd(), 'benchmarks'), { recursive: true });
|
|
61
|
-
fs.writeFileSync(path.join(process.cwd(), 'benchmarks', 'week2.md'), content);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
run();
|
package/benchmarks/week4.md
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# Week 4 Benchmarks (v0.3)
|
|
2
|
-
|
|
3
|
-
| Operation | Average Time | Status |
|
|
4
|
-
| :--- | :--- | :--- |
|
|
5
|
-
| action call (no-arg) | 0.00026063ms | ✅ PASS |
|
|
6
|
-
| action call (with arg) | 0.00026390ms | ✅ PASS |
|
|
7
|
-
| action call (async dispatch) | 0.00019697ms | ✅ PASS |
|
|
8
|
-
| setState (immer mutator, primitive) | 0.00077454ms | ✅ PASS |
|
|
9
|
-
| setState (immer mutator, nested object) | 0.00252697ms | ✅ PASS |
|
|
10
|
-
| setState (immer mutator, array push) | 0.00828483ms | ✅ PASS |
|
|
11
|
-
| batch (3x setState, 1 notify) | 0.00259722ms | ✅ PASS |
|
|
12
|
-
| batch (10x setState, 1 notify) | 0.03388838ms | ✅ PASS |
|
|
13
|
-
| action excluded from getState() | 0.00000872ms | ✅ PASS |
|
package/benchmarks/week4.ts
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { createStore } from '../src'
|
|
2
|
-
|
|
3
|
-
interface BenchmarkResult {
|
|
4
|
-
operation: string
|
|
5
|
-
averageMs: string
|
|
6
|
-
status: string
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
function bench(
|
|
10
|
-
label: string,
|
|
11
|
-
fn: () => void,
|
|
12
|
-
iterations = 100_000
|
|
13
|
-
): BenchmarkResult {
|
|
14
|
-
// Warmup
|
|
15
|
-
for (let i = 0; i < 1000; i++) fn()
|
|
16
|
-
|
|
17
|
-
const start = performance.now()
|
|
18
|
-
for (let i = 0; i < iterations; i++) fn()
|
|
19
|
-
const end = performance.now()
|
|
20
|
-
|
|
21
|
-
const avg = (end - start) / iterations
|
|
22
|
-
|
|
23
|
-
const limits: Record<string, number> = {
|
|
24
|
-
'action call (no-arg)': 0.5,
|
|
25
|
-
'action call (with arg)': 0.5,
|
|
26
|
-
'action call (async dispatch)': 1.0,
|
|
27
|
-
'setState (immer mutator, primitive)': 1.0,
|
|
28
|
-
'setState (immer mutator, nested object)': 2.0,
|
|
29
|
-
'setState (immer mutator, array push)': 2.0,
|
|
30
|
-
'batch (3x setState, 1 notify)': 1.5,
|
|
31
|
-
'batch (10x setState, 1 notify)': 3.0,
|
|
32
|
-
'action excluded from getState()': 0.2,
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const limit = limits[label] ?? 1
|
|
36
|
-
const status = avg <= limit ? '✅ PASS' : '❌ FAIL'
|
|
37
|
-
return { operation: label, averageMs: avg.toFixed(8) + 'ms', status }
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function runBenchmarks(): void {
|
|
41
|
-
console.log('\n⚡ Storve Core — Week 4 Benchmark Results (v0.3)\n')
|
|
42
|
-
|
|
43
|
-
const results: BenchmarkResult[] = []
|
|
44
|
-
|
|
45
|
-
// ── 1. Action call — no argument
|
|
46
|
-
const store1 = createStore({
|
|
47
|
-
count: 0,
|
|
48
|
-
actions: {
|
|
49
|
-
increment() { store1.setState(s => ({ count: s.count + 1 })) }
|
|
50
|
-
}
|
|
51
|
-
})
|
|
52
|
-
results.push(bench('action call (no-arg)', () => {
|
|
53
|
-
store1.increment()
|
|
54
|
-
}))
|
|
55
|
-
|
|
56
|
-
// ── 2. Action call — with argument
|
|
57
|
-
const store2 = createStore({
|
|
58
|
-
count: 0,
|
|
59
|
-
actions: {
|
|
60
|
-
incrementBy(n: number) { store2.setState(s => ({ count: s.count + n })) }
|
|
61
|
-
}
|
|
62
|
-
})
|
|
63
|
-
results.push(bench('action call (with arg)', () => {
|
|
64
|
-
store2.incrementBy(1)
|
|
65
|
-
}))
|
|
66
|
-
|
|
67
|
-
// ── 3. Async action dispatch (fire, don't await — measures dispatch overhead)
|
|
68
|
-
const store3 = createStore({
|
|
69
|
-
count: 0,
|
|
70
|
-
actions: {
|
|
71
|
-
async incrementAsync() {
|
|
72
|
-
await Promise.resolve()
|
|
73
|
-
store3.setState(s => ({ count: s.count + 1 }))
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
})
|
|
77
|
-
results.push(bench('action call (async dispatch)', () => {
|
|
78
|
-
void store3.incrementAsync()
|
|
79
|
-
}, 10_000))
|
|
80
|
-
|
|
81
|
-
// ── 4. Immer — primitive mutation
|
|
82
|
-
const store4 = createStore({ count: 0 }, { immer: true })
|
|
83
|
-
results.push(bench('setState (immer mutator, primitive)', () => {
|
|
84
|
-
store4.setState(draft => { draft.count++ })
|
|
85
|
-
}))
|
|
86
|
-
|
|
87
|
-
// ── 5. Immer — nested object mutation
|
|
88
|
-
const store5 = createStore({
|
|
89
|
-
user: { name: 'Alice', age: 30, score: 0 }
|
|
90
|
-
}, { immer: true })
|
|
91
|
-
results.push(bench('setState (immer mutator, nested object)', () => {
|
|
92
|
-
store5.setState(draft => { draft.user.score++ })
|
|
93
|
-
}))
|
|
94
|
-
|
|
95
|
-
// ── 6. Immer — array push
|
|
96
|
-
const store6 = createStore({ items: [] as number[] }, { immer: true })
|
|
97
|
-
let idCounter = 0
|
|
98
|
-
results.push(bench('setState (immer mutator, array push)', () => {
|
|
99
|
-
store6.setState(draft => { draft.items.push(idCounter++) })
|
|
100
|
-
// Keep array from growing unboundedly
|
|
101
|
-
if (store6.getState().items.length > 100) {
|
|
102
|
-
store6.setState({ items: [] })
|
|
103
|
-
}
|
|
104
|
-
}, 10_000))
|
|
105
|
-
|
|
106
|
-
// ── 7. Batch — 3 setState calls
|
|
107
|
-
const store7 = createStore({ a: 0, b: 0, c: 0 })
|
|
108
|
-
let n7 = 0
|
|
109
|
-
results.push(bench('batch (3x setState, 1 notify)', () => {
|
|
110
|
-
store7.batch(() => {
|
|
111
|
-
store7.setState({ a: n7 })
|
|
112
|
-
store7.setState({ b: n7 })
|
|
113
|
-
store7.setState({ c: n7++ })
|
|
114
|
-
})
|
|
115
|
-
}))
|
|
116
|
-
|
|
117
|
-
// ── 8. Batch — 10 setState calls
|
|
118
|
-
const store8 = createStore({
|
|
119
|
-
v0: 0, v1: 0, v2: 0, v3: 0, v4: 0,
|
|
120
|
-
v5: 0, v6: 0, v7: 0, v8: 0, v9: 0,
|
|
121
|
-
})
|
|
122
|
-
let n8 = 0
|
|
123
|
-
results.push(bench('batch (10x setState, 1 notify)', () => {
|
|
124
|
-
store8.batch(() => {
|
|
125
|
-
store8.setState({ v0: n8 })
|
|
126
|
-
store8.setState({ v1: n8 })
|
|
127
|
-
store8.setState({ v2: n8 })
|
|
128
|
-
store8.setState({ v3: n8 })
|
|
129
|
-
store8.setState({ v4: n8 })
|
|
130
|
-
store8.setState({ v5: n8 })
|
|
131
|
-
store8.setState({ v6: n8 })
|
|
132
|
-
store8.setState({ v7: n8 })
|
|
133
|
-
store8.setState({ v8: n8 })
|
|
134
|
-
store8.setState({ v9: n8++ })
|
|
135
|
-
})
|
|
136
|
-
}))
|
|
137
|
-
|
|
138
|
-
// ── 9. Action excluded from getState — confirms no overhead
|
|
139
|
-
const store9 = createStore({
|
|
140
|
-
count: 0,
|
|
141
|
-
actions: { increment() { store9.setState(s => ({ count: s.count + 1 })) } }
|
|
142
|
-
})
|
|
143
|
-
results.push(bench('action excluded from getState()', () => {
|
|
144
|
-
const state = store9.getState()
|
|
145
|
-
void ('increment' in state)
|
|
146
|
-
}))
|
|
147
|
-
|
|
148
|
-
// ── Print results
|
|
149
|
-
const colWidths = { operation: 48, averageMs: 22, status: 10 }
|
|
150
|
-
const header =
|
|
151
|
-
'Operation'.padEnd(colWidths.operation) +
|
|
152
|
-
'Average Time'.padEnd(colWidths.averageMs) +
|
|
153
|
-
'Status'
|
|
154
|
-
const divider = '─'.repeat(header.length)
|
|
155
|
-
|
|
156
|
-
console.log(header)
|
|
157
|
-
console.log(divider)
|
|
158
|
-
|
|
159
|
-
let allPassed = true
|
|
160
|
-
for (const r of results) {
|
|
161
|
-
if (r.status.includes('FAIL')) allPassed = false
|
|
162
|
-
console.log(
|
|
163
|
-
r.operation.padEnd(colWidths.operation) +
|
|
164
|
-
r.averageMs.padEnd(colWidths.averageMs) +
|
|
165
|
-
r.status
|
|
166
|
-
)
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
console.log(divider)
|
|
170
|
-
console.log(allPassed
|
|
171
|
-
? '\n✅ All Week 4 benchmarks passed!\n'
|
|
172
|
-
: '\n❌ Some benchmarks failed — investigate before merging.\n'
|
|
173
|
-
)
|
|
174
|
-
|
|
175
|
-
if (!allPassed) process.exit(1)
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
runBenchmarks()
|
package/benchmarks/week5.md
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Week 5 Benchmarks (v0.4 Async State)
|
|
2
|
-
|
|
3
|
-
| Operation | Average Time | Status |
|
|
4
|
-
| :--- | :--- | :--- |
|
|
5
|
-
| createAsync() initialization | 0.00023803ms | ✅ PASS |
|
|
6
|
-
| fetch() - cache hit (TTL) | 0.00055767ms | ✅ PASS |
|
|
7
|
-
| fetch() - cache miss (resolved) | 0.00344446ms | ✅ PASS |
|
|
8
|
-
| refetch() - overhead | 0.00452113ms | ✅ PASS |
|
|
9
|
-
| optimistic update - immediate state change | 0.00286880ms | ✅ PASS |
|
|
10
|
-
|
|
11
|
-
## Observations
|
|
12
|
-
- **Engine Initialization**: `createAsync` is extremely lightweight as it only returns a definition object. The actual engine is lazily initialized when the store is created.
|
|
13
|
-
- **Cache Performance**: TTL cache hits are highly optimized (~0.5ns), adding negligible overhead to state reads.
|
|
14
|
-
- **Engine Overhead**: Cache misses and refetches show roughly 3-4µs overhead. This is well within the 1ms budget for store operations, even considering the overhead of Promise resolution in the benchmark.
|
|
15
|
-
- **Optimistic Updates**: Immediate state updates via optimistic results are fast (~2.8µs), ensuring UI responsiveness during async triggers.
|
package/benchmarks/week5.ts
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
import { createStore } from '../src'
|
|
2
|
-
import { createAsync } from '../src/async'
|
|
3
|
-
import { computed } from '../src/computed'
|
|
4
|
-
|
|
5
|
-
interface BenchmarkResult {
|
|
6
|
-
operation: string
|
|
7
|
-
averageMs: string
|
|
8
|
-
status: string
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
async function benchAsync(
|
|
12
|
-
label: string,
|
|
13
|
-
fn: () => Promise<void>,
|
|
14
|
-
iterations = 1000
|
|
15
|
-
): Promise<BenchmarkResult> {
|
|
16
|
-
// Warmup
|
|
17
|
-
for (let i = 0; i < 100; i++) await fn()
|
|
18
|
-
|
|
19
|
-
const start = performance.now()
|
|
20
|
-
for (let i = 0; i < iterations; i++) await fn()
|
|
21
|
-
const end = performance.now()
|
|
22
|
-
|
|
23
|
-
const avg = (end - start) / iterations
|
|
24
|
-
|
|
25
|
-
const limits: Record<string, number> = {
|
|
26
|
-
'createAsync() initialization': 0.1,
|
|
27
|
-
'fetch() - cache hit (TTL)': 0.1,
|
|
28
|
-
'fetch() - cache miss (resolved)': 1.0,
|
|
29
|
-
'refetch() - overhead': 0.1,
|
|
30
|
-
'optimistic update - immediate state change': 0.2,
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const limit = limits[label] ?? 1.0
|
|
34
|
-
const status = avg <= limit ? '✅ PASS' : '❌ FAIL'
|
|
35
|
-
return { operation: label, averageMs: avg.toFixed(8) + 'ms', status }
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function benchSync(
|
|
39
|
-
label: string,
|
|
40
|
-
fn: () => void,
|
|
41
|
-
iterations = 100_000
|
|
42
|
-
): BenchmarkResult {
|
|
43
|
-
// Warmup
|
|
44
|
-
for (let i = 0; i < 1000; i++) fn()
|
|
45
|
-
|
|
46
|
-
const start = performance.now()
|
|
47
|
-
for (let i = 0; i < iterations; i++) fn()
|
|
48
|
-
const end = performance.now()
|
|
49
|
-
|
|
50
|
-
const avg = (end - start) / iterations
|
|
51
|
-
|
|
52
|
-
const limits: Record<string, number> = {
|
|
53
|
-
'createAsync() initialization': 0.1,
|
|
54
|
-
'optimistic update - immediate state change': 0.2,
|
|
55
|
-
'computed read (getState().computed)': 0.1,
|
|
56
|
-
'computed recompute (1 dep)': 0.1,
|
|
57
|
-
'computed three-level chain recompute': 0.5,
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const limit = limits[label] ?? 1.0
|
|
61
|
-
const status = avg <= limit ? '✅ PASS' : '❌ FAIL'
|
|
62
|
-
return { operation: label, averageMs: avg.toFixed(8) + 'ms', status }
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
async function runBenchmarks(): Promise<void> {
|
|
66
|
-
console.log('\n⚡ Storve Core — Week 5 Benchmark Results (v0.4 Async + v0.5 Computed)\n')
|
|
67
|
-
|
|
68
|
-
const results: BenchmarkResult[] = []
|
|
69
|
-
|
|
70
|
-
// ── 1. createAsync initialization
|
|
71
|
-
results.push(benchSync('createAsync() initialization', () => {
|
|
72
|
-
createAsync(async () => 42)
|
|
73
|
-
}))
|
|
74
|
-
|
|
75
|
-
// ── 2. fetch() - cache hit (TTL)
|
|
76
|
-
const store2 = createStore({
|
|
77
|
-
data: createAsync(async () => 42, { ttl: 10000 })
|
|
78
|
-
})
|
|
79
|
-
// @ts-expect-error - internal access for benchmark
|
|
80
|
-
await store2.fetch('data') // Fill cache
|
|
81
|
-
|
|
82
|
-
results.push(await benchAsync('fetch() - cache hit (TTL)', async () => {
|
|
83
|
-
// @ts-expect-error - internal access for benchmark
|
|
84
|
-
await store2.fetch('data')
|
|
85
|
-
}))
|
|
86
|
-
|
|
87
|
-
// ── 3. fetch() - cache miss (resolved)
|
|
88
|
-
// We use a pre-resolved promise to measure the engine overhead rather than network/timer latency
|
|
89
|
-
const store3 = createStore({
|
|
90
|
-
data: createAsync(() => Promise.resolve(42))
|
|
91
|
-
})
|
|
92
|
-
results.push(await benchAsync('fetch() - cache miss (resolved)', async () => {
|
|
93
|
-
// @ts-expect-error - internal access for benchmark
|
|
94
|
-
await store3.fetch('data')
|
|
95
|
-
}))
|
|
96
|
-
|
|
97
|
-
// ── 4. refetch() overhead
|
|
98
|
-
const store4 = createStore({
|
|
99
|
-
data: createAsync(() => Promise.resolve(42))
|
|
100
|
-
})
|
|
101
|
-
// @ts-expect-error - internal access for benchmark
|
|
102
|
-
await store4.fetch('data')
|
|
103
|
-
results.push(await benchAsync('refetch() - overhead', async () => {
|
|
104
|
-
// @ts-expect-error - internal access for benchmark
|
|
105
|
-
await store4.refetch('data')
|
|
106
|
-
}))
|
|
107
|
-
|
|
108
|
-
// ── 5. Optimistic update - immediate state change
|
|
109
|
-
const store5 = createStore({
|
|
110
|
-
data: createAsync(async (val: number) => {
|
|
111
|
-
await new Promise(r => setTimeout(r, 10))
|
|
112
|
-
return val
|
|
113
|
-
})
|
|
114
|
-
})
|
|
115
|
-
results.push(benchSync('optimistic update - immediate state change', () => {
|
|
116
|
-
// @ts-expect-error - internal access for benchmark
|
|
117
|
-
store5.fetch('data', 100, { optimistic: { data: 100 } })
|
|
118
|
-
}, 10_000))
|
|
119
|
-
|
|
120
|
-
// ── 6. Computed read
|
|
121
|
-
const store6 = createStore({
|
|
122
|
-
n: 1,
|
|
123
|
-
sum: computed((s: { n: number }) => s.n + 1),
|
|
124
|
-
})
|
|
125
|
-
results.push(benchSync('computed read (getState().computed)', () => {
|
|
126
|
-
store6.getState().sum
|
|
127
|
-
}))
|
|
128
|
-
|
|
129
|
-
// ── 7. Computed recompute (one dependency)
|
|
130
|
-
const store7 = createStore({
|
|
131
|
-
x: 0,
|
|
132
|
-
doubled: computed((s: { x: number }) => s.x * 2),
|
|
133
|
-
})
|
|
134
|
-
let x = 0
|
|
135
|
-
results.push(benchSync('computed recompute (1 dep)', () => {
|
|
136
|
-
store7.setState({ x: ++x })
|
|
137
|
-
}, 10_000))
|
|
138
|
-
|
|
139
|
-
// ── 8. Three-level chain recompute
|
|
140
|
-
const store8 = createStore({
|
|
141
|
-
base: 0,
|
|
142
|
-
c1: computed((s: { base: number }) => s.base + 1),
|
|
143
|
-
c2: computed((s: { c1: number }) => (s as { c1: number }).c1 * 2),
|
|
144
|
-
c3: computed((s: { c2: number }) => (s as { c2: number }).c2 + 10),
|
|
145
|
-
})
|
|
146
|
-
let base = 0
|
|
147
|
-
results.push(benchSync('computed three-level chain recompute', () => {
|
|
148
|
-
store8.setState({ base: ++base })
|
|
149
|
-
}, 10_000))
|
|
150
|
-
|
|
151
|
-
// ── Print results
|
|
152
|
-
const colWidths = { operation: 48, averageMs: 22, status: 10 }
|
|
153
|
-
const header =
|
|
154
|
-
'Operation'.padEnd(colWidths.operation) +
|
|
155
|
-
'Average Time'.padEnd(colWidths.averageMs) +
|
|
156
|
-
'Status'
|
|
157
|
-
const divider = '─'.repeat(header.length)
|
|
158
|
-
|
|
159
|
-
console.log(header)
|
|
160
|
-
console.log(divider)
|
|
161
|
-
|
|
162
|
-
let allPassed = true
|
|
163
|
-
for (const r of results) {
|
|
164
|
-
if (r.status.includes('FAIL')) allPassed = false
|
|
165
|
-
console.log(
|
|
166
|
-
r.operation.padEnd(colWidths.operation) +
|
|
167
|
-
r.averageMs.padEnd(colWidths.averageMs) +
|
|
168
|
-
r.status
|
|
169
|
-
)
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
console.log(divider)
|
|
173
|
-
console.log(allPassed
|
|
174
|
-
? '\n✅ All Week 5 benchmarks passed!\n'
|
|
175
|
-
: '\n❌ Some benchmarks failed — investigate performance regressions.\n'
|
|
176
|
-
)
|
|
177
|
-
|
|
178
|
-
if (!allPassed) process.exit(1)
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
runBenchmarks().catch(err => {
|
|
182
|
-
console.error(err)
|
|
183
|
-
process.exit(1)
|
|
184
|
-
})
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
{"total": {"lines":{"total":2273,"covered":2204,"skipped":0,"pct":96.96},"statements":{"total":2273,"covered":2204,"skipped":0,"pct":96.96},"functions":{"total":134,"covered":127,"skipped":0,"pct":94.77},"branches":{"total":466,"covered":441,"skipped":0,"pct":94.63},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
|
2
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/async.ts": {"lines":{"total":239,"covered":236,"skipped":0,"pct":98.74},"functions":{"total":18,"covered":18,"skipped":0,"pct":100},"statements":{"total":239,"covered":236,"skipped":0,"pct":98.74},"branches":{"total":63,"covered":60,"skipped":0,"pct":95.23}}
|
|
3
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/batch.ts": {"lines":{"total":33,"covered":33,"skipped":0,"pct":100},"functions":{"total":3,"covered":3,"skipped":0,"pct":100},"statements":{"total":33,"covered":33,"skipped":0,"pct":100},"branches":{"total":6,"covered":6,"skipped":0,"pct":100}}
|
|
4
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/compose.ts": {"lines":{"total":50,"covered":50,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":50,"covered":50,"skipped":0,"pct":100},"branches":{"total":5,"covered":5,"skipped":0,"pct":100}}
|
|
5
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/computed.ts": {"lines":{"total":187,"covered":187,"skipped":0,"pct":100},"functions":{"total":11,"covered":11,"skipped":0,"pct":100},"statements":{"total":187,"covered":187,"skipped":0,"pct":100},"branches":{"total":42,"covered":42,"skipped":0,"pct":100}}
|
|
6
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/proxy.ts": {"lines":{"total":87,"covered":87,"skipped":0,"pct":100},"functions":{"total":5,"covered":5,"skipped":0,"pct":100},"statements":{"total":87,"covered":87,"skipped":0,"pct":100},"branches":{"total":31,"covered":31,"skipped":0,"pct":100}}
|
|
7
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/registry.ts": {"lines":{"total":67,"covered":67,"skipped":0,"pct":100},"functions":{"total":3,"covered":3,"skipped":0,"pct":100},"statements":{"total":67,"covered":67,"skipped":0,"pct":100},"branches":{"total":8,"covered":5,"skipped":0,"pct":62.5}}
|
|
8
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/store.ts": {"lines":{"total":250,"covered":244,"skipped":0,"pct":97.6},"functions":{"total":15,"covered":15,"skipped":0,"pct":100},"statements":{"total":250,"covered":244,"skipped":0,"pct":97.6},"branches":{"total":63,"covered":62,"skipped":0,"pct":98.41}}
|
|
9
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/types.ts": {"lines":{"total":159,"covered":159,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":159,"covered":159,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
|
10
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/devtools/history.ts": {"lines":{"total":103,"covered":103,"skipped":0,"pct":100},"functions":{"total":6,"covered":6,"skipped":0,"pct":100},"statements":{"total":103,"covered":103,"skipped":0,"pct":100},"branches":{"total":11,"covered":11,"skipped":0,"pct":100}}
|
|
11
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/devtools/index.ts": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":1,"covered":1,"skipped":0,"pct":100}}
|
|
12
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/devtools/redux-bridge.ts": {"lines":{"total":70,"covered":67,"skipped":0,"pct":95.71},"functions":{"total":3,"covered":1,"skipped":0,"pct":33.33},"statements":{"total":70,"covered":67,"skipped":0,"pct":95.71},"branches":{"total":13,"covered":12,"skipped":0,"pct":92.3}}
|
|
13
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/devtools/snapshots.ts": {"lines":{"total":54,"covered":54,"skipped":0,"pct":100},"functions":{"total":5,"covered":5,"skipped":0,"pct":100},"statements":{"total":54,"covered":54,"skipped":0,"pct":100},"branches":{"total":6,"covered":6,"skipped":0,"pct":100}}
|
|
14
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/devtools/withDevtools.ts": {"lines":{"total":195,"covered":177,"skipped":0,"pct":90.76},"functions":{"total":14,"covered":14,"skipped":0,"pct":100},"statements":{"total":195,"covered":177,"skipped":0,"pct":90.76},"branches":{"total":33,"covered":30,"skipped":0,"pct":90.9}}
|
|
15
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/extensions/noop.ts": {"lines":{"total":12,"covered":12,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":12,"covered":12,"skipped":0,"pct":100},"branches":{"total":1,"covered":1,"skipped":0,"pct":100}}
|
|
16
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/persist/debounce.ts": {"lines":{"total":28,"covered":28,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":28,"covered":28,"skipped":0,"pct":100},"branches":{"total":8,"covered":8,"skipped":0,"pct":100}}
|
|
17
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/persist/hydrate.ts": {"lines":{"total":60,"covered":60,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":60,"covered":60,"skipped":0,"pct":100},"branches":{"total":17,"covered":17,"skipped":0,"pct":100}}
|
|
18
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/persist/index.ts": {"lines":{"total":127,"covered":126,"skipped":0,"pct":99.21},"functions":{"total":3,"covered":3,"skipped":0,"pct":100},"statements":{"total":127,"covered":126,"skipped":0,"pct":99.21},"branches":{"total":28,"covered":25,"skipped":0,"pct":89.28}}
|
|
19
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/persist/serialize.ts": {"lines":{"total":60,"covered":60,"skipped":0,"pct":100},"functions":{"total":3,"covered":3,"skipped":0,"pct":100},"statements":{"total":60,"covered":60,"skipped":0,"pct":100},"branches":{"total":15,"covered":13,"skipped":0,"pct":86.66}}
|
|
20
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/persist/adapters/indexedDB.ts": {"lines":{"total":114,"covered":98,"skipped":0,"pct":85.96},"functions":{"total":14,"covered":10,"skipped":0,"pct":71.42},"statements":{"total":114,"covered":98,"skipped":0,"pct":85.96},"branches":{"total":29,"covered":25,"skipped":0,"pct":86.2}}
|
|
21
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/persist/adapters/localStorage.ts": {"lines":{"total":28,"covered":28,"skipped":0,"pct":100},"functions":{"total":4,"covered":4,"skipped":0,"pct":100},"statements":{"total":28,"covered":28,"skipped":0,"pct":100},"branches":{"total":11,"covered":11,"skipped":0,"pct":100}}
|
|
22
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/persist/adapters/memory.ts": {"lines":{"total":26,"covered":26,"skipped":0,"pct":100},"functions":{"total":4,"covered":4,"skipped":0,"pct":100},"statements":{"total":26,"covered":26,"skipped":0,"pct":100},"branches":{"total":6,"covered":6,"skipped":0,"pct":100}}
|
|
23
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/persist/adapters/sessionStorage.ts": {"lines":{"total":28,"covered":28,"skipped":0,"pct":100},"functions":{"total":4,"covered":4,"skipped":0,"pct":100},"statements":{"total":28,"covered":28,"skipped":0,"pct":100},"branches":{"total":10,"covered":10,"skipped":0,"pct":100}}
|
|
24
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/signals/createSignal.ts": {"lines":{"total":81,"covered":80,"skipped":0,"pct":98.76},"functions":{"total":5,"covered":5,"skipped":0,"pct":100},"statements":{"total":81,"covered":80,"skipped":0,"pct":98.76},"branches":{"total":19,"covered":19,"skipped":0,"pct":100}}
|
|
25
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/signals/index.ts": {"lines":{"total":20,"covered":0,"skipped":0,"pct":0},"functions":{"total":1,"covered":0,"skipped":0,"pct":0},"statements":{"total":20,"covered":0,"skipped":0,"pct":0},"branches":{"total":1,"covered":0,"skipped":0,"pct":0}}
|
|
26
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/signals/useSignal.ts": {"lines":{"total":18,"covered":18,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":18,"covered":18,"skipped":0,"pct":100},"branches":{"total":3,"covered":3,"skipped":0,"pct":100}}
|
|
27
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/sync/channel.ts": {"lines":{"total":12,"covered":12,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":12,"covered":12,"skipped":0,"pct":100},"branches":{"total":6,"covered":5,"skipped":0,"pct":83.33}}
|
|
28
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/sync/index.ts": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":1,"covered":1,"skipped":0,"pct":100}}
|
|
29
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/sync/protocol.ts": {"lines":{"total":18,"covered":17,"skipped":0,"pct":94.44},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":18,"covered":17,"skipped":0,"pct":94.44},"branches":{"total":2,"covered":1,"skipped":0,"pct":50}}
|
|
30
|
-
,"/Users/dipanshusrivastava/Desktop/React Flux/packages/storve/src/sync/withSync.ts": {"lines":{"total":147,"covered":147,"skipped":0,"pct":100},"functions":{"total":5,"covered":5,"skipped":0,"pct":100},"statements":{"total":147,"covered":147,"skipped":0,"pct":100},"branches":{"total":27,"covered":25,"skipped":0,"pct":92.59}}
|
|
31
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"indexedDB.cjs","sources":["../../src/persist/adapters/indexedDB.ts"],"sourcesContent":[null],"names":["dbName","STORE_NAME","isServer","indexedDB","dbPromise","getDB","Promise","resolve","request","open","onupgradeneeded","db","result","objectStoreNames","contains","createObjectStore","onsuccess","onerror","console","warn","err","getItem","key","transaction","objectStore","get","setItem","value","put","removeItem","delete"],"mappings":"sCAWM,SAA2BA,EAAiB,kBAChD,MAAMC,EAAa,SACbC,EAAgC,oBAAdC,UACxB,IAAIC,EAAgD,KAEpD,SAASC,IACP,OAAIH,EAAiBI,QAAQC,QAAQ,OACnB,OAAdH,IAEJA,EAAY,IAAIE,QAASC,IACvB,IACE,MAAMC,EAAUL,UAAUM,KAAKT,EAAQ,GAEvCQ,EAAQE,gBAAkB,KACxB,MAAMC,EAAKH,EAAQI,OACdD,EAAGE,iBAAiBC,SAASb,IAChCU,EAAGI,kBAAkBd,IAIzBO,EAAQQ,UAAY,KAClBT,EAAQC,EAAQI,SAGlBJ,EAAQS,QAAU,KAChBC,QAAQC,KAAK,sCAAsCnB,MACnDO,EAAQ,MAEZ,CAAE,MAAOa,GACPF,QAAQC,KAAK,yCAAyCnB,MAAYoB,GAClEb,EAAQ,KACV,KAxB6BH,EA4BjC,CAEA,MAAO,CACL,aAAMiB,CAAQC,GACZ,MAAMX,QAAWN,IACjB,OAAW,OAAPM,EAAoB,KAEjB,IAAIL,QAASC,IAClB,IACE,MAAMgB,EAAcZ,EAAGY,YAAYtB,EAAY,YAEzCO,EADQe,EAAYC,YAAYvB,GAChBwB,IAAIH,GAE1Bd,EAAQQ,UAAY,KAClB,MAAMJ,EAASJ,EAAQI,OAErBL,EADoB,iBAAXK,EACDA,EAEA,OAIZJ,EAAQS,QAAU,KAChBV,EAAQ,MAEZ,CAAE,MACAA,EAAQ,KACV,GAEJ,EAEA,aAAMmB,CAAQJ,EAAaK,GACzB,MAAMhB,QAAWN,IACjB,GAAW,OAAPM,EAEJ,OAAO,IAAIL,QAASC,IAClB,IACE,MAAMgB,EAAcZ,EAAGY,YAAYtB,EAAY,aAEzCO,EADQe,EAAYC,YAAYvB,GAChB2B,IAAID,EAAOL,GAEjCd,EAAQQ,UAAY,IAAMT,IAC1BC,EAAQS,QAAU,IAAMV,GAC1B,CAAE,MACAA,GACF,GAEJ,EAEA,gBAAMsB,CAAWP,GACf,MAAMX,QAAWN,IACjB,GAAW,OAAPM,EAEJ,OAAO,IAAIL,QAASC,IAClB,IACE,MAAMgB,EAAcZ,EAAGY,YAAYtB,EAAY,aAEzCO,EADQe,EAAYC,YAAYvB,GAChB6B,OAAOR,GAE7Bd,EAAQQ,UAAY,IAAMT,IAC1BC,EAAQS,QAAU,IAAMV,GAC1B,CAAE,MACAA,GACF,GAEJ,EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"indexedDB.mjs","sources":["../../src/persist/adapters/indexedDB.ts"],"sourcesContent":[null],"names":["indexedDBAdapter","dbName","STORE_NAME","isServer","indexedDB","dbPromise","getDB","Promise","resolve","request","open","onupgradeneeded","db","result","objectStoreNames","contains","createObjectStore","onsuccess","onerror","console","warn","err","getItem","key","transaction","objectStore","get","setItem","value","put","removeItem","delete"],"mappings":"AAWM,SAAUA,EAAiBC,EAAiB,kBAChD,MAAMC,EAAa,SACbC,EAAgC,oBAAdC,UACxB,IAAIC,EAAgD,KAEpD,SAASC,IACP,OAAIH,EAAiBI,QAAQC,QAAQ,OACnB,OAAdH,IAEJA,EAAY,IAAIE,QAASC,IACvB,IACE,MAAMC,EAAUL,UAAUM,KAAKT,EAAQ,GAEvCQ,EAAQE,gBAAkB,KACxB,MAAMC,EAAKH,EAAQI,OACdD,EAAGE,iBAAiBC,SAASb,IAChCU,EAAGI,kBAAkBd,IAIzBO,EAAQQ,UAAY,KAClBT,EAAQC,EAAQI,SAGlBJ,EAAQS,QAAU,KAChBC,QAAQC,KAAK,sCAAsCnB,MACnDO,EAAQ,MAEZ,CAAE,MAAOa,GACPF,QAAQC,KAAK,yCAAyCnB,MAAYoB,GAClEb,EAAQ,KACV,KAxB6BH,EA4BjC,CAEA,MAAO,CACL,aAAMiB,CAAQC,GACZ,MAAMX,QAAWN,IACjB,OAAW,OAAPM,EAAoB,KAEjB,IAAIL,QAASC,IAClB,IACE,MAAMgB,EAAcZ,EAAGY,YAAYtB,EAAY,YAEzCO,EADQe,EAAYC,YAAYvB,GAChBwB,IAAIH,GAE1Bd,EAAQQ,UAAY,KAClB,MAAMJ,EAASJ,EAAQI,OAErBL,EADoB,iBAAXK,EACDA,EAEA,OAIZJ,EAAQS,QAAU,KAChBV,EAAQ,MAEZ,CAAE,MACAA,EAAQ,KACV,GAEJ,EAEA,aAAMmB,CAAQJ,EAAaK,GACzB,MAAMhB,QAAWN,IACjB,GAAW,OAAPM,EAEJ,OAAO,IAAIL,QAASC,IAClB,IACE,MAAMgB,EAAcZ,EAAGY,YAAYtB,EAAY,aAEzCO,EADQe,EAAYC,YAAYvB,GAChB2B,IAAID,EAAOL,GAEjCd,EAAQQ,UAAY,IAAMT,IAC1BC,EAAQS,QAAU,IAAMV,GAC1B,CAAE,MACAA,GACF,GAEJ,EAEA,gBAAMsB,CAAWP,GACf,MAAMX,QAAWN,IACjB,GAAW,OAAPM,EAEJ,OAAO,IAAIL,QAASC,IAClB,IACE,MAAMgB,EAAcZ,EAAGY,YAAYtB,EAAY,aAEzCO,EADQe,EAAYC,YAAYvB,GAChB6B,OAAOR,GAE7Bd,EAAQQ,UAAY,IAAMT,IAC1BC,EAAQS,QAAU,IAAMV,GAC1B,CAAE,MACAA,GACF,GAEJ,EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"localStorage.cjs","sources":["../../src/persist/adapters/localStorage.ts"],"sourcesContent":[null],"names":["isServer","window","getItem","key","localStorage","setItem","value","removeItem"],"mappings":"oDAWE,MAAMA,EAA6B,oBAAXC,OAExB,MAAO,CACLC,QAAQC,GACFH,EAAiB,KACdC,OAAOG,aAAaF,QAAQC,GAErC,OAAAE,CAAQF,EAAaG,GACfN,GACJC,OAAOG,aAAaC,QAAQF,EAAKG,EACnC,EACA,UAAAC,CAAWJ,GACLH,GACJC,OAAOG,aAAaG,WAAWJ,EACjC,EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"localStorage.mjs","sources":["../../src/persist/adapters/localStorage.ts"],"sourcesContent":[null],"names":["localStorageAdapter","isServer","window","getItem","key","localStorage","setItem","value","removeItem"],"mappings":"SAUgBA,IACd,MAAMC,EAA6B,oBAAXC,OAExB,MAAO,CACLC,QAAQC,GACFH,EAAiB,KACdC,OAAOG,aAAaF,QAAQC,GAErC,OAAAE,CAAQF,EAAaG,GACfN,GACJC,OAAOG,aAAaC,QAAQF,EAAKG,EACnC,EACA,UAAAC,CAAWJ,GACLH,GACJC,OAAOG,aAAaG,WAAWJ,EACjC,EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory.cjs","sources":["../../src/persist/adapters/memory.ts"],"sourcesContent":[null],"names":["store","Map","getItem","key","value","get","undefined","setItem","set","removeItem","delete"],"mappings":"8CAWE,MAAMA,EAAQ,IAAIC,IAElB,MAAO,CACL,OAAAC,CAAQC,GACN,MAAMC,EAAQJ,EAAMK,IAAIF,GACxB,YAAiBG,IAAVF,EAAsBA,EAAQ,IACvC,EACA,OAAAG,CAAQJ,EAAaC,GACnBJ,EAAMQ,IAAIL,EAAKC,EACjB,EACA,UAAAK,CAAWN,GACTH,EAAMU,OAAOP,EACf,EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory.mjs","sources":["../../src/persist/adapters/memory.ts"],"sourcesContent":[null],"names":["memoryAdapter","store","Map","getItem","key","value","get","undefined","setItem","set","removeItem","delete"],"mappings":"SAUgBA,IACd,MAAMC,EAAQ,IAAIC,IAElB,MAAO,CACL,OAAAC,CAAQC,GACN,MAAMC,EAAQJ,EAAMK,IAAIF,GACxB,YAAiBG,IAAVF,EAAsBA,EAAQ,IACvC,EACA,OAAAG,CAAQJ,EAAaC,GACnBJ,EAAMQ,IAAIL,EAAKC,EACjB,EACA,UAAAK,CAAWN,GACTH,EAAMU,OAAOP,EACf,EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sessionStorage.cjs","sources":["../../src/persist/adapters/sessionStorage.ts"],"sourcesContent":[null],"names":["isServer","window","getItem","key","sessionStorage","setItem","value","removeItem"],"mappings":"sDAWE,MAAMA,EAA6B,oBAAXC,OAExB,MAAO,CACLC,QAAQC,GACFH,EAAiB,KACdC,OAAOG,eAAeF,QAAQC,GAEvC,OAAAE,CAAQF,EAAaG,GACfN,GACJC,OAAOG,eAAeC,QAAQF,EAAKG,EACrC,EACA,UAAAC,CAAWJ,GACLH,GACJC,OAAOG,eAAeG,WAAWJ,EACnC,EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sessionStorage.mjs","sources":["../../src/persist/adapters/sessionStorage.ts"],"sourcesContent":[null],"names":["sessionStorageAdapter","isServer","window","getItem","key","sessionStorage","setItem","value","removeItem"],"mappings":"SAUgBA,IACd,MAAMC,EAA6B,oBAAXC,OAExB,MAAO,CACLC,QAAQC,GACFH,EAAiB,KACdC,OAAOG,eAAeF,QAAQC,GAEvC,OAAAE,CAAQF,EAAaG,GACfN,GACJC,OAAOG,eAAeC,QAAQF,EAAKG,EACrC,EACA,UAAAC,CAAWJ,GACLH,GACJC,OAAOG,eAAeG,WAAWJ,EACnC,EAEJ"}
|