openxiangda-devkit-core 2.62.1 → 2.63.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 (36) hide show
  1. package/dist/application-services.d.ts +36 -8
  2. package/dist/application-services.d.ts.map +1 -1
  3. package/dist/application-services.js +12 -6
  4. package/dist/application-services.js.map +1 -1
  5. package/dist/backend-image-candidate.d.ts.map +1 -1
  6. package/dist/backend-image-candidate.js +5 -19
  7. package/dist/backend-image-candidate.js.map +1 -1
  8. package/dist/backend-image-inputs.d.ts +7 -0
  9. package/dist/backend-image-inputs.d.ts.map +1 -1
  10. package/dist/backend-image-inputs.js +25 -2
  11. package/dist/backend-image-inputs.js.map +1 -1
  12. package/dist/compiler/bundle.js +1 -1
  13. package/dist/compiler/bundle.js.map +1 -1
  14. package/dist/compiler/config.d.ts.map +1 -1
  15. package/dist/compiler/config.js +21 -4
  16. package/dist/compiler/config.js.map +1 -1
  17. package/dist/compiler/permission-review.d.ts.map +1 -1
  18. package/dist/internal/workflow.d.ts.map +1 -1
  19. package/dist/internal/workflow.js +9 -1
  20. package/dist/internal/workflow.js.map +1 -1
  21. package/dist/target-readiness.d.ts.map +1 -1
  22. package/dist/target-readiness.js +2 -1
  23. package/dist/target-readiness.js.map +1 -1
  24. package/dist/toolchain-capsule.d.ts +4 -5
  25. package/dist/toolchain-capsule.d.ts.map +1 -1
  26. package/dist/toolchain-capsule.js +19 -68
  27. package/dist/toolchain-capsule.js.map +1 -1
  28. package/dist/toolchain-facts.d.ts +40 -0
  29. package/dist/toolchain-facts.d.ts.map +1 -0
  30. package/dist/toolchain-facts.js +82 -0
  31. package/dist/toolchain-facts.js.map +1 -0
  32. package/dist/workspace-inputs.d.ts +13 -0
  33. package/dist/workspace-inputs.d.ts.map +1 -0
  34. package/dist/workspace-inputs.js +135 -0
  35. package/dist/workspace-inputs.js.map +1 -0
  36. package/package.json +5 -3
@@ -1,3 +1,4 @@
1
+ import { workflowAssignmentLeafBinding, workflowAssignmentLeaves, workflowBindingRoleCodes, validateWorkflowConditionalAssignmentShape } from 'openxiangda-contracts';
1
2
  import { compileApplicationAgentsV2, NativeApplicationAgentContractError } from 'openxiangda-contracts/native-compiler';
2
3
  import { normalizeDataMutationGrants } from 'openxiangda-contracts';
3
4
  import { parseNativeParentReadPolicy, validateNativeParentReadPolicies, NativeParentReadPolicyError, NativeDataPolicyExpressionV2Error } from 'openxiangda-contracts/native-compiler';
