diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index a7f5bd3..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-*.tsbuildinfo
-/.vscode
-/**/*.d.ts
-/**/*.js
-/**/*.js.flow
-/cjs
-/dec
-/esm
-/node_modules
-/umd
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 99697b6..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2020 Haydn Ewers
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/README.md b/README.md
index b84d277..c7adeca 100644
--- a/README.md
+++ b/README.md
@@ -1,639 +1,4 @@
-
-
-
-
-
A utility library for working with graphs in JavaScript.
-
-
-
-
-
-
-## Features
-
-- Pure functions and immutable data patterns.
-- Works in Node.js and browser runtimes.
-- Flow and TypeScript declarations included.
-- CommonJS, UMD and ESM modules provided.
-- Zero dependencies.
-- D3.js interoperability.
-
-## Demo
-
-https://h2788.csb.app/
-
-
-
-## Installation
-
-Yarn:
-
-```shell
-yarn add graph-fns
-```
-
-npm:
-
-```shell
-npm install graph-fns
-```
-
-## Usage
-
-```js
-import { create, addEdge, isCyclic, topologicalSort, degree, addVertex } from "graph-fns";
-
-let graph = create(3, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B", "C" }
-
-graph = addEdge(graph, ["A", "C"]);
-//=> Graph { "A" -> "C", "B" }
-
-graph = addEdge(graph, ["B", "A"]);
-//=> Graph { "A" -> "C", "B" -> "A" }
-
-isCyclic(graph);
-//=> false
-
-topologicalSort(graph);
-//=> ["B", "A", "C"]
-
-degree(graph, "A");
-//=> 2
-
-graph = addVertex(graph, "D");
-//=> Graph { "A" -> "C", "B" -> "A", "D" }
-
-graph = addEdge(graph, ["C", "D"]);
-//=> Graph { "A" -> "C", "B" -> "A", "C" -> "D" }
-
-descendants(graph, "A");
-//=> Set { "C", "D" }
-
-graph = addEdge(graph, ["D", "B"]);
-//=> Graph { "A" -> "C", "B" -> "A", "C" -> "D", "D" -> "B" }
-
-isCyclic(graph);
-//=> true
-```
-
-## Terminology
-
-| Term | Description |
-| --- | --- |
-| graph / network | A system of vertices connected in pairs by edges. ([Wikipedia]()) |
-| vertex / node | The fundamental unit of which graphs are formed. ([Wikipedia]()) |
-| edge / link / branch / arc | A connection between two vertices in a graph. ([Wikipedia]()) |
-| order | The number of vertices in a graph. |
-| size | The number of edges in a graph. |
-| weighted graph | A graph with a numeric weight associated with each edge. ([Wolfram MathWorld](https://mathworld.wolfram.com/WeightedGraph.html)) |
-| directed graph | A graph where the edges have direction. ([Wikipedia](https://en.wikipedia.org/wiki/Directed_graph)) |
-| undirected graph | A graph where the edges do not have a direction. ([Math Insight](https://mathinsight.org/definition/undirected_graph)) |
-| path | A sequence of edges that connect a set of vertices where each vertex is distinct. ([Wikipedia]()) |
-| directed path | A path where all edges are orientated in the same direction. |
-| undirected path | A path where the edges can be orientated in any direction. |
-| loop / buckle | An edge which starts and ends at the same vertex. ([Wikipedia]()) |
-| cycle | A path that starts and ends at the same vertex. ([Wikipedia]()) |
-
-## Types
-
-### D3Graph
-
-```ts
-declare type D3Graph = {
- nodes: Array<{
- id: string;
- }>;
- links: Array<{
- source: string;
- target: string;
- }>;
-};
-```
-
-A representation a graph convenient for using with [D3.js force-directed graphs](https://github.com/d3/d3-force).
-
-### Edge
-
-```ts
-declare type Edge = [string, string];
-```
-
-### Graph
-
-```ts
-declare type Graph = {
- [u: string]: {
- [v: string]: number;
- };
-};
-```
-
-This is the main data structure used by graph-fns to represent a _graph_. It is an [adjacency matrix](https://en.wikipedia.org/wiki/Adjacency_matrix) where each number in the matrix describes the edge from vertex `u` to vertex `v`. By default, a value of `1` is used to indicate there is a edge between the two vertices, but any value other than `0` can be used to signify the presence of an edge (typically used to describe a weighted graph).
-
-## Functions
-
-### addEdge
-
-```ts
-declare const addEdge: (graph: Graph, [u, v]: Edge) => Graph;
-```
-
-Adds a new edge to the graph from vertex `u` to vertex `v`.
-
-**Note**: `addEdge(graph, edge)` is equivalent to `setEdge(graph, edge, 1)`.
-
-```js
-let graph = create(3, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B", "C" }
-
-graph = addEdge(graph, ["A", "B"]);
-//=> Graph { "A" -> "B", "C" }
-```
-
-Also see:
-
-- [removeEdge](#removeEdge)
-- [getEdge](#getEdge)
-- [setEdge](#setEdge)
-
-### addVertex
-
-```ts
-declare const addVertex: (graph: Graph, vertex: string) => Graph;
-```
-
-Adds a new vertex to the graph. The new vertex will not have any edges connecting it to existing vertices in the graph.
-
-**Note**: If the vertex already exists the graph will be returned unmodified.
-
-Also see:
-
-- [removeVertex](#removeVertex)
-
-### ancestors
-
-```ts
-declare const ancestors: (graph: Graph, vertex: string) => Set;
-```
-
-Given a [DAG](https://en.wikipedia.org/wiki/Directed_acyclic_graph), returns all ancestors of the given vertex (i.e. vertices from which there is a directed path to the given vertex).
-
-**Note**: If the given graph contains cycles (checked with [isCyclic](#isCyclic)), an error will be thrown.
-
-Also see:
-
-- [descendants](#descendants)
-- [parents](#parents)
-
-### children
-
-```ts
-declare const children: (graph: Graph, vertex: string) => Set;
-```
-
-Returns all the vertices that are children of the given vertex (i.e. there is an edge starting at the given vertex going to the child vertex).
-
-**Note**: If there is an edge that both starts and ends at the given vertex, it will be considered a child of itself and included in the result.
-
-Also see:
-
-- [parents](#parents)
-- [descendants](#descendants)
-
-### clone
-
-```ts
-declare const clone: (graph: Graph) => Graph;
-```
-
-Creates a copy of the graph.
-
-### create
-
-```ts
-declare const create: (size?: number, id?: (i: number) => string) => Graph;
-```
-
-Creates a new graph. The new graph can be seeded with an optional number of vertices, but it will not contain any edges.
-
-The `size` argument defines how many vertices with which to seed the graph. Additional vertices can be added using [addVertex](#addVertex), but it is more efficient to create them upfront when possible.
-
-The `id` function can be provided to specify the identity of each vertex. The `i` argument passed is a unique monotonically increasing integer for each vertex being created and by default it will simply be converted to a string (`(i) => i.toString(10)`) resulting in the sequence `"0"`, `"1"`, `"2"` etc.
-
-To create a graph using existing ID's you can use a pattern like this:
-
-```js
-const users = [
- { id: "412", name: "Jane" },
- { id: "34", name: "Kate" },
- { id: "526", name: "Mike" },
- { id: "155", name: "Tony" },
-];
-
-const graph = create(users.length, (i) => users[i].id);
-```
-
-### degree
-
-```ts
-declare const degree: (graph: Graph, vertex: string, weighted?: boolean) => number;
-```
-
-Returns the [degree]() for the given vertex.
-
-By default `weighted` is `false`, if set to `true` the result will be the sum of the edge weights (which could be zero or a negative value).
-
-Also see:
-
-- [indegree](#indegree)
-- [outdegree](#outdegree)
-
-### descendants
-
-```ts
-declare const descendants: (graph: Graph, vertex: string) => Set;
-```
-
-Given a [DAG](https://en.wikipedia.org/wiki/Directed_acyclic_graph), returns all descendants of the given vertex (i.e. vertices to which there is a directed path from the given vertex).
-
-**Note**: If the given graph contains cycles (checked with [isCyclic](#isCyclic)), an error will be thrown.
-
-Also see:
-
-- [ancestors](#ancestors)
-- [children](#children)
-
-### edges
-
-```ts
-declare const edges: (graph: Graph) => Set;
-```
-
-Returns all the edges in the graph (i.e. any edge with a value other than `0`).
-
-### fromD3
-
-```ts
-declare const fromD3: (graph: D3Graph) => Graph;
-```
-
-Converts a graph from a [D3Graph](#D3Graph) representation into a [Graph](#Graph) representation.
-
-When the D3Graph contains multiple links between two nodes the resulting graph will have inflated edge weights to reflect that.
-
-```js
-const graph = fromD3({
- nodes: [{ id: "A" }, { id: "B" }, { id: "C" }],
- links: [
- { source: "A", target: "B" },
- { source: "A", target: "C" },
- { source: "A", target: "C" },
- ],
-});
-//=> Graph { "A" -> "B", "A" -> "C" }
-
-getEdge(["A", "B"]);
-//=> 1
-getEdge(["A", "C"]);
-//=> 2
-```
-
-**Note**: Any extraneous data associated with nodes or links in the D3Graph representation will be ignored.
-
-Also see:
-
-- [toD3](#toD3)
-
-### getEdge
-
-```ts
-declare const getEdge: (graph: Graph, [u, v]: Edge) => number;
-```
-
-Get the weight of the given edge.
-
-Also see:
-
-- [addEdge](#addEdge)
-- [removeEdge](#removeEdge)
-- [setEdge](#setEdge)
-
-### indegree
-
-```ts
-declare const indegree: (graph: Graph, vertex: string, weighted?: boolean) => number;
-```
-
-Returns the [indegree](https://en.wikipedia.org/wiki/Indegree) for the given vertex.
-
-By default `weighted` is `false`, if set to `true` the result will be the sum of the edge weights (which could be zero or a negative value).
-
-Also see:
-
-- [degree](#degree)
-- [outdegree](#outdegree)
-
-### isCyclic
-
-```ts
-declare const isCyclic: (graph: Graph) => boolean;
-```
-
-Returns `true` if the graph provided contains any [cycles]() (including "loops" — when an edge that starts and ends at the same vertex), otherwise returns `false`.
-
-### isUndirected
-
-```ts
-declare const isUndirected: (graph: Graph) => boolean;
-```
-
-Returns `true` if the graph can be considered an [undirected graph](https://mathinsight.org/definition/undirected_graph) — every edge in the graph (from vertex A to B) has a mutual edge (from vertex B to A) with an equal weight. Loops are considered bidirectional and are allow in a undirected graph.
-
-```js
-let graph = create(2, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B" }
-
-isUndirected(graph);
-//=> true
-
-graph = addEdge(graph, ["A", "B"]);
-//=> Graph { "A" -> "B" }
-
-isUndirected(graph);
-//=> false
-
-graph = addEdge(graph, ["B", "A"]);
-//=> Graph { "A" <-> "B" }
-
-isUndirected(graph);
-//=> true
-```
-
-### makeUndirected
-
-```ts
-declare const makeUndirected: (graph: Graph, merge?: (a: number, b: number) => number) => Graph;
-```
-
-Converts a directed graph to an undirected graph by either adding edges to make them mutual or balancing the weights of mutual edges that aren't already equal.
-
-The `merge` function is used to determine the weight of edges in cases where mutual edges with differing weights already exist. If not provide the default method is to use the highest of the two edge weights (`(a, b) => Math.max(a, b)`).
-
-```js
-let graph = create(3, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B", "C" }
-
-graph = addEdge(graph, ["A", "B"]);
-//=> Graph { "A" -> "B", "C" }
-
-graph = makeUndirected(graph);
-//=> Graph { "A" <-> "B", "C" }
-```
-
-### order
-
-```ts
-declare const order: (graph: Graph) => number;
-```
-
-Returns the number of vertices in the graph.
-
-```js
-let graph = create(3, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B", "C" }
-
-order(graph);
-//=> 3
-```
-
-Also see:
-
-- [size](#size)
-
-### outdegree
-
-```ts
-declare const outdegree: (graph: Graph, vertex: string, weighted?: boolean) => number;
-```
-
-Returns the [outdegree](https://en.wikipedia.org/wiki/Outdegree) for the given vertex.
-
-By default `weighted` is `false`, if set to `true` the result will be the sum of the edge weights (which could be zero or a negative value).
-
-Also see:
-
-- [degree](#degree)
-- [indegree](#indegree)
-
-### parents
-
-```ts
-declare const parents: (graph: Graph, vertex: string) => Set;
-```
-
-Returns all the vertices that are parents of the given vertex (i.e. there is an edge starting at the parent vertex going to the given vertex).
-
-**Note**: If there is an edge that both starts and ends at the given vertex, it will be considered a parent of itself and included in the result.
-
-Also see:
-
-- [ancestors](#ancestors)
-- [children](#children)
-
-### removeEdge
-
-```ts
-declare const removeEdge: (graph: Graph, edge: Edge) => Graph;
-```
-
-Removes an edge from a graph.
-
-**Note**: `removeEdge(graph, edge)` is equivalent to `setEdge(graph, edge, 0)`.
-
-```js
-let graph = create(3, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B", "C" }
-
-graph = addEdge(graph, ["A", "B"]);
-//=> Graph { "A" -> "B", "C" }
-
-graph = removeEdge(graph, ["A", "B"]);
-//=> Graph { "A", "B", "C" }
-```
-
-Also see:
-
-- [addEdge](#addEdge)
-- [getEdge](#getEdge)
-- [setEdge](#setEdge)
-
-### removeVertex
-
-```ts
-declare const removeVertex: (graph: Graph, vertex: string) => Graph;
-```
-
-Removes a vertex from a graph.
-
-Also see:
-
-- [addVertex](#addVertex)
-
-### setEdge
-
-```ts
-declare const setEdge: (graph: Graph, [u, v]: Edge, weight: number) => Graph;
-```
-
-Set the weight of the given edge.
-
-**Note**: `setEdge(graph, edge, 1)` is equivalent to `addEdge(graph, edge)` and `setEdge(graph, edge, 0)` is equivalent to `removeEdge(graph, edge)`.
-
-```js
-let graph = create(3, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B", "C" }
-
-graph = setEdge(graph, ["A", "B"], 1);
-//=> Graph { "A" -> "B", "C" }
-
-graph = setEdge(graph, ["A", "B"], 0);
-//=> Graph { "A", "B", "C" }
-```
-
-Also see:
-
-- [addEdge](#addEdge)
-- [getEdge](#getEdge)
-- [removeEdge](#removeEdge)
-
-### size
-
-```ts
-declare const size: (graph: Graph) => number;
-```
-
-Returns the number of edges in the graph.
-
-```js
-let graph = create(3, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B", "C" }
-
-graph = addEdge(graph, ["A", "B"]);
-//=> Graph { "A" -> "B", "C" }
-
-graph = addEdge(graph, ["B", "C"]);
-//=> Graph { "A" -> "B", "B" -> "C" }
-
-size(graph);
-//=> 2
-```
-
-Also see:
-
-- [order](#order)
-
-### toD3
-
-```ts
-declare const toD3: (graph: Graph) => D3Graph;
-```
-
-Converts a graph from a [Graph](#Graph) representation into a [D3Graph](#D3Graph) representation.
-
-Edges with a weight of 2 or greater will result in multiple links being generated in the D3Graph.
-
-```js
-let graph = create(3, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B", "C" }
-
-graph = setEdge(graph, ["A", "B"], 1);
-//=> Graph { "A" -> "B", "C" }
-
-graph = setEdge(graph, ["A", "C"], 2);
-//=> Graph { "A" -> "B", "A" -> "C" }
-
-toD3(graph);
-//=> {
-// nodes: [{ id: "A" }, { id: "B" }, { id: "C" }],
-// links: [
-// { source: "A", target: "B" },
-// { source: "A", target: "C" },
-// { source: "A", target: "C" },
-// ],
-// }
-```
-
-Also see:
-
-- [fromD3](#fromD3)
-
-### topologicalSort
-
-```ts
-declare const topologicalSort: (graph: Graph) => Array;
-```
-
-Given a [DAG](https://en.wikipedia.org/wiki/Directed_acyclic_graph), returns an array of the graph's vertices sorted using a [topological sort](https://en.wikipedia.org/wiki/Topological_sorting).
-
-**Note**: If the given graph contains cycles (checked with [isCyclic](#isCyclic)), an error will be thrown.
-
-```js
-let graph = create(3, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B", "C" }
-
-graph = addEdge(graph, ["A", "C"]);
-//=> Graph { "A" -> "C", "B" }
-
-graph = addEdge(graph, ["C", "B"]);
-//=> Graph { "A" -> "C", "C" -> "B" }
-
-topologicalSort(graph);
-//=> ["A", "C", "B"]
-```
-
-### transpose
-
-```ts
-declare const transpose: (graph: Graph) => Graph;
-```
-
-Flips the orientation of all edges in a directed graph.
-
-```js
-let graph = create(3, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B", "C" }
-
-graph = addEdge(graph, ["A", "B"]);
-//=> Graph { "A" -> "B", "C" }
-
-graph = addEdge(graph, ["B", "C"]);
-//=> Graph { "A" -> "B", "B" -> "C" }
-
-transpose(graph);
-//=> Graph { "B" -> "A", "C" -> "B" }
-```
-
-### vertices
-
-```ts
-declare const vertices: (graph: Graph) => Set;
-```
-
-Returns the vertices in the graph.
-
-### vertexPairs
-
-```ts
-declare const vertexPairs: (graph: Graph) => Set<[string, string]>;
-```
-
-Returns a list of all pairs of vertices in the graph irrespective of the edges present in the graph.
-
-```js
-let graph = create(3, (i) => String.fromCharCode(65 + i));
-//=> Graph { "A", "B", "C" }
-
-vertexPairs(graph);
-//=> Set { ["A", "A"], ["A", "B"], ["A", "C"], ["B", "B"], ["B", "C"], ["C", "C"] }
-```
+> [!IMPORTANT]
+> The `graph-fns` source code has been moved into the `fns` repo:
+>
+> https://github.com/haydn/fns/tree/main/packages/graph-fns
diff --git a/logo.png b/logo.png
deleted file mode 100644
index 6788daa7c38183072889ba3de76044a26489a3fe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 16517
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
E0P)QD+W-In
diff --git a/package.json b/package.json
deleted file mode 100644
index 908f009..0000000
--- a/package.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "name": "graph-fns",
- "version": "0.4.0",
- "description": "A utility library for working with graphs.",
- "repository": "github:haydn/graph-fns",
- "keywords": [
- "graph",
- "utility",
- "graph theory",
- "networks"
- ],
- "main": "cjs/index.js",
- "author": "Haydn Ewers",
- "license": "MIT",
- "private": false,
- "engines": {
- "node": ">=20"
- },
- "scripts": {
- "build": "yarn build:dec && yarn build:cjs && yarn build:umd && yarn build:esm && cp ./dec/* ./",
- "build:dec": "tsc --project ./tsconfig.dec.json && flowgen ./dec/index.d.ts -o ./dec/index.js.flow",
- "build:cjs": "tsc --project ./tsconfig.cjs.json",
- "build:umd": "tsc --project ./tsconfig.umd.json",
- "build:esm": "tsc --project ./tsconfig.esm.json",
- "release": "echo 'Use \"npm exec np\" to create a release.'",
- "test": "prettier -c {src,tests}/**/*.ts **/*.md && tsc && tape tests/**/*.js",
- "version": "yarn build"
- },
- "files": [
- "index.d.ts",
- "index.js.flow",
- "cjs/index.js",
- "umd/index.js",
- "esm/index.js",
- "LICENSE",
- "README.md"
- ],
- "devDependencies": {
- "@types/node": "^14.14.12",
- "@types/tape": "^4.13.0",
- "flowgen": "^1.13.0",
- "np": "^9.2.0",
- "prettier": "^2.2.1",
- "tape": "^5.0.1",
- "typescript": "^5.3.3"
- },
- "prettier": {
- "arrowParens": "always",
- "bracketSpacing": true,
- "jsxBracketSameLine": false,
- "jsxSingleQuote": false,
- "printWidth": 100,
- "proseWrap": "never",
- "quoteProps": "as-needed",
- "semi": true,
- "singleQuote": false,
- "tabWidth": 2,
- "trailingComma": "all",
- "useTabs": false
- }
-}
diff --git a/screenshot.png b/screenshot.png
deleted file mode 100644
index 7486b28e27d449675a13041c7b8a093e93c8d58b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 74826
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