{"_id":"@statelyai/graph","_rev":"21-be6fe0a27b83fea7a3243363480a614b","name":"@statelyai/graph","dist-tags":{"latest":"2.4.0"},"versions":{"0.1.0":{"name":"@statelyai/graph","version":"0.1.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.1.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"37b512b9ca2409221751571fa1fbee132a3b9342","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.1.0.tgz","fileCount":32,"integrity":"sha512-qDMYpk0omOKkH03VajNmnrBG6oy/zzYje7u93elHmbaHyf836Y17sfDEqzPIBDqU7ISkCc4TYzBk6U+yclOGFA==","signatures":[{"sig":"MEYCIQC+Ah5tgkccVXj8nxi7BAMOz50/jXDkRPzqnHuPEcGHcAIhANeOvVtlWMl9J2hpcATO+LGjiKaQfeGs+yHfKQGxDHKq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109480},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./algorithms":"./dist/algorithms.mjs","./formats/dot":"./dist/formats/dot.mjs","./package.json":"./package.json","./formats/graphml":"./dist/formats/graphml.mjs","./formats/edge-list":"./dist/formats/edge-list.mjs","./formats/adjacency-list":"./dist/formats/adjacency-list.mjs"},"gitHead":"c31ac4f6ad01e655c706e7c8b4bfc5fcb1a0567f","scripts":{"dev":"tsdown --watch","test":"vitest","build":"tsdown","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"pnpm run build","generate-schema":"tsx scripts/generate-json-schema.ts"},"_npmUser":{"name":"davidkpiano","email":"davidkpiano@gmail.com"},"repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"22.17.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","tsdown":"^0.18.1","vitest":"^4.0.16","typescript":"^5.9.3","@types/node":"^25.0.3","@changesets/cli":"^2.29.8","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.1.0_1770844409849_0.7484039230358175","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@statelyai/graph","version":"0.3.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.3.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"7c0ecbd9cdb6874addf9bd8a2384fb14ff35643c","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.3.0.tgz","fileCount":43,"integrity":"sha512-uRfHx8eysv7pTrnhtiP4v+foe4c+KVGPqi6t5LaqMOZ3ldfMw0TR8DGBktWPHNpUOUtrV3Qza1RlEZUYqgnhXQ==","signatures":[{"sig":"MEUCIQD9PJtJGM2IWrmqmCRyX5R7KxurCFg8VB72UiMRaEWMLAIgJq5TTJxKaE3K7kFKQiVk3fHN86S490T0MYNqfKVqEJM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":216458},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.3.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","build":"tsdown","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","generate-schema":"tsx scripts/generate-json-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/cabcb46645de8f149539ef91d79bbd36/statelyai-graph-0.3.0.tgz","_integrity":"sha512-uRfHx8eysv7pTrnhtiP4v+foe4c+KVGPqi6t5LaqMOZ3ldfMw0TR8DGBktWPHNpUOUtrV3Qza1RlEZUYqgnhXQ==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.6.2","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.3.0_1771642482405_0.9025362137602577","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@statelyai/graph","version":"0.3.1","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.3.1","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"dc6354d4681b2d5cc5106e7f1fc396addd8c4a4d","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.3.1.tgz","fileCount":43,"integrity":"sha512-Rnh3oZ9N/XzEVczYutXySoUfWSYk3/yOVAjS4IfGS742CyMGiwK0d23LjT7sh5axX30CuQTEy5+m/mxfU9DkIQ==","signatures":[{"sig":"MEUCIACKZXVlFbe7Uv+Wl6yWwEd8n6cAvZ4m89pDhp8UL4zUAiEAmqYIu0yj3Kxu+1hksRBn5w68hMYA+64AbjqWsI/InPE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":300404},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.3.1.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","build":"tsdown","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","generate-schema":"tsx scripts/generate-json-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/8ecb4b1b29da14a4b6186468406e6d5a/statelyai-graph-0.3.1.tgz","_integrity":"sha512-Rnh3oZ9N/XzEVczYutXySoUfWSYk3/yOVAjS4IfGS742CyMGiwK0d23LjT7sh5axX30CuQTEy5+m/mxfU9DkIQ==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.6.2","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.3.1_1772017457029_0.6552822678719601","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@statelyai/graph","version":"0.4.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.4.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"dabcdee9e0ce649dfadaa8ff65e35906607ab36c","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.4.0.tgz","fileCount":45,"integrity":"sha512-WDzR0cva+LacIPqZEmymXipDWmyOXG5hLr3ndtV0ocuaNVRH6oQWmKy9jMCWJygHjLbbDSf8eB+uxFQfcs5SUg==","signatures":[{"sig":"MEUCIEMSXirID/BtQZ5uB6tImeX8DLeb341UovckJRPYcK4UAiEA6S3qs5HxnBvdNbGLU78G1F3mortpdeX/0FCWNwFxXdY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":307109},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.4.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","build":"tsdown","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","generate-schema":"tsx scripts/generate-json-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/ddb51208062c56a2a6c705c6d9a9f156/statelyai-graph-0.4.0.tgz","_integrity":"sha512-WDzR0cva+LacIPqZEmymXipDWmyOXG5hLr3ndtV0ocuaNVRH6oQWmKy9jMCWJygHjLbbDSf8eB+uxFQfcs5SUg==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.6.2","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.4.0_1772021586554_0.8374047195237599","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@statelyai/graph","version":"0.5.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.5.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"52ae93a628f32ddcd178267c227635da8b07ca4c","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.5.0.tgz","fileCount":47,"integrity":"sha512-EDRVJoPysNlZbBozq5FXoUMQKvGysZ//eNGkOuIUmqNcoT1PmTvd3Tj3ftraW9R/1iZCV7Mtn2Ynkmm3p0KuqQ==","signatures":[{"sig":"MEYCIQD+gsi+sUcgE3OtuYfH8ZkfaMf2pwp9qfZEN7yG1VZ2oAIhANUW0/yz/Z7bGpqDHG/zJr09f0mutm75CQNzlnUSJjiG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":330750},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.5.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","build":"tsdown","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","generate-schema":"tsx scripts/generate-json-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/ad00ea4a88803ec2611b2ab29123e48b/statelyai-graph-0.5.0.tgz","_integrity":"sha512-EDRVJoPysNlZbBozq5FXoUMQKvGysZ//eNGkOuIUmqNcoT1PmTvd3Tj3ftraW9R/1iZCV7Mtn2Ynkmm3p0KuqQ==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.9.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.5.0_1772713189995_0.9668933076270545","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@statelyai/graph","version":"0.6.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.6.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"95e6922f95c802e8f92e5e255d3cbd0d5c14f69e","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.6.0.tgz","fileCount":47,"integrity":"sha512-HPWXkkIc044s28gCr9WbmKK4ACGiAtbHFrdXjvt8qJiKKfZmBzHNAvYqI5LTLXfQ915QFZW0QZqdO8+pN4RRQQ==","signatures":[{"sig":"MEQCICjpESzR/cFCUdfEr0abHlm42OMRxuBph0T5vCwmAvvDAiBX2e6y0UTwi8eJ5VOcmR35fN3Fnx+I2dAWjafltIcBNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":356034},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.6.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","build":"tsdown","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","generate-schema":"tsx scripts/generate-json-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/089878918c1f6d847b2b7ea87e32ac3d/statelyai-graph-0.6.0.tgz","_integrity":"sha512-HPWXkkIc044s28gCr9WbmKK4ACGiAtbHFrdXjvt8qJiKKfZmBzHNAvYqI5LTLXfQ915QFZW0QZqdO8+pN4RRQQ==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.9.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.6.0_1773675923237_0.0939373052904735","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@statelyai/graph","version":"0.7.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.7.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"e88a71f0aa62c2d14813a5c5e8cb23fe6bb4b368","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.7.0.tgz","fileCount":47,"integrity":"sha512-+RHt41nElnKgImWyYNkMffyyxtu+SgW6WEoxn9uNgepD9f4fIoDaITxJivjRmV3WIR/1hq+d20GaXcAQfdEMYw==","signatures":[{"sig":"MEUCIGP14hOa7t+bU5JYcltQM91dGsdFbrXrl5ZzjPrc/Cl6AiEAmT2LjXQCGJ1msqVsTCUCQyjRYR6u6k/ln+Sy00W9W2Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":357807},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.7.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","build":"tsdown","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","generate-schema":"tsx scripts/generate-json-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/b8bd56e29b7bc8a1afc48c2fd35766ca/statelyai-graph-0.7.0.tgz","_integrity":"sha512-+RHt41nElnKgImWyYNkMffyyxtu+SgW6WEoxn9uNgepD9f4fIoDaITxJivjRmV3WIR/1hq+d20GaXcAQfdEMYw==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.9.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.7.0_1773833158226_0.7384584949724609","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@statelyai/graph","version":"0.8.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.8.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"c29199f0d58d4b2e9d818ca297a332846eaa6751","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.8.0.tgz","fileCount":47,"integrity":"sha512-UqYGPNLnyQQgsdniHVctNVs4rMHqRVBvR6WRtwcSk8ReI0ZroCk8OQVM5jXEZGhIX2bzgfIW56aBjWNl5aFqVQ==","signatures":[{"sig":"MEUCIQC80tUh3TJ53LlnDkmh0AS1hBrPAM8inkZ3KiFN5noU7gIgTsABRhGBHggMEu8z8+Nw+DLXEpRuibWgpDSsI11x00A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":368557},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.8.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","build":"tsdown","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","generate-schema":"tsx scripts/generate-json-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/8a19ff08abf54c06829b00db3822f9c7/statelyai-graph-0.8.0.tgz","_integrity":"sha512-UqYGPNLnyQQgsdniHVctNVs4rMHqRVBvR6WRtwcSk8ReI0ZroCk8OQVM5jXEZGhIX2bzgfIW56aBjWNl5aFqVQ==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.9.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.8.0_1774009924822_0.7361726727396332","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@statelyai/graph","version":"0.9.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.9.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"2291c801cc6001685ffd3d2772b06bec801cda87","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.9.0.tgz","fileCount":48,"integrity":"sha512-XXaQJKiAhza0jpsvTzT+gQ8VJNx2VTjibgxooh7zaQtI54hSCvv6NHza8PlR01DJVi2XZN5RbWpR3AGuL5nopw==","signatures":[{"sig":"MEYCIQCEAqAMEEGnEPQk1MVk9Uk/4CjSyejk2g0cLFqJnIHVCgIhANtUZNz9SvqvFPzgw2+yFQwBuMpJvQdMc8U2ku74dSmo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":414565},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.9.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","build":"tsdown","verify":"pnpm typecheck && pnpm test -- --run && pnpm build && pnpm validate:package","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","generate-schema":"tsx scripts/generate-json-schema.ts","validate:package":"publint && tsx scripts/smoke-package.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/07189bf66883e14d8c3b24cd57c47c77/statelyai-graph-0.9.0.tgz","_integrity":"sha512-XXaQJKiAhza0jpsvTzT+gQ8VJNx2VTjibgxooh7zaQtI54hSCvv6NHza8PlR01DJVi2XZN5RbWpR3AGuL5nopw==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.9.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","publint":"^0.3.15","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.9.0_1774965336556_0.46993426271634386","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@statelyai/graph","version":"0.10.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.10.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"1665eb2ee4f74ef439a52f554f01d9040ddcfc35","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.10.0.tgz","fileCount":48,"integrity":"sha512-rQya6cMQ0ZUrX8cRN5Q2nesKe7/z5AnXf0fl12pehj3RYJoOUwRL2beqtsmEBSMWIz5cqkL/vmRILzqrXKcU6Q==","signatures":[{"sig":"MEYCIQDqsseqb2Trn+pwpNpY9wCUgYrlgCB2YGxfBCX9aVcOaAIhAJHIjj7to72UBzWK/N84BRZL5mdW+UyvxIT5O0JGLixJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":417389},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.10.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","build":"tsdown","verify":"pnpm typecheck && pnpm test -- --run && pnpm build && pnpm validate:package","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","generate-schema":"tsx scripts/generate-json-schema.ts","validate:package":"publint && tsx scripts/smoke-package.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/c8a5459bd5cb0279b419cead87a522ec/statelyai-graph-0.10.0.tgz","_integrity":"sha512-rQya6cMQ0ZUrX8cRN5Q2nesKe7/z5AnXf0fl12pehj3RYJoOUwRL2beqtsmEBSMWIz5cqkL/vmRILzqrXKcU6Q==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","publint":"^0.3.15","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.10.0_1775510749127_0.32177650536003766","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@statelyai/graph","version":"0.11.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.11.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"b7cd5da5ffb40f558351d0d3e164af612f2e967e","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.11.0.tgz","fileCount":50,"integrity":"sha512-qm1AmeXTQu6wrA5o4bXIlic4BDWLJCnNisHoqDan7Qa/UWi3yGg10W8xobItql+qvnVcoghJN1ZmR3cUFeHV7A==","signatures":[{"sig":"MEUCIQCDIozPiUGxY1n9hXhoe/5rcci/+9FSqx/JKcgazmsOjQIgZ+NnFzupgidUF1ViBMOO3gEnvvD0084LCMvToX73T8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":398282},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.11.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs","./format-support":"./dist/format-support.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","bench":"vitest bench --run","build":"tsdown","verify":"pnpm typecheck && pnpm check:generated && pnpm test -- --run && pnpm build && pnpm validate:package","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","check:generated":"tsx scripts/generate-json-schema.ts --check","generate-schema":"tsx scripts/generate-json-schema.ts","validate:package":"publint && tsx scripts/smoke-package.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/380936c1b37213b217c7897dc6c5a8dc/statelyai-graph-0.11.0.tgz","_integrity":"sha512-qm1AmeXTQu6wrA5o4bXIlic4BDWLJCnNisHoqDan7Qa/UWi3yGg10W8xobItql+qvnVcoghJN1ZmR3cUFeHV7A==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","publint":"^0.3.15","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.11.0_1775849513818_0.4843954789095686","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"@statelyai/graph","version":"0.11.1","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.11.1","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"2b3c633a5c2d82472c96a5d0b7002a2e45a24c85","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.11.1.tgz","fileCount":50,"integrity":"sha512-jdJ2dqrkOMJjfAGUNvHe2285UMvBCKwDnZ6CUq6XWrlHEoSKzAqTymPByJmQidVGwJjfWdUpiDYFEiqu2Tu8ag==","signatures":[{"sig":"MEQCIAmPl0Xt9d6SQ6wUDe1WaqLwUNytc6TNkoYJZzoEz7U8AiB/xHHAZAITWZB6otPS1RByrRxj3fzvIR08ik3r8ioMTQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":407248},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.11.1.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs","./format-support":"./dist/format-support.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","bench":"vitest bench --run","build":"tsdown","verify":"pnpm typecheck && pnpm check:generated && pnpm test -- --run && pnpm build && pnpm validate:package","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","fix:generated":"pnpm generate-schema","check:generated":"tsx scripts/generate-json-schema.ts --check","generate-schema":"tsx scripts/generate-json-schema.ts","validate:package":"publint && tsx scripts/smoke-package.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/8539efeec8b35b3f0d97fa66d18cc5a1/statelyai-graph-0.11.1.tgz","_integrity":"sha512-jdJ2dqrkOMJjfAGUNvHe2285UMvBCKwDnZ6CUq6XWrlHEoSKzAqTymPByJmQidVGwJjfWdUpiDYFEiqu2Tu8ag==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","publint":"^0.3.15","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.11.1_1777128477945_0.9073391004782658","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@statelyai/graph","version":"0.12.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.12.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"d3015a6152b852076c031ee6175ef5cd33846e32","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.12.0.tgz","fileCount":50,"integrity":"sha512-Pw45jbX3AdXPwQ7tlWKoSc+NETBaTZL/fzseCPT1G1Sze0R69setg7yx3gJe6Lhbi7RJuUkWpvfsNC6NokhsBg==","signatures":[{"sig":"MEYCIQDWy1roPbJebS9M621h7s33sEZYu2/sDLlbYQ7oZOr0iAIhAKGi6jpmnjopGKe5bl1FojyTWLhHpGZOw6FSeywBVEEr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":416630},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.12.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs","./format-support":"./dist/format-support.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","bench":"vitest bench --run","build":"tsdown","verify":"pnpm typecheck && pnpm check:generated && pnpm test -- --run && pnpm build && pnpm validate:package","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","fix:generated":"pnpm generate-schema","check:generated":"tsx scripts/generate-json-schema.ts --check","generate-schema":"tsx scripts/generate-json-schema.ts","validate:package":"publint && tsx scripts/smoke-package.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/34b4308ca9694d1510ed0d889c9144f2/statelyai-graph-0.12.0.tgz","_integrity":"sha512-Pw45jbX3AdXPwQ7tlWKoSc+NETBaTZL/fzseCPT1G1Sze0R69setg7yx3gJe6Lhbi7RJuUkWpvfsNC6NokhsBg==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.11.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","publint":"^0.3.15","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.12.0_1777199737119_0.5288981015700294","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@statelyai/graph","version":"0.13.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@0.13.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"7a0be23b489dc340092164e6c91288e2ebf7cd89","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-0.13.0.tgz","fileCount":50,"integrity":"sha512-g9oqm1FCnn7E3T/ohf0Nd6dGXIr/Too1stopri/4Zh24z7ZkeV+EmOD1nlIDsyeaoM3xR59o3fOZCB2Aqm7RUw==","signatures":[{"sig":"MEQCIGUHDPJ0oBilsbL2MmMhm8zYC25Z8VI5s561dyxbF/qSAiALFRMilDz9VJfRFK9VyFzXmxH7PnoMHaL67u5VW1hUvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":437888},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-0.13.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs","./format-support":"./dist/format-support.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","bench":"vitest bench --run","build":"tsdown","verify":"pnpm typecheck && pnpm check:generated && pnpm test -- --run && pnpm build && pnpm validate:package","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","fix:generated":"pnpm generate-schema","check:generated":"tsx scripts/generate-json-schema.ts --check","generate-schema":"tsx scripts/generate-json-schema.ts","validate:package":"publint && tsx scripts/smoke-package.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/3ab8805b66fbdada53c67bb47386abd7/statelyai-graph-0.13.0.tgz","_integrity":"sha512-g9oqm1FCnn7E3T/ohf0Nd6dGXIr/Too1stopri/4Zh24z7ZkeV+EmOD1nlIDsyeaoM3xR59o3fOZCB2Aqm7RUw==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.12.1","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","publint":"^0.3.15","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_0.13.0_1779474300453_0.23403725051305013","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@statelyai/graph","version":"1.0.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@1.0.0","maintainers":[{"name":"mellson","email":"mellson@icloud.com"},{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"6861f01ec1918fa40df1f502c45dd174de397273","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-1.0.0.tgz","fileCount":56,"integrity":"sha512-ByUAB4hUFrbzLCeBsvf5kF+SUMqo7u8LobCCwF7nBJCYN5cs6ymgllktkGAEVZ7ekpWd8PojmUj81J68mZiAfg==","signatures":[{"sig":"MEUCIQDVHSLhouCadB38tAERLbVWVIfLoycvt70BCDv0QDkZCwIgGFWMIAw6NTHiZRdweoG2c18ZaBEtzlOq6smQ84xOTXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":485020},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-1.0.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d2":"./dist/formats/d2/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs","./format-support":"./dist/format-support.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","bench":"vitest bench --run","build":"tsdown","verify":"pnpm typecheck && pnpm check:generated && pnpm test -- --run && pnpm build && pnpm validate:package","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","fix:generated":"pnpm generate-schema","check:generated":"tsx scripts/generate-json-schema.ts --check","generate-schema":"tsx scripts/generate-json-schema.ts","validate:package":"publint && tsx scripts/smoke-package.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/bdc59e8da8f8b2ae3f03d5c290595189/statelyai-graph-1.0.0.tgz","_integrity":"sha512-ByUAB4hUFrbzLCeBsvf5kF+SUMqo7u8LobCCwF7nBJCYN5cs6ymgllktkGAEVZ7ekpWd8PojmUj81J68mZiAfg==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.13.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","publint":"^0.3.15","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","typescript":"^5.9.3","@types/node":"^25.0.3","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_1.0.0_1779999821074_0.6569436656047463","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@statelyai/graph","version":"2.0.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@2.0.0","maintainers":[{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"f4502057af8cb1ed9b5664c2a2d9a5dfd7769dc2","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-2.0.0.tgz","fileCount":57,"integrity":"sha512-m43kkrVcTzoC3Be2Z1LoYGTtspzMw/ds/KwW/OgfAhEwzYh3eY6S0sP3sKW+P4A5MPgjyLLwFOc9RFQLOzRheQ==","signatures":[{"sig":"MEYCIQD6uADx41R+nCwtus2+kzHR51cMbrZQuzLTkmtHuvlD/wIhAMYqtkmVtwjDzmlZuF3tQ6nnYesTJlodXrdb/CQU6j67","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":554963},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-2.0.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d2":"./dist/formats/d2/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs","./format-support":"./dist/format-support.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","bench":"vitest bench --run","build":"tsdown","verify":"pnpm typecheck && pnpm check:generated && pnpm test -- --run && pnpm build && pnpm validate:package","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","bench:compare":"tsx bench/compare/run.ts","fix:generated":"pnpm generate-schema","check:generated":"tsx scripts/generate-json-schema.ts --check","generate-schema":"tsx scripts/generate-json-schema.ts","validate:package":"publint && tsx scripts/smoke-package.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/04ea7d8579e496ffb394559e40d06f76/statelyai-graph-2.0.0.tgz","_integrity":"sha512-m43kkrVcTzoC3Be2Z1LoYGTtspzMw/ds/KwW/OgfAhEwzYh3eY6S0sP3sKW+P4A5MPgjyLLwFOc9RFQLOzRheQ==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.13.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","publint":"^0.3.15","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.33.1","dotparser":"^1.1.1","graphology":"^0.26.0","typescript":"^5.9.3","@types/node":"^25.0.3","ngraph.path":"^1.6.1","ngraph.graph":"^20.1.2","@xyflow/system":"^0.0.75","@changesets/cli":"^2.29.8","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","graphology-types":"^0.24.8","@dagrejs/graphlib":"^4.0.1","graphology-metrics":"^2.4.0","@vitest/coverage-v8":"^4.0.18","graphology-components":"^1.5.4","graphology-shortest-path":"^2.1.0","@changesets/changelog-github":"^0.5.2"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","fast-xml-parser":"^5.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"fast-xml-parser":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_2.0.0_1781186869056_0.2516254567602123","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@statelyai/graph","version":"2.1.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@2.1.0","maintainers":[{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"e1c00658a17df289eaa615fd77de45a35d3cf668","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-2.1.0.tgz","fileCount":76,"integrity":"sha512-4+c20qrs2xCUyxOCjmZD6cw6ZVEVFqSB39s1NaLdyGU+sAMv65QQxFLh2HbNtzxIhCajpnLMLNdYPGXMdGQdQA==","signatures":[{"sig":"MEUCID63HkPVJLJJZggqH48X/T0vA4Wy0ohrZzwVYCtiWgMoAiEA55zn9TwgiZA9klcfoPM7GXWmwf7goYxkcjrJk/gH06o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":666179},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-2.1.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d2":"./dist/formats/d2/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./layout":"./dist/layout/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./layout/elk":"./dist/layout/elk.mjs","./layout/dagre":"./dist/layout/dagre.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs","./format-support":"./dist/format-support.mjs","./layout/webcola":"./dist/layout/webcola.mjs","./layout/d3-force":"./dist/layout/d3-force.mjs","./layout/graphviz":"./dist/layout/graphviz.mjs","./layout/cytoscape":"./dist/layout/cytoscape.mjs","./layout/forceatlas2":"./dist/layout/forceatlas2.mjs","./layout/d3-hierarchy":"./dist/layout/d3-hierarchy.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","bench":"vitest bench --run","build":"tsdown","verify":"pnpm typecheck && pnpm typecheck:repo && pnpm check:generated && pnpm check:conventions && pnpm test -- --run && pnpm build && pnpm validate:package","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","bench:compare":"tsx bench/compare/run.ts","fix:generated":"pnpm generate-schema","typecheck:repo":"tsc --project tsconfig.repo.json","check:generated":"tsx scripts/generate-json-schema.ts --check","generate-schema":"tsx scripts/generate-json-schema.ts","validate:package":"publint && tsx scripts/smoke-package.ts","check:conventions":"tsx scripts/check-conventions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/65a75bfa4efe05be75de54e3478b0143/statelyai-graph-2.1.0.tgz","_integrity":"sha512-4+c20qrs2xCUyxOCjmZD6cw6ZVEVFqSB39s1NaLdyGU+sAMv65QQxFLh2HbNtzxIhCajpnLMLNdYPGXMdGQdQA==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.13.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"sideEffects":false,"_nodeVersion":"24.17.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","publint":"^0.3.15","webcola":"^3.4.0","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.34.0","dotparser":"^1.1.1","graphology":"^0.26.0","typescript":"^5.9.3","@types/node":"^25.0.3","ngraph.path":"^1.6.1","d3-hierarchy":"^3.1.2","ngraph.graph":"^20.1.2","@dagrejs/dagre":"^3.0.0","@xyflow/system":"^0.0.75","@changesets/cli":"^2.31.0","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","graphology-types":"^0.24.8","@dagrejs/graphlib":"^4.0.1","graphology-metrics":"^2.4.0","@types/d3-hierarchy":"^3.1.7","@vitest/coverage-v8":"^4.0.18","graphology-components":"^1.5.4","@hpcc-js/wasm-graphviz":"^1.22.0","graphology-shortest-path":"^2.1.0","@changesets/changelog-github":"^0.5.2","graphology-layout-forceatlas2":"^0.10.1"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","webcola":"^3.4.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","graphology":"^0.26.0","d3-hierarchy":"^3.0.0","@dagrejs/dagre":"^3.0.0 || ^4.0.0","fast-xml-parser":"^5.0.0","@hpcc-js/wasm-graphviz":"^1.0.0","graphology-layout-forceatlas2":"^0.10.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"webcola":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"graphology":{"optional":true},"d3-hierarchy":{"optional":true},"@dagrejs/dagre":{"optional":true},"fast-xml-parser":{"optional":true},"@hpcc-js/wasm-graphviz":{"optional":true},"graphology-layout-forceatlas2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_2.1.0_1782918159011_0.8557834093117869","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@statelyai/graph","version":"2.2.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@2.2.0","maintainers":[{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"e680a79f7dd39df37bea63aaca521ebb8de06f79","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-2.2.0.tgz","fileCount":81,"integrity":"sha512-X3j0VSWJneiqPE5meOLXiV3hG5FKBauNLhD66D77bcaSuMp7ZVABGqAlMfEPIVS9tWF8KhCwlUVg52z4XoaTEg==","signatures":[{"sig":"MEYCIQC9WGxIUlXiPxVA0fABMDhBk3QfBbIOqisGlslg88TWUgIhAKXspCkMXU5bmZWn/jLir+lgOH62KQJMNUP2LJsJ2oUr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":801563},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-2.2.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d2":"./dist/formats/d2/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./kernel":"./dist/kernel.mjs","./layout":"./dist/layout/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./layout/elk":"./dist/layout/elk.mjs","./layout/dagre":"./dist/layout/dagre.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs","./format-support":"./dist/format-support.mjs","./layout/webcola":"./dist/layout/webcola.mjs","./layout/d3-force":"./dist/layout/d3-force.mjs","./layout/graphviz":"./dist/layout/graphviz.mjs","./layout/cytoscape":"./dist/layout/cytoscape.mjs","./layout/forceatlas2":"./dist/layout/forceatlas2.mjs","./layout/d3-hierarchy":"./dist/layout/d3-hierarchy.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","bench":"vitest bench --run","build":"tsdown","verify":"pnpm typecheck && pnpm typecheck:repo && pnpm check:generated && pnpm check:conventions && pnpm test -- --run && pnpm build && pnpm validate:package","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","bench:report":"tsx bench/compare/report.ts","bench:compare":"tsx bench/compare/run.ts","fix:generated":"pnpm generate-schema","typecheck:repo":"tsc --project tsconfig.repo.json","check:generated":"tsx scripts/generate-json-schema.ts --check","generate-schema":"tsx scripts/generate-json-schema.ts","validate:package":"publint && tsx scripts/smoke-package.ts","check:conventions":"tsx scripts/check-conventions.ts","bench:compare:quick":"tsx bench/compare/run.ts --quick"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/e947cbe8e17dd15c10bac9f46c9a9eb9/statelyai-graph-2.2.0.tgz","_integrity":"sha512-X3j0VSWJneiqPE5meOLXiV3hG5FKBauNLhD66D77bcaSuMp7ZVABGqAlMfEPIVS9tWF8KhCwlUVg52z4XoaTEg==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.13.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","publint":"^0.3.15","webcola":"^3.4.0","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.34.0","dotparser":"^1.1.1","graphology":"^0.26.0","typescript":"^5.9.3","@types/node":"^25.0.3","ngraph.path":"^1.6.1","d3-hierarchy":"^3.1.2","ngraph.graph":"^20.1.2","@dagrejs/dagre":"^3.0.0","@xyflow/system":"^0.0.75","@changesets/cli":"^2.31.0","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","graphology-types":"^0.24.8","@dagrejs/graphlib":"^4.0.1","graphology-metrics":"^2.4.0","@types/d3-hierarchy":"^3.1.7","@vitest/coverage-v8":"^4.0.18","graphology-components":"^1.5.4","@hpcc-js/wasm-graphviz":"^1.22.0","graphology-shortest-path":"^2.1.0","@changesets/changelog-github":"^0.5.2","graphology-layout-forceatlas2":"^0.10.1"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","webcola":"^3.4.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","graphology":"^0.26.0","d3-hierarchy":"^3.0.0","@dagrejs/dagre":"^3.0.0 || ^4.0.0","fast-xml-parser":"^5.0.0","@hpcc-js/wasm-graphviz":"^1.0.0","graphology-layout-forceatlas2":"^0.10.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"webcola":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"graphology":{"optional":true},"d3-hierarchy":{"optional":true},"@dagrejs/dagre":{"optional":true},"fast-xml-parser":{"optional":true},"@hpcc-js/wasm-graphviz":{"optional":true},"graphology-layout-forceatlas2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_2.2.0_1786966313484_0.5457025699993321","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@statelyai/graph","version":"2.3.0","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","_id":"@statelyai/graph@2.3.0","maintainers":[{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"homepage":"https://github.com/statelyai/graph#readme","bugs":{"url":"https://github.com/statelyai/graph/issues"},"dist":{"shasum":"c12c6b1085bf1fe153adb7ceb2c216ab82b5c20a","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-2.3.0.tgz","fileCount":81,"integrity":"sha512-huib7YkERizfqvY+3w4ISSSaz3fGd8wA2dyriWwBcJV1Gni09gPukTw5/NHvnsKt76o5cWP9j31l8hLQNXkfYQ==","signatures":[{"sig":"MEUCIBEhRbajrfv1VQ8mLeMxEk7ErHVpWLaSiXog97LnIym5AiEApw5CY/TvkEqI/4gkPB5CbhEKVtu/86iy9vL75ktdg84=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":816487},"main":"./dist/index.mjs","type":"module","_from":"file:statelyai-graph-2.3.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":"./dist/index.mjs","./d2":"./dist/formats/d2/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gml":"./dist/formats/gml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./kernel":"./dist/kernel.mjs","./layout":"./dist/layout/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./algorithms":"./dist/algorithms.mjs","./layout/elk":"./dist/layout/elk.mjs","./layout/dagre":"./dist/layout/dagre.mjs","./package.json":"./package.json","./adjacency-list":"./dist/formats/adjacency-list/index.mjs","./format-support":"./dist/format-support.mjs","./layout/webcola":"./dist/layout/webcola.mjs","./layout/d3-force":"./dist/layout/d3-force.mjs","./layout/graphviz":"./dist/layout/graphviz.mjs","./layout/cytoscape":"./dist/layout/cytoscape.mjs","./layout/forceatlas2":"./dist/layout/forceatlas2.mjs","./layout/d3-hierarchy":"./dist/layout/d3-hierarchy.mjs"},"scripts":{"dev":"tsdown --watch","test":"vitest","bench":"vitest bench --run","build":"tsdown","verify":"pnpm typecheck && pnpm typecheck:repo && pnpm check:generated && pnpm check:conventions && pnpm test -- --run && pnpm build && pnpm validate:package","release":"pnpm run build && changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit","bench:report":"tsx bench/compare/report.ts","bench:compare":"tsx bench/compare/run.ts","fix:generated":"pnpm generate-schema","typecheck:repo":"tsc --project tsconfig.repo.json","check:generated":"tsx scripts/generate-json-schema.ts --check","generate-schema":"tsx scripts/generate-json-schema.ts","validate:package":"publint && tsx scripts/smoke-package.ts","check:conventions":"tsx scripts/check-conventions.ts","bench:compare:quick":"tsx bench/compare/run.ts --quick"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"_resolved":"/tmp/7df01154c7825e705b862f88a8a52fcb/statelyai-graph-2.3.0.tgz","_integrity":"sha512-huib7YkERizfqvY+3w4ISSSaz3fGd8wA2dyriWwBcJV1Gni09gPukTw5/NHvnsKt76o5cWP9j31l8hLQNXkfYQ==","repository":{"url":"git+https://github.com/statelyai/graph.git","type":"git"},"_npmVersion":"11.13.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","zod":"^4.3.6","bumpp":"^10.3.2","elkjs":"^0.11.1","tsdown":"^0.18.1","vitest":"^4.0.16","xstate":"^5.28.0","publint":"^0.3.15","webcola":"^3.4.0","d3-array":"^3.2.4","d3-force":"^3.0.0","cytoscape":"^3.34.0","dotparser":"^1.1.1","graphology":"^0.26.0","typescript":"^5.9.3","@types/node":"^25.0.3","ngraph.path":"^1.6.1","d3-hierarchy":"^3.1.2","ngraph.graph":"^20.1.2","@dagrejs/dagre":"^3.0.0","@xyflow/system":"^0.0.75","@changesets/cli":"^2.31.0","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","fast-xml-parser":"^5.3.4","graphology-types":"^0.24.8","@dagrejs/graphlib":"^4.0.1","graphology-metrics":"^2.4.0","@types/d3-hierarchy":"^3.1.7","@vitest/coverage-v8":"^4.0.18","graphology-components":"^1.5.4","@hpcc-js/wasm-graphviz":"^1.22.0","graphology-shortest-path":"^2.1.0","@changesets/changelog-github":"^0.5.2","graphology-layout-forceatlas2":"^0.10.1"},"peerDependencies":{"zod":"^4.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","webcola":"^3.4.0","d3-force":"^3.0.0","cytoscape":"^3.0.0","dotparser":"^1.0.0","graphology":"^0.26.0","d3-hierarchy":"^3.0.0","@dagrejs/dagre":"^3.0.0 || ^4.0.0","fast-xml-parser":"^5.0.0","@hpcc-js/wasm-graphviz":"^1.0.0","graphology-layout-forceatlas2":"^0.10.0"},"peerDependenciesMeta":{"zod":{"optional":true},"elkjs":{"optional":true},"webcola":{"optional":true},"d3-force":{"optional":true},"cytoscape":{"optional":true},"dotparser":{"optional":true},"graphology":{"optional":true},"d3-hierarchy":{"optional":true},"@dagrejs/dagre":{"optional":true},"fast-xml-parser":{"optional":true},"@hpcc-js/wasm-graphviz":{"optional":true},"graphology-layout-forceatlas2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/graph_2.3.0_1787089281511_0.37460318234074963","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@statelyai/graph","type":"module","sideEffects":false,"version":"2.4.0","description":"A TypeScript-first graph library with plain JSON-serializable objects","author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","homepage":"https://github.com/statelyai/graph#readme","repository":{"type":"git","url":"git+https://github.com/statelyai/graph.git"},"bugs":{"url":"https://github.com/statelyai/graph/issues"},"keywords":["graph","directed","undirected","dag","algorithms","typescript"],"exports":{".":"./dist/index.mjs","./algorithms":"./dist/algorithms.mjs","./format-support":"./dist/format-support.mjs","./adjacency-list":"./dist/formats/adjacency-list/index.mjs","./converter":"./dist/formats/converter/index.mjs","./cytoscape":"./dist/formats/cytoscape/index.mjs","./d2":"./dist/formats/d2/index.mjs","./d3":"./dist/formats/d3/index.mjs","./dot":"./dist/formats/dot/index.mjs","./edge-list":"./dist/formats/edge-list/index.mjs","./elk":"./dist/formats/elk/index.mjs","./gexf":"./dist/formats/gexf/index.mjs","./gml":"./dist/formats/gml/index.mjs","./graphml":"./dist/formats/graphml/index.mjs","./jgf":"./dist/formats/jgf/index.mjs","./mermaid":"./dist/formats/mermaid/index.mjs","./tgf":"./dist/formats/tgf/index.mjs","./xyflow":"./dist/formats/xyflow/index.mjs","./kernel":"./dist/kernel.mjs","./layout":"./dist/layout/index.mjs","./layout/cytoscape":"./dist/layout/cytoscape.mjs","./layout/d3-force":"./dist/layout/d3-force.mjs","./layout/d3-hierarchy":"./dist/layout/d3-hierarchy.mjs","./layout/dagre":"./dist/layout/dagre.mjs","./layout/elk":"./dist/layout/elk.mjs","./layout/forceatlas2":"./dist/layout/forceatlas2.mjs","./layout/graphviz":"./dist/layout/graphviz.mjs","./layout/webcola":"./dist/layout/webcola.mjs","./queries":"./dist/queries.mjs","./schemas":"./dist/schemas.mjs","./package.json":"./package.json"},"main":"./dist/index.mjs","module":"./dist/index.mjs","types":"./dist/index.d.mts","devDependencies":{"@changesets/changelog-github":"^0.5.2","@changesets/cli":"^2.31.0","@dagrejs/dagre":"^3.0.0","@dagrejs/graphlib":"^4.0.1","@hpcc-js/wasm-graphviz":"^1.22.0","@types/d3-array":"^3.2.2","@types/d3-force":"^3.0.10","@types/d3-hierarchy":"^3.1.7","@types/node":"^25.0.3","@vitest/coverage-v8":"^4.0.18","@xyflow/system":"^0.0.75","bumpp":"^10.3.2","cytoscape":"^3.34.0","d3-array":"^3.2.4","d3-force":"^3.0.0","d3-hierarchy":"^3.1.2","dotparser":"^1.1.1","elkjs":"^0.11.1","fast-xml-parser":"^5.3.4","graphology":"^0.26.0","graphology-components":"^1.5.4","graphology-layout-forceatlas2":"^0.10.1","graphology-metrics":"^2.4.0","graphology-shortest-path":"^2.1.0","graphology-types":"^0.24.8","ngraph.graph":"^20.1.2","ngraph.path":"^1.6.1","publint":"^0.3.15","tsdown":"^0.18.1","tsx":"^4.22.4","typescript":"^5.9.3","vitest":"^4.0.16","webcola":"^3.4.0","xstate":"^5.28.0","zod":"^4.3.6"},"peerDependencies":{"@dagrejs/dagre":"^3.0.0 || ^4.0.0","@hpcc-js/wasm-graphviz":"^1.0.0","cytoscape":"^3.0.0","d3-force":"^3.0.0","d3-hierarchy":"^3.0.0","dotparser":"^1.0.0","elkjs":"^0.9.0 || ^0.10.0 || ^0.11.0","fast-xml-parser":"^5.0.0","graphology":"^0.26.0","graphology-layout-forceatlas2":"^0.10.0","webcola":"^3.4.0","zod":"^4.0.0"},"peerDependenciesMeta":{"@dagrejs/dagre":{"optional":true},"@hpcc-js/wasm-graphviz":{"optional":true},"cytoscape":{"optional":true},"d3-force":{"optional":true},"d3-hierarchy":{"optional":true},"dotparser":{"optional":true},"elkjs":{"optional":true},"fast-xml-parser":{"optional":true},"graphology":{"optional":true},"graphology-layout-forceatlas2":{"optional":true},"webcola":{"optional":true},"zod":{"optional":true}},"scripts":{"build":"tsdown","bench":"vitest bench --run","dev":"tsdown --watch","fix:generated":"pnpm generate-schema","test":"vitest","typecheck":"tsc --noEmit","typecheck:repo":"tsc --project tsconfig.repo.json","check:generated":"tsx scripts/generate-json-schema.ts --check","check:conventions":"tsx scripts/check-conventions.ts","verify":"pnpm typecheck && pnpm typecheck:repo && pnpm check:generated && pnpm check:conventions && pnpm test -- --run && pnpm build && pnpm validate:package","validate:package":"publint && tsx scripts/smoke-package.ts","generate-schema":"tsx scripts/generate-json-schema.ts","changeset":"changeset","version":"changeset version","release":"pnpm run build && changeset publish","bench:compare":"tsx bench/compare/run.ts","bench:compare:quick":"tsx bench/compare/run.ts --quick","bench:report":"tsx bench/compare/report.ts"},"_id":"@statelyai/graph@2.4.0","_integrity":"sha512-bJfR7s7q2s/0fyM17qJl3QBVBnYj38OzmWYkpXstkD8DVTuFNvwfpGXtkOAbHWqDmdLerRGmcRRS+mUsJYC7gQ==","_resolved":"/tmp/df392e3368c397c87f4d19a47134d8b5/statelyai-graph-2.4.0.tgz","_from":"file:statelyai-graph-2.4.0.tgz","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-bJfR7s7q2s/0fyM17qJl3QBVBnYj38OzmWYkpXstkD8DVTuFNvwfpGXtkOAbHWqDmdLerRGmcRRS+mUsJYC7gQ==","shasum":"316e2576b4ea9e9f2f40d9e58c3c2ca681e40d8a","tarball":"https://registry.npmjs.org/@statelyai/graph/-/graph-2.4.0.tgz","fileCount":81,"unpackedSize":825058,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@statelyai%2fgraph@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDTFoUoFt59K9dkbJ60Wpw+cQhiK7eFBkIvGSAhk/G0cgIhAJKVzuekExievhRWiY9Yw+5Bfa6iG64XZky8NuYHKdol"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b376c73-ca57-4ab5-89a9-709f3ffc6490"}},"directories":{},"maintainers":[{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/graph_2.4.0_1787843295755_0.6317359397849343"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-11T21:13:29.747Z","modified":"2026-08-27T15:08:16.307Z","0.1.0":"2026-02-11T21:13:30.049Z","0.3.0":"2026-02-21T02:54:42.583Z","0.3.1":"2026-02-25T11:04:17.173Z","0.4.0":"2026-02-25T12:13:06.705Z","0.5.0":"2026-03-05T12:19:50.154Z","0.6.0":"2026-03-16T15:45:23.392Z","0.7.0":"2026-03-18T11:25:58.398Z","0.8.0":"2026-03-20T12:32:04.973Z","0.9.0":"2026-03-31T13:55:36.743Z","0.10.0":"2026-04-06T21:25:49.284Z","0.11.0":"2026-04-10T19:31:53.966Z","0.11.1":"2026-04-25T14:47:58.096Z","0.12.0":"2026-04-26T10:35:37.301Z","0.13.0":"2026-05-22T18:25:00.624Z","1.0.0":"2026-05-28T20:23:41.319Z","2.0.0":"2026-06-11T14:07:49.206Z","2.1.0":"2026-07-01T15:02:39.270Z","2.2.0":"2026-08-17T11:31:53.635Z","2.3.0":"2026-08-18T21:41:21.677Z","2.4.0":"2026-08-27T15:08:15.944Z"},"bugs":{"url":"https://github.com/statelyai/graph/issues"},"author":{"name":"David Khourshid","email":"david@stately.ai"},"license":"MIT","homepage":"https://github.com/statelyai/graph#readme","keywords":["graph","directed","undirected","dag","algorithms","typescript"],"repository":{"type":"git","url":"git+https://github.com/statelyai/graph.git"},"description":"A TypeScript-first graph library with plain JSON-serializable objects","maintainers":[{"name":"davidkpiano","email":"davidkpiano@gmail.com"}],"readme":"# @statelyai/graph\n\nA TypeScript graph library for JSON-serializable graph IR. Use it to validate, analyze, transform, and round-trip directed, undirected, hierarchical, port-aware, and visual graphs across tools.\n\nMade from our experience at [stately.ai](https://stately.ai), where we build visual tools for complex systems.\n\n## Install\n\n```bash\nnpm install @statelyai/graph\n```\n\nOptional peers are only needed for specific adapters:\n\n<!-- optional peer dependencies derived from package.json#peerDependencies -->\n\n| Package                                     | Needed for                                          |\n| ------------------------------------------- | --------------------------------------------------- |\n| `fast-xml-parser`                           | `@statelyai/graph/gexf`, `@statelyai/graph/graphml` |\n| `dotparser`                                 | `@statelyai/graph/dot` parsing                      |\n| `zod`                                       | `@statelyai/graph/schemas`                          |\n| `elkjs`                                     | `@statelyai/graph/elk`, `@statelyai/graph/layout/elk` |\n| `@dagrejs/dagre`                            | `@statelyai/graph/layout/dagre`                     |\n| `@hpcc-js/wasm-graphviz`                    | `@statelyai/graph/layout/graphviz`                  |\n| `d3-force`                                  | `@statelyai/graph/layout/d3-force`                  |\n| `graphology`, `graphology-layout-forceatlas2` | `@statelyai/graph/layout/forceatlas2`             |\n| `d3-hierarchy`                              | `@statelyai/graph/layout/d3-hierarchy`              |\n| `webcola`                                   | `@statelyai/graph/layout/webcola`                   |\n| `cytoscape`                                 | `@statelyai/graph/layout/cytoscape`, Cytoscape format typing |\n\n## Highlights\n\n- Plain JSON graphs with no runtime wrappers required; omitted `data` defaults to `null`\n- Standalone functions with a consistent `get*`/`gen*`/`is*`/`add*` naming model\n- Directed, undirected, hierarchical, and visual graph support\n- Ports for node-editor and dataflow-style graphs\n- Algorithms for traversal, paths, centrality, communities, connectivity, flow/cuts, matching, cores, isomorphism, ordering, MST, and walks\n- Pluggable layout over eight external engines (ELK, Graphviz, dagre, d3-force, ForceAtlas2, tidy tree, WebCola, cytoscape) — pure functions, optional peers\n- Diff/patch utilities for graph state changes\n- Multi-format conversion via package subpaths, with fidelity claims tested against fixtures\n- Small, fast test suite with broad format coverage\n\n## Quick Start\n\nGraphs are plain JSON-serializable objects. All operations are standalone functions — no classes, no DOM, no rendering engine.\n\n```ts\nimport {\n  createGraph,\n  addNode,\n  addEdge,\n  getShortestPath,\n} from '@statelyai/graph';\n\nconst graph = createGraph({\n  nodes: [\n    { id: 'a', label: 'Start' },\n    { id: 'b', label: 'Middle' },\n    { id: 'c', label: 'End' },\n  ],\n  edges: [\n    { id: 'e1', sourceId: 'a', targetId: 'b' },\n    { id: 'e2', sourceId: 'b', targetId: 'c' },\n  ],\n});\n\n// Mutate in place\naddNode(graph, { id: 'd', label: 'Shortcut' });\naddEdge(graph, { id: 'e3', sourceId: 'a', targetId: 'd' });\n\n// Algorithms work on the plain object\nconst path = getShortestPath(graph, { from: 'a', to: 'c' });\n```\n\n## Graph Manipulation\n\n<!-- mutable and immutable graph operations exported from src/graph.ts -->\n\nLook up, add, delete, and update nodes and edges. Query neighbors, predecessors, successors, degree, and more.\n\n```ts\nimport {\n  getNode,\n  deleteNode,\n  getNeighbors,\n  getSources,\n} from '@statelyai/graph';\n\nconst node = getNode(graph, 'a'); // lookup by id\ndeleteNode(graph, 'd'); // removes node + connected edges\nconst neighbors = getNeighbors(graph, 'a'); // adjacent nodes\nconst roots = getSources(graph); // nodes with no incoming edges\n```\n\nBatch operations (`addEntities`, `deleteEntities`, `updateEntities`) let you apply multiple changes at once. `deleteEntities` accepts any iterable of IDs, collects it before mutation, and filters nodes/edges in one pass.\n\nEvery mutable CRUD operation has an immutable counterpart:\n\n| Mutable | Immutable |\n| --- | --- |\n| `addNode` / `addEdge` | `getGraphWithNode` / `getGraphWithEdge` |\n| `deleteNode` / `deleteEdge` | `getGraphWithoutNode` / `getGraphWithoutEdge` |\n| `updateNode` / `updateEdge` | `getGraphWithUpdatedNode` / `getGraphWithUpdatedEdge` |\n| `addEntities` | `getGraphWithEntities` |\n| `deleteEntities` | `getGraphWithoutEntities` |\n| `updateEntities` | `getGraphWithUpdatedEntities` |\n\nImmutable operations return a new graph, leave the source untouched, and reuse unchanged entities where safe.\n\n`updateNode`/`updateEdge` accept any config field. Optional fields (position, size, `shape`, `color`, `style`, edge `weight`/`mode`/ports) can be **unset** by passing `null`; `undefined` leaves them unchanged:\n\n```ts\nupdateNode(graph, 'a', { x: 100, color: 'red' }); // set\nupdateEdge(graph, 'e1', { weight: 2, mode: 'undirected' });\nupdateNode(graph, 'a', { color: null }); // unset\n```\n\n## Hierarchy\n\nNodes support parent-child relationships for compound/nested graphs. Query children, ancestors, descendants, depth, and least common ancestor. Use `getFlattenedGraph()` to decompose into a flat leaf-node graph.\n\n```ts\nimport { createGraph, getChildren, getLCA, getFlattenedGraph } from '@statelyai/graph';\n\nconst graph = createGraph({\n  nodes: [\n    { id: 'a' },\n    { id: 'b', initialNodeId: 'b1' },\n    { id: 'b1', parentId: 'b' },\n    { id: 'b2', parentId: 'b' },\n    { id: 'c' },\n  ],\n  edges: [\n    { id: 'e1', sourceId: 'a', targetId: 'b' }, // resolves to a -> b1\n    { id: 'e2', sourceId: 'b1', targetId: 'b2' },\n    { id: 'e3', sourceId: 'b', targetId: 'c' }, // expands from all leaves of b\n  ],\n});\n\nconst children = getChildren(graph, 'b'); // [b1, b2]\nconst flat = getFlattenedGraph(graph); // only leaf nodes, edges resolved\n```\n\n## Ports\n\nPorts are optional named connection points on nodes. They are useful for flow-based systems, node editors, and dataflow graphs where edges need to target a specific input or output.\n\n```ts\nimport { createGraph, getEdgesByPort, getPorts } from '@statelyai/graph';\n\nconst graph = createGraph({\n  nodes: [\n    {\n      id: 'fetch',\n      ports: [{ name: 'result', direction: 'out' }],\n    },\n    {\n      id: 'render',\n      ports: [{ name: 'input', direction: 'in' }],\n    },\n  ],\n  edges: [\n    {\n      id: 'e1',\n      sourceId: 'fetch',\n      sourcePort: 'result',\n      targetId: 'render',\n      targetPort: 'input',\n    },\n  ],\n});\n\ngetPorts(graph, 'fetch'); // [{ name: 'result', ... }]\ngetEdgesByPort(graph, 'render', 'input'); // [e1]\n```\n\n## Schema Validation\n\n<!-- validation helpers exported from src/schemas.ts -->\n\nFor structural invariant checking without zod, the core export `getGraphIssues(graph)` returns machine-readable issues (duplicate ids, dangling edge endpoints, missing parents, parent cycles, missing initial nodes, duplicate or invalid port references) — the recommended gate for untrusted or imported graphs:\n\n```ts\nimport { getGraphIssues } from '@statelyai/graph';\n\nconst issues = getGraphIssues(importedGraph);\nif (issues.length > 0) {\n  console.error(issues.map((issue) => issue.message));\n}\n```\n\nUse the `@statelyai/graph/schemas` subpath when you want full runtime shape validation or JSON Schema generation. `validateGraph()` combines zod shape checks with the same graph invariants.\n\n```ts\nimport { GraphSchema, isGraph, validateGraph } from '@statelyai/graph/schemas';\n\nconst unknownValue: unknown = JSON.parse(input);\n\nif (isGraph(unknownValue)) {\n  // fully typed Graph\n} else {\n  console.error(validateGraph(unknownValue));\n}\n\nconst parsed = GraphSchema.parse(unknownValue);\n```\n\n## Algorithms\n\n<!-- algorithm functions exported from src/algorithms.ts -->\n\nIncludes traversal (BFS, DFS, preorder/postorder), unweighted hop distances, pathfinding (shortest path, ordered shortest simple paths, simple paths, all-pairs shortest paths, A*, bidirectional Dijkstra), Eulerian paths/circuits, centrality/link analysis (degree, closeness, betweenness, PageRank, HITS, eigenvector, Katz), community detection (Louvain, label propagation, Girvan-Newman, greedy modularity, modularity scoring), flow & cuts (`getMaxFlow`, `getMinCut`), bipartite analysis (`isBipartite`, Hopcroft–Karp `getMaximumBipartiteMatching`), k-cores (`getCoreNumbers`, `getKCore`), graph coloring (`getGraphColoring`, `isValidColoring`), planarity testing (`isPlanar`), approximate TSP tours (`getTSPTour`) and Steiner trees (`getSteinerTree`), cycle detection, weak/strong connectivity and components, bridges, articulation points, biconnected components, dominator trees, transitive reduction, isomorphism, topological sort, minimum spanning tree, and seeded graph generators (`createCompleteGraph`, `createGridGraph`, `createRandomGraph`, `createWattsStrogatzGraph`, `createBarabasiAlbertGraph`). Many algorithms have lazy generator variants (`gen*`) for early exit. See [docs/algorithms.md](./docs/algorithms.md) for the full reference.\n\nHot algorithm loops (centrality, components) run on an internal compressed-sparse-row snapshot — cached and invalidated transparently like the rest of the index — so they stay fast on large graphs without changing the plain-JSON model. Algorithm results are differential-tested against graphology on seeded random graphs.\n\n```ts\nimport {\n  genBFS,\n  genDFS,\n  genPostorder,\n  hasPath,\n  isAcyclic,\n  getShortestPath,\n  getCycles,\n  getTopologicalSort,\n  getConnectedComponents,\n  getUnweightedDistances,\n  isStronglyConnected,\n  getMinimumSpanningTree,\n  getPageRank,\n  getLouvainCommunities,\n  getLabelPropagationCommunities,\n  genGirvanNewmanCommunities,\n  getBridges,\n  getMaxFlow,\n  getDominatorTree,\n  getTransitiveReduction,\n  isIsomorphic,\n} from '@statelyai/graph';\n\nfor (const node of genBFS(graph, 'a')) {\n  /* breadth-first */\n}\nfor (const node of genDFS(graph, 'a')) {\n  /* depth-first */\n}\nfor (const node of genPostorder(graph, 'a')) {\n  /* descendants before parents */\n}\n\n// Multi-source, bounded, reverse traversal\nfor (const node of genBFS(graph, {\n  from: ['c', 'd'],\n  direction: 'incoming',\n  radius: 2,\n})) {\n  /* at most two edges from c or d */\n}\n\n// Active traversal structure is stable even if graph mutation APIs run before\n// iteration completes. A fresh generator sees the updated graph.\n\nhasPath(graph, 'a', 'c'); // reachability\nisAcyclic(graph); // cycle check\ngetShortestPath(graph, { from: 'a', to: 'c' }); // single shortest path\ngetShortestPath(graph, {\n  from: (node) => node.data?.entry === true,\n  to: 'c',\n}); // shortest path from any matching source\ngetTopologicalSort(graph); // topological order (or null)\ngetConnectedComponents(graph); // connected components\ngetUnweightedDistances(graph, 'a'); // reachable node IDs → hop counts\nisStronglyConnected(graph); // every node reaches every other node\ngetMinimumSpanningTree(graph, { getWeight: (e) => e.weight ?? 1 }); // MST\ngetPageRank(graph); // link analysis scores\ngetLouvainCommunities(graph); // community detection (Louvain)\ngetLabelPropagationCommunities(graph); // community detection\n[...genGirvanNewmanCommunities(graph)]; // lazy community splits\ngetBridges(graph); // bridge edges\ngetMaxFlow(graph, { from: 'a', to: 'c' }); // max flow + min cut\ngetDominatorTree(graph, { from: 'a' }); // immediate dominators\ngetTransitiveReduction(graph); // minimal equivalent DAG\nisIsomorphic(graph, otherGraph); // structural equivalence\n```\n\n### Path sets & coverage\n\n<!-- path-set helpers exported from src/path-utils.ts and src/coverage.ts -->\n\nPath coverage is graph-generic: targets are nodes, edges, or contiguous edge\nsequences. Derive common target sets, measure arbitrary `GraphPath[]` values,\nor reduce candidates while preserving everything those candidates cover.\n\n```ts\nimport {\n  getCoverageTargets,\n  getPathCoverage,\n  getCoveragePreservingPaths,\n  getEdgeCoveragePaths,\n  getReducedPaths,\n} from '@statelyai/graph';\n\nconst targets = getCoverageTargets(graph, { kind: 'edge-pairs' });\nconst reduced = getCoveragePreservingPaths(candidates, {\n  targets,\n  strategy: 'greedy', // use 'exact' for small candidate sets\n});\ngetPathCoverage(graph, reduced, { targets });\n\ngetReducedPaths(candidates); // remove duplicates/contained subpaths\ngetEdgeCoveragePaths(graph); // heuristic shortest-access edge coverage plan\n```\n\n`getPathNodes()`, `getPathEdges()`, `getPathWeight()`, `isValidPath()`, and\n`hasSubpath()` provide lower-level composition. `getLineGraph()` converts edge\nadjacency into ordinary node adjacency.\n\n## Large graphs & cancellation\n\nJSON is the canonical representation; typed arrays are the compute layer. The `@statelyai/graph/kernel` subpath exposes the fast-path primitives the hot algorithms already use — the adjacency `getIndex(graph)`, the compressed-sparse-row snapshot `getCSR(graph)`, `invalidateIndex(graph)`, and `memoizeByGraph()`. All are cached in `WeakMap`s keyed on the graph, revalidated in O(1) via a version counter, and never serialized. Build on them to write plugins and inner loops without rebuilding adjacency from `graph.nodes`/`graph.edges` on every call.\n\n```ts\nimport { getCSR, memoizeByGraph } from '@statelyai/graph/kernel';\nimport { getBetweennessCentrality } from '@statelyai/graph';\n\nconst csr = getCSR(graph); // flat Int32Array snapshot for inner loops\n\n// Version-keyed memoization: repeated queries on an unchanged graph are O(1);\n// any mutation bumps the index version and invalidates automatically.\nconst betweenness = memoizeByGraph(getBetweennessCentrality);\nbetweenness(graph); // computes\nbetweenness(graph); // cached\n```\n\nExpensive algorithms (betweenness, closeness, PageRank, HITS, eigenvector, Katz, Louvain, label propagation, Girvan–Newman, greedy modularity, max-flow/min-cut, all-pairs shortest paths, isomorphism, dominator tree) accept an `AbortSignal`; on abort they throw `signal.reason`:\n\n```ts\nconst controller = new AbortController();\nsetTimeout(() => controller.abort(new Error('too slow')), 1000);\ngetBetweennessCentrality(graph, { signal: controller.signal });\n```\n\nThere is no bundled worker runtime — workers are a recipe, not a dependency. Because a `Graph` is plain JSON, `structuredClone`/`postMessage` it to a Worker and run the algorithm there with zero serialization layer:\n\n```ts\n// worker.ts\nimport { getBetweennessCentrality } from '@statelyai/graph';\nself.onmessage = (e) => self.postMessage(getBetweennessCentrality(e.data));\n\n// main.ts\nconst worker = new Worker(new URL('./worker.ts', import.meta.url), {\n  type: 'module',\n});\nworker.postMessage(graph); // graph survives postMessage as-is\nworker.onmessage = (e) => console.log(e.data);\n```\n\n`gen*` generators remain the cooperative-slicing story for main-thread work. See [docs/scaling-and-plugins.md](./docs/scaling-and-plugins.md) for the full design.\n\n### Writing plugins\n\nA plugin is just an npm package of standalone prefixed functions taking `graph` first — exactly like the built-ins — built on `@statelyai/graph/kernel` for the fast path and `memoizeByGraph` for caching. There is no registry and no method chaining: the standalone-function model _is_ the plugin model. Test against the JSON schema (`@statelyai/graph/schemas`), and publish with the npm keyword `statelyai-graph-plugin` for discoverability.\n\n## Layout\n\n<!-- layout adapters under src/layout/*.ts and helpers exported from src/layout/index.ts -->\n\nPlug-and-play layout over external engines — pure functions in, positioned `VisualGraph` out. No layout algorithms of our own; each adapter is a subpath with an optional peer dependency. The hierarchical engines (ELK, dagre, Graphviz) also produce routed edge `points` and computed edge-label rects; the physics/tree/cytoscape engines position nodes only.\n\n```ts\nimport { getElkLayout } from '@statelyai/graph/layout/elk'; // elkjs\nimport { getDagreLayout } from '@statelyai/graph/layout/dagre'; // @dagrejs/dagre\nimport { getGraphvizLayout } from '@statelyai/graph/layout/graphviz'; // @hpcc-js/wasm-graphviz (8 engines)\nimport { genForceLayout } from '@statelyai/graph/layout/d3-force'; // d3-force\nimport { getForceAtlas2Layout } from '@statelyai/graph/layout/forceatlas2'; // graphology FA2\nimport { getTidyTreeLayout } from '@statelyai/graph/layout/d3-hierarchy'; // d3-hierarchy\nimport { getColaLayout } from '@statelyai/graph/layout/webcola'; // webcola (constraints)\nimport { getCytoscapeLayout } from '@statelyai/graph/layout/cytoscape'; // cytoscape ecosystem\nimport {\n  applyLayoutFrame,\n  getGraphWithLayoutFrame,\n  getLayoutBounds,\n  centerGraph,\n} from '@statelyai/graph/layout';\n\nconst laidOut = await getElkLayout(graph, {\n  measure: (node) => measureText(node.label), // text measurement stays yours\n  constraints: { layer: (node) => node.data?.tier }, // portable layer constraint\n});\n\n// Physics layouts are generators — one tick per frame, cancel by stopping\nfor (const frame of genForceLayout(graph, { seed: 42 })) {\n  applyLayoutFrame(graph, frame);\n  render(graph);\n}\n\n// Immutable alternative\nlet current = graph;\nfor (const frame of genForceLayout(graph, { seed: 42 })) {\n  current = getGraphWithLayoutFrame(current, frame);\n  render(current);\n}\n```\n\nEdge `x`/`y`/`width`/`height` are canonically the edge-label rect; routes live in `edge.points` (`routing` says how to interpret them). Layouts are plain JSON — tween between engines with `genLayoutTransition`, or diff them with `getPatches`. See [docs/layout.md](./docs/layout.md) and [docs/layout-transitions.md](./docs/layout-transitions.md).\n\n## Diff, transforms & walks\n\n<!-- diff helpers from src/diff.ts, structural transforms from src/transforms.ts and src/neighborhood.ts, set operations from src/set-operations.ts, and walk helpers from src/walks.ts -->\n\nBeyond classic graph algorithms, the library also includes utilities for evolving and exploring graph state:\n\n- `getDiff()`, `getPatches()`, `getPatchedGraph()` (immutable), and `updateGraphWithPatches()` (mutable) for graph change tracking\n- `genRandomWalk()`, `genWeightedRandomWalk()`, and coverage helpers for model-based testing and simulation\n- `getSubgraph()`, `getFilteredGraph()`, `getMappedGraph()`, `getNeighborhood()`, `getReversedGraph()`, and `getLineGraph()` for structural transforms\n- Mapping/filtering transforms capture node and edge collections before callbacks run, so callback-driven structural mutation cannot produce a torn result\n- `getGraphUnion()`, `getGraphIntersection()`, `getGraphDifference()`, `getGraphSymmetricDifference()`, `getDisjointUnion()`, and `getGraphComplement()` for graph set operations\n\nBinary set operations match nodes and edges by stable ID, require matching graph modes, and retain graph metadata from the left operand. Union and intersection use right-side entity data when IDs conflict. Disjoint union keeps left IDs and deterministically remaps right-side collisions.\n\n## Visual Graphs\n\n`createVisualGraph()` guarantees `x`, `y`, `width`, `height` on all nodes and edges (default `0`).\n\n```ts\nimport { createVisualGraph } from '@statelyai/graph';\n\nconst diagram = createVisualGraph({\n  direction: 'right',\n  nodes: [\n    { id: 'a', x: 0, y: 0, width: 120, height: 60, shape: 'rectangle' },\n    { id: 'b', x: 200, y: 0, width: 120, height: 60, shape: 'ellipse' },\n  ],\n  edges: [{ id: 'e1', sourceId: 'a', targetId: 'b', width: 100, height: 100 }],\n});\n```\n\n## Format Conversion\n\nImport and export graphs to many formats. Converters are available as subpath imports.\n\n```ts\nimport { toDOT } from '@statelyai/graph/dot';\nimport { fromGEXF } from '@statelyai/graph/gexf';\nimport { toCytoscapeJSON } from '@statelyai/graph/cytoscape';\nimport { toD3Graph } from '@statelyai/graph/d3';\n\nconst dot = toDOT(graph); // Graphviz DOT\nconst cytoData = toCytoscapeJSON(graph); // Cytoscape.js JSON\nconst d3Data = toD3Graph(graph); // D3.js { nodes, links }\nconst imported = fromGEXF(gexfXmlString); // GEXF (Gephi)\n```\n\n<!-- supported format adapters derived from src/formats/* subdirectories -->\n\n**Supported formats:** Cytoscape.js JSON, D3.js JSON, D2, JSON Graph Format, GEXF, GraphML, GML, TGF, DOT, Mermaid (flowchart, state, sequence, class, ER, mindmap, block, Ishikawa), ELK, xyflow, adjacency list, and edge list.\n\nEach bidirectional format also has a converter object:\n\n```ts\nimport { cytoscapeConverter } from '@statelyai/graph/cytoscape';\n\nconst cyto = cytoscapeConverter.to(graph);\nconst back = cytoscapeConverter.from(cyto);\n```\n\nRound-trip fidelity may use adapter-specific graph, node, and edge `data`\nmetadata when the target format does not have a native field for a source\nconcept. A `partial` round-trip entry means the adapter still drops meaningful\nsource information instead of preserving it as metadata.\n\n## Format Support\n\n<!-- format support matrix derived from src/formats/support.ts -->\n\n| Format              | Hierarchy | Ports   | Visual  | Round-trip | Notes                                                                                                                                        |\n| ------------------- | --------- | ------- | ------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------- |\n| `adjacency-list`    | none      | none    | none    | partial    | Connectivity only; edge metadata is lost.                                                                                                    |\n| `cytoscape`         | full      | full    | full    | full       | Graph/node/edge metadata (incl. per-edge `mode`) round-trips through element data.                                                           |\n| `d3`                | full      | full    | full    | full       | Graph/node/edge metadata (incl. per-edge `mode`) round-trips through the loose JSON shape.                                                   |\n| `d2`                | full      | full    | full    | full       | Hierarchy, ports, styles, and connector modes round-trip; nested `vars` sub-blocks are dropped.                                              |\n| `dot`               | partial   | partial | partial | partial    | Edge port ids round-trip, but `:port:compass` mapping is still incomplete.                                                                   |\n| `edge-list`         | none      | none    | none    | partial    | Endpoints only.                                                                                                                              |\n| `elk`               | full      | full    | full    | full       | Metadata round-trips through reserved layout options; port ids are emitted as `nodeId__portName` (document-unique, as ELK requires).         |\n| `gexf`              | full      | full    | full    | full       | Custom attributes preserve metadata; `bidirectional` maps to directed.                                                                       |\n| `gml`               | full      | full    | full    | full       | Metadata round-trips through direct and JSON fields; per-edge/graph `mode` via a dialect key.                                                |\n| `graphml`           | full      | full    | partial | full       | Emit is own-dialect (`<data>` fields, flat); import handles both dialects incl. standard nested `<graph>`, native `<port>` elements, and `sourceport`/`targetport` attributes. Multi-graph files import the first graph. |\n| `jgf`               | full      | full    | full    | full       | Metadata (incl. per-edge/graph `mode`) round-trips through `metadata` objects.                                                               |\n| `tgf`               | none      | none    | none    | partial    | Minimal ids and labels only.                                                                                                                 |\n| `xyflow`            | full      | full    | full    | full       | Metadata (incl. weight, ports, per-edge `mode`) round-trips through reserved data fields; parents are ordered before children for React Flow. |\n| `mermaid/block`     | partial   | none    | partial | partial    | Syntax-driven, not port-aware.                                                                                                               |\n| `mermaid/class`     | none      | none    | none    | partial    | Class syntax is stored conservatively.                                                                                                       |\n| `mermaid/er`        | none      | none    | none    | partial    | Focuses on entities and cardinality.                                                                                                         |\n| `mermaid/flowchart` | partial   | none    | partial | partial    | `linkStyle` indices are fragile.                                                                                                             |\n| `mermaid/ishikawa`  | full      | none    | none    | partial    | Preserves hierarchy, not fishbone layout.                                                                                                    |\n| `mermaid/mindmap`   | full      | none    | partial | partial    | Icon syntax is not fully re-emitted.                                                                                                         |\n| `mermaid/sequence`  | partial   | none    | none    | partial    | Actor links and menu syntax are incomplete.                                                                                                  |\n| `mermaid/state`     | full      | none    | partial | partial    | Isolated states and labels now emit (labels via the description form); `initialNodeId` round-trips as `[*] -->`.                             |\n\nSome formats have optional peer dependencies: `fast-xml-parser` (GEXF, GraphML) and `dotparser` (DOT). All other formats are dependency-free.\n\nFormat-specific docs live alongside the source:\n\n<!-- format README files under src/formats/*/README.md -->\n\n- [Adjacency list](./src/formats/adjacency-list/README.md)\n- [Cytoscape](./src/formats/cytoscape/README.md)\n- [D3](./src/formats/d3/README.md)\n- [D2](./src/formats/d2/README.md)\n- [DOT](./src/formats/dot/README.md)\n- [Edge list](./src/formats/edge-list/README.md)\n- [ELK](./src/formats/elk/README.md)\n- [GEXF](./src/formats/gexf/README.md)\n- [GML](./src/formats/gml/README.md)\n- [GraphML](./src/formats/graphml/README.md)\n- [JGF](./src/formats/jgf/README.md)\n- [Mermaid](./src/formats/mermaid/README.md)\n- [TGF](./src/formats/tgf/README.md)\n- [xyflow](./src/formats/xyflow/README.md)\n- [Converter helpers](./src/formats/converter/README.md)\n\n## Guides\n\n<!-- guide documents under docs/*.md -->\n\n- [Layout guide](./docs/layout.md) — the adapter contract, all eight engines, constraints, sizing, web workers\n- [Layout transitions](./docs/layout-transitions.md) — tween between engines; layouts are just data\n- [Algorithms reference](./docs/algorithms.md) — every algorithm with complexity and semantics notes\n- [Benchmarks](./docs/benchmarks.md) — measured against graphology, ngraph, graphlib, and cytoscape\n- [Scaling & plugins](./docs/scaling-and-plugins.md) — the public kernel, cancellation, worker recipe, and plugin authoring\n- [Migrating from graphlib](./docs/migrating-from-graphlib.md)\n- [React Flow + ELK pipeline](./docs/react-flow-elk-pipeline.md) — measured nodes, worker layout, live re-layout\n\n## Examples\n\n<!-- runnable example files under examples/ -->\n\nThe repo includes runnable examples under [`examples/`](./examples):\n\n- [Flow-based math](./examples/flow-based-math.ts) shows ports, topological ordering, and value propagation.\n- [Async workflow](./examples/async-workflow.ts) models an n8n/Zapier-style workflow with ports and dependency-aware execution.\n\n## Development\n\n<!-- dev commands from package.json#scripts -->\n\n```bash\npnpm install\npnpm verify\npnpm bench                # micro-benchmarks (vitest bench)\npnpm bench:compare        # cross-library comparison run\npnpm bench:compare:quick  # faster, smaller-sample comparison\npnpm bench:report         # render the comparison results\n```\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md) for contributor conventions, format-module checklist, and release notes guidance.\n\n## Why this library?\n\nGraph file formats define how to _store_ graphs. Visualization libraries define how to _render_ them. This library is the trusted interchange and analysis layer in between: plain JSON objects in, validation, algorithms, transforms, diffing, and format-preserving conversion out.\n\n```\nGEXF file → fromGEXF() → Graph → run algorithms, mutate → toCytoscapeJSON() → render\n```\n\nYour `Graph` is a plain object that survives `JSON.stringify`, `structuredClone`, `postMessage`, and `localStorage` without adapters.\n\nA canonical graph is a deterministic projection of a graph for comparison, hashing, snapshots, or caches. A future pure helper would return a new graph with stable node/edge ordering and normalized optional fields. A hash would be a digest of that canonical JSON. A summary would be a small structural report, for example node count, edge count, roots, sinks, component count, compound depth, port count, and whether the graph is acyclic. A pure `sortGraph()` would return a sorted copy and never mutate the input.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}