@contractspec/example.workflow-system 1.44.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 (121) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -0
  3. package/dist/approval/approval.enum.d.ts +14 -0
  4. package/dist/approval/approval.enum.d.ts.map +1 -0
  5. package/dist/approval/approval.enum.js +29 -0
  6. package/dist/approval/approval.enum.js.map +1 -0
  7. package/dist/approval/approval.event.d.ts +131 -0
  8. package/dist/approval/approval.event.d.ts.map +1 -0
  9. package/dist/approval/approval.event.js +220 -0
  10. package/dist/approval/approval.event.js.map +1 -0
  11. package/dist/approval/approval.handler.d.ts +23 -0
  12. package/dist/approval/approval.handler.d.ts.map +1 -0
  13. package/dist/approval/approval.handler.js +72 -0
  14. package/dist/approval/approval.handler.js.map +1 -0
  15. package/dist/approval/approval.operations.d.ts +535 -0
  16. package/dist/approval/approval.operations.d.ts.map +1 -0
  17. package/dist/approval/approval.operations.js +345 -0
  18. package/dist/approval/approval.operations.js.map +1 -0
  19. package/dist/approval/approval.schema.d.ts +100 -0
  20. package/dist/approval/approval.schema.d.ts.map +1 -0
  21. package/dist/approval/approval.schema.js +110 -0
  22. package/dist/approval/approval.schema.js.map +1 -0
  23. package/dist/approval/index.d.ts +5 -0
  24. package/dist/approval/index.js +6 -0
  25. package/dist/docs/index.d.ts +1 -0
  26. package/dist/docs/index.js +1 -0
  27. package/dist/docs/workflow-system.docblock.d.ts +1 -0
  28. package/dist/docs/workflow-system.docblock.js +115 -0
  29. package/dist/docs/workflow-system.docblock.js.map +1 -0
  30. package/dist/entities/approval.d.ts +58 -0
  31. package/dist/entities/approval.d.ts.map +1 -0
  32. package/dist/entities/approval.js +128 -0
  33. package/dist/entities/approval.js.map +1 -0
  34. package/dist/entities/index.d.ts +139 -0
  35. package/dist/entities/index.d.ts.map +1 -0
  36. package/dist/entities/index.js +32 -0
  37. package/dist/entities/index.js.map +1 -0
  38. package/dist/entities/instance.d.ts +69 -0
  39. package/dist/entities/instance.d.ts.map +1 -0
  40. package/dist/entities/instance.js +168 -0
  41. package/dist/entities/instance.js.map +1 -0
  42. package/dist/entities/step.d.ts +50 -0
  43. package/dist/entities/step.d.ts.map +1 -0
  44. package/dist/entities/step.js +135 -0
  45. package/dist/entities/step.js.map +1 -0
  46. package/dist/entities/workflow.d.ts +41 -0
  47. package/dist/entities/workflow.d.ts.map +1 -0
  48. package/dist/entities/workflow.js +102 -0
  49. package/dist/entities/workflow.js.map +1 -0
  50. package/dist/example.d.ts +40 -0
  51. package/dist/example.d.ts.map +1 -0
  52. package/dist/example.js +51 -0
  53. package/dist/example.js.map +1 -0
  54. package/dist/index.d.ts +21 -0
  55. package/dist/index.js +21 -0
  56. package/dist/instance/index.d.ts +5 -0
  57. package/dist/instance/index.js +6 -0
  58. package/dist/instance/instance.enum.d.ts +10 -0
  59. package/dist/instance/instance.enum.d.ts.map +1 -0
  60. package/dist/instance/instance.enum.js +20 -0
  61. package/dist/instance/instance.enum.js.map +1 -0
  62. package/dist/instance/instance.event.d.ts +356 -0
  63. package/dist/instance/instance.event.d.ts.map +1 -0
  64. package/dist/instance/instance.event.js +293 -0
  65. package/dist/instance/instance.event.js.map +1 -0
  66. package/dist/instance/instance.handler.d.ts +27 -0
  67. package/dist/instance/instance.handler.d.ts.map +1 -0
  68. package/dist/instance/instance.handler.js +94 -0
  69. package/dist/instance/instance.handler.js.map +1 -0
  70. package/dist/instance/instance.operations.d.ts +1024 -0
  71. package/dist/instance/instance.operations.d.ts.map +1 -0
  72. package/dist/instance/instance.operations.js +464 -0
  73. package/dist/instance/instance.operations.js.map +1 -0
  74. package/dist/instance/instance.schema.d.ts +223 -0
  75. package/dist/instance/instance.schema.d.ts.map +1 -0
  76. package/dist/instance/instance.schema.js +172 -0
  77. package/dist/instance/instance.schema.js.map +1 -0
  78. package/dist/presentations/index.d.ts +64 -0
  79. package/dist/presentations/index.d.ts.map +1 -0
  80. package/dist/presentations/index.js +337 -0
  81. package/dist/presentations/index.js.map +1 -0
  82. package/dist/shared/index.d.ts +3 -0
  83. package/dist/shared/index.js +3 -0
  84. package/dist/shared/mock-data.d.ts +19 -0
  85. package/dist/shared/mock-data.d.ts.map +1 -0
  86. package/dist/shared/mock-data.js +12 -0
  87. package/dist/shared/mock-data.js.map +1 -0
  88. package/dist/shared/types.d.ts +81 -0
  89. package/dist/shared/types.d.ts.map +1 -0
  90. package/dist/shared/types.js +0 -0
  91. package/dist/state-machine/index.d.ts +148 -0
  92. package/dist/state-machine/index.d.ts.map +1 -0
  93. package/dist/state-machine/index.js +158 -0
  94. package/dist/state-machine/index.js.map +1 -0
  95. package/dist/workflow/index.d.ts +5 -0
  96. package/dist/workflow/index.js +6 -0
  97. package/dist/workflow/workflow.enum.d.ts +22 -0
  98. package/dist/workflow/workflow.enum.d.ts.map +1 -0
  99. package/dist/workflow/workflow.enum.js +47 -0
  100. package/dist/workflow/workflow.enum.js.map +1 -0
  101. package/dist/workflow/workflow.event.d.ts +135 -0
  102. package/dist/workflow/workflow.event.d.ts.map +1 -0
  103. package/dist/workflow/workflow.event.js +150 -0
  104. package/dist/workflow/workflow.event.js.map +1 -0
  105. package/dist/workflow/workflow.handler.d.ts +29 -0
  106. package/dist/workflow/workflow.handler.d.ts.map +1 -0
  107. package/dist/workflow/workflow.handler.js +66 -0
  108. package/dist/workflow/workflow.handler.js.map +1 -0
  109. package/dist/workflow/workflow.operations.d.ts +1011 -0
  110. package/dist/workflow/workflow.operations.d.ts.map +1 -0
  111. package/dist/workflow/workflow.operations.js +345 -0
  112. package/dist/workflow/workflow.operations.js.map +1 -0
  113. package/dist/workflow/workflow.schema.d.ts +265 -0
  114. package/dist/workflow/workflow.schema.d.ts.map +1 -0
  115. package/dist/workflow/workflow.schema.js +249 -0
  116. package/dist/workflow/workflow.schema.js.map +1 -0
  117. package/dist/workflow-system.feature.d.ts +12 -0
  118. package/dist/workflow-system.feature.d.ts.map +1 -0
  119. package/dist/workflow-system.feature.js +339 -0
  120. package/dist/workflow-system.feature.js.map +1 -0
  121. package/package.json +124 -0
