@dxos/graph 0.8.4-main.fd6878d → 0.8.4-main.fffef41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import { effect } from "@preact/signals-core";
3
3
  import { inspectCustom } from "@dxos/debug";
4
4
  import { failedInvariant, invariant as invariant2 } from "@dxos/invariant";
5
5
  import { live } from "@dxos/live-object";
6
- import { isNotFalsy, removeBy } from "@dxos/util";
6
+ import { isTruthy, removeBy } from "@dxos/util";
7
7
 
8
8
  // src/util.ts
9
9
  import { invariant } from "@dxos/invariant";
@@ -123,7 +123,7 @@ var ReadonlyGraphModel = class {
123
123
  visited.add(root.id);
124
124
  const targets = this.filterEdges({
125
125
  source: root.id
126
- }).map((edge) => this.getNode(edge.target)).filter(isNotFalsy);
126
+ }).map((edge) => this.getNode(edge.target)).filter(isTruthy);
127
127
  return [
128
128
  root,
129
129
  ...targets.flatMap((target) => this._traverse(target, visited))
@@ -315,12 +315,10 @@ import { invariant as invariant3 } from "@dxos/invariant";
315
315
  var __dxlog_file3 = "/__w/dxos/dxos/packages/common/graph/src/selection.ts";
316
316
  var SelectionModel = class {
317
317
  _singleSelect;
318
- _selected;
319
- _selectedIds;
318
+ _selected = signal(/* @__PURE__ */ new Set());
319
+ _selectedIds = computed(() => Array.from(this._selected.value.values()));
320
320
  constructor(_singleSelect = false) {
321
321
  this._singleSelect = _singleSelect;
322
- this._selected = signal(/* @__PURE__ */ new Set());
323
- this._selectedIds = computed(() => Array.from(this._selected.value.values()));
324
322
  }
325
323
  toJSON() {
326
324
  return {
@@ -389,7 +387,7 @@ var SelectionModel = class {
389
387
  };
390
388
 
391
389
  // src/types.ts
392
- import { Schema } from "effect";
390
+ import * as Schema from "effect/Schema";
393
391
  var BaseGraphNode = Schema.Struct({
394
392
  id: Schema.String,
395
393
  type: Schema.optional(Schema.String),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/model.ts", "../../../src/util.ts", "../../../src/selection.ts", "../../../src/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { effect } from '@preact/signals-core';\n\nimport { inspectCustom } from '@dxos/debug';\nimport { failedInvariant, invariant } from '@dxos/invariant';\nimport { type Live, live } from '@dxos/live-object';\nimport { type MakeOptional, isNotFalsy, removeBy } from '@dxos/util';\n\nimport { type BaseGraphEdge, type BaseGraphNode, type Graph, type GraphEdge, type GraphNode } from './types';\nimport { createEdgeId } from './util';\n\n/**\n * Readonly Graph wrapper.\n */\nexport class ReadonlyGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> {\n protected readonly _graph: Graph;\n\n /**\n * NOTE: Pass in simple Graph or Live.\n */\n constructor(graph?: Graph) {\n this._graph = graph ?? {\n nodes: [],\n edges: [],\n };\n }\n\n [inspectCustom]() {\n return this.toJSON();\n }\n\n /**\n * Return stable sorted JSON representation of graph.\n */\n toJSON() {\n return {\n nodes: this.nodes.length,\n edges: this.edges.length,\n };\n }\n\n get graph(): Graph {\n return this._graph;\n }\n\n get nodes(): Node[] {\n return this._graph.nodes as Node[];\n }\n\n get edges(): Edge[] {\n return this._graph.edges as Edge[];\n }\n\n //\n // Nodes\n //\n\n findNode(id: string): Node | undefined {\n return this.nodes.find((node) => node.id === id);\n }\n\n getNode(id: string): Node {\n return this.findNode(id) ?? failedInvariant();\n }\n\n filterNodes({ type }: Partial<GraphNode.Any> = {}): Node[] {\n return this.nodes.filter((node) => !type || type === node.type);\n }\n\n //\n // Edges\n //\n\n findEdge(id: string): Edge | undefined {\n return this.edges.find((edge) => edge.id === id);\n }\n\n getEdge(id: string): Edge {\n return this.findEdge(id) ?? failedInvariant();\n }\n\n filterEdges({ type, source, target }: Partial<GraphEdge> = {}): Edge[] {\n return this.edges.filter(\n (edge) =>\n (!type || type === edge.type) && (!source || source === edge.source) && (!target || target === edge.target),\n );\n }\n\n //\n // Traverse\n //\n\n traverse(root: Node): Node[] {\n return this._traverse(root);\n }\n\n private _traverse(root: Node, visited: Set<string> = new Set()): Node[] {\n if (visited.has(root.id)) {\n return [];\n }\n\n visited.add(root.id);\n const targets = this.filterEdges({ source: root.id })\n .map((edge) => this.getNode(edge.target))\n .filter(isNotFalsy);\n\n return [root, ...targets.flatMap((target) => this._traverse(target, visited))];\n }\n}\n\n/**\n * Mutable Graph wrapper.\n */\nexport abstract class AbstractGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n Model extends AbstractGraphModel<Node, Edge, Model, Builder> = any,\n Builder extends AbstractGraphBuilder<Node, Edge, Model> = AbstractGraphBuilder<Node, Edge, Model>,\n> extends ReadonlyGraphModel<Node, Edge> {\n /**\n * Allows chaining.\n */\n abstract get builder(): Builder;\n\n /**\n * Shallow copy of provided graph.\n */\n abstract copy(graph?: Partial<Graph>): Model;\n\n clear(): this {\n this._graph.nodes.length = 0;\n this._graph.edges.length = 0;\n return this;\n }\n\n addGraph(graph: Model): this {\n this.addNodes(graph.nodes);\n this.addEdges(graph.edges);\n return this;\n }\n\n addGraphs(graphs: Model[]): this {\n graphs.forEach((graph) => {\n this.addNodes(graph.nodes);\n this.addEdges(graph.edges);\n });\n return this;\n }\n\n addNode(node: Node): Node {\n invariant(node.id, 'ID is required');\n invariant(!this.findNode(node.id), `node already exists: ${node.id}`);\n this._graph.nodes.push(node);\n return node;\n }\n\n addNodes(nodes: Node[]): Node[] {\n return nodes.map((node) => this.addNode(node));\n }\n\n addEdge(edge: MakeOptional<Edge, 'id'>): Edge {\n invariant(edge.source);\n invariant(edge.target);\n if (!edge.id) {\n // TODO(burdon): Generate random id.\n edge = { id: createEdgeId(edge), ...edge };\n }\n invariant(!this.findNode(edge.id!));\n this._graph.edges.push(edge as Edge);\n return edge as Edge;\n }\n\n addEdges(edges: Edge[]): Edge[] {\n return edges.map((edge) => this.addEdge(edge));\n }\n\n removeNode(id: string): Model {\n const edges = removeBy<Edge>(this._graph.edges as Edge[], (edge) => edge.source === id || edge.target === id);\n const nodes = removeBy<Node>(this._graph.nodes as Node[], (node) => node.id === id);\n return this.copy({ nodes, edges });\n }\n\n removeNodes(ids: string[]): Model {\n const graphs = ids.map((id) => this.removeNode(id));\n return this.copy().addGraphs(graphs);\n }\n\n removeEdge(id: string): Model {\n const edges = removeBy<Edge>(this._graph.edges as Edge[], (edge) => edge.id === id);\n return this.copy({ nodes: [], edges });\n }\n\n removeEdges(ids: string[]): Model {\n const graphs = ids.map((id) => this.removeEdge(id));\n return this.copy().addGraphs(graphs);\n }\n}\n\n/**\n * Chainable builder wrapper\n */\nexport abstract class AbstractGraphBuilder<\n Node extends BaseGraphNode,\n Edge extends BaseGraphEdge,\n Model extends GraphModel<Node, Edge>,\n> {\n constructor(protected readonly _model: Model) {}\n\n get model(): Model {\n return this._model;\n }\n\n call(cb: (builder: this) => void): this {\n cb(this);\n return this;\n }\n\n getNode(id: string): Node {\n return this.model.getNode(id);\n }\n\n addNode(node: Node): this {\n this._model.addNode(node);\n return this;\n }\n\n addEdge(edge: MakeOptional<Edge, 'id'>): this {\n this._model.addEdge(edge);\n return this;\n }\n\n addNodes(nodes: Node[]): this {\n this._model.addNodes(nodes);\n return this;\n }\n\n addEdges(edges: Edge[]): this {\n this._model.addEdges(edges);\n return this;\n }\n}\n\n/**\n * Basic model.\n */\nexport class GraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends AbstractGraphModel<Node, Edge, GraphModel<Node, Edge>, GraphBuilder<Node, Edge>> {\n override get builder() {\n return new GraphBuilder<Node, Edge>(this);\n }\n\n override copy(graph?: Partial<Graph>): GraphModel<Node, Edge> {\n return new GraphModel<Node, Edge>({ nodes: graph?.nodes ?? [], edges: graph?.edges ?? [] });\n }\n}\n\nexport type GraphModelSubscription = (model: GraphModel, graph: Live<Graph>) => void;\n\n/**\n * Subscription.\n * NOTE: Requires `registerSignalsRuntime` to be called.\n */\nexport const subscribe = (model: GraphModel, cb: GraphModelSubscription, fire = false) => {\n if (fire) {\n cb(model, model.graph);\n }\n\n return effect(() => {\n cb(model, model.graph); // TODO(burdon): This won't work unless model.graph is reactive.\n });\n};\n\n/**\n * Basic reactive model.\n */\nexport class ReactiveGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends GraphModel<Node, Edge> {\n constructor(graph?: Partial<Graph>) {\n super(\n live({\n nodes: graph?.nodes ?? [],\n edges: graph?.edges ?? [],\n }),\n );\n }\n\n override copy(graph?: Partial<Graph>): ReactiveGraphModel<Node, Edge> {\n return new ReactiveGraphModel<Node, Edge>(graph);\n }\n\n subscribe(cb: GraphModelSubscription, fire = false): () => void {\n return subscribe(this, cb, fire);\n }\n}\n\n/**\n * Basic builder.\n */\nexport class GraphBuilder<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends AbstractGraphBuilder<Node, Edge, GraphModel<Node, Edge>> {\n override call(cb: (builder: this) => void): this {\n cb(this);\n return this;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nconst KEY_REGEX = /\\w+/;\n\n// NOTE: The `relation` is different from the `type`.\ntype EdgeMeta = { source: string; target: string; relation?: string };\n\nexport const createEdgeId = ({ source, target, relation }: EdgeMeta) => {\n invariant(source.match(KEY_REGEX), `invalid source: ${source}`);\n invariant(target.match(KEY_REGEX), `invalid target: ${target}`);\n return [source, relation, target].join('_');\n};\n\nexport const parseEdgeId = (id: string): EdgeMeta => {\n const [source, relation, target] = id.split('_');\n invariant(source.length && target.length);\n return { source, relation: relation.length ? relation : undefined, target };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ReadonlySignal, type Signal, computed, signal } from '@preact/signals-core';\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Reactive selection model.\n */\nexport class SelectionModel {\n private readonly _selected: Signal<Set<string>> = signal(new Set<string>());\n private readonly _selectedIds = computed(() => Array.from(this._selected.value.values()));\n\n constructor(private readonly _singleSelect: boolean = false) {}\n\n toJSON(): { selected: string[] } {\n return {\n selected: Array.from(this._selected.value.values()),\n };\n }\n\n get size(): number {\n return this._selected.value.size;\n }\n\n get selected(): ReadonlySignal<string[]> {\n return this._selectedIds;\n }\n\n contains(id: string): boolean {\n return this._selected.value.has(id);\n }\n\n clear(): void {\n this._selected.value = new Set();\n }\n\n add(id: string): void {\n invariant(id);\n this._selected.value = new Set<string>(\n this._singleSelect ? [id] : [...Array.from(this._selected.value.values()), id],\n );\n }\n\n remove(id: string): void {\n invariant(id);\n this._selected.value = new Set<string>(Array.from(this._selected.value.values()).filter((_id) => _id !== id));\n }\n\n // TODO(burdon): Handle single select.\n\n setSelected(ids: string[], shift = false): void {\n this._selected.value = new Set([...(shift ? Array.from(this._selected.value.values()) : []), ...ids]);\n }\n\n toggleSelected(ids: string[], shift = false): void {\n const set = new Set<string>(shift ? Array.from(this._selected.value.values()) : undefined);\n ids.forEach((id) => {\n if (this._selected.value.has(id)) {\n set.delete(id);\n } else {\n set.add(id);\n }\n });\n\n this._selected.value = set;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { type Specialize } from '@dxos/util';\n\n//\n// Node\n//\n\n// TODO(burdon): Make type extensible (i.e., not dependent on `data` property)?\nexport const BaseGraphNode = Schema.Struct({\n id: Schema.String,\n type: Schema.optional(Schema.String),\n data: Schema.optional(Schema.Any),\n});\n\n/** Raw base type. */\nexport type BaseGraphNode = Schema.Schema.Type<typeof BaseGraphNode>;\n\n/** Typed node data. */\ntype GraphNode<Data = any, Optional extends boolean = false> = Specialize<\n BaseGraphNode,\n Optional extends true ? { data?: Data } : { data: Data }\n>;\n\nexport declare namespace GraphNode {\n export type Any = GraphNode<any, true>;\n export type Optional<Data = any> = GraphNode<Data, true>;\n export type Required<Data = any> = GraphNode<Data, false>;\n}\n\n//\n// Edge\n//\n\nexport const BaseGraphEdge = Schema.Struct({\n id: Schema.String,\n type: Schema.optional(Schema.String),\n source: Schema.String,\n target: Schema.String,\n data: Schema.optional(Schema.Any),\n});\n\n/** Raw base type. */\nexport type BaseGraphEdge = Schema.Schema.Type<typeof BaseGraphEdge>;\n\n/** Typed edge data. */\nexport type GraphEdge<Data = any, Optional extends boolean = false> = Specialize<\n BaseGraphEdge,\n Optional extends true ? { data?: Data } : { data: Data }\n>;\n\nexport declare namespace GraphEdge {\n export type Any = GraphEdge<any, true>;\n export type Optional<Data = any> = GraphEdge<Data, true>;\n export type Required<Data = any> = GraphEdge<Data, false>;\n}\n\n//\n// Graph\n//\n\nexport const Graph = Schema.Struct({\n id: Schema.optional(Schema.String),\n nodes: Schema.mutable(Schema.Array(BaseGraphNode)),\n edges: Schema.mutable(Schema.Array(BaseGraphEdge)),\n});\n\nexport type Graph = Schema.Schema.Type<typeof Graph>;\n"],
5
- "mappings": "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",
6
- "names": ["effect", "inspectCustom", "failedInvariant", "invariant", "live", "isNotFalsy", "removeBy", "invariant", "KEY_REGEX", "createEdgeId", "source", "target", "relation", "match", "join", "parseEdgeId", "id", "split", "length", "undefined", "ReadonlyGraphModel", "_graph", "graph", "nodes", "edges", "inspectCustom", "toJSON", "length", "findNode", "id", "find", "node", "getNode", "failedInvariant", "filterNodes", "type", "filter", "findEdge", "edge", "getEdge", "filterEdges", "source", "target", "traverse", "root", "_traverse", "visited", "Set", "has", "add", "targets", "map", "isNotFalsy", "flatMap", "AbstractGraphModel", "clear", "addGraph", "addNodes", "addEdges", "addGraphs", "graphs", "forEach", "addNode", "invariant", "push", "addEdge", "createEdgeId", "removeNode", "removeBy", "copy", "removeNodes", "ids", "removeEdge", "removeEdges", "AbstractGraphBuilder", "_model", "model", "call", "cb", "GraphModel", "builder", "GraphBuilder", "subscribe", "fire", "effect", "ReactiveGraphModel", "live", "computed", "signal", "invariant", "SelectionModel", "_selected", "_selectedIds", "_singleSelect", "Set", "Array", "from", "value", "values", "toJSON", "selected", "size", "contains", "id", "has", "clear", "add", "remove", "filter", "_id", "setSelected", "ids", "shift", "toggleSelected", "set", "undefined", "forEach", "delete", "Schema", "BaseGraphNode", "Schema", "Struct", "id", "String", "type", "optional", "data", "Any", "BaseGraphEdge", "source", "target", "Graph", "nodes", "mutable", "Array", "edges"]
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { effect } from '@preact/signals-core';\n\nimport { inspectCustom } from '@dxos/debug';\nimport { failedInvariant, invariant } from '@dxos/invariant';\nimport { type Live, live } from '@dxos/live-object';\nimport { type MakeOptional, isTruthy, removeBy } from '@dxos/util';\n\nimport { type BaseGraphEdge, type BaseGraphNode, type Graph, type GraphEdge, type GraphNode } from './types';\nimport { createEdgeId } from './util';\n\n/**\n * Readonly Graph wrapper.\n */\nexport class ReadonlyGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> {\n protected readonly _graph: Graph;\n\n /**\n * NOTE: Pass in simple Graph or Live.\n */\n constructor(graph?: Graph) {\n this._graph = graph ?? {\n nodes: [],\n edges: [],\n };\n }\n\n [inspectCustom]() {\n return this.toJSON();\n }\n\n /**\n * Return stable sorted JSON representation of graph.\n */\n toJSON() {\n return {\n nodes: this.nodes.length,\n edges: this.edges.length,\n };\n }\n\n get graph(): Graph {\n return this._graph;\n }\n\n get nodes(): Node[] {\n return this._graph.nodes as Node[];\n }\n\n get edges(): Edge[] {\n return this._graph.edges as Edge[];\n }\n\n //\n // Nodes\n //\n\n findNode(id: string): Node | undefined {\n return this.nodes.find((node) => node.id === id);\n }\n\n getNode(id: string): Node {\n return this.findNode(id) ?? failedInvariant();\n }\n\n filterNodes({ type }: Partial<GraphNode.Any> = {}): Node[] {\n return this.nodes.filter((node) => !type || type === node.type);\n }\n\n //\n // Edges\n //\n\n findEdge(id: string): Edge | undefined {\n return this.edges.find((edge) => edge.id === id);\n }\n\n getEdge(id: string): Edge {\n return this.findEdge(id) ?? failedInvariant();\n }\n\n filterEdges({ type, source, target }: Partial<GraphEdge> = {}): Edge[] {\n return this.edges.filter(\n (edge) =>\n (!type || type === edge.type) && (!source || source === edge.source) && (!target || target === edge.target),\n );\n }\n\n //\n // Traverse\n //\n\n traverse(root: Node): Node[] {\n return this._traverse(root);\n }\n\n private _traverse(root: Node, visited: Set<string> = new Set()): Node[] {\n if (visited.has(root.id)) {\n return [];\n }\n\n visited.add(root.id);\n const targets = this.filterEdges({ source: root.id })\n .map((edge) => this.getNode(edge.target))\n .filter(isTruthy);\n\n return [root, ...targets.flatMap((target) => this._traverse(target, visited))];\n }\n}\n\n/**\n * Mutable Graph wrapper.\n */\nexport abstract class AbstractGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n Model extends AbstractGraphModel<Node, Edge, Model, Builder> = any,\n Builder extends AbstractGraphBuilder<Node, Edge, Model> = AbstractGraphBuilder<Node, Edge, Model>,\n> extends ReadonlyGraphModel<Node, Edge> {\n /**\n * Allows chaining.\n */\n abstract get builder(): Builder;\n\n /**\n * Shallow copy of provided graph.\n */\n abstract copy(graph?: Partial<Graph>): Model;\n\n clear(): this {\n this._graph.nodes.length = 0;\n this._graph.edges.length = 0;\n return this;\n }\n\n addGraph(graph: Model): this {\n this.addNodes(graph.nodes);\n this.addEdges(graph.edges);\n return this;\n }\n\n addGraphs(graphs: Model[]): this {\n graphs.forEach((graph) => {\n this.addNodes(graph.nodes);\n this.addEdges(graph.edges);\n });\n return this;\n }\n\n addNode(node: Node): Node {\n invariant(node.id, 'ID is required');\n invariant(!this.findNode(node.id), `node already exists: ${node.id}`);\n this._graph.nodes.push(node);\n return node;\n }\n\n addNodes(nodes: Node[]): Node[] {\n return nodes.map((node) => this.addNode(node));\n }\n\n addEdge(edge: MakeOptional<Edge, 'id'>): Edge {\n invariant(edge.source);\n invariant(edge.target);\n if (!edge.id) {\n // TODO(burdon): Generate random id.\n edge = { id: createEdgeId(edge), ...edge };\n }\n invariant(!this.findNode(edge.id!));\n this._graph.edges.push(edge as Edge);\n return edge as Edge;\n }\n\n addEdges(edges: Edge[]): Edge[] {\n return edges.map((edge) => this.addEdge(edge));\n }\n\n removeNode(id: string): Model {\n const edges = removeBy<Edge>(this._graph.edges as Edge[], (edge) => edge.source === id || edge.target === id);\n const nodes = removeBy<Node>(this._graph.nodes as Node[], (node) => node.id === id);\n return this.copy({ nodes, edges });\n }\n\n removeNodes(ids: string[]): Model {\n const graphs = ids.map((id) => this.removeNode(id));\n return this.copy().addGraphs(graphs);\n }\n\n removeEdge(id: string): Model {\n const edges = removeBy<Edge>(this._graph.edges as Edge[], (edge) => edge.id === id);\n return this.copy({ nodes: [], edges });\n }\n\n removeEdges(ids: string[]): Model {\n const graphs = ids.map((id) => this.removeEdge(id));\n return this.copy().addGraphs(graphs);\n }\n}\n\n/**\n * Chainable builder wrapper\n */\nexport abstract class AbstractGraphBuilder<\n Node extends BaseGraphNode,\n Edge extends BaseGraphEdge,\n Model extends GraphModel<Node, Edge>,\n> {\n constructor(protected readonly _model: Model) {}\n\n get model(): Model {\n return this._model;\n }\n\n call(cb: (builder: this) => void): this {\n cb(this);\n return this;\n }\n\n getNode(id: string): Node {\n return this.model.getNode(id);\n }\n\n addNode(node: Node): this {\n this._model.addNode(node);\n return this;\n }\n\n addEdge(edge: MakeOptional<Edge, 'id'>): this {\n this._model.addEdge(edge);\n return this;\n }\n\n addNodes(nodes: Node[]): this {\n this._model.addNodes(nodes);\n return this;\n }\n\n addEdges(edges: Edge[]): this {\n this._model.addEdges(edges);\n return this;\n }\n}\n\n/**\n * Basic model.\n */\nexport class GraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends AbstractGraphModel<Node, Edge, GraphModel<Node, Edge>, GraphBuilder<Node, Edge>> {\n override get builder() {\n return new GraphBuilder<Node, Edge>(this);\n }\n\n override copy(graph?: Partial<Graph>): GraphModel<Node, Edge> {\n return new GraphModel<Node, Edge>({ nodes: graph?.nodes ?? [], edges: graph?.edges ?? [] });\n }\n}\n\nexport type GraphModelSubscription = (model: GraphModel, graph: Live<Graph>) => void;\n\n/**\n * Subscription.\n * NOTE: Requires `registerSignalsRuntime` to be called.\n */\nexport const subscribe = (model: GraphModel, cb: GraphModelSubscription, fire = false) => {\n if (fire) {\n cb(model, model.graph);\n }\n\n return effect(() => {\n cb(model, model.graph); // TODO(burdon): This won't work unless model.graph is reactive.\n });\n};\n\n/**\n * Basic reactive model.\n */\nexport class ReactiveGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends GraphModel<Node, Edge> {\n constructor(graph?: Partial<Graph>) {\n super(\n live({\n nodes: graph?.nodes ?? [],\n edges: graph?.edges ?? [],\n }),\n );\n }\n\n override copy(graph?: Partial<Graph>): ReactiveGraphModel<Node, Edge> {\n return new ReactiveGraphModel<Node, Edge>(graph);\n }\n\n subscribe(cb: GraphModelSubscription, fire = false): () => void {\n return subscribe(this, cb, fire);\n }\n}\n\n/**\n * Basic builder.\n */\nexport class GraphBuilder<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends AbstractGraphBuilder<Node, Edge, GraphModel<Node, Edge>> {\n override call(cb: (builder: this) => void): this {\n cb(this);\n return this;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nconst KEY_REGEX = /\\w+/;\n\n// NOTE: The `relation` is different from the `type`.\ntype EdgeMeta = { source: string; target: string; relation?: string };\n\nexport const createEdgeId = ({ source, target, relation }: EdgeMeta) => {\n invariant(source.match(KEY_REGEX), `invalid source: ${source}`);\n invariant(target.match(KEY_REGEX), `invalid target: ${target}`);\n return [source, relation, target].join('_');\n};\n\nexport const parseEdgeId = (id: string): EdgeMeta => {\n const [source, relation, target] = id.split('_');\n invariant(source.length && target.length);\n return { source, relation: relation.length ? relation : undefined, target };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ReadonlySignal, type Signal, computed, signal } from '@preact/signals-core';\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Reactive selection model.\n */\nexport class SelectionModel {\n private readonly _selected: Signal<Set<string>> = signal(new Set<string>());\n private readonly _selectedIds = computed(() => Array.from(this._selected.value.values()));\n\n constructor(private readonly _singleSelect: boolean = false) {}\n\n toJSON(): { selected: string[] } {\n return {\n selected: Array.from(this._selected.value.values()),\n };\n }\n\n get size(): number {\n return this._selected.value.size;\n }\n\n get selected(): ReadonlySignal<string[]> {\n return this._selectedIds;\n }\n\n contains(id: string): boolean {\n return this._selected.value.has(id);\n }\n\n clear(): void {\n this._selected.value = new Set();\n }\n\n add(id: string): void {\n invariant(id);\n this._selected.value = new Set<string>(\n this._singleSelect ? [id] : [...Array.from(this._selected.value.values()), id],\n );\n }\n\n remove(id: string): void {\n invariant(id);\n this._selected.value = new Set<string>(Array.from(this._selected.value.values()).filter((_id) => _id !== id));\n }\n\n // TODO(burdon): Handle single select.\n\n setSelected(ids: string[], shift = false): void {\n this._selected.value = new Set([...(shift ? Array.from(this._selected.value.values()) : []), ...ids]);\n }\n\n toggleSelected(ids: string[], shift = false): void {\n const set = new Set<string>(shift ? Array.from(this._selected.value.values()) : undefined);\n ids.forEach((id) => {\n if (this._selected.value.has(id)) {\n set.delete(id);\n } else {\n set.add(id);\n }\n });\n\n this._selected.value = set;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { type Specialize } from '@dxos/util';\n\n//\n// Node\n//\n\n// TODO(burdon): Make type extensible (i.e., not dependent on `data` property)?\nexport const BaseGraphNode = Schema.Struct({\n id: Schema.String,\n type: Schema.optional(Schema.String),\n data: Schema.optional(Schema.Any),\n});\n\n/** Raw base type. */\nexport type BaseGraphNode = Schema.Schema.Type<typeof BaseGraphNode>;\n\n/** Typed node data. */\ntype GraphNode<Data = any, Optional extends boolean = false> = Specialize<\n BaseGraphNode,\n Optional extends true ? { data?: Data } : { data: Data }\n>;\n\nexport declare namespace GraphNode {\n export type Any = GraphNode<any, true>;\n export type Optional<Data = any> = GraphNode<Data, true>;\n export type Required<Data = any> = GraphNode<Data, false>;\n}\n\n//\n// Edge\n//\n\nexport const BaseGraphEdge = Schema.Struct({\n id: Schema.String,\n type: Schema.optional(Schema.String),\n source: Schema.String,\n target: Schema.String,\n data: Schema.optional(Schema.Any),\n});\n\n/** Raw base type. */\nexport type BaseGraphEdge = Schema.Schema.Type<typeof BaseGraphEdge>;\n\n/** Typed edge data. */\nexport type GraphEdge<Data = any, Optional extends boolean = false> = Specialize<\n BaseGraphEdge,\n Optional extends true ? { data?: Data } : { data: Data }\n>;\n\nexport declare namespace GraphEdge {\n export type Any = GraphEdge<any, true>;\n export type Optional<Data = any> = GraphEdge<Data, true>;\n export type Required<Data = any> = GraphEdge<Data, false>;\n}\n\n//\n// Graph\n//\n\nexport const Graph = Schema.Struct({\n id: Schema.optional(Schema.String),\n nodes: Schema.mutable(Schema.Array(BaseGraphNode)),\n edges: Schema.mutable(Schema.Array(BaseGraphEdge)),\n});\n\nexport type Graph = Schema.Schema.Type<typeof Graph>;\n"],
5
+ "mappings": "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",
6
+ "names": ["effect", "inspectCustom", "failedInvariant", "invariant", "live", "isTruthy", "removeBy", "invariant", "KEY_REGEX", "createEdgeId", "source", "target", "relation", "match", "join", "parseEdgeId", "id", "split", "length", "undefined", "ReadonlyGraphModel", "_graph", "graph", "nodes", "edges", "inspectCustom", "toJSON", "length", "findNode", "id", "find", "node", "getNode", "failedInvariant", "filterNodes", "type", "filter", "findEdge", "edge", "getEdge", "filterEdges", "source", "target", "traverse", "root", "_traverse", "visited", "Set", "has", "add", "targets", "map", "isTruthy", "flatMap", "AbstractGraphModel", "clear", "addGraph", "addNodes", "addEdges", "addGraphs", "graphs", "forEach", "addNode", "invariant", "push", "addEdge", "createEdgeId", "removeNode", "removeBy", "copy", "removeNodes", "ids", "removeEdge", "removeEdges", "AbstractGraphBuilder", "_model", "model", "call", "cb", "GraphModel", "builder", "GraphBuilder", "subscribe", "fire", "effect", "ReactiveGraphModel", "live", "computed", "signal", "invariant", "SelectionModel", "_selected", "Set", "_selectedIds", "Array", "from", "value", "values", "_singleSelect", "toJSON", "selected", "size", "contains", "id", "has", "clear", "add", "remove", "filter", "_id", "setSelected", "ids", "shift", "toggleSelected", "set", "undefined", "forEach", "delete", "Schema", "BaseGraphNode", "Struct", "id", "String", "type", "optional", "data", "Any", "BaseGraphEdge", "source", "target", "Graph", "nodes", "mutable", "Array", "edges"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/util.ts":{"bytes":3257,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/model.ts":{"bytes":25663,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/selection.ts":{"bytes":7392,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/types.ts":{"bytes":4606,"imports":[{"path":"effect","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":691,"imports":[{"path":"src/model.ts","kind":"import-statement","original":"./model"},{"path":"src/selection.ts","kind":"import-statement","original":"./selection"},{"path":"src/types.ts","kind":"import-statement","original":"./types"},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":20796},"dist/lib/browser/index.mjs":{"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true}],"exports":["AbstractGraphBuilder","AbstractGraphModel","BaseGraphEdge","BaseGraphNode","Graph","GraphBuilder","GraphModel","ReactiveGraphModel","ReadonlyGraphModel","SelectionModel","createEdgeId","parseEdgeId","subscribe"],"entryPoint":"src/index.ts","inputs":{"src/model.ts":{"bytesInOutput":5712},"src/util.ts":{"bytesInOutput":1014},"src/index.ts":{"bytesInOutput":0},"src/selection.ts":{"bytesInOutput":1908},"src/types.ts":{"bytesInOutput":534}},"bytes":9526}}}
1
+ {"inputs":{"src/util.ts":{"bytes":3257,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/model.ts":{"bytes":25651,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/selection.ts":{"bytes":7321,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/types.ts":{"bytes":4622,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":691,"imports":[{"path":"src/model.ts","kind":"import-statement","original":"./model"},{"path":"src/selection.ts","kind":"import-statement","original":"./selection"},{"path":"src/types.ts","kind":"import-statement","original":"./types"},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":20657},"dist/lib/browser/index.mjs":{"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true}],"exports":["AbstractGraphBuilder","AbstractGraphModel","BaseGraphEdge","BaseGraphNode","Graph","GraphBuilder","GraphModel","ReactiveGraphModel","ReadonlyGraphModel","SelectionModel","createEdgeId","parseEdgeId","subscribe"],"entryPoint":"src/index.ts","inputs":{"src/model.ts":{"bytesInOutput":5708},"src/util.ts":{"bytesInOutput":1014},"src/index.ts":{"bytesInOutput":0},"src/selection.ts":{"bytesInOutput":1865},"src/types.ts":{"bytesInOutput":542}},"bytes":9487}}}
@@ -5,7 +5,7 @@ import { effect } from "@preact/signals-core";
5
5
  import { inspectCustom } from "@dxos/debug";
6
6
  import { failedInvariant, invariant as invariant2 } from "@dxos/invariant";
7
7
  import { live } from "@dxos/live-object";
8
- import { isNotFalsy, removeBy } from "@dxos/util";
8
+ import { isTruthy, removeBy } from "@dxos/util";
9
9
 
10
10
  // src/util.ts
11
11
  import { invariant } from "@dxos/invariant";
@@ -125,7 +125,7 @@ var ReadonlyGraphModel = class {
125
125
  visited.add(root.id);
126
126
  const targets = this.filterEdges({
127
127
  source: root.id
128
- }).map((edge) => this.getNode(edge.target)).filter(isNotFalsy);
128
+ }).map((edge) => this.getNode(edge.target)).filter(isTruthy);
129
129
  return [
130
130
  root,
131
131
  ...targets.flatMap((target) => this._traverse(target, visited))
@@ -317,12 +317,10 @@ import { invariant as invariant3 } from "@dxos/invariant";
317
317
  var __dxlog_file3 = "/__w/dxos/dxos/packages/common/graph/src/selection.ts";
318
318
  var SelectionModel = class {
319
319
  _singleSelect;
320
- _selected;
321
- _selectedIds;
320
+ _selected = signal(/* @__PURE__ */ new Set());
321
+ _selectedIds = computed(() => Array.from(this._selected.value.values()));
322
322
  constructor(_singleSelect = false) {
323
323
  this._singleSelect = _singleSelect;
324
- this._selected = signal(/* @__PURE__ */ new Set());
325
- this._selectedIds = computed(() => Array.from(this._selected.value.values()));
326
324
  }
327
325
  toJSON() {
328
326
  return {
@@ -391,7 +389,7 @@ var SelectionModel = class {
391
389
  };
392
390
 
393
391
  // src/types.ts
394
- import { Schema } from "effect";
392
+ import * as Schema from "effect/Schema";
395
393
  var BaseGraphNode = Schema.Struct({
396
394
  id: Schema.String,
397
395
  type: Schema.optional(Schema.String),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/model.ts", "../../../src/util.ts", "../../../src/selection.ts", "../../../src/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { effect } from '@preact/signals-core';\n\nimport { inspectCustom } from '@dxos/debug';\nimport { failedInvariant, invariant } from '@dxos/invariant';\nimport { type Live, live } from '@dxos/live-object';\nimport { type MakeOptional, isNotFalsy, removeBy } from '@dxos/util';\n\nimport { type BaseGraphEdge, type BaseGraphNode, type Graph, type GraphEdge, type GraphNode } from './types';\nimport { createEdgeId } from './util';\n\n/**\n * Readonly Graph wrapper.\n */\nexport class ReadonlyGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> {\n protected readonly _graph: Graph;\n\n /**\n * NOTE: Pass in simple Graph or Live.\n */\n constructor(graph?: Graph) {\n this._graph = graph ?? {\n nodes: [],\n edges: [],\n };\n }\n\n [inspectCustom]() {\n return this.toJSON();\n }\n\n /**\n * Return stable sorted JSON representation of graph.\n */\n toJSON() {\n return {\n nodes: this.nodes.length,\n edges: this.edges.length,\n };\n }\n\n get graph(): Graph {\n return this._graph;\n }\n\n get nodes(): Node[] {\n return this._graph.nodes as Node[];\n }\n\n get edges(): Edge[] {\n return this._graph.edges as Edge[];\n }\n\n //\n // Nodes\n //\n\n findNode(id: string): Node | undefined {\n return this.nodes.find((node) => node.id === id);\n }\n\n getNode(id: string): Node {\n return this.findNode(id) ?? failedInvariant();\n }\n\n filterNodes({ type }: Partial<GraphNode.Any> = {}): Node[] {\n return this.nodes.filter((node) => !type || type === node.type);\n }\n\n //\n // Edges\n //\n\n findEdge(id: string): Edge | undefined {\n return this.edges.find((edge) => edge.id === id);\n }\n\n getEdge(id: string): Edge {\n return this.findEdge(id) ?? failedInvariant();\n }\n\n filterEdges({ type, source, target }: Partial<GraphEdge> = {}): Edge[] {\n return this.edges.filter(\n (edge) =>\n (!type || type === edge.type) && (!source || source === edge.source) && (!target || target === edge.target),\n );\n }\n\n //\n // Traverse\n //\n\n traverse(root: Node): Node[] {\n return this._traverse(root);\n }\n\n private _traverse(root: Node, visited: Set<string> = new Set()): Node[] {\n if (visited.has(root.id)) {\n return [];\n }\n\n visited.add(root.id);\n const targets = this.filterEdges({ source: root.id })\n .map((edge) => this.getNode(edge.target))\n .filter(isNotFalsy);\n\n return [root, ...targets.flatMap((target) => this._traverse(target, visited))];\n }\n}\n\n/**\n * Mutable Graph wrapper.\n */\nexport abstract class AbstractGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n Model extends AbstractGraphModel<Node, Edge, Model, Builder> = any,\n Builder extends AbstractGraphBuilder<Node, Edge, Model> = AbstractGraphBuilder<Node, Edge, Model>,\n> extends ReadonlyGraphModel<Node, Edge> {\n /**\n * Allows chaining.\n */\n abstract get builder(): Builder;\n\n /**\n * Shallow copy of provided graph.\n */\n abstract copy(graph?: Partial<Graph>): Model;\n\n clear(): this {\n this._graph.nodes.length = 0;\n this._graph.edges.length = 0;\n return this;\n }\n\n addGraph(graph: Model): this {\n this.addNodes(graph.nodes);\n this.addEdges(graph.edges);\n return this;\n }\n\n addGraphs(graphs: Model[]): this {\n graphs.forEach((graph) => {\n this.addNodes(graph.nodes);\n this.addEdges(graph.edges);\n });\n return this;\n }\n\n addNode(node: Node): Node {\n invariant(node.id, 'ID is required');\n invariant(!this.findNode(node.id), `node already exists: ${node.id}`);\n this._graph.nodes.push(node);\n return node;\n }\n\n addNodes(nodes: Node[]): Node[] {\n return nodes.map((node) => this.addNode(node));\n }\n\n addEdge(edge: MakeOptional<Edge, 'id'>): Edge {\n invariant(edge.source);\n invariant(edge.target);\n if (!edge.id) {\n // TODO(burdon): Generate random id.\n edge = { id: createEdgeId(edge), ...edge };\n }\n invariant(!this.findNode(edge.id!));\n this._graph.edges.push(edge as Edge);\n return edge as Edge;\n }\n\n addEdges(edges: Edge[]): Edge[] {\n return edges.map((edge) => this.addEdge(edge));\n }\n\n removeNode(id: string): Model {\n const edges = removeBy<Edge>(this._graph.edges as Edge[], (edge) => edge.source === id || edge.target === id);\n const nodes = removeBy<Node>(this._graph.nodes as Node[], (node) => node.id === id);\n return this.copy({ nodes, edges });\n }\n\n removeNodes(ids: string[]): Model {\n const graphs = ids.map((id) => this.removeNode(id));\n return this.copy().addGraphs(graphs);\n }\n\n removeEdge(id: string): Model {\n const edges = removeBy<Edge>(this._graph.edges as Edge[], (edge) => edge.id === id);\n return this.copy({ nodes: [], edges });\n }\n\n removeEdges(ids: string[]): Model {\n const graphs = ids.map((id) => this.removeEdge(id));\n return this.copy().addGraphs(graphs);\n }\n}\n\n/**\n * Chainable builder wrapper\n */\nexport abstract class AbstractGraphBuilder<\n Node extends BaseGraphNode,\n Edge extends BaseGraphEdge,\n Model extends GraphModel<Node, Edge>,\n> {\n constructor(protected readonly _model: Model) {}\n\n get model(): Model {\n return this._model;\n }\n\n call(cb: (builder: this) => void): this {\n cb(this);\n return this;\n }\n\n getNode(id: string): Node {\n return this.model.getNode(id);\n }\n\n addNode(node: Node): this {\n this._model.addNode(node);\n return this;\n }\n\n addEdge(edge: MakeOptional<Edge, 'id'>): this {\n this._model.addEdge(edge);\n return this;\n }\n\n addNodes(nodes: Node[]): this {\n this._model.addNodes(nodes);\n return this;\n }\n\n addEdges(edges: Edge[]): this {\n this._model.addEdges(edges);\n return this;\n }\n}\n\n/**\n * Basic model.\n */\nexport class GraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends AbstractGraphModel<Node, Edge, GraphModel<Node, Edge>, GraphBuilder<Node, Edge>> {\n override get builder() {\n return new GraphBuilder<Node, Edge>(this);\n }\n\n override copy(graph?: Partial<Graph>): GraphModel<Node, Edge> {\n return new GraphModel<Node, Edge>({ nodes: graph?.nodes ?? [], edges: graph?.edges ?? [] });\n }\n}\n\nexport type GraphModelSubscription = (model: GraphModel, graph: Live<Graph>) => void;\n\n/**\n * Subscription.\n * NOTE: Requires `registerSignalsRuntime` to be called.\n */\nexport const subscribe = (model: GraphModel, cb: GraphModelSubscription, fire = false) => {\n if (fire) {\n cb(model, model.graph);\n }\n\n return effect(() => {\n cb(model, model.graph); // TODO(burdon): This won't work unless model.graph is reactive.\n });\n};\n\n/**\n * Basic reactive model.\n */\nexport class ReactiveGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends GraphModel<Node, Edge> {\n constructor(graph?: Partial<Graph>) {\n super(\n live({\n nodes: graph?.nodes ?? [],\n edges: graph?.edges ?? [],\n }),\n );\n }\n\n override copy(graph?: Partial<Graph>): ReactiveGraphModel<Node, Edge> {\n return new ReactiveGraphModel<Node, Edge>(graph);\n }\n\n subscribe(cb: GraphModelSubscription, fire = false): () => void {\n return subscribe(this, cb, fire);\n }\n}\n\n/**\n * Basic builder.\n */\nexport class GraphBuilder<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends AbstractGraphBuilder<Node, Edge, GraphModel<Node, Edge>> {\n override call(cb: (builder: this) => void): this {\n cb(this);\n return this;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nconst KEY_REGEX = /\\w+/;\n\n// NOTE: The `relation` is different from the `type`.\ntype EdgeMeta = { source: string; target: string; relation?: string };\n\nexport const createEdgeId = ({ source, target, relation }: EdgeMeta) => {\n invariant(source.match(KEY_REGEX), `invalid source: ${source}`);\n invariant(target.match(KEY_REGEX), `invalid target: ${target}`);\n return [source, relation, target].join('_');\n};\n\nexport const parseEdgeId = (id: string): EdgeMeta => {\n const [source, relation, target] = id.split('_');\n invariant(source.length && target.length);\n return { source, relation: relation.length ? relation : undefined, target };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ReadonlySignal, type Signal, computed, signal } from '@preact/signals-core';\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Reactive selection model.\n */\nexport class SelectionModel {\n private readonly _selected: Signal<Set<string>> = signal(new Set<string>());\n private readonly _selectedIds = computed(() => Array.from(this._selected.value.values()));\n\n constructor(private readonly _singleSelect: boolean = false) {}\n\n toJSON(): { selected: string[] } {\n return {\n selected: Array.from(this._selected.value.values()),\n };\n }\n\n get size(): number {\n return this._selected.value.size;\n }\n\n get selected(): ReadonlySignal<string[]> {\n return this._selectedIds;\n }\n\n contains(id: string): boolean {\n return this._selected.value.has(id);\n }\n\n clear(): void {\n this._selected.value = new Set();\n }\n\n add(id: string): void {\n invariant(id);\n this._selected.value = new Set<string>(\n this._singleSelect ? [id] : [...Array.from(this._selected.value.values()), id],\n );\n }\n\n remove(id: string): void {\n invariant(id);\n this._selected.value = new Set<string>(Array.from(this._selected.value.values()).filter((_id) => _id !== id));\n }\n\n // TODO(burdon): Handle single select.\n\n setSelected(ids: string[], shift = false): void {\n this._selected.value = new Set([...(shift ? Array.from(this._selected.value.values()) : []), ...ids]);\n }\n\n toggleSelected(ids: string[], shift = false): void {\n const set = new Set<string>(shift ? Array.from(this._selected.value.values()) : undefined);\n ids.forEach((id) => {\n if (this._selected.value.has(id)) {\n set.delete(id);\n } else {\n set.add(id);\n }\n });\n\n this._selected.value = set;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { type Specialize } from '@dxos/util';\n\n//\n// Node\n//\n\n// TODO(burdon): Make type extensible (i.e., not dependent on `data` property)?\nexport const BaseGraphNode = Schema.Struct({\n id: Schema.String,\n type: Schema.optional(Schema.String),\n data: Schema.optional(Schema.Any),\n});\n\n/** Raw base type. */\nexport type BaseGraphNode = Schema.Schema.Type<typeof BaseGraphNode>;\n\n/** Typed node data. */\ntype GraphNode<Data = any, Optional extends boolean = false> = Specialize<\n BaseGraphNode,\n Optional extends true ? { data?: Data } : { data: Data }\n>;\n\nexport declare namespace GraphNode {\n export type Any = GraphNode<any, true>;\n export type Optional<Data = any> = GraphNode<Data, true>;\n export type Required<Data = any> = GraphNode<Data, false>;\n}\n\n//\n// Edge\n//\n\nexport const BaseGraphEdge = Schema.Struct({\n id: Schema.String,\n type: Schema.optional(Schema.String),\n source: Schema.String,\n target: Schema.String,\n data: Schema.optional(Schema.Any),\n});\n\n/** Raw base type. */\nexport type BaseGraphEdge = Schema.Schema.Type<typeof BaseGraphEdge>;\n\n/** Typed edge data. */\nexport type GraphEdge<Data = any, Optional extends boolean = false> = Specialize<\n BaseGraphEdge,\n Optional extends true ? { data?: Data } : { data: Data }\n>;\n\nexport declare namespace GraphEdge {\n export type Any = GraphEdge<any, true>;\n export type Optional<Data = any> = GraphEdge<Data, true>;\n export type Required<Data = any> = GraphEdge<Data, false>;\n}\n\n//\n// Graph\n//\n\nexport const Graph = Schema.Struct({\n id: Schema.optional(Schema.String),\n nodes: Schema.mutable(Schema.Array(BaseGraphNode)),\n edges: Schema.mutable(Schema.Array(BaseGraphEdge)),\n});\n\nexport type Graph = Schema.Schema.Type<typeof Graph>;\n"],
5
- "mappings": "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",
6
- "names": ["effect", "inspectCustom", "failedInvariant", "invariant", "live", "isNotFalsy", "removeBy", "invariant", "KEY_REGEX", "createEdgeId", "source", "target", "relation", "match", "join", "parseEdgeId", "id", "split", "length", "undefined", "ReadonlyGraphModel", "_graph", "graph", "nodes", "edges", "inspectCustom", "toJSON", "length", "findNode", "id", "find", "node", "getNode", "failedInvariant", "filterNodes", "type", "filter", "findEdge", "edge", "getEdge", "filterEdges", "source", "target", "traverse", "root", "_traverse", "visited", "Set", "has", "add", "targets", "map", "isNotFalsy", "flatMap", "AbstractGraphModel", "clear", "addGraph", "addNodes", "addEdges", "addGraphs", "graphs", "forEach", "addNode", "invariant", "push", "addEdge", "createEdgeId", "removeNode", "removeBy", "copy", "removeNodes", "ids", "removeEdge", "removeEdges", "AbstractGraphBuilder", "_model", "model", "call", "cb", "GraphModel", "builder", "GraphBuilder", "subscribe", "fire", "effect", "ReactiveGraphModel", "live", "computed", "signal", "invariant", "SelectionModel", "_selected", "_selectedIds", "_singleSelect", "Set", "Array", "from", "value", "values", "toJSON", "selected", "size", "contains", "id", "has", "clear", "add", "remove", "filter", "_id", "setSelected", "ids", "shift", "toggleSelected", "set", "undefined", "forEach", "delete", "Schema", "BaseGraphNode", "Schema", "Struct", "id", "String", "type", "optional", "data", "Any", "BaseGraphEdge", "source", "target", "Graph", "nodes", "mutable", "Array", "edges"]
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { effect } from '@preact/signals-core';\n\nimport { inspectCustom } from '@dxos/debug';\nimport { failedInvariant, invariant } from '@dxos/invariant';\nimport { type Live, live } from '@dxos/live-object';\nimport { type MakeOptional, isTruthy, removeBy } from '@dxos/util';\n\nimport { type BaseGraphEdge, type BaseGraphNode, type Graph, type GraphEdge, type GraphNode } from './types';\nimport { createEdgeId } from './util';\n\n/**\n * Readonly Graph wrapper.\n */\nexport class ReadonlyGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> {\n protected readonly _graph: Graph;\n\n /**\n * NOTE: Pass in simple Graph or Live.\n */\n constructor(graph?: Graph) {\n this._graph = graph ?? {\n nodes: [],\n edges: [],\n };\n }\n\n [inspectCustom]() {\n return this.toJSON();\n }\n\n /**\n * Return stable sorted JSON representation of graph.\n */\n toJSON() {\n return {\n nodes: this.nodes.length,\n edges: this.edges.length,\n };\n }\n\n get graph(): Graph {\n return this._graph;\n }\n\n get nodes(): Node[] {\n return this._graph.nodes as Node[];\n }\n\n get edges(): Edge[] {\n return this._graph.edges as Edge[];\n }\n\n //\n // Nodes\n //\n\n findNode(id: string): Node | undefined {\n return this.nodes.find((node) => node.id === id);\n }\n\n getNode(id: string): Node {\n return this.findNode(id) ?? failedInvariant();\n }\n\n filterNodes({ type }: Partial<GraphNode.Any> = {}): Node[] {\n return this.nodes.filter((node) => !type || type === node.type);\n }\n\n //\n // Edges\n //\n\n findEdge(id: string): Edge | undefined {\n return this.edges.find((edge) => edge.id === id);\n }\n\n getEdge(id: string): Edge {\n return this.findEdge(id) ?? failedInvariant();\n }\n\n filterEdges({ type, source, target }: Partial<GraphEdge> = {}): Edge[] {\n return this.edges.filter(\n (edge) =>\n (!type || type === edge.type) && (!source || source === edge.source) && (!target || target === edge.target),\n );\n }\n\n //\n // Traverse\n //\n\n traverse(root: Node): Node[] {\n return this._traverse(root);\n }\n\n private _traverse(root: Node, visited: Set<string> = new Set()): Node[] {\n if (visited.has(root.id)) {\n return [];\n }\n\n visited.add(root.id);\n const targets = this.filterEdges({ source: root.id })\n .map((edge) => this.getNode(edge.target))\n .filter(isTruthy);\n\n return [root, ...targets.flatMap((target) => this._traverse(target, visited))];\n }\n}\n\n/**\n * Mutable Graph wrapper.\n */\nexport abstract class AbstractGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n Model extends AbstractGraphModel<Node, Edge, Model, Builder> = any,\n Builder extends AbstractGraphBuilder<Node, Edge, Model> = AbstractGraphBuilder<Node, Edge, Model>,\n> extends ReadonlyGraphModel<Node, Edge> {\n /**\n * Allows chaining.\n */\n abstract get builder(): Builder;\n\n /**\n * Shallow copy of provided graph.\n */\n abstract copy(graph?: Partial<Graph>): Model;\n\n clear(): this {\n this._graph.nodes.length = 0;\n this._graph.edges.length = 0;\n return this;\n }\n\n addGraph(graph: Model): this {\n this.addNodes(graph.nodes);\n this.addEdges(graph.edges);\n return this;\n }\n\n addGraphs(graphs: Model[]): this {\n graphs.forEach((graph) => {\n this.addNodes(graph.nodes);\n this.addEdges(graph.edges);\n });\n return this;\n }\n\n addNode(node: Node): Node {\n invariant(node.id, 'ID is required');\n invariant(!this.findNode(node.id), `node already exists: ${node.id}`);\n this._graph.nodes.push(node);\n return node;\n }\n\n addNodes(nodes: Node[]): Node[] {\n return nodes.map((node) => this.addNode(node));\n }\n\n addEdge(edge: MakeOptional<Edge, 'id'>): Edge {\n invariant(edge.source);\n invariant(edge.target);\n if (!edge.id) {\n // TODO(burdon): Generate random id.\n edge = { id: createEdgeId(edge), ...edge };\n }\n invariant(!this.findNode(edge.id!));\n this._graph.edges.push(edge as Edge);\n return edge as Edge;\n }\n\n addEdges(edges: Edge[]): Edge[] {\n return edges.map((edge) => this.addEdge(edge));\n }\n\n removeNode(id: string): Model {\n const edges = removeBy<Edge>(this._graph.edges as Edge[], (edge) => edge.source === id || edge.target === id);\n const nodes = removeBy<Node>(this._graph.nodes as Node[], (node) => node.id === id);\n return this.copy({ nodes, edges });\n }\n\n removeNodes(ids: string[]): Model {\n const graphs = ids.map((id) => this.removeNode(id));\n return this.copy().addGraphs(graphs);\n }\n\n removeEdge(id: string): Model {\n const edges = removeBy<Edge>(this._graph.edges as Edge[], (edge) => edge.id === id);\n return this.copy({ nodes: [], edges });\n }\n\n removeEdges(ids: string[]): Model {\n const graphs = ids.map((id) => this.removeEdge(id));\n return this.copy().addGraphs(graphs);\n }\n}\n\n/**\n * Chainable builder wrapper\n */\nexport abstract class AbstractGraphBuilder<\n Node extends BaseGraphNode,\n Edge extends BaseGraphEdge,\n Model extends GraphModel<Node, Edge>,\n> {\n constructor(protected readonly _model: Model) {}\n\n get model(): Model {\n return this._model;\n }\n\n call(cb: (builder: this) => void): this {\n cb(this);\n return this;\n }\n\n getNode(id: string): Node {\n return this.model.getNode(id);\n }\n\n addNode(node: Node): this {\n this._model.addNode(node);\n return this;\n }\n\n addEdge(edge: MakeOptional<Edge, 'id'>): this {\n this._model.addEdge(edge);\n return this;\n }\n\n addNodes(nodes: Node[]): this {\n this._model.addNodes(nodes);\n return this;\n }\n\n addEdges(edges: Edge[]): this {\n this._model.addEdges(edges);\n return this;\n }\n}\n\n/**\n * Basic model.\n */\nexport class GraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends AbstractGraphModel<Node, Edge, GraphModel<Node, Edge>, GraphBuilder<Node, Edge>> {\n override get builder() {\n return new GraphBuilder<Node, Edge>(this);\n }\n\n override copy(graph?: Partial<Graph>): GraphModel<Node, Edge> {\n return new GraphModel<Node, Edge>({ nodes: graph?.nodes ?? [], edges: graph?.edges ?? [] });\n }\n}\n\nexport type GraphModelSubscription = (model: GraphModel, graph: Live<Graph>) => void;\n\n/**\n * Subscription.\n * NOTE: Requires `registerSignalsRuntime` to be called.\n */\nexport const subscribe = (model: GraphModel, cb: GraphModelSubscription, fire = false) => {\n if (fire) {\n cb(model, model.graph);\n }\n\n return effect(() => {\n cb(model, model.graph); // TODO(burdon): This won't work unless model.graph is reactive.\n });\n};\n\n/**\n * Basic reactive model.\n */\nexport class ReactiveGraphModel<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends GraphModel<Node, Edge> {\n constructor(graph?: Partial<Graph>) {\n super(\n live({\n nodes: graph?.nodes ?? [],\n edges: graph?.edges ?? [],\n }),\n );\n }\n\n override copy(graph?: Partial<Graph>): ReactiveGraphModel<Node, Edge> {\n return new ReactiveGraphModel<Node, Edge>(graph);\n }\n\n subscribe(cb: GraphModelSubscription, fire = false): () => void {\n return subscribe(this, cb, fire);\n }\n}\n\n/**\n * Basic builder.\n */\nexport class GraphBuilder<\n Node extends BaseGraphNode = BaseGraphNode,\n Edge extends BaseGraphEdge = BaseGraphEdge,\n> extends AbstractGraphBuilder<Node, Edge, GraphModel<Node, Edge>> {\n override call(cb: (builder: this) => void): this {\n cb(this);\n return this;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nconst KEY_REGEX = /\\w+/;\n\n// NOTE: The `relation` is different from the `type`.\ntype EdgeMeta = { source: string; target: string; relation?: string };\n\nexport const createEdgeId = ({ source, target, relation }: EdgeMeta) => {\n invariant(source.match(KEY_REGEX), `invalid source: ${source}`);\n invariant(target.match(KEY_REGEX), `invalid target: ${target}`);\n return [source, relation, target].join('_');\n};\n\nexport const parseEdgeId = (id: string): EdgeMeta => {\n const [source, relation, target] = id.split('_');\n invariant(source.length && target.length);\n return { source, relation: relation.length ? relation : undefined, target };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ReadonlySignal, type Signal, computed, signal } from '@preact/signals-core';\n\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Reactive selection model.\n */\nexport class SelectionModel {\n private readonly _selected: Signal<Set<string>> = signal(new Set<string>());\n private readonly _selectedIds = computed(() => Array.from(this._selected.value.values()));\n\n constructor(private readonly _singleSelect: boolean = false) {}\n\n toJSON(): { selected: string[] } {\n return {\n selected: Array.from(this._selected.value.values()),\n };\n }\n\n get size(): number {\n return this._selected.value.size;\n }\n\n get selected(): ReadonlySignal<string[]> {\n return this._selectedIds;\n }\n\n contains(id: string): boolean {\n return this._selected.value.has(id);\n }\n\n clear(): void {\n this._selected.value = new Set();\n }\n\n add(id: string): void {\n invariant(id);\n this._selected.value = new Set<string>(\n this._singleSelect ? [id] : [...Array.from(this._selected.value.values()), id],\n );\n }\n\n remove(id: string): void {\n invariant(id);\n this._selected.value = new Set<string>(Array.from(this._selected.value.values()).filter((_id) => _id !== id));\n }\n\n // TODO(burdon): Handle single select.\n\n setSelected(ids: string[], shift = false): void {\n this._selected.value = new Set([...(shift ? Array.from(this._selected.value.values()) : []), ...ids]);\n }\n\n toggleSelected(ids: string[], shift = false): void {\n const set = new Set<string>(shift ? Array.from(this._selected.value.values()) : undefined);\n ids.forEach((id) => {\n if (this._selected.value.has(id)) {\n set.delete(id);\n } else {\n set.add(id);\n }\n });\n\n this._selected.value = set;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { type Specialize } from '@dxos/util';\n\n//\n// Node\n//\n\n// TODO(burdon): Make type extensible (i.e., not dependent on `data` property)?\nexport const BaseGraphNode = Schema.Struct({\n id: Schema.String,\n type: Schema.optional(Schema.String),\n data: Schema.optional(Schema.Any),\n});\n\n/** Raw base type. */\nexport type BaseGraphNode = Schema.Schema.Type<typeof BaseGraphNode>;\n\n/** Typed node data. */\ntype GraphNode<Data = any, Optional extends boolean = false> = Specialize<\n BaseGraphNode,\n Optional extends true ? { data?: Data } : { data: Data }\n>;\n\nexport declare namespace GraphNode {\n export type Any = GraphNode<any, true>;\n export type Optional<Data = any> = GraphNode<Data, true>;\n export type Required<Data = any> = GraphNode<Data, false>;\n}\n\n//\n// Edge\n//\n\nexport const BaseGraphEdge = Schema.Struct({\n id: Schema.String,\n type: Schema.optional(Schema.String),\n source: Schema.String,\n target: Schema.String,\n data: Schema.optional(Schema.Any),\n});\n\n/** Raw base type. */\nexport type BaseGraphEdge = Schema.Schema.Type<typeof BaseGraphEdge>;\n\n/** Typed edge data. */\nexport type GraphEdge<Data = any, Optional extends boolean = false> = Specialize<\n BaseGraphEdge,\n Optional extends true ? { data?: Data } : { data: Data }\n>;\n\nexport declare namespace GraphEdge {\n export type Any = GraphEdge<any, true>;\n export type Optional<Data = any> = GraphEdge<Data, true>;\n export type Required<Data = any> = GraphEdge<Data, false>;\n}\n\n//\n// Graph\n//\n\nexport const Graph = Schema.Struct({\n id: Schema.optional(Schema.String),\n nodes: Schema.mutable(Schema.Array(BaseGraphNode)),\n edges: Schema.mutable(Schema.Array(BaseGraphEdge)),\n});\n\nexport type Graph = Schema.Schema.Type<typeof Graph>;\n"],
5
+ "mappings": "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",
6
+ "names": ["effect", "inspectCustom", "failedInvariant", "invariant", "live", "isTruthy", "removeBy", "invariant", "KEY_REGEX", "createEdgeId", "source", "target", "relation", "match", "join", "parseEdgeId", "id", "split", "length", "undefined", "ReadonlyGraphModel", "_graph", "graph", "nodes", "edges", "inspectCustom", "toJSON", "length", "findNode", "id", "find", "node", "getNode", "failedInvariant", "filterNodes", "type", "filter", "findEdge", "edge", "getEdge", "filterEdges", "source", "target", "traverse", "root", "_traverse", "visited", "Set", "has", "add", "targets", "map", "isTruthy", "flatMap", "AbstractGraphModel", "clear", "addGraph", "addNodes", "addEdges", "addGraphs", "graphs", "forEach", "addNode", "invariant", "push", "addEdge", "createEdgeId", "removeNode", "removeBy", "copy", "removeNodes", "ids", "removeEdge", "removeEdges", "AbstractGraphBuilder", "_model", "model", "call", "cb", "GraphModel", "builder", "GraphBuilder", "subscribe", "fire", "effect", "ReactiveGraphModel", "live", "computed", "signal", "invariant", "SelectionModel", "_selected", "Set", "_selectedIds", "Array", "from", "value", "values", "_singleSelect", "toJSON", "selected", "size", "contains", "id", "has", "clear", "add", "remove", "filter", "_id", "setSelected", "ids", "shift", "toggleSelected", "set", "undefined", "forEach", "delete", "Schema", "BaseGraphNode", "Struct", "id", "String", "type", "optional", "data", "Any", "BaseGraphEdge", "source", "target", "Graph", "nodes", "mutable", "Array", "edges"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/util.ts":{"bytes":3257,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/model.ts":{"bytes":25663,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/selection.ts":{"bytes":7392,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/types.ts":{"bytes":4606,"imports":[{"path":"effect","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":691,"imports":[{"path":"src/model.ts","kind":"import-statement","original":"./model"},{"path":"src/selection.ts","kind":"import-statement","original":"./selection"},{"path":"src/types.ts","kind":"import-statement","original":"./types"},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":20798},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true}],"exports":["AbstractGraphBuilder","AbstractGraphModel","BaseGraphEdge","BaseGraphNode","Graph","GraphBuilder","GraphModel","ReactiveGraphModel","ReadonlyGraphModel","SelectionModel","createEdgeId","parseEdgeId","subscribe"],"entryPoint":"src/index.ts","inputs":{"src/model.ts":{"bytesInOutput":5712},"src/util.ts":{"bytesInOutput":1014},"src/index.ts":{"bytesInOutput":0},"src/selection.ts":{"bytesInOutput":1908},"src/types.ts":{"bytesInOutput":534}},"bytes":9619}}}
1
+ {"inputs":{"src/util.ts":{"bytes":3257,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/model.ts":{"bytes":25651,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/selection.ts":{"bytes":7321,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/types.ts":{"bytes":4622,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":691,"imports":[{"path":"src/model.ts","kind":"import-statement","original":"./model"},{"path":"src/selection.ts","kind":"import-statement","original":"./selection"},{"path":"src/types.ts","kind":"import-statement","original":"./types"},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":20659},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true}],"exports":["AbstractGraphBuilder","AbstractGraphModel","BaseGraphEdge","BaseGraphNode","Graph","GraphBuilder","GraphModel","ReactiveGraphModel","ReadonlyGraphModel","SelectionModel","createEdgeId","parseEdgeId","subscribe"],"entryPoint":"src/index.ts","inputs":{"src/model.ts":{"bytesInOutput":5708},"src/util.ts":{"bytesInOutput":1014},"src/index.ts":{"bytesInOutput":0},"src/selection.ts":{"bytesInOutput":1865},"src/types.ts":{"bytesInOutput":542}},"bytes":9580}}}
@@ -84,10 +84,7 @@ export type GraphModelSubscription = (model: GraphModel, graph: Live<Graph>) =>
84
84
  * Subscription.
85
85
  * NOTE: Requires `registerSignalsRuntime` to be called.
86
86
  */
87
- export declare const subscribe: (model: GraphModel, cb: GraphModelSubscription, fire?: boolean) => {
88
- (): void;
89
- [Symbol.dispose](): void;
90
- };
87
+ export declare const subscribe: (model: GraphModel, cb: GraphModelSubscription, fire?: boolean) => () => void;
91
88
  /**
92
89
  * Basic reactive model.
93
90
  */
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/model.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Schema } from 'effect';
1
+ import * as Schema from 'effect/Schema';
2
2
  import { type Specialize } from '@dxos/util';
3
3
  export declare const BaseGraphNode: Schema.Struct<{
4
4
  id: typeof Schema.String;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAO7C,eAAO,MAAM,aAAa;;;;EAIxB,CAAC;AAEH,qBAAqB;AACrB,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,aAAa,CAAC,CAAC;AAErE,uBAAuB;AACvB,KAAK,SAAS,CAAC,IAAI,GAAG,GAAG,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,IAAI,UAAU,CACvE,aAAa,EACb,QAAQ,SAAS,IAAI,GAAG;IAAE,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CACzD,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAY,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,KAAY,QAAQ,CAAC,IAAI,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzD,KAAY,QAAQ,CAAC,IAAI,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CAC3D;AAMD,eAAO,MAAM,aAAa;;;;;;EAMxB,CAAC;AAEH,qBAAqB;AACrB,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,aAAa,CAAC,CAAC;AAErE,uBAAuB;AACvB,MAAM,MAAM,SAAS,CAAC,IAAI,GAAG,GAAG,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,IAAI,UAAU,CAC9E,aAAa,EACb,QAAQ,SAAS,IAAI,GAAG;IAAE,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CACzD,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAY,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,KAAY,QAAQ,CAAC,IAAI,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzD,KAAY,QAAQ,CAAC,IAAI,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CAC3D;AAMD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;EAIhB,CAAC;AAEH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAO7C,eAAO,MAAM,aAAa;;;;EAIxB,CAAC;AAEH,qBAAqB;AACrB,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,aAAa,CAAC,CAAC;AAErE,uBAAuB;AACvB,KAAK,SAAS,CAAC,IAAI,GAAG,GAAG,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,IAAI,UAAU,CACvE,aAAa,EACb,QAAQ,SAAS,IAAI,GAAG;IAAE,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CACzD,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAY,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,KAAY,QAAQ,CAAC,IAAI,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzD,KAAY,QAAQ,CAAC,IAAI,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CAC3D;AAMD,eAAO,MAAM,aAAa;;;;;;EAMxB,CAAC;AAEH,qBAAqB;AACrB,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,aAAa,CAAC,CAAC;AAErE,uBAAuB;AACvB,MAAM,MAAM,SAAS,CAAC,IAAI,GAAG,GAAG,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,IAAI,UAAU,CAC9E,aAAa,EACb,QAAQ,SAAS,IAAI,GAAG;IAAE,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CACzD,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAY,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,KAAY,QAAQ,CAAC,IAAI,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzD,KAAY,QAAQ,CAAC,IAAI,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CAC3D;AAMD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;EAIhB,CAAC;AAEH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC"}