@graphrefly/graphrefly 0.20.0 → 0.22.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/README.md +27 -8
- package/dist/chunk-44HD4BTA.js +47 -0
- package/dist/chunk-44HD4BTA.js.map +1 -0
- package/dist/chunk-7TAQJHQV.js +103 -0
- package/dist/chunk-7TAQJHQV.js.map +1 -0
- package/dist/chunk-BLD3IFYF.js +6827 -0
- package/dist/chunk-BLD3IFYF.js.map +1 -0
- package/dist/{chunk-IAPLC4NR.js → chunk-EQUZ5NLD.js} +34 -45
- package/dist/chunk-EQUZ5NLD.js.map +1 -0
- package/dist/{chunk-OOA2UTXF.js → chunk-IR3KMOLX.js} +358 -128
- package/dist/chunk-IR3KMOLX.js.map +1 -0
- package/dist/{chunk-5PSVTDNZ.js → chunk-MQBQOFDS.js} +20 -11
- package/dist/chunk-MQBQOFDS.js.map +1 -0
- package/dist/chunk-NXC35KC5.js +2417 -0
- package/dist/chunk-NXC35KC5.js.map +1 -0
- package/dist/chunk-QA3RP5NH.js +2234 -0
- package/dist/chunk-QA3RP5NH.js.map +1 -0
- package/dist/chunk-RHI3GHZW.js +115 -0
- package/dist/chunk-RHI3GHZW.js.map +1 -0
- package/dist/{chunk-2L5J6RPM.js → chunk-TH6COGOP.js} +15 -26
- package/dist/chunk-TH6COGOP.js.map +1 -0
- package/dist/compat/nestjs/index.cjs +3366 -2259
- package/dist/compat/nestjs/index.cjs.map +1 -1
- package/dist/compat/nestjs/index.d.cts +6 -4
- package/dist/compat/nestjs/index.d.ts +6 -4
- package/dist/compat/nestjs/index.js +8 -8
- package/dist/core/index.cjs +1611 -1218
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +3 -2
- package/dist/core/index.d.ts +3 -2
- package/dist/core/index.js +37 -34
- package/dist/extra/index.cjs +7726 -6470
- package/dist/extra/index.cjs.map +1 -1
- package/dist/extra/index.d.cts +4 -4
- package/dist/extra/index.d.ts +4 -4
- package/dist/extra/index.js +57 -30
- package/dist/graph/index.cjs +3107 -2216
- package/dist/graph/index.cjs.map +1 -1
- package/dist/graph/index.d.cts +5 -3
- package/dist/graph/index.d.ts +5 -3
- package/dist/graph/index.js +24 -11
- package/dist/graph-DFr0diXB.d.ts +1128 -0
- package/dist/graph-ab1yPwIB.d.cts +1128 -0
- package/dist/{index-8a605sg9.d.ts → index-BHm3Ba5q.d.ts} +2 -2
- package/dist/{index-SFzE_KTa.d.cts → index-BbYZma8G.d.ts} +1697 -586
- package/dist/{index-DuN3bhtm.d.ts → index-BvWfZCTt.d.cts} +1697 -586
- package/dist/index-C9z6rU9P.d.cts +388 -0
- package/dist/{index-BjtlNirP.d.cts → index-D36MAQ3f.d.ts} +4 -4
- package/dist/{index-VHA43cGP.d.cts → index-DLE1Sp-L.d.cts} +2 -2
- package/dist/{index-CgSiUouz.d.ts → index-DrJq9B1T.d.cts} +4 -4
- package/dist/index-DsGxLfwL.d.ts +315 -0
- package/dist/index-Dy04P4W3.d.cts +315 -0
- package/dist/index-HdJx_BjO.d.ts +388 -0
- package/dist/index.cjs +9919 -7900
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +415 -42
- package/dist/index.d.ts +415 -42
- package/dist/index.js +1064 -639
- package/dist/index.js.map +1 -1
- package/dist/meta--fr9sxRM.d.cts +41 -0
- package/dist/meta-n3FoVWML.d.ts +41 -0
- package/dist/node-C5UD5MGq.d.cts +1146 -0
- package/dist/node-C5UD5MGq.d.ts +1146 -0
- package/dist/{observable-DcBwQY7t.d.ts → observable-CQRBtEbq.d.ts} +1 -1
- package/dist/{observable-C8Kx_O6k.d.cts → observable-DWydVy5b.d.cts} +1 -1
- package/dist/patterns/reactive-layout/index.cjs +3102 -2132
- package/dist/patterns/reactive-layout/index.cjs.map +1 -1
- package/dist/patterns/reactive-layout/index.d.cts +5 -3
- package/dist/patterns/reactive-layout/index.d.ts +5 -3
- package/dist/patterns/reactive-layout/index.js +5 -4
- package/dist/storage-Bew05Xy6.d.cts +182 -0
- package/dist/storage-C9fZfMfM.d.ts +182 -0
- package/package.json +2 -1
- package/dist/chunk-2L5J6RPM.js.map +0 -1
- package/dist/chunk-3N2Y6PCR.js +0 -2117
- package/dist/chunk-3N2Y6PCR.js.map +0 -1
- package/dist/chunk-5PSVTDNZ.js.map +0 -1
- package/dist/chunk-BJAOEU4D.js +0 -6269
- package/dist/chunk-BJAOEU4D.js.map +0 -1
- package/dist/chunk-IAPLC4NR.js.map +0 -1
- package/dist/chunk-OOA2UTXF.js.map +0 -1
- package/dist/chunk-PGEU5MEH.js +0 -162
- package/dist/chunk-PGEU5MEH.js.map +0 -1
- package/dist/chunk-R2LPZIY2.js +0 -111
- package/dist/chunk-R2LPZIY2.js.map +0 -1
- package/dist/chunk-WZ2Z2CRV.js +0 -32
- package/dist/chunk-WZ2Z2CRV.js.map +0 -1
- package/dist/chunk-XYL3GLB3.js +0 -1631
- package/dist/chunk-XYL3GLB3.js.map +0 -1
- package/dist/graph-KsTe57nI.d.cts +0 -750
- package/dist/graph-mILUUqW8.d.ts +0 -750
- package/dist/index-B2SvPEbc.d.ts +0 -257
- package/dist/index-BHfg_Ez3.d.ts +0 -629
- package/dist/index-Bc_diYYJ.d.cts +0 -629
- package/dist/index-UudxGnzc.d.cts +0 -257
- package/dist/meta-BnG7XAaE.d.cts +0 -778
- package/dist/meta-BnG7XAaE.d.ts +0 -778
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/index.ts"],"sourcesContent":["/**\n * Core layer: message protocol, node primitive, lifecycle (Phase 0).\n */\nexport * from \"./actor.js\";\nexport { batch, downWithBatch, isBatching } from \"./batch.js\";\nexport { monotonicNs, wallClockNs } from \"./clock.js\";\nexport {\n\ttype GlobalInspectorEvent,\n\ttype GlobalInspectorHook,\n\tGraphReFlyConfig,\n\ttype MessageContext,\n\ttype NodeActions,\n\ttype NodeCtx,\n\ttype OnMessageHandler,\n\ttype OnSubscribeHandler,\n\tregisterBuiltins,\n\ttype SubscribeContext,\n} from \"./config.js\";\nexport * from \"./guard.js\";\nexport {\n\tCOMPLETE,\n\tCOMPLETE_MSG,\n\tCOMPLETE_ONLY_BATCH,\n\tDATA,\n\tDIRTY,\n\tDIRTY_MSG,\n\tDIRTY_ONLY_BATCH,\n\tERROR,\n\tINVALIDATE,\n\tINVALIDATE_MSG,\n\tINVALIDATE_ONLY_BATCH,\n\ttype Message,\n\ttype Messages,\n\ttype MessageTypeRegistration,\n\ttype MessageTypeRegistrationInput,\n\tPAUSE,\n\tRESOLVED,\n\tRESOLVED_MSG,\n\tRESOLVED_ONLY_BATCH,\n\tRESUME,\n\tSTART,\n\tSTART_MSG,\n\tTEARDOWN,\n\tTEARDOWN_MSG,\n\tTEARDOWN_ONLY_BATCH,\n} from \"./messages.js\";\nexport {\n\ttype DescribeDetail,\n\ttype DescribeField,\n\ttype DescribeNodeOutput,\n\tresolveDescribeFields,\n} from \"./meta.js\";\nexport {\n\tconfigure,\n\ttype DepRecord,\n\tdefaultConfig,\n\ttype FnCtx,\n\ttype Node,\n\ttype NodeDescribeKind,\n\ttype NodeFn,\n\ttype NodeFnCleanup,\n\tNodeImpl,\n\ttype NodeInspectorHook,\n\ttype NodeInspectorHookEvent,\n\ttype NodeOptions,\n\ttype NodeSink,\n\ttype NodeStatus,\n\ttype NodeTransportOptions,\n\tnode,\n} from \"./node.js\";\nexport {\n\ttype AutoTrackOptions,\n\tautoTrackNode,\n\ttype DerivedFn,\n\ttype DynamicFn,\n\tderived,\n\tdynamicNode,\n\ttype EffectFn,\n\teffect,\n\ttype PipeOperator,\n\ttype ProducerFn,\n\tpipe,\n\tproducer,\n\tstate,\n\ttype TrackFn,\n} from \"./sugar.js\";\nexport {\n\tadvanceVersion,\n\tcreateVersioning,\n\tdefaultHash,\n\ttype HashFn,\n\tisV1,\n\ttype NodeVersionInfo,\n\ttype V0,\n\ttype V1,\n\ttype VersioningLevel,\n\ttype VersioningOptions,\n} from \"./versioning.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
DynamicNodeImpl,
|
|
3
|
-
NO_VALUE,
|
|
4
2
|
NodeImpl,
|
|
5
3
|
accessHintForGuard
|
|
6
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QA3RP5NH.js";
|
|
7
5
|
|
|
8
6
|
// src/core/meta.ts
|
|
9
7
|
function resolveDescribeFields(detail, fields) {
|
|
@@ -13,23 +11,21 @@ function resolveDescribeFields(detail, fields) {
|
|
|
13
11
|
return /* @__PURE__ */ new Set(["type", "status", "value", "deps", "meta", "v"]);
|
|
14
12
|
case "full":
|
|
15
13
|
return null;
|
|
16
|
-
// null = include everything
|
|
17
14
|
default:
|
|
18
15
|
return /* @__PURE__ */ new Set(["type", "deps"]);
|
|
19
16
|
}
|
|
20
17
|
}
|
|
21
18
|
function inferDescribeType(n) {
|
|
22
19
|
if (n._describeKind != null) return n._describeKind;
|
|
23
|
-
|
|
24
|
-
if (n._fn
|
|
25
|
-
if (n._manualEmitUsed) return "operator";
|
|
20
|
+
const hasDeps = n._deps.length > 0;
|
|
21
|
+
if (!hasDeps) return n._fn != null ? "producer" : "state";
|
|
26
22
|
return "derived";
|
|
27
23
|
}
|
|
28
24
|
function metaSnapshot(node) {
|
|
29
25
|
const out = {};
|
|
30
26
|
for (const [key, child] of Object.entries(node.meta)) {
|
|
31
27
|
try {
|
|
32
|
-
out[key] = child.
|
|
28
|
+
out[key] = child.cache;
|
|
33
29
|
} catch {
|
|
34
30
|
}
|
|
35
31
|
}
|
|
@@ -43,16 +39,13 @@ function describeNode(node, includeFields) {
|
|
|
43
39
|
let deps = [];
|
|
44
40
|
if (node instanceof NodeImpl) {
|
|
45
41
|
type = inferDescribeType(node);
|
|
46
|
-
deps = node._deps.map((d) => d.name ?? "");
|
|
47
|
-
} else if (node instanceof DynamicNodeImpl) {
|
|
48
|
-
type = node._describeKind ?? "derived";
|
|
49
|
-
deps = [];
|
|
42
|
+
deps = node._deps.map((d) => d.node.name ?? "");
|
|
50
43
|
}
|
|
51
44
|
const out = { type, deps };
|
|
52
45
|
if (all || includeFields.has("status")) {
|
|
53
46
|
out.status = node.status;
|
|
54
47
|
}
|
|
55
|
-
const guard = node instanceof NodeImpl
|
|
48
|
+
const guard = node instanceof NodeImpl ? node._guard : void 0;
|
|
56
49
|
if (wantsMeta) {
|
|
57
50
|
const rawMeta = { ...metaSnapshot(node) };
|
|
58
51
|
if (guard != null && rawMeta.access === void 0) {
|
|
@@ -72,17 +65,17 @@ function describeNode(node, includeFields) {
|
|
|
72
65
|
out.name = node.name;
|
|
73
66
|
}
|
|
74
67
|
if (all || includeFields.has("value")) {
|
|
75
|
-
|
|
76
|
-
if (isSentinel) {
|
|
77
|
-
out.sentinel = true;
|
|
78
|
-
}
|
|
68
|
+
if (node.status === "sentinel") out.sentinel = true;
|
|
79
69
|
try {
|
|
80
|
-
out.value = node.
|
|
70
|
+
out.value = node.cache;
|
|
81
71
|
} catch {
|
|
82
72
|
}
|
|
83
73
|
}
|
|
84
74
|
if ((all || includeFields.has("v")) && node.v != null) {
|
|
85
|
-
const vInfo = {
|
|
75
|
+
const vInfo = {
|
|
76
|
+
id: node.v.id,
|
|
77
|
+
version: node.v.version
|
|
78
|
+
};
|
|
86
79
|
if ("cid" in node.v) {
|
|
87
80
|
vInfo.cid = node.v.cid;
|
|
88
81
|
vInfo.prev = node.v.prev;
|
|
@@ -90,14 +83,10 @@ function describeNode(node, includeFields) {
|
|
|
90
83
|
out.v = vInfo;
|
|
91
84
|
}
|
|
92
85
|
if (all || includeFields.has("guard")) {
|
|
93
|
-
if (guard != null)
|
|
94
|
-
out.guard = accessHintForGuard(guard);
|
|
95
|
-
}
|
|
86
|
+
if (guard != null) out.guard = accessHintForGuard(guard);
|
|
96
87
|
}
|
|
97
88
|
if (all || includeFields.has("lastMutation")) {
|
|
98
|
-
if (node.lastMutation != null)
|
|
99
|
-
out.lastMutation = node.lastMutation;
|
|
100
|
-
}
|
|
89
|
+
if (node.lastMutation != null) out.lastMutation = node.lastMutation;
|
|
101
90
|
}
|
|
102
91
|
return out;
|
|
103
92
|
}
|
|
@@ -106,4 +95,4 @@ export {
|
|
|
106
95
|
resolveDescribeFields,
|
|
107
96
|
describeNode
|
|
108
97
|
};
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
98
|
+
//# sourceMappingURL=chunk-TH6COGOP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/meta.ts"],"sourcesContent":["import type { Actor } from \"./actor.js\";\nimport { accessHintForGuard } from \"./guard.js\";\nimport { type Node, type NodeDescribeKind, NodeImpl } from \"./node.js\";\n\n/**\n * JSON-shaped slice of a node for `Graph.describe()`\n * (GRAPHREFLY-SPEC §3.6, Appendix B).\n */\nexport type DescribeNodeOutput = {\n\ttype: NodeDescribeKind;\n\tstatus?: Node[\"status\"];\n\tdeps: string[];\n\tmeta?: Record<string, unknown>;\n\tname?: string;\n\tvalue?: unknown;\n\t/** True when the node is in `\"sentinel\"` state (no value ever). */\n\tsentinel?: boolean;\n\tv?: { id: string; version: number; cid?: string; prev?: string | null };\n\tguard?: string;\n\tlastMutation?: Readonly<{ actor: Actor; timestamp_ns: number }>;\n\t/**\n\t * Latest reason annotation attached via `graph.trace(path, reason)`,\n\t * when present. Populated by `Graph.describe` only — `describeNode`\n\t * has no graph context.\n\t */\n\treason?: string;\n};\n\n/** Detail level for progressive disclosure (Phase 3.3b). */\nexport type DescribeDetail = \"minimal\" | \"standard\" | \"full\";\n\n/** Valid field names for `describe({ fields: [...] })`. */\nexport type DescribeField =\n\t| \"type\"\n\t| \"status\"\n\t| \"value\"\n\t| \"deps\"\n\t| \"meta\"\n\t| \"v\"\n\t| \"guard\"\n\t| \"lastMutation\"\n\t| `meta.${string}`;\n\n/** Resolve which fields to include based on detail level or explicit field list. */\nexport function resolveDescribeFields(\n\tdetail?: DescribeDetail,\n\tfields?: readonly DescribeField[],\n): Set<string> | null {\n\tif (fields != null && fields.length > 0) return new Set(fields);\n\tswitch (detail) {\n\t\tcase \"standard\":\n\t\t\treturn new Set([\"type\", \"status\", \"value\", \"deps\", \"meta\", \"v\"]);\n\t\tcase \"full\":\n\t\t\treturn null;\n\t\tdefault:\n\t\t\treturn new Set([\"type\", \"deps\"]);\n\t}\n}\n\nfunction inferDescribeType(n: NodeImpl): NodeDescribeKind {\n\tif (n._describeKind != null) return n._describeKind;\n\tconst hasDeps = n._deps.length > 0;\n\tif (!hasDeps) return n._fn != null ? \"producer\" : \"state\";\n\t// With deps: derived (passthrough falls under derived, no fn → derived shape).\n\treturn \"derived\";\n}\n\n/**\n * Reads the current cached value of every companion meta field on a node,\n * suitable for merging into `describe()`-style JSON.\n *\n * Values come from {@link Node.cache}, which returns the last settled cache.\n * If a meta field is in `\"dirty\"` status (DIRTY received, DATA pending), the\n * snapshot contains the *previous* value — check `node.meta[key].status`\n * when freshness matters.\n */\nexport function metaSnapshot(node: Node): Record<string, unknown> {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [key, child] of Object.entries(node.meta)) {\n\t\ttry {\n\t\t\tout[key] = child.cache;\n\t\t} catch {\n\t\t\t/* omit key — describe tooling still gets other fields */\n\t\t}\n\t}\n\treturn out;\n}\n\n/**\n * Builds a single-node slice of `Graph.describe()` JSON (structure + `meta`\n * snapshot). Parity with `graphrefly-py` `describe_node`.\n */\nexport function describeNode(node: Node, includeFields?: Set<string> | null): DescribeNodeOutput {\n\tconst all = includeFields == null;\n\tconst metaKeys: string[] | null =\n\t\t!all && includeFields != null\n\t\t\t? [...includeFields].filter((f) => f.startsWith(\"meta.\")).map((f) => f.slice(5))\n\t\t\t: null;\n\tconst wantsMeta = all || includeFields!.has(\"meta\") || (metaKeys != null && metaKeys.length > 0);\n\n\tlet type: NodeDescribeKind = \"state\";\n\tlet deps: string[] = [];\n\n\tif (node instanceof NodeImpl) {\n\t\ttype = inferDescribeType(node);\n\t\tdeps = node._deps.map((d) => d.node.name ?? \"\");\n\t}\n\n\tconst out: DescribeNodeOutput = { type, deps };\n\n\tif (all || includeFields!.has(\"status\")) {\n\t\tout.status = node.status;\n\t}\n\n\tconst guard = node instanceof NodeImpl ? node._guard : undefined;\n\n\tif (wantsMeta) {\n\t\tconst rawMeta: Record<string, unknown> = { ...metaSnapshot(node) };\n\t\tif (guard != null && rawMeta.access === undefined) {\n\t\t\trawMeta.access = accessHintForGuard(guard);\n\t\t}\n\t\tif (metaKeys != null && metaKeys.length > 0 && !includeFields!.has(\"meta\")) {\n\t\t\tconst filtered: Record<string, unknown> = {};\n\t\t\tfor (const k of metaKeys) {\n\t\t\t\tif (k in rawMeta) filtered[k] = rawMeta[k];\n\t\t\t}\n\t\t\tout.meta = filtered;\n\t\t} else {\n\t\t\tout.meta = rawMeta;\n\t\t}\n\t}\n\n\tif (node.name != null) {\n\t\tout.name = node.name;\n\t}\n\n\tif (all || includeFields!.has(\"value\")) {\n\t\tif (node.status === \"sentinel\") out.sentinel = true;\n\t\ttry {\n\t\t\tout.value = node.cache;\n\t\t} catch {\n\t\t\t/* omit value */\n\t\t}\n\t}\n\n\tif ((all || includeFields!.has(\"v\")) && node.v != null) {\n\t\tconst vInfo: NonNullable<DescribeNodeOutput[\"v\"]> = {\n\t\t\tid: node.v.id,\n\t\t\tversion: node.v.version,\n\t\t};\n\t\tif (\"cid\" in node.v) {\n\t\t\tvInfo.cid = (node.v as { cid: string }).cid;\n\t\t\tvInfo.prev = (node.v as { prev: string | null }).prev;\n\t\t}\n\t\tout.v = vInfo;\n\t}\n\n\tif (all || includeFields!.has(\"guard\")) {\n\t\tif (guard != null) out.guard = accessHintForGuard(guard);\n\t}\n\n\tif (all || includeFields!.has(\"lastMutation\")) {\n\t\tif (node.lastMutation != null) out.lastMutation = node.lastMutation;\n\t}\n\n\treturn out;\n}\n"],"mappings":"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","names":[]}
|