@contractspec/example.workflow-system 3.7.6 → 3.7.7
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.
- package/README.md +69 -119
- package/dist/approval/approval.event.js +1 -1
- package/dist/approval/approval.handler.d.ts +1 -1
- package/dist/approval/index.d.ts +4 -4
- package/dist/approval/index.js +1 -1
- package/dist/browser/approval/approval.event.js +1 -1
- package/dist/browser/approval/index.js +1 -1
- package/dist/browser/entities/index.js +166 -166
- package/dist/browser/index.js +1800 -1802
- package/dist/browser/instance/index.js +210 -210
- package/dist/browser/instance/instance.event.js +1 -1
- package/dist/browser/ui/hooks/index.js +1 -1
- package/dist/browser/ui/hooks/useWorkflowList.js +1 -1
- package/dist/browser/ui/index.js +1 -1
- package/dist/entities/index.d.ts +53 -53
- package/dist/entities/index.js +166 -166
- package/dist/index.d.ts +5 -5
- package/dist/index.js +1800 -1802
- package/dist/instance/index.d.ts +3 -3
- package/dist/instance/index.js +210 -210
- package/dist/instance/instance.event.js +1 -1
- package/dist/instance/instance.handler.d.ts +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/mock-data.d.ts +1 -1
- package/dist/ui/hooks/index.js +1 -1
- package/dist/ui/hooks/useWorkflowList.js +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/workflow/index.d.ts +4 -4
- package/dist/workflow/workflow.handler.d.ts +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -1,124 +1,74 @@
|
|
|
1
1
|
# @contractspec/example.workflow-system
|
|
2
2
|
|
|
3
|
-
Website: https://contractspec.io
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- `
|
|
22
|
-
- `
|
|
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
|
+
- Capability and feature definition patterns.
|
|
15
|
+
- Seeder and test-spec patterns.
|
|
16
|
+
|
|
17
|
+
## Running Locally
|
|
18
|
+
|
|
19
|
+
From `packages/examples/workflow-system`:
|
|
20
|
+
- `bun run dev`
|
|
21
|
+
- `bun run build`
|
|
22
|
+
- `bun run typecheck`
|
|
93
23
|
|
|
94
24
|
## Usage
|
|
95
25
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
-
|
|
26
|
+
Use `@contractspec/example.workflow-system` as a reference implementation, or import its exported surfaces into a workspace that composes ContractSpec examples and bundles.
|
|
27
|
+
|
|
28
|
+
## Architecture
|
|
29
|
+
|
|
30
|
+
- `src/approval` is part of the package's public or composition surface.
|
|
31
|
+
- `src/docs/` contains docblocks and documentation-facing exports.
|
|
32
|
+
- `src/entities/` contains domain entities and value objects.
|
|
33
|
+
- `src/example.ts` is the runnable example entrypoint.
|
|
34
|
+
- `src/handlers/` contains handlers or demo adapters wired to contract surfaces.
|
|
35
|
+
- `src/index.ts` is the root public barrel and package entrypoint.
|
|
36
|
+
- `src/instance` is part of the package's public or composition surface.
|
|
37
|
+
|
|
38
|
+
## Public Entry Points
|
|
39
|
+
|
|
40
|
+
- Export `.` resolves through `./src/index.ts`.
|
|
41
|
+
- Export `./approval` resolves through `./src/approval/index.ts`.
|
|
42
|
+
- Export `./approval/approval.enum` resolves through `./src/approval/approval.enum.ts`.
|
|
43
|
+
- Export `./approval/approval.event` resolves through `./src/approval/approval.event.ts`.
|
|
44
|
+
- Export `./approval/approval.handler` resolves through `./src/approval/approval.handler.ts`.
|
|
45
|
+
- Export `./approval/approval.operations` resolves through `./src/approval/approval.operations.ts`.
|
|
46
|
+
- Export `./approval/approval.schema` resolves through `./src/approval/approval.schema.ts`.
|
|
47
|
+
- Export `./docs` resolves through `./src/docs/index.ts`.
|
|
48
|
+
- Export `./docs/workflow-system.docblock` resolves through `./src/docs/workflow-system.docblock.ts`.
|
|
49
|
+
- Export `./entities` resolves through `./src/entities/index.ts`.
|
|
50
|
+
- The package publishes 44 total export subpaths; keep docs aligned with `package.json`.
|
|
51
|
+
|
|
52
|
+
## Local Commands
|
|
53
|
+
|
|
54
|
+
- `bun run dev` — contractspec-bun-build dev
|
|
55
|
+
- `bun run build` — bun run prebuild && bun run build:bundle && bun run build:types
|
|
56
|
+
- `bun run lint` — bun lint:fix
|
|
57
|
+
- `bun run lint:check` — biome check .
|
|
58
|
+
- `bun run lint:fix` — biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .
|
|
59
|
+
- `bun run typecheck` — tsc --noEmit
|
|
60
|
+
- `bun run publish:pkg` — bun publish --tolerate-republish --ignore-scripts --verbose
|
|
61
|
+
- `bun run publish:pkg:canary` — bun publish:pkg --tag canary
|
|
62
|
+
- `bun run clean` — rimraf dist .turbo
|
|
63
|
+
- `bun run build:bundle` — contractspec-bun-build transpile
|
|
64
|
+
- `bun run build:types` — contractspec-bun-build types
|
|
65
|
+
- `bun run prebuild` — contractspec-bun-build prebuild
|
|
66
|
+
|
|
67
|
+
## Recent Updates
|
|
68
|
+
|
|
69
|
+
- Replace eslint+prettier by biomejs to optimize speed.
|
|
70
|
+
- Missing contract layers.
|
|
71
|
+
|
|
72
|
+
## Notes
|
|
73
|
+
|
|
74
|
+
- 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 {
|
|
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
|
|
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;
|
package/dist/approval/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Approval domain - Approval request and decision management.
|
|
3
3
|
*/
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
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';
|
package/dist/approval/index.js
CHANGED
|
@@ -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 {
|
|
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 {
|
|
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 {
|
|
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",
|