openxiangda-contracts 2.78.0 → 2.79.1

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 (128) hide show
  1. package/dist/ai.d.ts +31 -0
  2. package/dist/ai.d.ts.map +1 -1
  3. package/dist/ai.js +14 -0
  4. package/dist/ai.js.map +1 -1
  5. package/dist/browser.d.ts +11 -0
  6. package/dist/browser.d.ts.map +1 -1
  7. package/dist/browser.js +10 -0
  8. package/dist/browser.js.map +1 -1
  9. package/dist/cli.d.ts +5 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/data-field-validation.js +26 -23
  12. package/dist/data-field-validation.js.map +1 -1
  13. package/dist/index.d.ts +12 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +12 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/native-compiler/address-value.d.ts +13 -0
  18. package/dist/native-compiler/address-value.d.ts.map +1 -0
  19. package/dist/native-compiler/address-value.js +70 -0
  20. package/dist/native-compiler/address-value.js.map +1 -0
  21. package/dist/native-compiler/cascade-value.d.ts +6 -0
  22. package/dist/native-compiler/cascade-value.d.ts.map +1 -0
  23. package/dist/native-compiler/cascade-value.js +47 -0
  24. package/dist/native-compiler/cascade-value.js.map +1 -0
  25. package/dist/native-compiler/compiler.d.ts +1 -1
  26. package/dist/native-compiler/compiler.d.ts.map +1 -1
  27. package/dist/native-compiler/compiler.js +78 -52
  28. package/dist/native-compiler/compiler.js.map +1 -1
  29. package/dist/native-compiler/data-field.d.ts +3 -0
  30. package/dist/native-compiler/data-field.d.ts.map +1 -1
  31. package/dist/native-compiler/data-field.js +10 -2
  32. package/dist/native-compiler/data-field.js.map +1 -1
  33. package/dist/native-compiler/index.cjs +4 -4
  34. package/dist/native-compiler/index.d.ts +11 -0
  35. package/dist/native-compiler/index.d.ts.map +1 -1
  36. package/dist/native-compiler/index.js +4 -4
  37. package/dist/native-compiler/resource-query.d.ts +21 -0
  38. package/dist/native-compiler/resource-query.d.ts.map +1 -0
  39. package/dist/native-compiler/resource-query.js +154 -0
  40. package/dist/native-compiler/resource-query.js.map +1 -0
  41. package/dist/native-compiler/workflow-approval-empty.d.ts +1 -1
  42. package/dist/native-compiler/workflow-approval-empty.d.ts.map +1 -1
  43. package/dist/native-compiler/workflow-approval-empty.js +1 -1
  44. package/dist/native-compiler/workflow-approval-empty.js.map +1 -1
  45. package/dist/native-compiler/workflow-business-step.d.ts +8 -2
  46. package/dist/native-compiler/workflow-business-step.d.ts.map +1 -1
  47. package/dist/native-compiler/workflow-business-step.js +10 -5
  48. package/dist/native-compiler/workflow-business-step.js.map +1 -1
  49. package/dist/native-compiler/workflow-completion-deadline.d.ts +1 -0
  50. package/dist/native-compiler/workflow-completion-deadline.d.ts.map +1 -1
  51. package/dist/native-compiler/workflow-completion-deadline.js +1 -1
  52. package/dist/native-compiler/workflow-completion-deadline.js.map +1 -1
  53. package/dist/native-compiler/workflow-correction.d.ts +1 -0
  54. package/dist/native-compiler/workflow-correction.d.ts.map +1 -1
  55. package/dist/native-compiler/workflow-correction.js +5 -4
  56. package/dist/native-compiler/workflow-correction.js.map +1 -1
  57. package/dist/native-compiler/workflow-designer.d.ts +127 -0
  58. package/dist/native-compiler/workflow-designer.d.ts.map +1 -0
  59. package/dist/native-compiler/workflow-designer.js +397 -0
  60. package/dist/native-compiler/workflow-designer.js.map +1 -0
  61. package/dist/native-compiler/workflow-events.d.ts +8 -0
  62. package/dist/native-compiler/workflow-events.d.ts.map +1 -0
  63. package/dist/native-compiler/workflow-events.js +53 -0
  64. package/dist/native-compiler/workflow-events.js.map +1 -0
  65. package/dist/native-compiler/workflow-graph.d.ts +16 -1
  66. package/dist/native-compiler/workflow-graph.d.ts.map +1 -1
  67. package/dist/native-compiler/workflow-graph.js +27 -5
  68. package/dist/native-compiler/workflow-graph.js.map +1 -1
  69. package/dist/native-compiler/workflow-handle.d.ts +4 -0
  70. package/dist/native-compiler/workflow-handle.d.ts.map +1 -0
  71. package/dist/native-compiler/workflow-handle.js +20 -0
  72. package/dist/native-compiler/workflow-handle.js.map +1 -0
  73. package/dist/native-compiler/workflow-initiator-approval.d.ts +1 -0
  74. package/dist/native-compiler/workflow-initiator-approval.d.ts.map +1 -1
  75. package/dist/native-compiler/workflow-initiator-approval.js +1 -1
  76. package/dist/native-compiler/workflow-initiator-approval.js.map +1 -1
  77. package/dist/native-compiler/workflow-node-administration.d.ts +12 -1
  78. package/dist/native-compiler/workflow-node-administration.d.ts.map +1 -1
  79. package/dist/native-compiler/workflow-node-administration.js +66 -14
  80. package/dist/native-compiler/workflow-node-administration.js.map +1 -1
  81. package/dist/native-compiler/workflow-parallel.d.ts +69 -0
  82. package/dist/native-compiler/workflow-parallel.d.ts.map +1 -0
  83. package/dist/native-compiler/workflow-parallel.js +178 -0
  84. package/dist/native-compiler/workflow-parallel.js.map +1 -0
  85. package/dist/native-compiler/workflow-platform-notify.d.ts +41 -0
  86. package/dist/native-compiler/workflow-platform-notify.d.ts.map +1 -0
  87. package/dist/native-compiler/workflow-platform-notify.js +49 -0
  88. package/dist/native-compiler/workflow-platform-notify.js.map +1 -0
  89. package/dist/native-compiler/workflow-reminders.d.ts +11 -0
  90. package/dist/native-compiler/workflow-reminders.d.ts.map +1 -0
  91. package/dist/native-compiler/workflow-reminders.js +12 -0
  92. package/dist/native-compiler/workflow-reminders.js.map +1 -0
  93. package/dist/native-compiler/workflow-return-policy.d.ts +20 -0
  94. package/dist/native-compiler/workflow-return-policy.d.ts.map +1 -0
  95. package/dist/native-compiler/workflow-return-policy.js +37 -0
  96. package/dist/native-compiler/workflow-return-policy.js.map +1 -0
  97. package/dist/native-compiler/workflow-role-union.d.ts +5 -1
  98. package/dist/native-compiler/workflow-role-union.d.ts.map +1 -1
  99. package/dist/native-compiler/workflow-role-union.js +1 -1
  100. package/dist/native-compiler/workflow-role-union.js.map +1 -1
  101. package/dist/native-compiler/workflow-source-sync.d.ts +109 -0
  102. package/dist/native-compiler/workflow-source-sync.d.ts.map +1 -0
  103. package/dist/native-compiler/workflow-source-sync.js +120 -0
  104. package/dist/native-compiler/workflow-source-sync.js.map +1 -0
  105. package/dist/native-compiler/workflow-supervisor-chain.d.ts +16 -0
  106. package/dist/native-compiler/workflow-supervisor-chain.d.ts.map +1 -0
  107. package/dist/native-compiler/workflow-supervisor-chain.js +44 -0
  108. package/dist/native-compiler/workflow-supervisor-chain.js.map +1 -0
  109. package/dist/native-compiler/workflow-task-page.js +1 -1
  110. package/dist/native-compiler/workflow-task-page.js.map +1 -1
  111. package/dist/native-version.d.ts +6 -0
  112. package/dist/native-version.d.ts.map +1 -1
  113. package/dist/native-version.js +6 -0
  114. package/dist/native-version.js.map +1 -1
  115. package/dist/native.d.ts +8 -0
  116. package/dist/native.d.ts.map +1 -1
  117. package/dist/native.js.map +1 -1
  118. package/dist/references.d.ts +4 -0
  119. package/dist/references.d.ts.map +1 -1
  120. package/dist/schemas.d.ts +1266 -10
  121. package/dist/schemas.d.ts.map +1 -1
  122. package/dist/schemas.js +83 -8
  123. package/dist/schemas.js.map +1 -1
  124. package/dist/types.d.ts +46 -12
  125. package/dist/types.d.ts.map +1 -1
  126. package/dist/types.js +1 -40
  127. package/dist/types.js.map +1 -1
  128. package/package.json +1 -1
