@contractspec/example.workflow-system 3.7.6 → 3.8.2

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 (57) hide show
  1. package/README.md +72 -119
  2. package/dist/approval/approval.event.js +1 -1
  3. package/dist/approval/approval.handler.d.ts +1 -1
  4. package/dist/approval/index.d.ts +4 -4
  5. package/dist/approval/index.js +1 -1
  6. package/dist/browser/approval/approval.event.js +1 -1
  7. package/dist/browser/approval/index.js +1 -1
  8. package/dist/browser/entities/index.js +166 -166
  9. package/dist/browser/handlers/index.js +43 -43
  10. package/dist/browser/handlers/workflow.handlers.js +43 -43
  11. package/dist/browser/index.js +1935 -1548
  12. package/dist/browser/instance/index.js +210 -210
  13. package/dist/browser/instance/instance.event.js +1 -1
  14. package/dist/browser/shared/demo-scenario.js +213 -0
  15. package/dist/browser/ui/WorkflowDashboard.visualizations.js +239 -0
  16. package/dist/browser/ui/hooks/index.js +0 -47
  17. package/dist/browser/ui/hooks/useWorkflowList.js +6 -4
  18. package/dist/browser/ui/index.js +6 -4
  19. package/dist/browser/ui/renderers/index.js +409 -73
  20. package/dist/browser/ui/renderers/workflow.markdown.js +409 -73
  21. package/dist/browser/visualizations/catalog.js +132 -0
  22. package/dist/browser/visualizations/index.js +133 -0
  23. package/dist/browser/visualizations/selectors.js +195 -0
  24. package/dist/entities/index.d.ts +53 -53
  25. package/dist/entities/index.js +166 -166
  26. package/dist/example.test.d.ts +1 -0
  27. package/dist/handlers/index.js +43 -43
  28. package/dist/handlers/workflow.handlers.js +43 -43
  29. package/dist/index.d.ts +6 -5
  30. package/dist/index.js +1935 -1548
  31. package/dist/instance/index.d.ts +3 -3
  32. package/dist/instance/index.js +210 -210
  33. package/dist/instance/instance.event.js +1 -1
  34. package/dist/instance/instance.handler.d.ts +1 -1
  35. package/dist/shared/demo-scenario.d.ts +43 -0
  36. package/dist/shared/demo-scenario.js +214 -0
  37. package/dist/shared/index.d.ts +1 -1
  38. package/dist/shared/mock-data.d.ts +1 -1
  39. package/dist/ui/WorkflowDashboard.visualizations.d.ts +4 -0
  40. package/dist/ui/WorkflowDashboard.visualizations.js +240 -0
  41. package/dist/ui/hooks/index.js +0 -47
  42. package/dist/ui/hooks/useWorkflowList.d.ts +2 -1
  43. package/dist/ui/hooks/useWorkflowList.js +6 -4
  44. package/dist/ui/index.d.ts +1 -1
  45. package/dist/ui/index.js +6 -4
  46. package/dist/ui/renderers/index.js +409 -73
  47. package/dist/ui/renderers/workflow.markdown.js +409 -73
  48. package/dist/visualizations/catalog.d.ts +11 -0
  49. package/dist/visualizations/catalog.js +133 -0
  50. package/dist/visualizations/index.d.ts +2 -0
  51. package/dist/visualizations/index.js +134 -0
  52. package/dist/visualizations/selectors.d.ts +11 -0
  53. package/dist/visualizations/selectors.js +196 -0
  54. package/dist/visualizations/selectors.test.d.ts +1 -0
  55. package/dist/workflow/index.d.ts +4 -4
  56. package/dist/workflow/workflow.handler.d.ts +1 -1
  57. package/package.json +71 -10
package/README.md CHANGED
@@ -1,124 +1,77 @@
1
1
  # @contractspec/example.workflow-system
2
2
 
