openxiangda-devkit-core 2.63.0 → 2.63.3

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 (42) 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.d.ts.map +1 -1
  13. package/dist/compiler/bundle.js +4 -1
  14. package/dist/compiler/bundle.js.map +1 -1
  15. package/dist/compiler/config.d.ts +1 -1
  16. package/dist/compiler/config.d.ts.map +1 -1
  17. package/dist/compiler/config.js +20 -2
  18. package/dist/compiler/config.js.map +1 -1
  19. package/dist/compiler/permission-review.d.ts.map +1 -1
  20. package/dist/documentation.d.ts +7 -3
  21. package/dist/documentation.d.ts.map +1 -1
  22. package/dist/documentation.js +1 -0
  23. package/dist/documentation.js.map +1 -1
  24. package/dist/internal/workflow.d.ts.map +1 -1
  25. package/dist/internal/workflow.js +9 -1
  26. package/dist/internal/workflow.js.map +1 -1
  27. package/dist/target-readiness.d.ts.map +1 -1
  28. package/dist/target-readiness.js +2 -1
  29. package/dist/target-readiness.js.map +1 -1
  30. package/dist/toolchain-capsule.d.ts +4 -5
  31. package/dist/toolchain-capsule.d.ts.map +1 -1
  32. package/dist/toolchain-capsule.js +19 -68
  33. package/dist/toolchain-capsule.js.map +1 -1
  34. package/dist/toolchain-facts.d.ts +40 -0
  35. package/dist/toolchain-facts.d.ts.map +1 -0
  36. package/dist/toolchain-facts.js +82 -0
  37. package/dist/toolchain-facts.js.map +1 -0
  38. package/dist/workspace-inputs.d.ts +13 -0
  39. package/dist/workspace-inputs.d.ts.map +1 -0
  40. package/dist/workspace-inputs.js +135 -0
  41. package/dist/workspace-inputs.js.map +1 -0
  42. 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';
@@ -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);
@@ -5261,7 +5278,8 @@ export function defineOpenXiangdaApp(declaration) {
5261
5278
  surfaces.mobile.defaultRouteCode = `user.${homeResourceCode}.records`;
5262
5279
  }
5263
5280
  }
5264
- const declarationDiagnostics = validateAppDeclaration(normalizedDeclaration);
5281
+ const declarationDiagnostics = validateAppDeclaration(normalizedDeclaration)
5282
+ .filter(item => item.severity === 'error');
5265
5283
  if (declarationDiagnostics.length > 0) {
5266
5284
  throw new AppConfigValidationError(declarationDiagnostics);
5267
5285
  }