@@ -0,0 +1,47 @@
1
+ function optionSnapshot(option) {
2
+ return {
3
+ value: option.value,
4
+ label: option.label,
5
+ ...(option.description ? { description: option.description } : {}),
6
+ ...(option.color ? { color: option.color } : {}),
7
+ };
8
+ }
9
+ function resolvePath(options, ids, index = 0) {
10
+ const option = options.find(item => item.value === ids[index]);
11
+ if (!option)
12
+ return undefined;
13
+ if (index === ids.length - 1)
14
+ return [optionSnapshot(option)];
15
+ const child = resolvePath(option.children || [], ids, index + 1);
16
+ return child ? [optionSnapshot(option), ...child] : undefined;
17
+ }
18
+ export function cascadeControlValue(value, multiple) {
19
+ if (multiple) {
20
+ return (Array.isArray(value) ? value : [])
21
+ .filter((path) => Array.isArray(path))
22
+ .map(path => path.map(item => item.value));
23
+ }
24
+ return (Array.isArray(value) ? value : [])
25
+ .filter((item) => !Array.isArray(item))
26
+ .map(item => item.value);
27
+ }
28
+ export function cascadeStoredValue(options, value, multiple) {
29
+ const paths = multiple
30
+ ? (Array.isArray(value) ? value : []).filter(Array.isArray)
31
+ : Array.isArray(value) && value.length ? [value.map(String)] : [];
32
+ const snapshots = paths
33
+ .map(path => resolvePath(options, path.map(String)))
34
+ .filter((path) => Boolean(path));
35
+ return multiple ? snapshots : snapshots[0];
36
+ }
37
+ export function cascadeTerminalValues(value, multiple) {
38
+ const paths = multiple
39
+ ? (Array.isArray(value) ? value : []).filter(Array.isArray)
40
+ : [Array.isArray(value)
41
+ ? value.filter(item => !Array.isArray(item))
42
+ : []];
43
+ return paths
44
+ .map(path => path[path.length - 1]?.value)
45
+ .filter((item) => Boolean(item));
46
+ }
47
+ //# sourceMappingURL=cascade-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade-value.js","sourceRoot":"","sources":["../../src/native-compiler/cascade-value.ts"],"names":[],"mappings":"AAIA,SAAS,cAAc,CAAC,MAAuB;IAC7C,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,OAA0B,EAC1B,GAAa,EACb,KAAK,GAAG,CAAC;IAET,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,IAAI,KAAK,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAqC,EACrC,QAAiB;IAEjB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;aACvC,MAAM,CAAC,CAAC,IAAI,EAA0B,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAC7D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SACvC,MAAM,CAAC,CAAC,IAAI,EAAwB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC5D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAA0B,EAC1B,KAAc,EACd,QAAiB;IAEjB,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAe;QACzE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,MAAM,SAAS,GAAG,KAAK;SACpB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;SACnD,MAAM,CAAC,CAAC,IAAI,EAA0B,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAqC,EACrC,QAAiB;IAEjB,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAqB;QAC/E,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACnB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAmB;gBAC9D,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,KAAK;SACT,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;SACzC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC"}
@@ -4,7 +4,7 @@ declare const COMPILER_CONTRACT_VERSION: "native-4";
4
4
  export { NATIVE_CONTRACT_CAPACITY_V2, requiresExtendedDeclarationCapacity, requiresExtendedRoleCapacity, generatedCrudCapabilityOperations } from './declaration-capacity.js';
