process-graph 1.0.5 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +85 -17
  2. package/dist/bin.d.ts +1 -0
  3. package/dist/bin.js +92 -0
  4. package/dist/cli.d.ts +512 -0
  5. package/dist/cli.js +3 -0
  6. package/dist/control-aDk9560d.js +294 -0
  7. package/dist/detail-panel-B1ZmMuJT.js +341 -0
  8. package/dist/dist-BpCBmnMl.js +582 -0
  9. package/dist/dist-HLlW8vgT.js +1388 -0
  10. package/dist/dist-IjrgWhHQ.js +3 -0
  11. package/dist/errors-BZe5WzCn.js +19 -0
  12. package/dist/exit-codes-0ultCqdS.js +23 -0
  13. package/dist/graphql-C1j5wQFz.d.ts +631 -0
  14. package/dist/index-CCfe0csl.d.ts +353 -0
  15. package/dist/index-CmZOswkx.d.ts +512 -0
  16. package/dist/index-CoA6vXqe.d.ts +404 -0
  17. package/dist/index-CptUHq6F.d.ts +58 -0
  18. package/dist/index-CrM5qWUA.d.ts +110 -0
  19. package/dist/index-DhbvDgK4.d.ts +1582 -0
  20. package/dist/index-DricKcyl.d.ts +421 -0
  21. package/dist/index.d.ts +111 -4
  22. package/dist/index.js +929 -5
  23. package/dist/layout-CCM-KBdp.js +307 -0
  24. package/dist/layout.d.ts +8 -0
  25. package/dist/layout.js +2 -0
  26. package/dist/node-AchI1T-K.js +40 -0
  27. package/dist/open-CyRXJ4bt.js +29 -0
  28. package/dist/parse-CuipC_2K.js +41 -0
  29. package/dist/queries-CCexJAE2.js +2202 -0
  30. package/dist/react-flow/style.css +658 -0
  31. package/dist/react-flow.d.ts +173 -0
  32. package/dist/react-flow.js +450 -0
  33. package/dist/react.d.ts +2 -0
  34. package/dist/react.js +107 -0
  35. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  36. package/dist/router-D4gtTlXm.js +188 -0
  37. package/dist/schema-CVnS6HiX.js +234 -0
  38. package/dist/selection-BW_xXWOy.js +314 -0
  39. package/dist/source/github/node.d.ts +16 -0
  40. package/dist/source/github/node.js +2 -0
  41. package/dist/source/github.d.ts +49 -0
  42. package/dist/source/github.js +201 -0
  43. package/dist/source-DRDpEA8Q.js +1316 -0
  44. package/dist/status-Bm1CGu9C.js +11 -0
  45. package/dist/store/node.d.ts +24 -0
  46. package/dist/store/node.js +2 -0
  47. package/dist/store/wasm/worker.d.ts +16 -0
  48. package/dist/store/wasm/worker.js +98 -0
  49. package/dist/store/wasm.d.ts +9 -0
  50. package/dist/store/wasm.js +11 -0
  51. package/dist/store-BcR70CaO.js +1287 -0
  52. package/dist/store.d.ts +1328 -0
  53. package/dist/store.js +238 -0
  54. package/dist/ui/style.css +351 -0
  55. package/dist/ui.d.ts +235 -0
  56. package/dist/ui.js +2 -0
  57. package/dist/validate-DF3mQZww.js +125 -0
  58. package/package.json +148 -13
