openxiangda 1.0.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/README.md +58 -0
  2. package/bin/openxiangda.js +11 -0
  3. package/lib/cli.js +2423 -0
  4. package/lib/config.js +121 -0
  5. package/lib/http.js +47 -0
  6. package/lib/skills.js +371 -0
  7. package/lib/utils.js +87 -0
  8. package/lib/workspace-init.js +139 -0
  9. package/openxiangda-skills/SKILL.md +128 -0
  10. package/openxiangda-skills/references/architecture-patterns.md +242 -0
  11. package/openxiangda-skills/references/automation-v3.md +129 -0
  12. package/openxiangda-skills/references/component-guide.md +198 -0
  13. package/openxiangda-skills/references/forms/component-registry.md +53 -0
  14. package/openxiangda-skills/references/forms/form-schema.md +109 -0
  15. package/openxiangda-skills/references/forms/layout-and-rules.md +24 -0
  16. package/openxiangda-skills/references/openxiangda-api.md +466 -0
  17. package/openxiangda-skills/references/pages/page-sdk.md +13 -0
  18. package/openxiangda-skills/references/pages/publish-flow.md +36 -0
  19. package/openxiangda-skills/references/pages/workspace-structure.md +38 -0
  20. package/openxiangda-skills/references/permissions-settings.md +147 -0
  21. package/openxiangda-skills/references/platform-data-model.md +305 -0
  22. package/openxiangda-skills/references/style-system.md +492 -0
  23. package/openxiangda-skills/references/troubleshooting.md +246 -0
  24. package/openxiangda-skills/references/workflow-v3.md +105 -0
  25. package/openxiangda-skills/references/workspace-state.md +45 -0
  26. package/openxiangda-skills/skills/openxiangda-app/SKILL.md +64 -0
  27. package/openxiangda-skills/skills/openxiangda-core/SKILL.md +143 -0
  28. package/openxiangda-skills/skills/openxiangda-form/SKILL.md +76 -0
  29. package/openxiangda-skills/skills/openxiangda-inspect/SKILL.md +40 -0
  30. package/openxiangda-skills/skills/openxiangda-page/SKILL.md +62 -0
  31. package/openxiangda-skills/skills/openxiangda-permission-settings/SKILL.md +95 -0
  32. package/openxiangda-skills/skills/openxiangda-workflow-automation/SKILL.md +97 -0
  33. package/package.json +126 -0
  34. package/packages/sdk/bin/lowcode-workspace.mjs +4 -0
  35. package/packages/sdk/dist/build/index.cjs +33 -0
  36. package/packages/sdk/dist/build/index.cjs.map +1 -0
  37. package/packages/sdk/dist/build/index.d.mts +40 -0
  38. package/packages/sdk/dist/build/index.d.ts +40 -0
  39. package/packages/sdk/dist/build/index.mjs +8 -0
  40. package/packages/sdk/dist/build/index.mjs.map +1 -0
  41. package/packages/sdk/dist/components/index.cjs +18700 -0
  42. package/packages/sdk/dist/components/index.cjs.map +1 -0
  43. package/packages/sdk/dist/components/index.d.mts +2094 -0
  44. package/packages/sdk/dist/components/index.d.ts +2094 -0
  45. package/packages/sdk/dist/components/index.mjs +18649 -0
  46. package/packages/sdk/dist/components/index.mjs.map +1 -0
  47. package/packages/sdk/dist/runtime/index.cjs +1469 -0
  48. package/packages/sdk/dist/runtime/index.cjs.map +1 -0
  49. package/packages/sdk/dist/runtime/index.d.mts +831 -0
  50. package/packages/sdk/dist/runtime/index.d.ts +831 -0
  51. package/packages/sdk/dist/runtime/index.mjs +1420 -0
  52. package/packages/sdk/dist/runtime/index.mjs.map +1 -0
  53. package/packages/sdk/dist/styles/antd-theme.cjs +60 -0
  54. package/packages/sdk/dist/styles/antd-theme.cjs.map +1 -0
  55. package/packages/sdk/dist/styles/antd-theme.d.mts +5 -0
  56. package/packages/sdk/dist/styles/antd-theme.d.ts +5 -0
  57. package/packages/sdk/dist/styles/antd-theme.mjs +35 -0
  58. package/packages/sdk/dist/styles/antd-theme.mjs.map +1 -0
  59. package/packages/sdk/dist/styles/tailwind-preset.cjs +2641 -0
  60. package/packages/sdk/dist/styles/tailwind-preset.cjs.map +1 -0
  61. package/packages/sdk/dist/styles/tailwind-preset.d.mts +75 -0
  62. package/packages/sdk/dist/styles/tailwind-preset.d.ts +75 -0
  63. package/packages/sdk/dist/styles/tailwind-preset.mjs +2618 -0
  64. package/packages/sdk/dist/styles/tailwind-preset.mjs.map +1 -0
  65. package/packages/sdk/dist/styles/tokens.css +73 -0
  66. package/packages/sdk/src/build-source/README.md +9 -0
  67. package/packages/sdk/src/build-source/bin/lowcode-workspace.mjs +7 -0
  68. package/packages/sdk/src/build-source/package.json +34 -0
  69. package/packages/sdk/src/build-source/scripts/build-forms.mjs +824 -0
  70. package/packages/sdk/src/build-source/scripts/build-forms.runtime-entry.test.ts +18 -0
  71. package/packages/sdk/src/build-source/scripts/build-pages.mjs +793 -0
  72. package/packages/sdk/src/build-source/scripts/build-workspace.mjs +64 -0
  73. package/packages/sdk/src/build-source/scripts/publish-all.mjs +127 -0
  74. package/packages/sdk/src/build-source/scripts/publish-oss.mjs +149 -0
  75. package/packages/sdk/src/build-source/scripts/register-bundle.mjs +1 -0
  76. package/packages/sdk/src/build-source/scripts/register.mjs +329 -0
  77. package/packages/sdk/src/build-source/scripts/sync-schema.mjs +301 -0
  78. package/packages/sdk/src/build-source/scripts/utils/form-api.mjs +639 -0
  79. package/packages/sdk/src/build-source/scripts/utils/form-api.test.ts +244 -0
  80. package/packages/sdk/src/build-source/scripts/utils/form-runtime-assets.mjs +57 -0
  81. package/packages/sdk/src/build-source/scripts/utils/form-runtime-assets.test.ts +135 -0
  82. package/packages/sdk/src/build-source/scripts/utils/incremental.mjs +210 -0
  83. package/packages/sdk/src/build-source/scripts/utils/load-config.mjs +257 -0
  84. package/packages/sdk/src/build-source/scripts/utils/load-config.test.ts +44 -0
  85. package/packages/sdk/src/build-source/scripts/utils/mime-types.mjs +70 -0
  86. package/packages/sdk/src/build-source/scripts/utils/namespace-css.mjs +61 -0
  87. package/packages/sdk/src/build-source/scripts/utils/oss-client.mjs +128 -0
  88. package/packages/sdk/src/build-source/scripts/utils/pages.mjs +80 -0
  89. package/packages/sdk/src/build-source/scripts/utils/progress.mjs +57 -0
  90. package/packages/sdk/src/build-source/scripts/utils/register-payload.mjs +89 -0
  91. package/packages/sdk/src/build-source/scripts/utils/register-payload.test.ts +76 -0
  92. package/packages/sdk/src/build-source/scripts/utils/runtime-css-check.mjs +44 -0
  93. package/packages/sdk/src/build-source/scripts/utils/runtime-css-check.test.ts +54 -0
  94. package/packages/sdk/src/build-source/scripts/utils/schema-transform.mjs +130 -0
  95. package/packages/sdk/src/build-source/scripts/utils/schema-transform.test.ts +141 -0
  96. package/packages/sdk/src/build-source/scripts/utils/tailwind-config.mjs +227 -0
  97. package/packages/sdk/src/build-source/scripts/utils/tailwind-config.test.ts +187 -0
  98. package/packages/sdk/src/build-source/src/cli.mjs +679 -0
  99. package/templates/sy-lowcode-app-workspace/app-workspace.config.ts +34 -0
  100. package/templates/sy-lowcode-app-workspace/examples/forms/customer/page.tsx +1 -0
  101. package/templates/sy-lowcode-app-workspace/examples/forms/customer/schema.ts +35 -0
  102. package/templates/sy-lowcode-app-workspace/index.html +12 -0
  103. package/templates/sy-lowcode-app-workspace/package.json +49 -0
  104. package/templates/sy-lowcode-app-workspace/postcss.config.cjs +6 -0
  105. package/templates/sy-lowcode-app-workspace/scripts/build-js-code.mjs +100 -0
  106. package/templates/sy-lowcode-app-workspace/src/dev/App.tsx +26 -0
  107. package/templates/sy-lowcode-app-workspace/src/forms/.gitkeep +1 -0
  108. package/templates/sy-lowcode-app-workspace/src/forms/README.md +48 -0
  109. package/templates/sy-lowcode-app-workspace/src/index.css +28 -0
  110. package/templates/sy-lowcode-app-workspace/src/js-code-nodes/.gitkeep +1 -0
  111. package/templates/sy-lowcode-app-workspace/src/js-code-nodes/types.d.ts +3 -0
  112. package/templates/sy-lowcode-app-workspace/src/main.tsx +36 -0
  113. package/templates/sy-lowcode-app-workspace/src/pages/.gitkeep +1 -0
  114. package/templates/sy-lowcode-app-workspace/src/shared/form-schema.ts +128 -0
  115. package/templates/sy-lowcode-app-workspace/src/types/app-workspace.types.ts +31 -0
  116. package/templates/sy-lowcode-app-workspace/tailwind.config.cjs +30 -0
  117. package/templates/sy-lowcode-app-workspace/tsconfig.app.json +24 -0
  118. package/templates/sy-lowcode-app-workspace/tsconfig.js-code-nodes.json +15 -0
  119. package/templates/sy-lowcode-app-workspace/tsconfig.json +7 -0
  120. package/templates/sy-lowcode-app-workspace/tsconfig.node.json +10 -0
  121. package/templates/sy-lowcode-app-workspace/vite.config.ts +32 -0
