@zakkster/lite-project 1.1.0 → 1.1.1
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/CHANGELOG.md +35 -0
- package/Project.d.ts +3 -1
- package/Project.js +3 -1
- package/package.json +15 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,41 @@
|
|
|
3
3
|
All notable changes to `@zakkster/lite-project` are documented here. The format
|
|
4
4
|
follows Keep a Changelog; this project adheres to semantic versioning.
|
|
5
5
|
|
|
6
|
+
## [1.1.1] - 2026-09-03
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- **`VERSION`** export from `Project.js` (declared in `Project.d.ts`), kept in
|
|
11
|
+
exact sync with `package.json`, so a consumer can read the shipped version at
|
|
12
|
+
runtime.
|
|
13
|
+
- Gated torture harness under `test/torture/` (dev-only; not shipped). Seven
|
|
14
|
+
tiers run strictly sequentially behind `node --expose-gc test/torture.mjs`:
|
|
15
|
+
T0 metamorphic laws, T1 degenerate inputs, T4 reconcile door, T5 oracle fuzz,
|
|
16
|
+
T6 zero-alloc gate, T7 retention soak, T9 controls. Gate RULES:
|
|
17
|
+
`maxMajor 0`, `maxPauseMs 4`, `maxArrayBuffersGrowth 0` under `stabilize:"deep"`.
|
|
18
|
+
Witnessed on a green run (default seed):
|
|
19
|
+
`leak=size 0/0 findings=0 warnings=0 | gc major=0 minor=0 maxMs=0.00 |
|
|
20
|
+
retained=0.00 B/op growths=0`
|
|
21
|
+
(the `alloc=` per-op heap-bracket reading prints as-is, `n/a` when
|
|
22
|
+
inconclusive; the binding alloc gates are `checkNoGc`, the zero-retention
|
|
23
|
+
gate below, and the structural deltas below).
|
|
24
|
+
The get/set/clear triangle on warmed keys leaves `poolGrowths` and
|
|
25
|
+
`totalAllocations` deltas both 0 over 200k toggles; 4096 build/tear-down cycles
|
|
26
|
+
return the leak tracker to `size()===0`; `prune()` reclaims >= 19990 of 20000
|
|
27
|
+
unbounded-read slots.
|
|
28
|
+
- Retained-allocation gate (`measureAllocs` + `checkAllocs` with
|
|
29
|
+
`maxBytesPerCall: 0`, the profiler's zero-retention assertion): the warmed
|
|
30
|
+
get/set/clear triangle retains 0 B/call (min over 8 batches), catching
|
|
31
|
+
arbitrary JS-object retention that the asynchronously-delivered `gc.major`
|
|
32
|
+
count cannot see; an unsettled or inconclusive reading fails the gate.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- Peer dependency floor is now `@zakkster/lite-signal ^1.5.0` (was a pinned
|
|
37
|
+
preview build). No behaviour change: 1.5.0 is the current stable line and
|
|
38
|
+
supplies every surface this package uses (`batch` 1.0.0, `hasObservers` 1.1.4,
|
|
39
|
+
`createRoot` 1.5.0).
|
|
40
|
+
|
|
6
41
|
## [1.1.0] - 2026-07-16
|
|
7
42
|
|
|
8
43
|
### Added
|
package/Project.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
// Type declarations for @zakkster/lite-project v1.1.
|
|
1
|
+
// Type declarations for @zakkster/lite-project v1.1.1
|
|
2
2
|
// Zero-GC projections for @zakkster/lite-signal.
|
|
3
3
|
// (c) 2026 Zahary Shinikchiev <shinikchiev@yahoo.com> -- MIT
|
|
4
4
|
|
|
5
|
+
export const VERSION: string;
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* A reactive keyed source a projection can wrap. Any object with a reactive
|
|
7
9
|
* `get(key)` and a `set(key, value)` qualifies (the built-in `keyedStore`, a
|
package/Project.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @zakkster/lite-project v1.1.
|
|
2
|
+
* @zakkster/lite-project v1.1.1 -- zero-GC projections for @zakkster/lite-signal.
|
|
3
3
|
* -----------------------------------------------------------------------------
|
|
4
4
|
* A projection is a granular, derived, NON-MUTATING reactive view over a keyed
|
|
5
5
|
* source: a lens that can carry ephemeral overlays (optimistic edits, merges,
|
|
@@ -59,6 +59,8 @@ import {
|
|
|
59
59
|
hasObservers as _hasObservers,
|
|
60
60
|
} from "@zakkster/lite-signal";
|
|
61
61
|
|
|
62
|
+
export const VERSION = "1.1.1";
|
|
63
|
+
|
|
62
64
|
// Module-level sentinel for "this key has no overlay". A unique symbol, never a
|
|
63
65
|
// per-operation allocation. Stored directly in the overlay signal's value slot, so
|
|
64
66
|
// "absent" and "present with value V" share one node and one field -- no boxing.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zakkster/lite-project",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Zero-GC projections for @zakkster/lite-signal: granular, derived, non-mutating reactive overlays with commit / revert / reconcile, and draft adapters for lite-store and lite-room.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./Project.js",
|
|
@@ -24,11 +24,18 @@
|
|
|
24
24
|
"LICENSE.txt"
|
|
25
25
|
],
|
|
26
26
|
"scripts": {
|
|
27
|
-
"test": "node --test",
|
|
28
|
-
"
|
|
27
|
+
"test": "node --test test/*_test.mjs",
|
|
28
|
+
"torture": "node --expose-gc test/torture.mjs",
|
|
29
|
+
"verify": "npm test && npm run torture",
|
|
30
|
+
"prepublishOnly": "npm run verify"
|
|
29
31
|
},
|
|
30
32
|
"peerDependencies": {
|
|
31
|
-
"@zakkster/lite-signal": "^1.
|
|
33
|
+
"@zakkster/lite-signal": "^1.5.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@zakkster/lite-gc-profiler": "^1.16.0",
|
|
37
|
+
"@zakkster/lite-leak": "^1.10.0",
|
|
38
|
+
"@zakkster/lite-signal": "^1.5.0"
|
|
32
39
|
},
|
|
33
40
|
"keywords": [
|
|
34
41
|
"reactive",
|
|
@@ -53,6 +60,10 @@
|
|
|
53
60
|
"url": "git+https://github.com/PeshoVurtoleta/lite-project.git"
|
|
54
61
|
},
|
|
55
62
|
"homepage": "https://github.com/PeshoVurtoleta/lite-project#readme",
|
|
63
|
+
"bugs": {
|
|
64
|
+
"url": "https://github.com/PeshoVurtoleta/lite-project/issues",
|
|
65
|
+
"email": "shinikchiev@yahoo.com"
|
|
66
|
+
},
|
|
56
67
|
"funding": {
|
|
57
68
|
"type": "github",
|
|
58
69
|
"url": "https://github.com/sponsors/PeshoVurtoleta"
|