package/dist/ui.d.ts ADDED
@@ -0,0 +1,235 @@
1
+ import { F as Status } from "./index-CCfe0csl.js";
2
+ import { G as IdSpace } from "./index-CmZOswkx.js";
3
+ import { g as SequenceDiagram$1 } from "./index-CoA6vXqe.js";
4
+ import { f as LaneProps, h as TransitionItemProps, l as LegendProps, o as FilterPanelProps, r as DetailPanelProps, v as ElementCardProps } from "./index-DricKcyl.js";
5
+ import { ReactElement, ReactNode } from "react";
6
+ //#region ../../ui/graph/ui/dist/theme.css.d.ts
7
+ /**
8
+ * The theme contract: one CSS custom property per value of `ThemeValues`, read by every style in this package. A consumer restyles the components by assigning these properties, with its own `createTheme(vars, values)` class or `assignVars`, without forking them.
9
+ */
10
+ export declare const vars: {
11
+ colour: {
12
+ background: `var(--${string})`;
13
+ surface: `var(--${string})`;
14
+ text: `var(--${string})`;
15
+ muted: `var(--${string})`;
16
+ border: `var(--${string})`;
17
+ accent: `var(--${string})`;
18
+ focus: `var(--${string})`;
19
+ critical: `var(--${string})`;
20
+ handoff: `var(--${string})`;
21
+ status: {
22
+ done: `var(--${string})`;
23
+ ready: `var(--${string})`;
24
+ blocked: `var(--${string})`;
25
+ skipped: `var(--${string})`;
26
+ unknown: `var(--${string})`;
27
+ };
28
+ };
29
+ space: {
30
+ small: `var(--${string})`;
31
+ medium: `var(--${string})`;
32
+ large: `var(--${string})`;
33
+ };
34
+ radius: {
35
+ small: `var(--${string})`;
36
+ medium: `var(--${string})`;
37
+ };
38
+ font: {
39
+ body: `var(--${string})`;
40
+ mono: `var(--${string})`;
41
+ sizeSmall: `var(--${string})`;
42
+ sizeBody: `var(--${string})`;
43
+ sizeHeading: `var(--${string})`;
44
+ weightStrong: `var(--${string})`;
45
+ };
46
+ stroke: {
47
+ thin: `var(--${string})`;
48
+ thick: `var(--${string})`;
49
+ };
50
+ };
51
+ /** The class that assigns the light theme's values. */
52
+ export declare const lightTheme: string;
53
+ /** The class that assigns the dark theme's values. */
54
+ export declare const darkTheme: string;
55
+ //#endregion
56
+ //#region ../../ui/graph/ui/dist/theme-values.d.ts
57
+ /**
58
+ * The shape of every theme: each leaf is a value a theme assigns. The theme contract is created from it, and `ThemeValues` derived from it, so the contract and the themes cannot disagree.
59
+ */
60
+ declare const themeShape: {
61
+ colour: {
62
+ /** Behind everything. */
63
+ background: null;
64
+ /** Behind a card, a lane or a panel. */
65
+ surface: null;
66
+ text: null;
67
+ /** Secondary text: lane headings, edge labels. */
68
+ muted: null;
69
+ border: null;
70
+ /** Selection and links. */
71
+ accent: null;
72
+ /** The focus ring. */
73
+ focus: null;
74
+ /** The critical path. */
75
+ critical: null;
76
+ /** A transition that passes work between actors. */
77
+ handoff: null;
78
+ /** Each status, used as text and as a mark on `surface` and `background`. */
79
+ status: {
80
+ done: null;
81
+ ready: null;
82
+ blocked: null;
83
+ skipped: null;
84
+ unknown: null;
85
+ };
86
+ };
87
+ space: {
88
+ small: null;
89
+ medium: null;
90
+ large: null;
91
+ };
92
+ radius: {
93
+ small: null;
94
+ medium: null;
95
+ };
96
+ font: {
97
+ body: null;
98
+ mono: null;
99
+ sizeSmall: null;
100
+ sizeBody: null;
101
+ sizeHeading: null;
102
+ /** The weight of labels and headings that stand out from body text. */
103
+ weightStrong: null;
104
+ };
105
+ stroke: {
106
+ /** Borders and ordinary edges. */
107
+ thin: null;
108
+ /** The critical path and the selection. */
109
+ thick: null;
110
+ };
111
+ };
112
+ /** A tree of the shape's keys with a CSS value at every leaf. */
113
+ type Assigned<Shape> = { readonly [Key in keyof Shape]: Shape[Key] extends null ? string : Assigned<Shape[Key]>; };
114
+ /** Every value a theme assigns, as CSS values: one per leaf of `themeShape`, so a theme that leaves one out does not compile. */
115
+ type ThemeValues = Assigned<typeof themeShape>;
116
+ /** The light theme's values. Each status colour reads as text on both `surface` and `background`. */
117
+ export declare const lightValues: ThemeValues;
118
+ /** The dark theme's values. Each status colour reads as text on both `surface` and `background`. */
119
+ export declare const darkValues: ThemeValues;
120
+ //#endregion
121
+ //#region ../../ui/graph/ui/dist/base.css.d.ts
122
+ /** The element a theme class goes on: the page colours and type every component inherits. */
123
+ export declare const surfaceRoot: string;
124
+ /** Present to assistive technology, absent from the page: the text alternative of a drawing. */
125
+ export declare const visuallyHidden: string;
126
+ /** The focus ring every focusable part shows when focused from the keyboard. */
127
+ export declare const focusRing: string;
128
+ //#endregion
129
+ //#region ../../ui/graph/ui/dist/components.css.d.ts
130
+ /** A status badge: the status's name in its colour, outlined in the same colour, so it reads by text and by colour. */
131
+ export declare const badge: import("@vanilla-extract/recipes").RuntimeFn<{
132
+ status: Record<"done" | "unknown" | "skipped" | "ready" | "blocked", import("@vanilla-extract/css").StyleRule>;
133
+ }>;
134
+ /** An element card: a bordered surface whose leading edge carries the status colour, shaped by the element's kind. */
135
+ export declare const card: import("@vanilla-extract/recipes").RuntimeFn<{
136
+ status: Record<"done" | "unknown" | "skipped" | "ready" | "blocked", import("@vanilla-extract/css").StyleRule>;
137
+ kind: {
138
+ activity: {};
139
+ state: {};
140
+ decision: {
141
+ borderStyle: "dashed";
142
+ };
143
+ pseudo: {
144
+ borderRadius: `var(--${string})`;
145
+ };
146
+ message: {
147
+ fontStyle: "italic";
148
+ };
149
+ };
150
+ critical: {
151
+ true: {
152
+ boxShadow: `0 0 0 var(--${string}) var(--${string})`;
153
+ };
154
+ false: {};
155
+ };
156
+ }>;
157
+ //#endregion
158
+ //#region ../../ui/graph/ui/dist/components.d.ts
159
+ /** The themes this package ships. */
160
+ type ThemeName = "light" | "dark";
161
+ /** The class that assigns each shipped theme. */
162
+ export declare const themes: Readonly<Record<ThemeName, string>>;
163
+ interface GraphThemeProps {
164
+ readonly theme: ThemeName;
165
+ readonly children?: ReactNode;
166
+ }
167
+ /**
168
+ * Applies a theme to everything inside it: assigns the theme contract's values and sets the page colours and type the components inherit. A consumer with its own theme puts its own `createTheme` class and `surfaceRoot` on an element instead.
169
+ * @param props - The theme and its content.
170
+ * @returns A `div` carrying the theme class and `data-theme`.
171
+ */
172
+ export declare const GraphTheme: (props: GraphThemeProps) => ReactElement;
173
+ interface StatusBadgeProps {
174
+ readonly status: Status;
175
+ }
176
+ /**
177
+ * A status badge in the status's colour.
178
+ * @param props - The status.
179
+ * @returns The badge.
180
+ */
181
+ export declare const StatusBadge: (props: StatusBadgeProps) => ReactElement;
182
+ /**
183
+ * An element card with its status colour, its kind's shape, the critical path ring and the selection outline.
184
+ * @param props - As for the headless `ElementCard`, without class names.
185
+ * @returns The card.
186
+ */
187
+ export declare const ElementCard: <I extends IdSpace>(props: Omit<ElementCardProps<I>, "classNames">) => ReactElement;
188
+ /**
189
+ * A transition, coloured as a hand-off or on the critical path.
190
+ * @param props - As for the headless `TransitionItem`, without class names.
191
+ * @returns An `li`.
192
+ */
193
+ export declare const TransitionItem: (props: Omit<TransitionItemProps, "classNames">) => ReactElement;
194
+ /**
195
+ * A bordered swimlane with a small heading.
196
+ * @param props - As for the headless `Lane`, without class names.
197
+ * @returns The lane.
198
+ */
199
+ export declare const Lane: (props: Omit<LaneProps, "classNames">) => ReactElement;
200
+ /**
201
+ * A legend with a coloured swatch per status.
202
+ * @param props - As for the headless `Legend`, without class names.
203
+ * @returns The legend.
204
+ */
205
+ export declare const Legend: (props: Omit<LegendProps, "classNames">) => ReactElement;
206
+ /**
207
+ * A filter panel of bordered checkbox groups.
208
+ * @param props - As for the headless `FilterPanel`, without class names.
209
+ * @returns The form.
210
+ */
211
+ export declare const FilterPanel: (props: Omit<FilterPanelProps, "classNames">) => ReactElement;
212
+ /**
213
+ * A detail panel on a raised surface.
214
+ * @param props - As for the headless `DetailPanel`, without class names.
215
+ * @returns The panel.
216
+ */
217
+ export declare const DetailPanel: <I extends IdSpace>(props: Omit<DetailPanelProps<I>, "classNames">) => ReactElement;
218
+ //#endregion
219
+ //#region ../../ui/graph/ui/dist/sequence-diagram.d.ts
220
+ interface SequenceDiagramProps<I extends IdSpace> {
221
+ /** The diagram from `toSequence`. */
222
+ readonly diagram: SequenceDiagram$1<I>;
223
+ /** The name a lifeline is drawn with. */
224
+ readonly labelOf: (actor: I["actor"]) => string;
225
+ /** The diagram's caption, which also names it for assistive technology. */
226
+ readonly title: string;
227
+ }
228
+ /**
229
+ * A sequence diagram drawn as SVG: a lifeline per actor in order of first appearance, a message per row as an arrow between lifelines (a loop for a self-message, dashed for a reply, an open head for an asynchronous message), and each fragment as a frame with its operator and operand guards. React Flow has no lifeline layout, so the arrangement is fixed by the diagram's own order. The drawing is hidden from assistive technology, which reads the same steps from a visually hidden list instead.
230
+ * @param props - The diagram, the lifelines' names and a caption.
231
+ * @returns A `figure` holding the caption, the drawing and its text alternative.
232
+ */
233
+ export declare const SequenceDiagram: <I extends IdSpace>(props: SequenceDiagramProps<I>) => ReactElement;
234
+ //#endregion
235
+ export type { GraphThemeProps, SequenceDiagramProps, StatusBadgeProps, ThemeName, ThemeValues };
package/dist/ui.js ADDED
@@ -0,0 +1,2 @@
1
+ import { _ as surfaceRoot, a as Lane, b as visuallyHidden, c as StatusBadge, d as card, f as darkTheme, g as lightValues, h as lightTheme, i as GraphTheme, l as TransitionItem, m as focusRing, n as ElementCard, o as Legend, p as darkValues, r as FilterPanel, s as SequenceDiagram, t as DetailPanel, u as badge, v as themes, y as vars } from "./dist-BpCBmnMl.js";
2
+ export { DetailPanel, ElementCard, FilterPanel, GraphTheme, Lane, Legend, SequenceDiagram, StatusBadge, TransitionItem, badge, card, darkTheme, darkValues, focusRing, lightTheme, lightValues, surfaceRoot, themes, vars, visuallyHidden };
@@ -0,0 +1,125 @@
1
+ //#region ../../core/graph/schema/dist/validate.js
2
+ const duplicates = (ids) => {
3
+ const seen = /* @__PURE__ */ new Set();
4
+ const repeated = /* @__PURE__ */ new Set();
5
+ for (const id of ids) {
6
+ if (seen.has(id)) repeated.add(id);
7
+ seen.add(id);
8
+ }
9
+ return [...repeated];
10
+ };
11
+ /**
12
+ * Runtime validation. Authored models are already reference-safe at compile time. This is for models loaded from JSON, where identifiers are plain strings, and for the rules the type system cannot state: unique identifiers, one initial pseudo-state per scope, and entity subjects for state machine projections.
13
+ */
14
+ const validate = (model) => {
15
+ const issues = [];
16
+ const participantIds = new Set(model.participants.map((p) => p.id));
17
+ const eventIds = new Set(model.events.map((e) => e.id));
18
+ const actionIds = new Set(model.actions.map((a) => a.id));
19
+ const elementIds = new Set(model.elements.map((e) => e.id));
20
+ const artefactIds = new Set(model.artefacts.map((a) => a.id));
21
+ const transitionIds = new Set(model.transitions.map((t) => t.id));
22
+ const spaces = [
23
+ ["participant", model.participants.map((p) => p.id)],
24
+ ["event", model.events.map((e) => e.id)],
25
+ ["action", model.actions.map((a) => a.id)],
26
+ ["artefact", model.artefacts.map((a) => a.id)],
27
+ ["element", model.elements.map((e) => e.id)],
28
+ ["transition", model.transitions.map((t) => t.id)],
29
+ ["fragment", model.fragments.map((f) => f.id)]
30
+ ];
31
+ for (const [space, ids] of spaces) for (const id of duplicates(ids)) issues.push({
32
+ code: "duplicate-id",
33
+ message: `Duplicate ${space} id "${id}"`
34
+ });
35
+ const require = (known, id, where) => {
36
+ if (id !== void 0 && !known.has(id)) issues.push({
37
+ code: "unknown-reference",
38
+ message: `${where} refers to unknown id "${id}"`
39
+ });
40
+ };
41
+ const kindOf = new Map(model.participants.map((p) => [p.id, p.kind]));
42
+ /** An actor must be declared, and must not be an entity. */
43
+ const requireActor = (id, where) => {
44
+ require(participantIds, id, where);
45
+ if (id !== void 0 && kindOf.get(id) === "entity") issues.push({
46
+ code: "actor-is-entity",
47
+ message: `${where} refers to entity "${id}", which cannot act`
48
+ });
49
+ };
50
+ for (const element of model.elements) switch (element.kind) {
51
+ case "activity":
52
+ requireActor(element.actor, `activity "${element.id}" actor`);
53
+ require(actionIds, element.action, `activity "${element.id}" action`);
54
+ for (const id of element.affects ?? []) {
55
+ const where = `activity "${element.id}" affects`;
56
+ require(participantIds, id, where);
57
+ if (participantIds.has(id) && kindOf.get(id) !== "entity") issues.push({
58
+ code: "affects-not-entity",
59
+ message: `${where} "${id}", which is not an entity`
60
+ });
61
+ }
62
+ for (const id of element.consumes ?? []) require(artefactIds, id, `activity "${element.id}" consumes`);
63
+ for (const id of element.produces ?? []) require(artefactIds, id, `activity "${element.id}" produces`);
64
+ break;
65
+ case "decision":
66
+ requireActor(element.actor, `decision "${element.id}" actor`);
67
+ break;
68
+ case "state":
69
+ require(elementIds, element.parent, `state "${element.id}" parent`);
70
+ require(actionIds, element.entry, `state "${element.id}" entry`);
71
+ require(actionIds, element.exit, `state "${element.id}" exit`);
72
+ break;
73
+ case "pseudo":
74
+ require(elementIds, element.parent, `pseudo "${element.id}" parent`);
75
+ break;
76
+ case "message":
77
+ requireActor(element.from, `message "${element.id}" from`);
78
+ requireActor(element.to, `message "${element.id}" to`);
79
+ require(eventIds, element.event, `message "${element.id}" event`);
80
+ }
81
+ for (const transition of model.transitions) {
82
+ const where = `transition "${transition.id}"`;
83
+ require(elementIds, transition.source, `${where} source`);
84
+ require(elementIds, transition.target, `${where} target`);
85
+ require(eventIds, transition.trigger, `${where} trigger`);
86
+ require(actionIds, transition.effect, `${where} effect`);
87
+ }
88
+ for (const fragment of model.fragments) for (const operand of fragment.operands) for (const id of operand.body) require(elementIds, id, `fragment "${fragment.id}" body`);
89
+ const producers = /* @__PURE__ */ new Map();
90
+ for (const element of model.elements) if (element.kind === "activity") for (const id of new Set(element.produces ?? [])) producers.set(id, [...producers.get(id) ?? [], element.id]);
91
+ for (const [artefact, activities] of producers) if (activities.length > 1) issues.push({
92
+ code: "multiple-producers",
93
+ message: `Artefact "${artefact}" is produced by more than one activity: ${activities.join(", ")}`
94
+ });
95
+ const sources = model.elements.flatMap((element) => element.kind === "activity" && element.source !== void 0 ? [element.source] : []);
96
+ for (const source of duplicates(sources)) issues.push({
97
+ code: "duplicate-source",
98
+ message: `Duplicate activity source "${source}"`
99
+ });
100
+ const initialsByScope = /* @__PURE__ */ new Map();
101
+ for (const element of model.elements) if (element.kind === "pseudo" && element.role === "initial") {
102
+ const scope = element.parent ?? "";
103
+ initialsByScope.set(scope, (initialsByScope.get(scope) ?? 0) + 1);
104
+ }
105
+ for (const [scope, count] of initialsByScope) if (count > 1) {
106
+ const label = scope === "" ? "the top level" : `"${scope}"`;
107
+ issues.push({
108
+ code: "multiple-initial",
109
+ message: `${label} has ${count} initial pseudo-states`
110
+ });
111
+ }
112
+ for (const projection of model.projections) {
113
+ if (projection.notation === "stateMachine") {
114
+ require(participantIds, projection.subject, `projection "${projection.id}" subject`);
115
+ if (kindOf.get(projection.subject) !== "entity") issues.push({
116
+ code: "subject-not-entity",
117
+ message: `projection "${projection.id}" subject "${projection.subject}" is not an entity`
118
+ });
119
+ }
120
+ if (projection.notation === "sequence") for (const id of projection.scenario) require(transitionIds, id, `projection "${projection.id}" scenario`);
121
+ }
122
+ return issues;
123
+ };
124
+ //#endregion
125
+ export { validate as t };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "process-graph",
3
- "version": "1.0.5",
4
- "description": "A process and dependency graph model with projections into flowcharts, swimlanes, state machines and sequence diagrams, and reasoning over a run: one install for the model, projection, domain and DAG packages.",
3
+ "version": "1.1.0",
4
+ "description": "A process and dependency graph model with projections into flowcharts, swimlanes, state machines and sequence diagrams, reasoning over a run, layout, the GitHub issues source, the SQLite store for Node and the browser, and the process-graph command line, each behind its own subpath.",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",
@@ -12,10 +12,59 @@
12
12
  "bugs": {
13
13
  "url": "https://github.com/ExaDev/process-graph/issues"
14
14
  },
