openxiangda-devkit-core 2.0.0-alpha.12 → 2.0.0-alpha.121

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 (188) hide show
  1. package/README.md +3 -8
  2. package/dist/app-spec.d.ts +228 -0
  3. package/dist/app-spec.d.ts.map +1 -0
  4. package/dist/app-spec.js +1443 -0
  5. package/dist/app-spec.js.map +1 -0
  6. package/dist/application-services.d.ts +996 -49
  7. package/dist/application-services.d.ts.map +1 -1
  8. package/dist/application-services.js +1348 -197
  9. package/dist/application-services.js.map +1 -1
  10. package/dist/application-ui-contract.d.ts +5 -0
  11. package/dist/application-ui-contract.d.ts.map +1 -0
  12. package/dist/application-ui-contract.js +149 -0
  13. package/dist/application-ui-contract.js.map +1 -0
  14. package/dist/backend-image-build.d.ts +23 -0
  15. package/dist/backend-image-build.d.ts.map +1 -0
  16. package/dist/backend-image-build.js +204 -0
  17. package/dist/backend-image-build.js.map +1 -0
  18. package/dist/command-process.d.ts +14 -0
  19. package/dist/command-process.d.ts.map +1 -0
  20. package/dist/command-process.js +51 -0
  21. package/dist/command-process.js.map +1 -0
  22. package/dist/command-registry.d.ts +123 -366
  23. package/dist/command-registry.d.ts.map +1 -1
  24. package/dist/command-registry.js +26 -266
  25. package/dist/command-registry.js.map +1 -1
  26. package/dist/compiler/ai-catalog.d.ts +4 -0
  27. package/dist/compiler/ai-catalog.d.ts.map +1 -0
  28. package/dist/compiler/ai-catalog.js +354 -0
  29. package/dist/compiler/ai-catalog.js.map +1 -0
  30. package/dist/compiler/application-model.d.ts +60 -0
  31. package/dist/compiler/application-model.d.ts.map +1 -0
  32. package/dist/compiler/application-model.js +141 -0
  33. package/dist/compiler/application-model.js.map +1 -0
  34. package/dist/compiler/authorization-transition.d.ts +7 -0
  35. package/dist/compiler/authorization-transition.d.ts.map +1 -0
  36. package/dist/compiler/authorization-transition.js +27 -0
  37. package/dist/compiler/authorization-transition.js.map +1 -0
  38. package/dist/compiler/bundle.d.ts +34 -0
  39. package/dist/compiler/bundle.d.ts.map +1 -0
  40. package/dist/compiler/bundle.js +1910 -0
  41. package/dist/compiler/bundle.js.map +1 -0
  42. package/dist/compiler/config.d.ts +882 -0
  43. package/dist/compiler/config.d.ts.map +1 -0
  44. package/dist/compiler/config.js +4118 -0
  45. package/dist/compiler/config.js.map +1 -0
  46. package/dist/compiler/data-policy-expression.d.ts +12 -0
  47. package/dist/compiler/data-policy-expression.d.ts.map +1 -0
  48. package/dist/compiler/data-policy-expression.js +43 -0
  49. package/dist/compiler/data-policy-expression.js.map +1 -0
  50. package/dist/compiler/field-codec.d.ts +14 -0
  51. package/dist/compiler/field-codec.d.ts.map +1 -0
  52. package/dist/compiler/field-codec.js +131 -0
  53. package/dist/compiler/field-codec.js.map +1 -0
  54. package/dist/compiler/field-physical-plan.d.ts +10 -0
  55. package/dist/compiler/field-physical-plan.d.ts.map +1 -0
  56. package/dist/compiler/field-physical-plan.js +66 -0
  57. package/dist/compiler/field-physical-plan.js.map +1 -0
  58. package/dist/compiler/field-policy-path.d.ts +10 -0
  59. package/dist/compiler/field-policy-path.d.ts.map +1 -0
  60. package/dist/compiler/field-policy-path.js +283 -0
  61. package/dist/compiler/field-policy-path.js.map +1 -0
  62. package/dist/compiler/field-query-plan.d.ts +13 -0
  63. package/dist/compiler/field-query-plan.d.ts.map +1 -0
  64. package/dist/compiler/field-query-plan.js +122 -0
  65. package/dist/compiler/field-query-plan.js.map +1 -0
  66. package/dist/compiler/field-surface.d.ts +15 -0
  67. package/dist/compiler/field-surface.d.ts.map +1 -0
  68. package/dist/compiler/field-surface.js +51 -0
  69. package/dist/compiler/field-surface.js.map +1 -0
  70. package/dist/compiler/index.d.ts +6 -0
  71. package/dist/compiler/index.d.ts.map +1 -0
  72. package/dist/compiler/index.js +6 -0
  73. package/dist/compiler/index.js.map +1 -0
  74. package/dist/compiler/package-compiler.d.ts +22 -0
  75. package/dist/compiler/package-compiler.d.ts.map +1 -0
  76. package/dist/compiler/package-compiler.js +257 -0
  77. package/dist/compiler/package-compiler.js.map +1 -0
  78. package/dist/compiler/permission-review.d.ts +139 -0
  79. package/dist/compiler/permission-review.d.ts.map +1 -0
  80. package/dist/compiler/permission-review.js +131 -0
  81. package/dist/compiler/permission-review.js.map +1 -0
  82. package/dist/compiler/schema-composition.d.ts +21 -0
  83. package/dist/compiler/schema-composition.d.ts.map +1 -0
  84. package/dist/compiler/schema-composition.js +193 -0
  85. package/dist/compiler/schema-composition.js.map +1 -0
  86. package/dist/config.d.ts +1 -1
  87. package/dist/config.js +1 -1
  88. package/dist/configuration-preflight.d.ts +7 -0
  89. package/dist/configuration-preflight.d.ts.map +1 -0
  90. package/dist/configuration-preflight.js +13 -0
  91. package/dist/configuration-preflight.js.map +1 -0
  92. package/dist/connected-development.d.ts +62 -0
  93. package/dist/connected-development.d.ts.map +1 -0
  94. package/dist/connected-development.js +393 -0
  95. package/dist/connected-development.js.map +1 -0
  96. package/dist/control-plane-client.d.ts +353 -123
  97. package/dist/control-plane-client.d.ts.map +1 -1
  98. package/dist/control-plane-client.js +420 -141
  99. package/dist/control-plane-client.js.map +1 -1
  100. package/dist/delivery-cache.d.ts +34 -0
  101. package/dist/delivery-cache.d.ts.map +1 -0
  102. package/dist/delivery-cache.js +186 -0
  103. package/dist/delivery-cache.js.map +1 -0
  104. package/dist/delivery-source.d.ts +17 -0
  105. package/dist/delivery-source.d.ts.map +1 -0
  106. package/dist/delivery-source.js +85 -0
  107. package/dist/delivery-source.js.map +1 -0
  108. package/dist/deployment-observer.d.ts +14 -0
  109. package/dist/deployment-observer.d.ts.map +1 -0
  110. package/dist/deployment-observer.js +68 -0
  111. package/dist/deployment-observer.js.map +1 -0
  112. package/dist/deployment.d.ts +55 -3
  113. package/dist/deployment.d.ts.map +1 -1
  114. package/dist/deployment.js +182 -21
  115. package/dist/deployment.js.map +1 -1
  116. package/dist/design-readiness.d.ts +24 -0
  117. package/dist/design-readiness.d.ts.map +1 -0
  118. package/dist/design-readiness.js +102 -0
  119. package/dist/design-readiness.js.map +1 -0
  120. package/dist/developer-errors.d.ts +11 -0
  121. package/dist/developer-errors.d.ts.map +1 -0
  122. package/dist/developer-errors.js +16 -0
  123. package/dist/developer-errors.js.map +1 -0
  124. package/dist/developer-operations.d.ts +188 -0
  125. package/dist/developer-operations.d.ts.map +1 -0
  126. package/dist/developer-operations.js +58 -0
  127. package/dist/developer-operations.js.map +1 -0
  128. package/dist/development-lifecycle.d.ts +75 -0
  129. package/dist/development-lifecycle.d.ts.map +1 -0
  130. package/dist/development-lifecycle.js +189 -0
  131. package/dist/development-lifecycle.js.map +1 -0
  132. package/dist/documentation.d.ts +111 -0
  133. package/dist/documentation.d.ts.map +1 -0
  134. package/dist/documentation.js +112 -0
  135. package/dist/documentation.js.map +1 -0
  136. package/dist/index.d.ts +16 -0
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +16 -0
  139. package/dist/index.js.map +1 -1
  140. package/dist/internal/workflow.d.ts +83 -0
  141. package/dist/internal/workflow.d.ts.map +1 -0
  142. package/dist/internal/workflow.js +419 -0
  143. package/dist/internal/workflow.js.map +1 -0
  144. package/dist/nest-injection-contract.d.ts +4 -0
  145. package/dist/nest-injection-contract.d.ts.map +1 -0
  146. package/dist/nest-injection-contract.js +116 -0
  147. package/dist/nest-injection-contract.js.map +1 -0
  148. package/dist/operation-progress.d.ts +26 -0
  149. package/dist/operation-progress.d.ts.map +1 -0
  150. package/dist/operation-progress.js +92 -0
  151. package/dist/operation-progress.js.map +1 -0
  152. package/dist/optional-backend.d.ts +14 -0
  153. package/dist/optional-backend.d.ts.map +1 -0
  154. package/dist/optional-backend.js +145 -0
  155. package/dist/optional-backend.js.map +1 -0
  156. package/dist/package-compiler.d.ts +1 -1
  157. package/dist/package-compiler.d.ts.map +1 -1
  158. package/dist/package-compiler.js +1 -1
  159. package/dist/package-compiler.js.map +1 -1
  160. package/dist/session.d.ts +149 -4
  161. package/dist/session.d.ts.map +1 -1
  162. package/dist/session.js +362 -23
  163. package/dist/session.js.map +1 -1
  164. package/dist/testing.d.ts +77 -0
  165. package/dist/testing.d.ts.map +1 -0
  166. package/dist/testing.js +213 -0
  167. package/dist/testing.js.map +1 -0
  168. package/dist/toolchain-capsule.d.ts +45 -0
  169. package/dist/toolchain-capsule.d.ts.map +1 -0
  170. package/dist/toolchain-capsule.js +165 -0
  171. package/dist/toolchain-capsule.js.map +1 -0
  172. package/dist/workspace-loader.d.ts +1 -1
  173. package/dist/workspace-loader.d.ts.map +1 -1
  174. package/dist/workspace-loader.js +35 -3
  175. package/dist/workspace-loader.js.map +1 -1
  176. package/dist/workspace-operation.d.ts +3 -0
  177. package/dist/workspace-operation.d.ts.map +1 -0
  178. package/dist/workspace-operation.js +45 -0
  179. package/dist/workspace-operation.js.map +1 -0
  180. package/dist/workspace.d.ts.map +1 -1
  181. package/dist/workspace.js +37 -1
  182. package/dist/workspace.js.map +1 -1
  183. package/package.json +16 -4
  184. package/templates/backend/Dockerfile +20 -0
  185. package/templates/backend/package.json +27 -0
  186. package/templates/backend/src/app.module.ts +23 -0
  187. package/templates/backend/src/main.ts +5 -0
  188. package/templates/backend/tsconfig.json +9 -0