3
- Website: https://contractspec.io/
4
-
5
-
6
- A comprehensive workflow and approval system example demonstrating ContractSpec principles.
7
-
8
- ## Features
9
-
10
- - **State Machine Engine**: Define workflows as state machines with typed transitions
11
- - **Role-Based Approvals**: Configure approval chains with multiple modes (ANY, ALL, MAJORITY, SEQUENTIAL)
12
- - **Delegation**: Allow approvers to delegate to others
13
- - **Escalation**: Automatic escalation on timeout
14
- - **Feature Flag Integration**: Control workflow availability via feature flags
15
- - **Full Audit Trail**: Track all workflow actions and decisions
16
- - **Multi-Surface Presentations**: React components + Markdown renderers
17
-
18
- ## Entities
19
-
20
- ### Workflow Definition
21
- - `WorkflowDefinition` - Blueprint for a workflow
22
- - `WorkflowStep` - Steps within a workflow (START, APPROVAL, TASK, CONDITION, PARALLEL, WAIT, ACTION, END)
23
-
24
- ### Workflow Instance
25
- - `WorkflowInstance` - Running instance of a workflow
26
- - `StepExecution` - Execution record for each step
27
-
28
- ### Approval
29
- - `ApprovalRequest` - Pending approval request
30
- - `ApprovalComment` - Comments on approvals
31
-
32
- ## Contracts
33
-
34
- ### Workflow Definition Management
35
- - `workflow.definition.create` - Create a new workflow
36
- - `workflow.definition.update` - Update workflow
37
- - `workflow.step.add` - Add step to workflow
38
- - `workflow.definition.publish` - Activate workflow
39
- - `workflow.definition.list` - List workflows
40
- - `workflow.definition.get` - Get workflow details
41
-
42
- ### Workflow Instance Operations
43
- - `workflow.instance.start` - Start a new workflow
44
- - `workflow.instance.transition` - Transition to next step
45
- - `workflow.instance.pause` - Pause workflow
46
- - `workflow.instance.resume` - Resume workflow
47
- - `workflow.instance.cancel` - Cancel workflow
48
- - `workflow.instance.list` - List instances
49
- - `workflow.instance.get` - Get instance details
50
-
51
- ### Approval Operations
52
- - `workflow.approval.decide` - Submit approval decision
53
- - `workflow.approval.delegate` - Delegate to another user
54
- - `workflow.approval.comment.add` - Add comment
55
- - `workflow.approval.list.mine` - List my pending approvals
56
- - `workflow.approval.get` - Get approval details
57
-
58
- ## State Machine
59
-
60
- The workflow engine uses a state machine model where:
61
-
62
- 1. Each step defines available actions and their target steps
63
- 2. Transitions are validated against:
64
- - Current workflow status
65
- - User roles (role-based access control)
66
- - Step-specific conditions
67
- 3. Actions trigger events for audit trail and notifications
68
-
69
- Example step definition:
70
-
71
- ```typescript
72
- {
73
- key: 'manager_approval',
74
- type: 'APPROVAL',
75
- transitions: {
76
- approve: 'finance_review',
77
- reject: 'rejected',
78
- request_changes: 'revision_needed'
79
- },
80
- approvalMode: 'ANY',
81
- approverRoles: ['manager', 'director'],
82
- timeoutSeconds: 86400, // 24 hours
83
- }
84
- ```
85
-
86
- ## Events
87
-
88
- - `workflow.definition.created/updated/published`
89
- - `workflow.step.added`
90
- - `workflow.instance.started/completed/cancelled/paused/resumed/failed/timeout`
91
- - `workflow.step.entered/exited`
92
- - `workflow.approval.requested/decided/delegated/escalated`
3
+ Website: https://contractspec.io
4
+
5
+ **Workflow and approval system example for ContractSpec - State machine with role-based transitions.**
6
+
7
+ ## What This Demonstrates
8
+
9
+ - State machine pattern for workflow transitions.
10
+ - Approval flow with role-based access.
11
+ - Multi-entity domain (workflow, instance, approval).
12
+ - Per-entity schema/enum/event/handler/operations pattern.
13
+ - React UI with WorkflowDashboard, hooks, and renderers.
14
+ - Contract-backed visualizations for workflow status, throughput, and workload comparison.
15
+ - Capability and feature definition patterns.
16
+ - Seeder and test-spec patterns.
17
+
18
+ ## Running Locally
19
+
20
+ From `packages/examples/workflow-system`:
21
+ - `bun run dev`
22
+ - `bun run build`
23
+ - `bun run test`
24
+ - `bun run typecheck`
93
25
 