@@ -640,7 +641,7 @@ export function backendRuntimeRequired(config) {
640
641
  (backend.enabled !== false &&
641
642
  Boolean(backend.operations?.length ||
642
643
  backend.secrets?.length ||
643
- config.events?.subscriptions?.some(item => !item.execution) ||
644
+ config.events?.subscriptions?.some(item => item.execution?.kind !== 'native-data') ||
644
645
  config.events?.timers?.length ||
645
646
  config.events?.dateTriggers?.length ||
646
647
  config.workflows?.providers?.length ||
@@ -947,7 +948,7 @@ export function validateAppConfig(value) {
947
948
  (Array.isArray(backend.operations) && backend.operations.length > 0 ||
948
949
  Array.isArray(backend.secrets) && backend.secrets.length > 0 ||
949
950
  Array.isArray(eventConfig.subscriptions) &&
950
- eventConfig.subscriptions.some(item => !object(item).execution) ||
951
+ eventConfig.subscriptions.some(item => object(object(item).execution).kind !== 'native-data') ||
951
952
  Array.isArray(eventConfig.timers) && eventConfig.timers.length > 0 ||
952
953
  Array.isArray(eventConfig.dateTriggers) &&
953
954
  eventConfig.dateTriggers.length > 0 ||
@@ -2531,6 +2532,20 @@ export function validateAppConfig(value) {
2531
2532
  if (bindingByKey.has(key)) {
2532
2533
  diagnostics.push(diagnostic('APP_CONFIG_WORKFLOW_BINDING_DUPLICATE', `Workflow binding 重复: ${key}`, path));
2533
2534
  }
2535
+ const declaredRoles = new Set((Array.isArray(authz.roles) ? authz.roles : []).map(item => string(object(item).code)));
2536
+ for (const [code, entry] of Object.entries(binding.bindings || {})) {
2537
+ if (entry.provider !== 'conditional')
2538
+ continue;
2539
+ const shape = validateWorkflowConditionalAssignmentShape(entry);
2540
+ for (const error of shape)
2541
+ diagnostics.push(diagnostic('APP_CONFIG_WORKFLOW_BINDING_INVALID', error, `${path}.binding.bindings.${code}`));
2542
+ if (shape.length)
2543
+ continue;
2544
+ for (const leaf of workflowAssignmentLeaves(entry))
2545
+ for (const role of [...workflowBindingRoleCodes(leaf), ...Object.values(leaf.routing?.sources || {}).map(source => source.roleCode)])
2546
+ if (!declaredRoles.has(role))
2547
+ diagnostics.push(diagnostic('WORKFLOW_CONDITIONAL_ROLE_UNDECLARED', '条件人员来源引用了未声明的角色', `${path}.binding.bindings.${code}`));
2548
+ }
2534
2549
  bindingByKey.set(key, binding);
2535
2550
  });
2536
2551
  const activationWorkflowCodes = new Set();
@@ -2575,6 +2590,8 @@ export function validateAppConfig(value) {
2575
2590
  for (const error of validateWorkflowBinding(definition, binding)) {
2576
2591
  diagnostics.push(diagnostic('APP_CONFIG_WORKFLOW_BINDING_INVALID', error, path));
2577
2592
  }
2593
+ if (Object.values(binding.bindings || {}).some(entry => entry.provider === 'conditional' && validateWorkflowConditionalAssignmentShape(entry).length))
2594
+ return;
2578
2595
  try {
2579
2596
  const resource = (Array.isArray(data.resources) ? data.resources : []).map(object).find(item => item.code === definition.subject.resourceCode);
2580
2597
  const fields = object(resource?.schema).fields;
@@ -2595,7 +2612,7 @@ export function validateAppConfig(value) {
2595
2612
  }
2596
2613
  }
2597
2614
  });
2598
- for (const error of validateWorkflowAssignmentRoutingBindings(activeRoutingBindings))
2615
+ for (const error of validateWorkflowAssignmentRoutingBindings(activeRoutingBindings.map(workflowAssignmentLeafBinding)))
2599
2616
  diagnostics.push(diagnostic('APP_CONFIG_WORKFLOW_ROUTING_INVALID', error, 'workflows.activations'));
2600
2617
  editableParameters.forEach((item, index) => {
2601
2618
  const parameter = object(item);
@@ -5228,7 +5245,7 @@ export function defineOpenXiangdaApp(declaration) {
5228
5245
  backend: {
5229
5246
  root: 'apps/server', runtime: 'node', framework: 'nestjs',
5230
5247
  enabled: Boolean(declaration.backend?.operations?.length || declaration.backend?.secrets?.length ||
5231
- declaration.events?.subscriptions?.some(item => !item.execution) || declaration.events?.timers?.length ||
5248
+ declaration.events?.subscriptions?.some(item => item.execution?.kind !== 'native-data') || declaration.events?.timers?.length ||
5232
5249
  declaration.events?.dateTriggers?.length ||
5233
5250
  declaration.workflows?.providers?.length || declaration.data?.concurrency?.commands.some(command => command.mode === 'durable')),
5234
5251
  ...declaration.backend,