5
5
  export { NATIVE_ARTIFACT_CAPACITY_V2, NATIVE_HIGH_DENSITY_ARTIFACT_CAPACITY_V2, requiresHighDensityArtifactCapacity, requiresExtendedArtifactCapacity, requiresExtendedConfigurationBytes } from './artifact-capacity.js';
6
6
  export declare const DATA_EVENT_TYPES_V2: readonly ["openxiangda.data.record.created.v2", "openxiangda.data.record.updated.v2", "openxiangda.data.record.deleted.v2"];
7
- export declare const WORKFLOW_EVENT_TYPES_V2: readonly ["openxiangda.workflow.node.skipped.v2", "openxiangda.workflow.step.requested.v2", "openxiangda.workflow.step.result_received.v2", "openxiangda.workflow.step.completed.v2", "openxiangda.workflow.step.continuation_failed.v2", "openxiangda.workflow.instance.started.v2", "openxiangda.workflow.instance.cc_added.v2", "openxiangda.workflow.instance.completed.v2", "openxiangda.workflow.instance.rejected.v2", "openxiangda.workflow.instance.returned.v2", "openxiangda.workflow.instance.resumed.v2", "openxiangda.workflow.instance.withdrawn.v2", "openxiangda.workflow.instance.terminated.v2", "openxiangda.workflow.task.created.v2", "openxiangda.workflow.task.assigned.v2", "openxiangda.workflow.task.assignment_pending.v2", "openxiangda.workflow.task.assignment_resolution_failed.v2", "openxiangda.workflow.task.approved.v2", "openxiangda.workflow.task.completed.v2", "openxiangda.workflow.task.rejected.v2", "openxiangda.workflow.task.returned.v2", "openxiangda.workflow.task.resubmitted.v2", "openxiangda.workflow.task.transferred.v2", "openxiangda.workflow.task.reassigned.v2", "openxiangda.workflow.task.delegated.v2", "openxiangda.workflow.task.assignee_added.v2", "openxiangda.workflow.task.cancelled.v2", "openxiangda.workflow.participant.activated.v2", "openxiangda.workflow.participant.completed.v2", "openxiangda.workflow.participant.rejected.v2", "openxiangda.workflow.participant.returned.v2", "openxiangda.workflow.participant.transferred.v2", "openxiangda.workflow.participant.reassigned.v2", "openxiangda.workflow.participant.delegated.v2", "openxiangda.workflow.participant.added.v2", "openxiangda.workflow.participant.suspended.v2", "openxiangda.workflow.participant.resumed.v2", "openxiangda.workflow.participant.cancelled.v2"];
7
+ export { WORKFLOW_EVENT_TYPES_V2 } from './workflow-events.js';
8
8
  type JsonObject = Record<string, any>;
