pi-mega-compact 0.16.2 → 0.17.0
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/dist/config/vector-cortex.js +81 -0
- package/dist/extensions/dashboard-server/api-contracts/endpoints/registry-ext.js +30 -0
- package/dist/extensions/dashboard-server/api-contracts/endpoints/registry.js +4 -14
- package/dist/extensions/dashboard-server/api-contracts/vector-cortex.js +12 -0
- package/dist/extensions/dashboard-server/routes-rag-settings-helpers.js +10 -0
- package/dist/extensions/dashboard-server/routes-vector-cortex.js +292 -0
- package/dist/extensions/dashboard-server/routes.js +1 -0
- package/dist/extensions/dashboard-server/server.js +9 -1
- package/dist/extensions/mega-events/context-handler.js +11 -0
- package/dist/extensions/mega-runtime/vector-cortex-ledger.js +131 -0
- package/dist/extensions/mega-runtime/vector-cortex-safety.js +100 -0
- package/dist/src/config/vector-cortex.js +81 -0
- package/dist/src/config.js +6 -0
- package/dist/src/httpEmbedder.js +136 -1
- package/dist/src/vector-cortex/eval/annotations.js +41 -0
- package/dist/src/vector-cortex/eval/metrics.js +86 -0
- package/dist/src/vector-cortex/eval/observer.js +61 -0
- package/dist/src/vector-cortex/eval/persist.js +67 -0
- package/dist/src/vector-cortex/eval/reader.js +29 -0
- package/dist/src/vector-cortex/eval/types.js +33 -0
- package/dist/src/vector-cortex/ledger/adapter.js +55 -0
- package/dist/src/vector-cortex/ledger/compat-journal.js +206 -0
- package/dist/src/vector-cortex/ledger/emit.js +53 -0
- package/dist/src/vector-cortex/ledger/event-codec.js +72 -0
- package/dist/src/vector-cortex/ledger/event-codecB.js +76 -0
- package/dist/src/vector-cortex/ledger/sqlite.js +200 -0
- package/dist/src/vector-cortex/ledger/store.js +184 -0
- package/dist/src/vector-cortex/ledger/types.js +52 -0
- package/dist/src/vector-cortex/ledger/validator.js +117 -0
- package/dist/src/vector-cortex/migrations/effective-cut-v2.js +103 -0
- package/dist/src/vector-cortex/migrations/occurrence-v2.js +139 -0
- package/dist/src/vector-cortex/replay/cut.js +123 -0
- package/dist/src/vector-cortex/replay/emit.js +58 -0
- package/dist/src/vector-cortex/replay/replay.js +260 -0
- package/dist/src/vector-cortex/replay/replayB.js +73 -0
- package/dist/src/vector-cortex/replay/types.js +52 -0
- package/dist/src/vector-cortex/resilience/breaker-core.js +359 -0
- package/dist/src/vector-cortex/resilience/breaker.js +12 -0
- package/dist/src/vector-cortex/resilience/emit.js +56 -0
- package/dist/src/vector-cortex/resilience/spool-core.js +347 -0
- package/dist/src/vector-cortex/resilience/spool.js +12 -0
- package/dist/src/vector-cortex/resilience/types.js +32 -0
- package/dist/vector-cortex/eval/annotations.js +41 -0
- package/dist/vector-cortex/eval/metrics.js +86 -0
- package/dist/vector-cortex/eval/observer.js +61 -0
- package/dist/vector-cortex/eval/persist.js +67 -0
- package/dist/vector-cortex/eval/reader.js +29 -0
- package/dist/vector-cortex/eval/types.js +33 -0
- package/dist/vector-cortex/ledger/adapter.js +55 -0
- package/dist/vector-cortex/ledger/compat-journal.js +206 -0
- package/dist/vector-cortex/ledger/emit.js +53 -0
- package/dist/vector-cortex/ledger/event-codec.js +72 -0
- package/dist/vector-cortex/ledger/event-codecB.js +76 -0
- package/dist/vector-cortex/ledger/sqlite.js +200 -0
- package/dist/vector-cortex/ledger/store.js +184 -0
- package/dist/vector-cortex/ledger/types.js +52 -0
- package/dist/vector-cortex/ledger/validator.js +117 -0
- package/dist/vector-cortex/migrations/effective-cut-v2.js +103 -0
- package/dist/vector-cortex/migrations/occurrence-v2.js +139 -0
- package/dist/vector-cortex/replay/cut.js +123 -0
- package/dist/vector-cortex/replay/emit.js +58 -0
- package/dist/vector-cortex/replay/replay.js +260 -0
- package/dist/vector-cortex/replay/replayB.js +73 -0
- package/dist/vector-cortex/replay/types.js +52 -0
- package/dist/vector-cortex/resilience/breaker-core.js +359 -0
- package/dist/vector-cortex/resilience/breaker.js +12 -0
- package/dist/vector-cortex/resilience/emit.js +56 -0
- package/dist/vector-cortex/resilience/spool-core.js +347 -0
- package/dist/vector-cortex/resilience/spool.js +12 -0
- package/dist/vector-cortex/resilience/types.js +32 -0
- package/extensions/dashboard-client/dist/assets/{AreaChart-Y_X0Bbjd.js → AreaChart-CAnWomhw.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{AreaChart-Y_X0Bbjd.js.map → AreaChart-CAnWomhw.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{BarChart-B9XDb-Ob.js → BarChart-lZ2-s71k.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{BarChart-B9XDb-Ob.js.map → BarChart-lZ2-s71k.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{CacheTab-BUGVb1G1.js → CacheTab-BL2Thh66.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{CacheTab-BUGVb1G1.js.map → CacheTab-BL2Thh66.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{EventsTab-dOqLYTsy.js → EventsTab-DEh2Z9fp.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{EventsTab-dOqLYTsy.js.map → EventsTab-DEh2Z9fp.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{HealthTab-c2vezKg1.js → HealthTab-DTwKclxk.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{HealthTab-c2vezKg1.js.map → HealthTab-DTwKclxk.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MaintenanceTab-bQYHIcdx.js → MaintenanceTab-DDfBEdbX.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MaintenanceTab-bQYHIcdx.js.map → MaintenanceTab-DDfBEdbX.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MemoryMapTab-2L8pH6y2.js → MemoryMapTab-Dgfmg-0Q.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MemoryMapTab-2L8pH6y2.js.map → MemoryMapTab-Dgfmg-0Q.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MetricsTab-CzUx1jpo.js → MetricsTab-DOcMm0Tx.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MetricsTab-CzUx1jpo.js.map → MetricsTab-DOcMm0Tx.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{OverviewTab-eCNoaclv.js → OverviewTab-DHT5aoHg.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{OverviewTab-eCNoaclv.js.map → OverviewTab-DHT5aoHg.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{ReposTab-tb0IW3NF.js → ReposTab-CGAmtR_c.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{ReposTab-tb0IW3NF.js.map → ReposTab-CGAmtR_c.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{SessionsTab-C-IoLw5h.js → SessionsTab-BIgx6iKT.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{SessionsTab-C-IoLw5h.js.map → SessionsTab-BIgx6iKT.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{SetupTab-BvmFi8gf.js → SetupTab-ADghKuEI.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{SetupTab-BvmFi8gf.js.map → SetupTab-ADghKuEI.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{TimeSavedCard-DBH-cOlA.js → TimeSavedCard-C33UiiOM.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TimeSavedCard-DBH-cOlA.js.map → TimeSavedCard-C33UiiOM.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{TurnsTab-DBMgmvnX.js → TurnsTab-DdbL9wPN.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TurnsTab-DBMgmvnX.js.map → TurnsTab-DdbL9wPN.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/VectorCortexTab-Cl1pbEdR.js +2 -0
- package/extensions/dashboard-client/dist/assets/VectorCortexTab-Cl1pbEdR.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{WikiTab-1LcQrXk3.js → WikiTab-Ch00OFKs.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{WikiTab-1LcQrXk3.js.map → WikiTab-Ch00OFKs.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{button-DtEsZTUE.js → button-ByeEdo2g.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{button-DtEsZTUE.js.map → button-ByeEdo2g.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{card-DcfTmw-4.js → card-DesoLXvc.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{card-DcfTmw-4.js.map → card-DesoLXvc.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{generateCategoricalChart-BsIxUDyw.js → generateCategoricalChart-CCAB7Iz4.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{generateCategoricalChart-BsIxUDyw.js.map → generateCategoricalChart-CCAB7Iz4.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{index-B93cewiX.js → index-B6cgyAPr.js} +34 -29
- package/extensions/dashboard-client/dist/assets/index-B6cgyAPr.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/index-CfvziyBi.css +1 -0
- package/extensions/dashboard-client/dist/assets/{switch-Bowd7jCD.js → switch-DIZC-oe-.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{switch-Bowd7jCD.js.map → switch-DIZC-oe-.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{toggle-Bo7kJZ4u.js → toggle-CIoWaH2e.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{toggle-Bo7kJZ4u.js.map → toggle-CIoWaH2e.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{useSSE-zNhb0c3u.js → useSSE-Bv4943l1.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{useSSE-zNhb0c3u.js.map → useSSE-Bv4943l1.js.map} +1 -1
- package/extensions/dashboard-client/dist/index.html +2 -2
- package/extensions/dashboard-client/src/App.tsx +2 -0
- package/extensions/dashboard-client/src/api/vector-cortex.ts +54 -0
- package/extensions/dashboard-client/src/tabs/VectorCortexTab.tsx +272 -0
- package/extensions/dashboard-client/src/tabs/registry.ts +4 -1
- package/extensions/dashboard-client/src/types/vector-cortex.ts +84 -0
- package/extensions/dashboard-server/api-contracts/endpoints/registry-ext.ts +67 -0
- package/extensions/dashboard-server/api-contracts/endpoints/registry.ts +4 -21
- package/extensions/dashboard-server/api-contracts/index.ts +3 -0
- package/extensions/dashboard-server/api-contracts/vector-cortex.ts +136 -0
- package/extensions/dashboard-server/routes-rag-settings-helpers.ts +35 -0
- package/extensions/dashboard-server/routes-vector-cortex.ts +332 -0
- package/extensions/dashboard-server/routes.ts +6 -0
- package/extensions/dashboard-server/server.ts +8 -0
- package/extensions/mega-events/context-handler.ts +16 -0
- package/extensions/mega-runtime/vector-cortex-ledger.ts +165 -0
- package/extensions/mega-runtime/vector-cortex-safety.ts +181 -0
- package/package.json +2 -1
- package/src/config/vector-cortex.ts +87 -0
- package/src/config.ts +27 -0
- package/src/httpEmbedder.ts +134 -1
- package/src/vector-cortex/eval/annotations.ts +70 -0
- package/src/vector-cortex/eval/metrics.ts +113 -0
- package/src/vector-cortex/eval/observer.ts +86 -0
- package/src/vector-cortex/eval/persist.ts +73 -0
- package/src/vector-cortex/eval/reader.ts +45 -0
- package/src/vector-cortex/eval/types.ts +89 -0
- package/src/vector-cortex/ledger/adapter.ts +71 -0
- package/src/vector-cortex/ledger/compat-journal.ts +234 -0
- package/src/vector-cortex/ledger/emit.ts +86 -0
- package/src/vector-cortex/ledger/event-codec.ts +79 -0
- package/src/vector-cortex/ledger/event-codecB.ts +87 -0
- package/src/vector-cortex/ledger/sqlite.ts +265 -0
- package/src/vector-cortex/ledger/store.ts +380 -0
- package/src/vector-cortex/ledger/types.ts +141 -0
- package/src/vector-cortex/ledger/validator.ts +124 -0
- package/src/vector-cortex/migrations/effective-cut-v2.ts +149 -0
- package/src/vector-cortex/migrations/occurrence-v2.ts +192 -0
- package/src/vector-cortex/replay/cut.ts +169 -0
- package/src/vector-cortex/replay/emit.ts +89 -0
- package/src/vector-cortex/replay/replay.ts +308 -0
- package/src/vector-cortex/replay/replayB.ts +97 -0
- package/src/vector-cortex/replay/types.ts +145 -0
- package/src/vector-cortex/resilience/breaker-core.ts +444 -0
- package/src/vector-cortex/resilience/breaker.ts +22 -0
- package/src/vector-cortex/resilience/emit.ts +99 -0
- package/src/vector-cortex/resilience/spool-core.ts +411 -0
- package/src/vector-cortex/resilience/spool.ts +22 -0
- package/src/vector-cortex/resilience/types.ts +158 -0
- package/extensions/dashboard-client/dist/assets/index-B93cewiX.js.map +0 -1
- package/extensions/dashboard-client/dist/assets/index-C_tCbOI0.css +0 -1
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vector-cortex/resilience/spool-core.ts — VC0C durable spool implementation (VC0C).
|
|
3
|
+
*
|
|
4
|
+
* Implementation file behind the `spool.ts` factory barrel. See spool.ts for the
|
|
5
|
+
* public surface; this file owns the TRIAD_RESILIENCE §spool append/fsync/ack
|
|
6
|
+
* protocol.
|
|
7
|
+
*
|
|
8
|
+
* Implements TRIAD_RESILIENCE.md §Spool protocol as the mode-B independent,
|
|
9
|
+
* deterministic, local disk spool that derives directly from authority:
|
|
10
|
+
*
|
|
11
|
+
* - One spool file per session: `spool-<session>.spool` under a state dir.
|
|
12
|
+
* - Header records schema, session, first sequence, and the prior durable
|
|
13
|
+
* contiguous high-water.
|
|
14
|
+
* - Frames are length-prefixed binary records carrying seq + eventId +
|
|
15
|
+
* original bytes + SHA-256 + CRC32C (Castagnoli). A frame is FSYNC'd to disk
|
|
16
|
+
* before the writer acknowledges `SPOOLED`; only a durable ledger commit
|
|
17
|
+
* (after `drain` inserts into authority and the ledger is fsynced) returns
|
|
18
|
+
* `SPOOL_COMMITTED` and advances the contiguous high-water.
|
|
19
|
+
* - `drain` strictly sorts frames by `(seq, eventId)`, rejects gaps/conflicts,
|
|
20
|
+
* inserts idempotently by `(eventId, digest)`, appends an fsynced ack frame,
|
|
21
|
+
* then advances contiguous high-water. A duplicate with the same id+digest is
|
|
22
|
+
* acknowledged (`SPOOL_IDEMPOTENT_ACK`); the same id with a DIFFERENT digest
|
|
23
|
+
* is `SPOOL_MANUAL_HALT`.
|
|
24
|
+
* - Crash before an ack safely replays: on reopen, frames after the last ack
|
|
25
|
+
* are re-drained (the ack frame carries the committed seq).
|
|
26
|
+
* - A derived builder may never read beyond the durable contiguous authority
|
|
27
|
+
* high-water; during an authority outage the high-water freezes (drain cannot
|
|
28
|
+
* commit) even while the spool keeps accepting frames.
|
|
29
|
+
*
|
|
30
|
+
* LOCAL ONLY: filesystem + node:crypto, zero network (PREVENT-PI-004); no `any`
|
|
31
|
+
* (PREVENT-011); synchronous durable writes (fsyncSync) per the spec.
|
|
32
|
+
*/
|
|
33
|
+
import { createHash } from "node:crypto";
|
|
34
|
+
import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, writeSync } from "node:fs";
|
|
35
|
+
import { basename, join } from "node:path";
|
|
36
|
+
export const SPOOL_SCHEMA = "spool-v1";
|
|
37
|
+
/** Sentinel eventId of an acknowledgement frame (carries the committed seq). */
|
|
38
|
+
export const ACK_EVENT_ID = "__ack__";
|
|
39
|
+
/** Fixed on-disk width of the digest field: "sha256:" + 64 hex chars = 71 bytes. */
|
|
40
|
+
export const DIGEST_FIELD_LEN = "sha256:".length + 64;
|
|
41
|
+
/** CRC32C (Castagnoli) table — seeded once. */
|
|
42
|
+
const CRC_TABLE = (() => {
|
|
43
|
+
const t = new Array(256);
|
|
44
|
+
for (let n = 0; n < 256; n++) {
|
|
45
|
+
let c = n;
|
|
46
|
+
for (let k = 0; k < 8; k++)
|
|
47
|
+
c = c & 1 ? 0x82f63b78 ^ (c >>> 1) : c >>> 1;
|
|
48
|
+
t[n] = c >>> 0;
|
|
49
|
+
}
|
|
50
|
+
return t;
|
|
51
|
+
})();
|
|
52
|
+
export function crc32c(bytes) {
|
|
53
|
+
let c = 0xffffffff;
|
|
54
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
55
|
+
c = CRC_TABLE[(c ^ bytes[i]) & 0xff] ^ (c >>> 8);
|
|
56
|
+
}
|
|
57
|
+
return (c ^ 0xffffffff) >>> 0;
|
|
58
|
+
}
|
|
59
|
+
export function sha256Hex(bytes) {
|
|
60
|
+
return createHash("sha256").update(bytes).digest("hex");
|
|
61
|
+
}
|
|
62
|
+
export function createSpool(opts) {
|
|
63
|
+
mkdirSync(opts.dir, { recursive: true });
|
|
64
|
+
const bySession = new Map();
|
|
65
|
+
return {
|
|
66
|
+
session(session) {
|
|
67
|
+
let s = bySession.get(session);
|
|
68
|
+
if (!s) {
|
|
69
|
+
s = new SessionSpoolImpl(join(opts.dir, `spool-${basename(session)}.spool`), session, opts);
|
|
70
|
+
bySession.set(session, s);
|
|
71
|
+
}
|
|
72
|
+
return s;
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Durably manages one session's spool file. Fully synchronous: every append is
|
|
78
|
+
* fsynced before acknowledging; every committed drain appends+fsyncs an ack
|
|
79
|
+
* frame. Reopen parses the header + frames, stops at a torn trailing frame
|
|
80
|
+
* (crash mid-write => unacknowledged tail), and drains only frames strictly
|
|
81
|
+
* beyond the recovered contiguous high-water — crash before ack safely replays.
|
|
82
|
+
*/
|
|
83
|
+
class SessionSpoolImpl {
|
|
84
|
+
session;
|
|
85
|
+
file;
|
|
86
|
+
outage;
|
|
87
|
+
reporter;
|
|
88
|
+
header;
|
|
89
|
+
frames = [];
|
|
90
|
+
ackedSeq;
|
|
91
|
+
frontierFrozen = false;
|
|
92
|
+
constructor(file, session, opts) {
|
|
93
|
+
this.file = file;
|
|
94
|
+
this.session = session;
|
|
95
|
+
this.outage = opts.authorityOutage ?? (() => false);
|
|
96
|
+
this.reporter = opts.reporter;
|
|
97
|
+
mkdirSync(join(file, ".."), { recursive: true });
|
|
98
|
+
if (existsSync(file)) {
|
|
99
|
+
const parsed = this.readExisting();
|
|
100
|
+
this.header = parsed.header;
|
|
101
|
+
this.frames = parsed.frames;
|
|
102
|
+
this.ackedSeq = parsed.highWater;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.header = { schema: SPOOL_SCHEMA, session, firstSeq: 1, priorHighWater: "0" };
|
|
106
|
+
this.ackedSeq = 0n;
|
|
107
|
+
this.writeHeader();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
writeHeader() {
|
|
111
|
+
const fd = openSync(this.file, "a");
|
|
112
|
+
try {
|
|
113
|
+
writeSync(fd, Buffer.from(encodeHeader(this.header), "utf8"));
|
|
114
|
+
fsyncSync(fd);
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
closeSync(fd);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** Reopen: parse header + frames; recover the last contiguous ack high-water. */
|
|
121
|
+
readExisting() {
|
|
122
|
+
const raw = readFileSync(this.file);
|
|
123
|
+
const nl = raw.indexOf(10);
|
|
124
|
+
if (nl < 0) {
|
|
125
|
+
return { header: { schema: SPOOL_SCHEMA, session: this.session, firstSeq: 1, priorHighWater: "0" }, frames: [], highWater: 0n };
|
|
126
|
+
}
|
|
127
|
+
const header = parseHeader(raw.subarray(0, nl).toString("utf8"));
|
|
128
|
+
let highWater = BigInt(header.priorHighWater);
|
|
129
|
+
const frames = [];
|
|
130
|
+
let off = nl + 1;
|
|
131
|
+
for (;;) {
|
|
132
|
+
if (off >= raw.length)
|
|
133
|
+
break;
|
|
134
|
+
const f = tryParseFrame(raw.subarray(off));
|
|
135
|
+
if (!f)
|
|
136
|
+
break; // torn/unacknowledged tail — stop, replay from last ack
|
|
137
|
+
const frame = { ...f, session: this.session };
|
|
138
|
+
if (frame.eventId === ACK_EVENT_ID) {
|
|
139
|
+
highWater = frame.seq; // ack frame carries the committed seq
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
frames.push(frame);
|
|
143
|
+
}
|
|
144
|
+
const len = raw.readUInt32LE(off);
|
|
145
|
+
off += 4 + len;
|
|
146
|
+
}
|
|
147
|
+
// Only frames strictly beyond the recovered high-water need re-drain.
|
|
148
|
+
const unacked = frames.filter((f) => f.seq > highWater);
|
|
149
|
+
return { header, frames: unacked, highWater };
|
|
150
|
+
}
|
|
151
|
+
append(input) {
|
|
152
|
+
const digest = input.digest ?? `sha256:${sha256Hex(input.bytes)}`;
|
|
153
|
+
const frame = {
|
|
154
|
+
session: this.session,
|
|
155
|
+
seq: input.seq,
|
|
156
|
+
eventId: input.eventId,
|
|
157
|
+
digest,
|
|
158
|
+
bytes: input.bytes,
|
|
159
|
+
crc32c: crc32c(input.bytes),
|
|
160
|
+
};
|
|
161
|
+
const framed = encodeFrame(frame);
|
|
162
|
+
// Fsync BEFORE acknowledging SPOOLED.
|
|
163
|
+
const fd = openSync(this.file, "a");
|
|
164
|
+
try {
|
|
165
|
+
writeSync(fd, framed, 0, framed.length);
|
|
166
|
+
fsyncSync(fd);
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
closeSync(fd);
|
|
170
|
+
}
|
|
171
|
+
this.frames.push(frame);
|
|
172
|
+
return { verdict: "SPOOLED", seq: input.seq };
|
|
173
|
+
}
|
|
174
|
+
drain(insert) {
|
|
175
|
+
const tail = this.frames;
|
|
176
|
+
if (tail.length === 0)
|
|
177
|
+
return { verdict: "SPOOL_COMMITTED", committedSeq: this.ackedSeq };
|
|
178
|
+
// Strictly sort by (seq, eventId). NOTE: we do NOT clear this.frames up front
|
|
179
|
+
// (VC0C-Q04) — the queue is only cleared once every insert has succeeded and
|
|
180
|
+
// the ack is durably appended. If any insert throws (rather than returning a
|
|
181
|
+
// conflict), the unacked tail must be retained for a later retry, not dropped.
|
|
182
|
+
const sorted = [...tail].sort(compareFrames);
|
|
183
|
+
let committed = this.ackedSeq;
|
|
184
|
+
for (const f of sorted) {
|
|
185
|
+
if (f.seq !== committed + 1n) {
|
|
186
|
+
// Gap: requeue everything beyond the last committed seq and halt.
|
|
187
|
+
this.frames = sorted.filter((x) => x.seq > committed);
|
|
188
|
+
return { verdict: "SPOOL_MANUAL_HALT", committedSeq: committed, reason: `TRI_SPOOL_GAP expected ${committed + 1n} got ${f.seq}` };
|
|
189
|
+
}
|
|
190
|
+
let outcome;
|
|
191
|
+
try {
|
|
192
|
+
outcome = insert(this.session, f.seq, f.eventId, f.digest, f.bytes);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// Authority insert THREW (e.g. a transient authority write error). This is
|
|
196
|
+
// NON-FATAL: requeue the unacked tail and halt, mirroring the manual-halt
|
|
197
|
+
// path, instead of propagating (a propagating throw would lose the frames
|
|
198
|
+
// and leave a retry seeing SPOOL_COMMITTED-with-nothing-processed).
|
|
199
|
+
this.frames = sorted.filter((x) => x.seq > committed);
|
|
200
|
+
return { verdict: "SPOOL_MANUAL_HALT", committedSeq: committed, reason: "TRI_SPOOL_INSERT_THROW" };
|
|
201
|
+
}
|
|
202
|
+
if (outcome === "committed" || outcome === "idempotent") {
|
|
203
|
+
committed = f.seq;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
this.frames = sorted.filter((x) => x.seq > committed);
|
|
207
|
+
return { verdict: "SPOOL_MANUAL_HALT", committedSeq: committed, reason: "TRI_SPOOL_CONFLICT conflicting digest" };
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// All frames committed: clear the in-memory queue, then durably commit by
|
|
211
|
+
// appending+fsyncing an ack frame and advancing the high-water.
|
|
212
|
+
this.frames = [];
|
|
213
|
+
this.appendAck(committed);
|
|
214
|
+
this.ackedSeq = committed;
|
|
215
|
+
return { verdict: "SPOOL_COMMITTED", committedSeq: committed };
|
|
216
|
+
}
|
|
217
|
+
appendAck(seq) {
|
|
218
|
+
const frame = {
|
|
219
|
+
session: this.session,
|
|
220
|
+
seq,
|
|
221
|
+
eventId: ACK_EVENT_ID,
|
|
222
|
+
digest: `sha256:${sha256Hex(new Uint8Array(0))}`,
|
|
223
|
+
bytes: new Uint8Array(0),
|
|
224
|
+
crc32c: crc32c(new Uint8Array(0)),
|
|
225
|
+
};
|
|
226
|
+
const framed = encodeFrame(frame);
|
|
227
|
+
const fd = openSync(this.file, "a");
|
|
228
|
+
try {
|
|
229
|
+
writeSync(fd, framed, 0, framed.length);
|
|
230
|
+
fsyncSync(fd);
|
|
231
|
+
}
|
|
232
|
+
finally {
|
|
233
|
+
closeSync(fd);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
highWater() {
|
|
237
|
+
// The contiguous authority high-water advances ONLY on a durable ack
|
|
238
|
+
// (appendAck after a successful drain commit). During authority outage drain
|
|
239
|
+
// cannot commit, so ackedSeq naturally freezes here — an explicit outage
|
|
240
|
+
// branch would return the same value and was dead code (VC0C-Q05). The
|
|
241
|
+
// freeze/outage SIGNAL is the `frozen()`/`frontierFrozen` flag, not this
|
|
242
|
+
// scalar; frames appended during outage remain in the unacked tail.
|
|
243
|
+
return this.ackedSeq;
|
|
244
|
+
}
|
|
245
|
+
frozen() {
|
|
246
|
+
return this.frontierFrozen || this.outage();
|
|
247
|
+
}
|
|
248
|
+
freezeFrontier() {
|
|
249
|
+
const firstFreeze = !this.frontierFrozen && !this.outage();
|
|
250
|
+
this.frontierFrozen = true;
|
|
251
|
+
// Emit vector_cortex_frontier_frozen only on an actual freeze transition
|
|
252
|
+
// (once per outage; flag-gated + non-fatal inside the reporter). No event on
|
|
253
|
+
// an already-frozen or authority-outage-covered frontier. flag OFF => no-op.
|
|
254
|
+
if (firstFreeze) {
|
|
255
|
+
this.reporter?.frontierFrozen({
|
|
256
|
+
session: this.session,
|
|
257
|
+
committedSeq: String(this.ackedSeq),
|
|
258
|
+
frozenHighWater: String(this.ackedSeq),
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
return this.ackedSeq;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
function compareFrames(a, b) {
|
|
265
|
+
if (a.seq !== b.seq)
|
|
266
|
+
return a.seq < b.seq ? -1 : 1;
|
|
267
|
+
return a.eventId < b.eventId ? -1 : a.eventId > b.eventId ? 1 : 0;
|
|
268
|
+
}
|
|
269
|
+
function encodeHeader(h) {
|
|
270
|
+
return `${JSON.stringify(h)}\n`;
|
|
271
|
+
}
|
|
272
|
+
function parseHeader(line) {
|
|
273
|
+
const raw = JSON.parse(line);
|
|
274
|
+
if (raw.schema !== SPOOL_SCHEMA)
|
|
275
|
+
throw new Error("TRI_SPOOL_SCHEMA");
|
|
276
|
+
return raw;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Encode one binary frame: [u32 len][seq i64][eventId UTF-8 NUL][bytes][NUL][digest][u32 crc32c].
|
|
280
|
+
* The digest field is DIGEST_FIELD_LEN bytes ("sha256:" + 64 hex = 71) — sizing it
|
|
281
|
+
* to fit the FULL digest string is load-bearing for read-side verification
|
|
282
|
+
* (VC0C-Q03): a 64-byte cap silently truncated Buffer.write, so the stored digest
|
|
283
|
+
* could never match the recomputed value and every frame would be rejected on read.
|
|
284
|
+
* body length = 8 + eventId.length + 1 + bytes.length + 1 + DIGEST_FIELD_LEN + 4.
|
|
285
|
+
*/
|
|
286
|
+
function encodeFrame(f) {
|
|
287
|
+
const idBuf = Buffer.from(f.eventId, "utf8");
|
|
288
|
+
const bodyLen = 8 + idBuf.length + 1 + f.bytes.length + 1 + DIGEST_FIELD_LEN + 4;
|
|
289
|
+
const body = Buffer.alloc(bodyLen);
|
|
290
|
+
let o = 0;
|
|
291
|
+
body.writeBigInt64LE(BigInt(f.seq), o);
|
|
292
|
+
o += 8;
|
|
293
|
+
idBuf.copy(body, o);
|
|
294
|
+
o += idBuf.length;
|
|
295
|
+
body[o] = 0;
|
|
296
|
+
o += 1;
|
|
297
|
+
Buffer.from(f.bytes).copy(body, o);
|
|
298
|
+
o += f.bytes.length;
|
|
299
|
+
body[o] = 0;
|
|
300
|
+
o += 1;
|
|
301
|
+
body.write(f.digest, o, "utf8");
|
|
302
|
+
o += DIGEST_FIELD_LEN;
|
|
303
|
+
body.writeUInt32LE(f.crc32c, o);
|
|
304
|
+
o += 4;
|
|
305
|
+
const lenBuf = Buffer.alloc(4);
|
|
306
|
+
lenBuf.writeUInt32LE(bodyLen, 0);
|
|
307
|
+
return Buffer.concat([lenBuf, body]);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Parse a length-prefixed frame; returns null for a torn/truncated tail OR a
|
|
311
|
+
* CRYPTOGRAPHIC INTEGRITY MISMATCH (VC0C-Q03). The stored SHA-256 digest and
|
|
312
|
+
* CRC32C are recomputed over the parsed bytes and compared — a same-length bit
|
|
313
|
+
* flip must not survive reopen and be drained/committed. A mismatch is treated
|
|
314
|
+
* like a torn tail: `readExisting` stops there and the frame is NOT accepted —
|
|
315
|
+
* it remains unacknowledged, so replay/requeue preserves it rather than
|
|
316
|
+
* silently committing corrupted bytes.
|
|
317
|
+
*/
|
|
318
|
+
function tryParseFrame(buf) {
|
|
319
|
+
if (buf.length < 4)
|
|
320
|
+
return null;
|
|
321
|
+
const len = buf.readUInt32LE(0);
|
|
322
|
+
if (buf.length < 4 + len)
|
|
323
|
+
return null; // torn
|
|
324
|
+
const body = buf.subarray(4, 4 + len);
|
|
325
|
+
let o = 0;
|
|
326
|
+
const seq = body.readBigInt64LE(o);
|
|
327
|
+
o += 8;
|
|
328
|
+
const idEnd = body.indexOf(0, o);
|
|
329
|
+
if (idEnd < 0)
|
|
330
|
+
return null;
|
|
331
|
+
const eventId = body.subarray(o, idEnd).toString("utf8");
|
|
332
|
+
o = idEnd + 1;
|
|
333
|
+
const bytesStart = o;
|
|
334
|
+
const nul2 = body.indexOf(0, o);
|
|
335
|
+
if (nul2 < 0)
|
|
336
|
+
return null;
|
|
337
|
+
const bytes = new Uint8Array(body.subarray(bytesStart, nul2));
|
|
338
|
+
o = nul2 + 1;
|
|
339
|
+
const digest = body.subarray(o, o + DIGEST_FIELD_LEN).toString("utf8");
|
|
340
|
+
const storedCrc = body.readUInt32LE(o + DIGEST_FIELD_LEN);
|
|
341
|
+
// Recompute and verify — write-only integrity would let a same-length bit flip
|
|
342
|
+
// drain/commit silently. Return null (treat as torn/corrupt) on mismatch.
|
|
343
|
+
if (digest !== `sha256:${sha256Hex(bytes)}` || storedCrc !== crc32c(bytes)) {
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
return { session: "", seq, eventId, digest, bytes, crc32c: storedCrc };
|
|
347
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vector-cortex/resilience/spool.ts — VC0C durable spool barrel (VC0C).
|
|
3
|
+
*
|
|
4
|
+
* Thin barrel over the append/fsync/ack spool implementation in `spool-core.ts`
|
|
5
|
+
* (delegate-shell + impl-file split keeps the frequently-touched file small).
|
|
6
|
+
* Re-exports the public `createSpool` factory, the mode-B spool/session types,
|
|
7
|
+
* and the SHA-256 / CRC32C helpers for the safety adapter and tests.
|
|
8
|
+
*
|
|
9
|
+
* Full protocol semantics live in spool-core.ts (TRIAD_RESILIENCE §spool).
|
|
10
|
+
* Local-only, no network (PREVENT-PI-004), no `any` (PREVENT-011).
|
|
11
|
+
*/
|
|
12
|
+
export { createSpool, SPOOL_SCHEMA, ACK_EVENT_ID, crc32c, sha256Hex } from "./spool-core.js";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vector-cortex/resilience/types.ts — VC0C breaker/triad contracts (VC0C).
|
|
3
|
+
*
|
|
4
|
+
* Owns `Mode`, `TriadResult<T>`, `BreakerRecord`, `KillDecision`, and the
|
|
5
|
+
* `Breaker` circuit-breaker seam from CONTRACTS.md §TriadResult and breaker
|
|
6
|
+
* seam, plus the durable spool record shapes. Pure type/schema definitions +
|
|
7
|
+
* small pure predicates (no storage, no console, no network, no side effects —
|
|
8
|
+
* PREVENT-PI-004 / PREVENT-011). The live state machine lives in
|
|
9
|
+
* `breaker.ts`/`spool.ts`; the safety adapter selects A→B→C in
|
|
10
|
+
* `extensions/mega-runtime/vector-cortex-safety.ts`.
|
|
11
|
+
*
|
|
12
|
+
* Triad semantics (TRIAD_RESILIENCE.md): A is optimized/learned; B is
|
|
13
|
+
* deterministic/local and derives directly from authority; C is continuity, not
|
|
14
|
+
* semantic completeness — it uses only the exact current transcript and reports
|
|
15
|
+
* that limitation.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Registered TRI conformance ID range (TRI-001..030). The acceptance test reads
|
|
19
|
+
* these rows from the v2 `resilience/` domain and asserts each returns its
|
|
20
|
+
* manifest bytes or exactly its listed failure code. TRI-001..015 are owned by
|
|
21
|
+
* VC0C (window/probe/hysteresis/cooldown transitions); TRI-016..030 span the
|
|
22
|
+
* spool protocol (frame, drain, gap, digest conflict, ack crash, frozen
|
|
23
|
+
* frontier). Mirrors EVT_IDS / CUT_IDS / M3_IDS.
|
|
24
|
+
*/
|
|
25
|
+
export const TRI_IDS = [
|
|
26
|
+
"TRI-001", "TRI-002", "TRI-003", "TRI-004", "TRI-005",
|
|
27
|
+
"TRI-006", "TRI-007", "TRI-008", "TRI-009", "TRI-010",
|
|
28
|
+
"TRI-011", "TRI-012", "TRI-013", "TRI-014", "TRI-015",
|
|
29
|
+
"TRI-016", "TRI-017", "TRI-018", "TRI-019", "TRI-020",
|
|
30
|
+
"TRI-021", "TRI-022", "TRI-023", "TRI-024", "TRI-025",
|
|
31
|
+
"TRI-026", "TRI-027", "TRI-028", "TRI-029", "TRI-030",
|
|
32
|
+
];
|
package/extensions/dashboard-client/dist/assets/{AreaChart-Y_X0Bbjd.js → AreaChart-CAnWomhw.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{b as R,c as W,m as T,i as C,d as F,A as ie,e as B,h as q,j as oe,k as G,l as se,n as le,u as ue,o as K,G as ce,p as J,q as Q,D as fe,g as pe,X as he,Y as de,f as me}from"./generateCategoricalChart-BsIxUDyw.js";import{R as p,F as ee,r as ve}from"./index-B93cewiX.js";var ye=["layout","type","stroke","connectNulls","isRange","ref"],be=["key"],te;function M(e){"@babel/helpers - typeof";return M=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},M(e)}function ae(e,t){if(e==null)return{};var r=Ae(e,t),a,n;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],!(t.indexOf(a)>=0)&&Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function Ae(e,t){if(e==null)return{};var r={};for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){if(t.indexOf(a)>=0)continue;r[a]=e[a]}return r}function D(){return D=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e},D.apply(this,arguments)}function U(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),r.push.apply(r,a)}return r}function S(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?U(Object(r),!0).forEach(function(a){E(e,a,r[a])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):U(Object(r)).forEach(function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(r,a))})}return e}function ge(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Z(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,ne(a.key),a)}}function xe(e,t,r){return t&&Z(e.prototype,t),r&&Z(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function Pe(e,t,r){return t=$(t),Oe(e,re()?Reflect.construct(t,r||[],$(e).constructor):t.apply(e,r))}function Oe(e,t){if(t&&(M(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Ee(e)}function Ee(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function re(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(re=function(){return!!e})()}function $(e){return $=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},$(e)}function we(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&X(e,t)}function X(e,t){return X=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(a,n){return a.__proto__=n,a},X(e,t)}function E(e,t,r){return t=ne(t),t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ne(e){var t=_e(e,"string");return M(t)=="symbol"?t:t+""}function _e(e,t){if(M(e)!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var a=r.call(e,t);if(M(a)!="object")return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var L=function(e){function t(){var r;ge(this,t);for(var a=arguments.length,n=new Array(a),i=0;i<a;i++)n[i]=arguments[i];return r=Pe(this,t,[].concat(n)),E(r,"state",{isAnimationFinished:!0}),E(r,"id",ue("recharts-area-")),E(r,"handleAnimationEnd",function(){var o=r.props.onAnimationEnd;r.setState({isAnimationFinished:!0}),K(o)&&o()}),E(r,"handleAnimationStart",function(){var o=r.props.onAnimationStart;r.setState({isAnimationFinished:!1}),K(o)&&o()}),r}return we(t,e),xe(t,[{key:"renderDots",value:function(a,n,i){var o=this.props.isAnimationActive,s=this.state.isAnimationFinished;if(o&&!s)return null;var u=this.props,l=u.dot,f=u.points,c=u.dataKey,h=R(this.props,!1),A=R(l,!0),g=f.map(function(v,O){var y=S(S(S({key:"dot-".concat(O),r:3},h),A),{},{index:O,cx:v.x,cy:v.y,dataKey:c,value:v.value,payload:v.payload,points:f});return t.renderDotItem(l,y)}),x={clipPath:a?"url(#clipPath-".concat(n?"":"dots-").concat(i,")"):null};return p.createElement(W,D({className:"recharts-area-dots"},x),g)}},{key:"renderHorizontalRect",value:function(a){var n=this.props,i=n.baseLine,o=n.points,s=n.strokeWidth,u=o[0].x,l=o[o.length-1].x,f=a*Math.abs(u-l),c=T(o.map(function(h){return h.y||0}));return C(i)&&typeof i=="number"?c=Math.max(i,c):i&&Array.isArray(i)&&i.length&&(c=Math.max(T(i.map(function(h){return h.y||0})),c)),C(c)?p.createElement("rect",{x:u<l?u:u-f,y:0,width:f,height:Math.floor(c+(s?parseInt("".concat(s),10):1))}):null}},{key:"renderVerticalRect",value:function(a){var n=this.props,i=n.baseLine,o=n.points,s=n.strokeWidth,u=o[0].y,l=o[o.length-1].y,f=a*Math.abs(u-l),c=T(o.map(function(h){return h.x||0}));return C(i)&&typeof i=="number"?c=Math.max(i,c):i&&Array.isArray(i)&&i.length&&(c=Math.max(T(i.map(function(h){return h.x||0})),c)),C(c)?p.createElement("rect",{x:0,y:u<l?u:u-f,width:c+(s?parseInt("".concat(s),10):1),height:Math.floor(f)}):null}},{key:"renderClipRect",value:function(a){var n=this.props.layout;return n==="vertical"?this.renderVerticalRect(a):this.renderHorizontalRect(a)}},{key:"renderAreaStatically",value:function(a,n,i,o){var s=this.props,u=s.layout,l=s.type,f=s.stroke,c=s.connectNulls,h=s.isRange;s.ref;var A=ae(s,ye);return p.createElement(W,{clipPath:i?"url(#clipPath-".concat(o,")"):null},p.createElement(F,D({},R(A,!0),{points:a,connectNulls:c,type:l,baseLine:n,layout:u,stroke:"none",className:"recharts-area-area"})),f!=="none"&&p.createElement(F,D({},R(this.props,!1),{className:"recharts-area-curve",layout:u,type:l,connectNulls:c,fill:"none",points:a})),f!=="none"&&h&&p.createElement(F,D({},R(this.props,!1),{className:"recharts-area-curve",layout:u,type:l,connectNulls:c,fill:"none",points:n})))}},{key:"renderAreaWithAnimation",value:function(a,n){var i=this,o=this.props,s=o.points,u=o.baseLine,l=o.isAnimationActive,f=o.animationBegin,c=o.animationDuration,h=o.animationEasing,A=o.animationId,g=this.state,x=g.prevPoints,v=g.prevBaseLine;return p.createElement(ie,{begin:f,duration:c,isActive:l,easing:h,from:{t:0},to:{t:1},key:"area-".concat(A),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(O){var y=O.t;if(x){var _=x.length/s.length,d=s.map(function(P,N){var k=Math.floor(N*_);if(x[k]){var j=x[k],I=B(j.x,P.x),V=B(j.y,P.y);return S(S({},P),{},{x:I(y),y:V(y)})}return P}),m;if(C(u)&&typeof u=="number"){var b=B(v,u);m=b(y)}else if(q(u)||oe(u)){var w=B(v,0);m=w(y)}else m=u.map(function(P,N){var k=Math.floor(N*_);if(v[k]){var j=v[k],I=B(j.x,P.x),V=B(j.y,P.y);return S(S({},P),{},{x:I(y),y:V(y)})}return P});return i.renderAreaStatically(d,m,a,n)}return p.createElement(W,null,p.createElement("defs",null,p.createElement("clipPath",{id:"animationClipPath-".concat(n)},i.renderClipRect(y))),p.createElement(W,{clipPath:"url(#animationClipPath-".concat(n,")")},i.renderAreaStatically(s,u,a,n)))})}},{key:"renderArea",value:function(a,n){var i=this.props,o=i.points,s=i.baseLine,u=i.isAnimationActive,l=this.state,f=l.prevPoints,c=l.prevBaseLine,h=l.totalLength;return u&&o&&o.length&&(!f&&h>0||!G(f,o)||!G(c,s))?this.renderAreaWithAnimation(a,n):this.renderAreaStatically(o,s,a,n)}},{key:"render",value:function(){var a,n=this.props,i=n.hide,o=n.dot,s=n.points,u=n.className,l=n.top,f=n.left,c=n.xAxis,h=n.yAxis,A=n.width,g=n.height,x=n.isAnimationActive,v=n.id;if(i||!s||!s.length)return null;var O=this.state.isAnimationFinished,y=s.length===1,_=ee("recharts-area",u),d=c&&c.allowDataOverflow,m=h&&h.allowDataOverflow,b=d||m,w=q(v)?this.id:v,P=(a=R(o,!1))!==null&&a!==void 0?a:{r:3,strokeWidth:2},N=P.r,k=N===void 0?3:N,j=P.strokeWidth,I=j===void 0?2:j,V=se(o)?o:{},Y=V.clipDot,H=Y===void 0?!0:Y,z=k*2+I;return p.createElement(W,{className:_},d||m?p.createElement("defs",null,p.createElement("clipPath",{id:"clipPath-".concat(w)},p.createElement("rect",{x:d?f:f-A/2,y:m?l:l-g/2,width:d?A:A*2,height:m?g:g*2})),!H&&p.createElement("clipPath",{id:"clipPath-dots-".concat(w)},p.createElement("rect",{x:f-z/2,y:l-z/2,width:A+z,height:g+z}))):null,y?null:this.renderArea(b,w),(o||y)&&this.renderDots(b,H,w),(!x||O)&&le.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(a,n){return a.animationId!==n.prevAnimationId?{prevAnimationId:a.animationId,curPoints:a.points,curBaseLine:a.baseLine,prevPoints:n.curPoints,prevBaseLine:n.curBaseLine}:a.points!==n.curPoints||a.baseLine!==n.curBaseLine?{curPoints:a.points,curBaseLine:a.baseLine}:null}}])}(ve.PureComponent);te=L;E(L,"displayName","Area");E(L,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!ce.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});E(L,"getBaseValue",function(e,t,r,a){var n=e.layout,i=e.baseValue,o=t.props.baseValue,s=o??i;if(C(s)&&typeof s=="number")return s;var u=n==="horizontal"?a:r,l=u.scale.domain();if(u.type==="number"){var f=Math.max(l[0],l[1]),c=Math.min(l[0],l[1]);return s==="dataMin"?c:s==="dataMax"||f<0?f:Math.max(Math.min(l[0],l[1]),0)}return s==="dataMin"?l[0]:s==="dataMax"?l[1]:l[0]});E(L,"getComposedData",function(e){var t=e.props,r=e.item,a=e.xAxis,n=e.yAxis,i=e.xAxisTicks,o=e.yAxisTicks,s=e.bandSize,u=e.dataKey,l=e.stackedData,f=e.dataStartIndex,c=e.displayedData,h=e.offset,A=t.layout,g=l&&l.length,x=te.getBaseValue(t,r,a,n),v=A==="horizontal",O=!1,y=c.map(function(d,m){var b;g?b=l[f+m]:(b=J(d,u),Array.isArray(b)?O=!0:b=[x,b]);var w=b[1]==null||g&&J(d,u)==null;return v?{x:Q({axis:a,ticks:i,bandSize:s,entry:d,index:m}),y:w?null:n.scale(b[1]),value:b,payload:d}:{x:w?null:a.scale(b[1]),y:Q({axis:n,ticks:o,bandSize:s,entry:d,index:m}),value:b,payload:d}}),_;return g||O?_=y.map(function(d){var m=Array.isArray(d.value)?d.value[0]:null;return v?{x:d.x,y:m!=null&&d.y!=null?n.scale(m):null}:{x:m!=null?a.scale(m):null,y:d.y}}):_=v?n.scale(x):a.scale(x),S({points:y,baseLine:_,layout:A,isRange:O},h)});E(L,"renderDotItem",function(e,t){var r;if(p.isValidElement(e))r=p.cloneElement(e,t);else if(K(e))r=e(t);else{var a=ee("recharts-area-dot",typeof e!="boolean"?e.className:""),n=t.key,i=ae(t,be);r=p.createElement(fe,D({},i,{key:n,className:a}))}return r});var ke=pe({chartName:"AreaChart",GraphicalChild:L,axisComponents:[{axisType:"xAxis",AxisComp:he},{axisType:"yAxis",AxisComp:de}],formatAxisMap:me});export{ke as A,L as a};
|
|
2
|
-
//# sourceMappingURL=AreaChart-
|
|
1
|
+
import{b as R,c as W,m as T,i as C,d as F,A as ie,e as B,h as q,j as oe,k as G,l as se,n as le,u as ue,o as K,G as ce,p as J,q as Q,D as fe,g as pe,X as he,Y as de,f as me}from"./generateCategoricalChart-CCAB7Iz4.js";import{R as p,F as ee,r as ve}from"./index-B6cgyAPr.js";var ye=["layout","type","stroke","connectNulls","isRange","ref"],be=["key"],te;function M(e){"@babel/helpers - typeof";return M=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},M(e)}function ae(e,t){if(e==null)return{};var r=Ae(e,t),a,n;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],!(t.indexOf(a)>=0)&&Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function Ae(e,t){if(e==null)return{};var r={};for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){if(t.indexOf(a)>=0)continue;r[a]=e[a]}return r}function D(){return D=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e},D.apply(this,arguments)}function U(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),r.push.apply(r,a)}return r}function S(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?U(Object(r),!0).forEach(function(a){E(e,a,r[a])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):U(Object(r)).forEach(function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(r,a))})}return e}function ge(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Z(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,ne(a.key),a)}}function xe(e,t,r){return t&&Z(e.prototype,t),r&&Z(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function Pe(e,t,r){return t=$(t),Oe(e,re()?Reflect.construct(t,r||[],$(e).constructor):t.apply(e,r))}function Oe(e,t){if(t&&(M(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Ee(e)}function Ee(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function re(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(re=function(){return!!e})()}function $(e){return $=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},$(e)}function we(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&X(e,t)}function X(e,t){return X=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(a,n){return a.__proto__=n,a},X(e,t)}function E(e,t,r){return t=ne(t),t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ne(e){var t=_e(e,"string");return M(t)=="symbol"?t:t+""}function _e(e,t){if(M(e)!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var a=r.call(e,t);if(M(a)!="object")return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var L=function(e){function t(){var r;ge(this,t);for(var a=arguments.length,n=new Array(a),i=0;i<a;i++)n[i]=arguments[i];return r=Pe(this,t,[].concat(n)),E(r,"state",{isAnimationFinished:!0}),E(r,"id",ue("recharts-area-")),E(r,"handleAnimationEnd",function(){var o=r.props.onAnimationEnd;r.setState({isAnimationFinished:!0}),K(o)&&o()}),E(r,"handleAnimationStart",function(){var o=r.props.onAnimationStart;r.setState({isAnimationFinished:!1}),K(o)&&o()}),r}return we(t,e),xe(t,[{key:"renderDots",value:function(a,n,i){var o=this.props.isAnimationActive,s=this.state.isAnimationFinished;if(o&&!s)return null;var u=this.props,l=u.dot,f=u.points,c=u.dataKey,h=R(this.props,!1),A=R(l,!0),g=f.map(function(v,O){var y=S(S(S({key:"dot-".concat(O),r:3},h),A),{},{index:O,cx:v.x,cy:v.y,dataKey:c,value:v.value,payload:v.payload,points:f});return t.renderDotItem(l,y)}),x={clipPath:a?"url(#clipPath-".concat(n?"":"dots-").concat(i,")"):null};return p.createElement(W,D({className:"recharts-area-dots"},x),g)}},{key:"renderHorizontalRect",value:function(a){var n=this.props,i=n.baseLine,o=n.points,s=n.strokeWidth,u=o[0].x,l=o[o.length-1].x,f=a*Math.abs(u-l),c=T(o.map(function(h){return h.y||0}));return C(i)&&typeof i=="number"?c=Math.max(i,c):i&&Array.isArray(i)&&i.length&&(c=Math.max(T(i.map(function(h){return h.y||0})),c)),C(c)?p.createElement("rect",{x:u<l?u:u-f,y:0,width:f,height:Math.floor(c+(s?parseInt("".concat(s),10):1))}):null}},{key:"renderVerticalRect",value:function(a){var n=this.props,i=n.baseLine,o=n.points,s=n.strokeWidth,u=o[0].y,l=o[o.length-1].y,f=a*Math.abs(u-l),c=T(o.map(function(h){return h.x||0}));return C(i)&&typeof i=="number"?c=Math.max(i,c):i&&Array.isArray(i)&&i.length&&(c=Math.max(T(i.map(function(h){return h.x||0})),c)),C(c)?p.createElement("rect",{x:0,y:u<l?u:u-f,width:c+(s?parseInt("".concat(s),10):1),height:Math.floor(f)}):null}},{key:"renderClipRect",value:function(a){var n=this.props.layout;return n==="vertical"?this.renderVerticalRect(a):this.renderHorizontalRect(a)}},{key:"renderAreaStatically",value:function(a,n,i,o){var s=this.props,u=s.layout,l=s.type,f=s.stroke,c=s.connectNulls,h=s.isRange;s.ref;var A=ae(s,ye);return p.createElement(W,{clipPath:i?"url(#clipPath-".concat(o,")"):null},p.createElement(F,D({},R(A,!0),{points:a,connectNulls:c,type:l,baseLine:n,layout:u,stroke:"none",className:"recharts-area-area"})),f!=="none"&&p.createElement(F,D({},R(this.props,!1),{className:"recharts-area-curve",layout:u,type:l,connectNulls:c,fill:"none",points:a})),f!=="none"&&h&&p.createElement(F,D({},R(this.props,!1),{className:"recharts-area-curve",layout:u,type:l,connectNulls:c,fill:"none",points:n})))}},{key:"renderAreaWithAnimation",value:function(a,n){var i=this,o=this.props,s=o.points,u=o.baseLine,l=o.isAnimationActive,f=o.animationBegin,c=o.animationDuration,h=o.animationEasing,A=o.animationId,g=this.state,x=g.prevPoints,v=g.prevBaseLine;return p.createElement(ie,{begin:f,duration:c,isActive:l,easing:h,from:{t:0},to:{t:1},key:"area-".concat(A),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(O){var y=O.t;if(x){var _=x.length/s.length,d=s.map(function(P,N){var k=Math.floor(N*_);if(x[k]){var j=x[k],I=B(j.x,P.x),V=B(j.y,P.y);return S(S({},P),{},{x:I(y),y:V(y)})}return P}),m;if(C(u)&&typeof u=="number"){var b=B(v,u);m=b(y)}else if(q(u)||oe(u)){var w=B(v,0);m=w(y)}else m=u.map(function(P,N){var k=Math.floor(N*_);if(v[k]){var j=v[k],I=B(j.x,P.x),V=B(j.y,P.y);return S(S({},P),{},{x:I(y),y:V(y)})}return P});return i.renderAreaStatically(d,m,a,n)}return p.createElement(W,null,p.createElement("defs",null,p.createElement("clipPath",{id:"animationClipPath-".concat(n)},i.renderClipRect(y))),p.createElement(W,{clipPath:"url(#animationClipPath-".concat(n,")")},i.renderAreaStatically(s,u,a,n)))})}},{key:"renderArea",value:function(a,n){var i=this.props,o=i.points,s=i.baseLine,u=i.isAnimationActive,l=this.state,f=l.prevPoints,c=l.prevBaseLine,h=l.totalLength;return u&&o&&o.length&&(!f&&h>0||!G(f,o)||!G(c,s))?this.renderAreaWithAnimation(a,n):this.renderAreaStatically(o,s,a,n)}},{key:"render",value:function(){var a,n=this.props,i=n.hide,o=n.dot,s=n.points,u=n.className,l=n.top,f=n.left,c=n.xAxis,h=n.yAxis,A=n.width,g=n.height,x=n.isAnimationActive,v=n.id;if(i||!s||!s.length)return null;var O=this.state.isAnimationFinished,y=s.length===1,_=ee("recharts-area",u),d=c&&c.allowDataOverflow,m=h&&h.allowDataOverflow,b=d||m,w=q(v)?this.id:v,P=(a=R(o,!1))!==null&&a!==void 0?a:{r:3,strokeWidth:2},N=P.r,k=N===void 0?3:N,j=P.strokeWidth,I=j===void 0?2:j,V=se(o)?o:{},Y=V.clipDot,H=Y===void 0?!0:Y,z=k*2+I;return p.createElement(W,{className:_},d||m?p.createElement("defs",null,p.createElement("clipPath",{id:"clipPath-".concat(w)},p.createElement("rect",{x:d?f:f-A/2,y:m?l:l-g/2,width:d?A:A*2,height:m?g:g*2})),!H&&p.createElement("clipPath",{id:"clipPath-dots-".concat(w)},p.createElement("rect",{x:f-z/2,y:l-z/2,width:A+z,height:g+z}))):null,y?null:this.renderArea(b,w),(o||y)&&this.renderDots(b,H,w),(!x||O)&&le.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(a,n){return a.animationId!==n.prevAnimationId?{prevAnimationId:a.animationId,curPoints:a.points,curBaseLine:a.baseLine,prevPoints:n.curPoints,prevBaseLine:n.curBaseLine}:a.points!==n.curPoints||a.baseLine!==n.curBaseLine?{curPoints:a.points,curBaseLine:a.baseLine}:null}}])}(ve.PureComponent);te=L;E(L,"displayName","Area");E(L,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!ce.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});E(L,"getBaseValue",function(e,t,r,a){var n=e.layout,i=e.baseValue,o=t.props.baseValue,s=o??i;if(C(s)&&typeof s=="number")return s;var u=n==="horizontal"?a:r,l=u.scale.domain();if(u.type==="number"){var f=Math.max(l[0],l[1]),c=Math.min(l[0],l[1]);return s==="dataMin"?c:s==="dataMax"||f<0?f:Math.max(Math.min(l[0],l[1]),0)}return s==="dataMin"?l[0]:s==="dataMax"?l[1]:l[0]});E(L,"getComposedData",function(e){var t=e.props,r=e.item,a=e.xAxis,n=e.yAxis,i=e.xAxisTicks,o=e.yAxisTicks,s=e.bandSize,u=e.dataKey,l=e.stackedData,f=e.dataStartIndex,c=e.displayedData,h=e.offset,A=t.layout,g=l&&l.length,x=te.getBaseValue(t,r,a,n),v=A==="horizontal",O=!1,y=c.map(function(d,m){var b;g?b=l[f+m]:(b=J(d,u),Array.isArray(b)?O=!0:b=[x,b]);var w=b[1]==null||g&&J(d,u)==null;return v?{x:Q({axis:a,ticks:i,bandSize:s,entry:d,index:m}),y:w?null:n.scale(b[1]),value:b,payload:d}:{x:w?null:a.scale(b[1]),y:Q({axis:n,ticks:o,bandSize:s,entry:d,index:m}),value:b,payload:d}}),_;return g||O?_=y.map(function(d){var m=Array.isArray(d.value)?d.value[0]:null;return v?{x:d.x,y:m!=null&&d.y!=null?n.scale(m):null}:{x:m!=null?a.scale(m):null,y:d.y}}):_=v?n.scale(x):a.scale(x),S({points:y,baseLine:_,layout:A,isRange:O},h)});E(L,"renderDotItem",function(e,t){var r;if(p.isValidElement(e))r=p.cloneElement(e,t);else if(K(e))r=e(t);else{var a=ee("recharts-area-dot",typeof e!="boolean"?e.className:""),n=t.key,i=ae(t,be);r=p.createElement(fe,D({},i,{key:n,className:a}))}return r});var ke=pe({chartName:"AreaChart",GraphicalChild:L,axisComponents:[{axisType:"xAxis",AxisComp:he},{axisType:"yAxis",AxisComp:de}],formatAxisMap:me});export{ke as A,L as a};
|
|
2
|
+
//# sourceMappingURL=AreaChart-CAnWomhw.js.map
|