94
26
  ## Usage
95
27
 
96
- ```typescript
97
- import {
98
- StartWorkflowContract,
99
- TransitionWorkflowContract,
100
- workflowSystemSchemaContribution
101
- } from '@contractspec/example.workflow-system';
102
-
103
- // Start a workflow
104
- const instance = await executeContract(StartWorkflowContract, {
105
- workflowKey: 'purchase_approval',
106
- contextData: { amount: 5000, vendor: 'ACME Corp' },
107
- referenceId: 'PO-12345',
108
- referenceType: 'PurchaseOrder',
109
- });
110
-
111
- // Make a transition
112
- const result = await executeContract(TransitionWorkflowContract, {
113
- instanceId: instance.id,
114
- action: 'approve',
115
- comment: 'Approved for standard purchase',
116
- });
117
- ```
118
-
119
- ## Dependencies
120
-
121
- - `@contractspec/lib.identity-rbac` - User identity and roles
122
- - `@contractspec/lib.feature-flags` - Feature flag evaluation
123
- - `@contractspec/module.audit-trail` - Action auditing
124
- - `@contractspec/module.notifications` - Approval notifications
28
+ Use `@contractspec/example.workflow-system` as a reference implementation, or import its exported surfaces into a workspace that composes ContractSpec examples and bundles.
29
+
30
+ ## Architecture
31
+
32
+ - `src/approval` is part of the package's public or composition surface.
33
+ - `src/docs/` contains docblocks and documentation-facing exports.
34
+ - `src/entities/` contains domain entities and value objects.
35
+ - `src/example.ts` is the runnable example entrypoint.
36
+ - `src/handlers/` contains handlers or demo adapters wired to contract surfaces.
37
+ - `src/index.ts` is the root public barrel and package entrypoint.
38
+ - `src/instance` is part of the package's public or composition surface.
39
+
40
+ ## Public Entry Points
41
+
42
+ - Export `.` resolves through `./src/index.ts`.
43
+ - Export `./approval` resolves through `./src/approval/index.ts`.
44
+ - Export `./approval/approval.enum` resolves through `./src/approval/approval.enum.ts`.
45
+ - Export `./approval/approval.event` resolves through `./src/approval/approval.event.ts`.
46
+ - Export `./approval/approval.handler` resolves through `./src/approval/approval.handler.ts`.
47
+ - Export `./approval/approval.operations` resolves through `./src/approval/approval.operations.ts`.
48
+ - Export `./approval/approval.schema` resolves through `./src/approval/approval.schema.ts`.
49
+ - Export `./docs` resolves through `./src/docs/index.ts`.
50
+ - Export `./docs/workflow-system.docblock` resolves through `./src/docs/workflow-system.docblock.ts`.
51
+ - Export `./entities` resolves through `./src/entities/index.ts`.
52
+ - The package publishes 44 total export subpaths; keep docs aligned with `package.json`.
53
+
54
+ ## Local Commands
55
+
56
+ - `bun run dev` — contractspec-bun-build dev
57
+ - `bun run build` — bun run prebuild && bun run build:bundle && bun run build:types
58
+ - `bun run lint` — bun lint:fix
59
+ - `bun run lint:check` — biome check .
60
+ - `bun run lint:fix` — biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .
61
+ - `bun run typecheck` — tsc --noEmit
62
+ - `bun run publish:pkg` — bun publish --tolerate-republish --ignore-scripts --verbose
63
+ - `bun run publish:pkg:canary` — bun publish:pkg --tag canary
64
+ - `bun run clean` — rimraf dist .turbo
65
+ - `bun run build:bundle` — contractspec-bun-build transpile
66
+ - `bun run build:types` — contractspec-bun-build types
67
+ - `bun run prebuild` — contractspec-bun-build prebuild
68
+ - `bun run test` — bun test
69
+
70
+ ## Recent Updates
71
+
72
+ - Replace eslint+prettier by biomejs to optimize speed.
73
+ - Missing contract layers.
74
+
75
+ ## Notes
76
+
77
+ - Works alongside `@contractspec/lib.contracts-spec`, `@contractspec/lib.design-system`, `@contractspec/lib.example-shared-ui`, `@contractspec/lib.runtime-sandbox`, `@contractspec/lib.schema`, ...
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  // src/approval/approval.event.ts
3
3
  import { defineEvent } from "@contractspec/lib.contracts-spec";