9
9
  export interface NativeConfigurationCompilerInput {
10
10
  appCode: string;
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/native-compiler/compiler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/native-compiler/compiler.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,9 @@
1
+ import { validateWorkflowSupervisorChains, validateWorkflowSupervisorChainBinding } from './workflow-supervisor-chain.js';
2
+ import { validateWorkflowReminders } from './workflow-reminders.js';
3
+ import { isWorkflowPlatformNotify } from './workflow-platform-notify.js';
4
+ import { validateWorkflowParallel } from './workflow-parallel.js';
5
+ import { validateWorkflowReturnPolicies, workflowReturnTargets } from './workflow-return-policy.js';
6
+ import { validateWorkflowHandlingNodes } from './workflow-handle.js';
1
7
  import { normalizeDataMutationGrants } from './service-mutations.js';
2
8
  import { hasNativeParentReadPolicy, resolveNativeParentReadBinding, validateNativeParentReadPolicies, NativeParentReadPolicyError } from './parent-read-policy.js';
3
9
  import { requiresExtendedFieldCapacity, WORKFLOW_LAUNCH_MAX_INPUTS } from './data-capacity.js';
@@ -26,7 +32,7 @@ import { validateWorkflowCorrections } from './workflow-correction.js';
26
32
  import { dateEventProjectionFieldsV2 } from './date-event-projection.js';
27
33
  import { validateWorkflowTaskPages } from './workflow-task-page.js';
28
34
  import { requiresExtendedOwnedSubtableCapacity, requiresAggregateOwnedSubtableCapacity, dataOwnedRowLimit, isDataOwnedRowLimit } from './data-capacity.js';
29
- import { validateWorkflowBusinessSteps, compileWorkflowBusinessStepHandlers, validateWorkflowBusinessStepSubscriptions, WORKFLOW_BUSINESS_STEP_EVENT, WORKFLOW_BUSINESS_STEP_EVENTS } from './workflow-business-step.js';
35
+ import { validateWorkflowBusinessSteps, compileWorkflowBusinessStepHandlers, validateWorkflowBusinessStepSubscriptions } from './workflow-business-step.js';
30
36
  import { validateWorkflowAssignmentRoutingBindings, validateWorkflowAssignmentRoutingPolicy } from './workflow-assignment-routing.js';
31
37
  import { requiresWorkflowRoleUnion, validateWorkflowRoleUnion, requiresWorkflowRoleInputSelection, validateWorkflowRoleInputSelection } from './workflow-role-union.js';
32
38
  import { assertWorkflowOwnedSubjectCreate, assertWorkflowOwnedSubjectCreateResources } from './workflow-owned-subject.js';
@@ -91,6 +97,8 @@ const ADMIN_NAVIGATION_ICONS = new Set([
91
97
  'settings',
92
98
  ]);
93
99
  const WORKFLOW_OPERATIONS = new Set([
100
+ 'complete',
101
+ 'save_form',
94
102
  'approve',
95
103
  'reject',
96
104
  'return',
@@ -128,46 +136,8 @@ export const DATA_EVENT_TYPES_V2 = [
128
136
  'openxiangda.data.record.updated.v2',
129
137
  'openxiangda.data.record.deleted.v2',
130
138
  ];
131
- export const WORKFLOW_EVENT_TYPES_V2 = [
132
- 'openxiangda.workflow.node.skipped.v2',
133
- WORKFLOW_BUSINESS_STEP_EVENT,
134
- 'openxiangda.workflow.step.result_received.v2',
135
- 'openxiangda.workflow.step.completed.v2',
136
- 'openxiangda.workflow.step.continuation_failed.v2',
137
- 'openxiangda.workflow.instance.started.v2',
138
- 'openxiangda.workflow.instance.cc_added.v2',
139
- 'openxiangda.workflow.instance.completed.v2',
140
- 'openxiangda.workflow.instance.rejected.v2',
141
- 'openxiangda.workflow.instance.returned.v2',
142
- 'openxiangda.workflow.instance.resumed.v2',
143
- 'openxiangda.workflow.instance.withdrawn.v2',
144
- 'openxiangda.workflow.instance.terminated.v2',
145
- 'openxiangda.workflow.task.created.v2',
146
- 'openxiangda.workflow.task.assigned.v2',
147
- 'openxiangda.workflow.task.assignment_pending.v2',
148
- 'openxiangda.workflow.task.assignment_resolution_failed.v2',
149
- 'openxiangda.workflow.task.approved.v2',
150
- 'openxiangda.workflow.task.completed.v2',
151
- 'openxiangda.workflow.task.rejected.v2',
152
- 'openxiangda.workflow.task.returned.v2',
153
- 'openxiangda.workflow.task.resubmitted.v2',
154
- 'openxiangda.workflow.task.transferred.v2',
155
- 'openxiangda.workflow.task.reassigned.v2',
156
- 'openxiangda.workflow.task.delegated.v2',
157
- 'openxiangda.workflow.task.assignee_added.v2',
158
- 'openxiangda.workflow.task.cancelled.v2',
159
- 'openxiangda.workflow.participant.activated.v2',
160
- 'openxiangda.workflow.participant.completed.v2',
161
- 'openxiangda.workflow.participant.rejected.v2',
162
- 'openxiangda.workflow.participant.returned.v2',
163
- 'openxiangda.workflow.participant.transferred.v2',
164
- 'openxiangda.workflow.participant.reassigned.v2',
165
- 'openxiangda.workflow.participant.delegated.v2',
166
- 'openxiangda.workflow.participant.added.v2',
167
- 'openxiangda.workflow.participant.suspended.v2',
168
- 'openxiangda.workflow.participant.resumed.v2',
169
- 'openxiangda.workflow.participant.cancelled.v2',
170
- ];
139
+ export { WORKFLOW_EVENT_TYPES_V2 } from './workflow-events.js';
140
+ import { WORKFLOW_EVENT_TYPES_V2, workflowProducedEventTypes } from './workflow-events.js';
171
141
  const WORKFLOW_EVENT_TYPE_SET_V2 = new Set(WORKFLOW_EVENT_TYPES_V2);
172
142
  export class NativeConfigurationCompilerError extends Error {
173
143
  code;
@@ -493,6 +463,11 @@ export function compileRequiredPlatformCapabilitiesV3(config) {
493
463
  ...(resources.some(hasDataAuditReadPolicy)
494
464
  ? [{ code: 'data.audit-read-access', declaration: dataUsage }]
495
465
  : []),
466
+ ...(resources.some(resource => resource.schema.fields.some((field) => /^(resource-ref|user|department)\.(single|multiple)$/.test(field.type))) || config.authz.scopeDimensions.some((dimension) => dimension.valueSource)
467
+ ? [{ code: 'data.field-source-contexts', declaration: {
468
+ resources: resources.map(resource => ({ code: resource.code, fields: resource.schema.fields.filter((field) => /^(resource-ref|user|department)\.(single|multiple)$/.test(field.type)) })),
469
+ dimensions: config.authz.scopeDimensions.filter((dimension) => dimension.valueSource),
470
+ } }] : []),
496
471
  ...(requiresDirectoryV2
497
472
  ? [
498
473
  {
@@ -664,6 +639,14 @@ export function compileRequiredPlatformCapabilitiesV3(config) {
664
639
  ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'approval' && node.emptyPolicy !== undefined))
665
640
  ? [{ code: 'workflow.approval-empty-policy', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'approval' && node.emptyPolicy !== undefined)) }]
666
641
  : []),
642
+ ...(config.workflows.bindings.some((item) => Object.values(item.binding.bindings).some((entry) => entry.provider === 'supervisor_chain')) ? [{ code: 'workflow.supervisor-chain', declaration: config.workflows.bindings.filter((item) => Object.values(item.binding.bindings).some((entry) => entry.provider === 'supervisor_chain')) }] : []),
643
+ ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.reminders)) ? [{ code: 'workflow.reminders', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.reminders)) }] : []),
644
+ ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => isWorkflowPlatformNotify(node)))
645
+ ? [{ code: 'workflow.platform-notify', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => isWorkflowPlatformNotify(node))) }] : []),
646
+ ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.returnPolicy !== undefined))
647
+ ? [{ code: 'workflow.return-policy', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.returnPolicy !== undefined)) }] : []),
648
+ ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'handle'))
649
+ ? [{ code: 'workflow.handling-nodes', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'handle')) }] : []),
667
650
  ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.completionDeadline !== undefined))