@@ -0,0 +1,139 @@
1
+ import { type ConfigurationBundleV3, type ContractBundleV3 } from 'openxiangda-contracts';
2
+ export type PermissionReviewFieldRequirement = {
3
+ kind: 'inherit-resource-operation';
4
+ } | {
5
+ kind: 'deny';
6
+ } | {
7
+ kind: 'all-of';
8
+ capabilityCodes: string[];
9
+ };
10
+ /**
11
+ * A normalized review of sealed declarations, never an authorization engine.
12
+ * References join roles to capability requirements and pages to resources/views;
13
+ * no role × page × field cross product or new grant state is generated.
14
+ */
15
+ export declare function buildPermissionReview(configuration: ConfigurationBundleV3, contracts: ContractBundleV3): {
16
+ digest: string;
17
+ schemaVersion: "openxiangda.permission-review/v2";
18
+ appCode: string;
19
+ configDigest: string;
20
+ contractDigest: string;
21
+ authority: "declaration-projection";
22
+ runtimeAuthorizationRequired: true;
23
+ semantics: {
24
+ roleCapabilities: "sealed-declared-grants; current-user application roles are unioned";
25
+ roleDeniedCapabilities: "removed from that role during compilation; not a global deny across roles";
26
+ capabilityMatch: "static prerequisite only; never runtime allow";
27
+ fieldPolicies: "resource operation is required; field rules can only narrow it; empty is deny";
28
+ hiddenFields: "presentation only; not an authorization rule";
29
+ rowPolicies: "raw declarations; evaluated by the platform with current identity, grants and record facts";
30
+ workflowTasks: "platform Task Surface and fresh command token decide current participant, state, field and operation access";
31
+ navigation: "page selection and visibility do not grant resource or operation access";
32
+ perspectives: "read projections only; never replace the actor or mutation/workflow authorization";
33
+ };
34
+ roles: {
35
+ capabilityCodes: string[];
36
+ description?: string;
37
+ code: string;
38
+ name: string;
39
+ }[];
40
+ capabilities: import("openxiangda-contracts").AppCapabilityContract[];
41
+ perspectives: import("openxiangda-contracts").AppPerspectiveContract[];
42
+ pages: {
43
+ adminAccess: import("openxiangda-contracts").AppFrontendRouteAccess | null;
44
+ admin: import("openxiangda-contracts").AppAdminPageContract[];
45
+ custom: import("openxiangda-contracts").AppFrontendRouteContract[];
46
+ standard: import("openxiangda-contracts").AppRouteManifestEntryV3[];
47
+ };
48
+ resources: {
49
+ code: string;
50
+ name: string;
51
+ operationCapabilities: {
52
+ read: string;
53
+ create: string;
54
+ update: string;
55
+ delete: string;
56
+ };
57
+ dataPolicyCode: string | null;
58
+ mutationOwner: "native" | "action" | "readonly" | "workflow" | null;
59
+ generated: {
60
+ list?: boolean;
61
+ detail?: boolean;
62
+ create?: boolean;
63
+ update?: boolean;
64
+ delete?: boolean;
65
+ } | null;
66
+ views: {
67
+ code: string;
68
+ name: string;
69
+ generated: Required<{
70
+ list?: boolean;
71
+ detail?: boolean;
72
+ create?: boolean;
73
+ update?: boolean;
74
+ delete?: boolean;
75
+ }>;
76
+ fieldOrder: {
77
+ list: string[];
78
+ form: string[];
79
+ detail: string[];
80
+ };
81
+ mobile: {
82
+ enabled: boolean;
83
+ };
84
+ }[];
85
+ defaultFieldOrder: {
86
+ list: string[] | null;
87
+ form: string[] | null;
88
+ detail: string[] | null;
89
+ } | null;
90
+ fields: {
91
+ code: string;
92
+ type: "boolean" | "date" | "file" | "subtable" | "text.short" | "text.long" | "text.rich" | "number.integer" | "number.decimal" | "time" | "datetime" | "date-range" | "datetime-range" | "option.single" | "option.multiple" | "cascade.single" | "cascade.multiple" | "user.single" | "user.multiple" | "department.single" | "department.multiple" | "resource-ref.single" | "resource-ref.multiple" | "image" | "signature" | "address" | "location" | "uuid" | "json" | "serial-number";
93
+ label: string;
94
+ hidden: boolean;
95
+ system: boolean;
96
+ read: PermissionReviewFieldRequirement;
97
+ create: PermissionReviewFieldRequirement;
98
+ update: PermissionReviewFieldRequirement;
99
+ mask: "null" | "omit" | null;
100
+ }[];
101
+ }[];
102
+ authorization: {
103
+ authenticatedUserRoleCode: string | null;
104
+ dataPolicies: import("openxiangda-contracts").AppDataPolicyDeclaration[];
105
+ scopeDimensions: import("openxiangda-contracts").AppScopeDimensionDeclaration[];
106
+ scopeSources: import("openxiangda-contracts").AppScopeSourceDeclaration[];
107
+ roleMembershipSources: import("openxiangda-contracts").AppRoleMembershipSourceDeclaration[];
108
+ relationshipGrantSources: import("openxiangda-contracts").AppRelationshipGrantSourceDeclaration[];
109
+ authorizationTransitions: import("openxiangda-contracts").AppAuthorizationTransitionDeclaration[];
110
+ publicAccess: import("openxiangda-contracts").AnonymousPublicAccessContractV2 | null;
111
+ };
112
+ operations: import("openxiangda-contracts").AppApiOperationContract[];
113
+ workflows: {
114
+ runtimeAuthorizationRequired: true;
115
+ contracts: import("openxiangda-contracts").AppWorkflowContract[];
116
+ definitions: {
117
+ workflowCode: string;
118
+ version: number;
119
+ subject: import("openxiangda-contracts").WorkflowSubjectDefinition;
120
+ organizationContext: {
121
+ department?: {
122
+ source: "none" | "user_primary_department" | "choose_if_multiple" | "always_choose" | "fixed" | "from_input" | "from_role_scope";
123
+ required?: boolean;
124
+ value?: string;
125
+ path?: string;
126
+ dimension?: string;
127
+ };
128
+ } | null;
129
+ startAt: string;
130
+ nodes: Record<string, import("openxiangda-contracts").WorkflowNode>;
131
+ }[];
132
+ bindings: import("openxiangda-contracts").NativeWorkflowBindingDeclaration[];
133
+ activations: import("openxiangda-contracts").NativeWorkflowActivationDeclaration[];
134
+ providers: import("openxiangda-contracts").NativeWorkflowProviderDeclaration[];
135
+ editableParameters: import("openxiangda-contracts").NativeWorkflowEditableParameterDeclaration[];
136
+ };
137
+ };
138
+ export type PermissionReview = ReturnType<typeof buildPermissionReview>;
139
+ //# sourceMappingURL=permission-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-review.d.ts","sourceRoot":"","sources":["../../src/compiler/permission-review.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAEtB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,gCAAgC,GACxC;IAAE,IAAI,EAAE,4BAA4B,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAgBlD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,qBAAqB,EACpC,SAAS,EAAE,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAmIo7mD,CAAC;yBAA4B,CAAC;wBAA0B,CAAC;6BAAqH,CAAC;;;;;;;;;;;EAH/nnD;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,131 @@
1
+ import { canonicalJson, sha256Digest, } from 'openxiangda-contracts';
2
+ function fieldRequirement(policy, operation) {
3
+ const capabilities = policy[operation];
4
+ if (capabilities === undefined)
5
+ return { kind: 'inherit-resource-operation' };
6
+ if (capabilities.length === 0)
7
+ return { kind: 'deny' };
8
+ return { kind: 'all-of', capabilityCodes: [...capabilities].sort() };
9
+ }
10
+ function byCode(entries) {
11
+ return [...entries].sort((left, right) => left.code.localeCompare(right.code));
12
+ }
13
+ /**
14
+ * A normalized review of sealed declarations, never an authorization engine.
15
+ * References join roles to capability requirements and pages to resources/views;
16
+ * no role × page × field cross product or new grant state is generated.
17
+ */
18
+ export function buildPermissionReview(configuration, contracts) {
19
+ if (configuration.appCode !== contracts.appCode ||
20
+ sha256Digest(configuration) !== contracts.configDigest) {
21
+ throw new Error('PERMISSION_REVIEW_CONFIG_MISMATCH: use configuration and contracts from the same compilation');
22
+ }
23
+ const adminRouteCodes = new Set(contracts.adminPages.flatMap(page => page.routeCode ? [page.routeCode] : []));
24
+ const standardRouteCodes = new Set(contracts.routeManifest.routes.flatMap(route => [
25
+ route.desktop.routeCode,
26
+ route.mobile.routeCode,
27
+ ]));
28
+ const review = {
29
+ schemaVersion: 'openxiangda.permission-review/v2',
30
+ appCode: configuration.appCode,
31
+ configDigest: contracts.configDigest,
32
+ contractDigest: sha256Digest(contracts),
33
+ authority: 'declaration-projection',
34
+ runtimeAuthorizationRequired: true,
35
+ semantics: {
36
+ roleCapabilities: 'sealed-declared-grants; current-user application roles are unioned',
37
+ roleDeniedCapabilities: 'removed from that role during compilation; not a global deny across roles',
38
+ capabilityMatch: 'static prerequisite only; never runtime allow',
39
+ fieldPolicies: 'resource operation is required; field rules can only narrow it; empty is deny',
40
+ hiddenFields: 'presentation only; not an authorization rule',
41
+ rowPolicies: 'raw declarations; evaluated by the platform with current identity, grants and record facts',
42
+ workflowTasks: 'platform Task Surface and fresh command token decide current participant, state, field and operation access',
43
+ navigation: 'page selection and visibility do not grant resource or operation access',
44
+ perspectives: 'read projections only; never replace the actor or mutation/workflow authorization',
45
+ },
46
+ roles: byCode(configuration.authz.roles).map(role => ({
47
+ code: role.code,
48
+ name: role.name,
49
+ ...(role.description ? { description: role.description } : {}),
50
+ capabilityCodes: [...role.capabilities].sort(),
51
+ })),
52
+ capabilities: byCode(contracts.capabilities),
53
+ perspectives: byCode(contracts.perspectives),
54
+ pages: {
55
+ adminAccess: contracts.adminAccess ?? null,
56
+ admin: byCode(contracts.adminPages),
57
+ custom: byCode(contracts.routes.filter(route => !adminRouteCodes.has(route.code) && !standardRouteCodes.has(route.code))),
58
+ standard: byCode(contracts.routeManifest.routes),
59
+ },
60
+ resources: byCode(configuration.data.resources).map(resource => ({
61
+ code: resource.code,
62
+ name: resource.name,
63
+ operationCapabilities: resource.capabilities,
64
+ dataPolicyCode: resource.dataPolicyCode ?? null,
65
+ mutationOwner: resource.surface?.mutationOwner ?? null,
66
+ generated: resource.surface?.generated ?? null,
67
+ views: byCode(resource.surface?.views ?? []).map(view => ({
68
+ code: view.code,
69
+ name: view.name,
70
+ generated: view.generated,
71
+ fieldOrder: {
72
+ list: view.list.fieldOrder,
73
+ form: view.form.fieldOrder,
74
+ detail: view.detail.fieldOrder,
75
+ },
76
+ mobile: view.mobile,
77
+ })),
78
+ defaultFieldOrder: resource.surface ? {
79
+ list: resource.surface.list?.fieldOrder ?? null,
80
+ form: resource.surface.form?.fieldOrder ?? null,
81
+ detail: resource.surface.detail?.fieldOrder ?? null,
82
+ } : null,
83
+ fields: byCode(resource.schema.fields).map(field => {
84
+ const policy = resource.fieldPolicies[field.code] ?? {};
85
+ const surface = resource.surface?.fields[field.code];
86
+ return {
87
+ code: field.code,
88
+ type: field.type,
89
+ label: surface?.label ?? field.code,
90
+ hidden: surface?.hidden ?? false,
91
+ system: surface?.system ?? false,
92
+ read: fieldRequirement(policy, 'read'),
93
+ create: fieldRequirement(policy, 'create'),
94
+ update: fieldRequirement(policy, 'update'),
95
+ mask: policy.mask ?? null,
96
+ };
97
+ }),
98
+ })),
99
+ authorization: {
100
+ authenticatedUserRoleCode: configuration.authz.authenticatedUserRoleCode ?? null,
101
+ dataPolicies: byCode(configuration.authz.dataPolicies),
102
+ scopeDimensions: byCode(configuration.authz.scopeDimensions),
103
+ scopeSources: byCode(configuration.authz.scopeSources),
104
+ roleMembershipSources: byCode(configuration.authz.roleMembershipSources),
105
+ relationshipGrantSources: byCode(configuration.authz.relationshipGrantSources),
106
+ authorizationTransitions: [...configuration.authz.authorizationTransitions].sort((left, right) => left.fromAuthzDigest.localeCompare(right.fromAuthzDigest)),
107
+ publicAccess: configuration.frontend.publicAccess ?? null,
108
+ },
109
+ operations: byCode(contracts.operations),
110
+ workflows: {
111
+ runtimeAuthorizationRequired: true,
112
+ contracts: byCode(contracts.workflows),
113
+ definitions: [...configuration.workflows.definitions].sort((left, right) => left.definition.code.localeCompare(right.definition.code) || left.version - right.version).map(({ version, definition }) => ({
114
+ workflowCode: definition.code,
115
+ version,
116
+ subject: definition.subject,
117
+ organizationContext: definition.organizationContext ?? null,
118
+ startAt: definition.startAt,
119
+ nodes: definition.nodes,
120
+ })),
121
+ bindings: [...configuration.workflows.bindings].sort((left, right) => left.binding.workflowCode.localeCompare(right.binding.workflowCode) || left.version - right.version),
122
+ activations: [...configuration.workflows.activations].sort((left, right) => left.workflowCode.localeCompare(right.workflowCode)),
123
+ providers: byCode(configuration.workflows.providers),
124
+ editableParameters: byCode(configuration.workflows.editableParameters),
125
+ },
126
+ };
127
+ // Do not share mutable arrays/objects with compiler output or change its digest.
128
+ const value = JSON.parse(canonicalJson(review));
129
+ return { ...value, digest: sha256Digest(value) };
130
+ }
131
+ //# sourceMappingURL=permission-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-review.js","sourceRoot":"","sources":["../../src/compiler/permission-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type AppApiOperationDeclaration, type OpenXiangdaJsonSchema } from 'openxiangda-contracts';
2
+ import type { AppDataResourceDeclaration } from './config.js';
3
+ export type JsonSchemaDefinitions = Readonly<Record<string, OpenXiangdaJsonSchema>>;
4
+ export interface ResourceRecordSchemaOptions {
5
+ /** Defaults to every declared field, in declaration order. */
6
+ fields?: readonly string[];
7
+ /** Defaults to fields declared with `required: true`. */
8
+ required?: 'declared' | 'none' | readonly string[];
9
+ /** Defaults to false so operation payloads cannot smuggle undeclared fields. */
10
+ additionalProperties?: boolean;
11
+ }
12
+ export interface AppOperationSchemasInput {
13
+ request: OpenXiangdaJsonSchema;
14
+ response: OpenXiangdaJsonSchema;
15
+ definitions?: JsonSchemaDefinitions;
16
+ }
17
+ export declare function schemaRef(definitionName: string): OpenXiangdaJsonSchema;
18
+ export declare function composeJsonSchema(schema: OpenXiangdaJsonSchema, definitions?: JsonSchemaDefinitions): OpenXiangdaJsonSchema;
19
+ export declare function composeAppOperationSchemas(input: AppOperationSchemasInput): Pick<AppApiOperationDeclaration, 'requestSchema' | 'responseSchema'>;
20
+ export declare function resourceRecordSchema(resource: AppDataResourceDeclaration, options?: ResourceRecordSchemaOptions): OpenXiangdaJsonSchema;
21
+ //# sourceMappingURL=schema-composition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-composition.d.ts","sourceRoot":"","sources":["../../src/compiler/schema-composition.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAEV,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AAQrB,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAC1C,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CACtC,CAAC;AAEF,MAAM,WAAW,2BAA2B;IAC1C,8DAA8D;IAC9D,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnD,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAED,wBAAgB,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,qBAAqB,CAGvE;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,qBAAqB,EAC7B,WAAW,GAAE,qBAA0B,GACtC,qBAAqB,CAiCvB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,wBAAwB,GAC9B,IAAI,CAAC,0BAA0B,EAAE,eAAe,GAAG,gBAAgB,CAAC,CAKtE;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,0BAA0B,EACpC,OAAO,GAAE,2BAAgC,GACxC,qBAAqB,CAyCvB"}
@@ -0,0 +1,193 @@
1
+ import { fieldValueSchemaForDefinition, } from 'openxiangda-contracts';
2
+ const DEFINITION_NAME = /^[A-Za-z][A-Za-z0-9_-]{0,63}$/;
3
+ const MAX_DEFINITIONS = 64;
4
+ const MAX_RESOURCE_FIELDS = 200;
5
+ const MAX_SCHEMA_NODES = 10_000;
6
+ const MAX_SCHEMA_DEPTH = 32;
7
+ export function schemaRef(definitionName) {
8
+ assertDefinitionName(definitionName);
9
+ return { $ref: `#/$defs/${definitionName}` };
10
+ }
11
+ export function composeJsonSchema(schema, definitions = {}) {
12
+ const root = cloneSchema(schema);
13
+ const authoredDefinitions = root.$defs;
14
+ if (authoredDefinitions !== undefined &&
15
+ (!isRecord(authoredDefinitions) || Array.isArray(authoredDefinitions))) {
16
+ throw schemaCompositionError('$defs 必须是 JSON Schema 对象字典');
17
+ }
18
+ delete root.$defs;
19
+ const combined = new Map();
20
+ for (const [name, value] of Object.entries((authoredDefinitions || {}))) {
21
+ addDefinition(combined, name, value);
22
+ }
23
+ for (const [name, value] of Object.entries(definitions)) {
24
+ addDefinition(combined, name, value);
25
+ }
26
+ if (combined.size > MAX_DEFINITIONS) {
27
+ throw schemaCompositionError(`JSON Schema definitions 不能超过 ${MAX_DEFINITIONS} 个`);
28
+ }
29
+ const sortedDefinitions = Object.fromEntries([...combined.entries()].sort(([left], [right]) => left.localeCompare(right)));
30
+ const composed = combined.size > 0 ? { ...root, $defs: sortedDefinitions } : root;
31
+ validateLocalReferences(composed, new Set(combined.keys()));
32
+ return composed;
33
+ }
34
+ export function composeAppOperationSchemas(input) {
35
+ return {
36
+ requestSchema: composeJsonSchema(input.request, input.definitions),
37
+ responseSchema: composeJsonSchema(input.response, input.definitions),
38
+ };
39
+ }
40
+ export function resourceRecordSchema(resource, options = {}) {
41
+ const fieldsByCode = new Map(resource.fields.map(field => [field.code, field]));
42
+ if (fieldsByCode.size !== resource.fields.length) {
43
+ throw schemaCompositionError(`资源 ${resource.code} 包含重复字段 code`);
44
+ }
45
+ const selectedCodes = options.fields
46
+ ? [...options.fields]
47
+ : resource.fields.map(field => field.code);
48
+ if (selectedCodes.length > MAX_RESOURCE_FIELDS) {
49
+ throw schemaCompositionError(`Resource schema fields 不能超过 ${MAX_RESOURCE_FIELDS} 个`);
50
+ }
51
+ assertUniqueSelectedFields(selectedCodes);
52
+ const selectedFields = selectedCodes.map(code => {
53
+ const field = fieldsByCode.get(code);
54
+ if (!field) {
55
+ throw schemaCompositionError(`资源 ${resource.code} 未声明字段 ${code}`);
56
+ }
57
+ return field;
58
+ });
59
+ const required = resolveRequiredFields(options.required, selectedFields);
60
+ const schema = {
61
+ type: 'object',
62
+ title: resource.name,
63
+ additionalProperties: options.additionalProperties === true,
64
+ properties: Object.fromEntries(selectedFields.map(field => [
65
+ field.code,
66
+ projectFieldValueSchema(field),
67
+ ])),
68
+ ...(required.length > 0 ? { required } : {}),
69
+ };
70
+ return schema;
71
+ }
72
+ function projectFieldValueSchema(field) {
73
+ const schema = fieldValueSchemaForDefinition(field);
74
+ schema.title = field.label;
75
+ if (field.min !== undefined &&
76
+ (field.type === 'number.integer' || field.type === 'number.decimal')) {
77
+ schema.minimum = field.min;
78
+ }
79
+ if (field.max !== undefined &&
80
+ (field.type === 'number.integer' || field.type === 'number.decimal')) {
81
+ schema.maximum = field.max;
82
+ }
83
+ if (field.maxLength !== undefined &&
84
+ (field.type === 'text.short' ||
85
+ field.type === 'text.long' ||
86
+ field.type === 'text.rich')) {
87
+ schema.maxLength = Math.min(typeof schema.maxLength === 'number'
88
+ ? schema.maxLength
89
+ : field.maxLength, field.maxLength);
90
+ }
91
+ if (field.file?.maxCount !== undefined && isArraySchema(schema)) {
92
+ schema.maxItems = Math.min(typeof schema.maxItems === 'number' ? schema.maxItems : field.file.maxCount, field.file.maxCount);
93
+ }
94
+ if (field.subtable?.maxRows !== undefined &&
95
+ field.type === 'subtable' &&
96
+ isArraySchema(schema)) {
97
+ schema.maxItems = Math.min(typeof schema.maxItems === 'number'
98
+ ? schema.maxItems
99
+ : field.subtable.maxRows, field.subtable.maxRows);
100
+ }
101
+ if (field.type === 'resource-ref.single' && field.source) {
102
+ constrainResourceCode(schema, field.source.resourceCode);
103
+ }
104
+ if (field.type === 'resource-ref.multiple' && field.source) {
105
+ const items = isRecord(schema.items) ? schema.items : undefined;
106
+ if (items)
107
+ constrainResourceCode(items, field.source.resourceCode);
108
+ }
109
+ return schema;
110
+ }
111
+ function constrainResourceCode(schema, resourceCode) {
112
+ const properties = isRecord(schema.properties)
113
+ ? schema.properties
114
+ : undefined;
115
+ if (properties) {
116
+ properties.resourceCode = { const: resourceCode };
117
+ }
118
+ }
119
+ function resolveRequiredFields(required, selectedFields) {
120
+ if (required === 'none')
121
+ return [];
122
+ if (required === undefined || required === 'declared') {
123
+ return selectedFields
124
+ .filter(field => field.required === true)
125
+ .map(field => field.code);
126
+ }
127
+ const selected = new Set(selectedFields.map(field => field.code));
128
+ assertUniqueSelectedFields(required);
129
+ for (const code of required) {
130
+ if (!selected.has(code)) {
131
+ throw schemaCompositionError(`required 引用了未选择字段 ${code}`);
132
+ }
133
+ }
134
+ return [...required];
135
+ }
136
+ function assertUniqueSelectedFields(fields) {
137
+ if (new Set(fields).size !== fields.length) {
138
+ throw schemaCompositionError('Resource schema fields 不能重复');
139
+ }
140
+ }
141
+ function addDefinition(definitions, name, value) {
142
+ assertDefinitionName(name);
143
+ if (!isRecord(value) || Array.isArray(value)) {
144
+ throw schemaCompositionError(`definition ${name} 必须是 JSON Schema 对象`);
145
+ }
146
+ if (definitions.has(name)) {
147
+ throw schemaCompositionError(`definition ${name} 重复`);
148
+ }
149
+ definitions.set(name, cloneSchema(value));
150
+ }
151
+ function assertDefinitionName(name) {
152
+ if (!DEFINITION_NAME.test(name)) {
153
+ throw schemaCompositionError(`非法 JSON Schema definition 名称: ${name}`);
154
+ }
155
+ }
156
+ function validateLocalReferences(root, definitions) {
157
+ let nodes = 0;
158
+ const visit = (value, depth) => {
159
+ nodes += 1;
160
+ if (nodes > MAX_SCHEMA_NODES || depth > MAX_SCHEMA_DEPTH) {
161
+ throw schemaCompositionError('JSON Schema 超出组合深度或节点上限');
162
+ }
163
+ if (Array.isArray(value)) {
164
+ for (const item of value)
165
+ visit(item, depth + 1);
166
+ return;
167
+ }
168
+ if (!isRecord(value))
169
+ return;
170
+ if ('$ref' in value) {
171
+ const match = /^#\/\$defs\/([A-Za-z][A-Za-z0-9_-]{0,63})$/.exec(String(value.$ref));
172
+ if (!match || !definitions.has(match[1])) {
173
+ throw schemaCompositionError(`只允许引用已声明的本地 $defs: ${value.$ref}`);
174
+ }
175
+ }
176
+ for (const child of Object.values(value))
177
+ visit(child, depth + 1);
178
+ };
179
+ visit(root, 0);
180
+ }
181
+ function cloneSchema(schema) {
182
+ return structuredClone(schema);
183
+ }
184
+ function isRecord(value) {
185
+ return typeof value === 'object' && value !== null;
186
+ }
187
+ function schemaCompositionError(message) {
188
+ return new Error(`OPENXIANGDA_SCHEMA_COMPOSITION_INVALID: ${message}`);
189
+ }
190
+ function isArraySchema(schema) {
191
+ return schema.type === 'array';
192
+ }
193
+ //# sourceMappingURL=schema-composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-composition.js","sourceRoot":"","sources":["../../src/compiler/schema-composition.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from 'openxiangda-compiler';
1
+ export * from './compiler/config.js';
2
2
  //# sourceMappingURL=config.d.ts.map