@@ -0,0 +1,1420 @@
1
+ // packages/sdk/src/runtime/core/client.ts
2
+ var isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3
+ var isSearchRuleLike = (value) => isRecord(value) && typeof value.key === "string" && (value.componentName === void 0 || typeof value.componentName === "string");
4
+ var isBlobLike = (value) => typeof Blob !== "undefined" && value instanceof Blob;
5
+ var normalizeMethod = (value) => {
6
+ const method = String(value || "get").toLowerCase();
7
+ if (method === "get" || method === "post" || method === "put" || method === "delete" || method === "patch") {
8
+ return method;
9
+ }
10
+ return "get";
11
+ };
12
+ var resolveAppType = (context, explicitAppType) => {
13
+ const appType = String(explicitAppType || context.app.appType || "").trim();
14
+ if (!appType) {
15
+ throw new Error("appType \u4E0D\u80FD\u4E3A\u7A7A");
16
+ }
17
+ return appType;
18
+ };
19
+ var buildAppPath = (context, explicitAppType, suffix) => `/${resolveAppType(context, explicitAppType)}${suffix}`;
20
+ var encodePathSegment = (value) => encodeURIComponent(String(value));
21
+ var getHeaderValue = (headers, name) => {
22
+ if (!headers) {
23
+ return void 0;
24
+ }
25
+ const target = name.toLowerCase();
26
+ const entry = Object.entries(headers).find(
27
+ ([key]) => key.toLowerCase() === target
28
+ );
29
+ return entry ? String(entry[1]) : void 0;
30
+ };
31
+ var parseContentDispositionFileName = (contentDisposition) => {
32
+ if (!contentDisposition) {
33
+ return void 0;
34
+ }
35
+ const utf8Match = contentDisposition.match(/filename\*=UTF-8''([^;]+)/i);
36
+ if (utf8Match?.[1]) {
37
+ try {
38
+ return decodeURIComponent(utf8Match[1]);
39
+ } catch {
40
+ return utf8Match[1];
41
+ }
42
+ }
43
+ const quotedMatch = contentDisposition.match(/filename="([^"]+)"/i);
44
+ if (quotedMatch?.[1]) {
45
+ return quotedMatch[1];
46
+ }
47
+ const plainMatch = contentDisposition.match(/filename=([^;]+)/i);
48
+ if (plainMatch?.[1]) {
49
+ return plainMatch[1].trim();
50
+ }
51
+ return void 0;
52
+ };
53
+ var serializeQuery = (query) => {
54
+ if (!query) {
55
+ return void 0;
56
+ }
57
+ const params = new URLSearchParams();
58
+ const appendValue = (key, value) => {
59
+ if (value === void 0 || value === null || value === "") {
60
+ return;
61
+ }
62
+ if (Array.isArray(value)) {
63
+ value.forEach((item) => appendValue(key, item));
64
+ return;
65
+ }
66
+ if (value instanceof Date) {
67
+ params.append(key, value.toISOString());
68
+ return;
69
+ }
70
+ params.append(key, String(value));
71
+ };
72
+ Object.entries(query).forEach(([key, value]) => {
73
+ appendValue(key, value);
74
+ });
75
+ const serialized = params.toString();
76
+ return serialized || void 0;
77
+ };
78
+ var toLegacyRules = (value) => Object.entries(value).flatMap(([key, itemValue]) => {
79
+ if (itemValue === void 0) {
80
+ return [];
81
+ }
82
+ return [
83
+ {
84
+ key,
85
+ operator: Array.isArray(itemValue) ? "IN" : "EQ",
86
+ value: itemValue
87
+ }
88
+ ];
89
+ });
90
+ var toSearchGroup = (value) => {
91
+ if (value === void 0 || value === null || value === "") {
92
+ return void 0;
93
+ }
94
+ if (typeof value === "string") {
95
+ try {
96
+ return toSearchGroup(JSON.parse(value));
97
+ } catch {
98
+ return void 0;
99
+ }
100
+ }
101
+ if (Array.isArray(value)) {
102
+ const rules = [];
103
+ const conditions = [];
104
+ value.forEach((item) => {
105
+ const group = toSearchGroup(item);
106
+ if (group) {
107
+ if (group.rules?.length) {
108
+ rules.push(...group.rules);
109
+ }
110
+ if (group.conditions?.length) {
111
+ conditions.push(...group.conditions);
112
+ }
113
+ return;
114
+ }
115
+ if (isSearchRuleLike(item)) {
116
+ rules.push(item);
117
+ return;
118
+ }
119
+ if (isRecord(item)) {
120
+ rules.push(...toLegacyRules(item));
121
+ }
122
+ });
123
+ if (rules.length === 0 && conditions.length === 0) {
124
+ return void 0;
125
+ }
126
+ return {
127
+ logic: "AND",
128
+ ...rules.length > 0 ? { rules } : {},
129
+ ...conditions.length > 0 ? { conditions } : {}
130
+ };
131
+ }
132
+ if (isRecord(value)) {
133
+ if (isSearchRuleLike(value)) {
134
+ return {
135
+ logic: "AND",
136
+ rules: [value]
137
+ };
138
+ }
139
+ if ("rules" in value || "conditions" in value || "logic" in value) {
140
+ const nextGroup = {
141
+ logic: value.logic === "OR" || value.logic === "AND" ? value.logic : "AND"
142
+ };
143
+ if (Array.isArray(value.rules)) {
144
+ nextGroup.rules = value.rules.filter(isSearchRuleLike);
145
+ }
146
+ if (Array.isArray(value.conditions)) {
147
+ nextGroup.conditions = value.conditions.map((item) => toSearchGroup(item)).filter((item) => Boolean(item));
148
+ }
149
+ if (!nextGroup.rules?.length && !nextGroup.conditions?.length) {
150
+ return void 0;
151
+ }
152
+ return nextGroup;
153
+ }
154
+ const rules = toLegacyRules(value);
155
+ if (rules.length === 0) {
156
+ return void 0;
157
+ }
158
+ return {
159
+ logic: "AND",
160
+ rules
161
+ };
162
+ }
163
+ return void 0;
164
+ };
165
+ var mergeSearchExpressions = (base, extra) => {
166
+ const baseGroup = toSearchGroup(base);
167
+ const extraGroup = toSearchGroup(extra);
168
+ if (!baseGroup) {
169
+ return extraGroup;
170
+ }
171
+ if (!extraGroup) {
172
+ return baseGroup;
173
+ }
174
+ return {
175
+ logic: "AND",
176
+ conditions: [baseGroup, extraGroup]
177
+ };
178
+ };
179
+ var serializeSearchExpression = (value) => {
180
+ if (value === void 0 || value === null || value === "") {
181
+ return void 0;
182
+ }
183
+ if (typeof value === "string") {
184
+ return value;
185
+ }
186
+ const group = toSearchGroup(value);
187
+ return group ? JSON.stringify(group) : void 0;
188
+ };
189
+ var normalizeAdvancedOrder = (value) => {
190
+ if (!value) {
191
+ return void 0;
192
+ }
193
+ const nextValue = Array.isArray(value) ? value : [value];
194
+ return JSON.stringify(nextValue);
195
+ };
196
+ var normalizeDynamicOrder = (value) => {
197
+ if (!value) {
198
+ return void 0;
199
+ }
200
+ if (typeof value === "string") {
201
+ return value;
202
+ }
203
+ return `${value.id}:${value.isAsc === "n" ? "-" : "+"}`;
204
+ };
205
+ var normalizeJsonResponse = (rawResponse) => {
206
+ const topLevelCode = Number(rawResponse?.code);
207
+ const nestedCode = Number(
208
+ rawResponse?.data?.code
209
+ );
210
+ const code = Number.isFinite(topLevelCode) ? topLevelCode : Number.isFinite(nestedCode) ? nestedCode : 200;
211
+ const topLevelResult = isRecord(rawResponse) && "result" in rawResponse ? rawResponse.result : void 0;
212
+ const nestedResult = isRecord(rawResponse?.data) && "result" in (rawResponse.data || {}) ? rawResponse.data?.result : void 0;
213
+ const topLevelData = isRecord(rawResponse) && "data" in rawResponse ? rawResponse.data : void 0;
214
+ const result = topLevelResult !== void 0 ? topLevelResult : nestedResult !== void 0 ? nestedResult : topLevelData !== void 0 ? topLevelData : isRecord(rawResponse) ? rawResponse : null;
215
+ const nestedSuccess = typeof rawResponse?.data?.success === "boolean" ? rawResponse.data?.success : void 0;
216
+ const success = typeof rawResponse?.success === "boolean" ? Boolean(rawResponse.success) : typeof nestedSuccess === "boolean" ? Boolean(nestedSuccess) : code >= 200 && code < 300;
217
+ return {
218
+ code,
219
+ success,
220
+ message: typeof rawResponse?.message === "string" ? rawResponse.message : typeof rawResponse?.data?.message === "string" ? rawResponse.data?.message : void 0,
221
+ result,
222
+ data: topLevelData !== void 0 ? topLevelData : topLevelResult !== void 0 ? topLevelResult : void 0,
223
+ raw: rawResponse
224
+ };
225
+ };
226
+ var normalizeBinaryResponse = (rawResponse) => {
227
+ if (isRecord(rawResponse) && isBlobLike(rawResponse.blob)) {
228
+ return rawResponse;
229
+ }
230
+ if (isBlobLike(rawResponse)) {
231
+ return {
232
+ blob: rawResponse,
233
+ raw: rawResponse
234
+ };
235
+ }
236
+ const responseData = rawResponse?.data;
237
+ const responseHeaders = isRecord(
238
+ rawResponse?.headers
239
+ ) ? rawResponse.headers : void 0;
240
+ if (!isBlobLike(responseData)) {
241
+ throw new Error("transport.download \u672A\u8FD4\u56DE Blob \u6570\u636E");
242
+ }
243
+ const contentDisposition = getHeaderValue(
244
+ responseHeaders,
245
+ "content-disposition"
246
+ );
247
+ return {
248
+ blob: responseData,
249
+ fileName: parseContentDispositionFileName(contentDisposition),
250
+ contentType: getHeaderValue(responseHeaders, "content-type") || responseData.type,
251
+ headers: responseHeaders ? Object.fromEntries(
252
+ Object.entries(responseHeaders).map(([key, value]) => [
253
+ key,
254
+ value === void 0 ? void 0 : String(value)
255
+ ])
256
+ ) : void 0,
257
+ raw: rawResponse
258
+ };
259
+ };
260
+ var toSdkError = (input, payload) => {
261
+ const normalizedResponse = isRecord(input) ? normalizeJsonResponse(input) : void 0;
262
+ const nextError = input instanceof Error ? input : new Error(
263
+ normalizedResponse?.message || `\u8BF7\u6C42\u5931\u8D25: ${String(payload.method).toUpperCase()} ${payload.path}`
264
+ );
265
+ const sdkError = nextError;
266
+ sdkError.method = String(payload.method).toUpperCase();
267
+ sdkError.path = payload.path;
268
+ sdkError.response = normalizedResponse;
269
+ sdkError.raw = input;
270
+ return sdkError;
271
+ };
272
+ var ensureSuccess = (response, payload) => {
273
+ if (!response.success) {
274
+ throw toSdkError(response, payload);
275
+ }
276
+ return response;
277
+ };
278
+ var resolveFormInstanceId = (params) => {
279
+ const formInstanceId = String(
280
+ params.formInstId || params.formInstanceId || ""
281
+ ).trim();
282
+ if (!formInstanceId) {
283
+ throw new Error("formInstanceId \u4E0D\u80FD\u4E3A\u7A7A");
284
+ }
285
+ return formInstanceId;
286
+ };
287
+ var withDefaultAppType = (context, params) => {
288
+ if (!params) {
289
+ return params;
290
+ }
291
+ if (params.appType) {
292
+ return params;
293
+ }
294
+ if (params.scope === "app") {
295
+ return {
296
+ ...params,
297
+ appType: context.app.appType
298
+ };
299
+ }
300
+ return params;
301
+ };
302
+ var createPageSdk = (context) => {
303
+ const request = async (options) => {
304
+ const payload = {
305
+ path: options.path,
306
+ method: normalizeMethod(options.method),
307
+ query: serializeQuery(options.query),
308
+ body: options.body,
309
+ headers: options.headers
310
+ };
311
+ try {
312
+ const rawResponse = await context.bridge.invoke(
313
+ "transport.request",
314
+ payload
315
+ );
316
+ return ensureSuccess(
317
+ normalizeJsonResponse(rawResponse),
318
+ payload
319
+ );
320
+ } catch (error) {
321
+ throw toSdkError(error, payload);
322
+ }
323
+ };
324
+ const download = async (options) => {
325
+ const payload = {
326
+ path: options.path,
327
+ method: normalizeMethod(options.method),
328
+ query: serializeQuery(options.query),
329
+ body: options.body,
330
+ headers: options.headers
331
+ };
332
+ try {
333
+ const rawResponse = await context.bridge.invoke(
334
+ "transport.download",
335
+ payload
336
+ );
337
+ return normalizeBinaryResponse(rawResponse);
338
+ } catch (error) {
339
+ throw toSdkError(error, payload);
340
+ }
341
+ };
342
+ const form = {
343
+ getDetail: (params) => request({
344
+ path: buildAppPath(
345
+ context,
346
+ params.appType,
347
+ "/v1/form/getFormDataById.json"
348
+ ),
349
+ method: "get",
350
+ query: {
351
+ formUuid: params.formUuid,
352
+ formInstId: resolveFormInstanceId(params)
353
+ }
354
+ }),
355
+ create: (params) => request({
356
+ path: buildAppPath(
357
+ context,
358
+ params.appType,
359
+ "/v1/form/saveFormData.json"
360
+ ),
361
+ method: "post",
362
+ body: {
363
+ formUuid: params.formUuid,
364
+ formDataJson: JSON.stringify(params.data || {})
365
+ }
366
+ }),
367
+ update: (params) => request({
368
+ path: buildAppPath(
369
+ context,
370
+ params.appType,
371
+ "/v1/form/updateFormData.json"
372
+ ),
373
+ method: "post",
374
+ body: {
375
+ formUuid: params.formUuid,
376
+ formInstId: resolveFormInstanceId(params),
377
+ updateFormDataJson: params.updateFormDataJson || JSON.stringify(params.data || {})
378
+ }
379
+ }),
380
+ remove: (params) => request({
381
+ path: buildAppPath(
382
+ context,
383
+ params.appType,
384
+ "/v1/form/deleteFormData.json"
385
+ ),
386
+ method: "post",
387
+ body: {
388
+ formUuid: params.formUuid,
389
+ formInstId: resolveFormInstanceId(params)
390
+ }
391
+ }),
392
+ getChangeRecords: (params) => request({
393
+ path: buildAppPath(
394
+ context,
395
+ params.appType,
396
+ "/v1/form/getFormDataChangeRecords.json"
397
+ ),
398
+ method: "get",
399
+ query: {
400
+ formUuid: params.formUuid,
401
+ formInstId: resolveFormInstanceId(params),
402
+ page: params.page,
403
+ pageSize: params.pageSize
404
+ }
405
+ }),
406
+ search: (params) => request({
407
+ path: buildAppPath(
408
+ context,
409
+ params.appType,
410
+ "/v1/form/searchFormDatas.json"
411
+ ),
412
+ method: "get",
413
+ query: {
414
+ formUuid: params.formUuid,
415
+ searchFieldJson: serializeSearchExpression(params.search),
416
+ currentPage: params.currentPage,
417
+ pageSize: params.pageSize,
418
+ originatorId: params.originatorId,
419
+ createFrom: params.createFrom,
420
+ createTo: params.createTo,
421
+ modifiedFrom: params.modifiedFrom,
422
+ modifiedTo: params.modifiedTo,
423
+ dynamicOrder: normalizeDynamicOrder(params.dynamicOrder),
424
+ instanceStatus: params.instanceStatus
425
+ }
426
+ }),
427
+ searchIds: (params) => request({
428
+ path: buildAppPath(
429
+ context,
430
+ params.appType,
431
+ "/v1/form/searchFormDataIds.json"
432
+ ),
433
+ method: "get",
434
+ query: {
435
+ formUuid: params.formUuid,
436
+ searchFieldJson: serializeSearchExpression(params.search),
437
+ currentPage: params.currentPage,
438
+ pageSize: params.pageSize,
439
+ originatorId: params.originatorId,
440
+ createFrom: params.createFrom,
441
+ createTo: params.createTo,
442
+ modifiedFrom: params.modifiedFrom,
443
+ modifiedTo: params.modifiedTo,
444
+ dynamicOrder: normalizeDynamicOrder(params.dynamicOrder),
445
+ instanceStatus: params.instanceStatus
446
+ }
447
+ }),
448
+ advancedSearch: (params) => request({
449
+ path: buildAppPath(
450
+ context,
451
+ params.appType,
452
+ "/v1/form/advancedSearch.json"
453
+ ),
454
+ method: "get",
455
+ query: {
456
+ formUuid: params.formUuid,
457
+ filters: serializeSearchExpression(params.filters),
458
+ conditionType: params.conditionType,
459
+ searchKeyWord: params.searchKeyWord,
460
+ currentPage: params.currentPage,
461
+ pageSize: params.pageSize,
462
+ order: normalizeAdvancedOrder(params.order),
463
+ instanceStatus: params.instanceStatus
464
+ }
465
+ }),
466
+ advancedExport: (params) => download({
467
+ path: buildAppPath(
468
+ context,
469
+ params.appType,
470
+ "/v1/form/advancedExport.xlsx"
471
+ ),
472
+ method: "get",
473
+ query: {
474
+ formUuid: params.formUuid,
475
+ filters: serializeSearchExpression(params.filters),
476
+ conditionType: params.conditionType,
477
+ searchKeyWord: params.searchKeyWord,
478
+ currentPage: params.currentPage,
479
+ pageSize: params.pageSize,
480
+ order: normalizeAdvancedOrder(params.order),
481
+ instanceStatus: params.instanceStatus,
482
+ exportAll: params.exportAll,
483
+ embedImages: params.embedImages,
484
+ exportFields: params.exportFields?.join(",")
485
+ }
486
+ }),
487
+ downloadImportTemplate: (params) => download({
488
+ path: buildAppPath(
489
+ context,
490
+ params.appType,
491
+ "/v1/form/advancedExportTemplate.xlsx"
492
+ ),
493
+ method: "get",
494
+ query: {
495
+ formUuid: params.formUuid
496
+ }
497
+ }),
498
+ importPreview: (params) => request({
499
+ path: buildAppPath(
500
+ context,
501
+ params.appType,
502
+ "/v1/form/importPreview.xlsx"
503
+ ),
504
+ method: "post",
505
+ body: {
506
+ formUuid: params.formUuid,
507
+ fileBase64: params.fileBase64,
508
+ fileName: params.fileName
509
+ }
510
+ }),
511
+ importExcel: (params) => request({
512
+ path: buildAppPath(context, params.appType, "/v1/form/import.xlsx"),
513
+ method: "post",
514
+ body: {
515
+ formUuid: params.formUuid,
516
+ fileBase64: params.fileBase64,
517
+ fileName: params.fileName
518
+ }
519
+ }),
520
+ getImportRecords: (params) => request({
521
+ path: buildAppPath(
522
+ context,
523
+ params.appType,
524
+ "/v1/form/importRecords.json"
525
+ ),
526
+ method: "get",
527
+ query: {
528
+ formUuid: params.formUuid,
529
+ currentPage: params.currentPage,
530
+ pageSize: params.pageSize
531
+ }
532
+ }),
533
+ getExportRecords: (params) => request({
534
+ path: buildAppPath(
535
+ context,
536
+ params.appType,
537
+ "/v1/form/exportRecords.json"
538
+ ),
539
+ method: "get",
540
+ query: {
541
+ formUuid: params.formUuid,
542
+ currentPage: params.currentPage,
543
+ pageSize: params.pageSize
544
+ }
545
+ }),
546
+ downloadImportSource: (params) => download({
547
+ path: buildAppPath(
548
+ context,
549
+ params.appType,
550
+ "/v1/form/importRecord/downloadSource.xlsx"
551
+ ),
552
+ method: "get",
553
+ query: {
554
+ recordId: params.recordId
555
+ }
556
+ }),
557
+ downloadImportFailed: (params) => download({
558
+ path: buildAppPath(
559
+ context,
560
+ params.appType,
561
+ "/v1/form/importRecord/downloadFailed.xlsx"
562
+ ),
563
+ method: "get",
564
+ query: {
565
+ recordId: params.recordId
566
+ }
567
+ }),
568
+ downloadExportRecord: (params) => download({
569
+ path: buildAppPath(
570
+ context,
571
+ params.appType,
572
+ "/v1/form/exportRecord/download.xlsx"
573
+ ),
574
+ method: "get",
575
+ query: {
576
+ recordId: params.recordId
577
+ }
578
+ }),
579
+ getDataManagementConfig: (params) => request({
580
+ path: buildAppPath(
581
+ context,
582
+ params.appType,
583
+ "/v1/form/dataManagement/config/get.json"
584
+ ),
585
+ method: "get",
586
+ query: {
587
+ formUuid: params.formUuid
588
+ }
589
+ }),
590
+ saveDataManagementConfig: (params) => request({
591
+ path: buildAppPath(
592
+ context,
593
+ params.appType,
594
+ "/v1/form/dataManagement/config/save.json"
595
+ ),
596
+ method: "post",
597
+ body: {
598
+ formUuid: params.formUuid,
599
+ config: params.config
600
+ }
601
+ })
602
+ };
603
+ const user = {
604
+ create: (params) => request({
605
+ path: "/user/create",
606
+ method: "post",
607
+ body: params
608
+ }),
609
+ update: (params) => request({
610
+ path: "/user/update",
611
+ method: "put",
612
+ body: params
613
+ }),
614
+ remove: (id) => request({
615
+ path: `/user/${encodePathSegment(id)}`,
616
+ method: "delete"
617
+ }),
618
+ get: (id = "current") => request({
619
+ path: `/user/${encodePathSegment(id)}`,
620
+ method: "get"
621
+ }),
622
+ getCurrent: () => request({
623
+ path: "/user/current",
624
+ method: "get"
625
+ }),
626
+ getByUsername: (username) => request({
627
+ path: `/user/username/${encodePathSegment(username)}`,
628
+ method: "get"
629
+ }),
630
+ list: (params) => request({
631
+ path: "/user/list",
632
+ method: "get",
633
+ query: {
634
+ ids: params?.ids,
635
+ departmentIds: params?.departmentIds,
636
+ name: params?.name,
637
+ username: params?.username,
638
+ phone: params?.phone,
639
+ email: params?.email,
640
+ page: params?.page,
641
+ pageSize: params?.pageSize
642
+ }
643
+ }),
644
+ search: (keyword) => request({
645
+ path: "/user/search",
646
+ method: "get",
647
+ query: {
648
+ keyword
649
+ }
650
+ }),
651
+ listAll: () => request({
652
+ path: "/user/all",
653
+ method: "get"
654
+ }),
655
+ listByDepartment: (departmentId) => request({
656
+ path: `/user/department/${encodePathSegment(departmentId)}`,
657
+ method: "get"
658
+ }),
659
+ validate: (params) => request({
660
+ path: "/user/validate",
661
+ method: "post",
662
+ body: params
663
+ })
664
+ };
665
+ const getParentDepartments = (departmentId, options = {}) => request({
666
+ path: `/department/${encodePathSegment(departmentId)}/parentDepartments`,
667
+ method: "get",
668
+ query: {
669
+ includeSelf: options.includeSelf ?? true
670
+ }
671
+ });
672
+ const department = {
673
+ getParentDepartments,
674
+ getCurrentUserParentDepartments: async (options = {}) => {
675
+ const departments = (context.user.departments || []).filter(
676
+ (item) => typeof item.id === "string" && item.id.trim()
677
+ );
678
+ return Promise.all(
679
+ departments.map(async (item) => {
680
+ const response = await getParentDepartments(item.id || "", {
681
+ includeSelf: options.includeSelf
682
+ });
683
+ return {
684
+ department: item,
685
+ parents: response.result || []
686
+ };
687
+ })
688
+ );
689
+ }
690
+ };
691
+ const role = {
692
+ create: (params) => request({
693
+ path: "/role/",
694
+ method: "post",
695
+ body: params
696
+ }),
697
+ update: (id, params) => request({
698
+ path: `/role/${encodePathSegment(id)}`,
699
+ method: "put",
700
+ body: params
701
+ }),
702
+ remove: (id) => request({
703
+ path: `/role/${encodePathSegment(id)}`,
704
+ method: "delete"
705
+ }),
706
+ get: (id) => request({
707
+ path: `/role/${encodePathSegment(id)}`,
708
+ method: "get"
709
+ }),
710
+ list: (params) => request({
711
+ path: "/role/",
712
+ method: "get",
713
+ query: withDefaultAppType(context, params)
714
+ }),
715
+ listUsers: (roleId, params) => request({
716
+ path: `/role/${encodePathSegment(roleId)}/users`,
717
+ method: "get",
718
+ query: params
719
+ }),
720
+ assignRoles: (params) => request({
721
+ path: "/role/assign",
722
+ method: "post",
723
+ body: params
724
+ }),
725
+ addUserRole: (params) => request({
726
+ path: "/role/add",
727
+ method: "post",
728
+ body: params
729
+ }),
730
+ removeUserRole: (params) => request({
731
+ path: "/role/remove",
732
+ method: "post",
733
+ body: params
734
+ }),
735
+ batchAddUsers: (params) => request({
736
+ path: "/role/batch-add-users",
737
+ method: "post",
738
+ body: params
739
+ }),
740
+ getMyRoles: (params) => request({
741
+ path: "/role/my/roles",
742
+ method: "get",
743
+ query: withDefaultAppType(context, params)
744
+ }),
745
+ getCurrentRole: (params) => request({
746
+ path: "/role/my/current",
747
+ method: "get",
748
+ query: withDefaultAppType(context, params)
749
+ }),
750
+ switchPlatformRole: (params) => request({
751
+ path: "/role/switch/platform",
752
+ method: "post",
753
+ body: params
754
+ }),
755
+ switchAppRole: (params) => request({
756
+ path: "/role/switch/app",
757
+ method: "post",
758
+ body: {
759
+ ...params,
760
+ appType: resolveAppType(context, params.appType)
761
+ }
762
+ })
763
+ };
764
+ const permission = {
765
+ formGroup: {
766
+ create: (params) => request({
767
+ path: "/permission/form-group/",
768
+ method: "post",
769
+ body: {
770
+ ...params,
771
+ appType: resolveAppType(context, params.appType)
772
+ }
773
+ }),
774
+ update: (id, params) => request({
775
+ path: `/permission/form-group/${encodePathSegment(id)}`,
776
+ method: "put",
777
+ body: {
778
+ ...params,
779
+ ...params.appType ? { appType: resolveAppType(context, params.appType) } : {}
780
+ }
781
+ }),
782
+ remove: (id) => request({
783
+ path: `/permission/form-group/${encodePathSegment(id)}`,
784
+ method: "delete"
785
+ }),
786
+ get: (id) => request({
787
+ path: `/permission/form-group/${encodePathSegment(id)}`,
788
+ method: "get"
789
+ }),
790
+ list: (params) => request({
791
+ path: "/permission/form-group/",
792
+ method: "get",
793
+ query: {
794
+ ...params,
795
+ appType: resolveAppType(context, params?.appType)
796
+ }
797
+ }),
798
+ getViewFieldPermissions: (params) => request({
799
+ path: "/permission/form-group/field-permissions",
800
+ method: "get",
801
+ query: {
802
+ appType: resolveAppType(context, params.appType),
803
+ formUuid: params.formUuid
804
+ }
805
+ }),
806
+ getViewPermissionSummary: (params) => request({
807
+ path: "/permission/form-group/view-permissions",
808
+ method: "get",
809
+ query: {
810
+ appType: resolveAppType(context, params.appType),
811
+ formUuid: params.formUuid
812
+ }
813
+ })
814
+ },
815
+ pageGroup: {
816
+ create: (params) => request({
817
+ path: "/permission/page-group/",
818
+ method: "post",
819
+ body: {
820
+ ...params,
821
+ appType: resolveAppType(context, params.appType)
822
+ }
823
+ }),
824
+ update: (id, params) => request({
825
+ path: `/permission/page-group/${encodePathSegment(id)}`,
826
+ method: "put",
827
+ body: {
828
+ ...params,
829
+ ...params.appType ? { appType: resolveAppType(context, params.appType) } : {}
830
+ }
831
+ }),
832
+ remove: (id) => request({
833
+ path: `/permission/page-group/${encodePathSegment(id)}`,
834
+ method: "delete"
835
+ }),
836
+ get: (id) => request({
837
+ path: `/permission/page-group/${encodePathSegment(id)}`,
838
+ method: "get"
839
+ }),
840
+ list: (params) => request({
841
+ path: "/permission/page-group/",
842
+ method: "get",
843
+ query: {
844
+ ...params,
845
+ appType: resolveAppType(context, params?.appType)
846
+ }
847
+ }),
848
+ getUserMenuPermissions: (appType) => request({
849
+ path: "/permission/page-group/user-menu-permissions",
850
+ method: "get",
851
+ query: {
852
+ appType: resolveAppType(context, appType)
853
+ }
854
+ })
855
+ },
856
+ api: {
857
+ create: (params) => request({
858
+ path: "/permission/api",
859
+ method: "post",
860
+ body: params
861
+ }),
862
+ update: (id, params) => request({
863
+ path: `/permission/api/${encodePathSegment(id)}`,
864
+ method: "put",
865
+ body: params
866
+ }),
867
+ remove: (id) => request({
868
+ path: `/permission/api/${encodePathSegment(id)}`,
869
+ method: "delete"
870
+ }),
871
+ list: (params) => request({
872
+ path: "/permission/api",
873
+ method: "get",
874
+ query: withDefaultAppType(context, params)
875
+ }),
876
+ assign: (params) => request({
877
+ path: "/permission/api/assign",
878
+ method: "post",
879
+ body: params
880
+ }),
881
+ getByRole: (roleId) => request({
882
+ path: `/permission/api/role/${encodePathSegment(roleId)}`,
883
+ method: "get"
884
+ }),
885
+ getRolesByPermission: (permissionId) => request({
886
+ path: `/permission/api/${encodePathSegment(permissionId)}/roles`,
887
+ method: "get"
888
+ })
889
+ },
890
+ ui: {
891
+ create: (params) => request({
892
+ path: "/permission/api/ui",
893
+ method: "post",
894
+ body: params
895
+ }),
896
+ update: (id, params) => request({
897
+ path: `/permission/api/ui/${encodePathSegment(id)}`,
898
+ method: "put",
899
+ body: params
900
+ }),
901
+ remove: (id) => request({
902
+ path: `/permission/api/ui/${encodePathSegment(id)}`,
903
+ method: "delete"
904
+ }),
905
+ list: (params) => request({
906
+ path: "/permission/api/ui",
907
+ method: "get",
908
+ query: withDefaultAppType(context, params)
909
+ }),
910
+ assign: (params) => request({
911
+ path: "/permission/api/ui/assign",
912
+ method: "post",
913
+ body: params
914
+ }),
915
+ getMyPlatform: () => request({
916
+ path: "/permission/api/ui/me/platform",
917
+ method: "get"
918
+ }),
919
+ getMyApp: (appType) => request({
920
+ path: "/permission/api/ui/me/app",
921
+ method: "get",
922
+ query: {
923
+ appType: resolveAppType(context, appType)
924
+ }
925
+ })
926
+ }
927
+ };
928
+ const process = {
929
+ getInstance: (params) => request({
930
+ path: buildAppPath(context, params.appType, "/v1/process/instance"),
931
+ method: "get",
932
+ query: {
933
+ instanceId: params.instanceId
934
+ }
935
+ }),
936
+ terminateInstance: (params) => request({
937
+ path: buildAppPath(
938
+ context,
939
+ params.appType,
940
+ "/v1/process/terminateInstance.json"
941
+ ),
942
+ method: "post",
943
+ body: {
944
+ processInstanceId: params.processInstanceId,
945
+ reason: params.reason
946
+ }
947
+ }),
948
+ approveTask: (params) => request({
949
+ path: buildAppPath(
950
+ context,
951
+ params.appType,
952
+ "/v1/process/approveTask.json"
953
+ ),
954
+ method: "post",
955
+ body: {
956
+ ...params,
957
+ appType: resolveAppType(context, params.appType)
958
+ }
959
+ }),
960
+ triggerCallbackTask: (params) => request({
961
+ path: buildAppPath(
962
+ context,
963
+ params.appType,
964
+ "/v1/process/triggerCallback.json"
965
+ ),
966
+ method: "post",
967
+ body: {
968
+ taskId: params.taskId,
969
+ payload: params.payload
970
+ }
971
+ })
972
+ };
973
+ const notification = {
974
+ sendByType: (params) => request({
975
+ path: "/api/notification-config/send-by-type",
976
+ method: "post",
977
+ body: {
978
+ ...params,
979
+ appType: resolveAppType(context, params.appType)
980
+ }
981
+ }),
982
+ batchSendByType: (params) => request({
983
+ path: "/api/notification-config/batch-send-by-type",
984
+ method: "post",
985
+ body: {
986
+ ...params,
987
+ appType: resolveAppType(context, params.appType)
988
+ }
989
+ })
990
+ };
991
+ const sdk = {
992
+ context,
993
+ request,
994
+ download,
995
+ transport: {
996
+ request,
997
+ download
998
+ },
999
+ form,
1000
+ user,
1001
+ department,
1002
+ role,
1003
+ permission,
1004
+ process,
1005
+ notification,
1006
+ dataSource: {
1007
+ run: async (name, params = {}) => {
1008
+ const descriptor = (context.page.dataSources || []).find(
1009
+ (item) => item.key === name
1010
+ );
1011
+ if (!descriptor) {
1012
+ throw new Error(`\u672A\u627E\u5230\u6570\u636E\u6E90: ${String(name || "")}`);
1013
+ }
1014
+ const runtimeParams = params;
1015
+ const resolvedFormUuid = String(
1016
+ runtimeParams.formUuid || descriptor.formUuid || ""
1017
+ ).trim();
1018
+ switch (descriptor.type) {
1019
+ case "form.list":
1020
+ return form.advancedSearch({
1021
+ ...runtimeParams,
1022
+ formUuid: resolvedFormUuid,
1023
+ filters: mergeSearchExpressions(
1024
+ descriptor.defaultFilter,
1025
+ runtimeParams.filters
1026
+ )
1027
+ });
1028
+ case "form.detail":
1029
+ return form.getDetail({
1030
+ ...runtimeParams,
1031
+ formUuid: resolvedFormUuid
1032
+ });
1033
+ case "form.create":
1034
+ return form.create({
1035
+ ...runtimeParams,
1036
+ formUuid: resolvedFormUuid
1037
+ });
1038
+ case "form.update":
1039
+ return form.update({
1040
+ ...runtimeParams,
1041
+ formUuid: resolvedFormUuid
1042
+ });
1043
+ case "form.delete":
1044
+ return form.remove({
1045
+ ...runtimeParams,
1046
+ formUuid: resolvedFormUuid
1047
+ });
1048
+ default:
1049
+ throw new Error(`\u6682\u4E0D\u652F\u6301\u7684\u6570\u636E\u6E90\u7C7B\u578B: ${String(descriptor.type)}`);
1050
+ }
1051
+ }
1052
+ },
1053
+ navigation: context.navigation,
1054
+ ui: context.ui
1055
+ };
1056
+ return sdk;
1057
+ };
1058
+
1059
+ // packages/sdk/src/runtime/react/createReactPage.tsx
1060
+ import { StyleProvider } from "@ant-design/cssinjs";
1061
+ import { App as AntdApp, ConfigProvider } from "antd";
1062
+ import zhCN from "antd/locale/zh_CN.js";
1063
+ import { createRoot } from "react-dom/client";
1064
+
1065
+ // packages/sdk/src/runtime/react/provider.tsx
1066
+ import { useMemo } from "react";
1067
+
1068
+ // packages/sdk/src/runtime/react/store.ts
1069
+ import { createContext, useContext } from "react";
1070
+ var ReactPageContext = createContext(null);
1071
+ var usePageSdkStore = () => {
1072
+ const store = useContext(ReactPageContext);
1073
+ if (!store) {
1074
+ throw new Error("usePageSdkStore \u5FC5\u987B\u5728 PageProvider \u5185\u4F7F\u7528");
1075
+ }
1076
+ return store;
1077
+ };
1078
+
1079
+ // packages/sdk/src/runtime/react/provider.tsx
1080
+ import { jsx } from "react/jsx-runtime";
1081
+ var PageProvider = ({
1082
+ context,
1083
+ children
1084
+ }) => {
1085
+ const value = useMemo(
1086
+ () => ({
1087
+ context,
1088
+ sdk: createPageSdk(context)
1089
+ }),
1090
+ [context]
1091
+ );
1092
+ return /* @__PURE__ */ jsx(ReactPageContext.Provider, { value, children });
1093
+ };
1094
+
1095
+ // packages/sdk/src/styles/antd-theme.ts
1096
+ var antdTheme = {
1097
+ cssVar: { prefix: "sy-ant" },
1098
+ hashed: false,
1099
+ token: {
1100
+ colorPrimary: "var(--sy-color-primary)",
1101
+ colorSuccess: "var(--sy-color-success)",
1102
+ colorWarning: "var(--sy-color-warning)",
1103
+ colorError: "var(--sy-color-error)",
1104
+ colorText: "var(--sy-color-text)",
1105
+ colorTextSecondary: "var(--sy-color-text-secondary)",
1106
+ colorTextTertiary: "var(--sy-color-text-tertiary)",
1107
+ colorTextDisabled: "var(--sy-color-text-disabled)",
1108
+ colorBgContainer: "var(--sy-color-bg-container)",
1109
+ colorBgLayout: "var(--sy-color-bg-layout)",
1110
+ colorBgElevated: "var(--sy-color-bg-elevated)",
1111
+ colorBorder: "var(--sy-color-border)",
1112
+ colorBorderSecondary: "var(--sy-color-border-secondary)",
1113
+ borderRadius: 6,
1114
+ borderRadiusSM: 4,
1115
+ borderRadiusLG: 8,
1116
+ fontSize: 14,
1117
+ controlHeight: 32
1118
+ },
1119
+ components: {
1120
+ Form: { itemMarginBottom: 16 },
1121
+ Card: { paddingLG: 24 }
1122
+ }
1123
+ };
1124
+
1125
+ // packages/sdk/src/runtime/react/createReactPage.tsx
1126
+ import { jsx as jsx2 } from "react/jsx-runtime";
1127
+ var createRuntimeRoot = (el) => {
1128
+ return createRoot(el);
1129
+ };
1130
+ var getStyleContainer = (el) => {
1131
+ const rootNode = el.getRootNode?.();
1132
+ if (typeof ShadowRoot !== "undefined" && rootNode instanceof ShadowRoot) {
1133
+ return rootNode;
1134
+ }
1135
+ return document.head;
1136
+ };
1137
+ var getRuntimeOverlayContainer = (el) => {
1138
+ const rootNode = el.getRootNode?.();
1139
+ const isShadowRoot = typeof ShadowRoot !== "undefined" && rootNode instanceof ShadowRoot;
1140
+ const namespaceRoot = el.closest(".sy-app-workspace");
1141
+ return {
1142
+ getPopupContainer: (triggerNode) => {
1143
+ if (isShadowRoot) return el;
1144
+ return namespaceRoot || triggerNode?.parentElement || document.body;
1145
+ },
1146
+ getTargetContainer: () => isShadowRoot ? el : namespaceRoot || el.ownerDocument?.body || document.body
1147
+ };
1148
+ };
1149
+ var createReactPage = (AppComponent) => {
1150
+ let root = null;
1151
+ let currentContainer = null;
1152
+ const render = (el, context) => {
1153
+ const rootNode = el.getRootNode?.();
1154
+ if (!(typeof ShadowRoot !== "undefined" && rootNode instanceof ShadowRoot)) {
1155
+ el.classList.add("sy-app-workspace");
1156
+ }
1157
+ if (!root || currentContainer !== el) {
1158
+ root?.unmount();
1159
+ root = createRuntimeRoot(el);
1160
+ currentContainer = el;
1161
+ }
1162
+ const overlayContainer = getRuntimeOverlayContainer(el);
1163
+ root.render(
1164
+ /* @__PURE__ */ jsx2(StyleProvider, { hashPriority: "high", container: getStyleContainer(el), children: /* @__PURE__ */ jsx2(
1165
+ ConfigProvider,
1166
+ {
1167
+ locale: zhCN,
1168
+ prefixCls: "sy-ant",
1169
+ iconPrefixCls: "sy-anticon",
1170
+ theme: antdTheme,
1171
+ getPopupContainer: overlayContainer.getPopupContainer,
1172
+ getTargetContainer: overlayContainer.getTargetContainer,
1173
+ children: /* @__PURE__ */ jsx2(AntdApp, { children: /* @__PURE__ */ jsx2(PageProvider, { context, children: /* @__PURE__ */ jsx2(AppComponent, {}) }) })
1174
+ }
1175
+ ) })
1176
+ );
1177
+ };
1178
+ return {
1179
+ mount: (el, context) => {
1180
+ render(el, context);
1181
+ },
1182
+ update: (el, context) => {
1183
+ render(el, context);
1184
+ },
1185
+ unmount: () => {
1186
+ root?.unmount();
1187
+ root = null;
1188
+ currentContainer = null;
1189
+ }
1190
+ };
1191
+ };
1192
+
1193
+ // packages/sdk/src/runtime/react/hooks/useCurrentUser.ts
1194
+ import { useMemo as useMemo2 } from "react";
1195
+
1196
+ // packages/sdk/src/runtime/react/hooks/usePageContext.ts
1197
+ var usePageContext = () => {
1198
+ return usePageSdkStore().context;
1199
+ };
1200
+
1201
+ // packages/sdk/src/runtime/react/hooks/useCurrentUser.ts
1202
+ var useCurrentUser = () => {
1203
+ const { user } = usePageContext();
1204
+ return useMemo2(() => {
1205
+ const userType = user.userType === "guest" || user.isGuest ? "guest" : "normal";
1206
+ const isGuest = userType === "guest";
1207
+ return {
1208
+ user: {
1209
+ ...user,
1210
+ isGuest,
1211
+ userType
1212
+ },
1213
+ isGuest,
1214
+ isInternalUser: !isGuest,
1215
+ displayName: user.name || user.username || user.id,
1216
+ primaryDepartment: user.departments?.[0] || null
1217
+ };
1218
+ }, [user]);
1219
+ };
1220
+
1221
+ // packages/sdk/src/runtime/react/hooks/useDataSource.ts
1222
+ import { useCallback, useEffect, useRef, useState } from "react";
1223
+
1224
+ // packages/sdk/src/runtime/react/hooks/usePageSdk.ts
1225
+ var usePageSdk = () => {
1226
+ return usePageSdkStore().sdk;
1227
+ };
1228
+
1229
+ // packages/sdk/src/runtime/react/hooks/useDataSource.ts
1230
+ var createParamsSignature = (value) => {
1231
+ try {
1232
+ return JSON.stringify(value || {});
1233
+ } catch {
1234
+ return "";
1235
+ }
1236
+ };
1237
+ var useDataSource = (name, options = {}) => {
1238
+ const sdk = usePageSdk();
1239
+ const { params, immediate = true, transform } = options;
1240
+ const paramsRef = useRef(params);
1241
+ const transformRef = useRef(transform);
1242
+ const paramsSignature = createParamsSignature(params);
1243
+ const [response, setResponse] = useState(
1244
+ null
1245
+ );
1246
+ const [result, setResult] = useState(null);
1247
+ const [data, setData] = useState(null);
1248
+ const [loading, setLoading] = useState(false);
1249
+ const [error, setError] = useState(null);
1250
+ paramsRef.current = params;
1251
+ transformRef.current = transform;
1252
+ const run = useCallback(
1253
+ async (overrideParams) => {
1254
+ setLoading(true);
1255
+ setError(null);
1256
+ try {
1257
+ const response2 = await sdk.dataSource.run(
1258
+ name,
1259
+ overrideParams || paramsRef.current || {}
1260
+ );
1261
+ setResponse(response2);
1262
+ setResult(response2.result);
1263
+ const activeTransform = transformRef.current;
1264
+ const nextData = activeTransform ? activeTransform(response2.result, response2) : response2.result ?? null;
1265
+ setData(nextData);
1266
+ return response2;
1267
+ } catch (runtimeError) {
1268
+ const nextError = runtimeError instanceof Error ? runtimeError : new Error(String(runtimeError));
1269
+ setError(nextError);
1270
+ setResponse(null);
1271
+ setResult(null);
1272
+ return null;
1273
+ } finally {
1274
+ setLoading(false);
1275
+ }
1276
+ },
1277
+ [name, sdk.dataSource]
1278
+ );
1279
+ useEffect(() => {
1280
+ if (!immediate) {
1281
+ return;
1282
+ }
1283
+ void run();
1284
+ }, [immediate, paramsSignature, run]);
1285
+ return {
1286
+ response,
1287
+ result,
1288
+ data,
1289
+ loading,
1290
+ error,
1291
+ refresh: run,
1292
+ run,
1293
+ setResponse,
1294
+ setResult,
1295
+ setData
1296
+ };
1297
+ };
1298
+
1299
+ // packages/sdk/src/runtime/react/hooks/useFormViewPermissions.ts
1300
+ import { useCallback as useCallback2, useEffect as useEffect2, useMemo as useMemo3, useState as useState2 } from "react";
1301
+ var EMPTY_SUMMARY = {
1302
+ fieldPermissions: {},
1303
+ operations: []
1304
+ };
1305
+ var toError = (error) => {
1306
+ if (error instanceof Error) {
1307
+ return error;
1308
+ }
1309
+ if (typeof error === "object" && error !== null && "message" in error && typeof error.message === "string") {
1310
+ return new Error(error.message);
1311
+ }
1312
+ return new Error(String(error || "\u83B7\u53D6\u67E5\u770B\u6001\u6743\u9650\u5931\u8D25"));
1313
+ };
1314
+ var useFormViewPermissions = (formUuid, options = {}) => {
1315
+ const sdk = usePageSdk();
1316
+ const [summary, setSummary] = useState2(EMPTY_SUMMARY);
1317
+ const [response, setResponse] = useState2(null);
1318
+ const [loading, setLoading] = useState2(false);
1319
+ const [error, setError] = useState2(null);
1320
+ const immediate = options.immediate ?? true;
1321
+ const refresh = useCallback2(async () => {
1322
+ const normalizedFormUuid = String(formUuid || "").trim();
1323
+ if (!normalizedFormUuid) {
1324
+ setSummary(EMPTY_SUMMARY);
1325
+ setResponse(null);
1326
+ return null;
1327
+ }
1328
+ setLoading(true);
1329
+ setError(null);
1330
+ try {
1331
+ const nextResponse = await sdk.permission.formGroup.getViewPermissionSummary({
1332
+ appType: options.appType,
1333
+ formUuid: normalizedFormUuid
1334
+ });
1335
+ const nextSummary = nextResponse.result || EMPTY_SUMMARY;
1336
+ setResponse(nextResponse);
1337
+ setSummary({
1338
+ fieldPermissions: nextSummary.fieldPermissions || {},
1339
+ operations: nextSummary.operations || []
1340
+ });
1341
+ return nextResponse;
1342
+ } catch (requestError) {
1343
+ const nextError = toError(requestError);
1344
+ setError(nextError);
1345
+ setResponse(null);
1346
+ setSummary(EMPTY_SUMMARY);
1347
+ return null;
1348
+ } finally {
1349
+ setLoading(false);
1350
+ }
1351
+ }, [formUuid, options.appType, sdk]);
1352
+ useEffect2(() => {
1353
+ if (!immediate) {
1354
+ return;
1355
+ }
1356
+ void refresh();
1357
+ }, [immediate, refresh]);
1358
+ const operationSet = useMemo3(
1359
+ () => new Set(summary.operations),
1360
+ [summary.operations]
1361
+ );
1362
+ const can = useCallback2(
1363
+ (operation) => operationSet.has(operation),
1364
+ [operationSet]
1365
+ );
1366
+ const getFieldPermission = useCallback2(
1367
+ (fieldName) => summary.fieldPermissions[fieldName] || null,
1368
+ [summary.fieldPermissions]
1369
+ );
1370
+ return {
1371
+ summary,
1372
+ response,
1373
+ loading,
1374
+ error,
1375
+ refresh,
1376
+ can,
1377
+ getFieldPermission
1378
+ };
1379
+ };
1380
+
1381
+ // packages/sdk/src/runtime/react/hooks/useMessage.ts
1382
+ var useMessage = () => {
1383
+ return usePageContext().ui.message;
1384
+ };
1385
+
1386
+ // packages/sdk/src/runtime/react/hooks/useModal.ts
1387
+ var useModal = () => {
1388
+ return usePageContext().ui.modal;
1389
+ };
1390
+
1391
+ // packages/sdk/src/runtime/react/hooks/useNavigation.ts
1392
+ var useNavigation = () => {
1393
+ return usePageContext().navigation;
1394
+ };
1395
+
1396
+ // packages/sdk/src/runtime/react/hooks/usePageProps.ts
1397
+ var usePageProps = () => {
1398
+ return usePageContext().page.props;
1399
+ };
1400
+
1401
+ // packages/sdk/src/runtime/react/hooks/usePageRoute.ts
1402
+ var usePageRoute = () => {
1403
+ return usePageContext().route;
1404
+ };
1405
+ export {
1406
+ PageProvider,
1407
+ createPageSdk,
1408
+ createReactPage,
1409
+ useCurrentUser,
1410
+ useDataSource,
1411
+ useFormViewPermissions,
1412
+ useMessage,
1413
+ useModal,
1414
+ useNavigation,
1415
+ usePageContext,
1416
+ usePageProps,
1417
+ usePageRoute,
1418
+ usePageSdk
1419
+ };
1420
+ //# sourceMappingURL=index.mjs.map