668
651
  ? [{ code: 'workflow.completion-deadline', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.completionDeadline !== undefined)) }]
669
652
  : []),
@@ -684,8 +667,8 @@ export function compileRequiredPlatformCapabilitiesV3(config) {
684
667
  ? [{ code: 'workflow.task-rich-fields', declaration: taskRichFieldDefinitions }] : []),
685
668
  ...(config.workflows.definitions.some((item) => Object.values(item.definition.taskPages || {}).some((page) => page.fields.some((field) => field.subtable)))
686
669
  ? [{ code: 'workflow.task-owned-subtables', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.taskPages || {}).some((page) => page.fields.some((field) => field.subtable))) }] : []),
687
- ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action'))
688
- ? [{ code: 'workflow.durable-business-step', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action')) }]
670
+ ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action' && !isWorkflowPlatformNotify(node)))
671
+ ? [{ code: 'workflow.durable-business-step', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action' && !isWorkflowPlatformNotify(node))) }]
689
672
  : []),
690
673
  ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action' && node.handler.dataTransaction))
691
674
  ? [{ code: 'workflow.step-data-transaction', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action' && node.handler.dataTransaction)) }]
@@ -1176,7 +1159,7 @@ function compileExpectedContract(config, configDigest, generatorVersion) {
1176
1159
  field: trigger.field,
1177
1160
  })),
1178
1161
  ...(config.workflows.activations.length
1179
- ? WORKFLOW_EVENT_TYPES_V2.filter(eventType => !WORKFLOW_BUSINESS_STEP_EVENTS.includes(eventType) || config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action'))).filter(eventType => eventType !== 'openxiangda.workflow.node.skipped.v2' || config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'approval' && node.emptyPolicy === 'skip'))).map(eventType => ({
1162
+ ? workflowProducedEventTypes(config.workflows.definitions).map(eventType => ({
1180
1163
  code: `workflow:${eventType}`,
1181
1164
  source: 'workflow',
1182
1165
  eventType,
@@ -3646,7 +3629,7 @@ function compileWorkflows(config) {
3646
3629
  const nodes = object(item.definition.nodes, '/config/workflows/definitions/nodes');
3647
3630
  for (const nodeValue of Object.values(nodes)) {
3648
3631
  const node = object(nodeValue, '/config/workflows/definitions/nodes/*');
3649
- if (node.kind !== 'approval')
3632
+ if (node.kind !== 'approval' && node.kind !== 'handle')
3650
3633
  continue;
3651
3634
  for (const operation of uniqueStrings(node.allowedOperations || [], '/config/workflows/definitions/nodes/*/allowedOperations', 20)) {
3652
3635
  operations.add(operation);
@@ -4758,11 +4741,18 @@ function validateWorkflowReferences(config) {
4758
4741
  'definitionVersion',
4759
4742
  'bindingVersion',
4760
4743
  'acceptedCommandDeactivationPolicy',
4761
- ], pointer, ['environmentKey']);
4744
+ ], pointer, ['environmentKey', 'sourceBase']);
4762
4745
  const code = stableCode(activation.workflowCode, `${pointer}/workflowCode`);
4763
4746
  if (activationCodes.has(code))
4764
4747
  fail('NATIVE_WORKFLOW_ACTIVATION_DUPLICATE', pointer);
4765
4748
  activationCodes.add(code);
4749
+ if (activation.sourceBase !== undefined) {
4750
+ const base = object(activation.sourceBase, `${pointer}/sourceBase`);
4751
+ exactKeys(base, ['definitionDigest', 'bindingDigest'], `${pointer}/sourceBase`);
4752
+ for (const key of ['definitionDigest', 'bindingDigest'])
4753
+ if (!/^(sha256:)?[a-f0-9]{64}$/.test(String(base[key] || '')))
4754
+ fail('NATIVE_WORKFLOW_SOURCE_BASE_INVALID', `${pointer}/sourceBase/${key}`);
4755
+ }
4766
4756
  const definitionKey = `${code}:${positiveInteger(activation.definitionVersion, `${pointer}/definitionVersion`)}`;
4767
4757
  const bindingKey = `${code}:${positiveInteger(activation.bindingVersion, `${pointer}/bindingVersion`)}`;
4768
4758
  if (!definitions.has(definitionKey)) {
@@ -4989,6 +4979,18 @@ function validateWorkflowDefinition(definition, pointer) {
4989
4979
  const taskPageErrors = validateWorkflowTaskPages(definition);
4990
4980
  if (taskPageErrors.length)
4991
4981
  fail(taskPageErrors[0], `${pointer}/taskPages`);
4982
+ const returnErrors = validateWorkflowReturnPolicies(definition);
4983
+ if (returnErrors.length)
4984
+ fail(returnErrors[0], `${pointer}/nodes`);
4985
+ const reminderErrors = validateWorkflowReminders(definition);
4986
+ if (reminderErrors.length)
4987
+ fail(reminderErrors[0], `${pointer}/nodes`);
4988
+ const handleErrors = validateWorkflowHandlingNodes(definition);
4989
+ if (handleErrors.length)
4990
+ fail(handleErrors[0], `${pointer}/nodes`);
4991
+ const parallelErrors = validateWorkflowParallel(definition);
4992
+ if (parallelErrors.length)
4993
+ fail(parallelErrors[0], `${pointer}/nodes`);
4992
4994
  const stepErrors = validateWorkflowBusinessSteps(definition);
4993
4995
  if (stepErrors.length)
4994
4996
  fail(stepErrors[0], `${pointer}/nodes`);
@@ -4999,17 +5001,20 @@ function validateWorkflowDefinition(definition, pointer) {
4999
5001
  const nodePointer = `${pointer}/nodes/${nodeId}`;
5000
5002
  const node = object(rawNode, nodePointer);
5001
5003
  equal(node.id, nodeId, `${nodePointer}/id`);
5002
- if (!['approval', 'condition', 'end', 'cc', 'action', 'correction'].includes(node.kind)) {
5004
+ if (!['approval', 'handle', 'condition', 'end', 'cc', 'action', 'correction', 'parallel', 'join'].includes(node.kind)) {
5003
5005
  fail('NATIVE_WORKFLOW_NODE_KIND_INVALID', `${nodePointer}/kind`);
5004
5006
  }
5005
5007
  const targets = [];
5006
- if (node.kind === 'approval') {
5008
+ if (node.kind === 'approval' || node.kind === 'handle') {
5007
5009
  requiredString(node.title, `${nodePointer}/title`, 255);
5008
5010
  workflowBindingCode(node.binding, `${nodePointer}/binding`);
5009
5011
  if (!['single', 'any', 'all', 'sequence'].includes(node.mode)) {
5010
5012
  fail('NATIVE_WORKFLOW_APPROVAL_MODE_INVALID', `${nodePointer}/mode`);
5011
5013
  }
5012
- targets.push(requiredString(node.onApprove, `${nodePointer}/onApprove`, 128), requiredString(node.onReject, `${nodePointer}/onReject`, 128));
5014
+ if (node.kind === 'handle')
5015
+ targets.push(requiredString(node.next, `${nodePointer}/next`, 128));
5016
+ else
5017
+ targets.push(requiredString(node.onApprove, `${nodePointer}/onApprove`, 128), requiredString(node.onReject, `${nodePointer}/onReject`, 128));
5013
5018
  for (const returnTarget of uniqueStrings(node.returnTargets || [], `${nodePointer}/returnTargets`, 200)) {
5014
5019
  if (!nodes[returnTarget]) {
5015
5020
  fail('NATIVE_WORKFLOW_TARGET_MISSING', `${nodePointer}/returnTargets`);
@@ -5034,6 +5039,20 @@ function validateWorkflowDefinition(definition, pointer) {
5034
5039
  workflowBindingCode(node.binding, `${nodePointer}/binding`);
5035
5040
  targets.push(requiredString(node.next, `${nodePointer}/next`, 128));
5036
5041
  }
5042
+ else if (node.kind === 'parallel') {
5043
+ requiredString(node.title, `${nodePointer}/title`, 255);
5044
+ targets.push(requiredString(node.join, `${nodePointer}/join`, 128));
5045
+ for (const [index, raw] of boundedArray(node.branches, `${nodePointer}/branches`, 8).entries()) {
5046
+ const branch = object(raw, `${nodePointer}/branches/${index}`);
5047
+ if (branch.when !== undefined)
5048
+ validateWorkflowExpression(branch.when, `${nodePointer}/branches/${index}/when`, 0);
5049
+ targets.push(requiredString(branch.target, `${nodePointer}/branches/${index}/target`, 128));
5050
+ }
5051
+ }
5052
+ else if (node.kind === 'join') {
5053
+ requiredString(node.title, `${nodePointer}/title`, 255);
5054
+ targets.push(requiredString(node.next, `${nodePointer}/next`, 128));
5055
+ }
5037
5056
  else if (node.kind === 'condition') {
5038
5057
  const branches = boundedArray(node.branches, `${nodePointer}/branches`, 100);
5039
5058
  if (branches.length === 0) {
@@ -5072,8 +5091,8 @@ function validateWorkflowDefinition(definition, pointer) {
5072
5091
  walk(startAt);
5073
5092
  for (const id of [...reachable]) {
5074
5093
  const current = nodes[id];
5075
- if (current?.kind === 'approval')
5076
- for (const target of current.returnTargets || [])
5094
+ if (current?.kind === 'approval' || current?.kind === 'handle')
5095
+ for (const target of workflowReturnTargets(current))
5077
5096
  if (nodes[target]?.kind === 'correction')
5078
5097
  reachable.add(target);
5079
5098
  }
@@ -5123,6 +5142,9 @@ function validateWorkflowBinding(binding, pointer) {
5123
5142
  for (const [code, raw] of Object.entries(entries)) {
5124
5143
  workflowBindingCode(code, `${pointer}/bindings/${code}`);
5125
5144
  const entry = object(raw, `${pointer}/bindings/${code}`);
5145
+ const chainErrors = validateWorkflowSupervisorChainBinding(entry);
5146
+ if (chainErrors.length)
5147
+ fail(chainErrors[0], `${pointer}/bindings/${code}`);
5126
5148
  const selectionErrors = validateWorkflowRoleInputSelection(entry);
5127
5149
  if (selectionErrors.length)
5128
5150
  fail(selectionErrors[0], `${pointer}/bindings/${code}/selectedInputPath`);
@@ -5136,6 +5158,7 @@ function validateWorkflowBinding(binding, pointer) {
5136
5158
  'input_users',
5137
5159
  'form_field_users',
5138
5160
  'department_supervisor',
5161
+ 'supervisor_chain',
5139
5162
  'app_role',
5140
5163
  'app_role_in_scope',
5141
5164
  'business_relation',
@@ -5170,6 +5193,9 @@ function validateWorkflowBinding(binding, pointer) {
5170
5193
  }
5171
5194
  }
5172
5195
  function validateWorkflowDefinitionBinding(definition, binding, pointer) {
5196
+ const chainErrors = validateWorkflowSupervisorChains(definition, binding);
5197
+ if (chainErrors.length)
5198
+ fail(chainErrors[0], pointer);
5173
5199
  equal(binding.workflowCode, definition.code, `${pointer}/workflowCode`);
5174
5200
  const entries = object(binding.bindings, `${pointer}/bindings`);
5175
5201
  for (const [code, entry] of Object.entries(entries)) {
@@ -5187,7 +5213,7 @@ function validateWorkflowDefinitionBinding(definition, binding, pointer) {
5187
5213
  fail(stepErrors[0], pointer);
5188
5214
  for (const [nodeId, rawNode] of Object.entries(object(definition.nodes, `${pointer}/nodes`))) {
5189
5215
  const node = object(rawNode, `${pointer}/nodes/${nodeId}`);
5190
- if (['approval', 'cc'].includes(node.kind) && !entries[node.binding]) {
5216
+ if (['approval', 'handle', 'cc'].includes(node.kind) && !entries[node.binding]) {
5191
5217
  fail('NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING', `${pointer}/nodes/${nodeId}/binding`);
5192
5218
  }
5193
5219
  }