15
+ "bin": {
16
+ "process-graph": "./dist/bin.js"
17
+ },
15
18
  "exports": {
16
19
  ".": {
17
20
  "types": "./dist/index.d.ts",
18
21
  "import": "./dist/index.js"
22
+ },
23
+ "./layout": {
24
+ "types": "./dist/layout.d.ts",
25
+ "import": "./dist/layout.js"
26
+ },
27
+ "./source/github": {
28
+ "types": "./dist/source/github.d.ts",
29
+ "import": "./dist/source/github.js"
30
+ },
31
+ "./source/github/node": {
32
+ "types": "./dist/source/github/node.d.ts",
33
+ "import": "./dist/source/github/node.js"
34
+ },
35
+ "./store": {
36
+ "types": "./dist/store.d.ts",
37
+ "import": "./dist/store.js"
38
+ },
39
+ "./store/node": {
40
+ "types": "./dist/store/node.d.ts",
41
+ "import": "./dist/store/node.js"
42
+ },
43
+ "./store/wasm": {
44
+ "types": "./dist/store/wasm.d.ts",
45
+ "import": "./dist/store/wasm.js"
46
+ },
47
+ "./store/wasm/worker": {
48
+ "types": "./dist/store/wasm/worker.d.ts",
49
+ "import": "./dist/store/wasm/worker.js"
50
+ },
51
+ "./react": {
52
+ "types": "./dist/react.d.ts",
53
+ "import": "./dist/react.js"
54
+ },
55
+ "./ui": {
56
+ "types": "./dist/ui.d.ts",
57
+ "import": "./dist/ui.js"
58
+ },
59
+ "./react-flow": {
60
+ "types": "./dist/react-flow.d.ts",
61
+ "import": "./dist/react-flow.js"
62
+ },
63
+ "./ui/style.css": "./dist/ui/style.css",
64
+ "./react-flow/style.css": "./dist/react-flow/style.css",
65
+ "./cli": {
66
+ "types": "./dist/cli.d.ts",
67
+ "import": "./dist/cli.js"
19
68
  }
20
69
  },