package/dist/config.js CHANGED
@@ -1,2 +1,2 @@
1
- export * from 'openxiangda-compiler';
1
+ export * from './compiler/config.js';
2
2
  //# sourceMappingURL=config.js.map
@@ -0,0 +1,7 @@
1
+ import type { OpenXiangdaAppConfig } from './compiler/config.js';
2
+ /** 本地完整纯编译不创建客户端,不读取账号、环境、数据库或网络。 */
3
+ export declare function compileLocalConfiguration(config: OpenXiangdaAppConfig, toolchainVersion: string): {
4
+ sources: import("./compiler/bundle.js").CompiledApplicationSources;
5
+ compiled: import("openxiangda-contracts/native-compiler").NativeConfigurationCompilerResult;
6
+ };
7
+ //# sourceMappingURL=configuration-preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration-preflight.d.ts","sourceRoot":"","sources":["../src/configuration-preflight.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,qCAAqC;AACrC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM;;;EAQ/F"}
@@ -0,0 +1,13 @@
1
+ import { compileNativeApplicationConfiguration } from 'openxiangda-contracts/native-compiler';
2
+ import { compileApplicationSources } from './compiler/bundle.js';
3
+ /** 本地完整纯编译不创建客户端,不读取账号、环境、数据库或网络。 */
4
+ export function compileLocalConfiguration(config, toolchainVersion) {
5
+ const sources = compileApplicationSources(config, toolchainVersion);
6
+ const compiled = compileNativeApplicationConfiguration({
7
+ appCode: config.app.code,
8
+ configBytes: sources.config.content, contractBytes: sources.contracts.content,
9
+ expectedConfigDigest: sources.config.digest, expectedContractDigest: sources.contracts.digest,
10
+ });
11
+ return { sources, compiled };
12
+ }
13
+ //# sourceMappingURL=configuration-preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration-preflight.js","sourceRoot":"","sources":["../src/configuration-preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,uCAAuC,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,qCAAqC;AACrC,MAAM,UAAU,yBAAyB,CAAC,MAA4B,EAAE,gBAAwB;IAC9F,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,qCAAqC,CAAC;QACrD,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;QACxB,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO;QAC7E,oBAAoB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM;KAC9F,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,62 @@
1
+ import type { ApplicationEnvironment, DeploymentEnvironment } from "openxiangda-contracts";
2
+ import type { OpenXiangdaDeveloperSession } from "./session.js";
3
+ export interface ConnectedDevelopmentGrant {
4
+ id: string;
5
+ token: string;
6
+ expiresAt: string;
7
+ mode: "published-resources" | "manifest-overlay";
8
+ manifestOverlay: boolean;
9
+ manifestDigest: string | null;
10
+ }
11
+ export interface ConnectedDevelopmentSessionApi {
12
+ create(): Promise<ConnectedDevelopmentGrant>;
13
+ current(token: string): Promise<Omit<ConnectedDevelopmentGrant, "token">>;
14
+ refresh(token: string): Promise<Omit<ConnectedDevelopmentGrant, "token">>;
15
+ revoke(token: string): Promise<void>;
16
+ }
17
+ export interface ConnectedDevelopmentOptions {
18
+ root: string;
19
+ appCode: string;
20
+ platformBaseUrl: string;
21
+ environment: ApplicationEnvironment;
22
+ developerSession: OpenXiangdaDeveloperSession;
23
+ remoteSession: ConnectedDevelopmentSessionApi;
24
+ noOpen?: boolean;
25
+ webPort?: number;
26
+ onStatus?: (message: string) => void;
27
+ readinessTimeoutMs?: number;
28
+ /** @internal deterministic proxy port for verification. */
29
+ proxyPort?: number;
30
+ /** @internal observes a ready session without exposing credentials. */
31
+ onReady?: (session: ConnectedDevelopmentSession) => void | Promise<void>;
32
+ }
33
+ export interface ConnectedDevelopmentSession {
34
+ mode: "connected";
35
+ appCode: string;
36
+ environment: {
37
+ key: DeploymentEnvironment;
38
+ label: "test" | "production";
39
+ id: string;
40
+ productionData: boolean;
41
+ };
42
+ urls: {
43
+ web: string;
44
+ app: string;
45
+ proxy: string;
46
+ platform: string;
47
+ };
48
+ ports: {
49
+ web: number;
50
+ app: number;
51
+ proxy: number;
52
+ };
53
+ publishedResourcesOnly: boolean;
54
+ manifestOverlay: boolean;
55
+ }
56
+ export interface ConnectedDevelopmentResult {
57
+ exitCode: number;
58
+ session: ConnectedDevelopmentSession;
59
+ }
60
+ export declare function selectConnectedDevelopmentEnvironment(environments: ApplicationEnvironment[]): ApplicationEnvironment | undefined;
61
+ export declare function runConnectedDevelopment(input: ConnectedDevelopmentOptions): Promise<ConnectedDevelopmentResult>;
62
+ //# sourceMappingURL=connected-development.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connected-development.d.ts","sourceRoot":"","sources":["../src/connected-development.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAOhE,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,qBAAqB,GAAG,kBAAkB,CAAC;IACjD,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,sBAAsB,CAAC;IACpC,gBAAgB,EAAE,2BAA2B,CAAC;IAC9C,aAAa,EAAE,8BAA8B,CAAC;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE;QACX,GAAG,EAAE,qBAAqB,CAAC;QAC3B,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC;QAC7B,EAAE,EAAE,MAAM,CAAC;QACX,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,sBAAsB,EAAE,OAAO,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,2BAA2B,CAAC;CACtC;AAED,wBAAgB,qCAAqC,CACnD,YAAY,EAAE,sBAAsB,EAAE,sCASvC;AAED,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,0BAA0B,CAAC,CAgKrC"}