@@ -0,0 +1,168 @@
1
+ import { defineEntity, defineEntityEnum, field, index } from "@contractspec/lib.schema";
2
+
3
+ //#region src/entities/instance.ts
4
+ /**
5
+ * Instance status enum - lifecycle of a workflow instance.
6
+ */
7
+ const InstanceStatusEnum = defineEntityEnum({
8
+ name: "InstanceStatus",
9
+ values: [
10
+ "PENDING",
11
+ "RUNNING",
12
+ "WAITING",
13
+ "PAUSED",
14
+ "COMPLETED",
15
+ "CANCELLED",
16
+ "FAILED",
17
+ "TIMEOUT"
18
+ ],
19
+ schema: "workflow",
20
+ description: "Status of a workflow instance."
21
+ });
22
+ /**
23
+ * Step execution status enum.
24
+ */
25
+ const StepExecutionStatusEnum = defineEntityEnum({
26
+ name: "StepExecutionStatus",
27
+ values: [
28
+ "PENDING",
29
+ "ACTIVE",
30
+ "COMPLETED",
31
+ "SKIPPED",
32
+ "FAILED",
33
+ "TIMEOUT"
34
+ ],
35
+ schema: "workflow",
36
+ description: "Status of a step execution."
37
+ });
38
+ /**
39
+ * WorkflowInstance entity - a running instance of a workflow.
40
+ *
41
+ * When a workflow is triggered, an instance is created. The instance
42
+ * tracks the current state and all data associated with this execution.
43
+ */
44
+ const WorkflowInstanceEntity = defineEntity({
45
+ name: "WorkflowInstance",
46
+ description: "A running instance of a workflow definition.",
47
+ schema: "workflow",
48
+ map: "workflow_instance",
49
+ fields: {
50
+ id: field.id({ description: "Unique instance ID" }),
51
+ workflowDefinitionId: field.foreignKey(),
52
+ referenceId: field.string({
53
+ isOptional: true,
54
+ description: "External reference (e.g., order ID)"
55
+ }),
56
+ referenceType: field.string({
57
+ isOptional: true,
58
+ description: "Type of reference (e.g., \"Order\")"
59
+ }),
60
+ status: field.enum("InstanceStatus", { default: "PENDING" }),
61
+ currentStepId: field.string({
62
+ isOptional: true,
63
+ description: "Current step being executed"
64
+ }),
65
+ contextData: field.json({ description: "Data context for this instance" }),
66
+ triggeredBy: field.foreignKey({ description: "User who triggered the workflow" }),
67
+ triggerSource: field.string({
68
+ isOptional: true,
69
+ description: "Source of trigger (e.g., \"api\", \"ui\")"
70
+ }),
71
+ organizationId: field.foreignKey(),
72
+ priority: field.int({
73
+ default: 0,
74
+ description: "Processing priority (higher = more urgent)"
75
+ }),
76
+ dueAt: field.dateTime({
77
+ isOptional: true,
78
+ description: "When this instance should complete"
79
+ }),
80
+ outcome: field.string({
81
+ isOptional: true,
82
+ description: "Final outcome (e.g., \"approved\", \"rejected\")"
83
+ }),
84
+ resultData: field.json({
85
+ isOptional: true,
86
+ description: "Final result data"
87
+ }),
88
+ errorMessage: field.string({
89
+ isOptional: true,
90
+ description: "Error message if failed"
91
+ }),
92
+ createdAt: field.createdAt(),
93
+ updatedAt: field.updatedAt(),
94
+ startedAt: field.dateTime({ isOptional: true }),
95
+ completedAt: field.dateTime({ isOptional: true }),
96
+ workflowDefinition: field.belongsTo("WorkflowDefinition", ["workflowDefinitionId"], ["id"]),
97
+ currentStep: field.belongsTo("WorkflowStep", ["currentStepId"], ["id"]),
98
+ stepExecutions: field.hasMany("StepExecution"),
99
+ approvalRequests: field.hasMany("ApprovalRequest")
100
+ },
101
+ indexes: [
102
+ index.on(["organizationId", "status"]),
103
+ index.on(["workflowDefinitionId", "status"]),
104
+ index.on(["referenceType", "referenceId"]),
105
+ index.on(["triggeredBy", "status"]),
106
+ index.on(["status", "dueAt"]),
107
+ index.on(["createdAt"])
108
+ ],
109
+ enums: [InstanceStatusEnum]
110
+ });
111
+ /**
112
+ * StepExecution entity - tracks execution of a step within an instance.
113
+ */
114
+ const StepExecutionEntity = defineEntity({
115
+ name: "StepExecution",
116
+ description: "Execution record of a step within a workflow instance.",
117
+ schema: "workflow",
118
+ map: "step_execution",
119
+ fields: {
120
+ id: field.id({ description: "Unique execution ID" }),
121
+ workflowInstanceId: field.foreignKey(),
122
+ workflowStepId: field.foreignKey(),
123
+ status: field.enum("StepExecutionStatus", { default: "PENDING" }),
124
+ executionOrder: field.int({
125
+ default: 0,
126
+ description: "Order of execution within instance"
127
+ }),
128
+ inputData: field.json({
129
+ isOptional: true,
130
+ description: "Data when entering step"
131
+ }),
132
+ outputData: field.json({
133
+ isOptional: true,
134
+ description: "Data when exiting step"
135
+ }),
136
+ actionTaken: field.string({
137
+ isOptional: true,
138
+ description: "Action that caused transition (e.g., \"approve\")"
139
+ }),
140
+ transitionedTo: field.string({
141
+ isOptional: true,
142
+ description: "Step key transitioned to"
143
+ }),
144
+ executedBy: field.string({
145
+ isOptional: true,
146
+ description: "User who completed this step"
147
+ }),
148
+ errorMessage: field.string({ isOptional: true }),
149
+ errorDetails: field.json({ isOptional: true }),
150
+ retryCount: field.int({ default: 0 }),
151
+ createdAt: field.createdAt(),
152
+ updatedAt: field.updatedAt(),
153
+ startedAt: field.dateTime({ isOptional: true }),
154
+ completedAt: field.dateTime({ isOptional: true }),
155
+ workflowInstance: field.belongsTo("WorkflowInstance", ["workflowInstanceId"], ["id"], { onDelete: "Cascade" }),
156
+ workflowStep: field.belongsTo("WorkflowStep", ["workflowStepId"], ["id"])
157
+ },
158
+ indexes: [
159
+ index.on(["workflowInstanceId", "executionOrder"]),
160
+ index.on(["workflowInstanceId", "workflowStepId"]),
161
+ index.on(["status"])
162
+ ],
163
+ enums: [StepExecutionStatusEnum]
164
+ });
165
+
166
+ //#endregion
167
+ export { InstanceStatusEnum, StepExecutionEntity, StepExecutionStatusEnum, WorkflowInstanceEntity };
168
+ //# sourceMappingURL=instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance.js","names":[],"sources":["../../src/entities/instance.ts"],"sourcesContent":["import {\n defineEntity,\n defineEntityEnum,\n field,\n index,\n} from '@contractspec/lib.schema';\n\n/**\n * Instance status enum - lifecycle of a workflow instance.\n */\nexport const InstanceStatusEnum = defineEntityEnum({\n name: 'InstanceStatus',\n values: [\n 'PENDING', // Created but not started\n 'RUNNING', // Currently executing\n 'WAITING', // Waiting for approval/event\n 'PAUSED', // Manually paused\n 'COMPLETED', // Successfully completed\n 'CANCELLED', // Cancelled by user\n 'FAILED', // Failed due to error\n 'TIMEOUT', // Timed out\n ] as const,\n schema: 'workflow',\n description: 'Status of a workflow instance.',\n});\n\n/**\n * Step execution status enum.\n */\nexport const StepExecutionStatusEnum = defineEntityEnum({\n name: 'StepExecutionStatus',\n values: [\n 'PENDING', // Not yet started\n 'ACTIVE', // Currently active\n 'COMPLETED', // Successfully completed\n 'SKIPPED', // Skipped due to condition\n 'FAILED', // Failed\n 'TIMEOUT', // Timed out\n ] as const,\n schema: 'workflow',\n description: 'Status of a step execution.',\n});\n\n/**\n * WorkflowInstance entity - a running instance of a workflow.\n *\n * When a workflow is triggered, an instance is created. The instance\n * tracks the current state and all data associated with this execution.\n */\nexport const WorkflowInstanceEntity = defineEntity({\n name: 'WorkflowInstance',\n description: 'A running instance of a workflow definition.',\n schema: 'workflow',\n map: 'workflow_instance',\n fields: {\n id: field.id({ description: 'Unique instance ID' }),\n\n // Parent workflow\n workflowDefinitionId: field.foreignKey(),\n\n // Reference\n referenceId: field.string({\n isOptional: true,\n description: 'External reference (e.g., order ID)',\n }),\n referenceType: field.string({\n isOptional: true,\n description: 'Type of reference (e.g., \"Order\")',\n }),\n\n // Current state\n status: field.enum('InstanceStatus', { default: 'PENDING' }),\n currentStepId: field.string({\n isOptional: true,\n description: 'Current step being executed',\n }),\n\n // Context data - passed through the workflow\n contextData: field.json({ description: 'Data context for this instance' }),\n\n // Trigger info\n triggeredBy: field.foreignKey({\n description: 'User who triggered the workflow',\n }),\n triggerSource: field.string({\n isOptional: true,\n description: 'Source of trigger (e.g., \"api\", \"ui\")',\n }),\n\n // Ownership\n organizationId: field.foreignKey(),\n\n // Priority\n priority: field.int({\n default: 0,\n description: 'Processing priority (higher = more urgent)',\n }),\n\n // Deadlines\n dueAt: field.dateTime({\n isOptional: true,\n description: 'When this instance should complete',\n }),\n\n // Results\n outcome: field.string({\n isOptional: true,\n description: 'Final outcome (e.g., \"approved\", \"rejected\")',\n }),\n resultData: field.json({\n isOptional: true,\n description: 'Final result data',\n }),\n errorMessage: field.string({\n isOptional: true,\n description: 'Error message if failed',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n startedAt: field.dateTime({ isOptional: true }),\n completedAt: field.dateTime({ isOptional: true }),\n\n // Relations\n workflowDefinition: field.belongsTo(\n 'WorkflowDefinition',\n ['workflowDefinitionId'],\n ['id']\n ),\n currentStep: field.belongsTo('WorkflowStep', ['currentStepId'], ['id']),\n stepExecutions: field.hasMany('StepExecution'),\n approvalRequests: field.hasMany('ApprovalRequest'),\n },\n indexes: [\n index.on(['organizationId', 'status']),\n index.on(['workflowDefinitionId', 'status']),\n index.on(['referenceType', 'referenceId']),\n index.on(['triggeredBy', 'status']),\n index.on(['status', 'dueAt']),\n index.on(['createdAt']),\n ],\n enums: [InstanceStatusEnum],\n});\n\n/**\n * StepExecution entity - tracks execution of a step within an instance.\n */\nexport const StepExecutionEntity = defineEntity({\n name: 'StepExecution',\n description: 'Execution record of a step within a workflow instance.',\n schema: 'workflow',\n map: 'step_execution',\n fields: {\n id: field.id({ description: 'Unique execution ID' }),\n\n // Parent\n workflowInstanceId: field.foreignKey(),\n workflowStepId: field.foreignKey(),\n\n // Status\n status: field.enum('StepExecutionStatus', { default: 'PENDING' }),\n\n // Execution order\n executionOrder: field.int({\n default: 0,\n description: 'Order of execution within instance',\n }),\n\n // Input/Output\n inputData: field.json({\n isOptional: true,\n description: 'Data when entering step',\n }),\n outputData: field.json({\n isOptional: true,\n description: 'Data when exiting step',\n }),\n\n // Action taken\n actionTaken: field.string({\n isOptional: true,\n description: 'Action that caused transition (e.g., \"approve\")',\n }),\n transitionedTo: field.string({\n isOptional: true,\n description: 'Step key transitioned to',\n }),\n\n // Executor\n executedBy: field.string({\n isOptional: true,\n description: 'User who completed this step',\n }),\n\n // Error\n errorMessage: field.string({ isOptional: true }),\n errorDetails: field.json({ isOptional: true }),\n\n // Retries\n retryCount: field.int({ default: 0 }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n startedAt: field.dateTime({ isOptional: true }),\n completedAt: field.dateTime({ isOptional: true }),\n\n // Relations\n workflowInstance: field.belongsTo(\n 'WorkflowInstance',\n ['workflowInstanceId'],\n ['id'],\n { onDelete: 'Cascade' }\n ),\n workflowStep: field.belongsTo('WorkflowStep', ['workflowStepId'], ['id']),\n },\n indexes: [\n index.on(['workflowInstanceId', 'executionOrder']),\n index.on(['workflowInstanceId', 'workflowStepId']),\n index.on(['status']),\n ],\n enums: [StepExecutionStatusEnum],\n});\n"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import * as _contractspec_lib_schema300 from "@contractspec/lib.schema";
2
+
3
+ //#region src/entities/step.d.ts
4
+ /**
5
+ * Step type enum - what kind of step this is.
6
+ */
7
+ declare const StepTypeEnum: _contractspec_lib_schema300.EntityEnumDef;
8
+ /**
9
+ * Approval mode enum - how approvals are handled.
10
+ */
11
+ declare const ApprovalModeEnum: _contractspec_lib_schema300.EntityEnumDef;
12
+ /**
13
+ * WorkflowStep entity - defines a step in a workflow.
14
+ *
15
+ * Each step represents a state in the workflow state machine,
16
+ * with transitions defined by the `transitions` JSON field.
17
+ */
18
+ declare const WorkflowStepEntity: _contractspec_lib_schema300.EntitySpec<{
19
+ id: _contractspec_lib_schema300.EntityScalarField;
20
+ workflowDefinitionId: _contractspec_lib_schema300.EntityScalarField;
21
+ name: _contractspec_lib_schema300.EntityScalarField;
22
+ key: _contractspec_lib_schema300.EntityScalarField;
23
+ description: _contractspec_lib_schema300.EntityScalarField;
24
+ type: _contractspec_lib_schema300.EntityEnumField;
25
+ position: _contractspec_lib_schema300.EntityScalarField;
26
+ transitions: _contractspec_lib_schema300.EntityScalarField;
27
+ approvalMode: _contractspec_lib_schema300.EntityEnumField;
28
+ approverRoles: _contractspec_lib_schema300.EntityScalarField;
29
+ approverUserIds: _contractspec_lib_schema300.EntityScalarField;
30
+ escalationConfig: _contractspec_lib_schema300.EntityScalarField;
31
+ assigneeRoles: _contractspec_lib_schema300.EntityScalarField;
32
+ taskTemplate: _contractspec_lib_schema300.EntityScalarField;
33
+ conditionExpression: _contractspec_lib_schema300.EntityScalarField;
34
+ waitDuration: _contractspec_lib_schema300.EntityScalarField;
35
+ waitForEvent: _contractspec_lib_schema300.EntityScalarField;
36
+ actionType: _contractspec_lib_schema300.EntityScalarField;
37
+ actionConfig: _contractspec_lib_schema300.EntityScalarField;
38
+ timeoutSeconds: _contractspec_lib_schema300.EntityScalarField;
39
+ slaSeconds: _contractspec_lib_schema300.EntityScalarField;
40
+ notifyOnEnter: _contractspec_lib_schema300.EntityScalarField;
41
+ notifyOnExit: _contractspec_lib_schema300.EntityScalarField;
42
+ metadata: _contractspec_lib_schema300.EntityScalarField;
43
+ createdAt: _contractspec_lib_schema300.EntityScalarField;
44
+ updatedAt: _contractspec_lib_schema300.EntityScalarField;
45
+ workflowDefinition: _contractspec_lib_schema300.EntityRelationField;
46
+ executions: _contractspec_lib_schema300.EntityRelationField;
47
+ }>;
48
+ //#endregion
49
+ export { ApprovalModeEnum, StepTypeEnum, WorkflowStepEntity };
50
+ //# sourceMappingURL=step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step.d.ts","names":[],"sources":["../../src/entities/step.ts"],"sourcesContent":[],"mappings":";;;;;;AAUa,cAAA,YAcX,EAAA,2BAAA,CAduB,aAcvB;AAKF;AAkBA;;cAlBa,kBAUX,2BAAA,CAV2B;;;;;;;cAkBhB,gDAAkB;MAwH7B,2BAAA,CAAA;;;;;;;;;;;;;;;;;;;+DAxH6B;EAAA,UAAA,+CAAA"}
@@ -0,0 +1,135 @@
1
+ import { defineEntity, defineEntityEnum, field, index } from "@contractspec/lib.schema";
2
+
3
+ //#region src/entities/step.ts
4
+ /**
5
+ * Step type enum - what kind of step this is.
6
+ */
7
+ const StepTypeEnum = defineEntityEnum({
8
+ name: "StepType",
9
+ values: [
10
+ "START",
11
+ "APPROVAL",
12
+ "TASK",
13
+ "CONDITION",
14
+ "PARALLEL",
15
+ "WAIT",
16
+ "ACTION",
17
+ "END"
18
+ ],
19
+ schema: "workflow",
20
+ description: "Type of workflow step."
21
+ });
22
+ /**
23
+ * Approval mode enum - how approvals are handled.
24
+ */
25
+ const ApprovalModeEnum = defineEntityEnum({
26
+ name: "ApprovalMode",
27
+ values: [
28
+ "ANY",
29
+ "ALL",
30
+ "MAJORITY",
31
+ "SEQUENTIAL"
32
+ ],
33
+ schema: "workflow",
34
+ description: "How multiple approvers are handled."
35
+ });
36
+ /**
37
+ * WorkflowStep entity - defines a step in a workflow.
38
+ *
39
+ * Each step represents a state in the workflow state machine,
40
+ * with transitions defined by the `transitions` JSON field.
41
+ */
42
+ const WorkflowStepEntity = defineEntity({
43
+ name: "WorkflowStep",
44
+ description: "A single step/state in a workflow definition.",
45
+ schema: "workflow",
46
+ map: "workflow_step",
47
+ fields: {
48
+ id: field.id({ description: "Unique step ID" }),
49
+ workflowDefinitionId: field.foreignKey(),
50
+ name: field.string({ description: "Human-readable step name" }),
51
+ key: field.string({ description: "Unique key within workflow (e.g., \"manager_approval\")" }),
52
+ description: field.string({ isOptional: true }),
53
+ type: field.enum("StepType", { default: "TASK" }),
54
+ position: field.int({
55
+ default: 0,
56
+ description: "Order for display"
57
+ }),
58
+ transitions: field.json({ description: "Map of action -> next step key" }),
59
+ approvalMode: field.enum("ApprovalMode", {
60
+ default: "ANY",
61
+ isOptional: true
62
+ }),
63
+ approverRoles: field.string({
64
+ isArray: true,
65
+ description: "Roles that can approve"
66
+ }),
67
+ approverUserIds: field.string({
68
+ isArray: true,
69
+ description: "Specific users that can approve"
70
+ }),
71
+ escalationConfig: field.json({
72
+ isOptional: true,
73
+ description: "Escalation rules"
74
+ }),
75
+ assigneeRoles: field.string({
76
+ isArray: true,
77
+ description: "Roles that can be assigned"
78
+ }),
79
+ taskTemplate: field.json({
80
+ isOptional: true,
81
+ description: "Template for task creation"
82
+ }),
83
+ conditionExpression: field.string({
84
+ isOptional: true,
85
+ description: "Expression for branching"
86
+ }),
87
+ waitDuration: field.int({
88
+ isOptional: true,
89
+ description: "Wait duration in seconds"
90
+ }),
91
+ waitForEvent: field.string({
92
+ isOptional: true,
93
+ description: "Event name to wait for"
94
+ }),
95
+ actionType: field.string({
96
+ isOptional: true,
97
+ description: "Action to execute"
98
+ }),
99
+ actionConfig: field.json({
100
+ isOptional: true,
101
+ description: "Action parameters"
102
+ }),
103
+ timeoutSeconds: field.int({
104
+ isOptional: true,
105
+ description: "Step timeout"
106
+ }),
107
+ slaSeconds: field.int({
108
+ isOptional: true,
109
+ description: "SLA deadline"
110
+ }),
111
+ notifyOnEnter: field.json({
112
+ isOptional: true,
113
+ description: "Notification config when entering step"
114
+ }),
115
+ notifyOnExit: field.json({
116
+ isOptional: true,
117
+ description: "Notification config when exiting step"
118
+ }),
119
+ metadata: field.json({ isOptional: true }),
120
+ createdAt: field.createdAt(),
121
+ updatedAt: field.updatedAt(),
122
+ workflowDefinition: field.belongsTo("WorkflowDefinition", ["workflowDefinitionId"], ["id"], { onDelete: "Cascade" }),
123
+ executions: field.hasMany("StepExecution")
124
+ },
125
+ indexes: [
126
+ index.unique(["workflowDefinitionId", "key"]),
127
+ index.on(["workflowDefinitionId", "position"]),
128
+ index.on(["type"])
129
+ ],
130
+ enums: [StepTypeEnum, ApprovalModeEnum]
131
+ });
132
+
133
+ //#endregion
134
+ export { ApprovalModeEnum, StepTypeEnum, WorkflowStepEntity };
135
+ //# sourceMappingURL=step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step.js","names":[],"sources":["../../src/entities/step.ts"],"sourcesContent":["import {\n defineEntity,\n defineEntityEnum,\n field,\n index,\n} from '@contractspec/lib.schema';\n\n/**\n * Step type enum - what kind of step this is.\n */\nexport const StepTypeEnum = defineEntityEnum({\n name: 'StepType',\n values: [\n 'START', // Entry point\n 'APPROVAL', // Requires human approval\n 'TASK', // Task to be completed\n 'CONDITION', // Branching based on conditions\n 'PARALLEL', // Parallel execution\n 'WAIT', // Wait for event/time\n 'ACTION', // Automated action\n 'END', // Terminal state\n ] as const,\n schema: 'workflow',\n description: 'Type of workflow step.',\n});\n\n/**\n * Approval mode enum - how approvals are handled.\n */\nexport const ApprovalModeEnum = defineEntityEnum({\n name: 'ApprovalMode',\n values: [\n 'ANY', // Any one approver can approve\n 'ALL', // All approvers must approve\n 'MAJORITY', // Majority must approve\n 'SEQUENTIAL', // Approvers must approve in order\n ] as const,\n schema: 'workflow',\n description: 'How multiple approvers are handled.',\n});\n\n/**\n * WorkflowStep entity - defines a step in a workflow.\n *\n * Each step represents a state in the workflow state machine,\n * with transitions defined by the `transitions` JSON field.\n */\nexport const WorkflowStepEntity = defineEntity({\n name: 'WorkflowStep',\n description: 'A single step/state in a workflow definition.',\n schema: 'workflow',\n map: 'workflow_step',\n fields: {\n id: field.id({ description: 'Unique step ID' }),\n\n // Parent workflow\n workflowDefinitionId: field.foreignKey(),\n\n // Identity\n name: field.string({ description: 'Human-readable step name' }),\n key: field.string({\n description: 'Unique key within workflow (e.g., \"manager_approval\")',\n }),\n description: field.string({ isOptional: true }),\n\n // Type\n type: field.enum('StepType', { default: 'TASK' }),\n\n // Position in UI\n position: field.int({ default: 0, description: 'Order for display' }),\n\n // State machine transitions (JSON: { \"approve\": \"next_step\", \"reject\": \"rejected\" })\n transitions: field.json({ description: 'Map of action -> next step key' }),\n\n // Approval configuration (when type is APPROVAL)\n approvalMode: field.enum('ApprovalMode', {\n default: 'ANY',\n isOptional: true,\n }),\n approverRoles: field.string({\n isArray: true,\n description: 'Roles that can approve',\n }),\n approverUserIds: field.string({\n isArray: true,\n description: 'Specific users that can approve',\n }),\n escalationConfig: field.json({\n isOptional: true,\n description: 'Escalation rules',\n }),\n\n // Task configuration (when type is TASK)\n assigneeRoles: field.string({\n isArray: true,\n description: 'Roles that can be assigned',\n }),\n taskTemplate: field.json({\n isOptional: true,\n description: 'Template for task creation',\n }),\n\n // Condition configuration (when type is CONDITION)\n conditionExpression: field.string({\n isOptional: true,\n description: 'Expression for branching',\n }),\n\n // Wait configuration (when type is WAIT)\n waitDuration: field.int({\n isOptional: true,\n description: 'Wait duration in seconds',\n }),\n waitForEvent: field.string({\n isOptional: true,\n description: 'Event name to wait for',\n }),\n\n // Action configuration (when type is ACTION)\n actionType: field.string({\n isOptional: true,\n description: 'Action to execute',\n }),\n actionConfig: field.json({\n isOptional: true,\n description: 'Action parameters',\n }),\n\n // Timeout & SLA\n timeoutSeconds: field.int({\n isOptional: true,\n description: 'Step timeout',\n }),\n slaSeconds: field.int({ isOptional: true, description: 'SLA deadline' }),\n\n // Notifications\n notifyOnEnter: field.json({\n isOptional: true,\n description: 'Notification config when entering step',\n }),\n notifyOnExit: field.json({\n isOptional: true,\n description: 'Notification config when exiting step',\n }),\n\n // Metadata\n metadata: field.json({ isOptional: true }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n\n // Relations\n workflowDefinition: field.belongsTo(\n 'WorkflowDefinition',\n ['workflowDefinitionId'],\n ['id'],\n { onDelete: 'Cascade' }\n ),\n executions: field.hasMany('StepExecution'),\n },\n indexes: [\n index.unique(['workflowDefinitionId', 'key']),\n index.on(['workflowDefinitionId', 'position']),\n index.on(['type']),\n ],\n enums: [StepTypeEnum, ApprovalModeEnum],\n});\n"],"mappings":";;;;;;AAUA,MAAa,eAAe,iBAAiB;CAC3C,MAAM;CACN,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,QAAQ;CACR,aAAa;CACd,CAAC;;;;AAKF,MAAa,mBAAmB,iBAAiB;CAC/C,MAAM;CACN,QAAQ;EACN;EACA;EACA;EACA;EACD;CACD,QAAQ;CACR,aAAa;CACd,CAAC;;;;;;;AAQF,MAAa,qBAAqB,aAAa;CAC7C,MAAM;CACN,aAAa;CACb,QAAQ;CACR,KAAK;CACL,QAAQ;EACN,IAAI,MAAM,GAAG,EAAE,aAAa,kBAAkB,CAAC;EAG/C,sBAAsB,MAAM,YAAY;EAGxC,MAAM,MAAM,OAAO,EAAE,aAAa,4BAA4B,CAAC;EAC/D,KAAK,MAAM,OAAO,EAChB,aAAa,2DACd,CAAC;EACF,aAAa,MAAM,OAAO,EAAE,YAAY,MAAM,CAAC;EAG/C,MAAM,MAAM,KAAK,YAAY,EAAE,SAAS,QAAQ,CAAC;EAGjD,UAAU,MAAM,IAAI;GAAE,SAAS;GAAG,aAAa;GAAqB,CAAC;EAGrE,aAAa,MAAM,KAAK,EAAE,aAAa,kCAAkC,CAAC;EAG1E,cAAc,MAAM,KAAK,gBAAgB;GACvC,SAAS;GACT,YAAY;GACb,CAAC;EACF,eAAe,MAAM,OAAO;GAC1B,SAAS;GACT,aAAa;GACd,CAAC;EACF,iBAAiB,MAAM,OAAO;GAC5B,SAAS;GACT,aAAa;GACd,CAAC;EACF,kBAAkB,MAAM,KAAK;GAC3B,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,eAAe,MAAM,OAAO;GAC1B,SAAS;GACT,aAAa;GACd,CAAC;EACF,cAAc,MAAM,KAAK;GACvB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,qBAAqB,MAAM,OAAO;GAChC,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,cAAc,MAAM,IAAI;GACtB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,cAAc,MAAM,OAAO;GACzB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,YAAY,MAAM,OAAO;GACvB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,cAAc,MAAM,KAAK;GACvB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,gBAAgB,MAAM,IAAI;GACxB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,YAAY,MAAM,IAAI;GAAE,YAAY;GAAM,aAAa;GAAgB,CAAC;EAGxE,eAAe,MAAM,KAAK;GACxB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,cAAc,MAAM,KAAK;GACvB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,UAAU,MAAM,KAAK,EAAE,YAAY,MAAM,CAAC;EAG1C,WAAW,MAAM,WAAW;EAC5B,WAAW,MAAM,WAAW;EAG5B,oBAAoB,MAAM,UACxB,sBACA,CAAC,uBAAuB,EACxB,CAAC,KAAK,EACN,EAAE,UAAU,WAAW,CACxB;EACD,YAAY,MAAM,QAAQ,gBAAgB;EAC3C;CACD,SAAS;EACP,MAAM,OAAO,CAAC,wBAAwB,MAAM,CAAC;EAC7C,MAAM,GAAG,CAAC,wBAAwB,WAAW,CAAC;EAC9C,MAAM,GAAG,CAAC,OAAO,CAAC;EACnB;CACD,OAAO,CAAC,cAAc,iBAAiB;CACxC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import * as _contractspec_lib_schema463 from "@contractspec/lib.schema";
2
+
3
+ //#region src/entities/workflow.d.ts
4
+ /**
5
+ * Workflow status enum - the lifecycle state of a workflow definition.
6
+ */
7
+ declare const WorkflowStatusEnum: _contractspec_lib_schema463.EntityEnumDef;
8
+ /**
9
+ * Workflow trigger type enum - what initiates a workflow.
10
+ */
11
+ declare const WorkflowTriggerTypeEnum: _contractspec_lib_schema463.EntityEnumDef;
12
+ /**
13
+ * WorkflowDefinition entity - defines a workflow blueprint.
14
+ *
15
+ * A workflow definition specifies the structure, steps, and rules
16
+ * for a business process. Instances are created from definitions.
17
+ */
18
+ declare const WorkflowDefinitionEntity: _contractspec_lib_schema463.EntitySpec<{
19
+ id: _contractspec_lib_schema463.EntityScalarField;
20
+ name: _contractspec_lib_schema463.EntityScalarField;
21
+ key: _contractspec_lib_schema463.EntityScalarField;
22
+ description: _contractspec_lib_schema463.EntityScalarField;
23
+ version: _contractspec_lib_schema463.EntityScalarField;
24
+ status: _contractspec_lib_schema463.EntityEnumField;
25
+ triggerType: _contractspec_lib_schema463.EntityEnumField;
26
+ triggerConfig: _contractspec_lib_schema463.EntityScalarField;
27
+ initialStepId: _contractspec_lib_schema463.EntityScalarField;
28
+ featureFlagKey: _contractspec_lib_schema463.EntityScalarField;
29
+ settings: _contractspec_lib_schema463.EntityScalarField;
30
+ metadata: _contractspec_lib_schema463.EntityScalarField;
31
+ organizationId: _contractspec_lib_schema463.EntityScalarField;
32
+ createdBy: _contractspec_lib_schema463.EntityScalarField;
33
+ createdAt: _contractspec_lib_schema463.EntityScalarField;
34
+ updatedAt: _contractspec_lib_schema463.EntityScalarField;
35
+ publishedAt: _contractspec_lib_schema463.EntityScalarField;
36
+ steps: _contractspec_lib_schema463.EntityRelationField;
37
+ instances: _contractspec_lib_schema463.EntityRelationField;
38
+ }>;
39
+ //#endregion
40
+ export { WorkflowDefinitionEntity, WorkflowStatusEnum, WorkflowTriggerTypeEnum };
41
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","names":[],"sources":["../../src/entities/workflow.ts"],"sourcesContent":[],"mappings":";;;;;;AAUa,cAAA,kBAKX,EAAA,2BAAA,CAL6B,aAK7B;AAKF;AAaA;;cAba,yBAKX,2BAAA,CALkC;;;;;;;cAavB,sDAAwB;MA2EnC,2BAAA,CAAA;;;;;;;;;;yDA3EmC;EAAA,QAAA,+CAAA"}
@@ -0,0 +1,102 @@
1
+ import { defineEntity, defineEntityEnum, field, index } from "@contractspec/lib.schema";
2
+
3
+ //#region src/entities/workflow.ts
4
+ /**
5
+ * Workflow status enum - the lifecycle state of a workflow definition.
6
+ */
7
+ const WorkflowStatusEnum = defineEntityEnum({
8
+ name: "WorkflowStatus",
9
+ values: [
10
+ "DRAFT",
11
+ "ACTIVE",
12
+ "DEPRECATED",
13
+ "ARCHIVED"
14
+ ],
15
+ schema: "workflow",
16
+ description: "Status of a workflow definition."
17
+ });
18
+ /**
19
+ * Workflow trigger type enum - what initiates a workflow.
20
+ */
21
+ const WorkflowTriggerTypeEnum = defineEntityEnum({
22
+ name: "WorkflowTriggerType",
23
+ values: [
24
+ "MANUAL",
25
+ "EVENT",
26
+ "SCHEDULED",
27
+ "API"
28
+ ],
29
+ schema: "workflow",
30
+ description: "What triggers workflow instantiation."
31
+ });
32
+ /**
33
+ * WorkflowDefinition entity - defines a workflow blueprint.
34
+ *
35
+ * A workflow definition specifies the structure, steps, and rules
36
+ * for a business process. Instances are created from definitions.
37
+ */
38
+ const WorkflowDefinitionEntity = defineEntity({
39
+ name: "WorkflowDefinition",
40
+ description: "A workflow blueprint that defines the process structure.",
41
+ schema: "workflow",
42
+ map: "workflow_definition",
43
+ fields: {
44
+ id: field.id({ description: "Unique workflow definition ID" }),
45
+ name: field.string({ description: "Human-readable workflow name" }),
46
+ key: field.string({ description: "Unique key for referencing (e.g., \"purchase_approval\")" }),
47
+ description: field.string({
48
+ isOptional: true,
49
+ description: "Detailed description"
50
+ }),
51
+ version: field.int({
52
+ default: 1,
53
+ description: "Version number for versioning definitions"
54
+ }),
55
+ status: field.enum("WorkflowStatus", { default: "DRAFT" }),
56
+ triggerType: field.enum("WorkflowTriggerType", { default: "MANUAL" }),
57
+ triggerConfig: field.json({
58
+ isOptional: true,
59
+ description: "Trigger-specific configuration"
60
+ }),
61
+ initialStepId: field.string({
62
+ isOptional: true,
63
+ description: "First step when workflow starts"
64
+ }),
65
+ featureFlagKey: field.string({
66
+ isOptional: true,
67
+ description: "Feature flag to control availability"
68
+ }),
69
+ settings: field.json({
70
+ isOptional: true,
71
+ description: "Workflow-wide settings"
72
+ }),
73
+ metadata: field.json({
74
+ isOptional: true,
75
+ description: "Custom metadata"
76
+ }),
77
+ organizationId: field.foreignKey({ description: "Owning organization" }),
78
+ createdBy: field.foreignKey({ description: "User who created this workflow" }),
79
+ createdAt: field.createdAt(),
80
+ updatedAt: field.updatedAt(),
81
+ publishedAt: field.dateTime({
82
+ isOptional: true,
83
+ description: "When workflow was activated"
84
+ }),
85
+ steps: field.hasMany("WorkflowStep"),
86
+ instances: field.hasMany("WorkflowInstance")
87
+ },
88
+ indexes: [
89
+ index.unique([
90
+ "organizationId",
91
+ "key",
92
+ "version"
93
+ ]),
94
+ index.on(["organizationId", "status"]),
95
+ index.on(["key", "version"])
96
+ ],
97
+ enums: [WorkflowStatusEnum, WorkflowTriggerTypeEnum]
98
+ });
99
+
100
+ //#endregion
101
+ export { WorkflowDefinitionEntity, WorkflowStatusEnum, WorkflowTriggerTypeEnum };
102
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","names":[],"sources":["../../src/entities/workflow.ts"],"sourcesContent":["import {\n defineEntity,\n defineEntityEnum,\n field,\n index,\n} from '@contractspec/lib.schema';\n\n/**\n * Workflow status enum - the lifecycle state of a workflow definition.\n */\nexport const WorkflowStatusEnum = defineEntityEnum({\n name: 'WorkflowStatus',\n values: ['DRAFT', 'ACTIVE', 'DEPRECATED', 'ARCHIVED'] as const,\n schema: 'workflow',\n description: 'Status of a workflow definition.',\n});\n\n/**\n * Workflow trigger type enum - what initiates a workflow.\n */\nexport const WorkflowTriggerTypeEnum = defineEntityEnum({\n name: 'WorkflowTriggerType',\n values: ['MANUAL', 'EVENT', 'SCHEDULED', 'API'] as const,\n schema: 'workflow',\n description: 'What triggers workflow instantiation.',\n});\n\n/**\n * WorkflowDefinition entity - defines a workflow blueprint.\n *\n * A workflow definition specifies the structure, steps, and rules\n * for a business process. Instances are created from definitions.\n */\nexport const WorkflowDefinitionEntity = defineEntity({\n name: 'WorkflowDefinition',\n description: 'A workflow blueprint that defines the process structure.',\n schema: 'workflow',\n map: 'workflow_definition',\n fields: {\n id: field.id({ description: 'Unique workflow definition ID' }),\n\n // Identity\n name: field.string({ description: 'Human-readable workflow name' }),\n key: field.string({\n description: 'Unique key for referencing (e.g., \"purchase_approval\")',\n }),\n description: field.string({\n isOptional: true,\n description: 'Detailed description',\n }),\n version: field.int({\n default: 1,\n description: 'Version number for versioning definitions',\n }),\n\n // Status\n status: field.enum('WorkflowStatus', { default: 'DRAFT' }),\n\n // Trigger\n triggerType: field.enum('WorkflowTriggerType', { default: 'MANUAL' }),\n triggerConfig: field.json({\n isOptional: true,\n description: 'Trigger-specific configuration',\n }),\n\n // Initial step\n initialStepId: field.string({\n isOptional: true,\n description: 'First step when workflow starts',\n }),\n\n // Feature flag integration\n featureFlagKey: field.string({\n isOptional: true,\n description: 'Feature flag to control availability',\n }),\n\n // Configuration\n settings: field.json({\n isOptional: true,\n description: 'Workflow-wide settings',\n }),\n metadata: field.json({ isOptional: true, description: 'Custom metadata' }),\n\n // Ownership\n organizationId: field.foreignKey({ description: 'Owning organization' }),\n createdBy: field.foreignKey({\n description: 'User who created this workflow',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n publishedAt: field.dateTime({\n isOptional: true,\n description: 'When workflow was activated',\n }),\n\n // Relations\n steps: field.hasMany('WorkflowStep'),\n instances: field.hasMany('WorkflowInstance'),\n },\n indexes: [\n index.unique(['organizationId', 'key', 'version']),\n index.on(['organizationId', 'status']),\n index.on(['key', 'version']),\n ],\n enums: [WorkflowStatusEnum, WorkflowTriggerTypeEnum],\n});\n"],"mappings":";;;;;;AAUA,MAAa,qBAAqB,iBAAiB;CACjD,MAAM;CACN,QAAQ;EAAC;EAAS;EAAU;EAAc;EAAW;CACrD,QAAQ;CACR,aAAa;CACd,CAAC;;;;AAKF,MAAa,0BAA0B,iBAAiB;CACtD,MAAM;CACN,QAAQ;EAAC;EAAU;EAAS;EAAa;EAAM;CAC/C,QAAQ;CACR,aAAa;CACd,CAAC;;;;;;;AAQF,MAAa,2BAA2B,aAAa;CACnD,MAAM;CACN,aAAa;CACb,QAAQ;CACR,KAAK;CACL,QAAQ;EACN,IAAI,MAAM,GAAG,EAAE,aAAa,iCAAiC,CAAC;EAG9D,MAAM,MAAM,OAAO,EAAE,aAAa,gCAAgC,CAAC;EACnE,KAAK,MAAM,OAAO,EAChB,aAAa,4DACd,CAAC;EACF,aAAa,MAAM,OAAO;GACxB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,SAAS,MAAM,IAAI;GACjB,SAAS;GACT,aAAa;GACd,CAAC;EAGF,QAAQ,MAAM,KAAK,kBAAkB,EAAE,SAAS,SAAS,CAAC;EAG1D,aAAa,MAAM,KAAK,uBAAuB,EAAE,SAAS,UAAU,CAAC;EACrE,eAAe,MAAM,KAAK;GACxB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,eAAe,MAAM,OAAO;GAC1B,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,gBAAgB,MAAM,OAAO;GAC3B,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,UAAU,MAAM,KAAK;GACnB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,UAAU,MAAM,KAAK;GAAE,YAAY;GAAM,aAAa;GAAmB,CAAC;EAG1E,gBAAgB,MAAM,WAAW,EAAE,aAAa,uBAAuB,CAAC;EACxE,WAAW,MAAM,WAAW,EAC1B,aAAa,kCACd,CAAC;EAGF,WAAW,MAAM,WAAW;EAC5B,WAAW,MAAM,WAAW;EAC5B,aAAa,MAAM,SAAS;GAC1B,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,OAAO,MAAM,QAAQ,eAAe;EACpC,WAAW,MAAM,QAAQ,mBAAmB;EAC7C;CACD,SAAS;EACP,MAAM,OAAO;GAAC;GAAkB;GAAO;GAAU,CAAC;EAClD,MAAM,GAAG,CAAC,kBAAkB,SAAS,CAAC;EACtC,MAAM,GAAG,CAAC,OAAO,UAAU,CAAC;EAC7B;CACD,OAAO,CAAC,oBAAoB,wBAAwB;CACrD,CAAC"}
@@ -0,0 +1,40 @@
1
+ //#region src/example.d.ts
2
+ declare const example: {
3
+ readonly id: "workflow-system";
4
+ readonly title: "Workflow / Approval System";
5
+ readonly summary: "State-machine driven approvals with RBAC, audit trail, notifications, and jobs.";
6
+ readonly tags: readonly ["workflow", "approval", "state-machine", "rbac"];
7
+ readonly kind: "template";
8
+ readonly visibility: "public";
9
+ readonly docs: {
10
+ readonly rootDocId: "docs.examples.workflow-system";
11
+ readonly goalDocId: "docs.examples.workflow-system.goal";
12
+ readonly usageDocId: "docs.examples.workflow-system.usage";
13
+ readonly constraintsDocId: "docs.examples.workflow-system.constraints";
14
+ };
15
+ readonly entrypoints: {
16
+ readonly packageName: "@contractspec/example.workflow-system";
17
+ readonly feature: "./feature";
18
+ readonly contracts: "./contracts";
19
+ readonly presentations: "./presentations";
20
+ readonly handlers: "./handlers";
21
+ readonly docs: "./docs";
22
+ };
23
+ readonly surfaces: {
24
+ readonly templates: true;
25
+ readonly sandbox: {
26
+ readonly enabled: true;
27
+ readonly modes: readonly ["playground", "specs", "builder", "markdown", "evolution"];
28
+ };
29
+ readonly studio: {
30
+ readonly enabled: true;
31
+ readonly installable: true;
32
+ };
33
+ readonly mcp: {
34
+ readonly enabled: true;
35
+ };
36
+ };
37
+ };
38
+ //#endregion
39
+ export { example as default };
40
+ //# sourceMappingURL=example.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.d.ts","names":[],"sources":["../src/example.ts"],"sourcesContent":[],"mappings":";cAAM;EAAA,SAAA,EA+BI,EAAA,iBAAA"}
@@ -0,0 +1,51 @@
1
+ //#region src/example.ts
2
+ const example = {
3
+ id: "workflow-system",
4
+ title: "Workflow / Approval System",
5
+ summary: "State-machine driven approvals with RBAC, audit trail, notifications, and jobs.",
6
+ tags: [
7
+ "workflow",
8
+ "approval",
9
+ "state-machine",
10
+ "rbac"
11
+ ],
12
+ kind: "template",
13
+ visibility: "public",
14
+ docs: {
15
+ rootDocId: "docs.examples.workflow-system",
16
+ goalDocId: "docs.examples.workflow-system.goal",
17
+ usageDocId: "docs.examples.workflow-system.usage",
18
+ constraintsDocId: "docs.examples.workflow-system.constraints"
19
+ },
20
+ entrypoints: {
21
+ packageName: "@contractspec/example.workflow-system",
22
+ feature: "./feature",
23
+ contracts: "./contracts",
24
+ presentations: "./presentations",
25
+ handlers: "./handlers",
26
+ docs: "./docs"
27
+ },
28
+ surfaces: {
29
+ templates: true,
30
+ sandbox: {
31
+ enabled: true,
32
+ modes: [
33
+ "playground",
34
+ "specs",
35
+ "builder",
36
+ "markdown",
37
+ "evolution"
38
+ ]
39
+ },
40
+ studio: {
41
+ enabled: true,
42
+ installable: true
43
+ },
44
+ mcp: { enabled: true }
45
+ }
46
+ };
47
+ var example_default = example;
48
+
49
+ //#endregion
50
+ export { example_default as default };
51
+ //# sourceMappingURL=example.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.js","names":[],"sources":["../src/example.ts"],"sourcesContent":["const example = {\n id: 'workflow-system',\n title: 'Workflow / Approval System',\n summary:\n 'State-machine driven approvals with RBAC, audit trail, notifications, and jobs.',\n tags: ['workflow', 'approval', 'state-machine', 'rbac'],\n kind: 'template',\n visibility: 'public',\n docs: {\n rootDocId: 'docs.examples.workflow-system',\n goalDocId: 'docs.examples.workflow-system.goal',\n usageDocId: 'docs.examples.workflow-system.usage',\n constraintsDocId: 'docs.examples.workflow-system.constraints',\n },\n entrypoints: {\n packageName: '@contractspec/example.workflow-system',\n feature: './feature',\n contracts: './contracts',\n presentations: './presentations',\n handlers: './handlers',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: {\n enabled: true,\n modes: ['playground', 'specs', 'builder', 'markdown', 'evolution'],\n },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n} as const;\n\nexport default example;\n"],"mappings":";AAAA,MAAM,UAAU;CACd,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;EAAC;EAAY;EAAY;EAAiB;EAAO;CACvD,MAAM;CACN,YAAY;CACZ,MAAM;EACJ,WAAW;EACX,WAAW;EACX,YAAY;EACZ,kBAAkB;EACnB;CACD,aAAa;EACX,aAAa;EACb,SAAS;EACT,WAAW;EACX,eAAe;EACf,UAAU;EACV,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GACP,SAAS;GACT,OAAO;IAAC;IAAc;IAAS;IAAW;IAAY;IAAY;GACnE;EACD,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF;AAED,sBAAe"}