21
70
  "types": "./dist/index.d.ts",
@@ -27,26 +76,31 @@
27
76
  "provenance": true,
28
77
  "registry": "https://registry.npmjs.org/"
29
78
  },
30
- "sideEffects": false,
79
+ "sideEffects": [
80
+ "./dist/bin.js",
81
+ "*.css"
82
+ ],
31
83
  "license": "MIT",
32
84
  "scripts": {
33
85
  "build": "turbo run _build",
34
- "_build": "tsc -b tsconfig.build.json",
86
+ "_build": "tsdown",
35
87
  "lint": "turbo run _lint",
36
88
  "_lint": "eslint . --cache --max-warnings 0",
37
89
  "_lint:fix": "eslint . --fix --cache --max-warnings 0",
38
90
  "typecheck": "turbo run _typecheck _typecheck:attw",
39
- "_typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.node.json --noEmit",
40
- "_typecheck:attw": "attw --pack --profile esm-only",
91
+ "_typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.node.json --noEmit && tsc -p tsconfig.browser.json --noEmit",
92
+ "_typecheck:attw": "attw --pack --profile esm-only --exclude-entrypoints ./ui/style.css ./react-flow/style.css",
41
93
  "test": "turbo run _test",
42
94
  "_test": "vitest run --project unit",
43
95
  "test:coverage": "turbo run _test:coverage",
44
96
  "_test:coverage": "vitest run --project unit --coverage",
97
+ "test:integration": "turbo run _test:integration",
98
+ "_test:integration": "vitest run --project browser",
45
99
  "test:smoke": "turbo run _test:smoke",
46
100
  "_test:smoke": "vitest run --project smoke",
47
101
  "test:mutation": "turbo run _test:mutation",
48
102
  "_test:mutation": "stryker run stryker.config.ts",
49
- "prepublishOnly": "pnpm run lint && pnpm run typecheck && pnpm run test && pnpm run build && publint && attw --pack --profile esm-only"
103
+ "prepublishOnly": "pnpm run lint && pnpm run typecheck && pnpm run test && pnpm run build && publint && attw --pack --profile esm-only --exclude-entrypoints ./ui/style.css ./react-flow/style.css"
50
104
  },