4
- import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
4
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
5
5
  var ApprovalRequestedPayload = defineSchemaModel({
6
6
  name: "ApprovalRequestedEventPayload",
7
7
  description: "Payload when approval is requested",
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Approval handlers.
3
3
  */
4
- import type { ApprovalRequestRecord, WorkflowInstanceRecord, WorkflowStepRecord, HandlerContext } from '../shared/types';
4
+ import type { ApprovalRequestRecord, HandlerContext, WorkflowInstanceRecord, WorkflowStepRecord } from '../shared/types';
5
5
  export declare function createApprovalRequests(instance: WorkflowInstanceRecord, step: WorkflowStepRecord, _context: HandlerContext): Promise<void>;
6
6
  export declare function handleSubmitDecision(input: {
7
7
  requestId: string;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Approval domain - Approval request and decision management.
3
3
  */
4
- export { ApprovalStatusEnum, ApprovalDecisionEnum } from './approval.enum';
5
- export { ApprovalRequestModel, ApprovalCommentModel } from './approval.schema';
6
- export { SubmitDecisionContract, DelegateApprovalContract, AddApprovalCommentContract, ListMyApprovalsContract, GetApprovalContract, } from './approval.operations';
7
- export { ApprovalRequestedEvent, ApprovalDecidedEvent, ApprovalDelegatedEvent, ApprovalEscalatedEvent, } from './approval.event';
4
+ export { ApprovalDecisionEnum, ApprovalStatusEnum } from './approval.enum';
5
+ export { ApprovalDecidedEvent, ApprovalDelegatedEvent, ApprovalEscalatedEvent, ApprovalRequestedEvent, } from './approval.event';
6
+ export { AddApprovalCommentContract, DelegateApprovalContract, GetApprovalContract, ListMyApprovalsContract, SubmitDecisionContract, } from './approval.operations';
7
+ export { ApprovalCommentModel, ApprovalRequestModel } from './approval.schema';
@@ -20,7 +20,7 @@ var ApprovalDecisionEnum = defineEnum("ApprovalDecision", [
20
20
 
21
21
  // src/approval/approval.event.ts
22
22
  import { defineEvent } from "@contractspec/lib.contracts-spec";
23
- import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
23
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
24
24
  var ApprovalRequestedPayload = defineSchemaModel({
25
25
  name: "ApprovalRequestedEventPayload",
26
26
  description: "Payload when approval is requested",
@@ -1,6 +1,6 @@
1
1
  // src/approval/approval.event.ts
2
2
  import { defineEvent } from "@contractspec/lib.contracts-spec";
3
- import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
3
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
4
4
  var ApprovalRequestedPayload = defineSchemaModel({
5
5
  name: "ApprovalRequestedEventPayload",
6
6
  description: "Payload when approval is requested",
@@ -19,7 +19,7 @@ var ApprovalDecisionEnum = defineEnum("ApprovalDecision", [
19
19
 
20
20
  // src/approval/approval.event.ts
21
21
  import { defineEvent } from "@contractspec/lib.contracts-spec";
22
- import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
22
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
23
23
  var ApprovalRequestedPayload = defineSchemaModel({
24
24
  name: "ApprovalRequestedEventPayload",
25
25
  description: "Payload when approval is requested",