51
105
  "keywords": [
52
106
  "process-model",
@@ -56,22 +110,103 @@
56
110
  "state-machine",
57
111
  "sequence-diagram"
58
112
  ],
59
- "dependencies": {
60
- "@exadev/process-graph-dag": "1.0.2",
61
- "@exadev/process-graph-domain": "1.1.0",
62
- "@exadev/process-graph-projection": "1.0.3",
63
- "@exadev/process-graph-schema": "1.1.0"
64
- },
65
113
  "devDependencies": {
66
114
  "@arethetypeswrong/cli": "0.18.5",
115
+ "@exadev/process-graph-cli": "1.0.0",
116
+ "@exadev/process-graph-dag": "1.1.1",
117
+ "@exadev/process-graph-domain": "1.1.2",
118
+ "@exadev/process-graph-layout": "1.0.4",
119
+ "@exadev/process-graph-projection": "1.1.1",
120
+ "@exadev/process-graph-react": "1.1.0",
121
+ "@exadev/process-graph-react-flow": "1.1.0",
122
+ "@exadev/process-graph-schema": "1.1.1",
123
+ "@exadev/process-graph-source-contract": "1.1.1",
124
+ "@exadev/process-graph-source-github-issues": "1.1.1",
125
+ "@exadev/process-graph-sqlite-node": "1.0.5",
126
+ "@exadev/process-graph-sqlite-wasm": "1.0.4",
127
+ "@exadev/process-graph-store-contract": "1.1.1",
128
+ "@exadev/process-graph-store-sqlite": "1.1.1",
129
+ "@exadev/process-graph-ui": "1.0.2",
130
+ "@orpc/client": "2.0.0-beta.41",
131
+ "@orpc/contract": "2.0.0-beta.41",
132
+ "@orpc/server": "2.0.0-beta.41",
133
+ "@sqlite.org/sqlite-wasm": "3.53.4-build2",
67
134
  "@stryker-mutator/core": "10.0.0",
68
135
  "@stryker-mutator/typescript-checker": "10.0.0",
69
136
  "@stryker-mutator/vitest-runner": "10.0.0",
70
137
  "@types/node": "26.6.4",
138
+ "@types/react": "19.3.0",
139
+ "@vanilla-extract/css": "1.21.2",
140
+ "@vanilla-extract/recipes": "0.5.7",
141
+ "@vitest/browser-playwright": "5.0.3",
71
142
  "@vitest/coverage-v8": "5.0.3",
143
+ "@xyflow/react": "12.12.0",
144
+ "commander": "15.0.0",
145
+ "drizzle-orm": "1.0.0-rc.4",
146
+ "elkjs": "0.12.0",
72
147
  "eslint": "10.12.0",
148
+ "playwright": "1.63.0",
73
149
  "publint": "0.3.25",
150
+ "react": "19.3.0",
151
+ "react-dom": "19.3.0",
152
+ "tsdown": "0.23.0",
74
153
  "typescript": "6.0.3",
75
154
  "vitest": "5.0.3"
155
+ },
156
+ "dependencies": {
157
+ "trilean": "1.7.2",
158
+ "zod": "4.6.5"
159
+ },
160
+ "peerDependencies": {
161
+ "@orpc/client": "2.0.0-beta.41",
162
+ "@orpc/contract": "2.0.0-beta.41",
163
+ "@orpc/server": "2.0.0-beta.41",
164
+ "@sqlite.org/sqlite-wasm": "3.53.4-build2",
165
+ "@vanilla-extract/css": "1.21.2",
166
+ "@vanilla-extract/recipes": "0.5.7",
167
+ "@xyflow/react": "12.12.0",
168
+ "commander": "15.0.0",
169
+ "drizzle-orm": "1.0.0-rc.4",
170
+ "elkjs": "0.12.0",
171
+ "react": "19.3.0",
172
+ "react-dom": "19.3.0"
173
+ },
174
+ "peerDependenciesMeta": {
175
+ "@orpc/client": {
176
+ "optional": true
177
+ },
178
+ "@orpc/contract": {
179
+ "optional": true
180
+ },
181
+ "@orpc/server": {
182
+ "optional": true
183
+ },
184
+ "@sqlite.org/sqlite-wasm": {
185
+ "optional": true
186
+ },
187
+ "@vanilla-extract/css": {
188
+ "optional": true
189
+ },
190
+ "@vanilla-extract/recipes": {
191
+ "optional": true
192
+ },
193
+ "@xyflow/react": {
194
+ "optional": true
195
+ },
196
+ "commander": {
197
+ "optional": true
198
+ },
199
+ "drizzle-orm": {
200
+ "optional": true
201
+ },
202
+ "elkjs": {
203
+ "optional": true
204
+ },
205
+ "react": {
206
+ "optional": true
207
+ },
208
+ "react-dom": {
209
+ "optional": true
210
+ }
76
211
  }
77
212
  }