openxiangda 1.0.264 → 2.0.0-alpha.2

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 (537) hide show
  1. package/README.md +11 -666
  2. package/bin/run.js +11 -0
  3. package/dist/browser/AuthoritativeSelector.d.ts +37 -0
  4. package/dist/browser/AuthoritativeSelector.d.ts.map +1 -0
  5. package/dist/browser/AuthoritativeSelector.js +357 -0
  6. package/dist/browser/AuthoritativeSelector.js.map +1 -0
  7. package/dist/browser/FilePreviewPage.d.ts +2 -0
  8. package/dist/browser/FilePreviewPage.d.ts.map +1 -0
  9. package/dist/browser/FilePreviewPage.js +191 -0
  10. package/dist/browser/FilePreviewPage.js.map +1 -0
  11. package/dist/browser/Shell.d.ts +6 -0
  12. package/dist/browser/Shell.d.ts.map +1 -0
  13. package/dist/browser/Shell.js +198 -0
  14. package/dist/browser/Shell.js.map +1 -0
  15. package/dist/browser/appearance.d.ts +12 -0
  16. package/dist/browser/appearance.d.ts.map +1 -0
  17. package/dist/browser/appearance.js +100 -0
  18. package/dist/browser/appearance.js.map +1 -0
  19. package/dist/browser/application.d.ts +8 -0
  20. package/dist/browser/application.d.ts.map +1 -0
  21. package/dist/browser/application.js +42 -0
  22. package/dist/browser/application.js.map +1 -0
  23. package/dist/browser/components/platform-fields/AddressField.d.ts +12 -0
  24. package/dist/browser/components/platform-fields/AddressField.d.ts.map +1 -0
  25. package/dist/browser/components/platform-fields/AddressField.js +179 -0
  26. package/dist/browser/components/platform-fields/AddressField.js.map +1 -0
  27. package/dist/browser/components/platform-fields/AttachmentFileList.d.ts +9 -0
  28. package/dist/browser/components/platform-fields/AttachmentFileList.d.ts.map +1 -0
  29. package/dist/browser/components/platform-fields/AttachmentFileList.js +164 -0
  30. package/dist/browser/components/platform-fields/AttachmentFileList.js.map +1 -0
  31. package/dist/browser/components/platform-fields/CascadeField.d.ts +13 -0
  32. package/dist/browser/components/platform-fields/CascadeField.d.ts.map +1 -0
  33. package/dist/browser/components/platform-fields/CascadeField.js +14 -0
  34. package/dist/browser/components/platform-fields/CascadeField.js.map +1 -0
  35. package/dist/browser/components/platform-fields/DateTimeField.d.ts +16 -0
  36. package/dist/browser/components/platform-fields/DateTimeField.d.ts.map +1 -0
  37. package/dist/browser/components/platform-fields/DateTimeField.js +51 -0
  38. package/dist/browser/components/platform-fields/DateTimeField.js.map +1 -0
  39. package/dist/browser/components/platform-fields/JsonField.d.ts +11 -0
  40. package/dist/browser/components/platform-fields/JsonField.d.ts.map +1 -0
  41. package/dist/browser/components/platform-fields/JsonField.js +40 -0
  42. package/dist/browser/components/platform-fields/JsonField.js.map +1 -0
  43. package/dist/browser/components/platform-fields/LocationField.d.ts +11 -0
  44. package/dist/browser/components/platform-fields/LocationField.d.ts.map +1 -0
  45. package/dist/browser/components/platform-fields/LocationField.js +73 -0
  46. package/dist/browser/components/platform-fields/LocationField.js.map +1 -0
  47. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.d.ts +12 -0
  48. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.d.ts.map +1 -0
  49. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.js +269 -0
  50. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.js.map +1 -0
  51. package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts +12 -0
  52. package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts.map +1 -0
  53. package/dist/browser/components/platform-fields/ResourceReferenceField.js +22 -0
  54. package/dist/browser/components/platform-fields/ResourceReferenceField.js.map +1 -0
  55. package/dist/browser/components/platform-fields/RichTextField.d.ts +14 -0
  56. package/dist/browser/components/platform-fields/RichTextField.d.ts.map +1 -0
  57. package/dist/browser/components/platform-fields/RichTextField.js +214 -0
  58. package/dist/browser/components/platform-fields/RichTextField.js.map +1 -0
  59. package/dist/browser/components/platform-fields/SignatureField.d.ts +15 -0
  60. package/dist/browser/components/platform-fields/SignatureField.d.ts.map +1 -0
  61. package/dist/browser/components/platform-fields/SignatureField.js +179 -0
  62. package/dist/browser/components/platform-fields/SignatureField.js.map +1 -0
  63. package/dist/browser/components/platform-fields/SubtableField.d.ts +18 -0
  64. package/dist/browser/components/platform-fields/SubtableField.d.ts.map +1 -0
  65. package/dist/browser/components/platform-fields/SubtableField.js +236 -0
  66. package/dist/browser/components/platform-fields/SubtableField.js.map +1 -0
  67. package/dist/browser/components/platform-fields/address-value.d.ts +13 -0
  68. package/dist/browser/components/platform-fields/address-value.d.ts.map +1 -0
  69. package/dist/browser/components/platform-fields/address-value.js +70 -0
  70. package/dist/browser/components/platform-fields/address-value.js.map +1 -0
  71. package/dist/browser/components/platform-fields/cascade-value.d.ts +6 -0
  72. package/dist/browser/components/platform-fields/cascade-value.d.ts.map +1 -0
  73. package/dist/browser/components/platform-fields/cascade-value.js +47 -0
  74. package/dist/browser/components/platform-fields/cascade-value.js.map +1 -0
  75. package/dist/browser/components/platform-fields/directory-value.d.ts +7 -0
  76. package/dist/browser/components/platform-fields/directory-value.d.ts.map +1 -0
  77. package/dist/browser/components/platform-fields/directory-value.js +35 -0
  78. package/dist/browser/components/platform-fields/directory-value.js.map +1 -0
  79. package/dist/browser/components/platform-fields/field-form-codec.d.ts +10 -0
  80. package/dist/browser/components/platform-fields/field-form-codec.d.ts.map +1 -0
  81. package/dist/browser/components/platform-fields/field-form-codec.js +82 -0
  82. package/dist/browser/components/platform-fields/field-form-codec.js.map +1 -0
  83. package/dist/browser/components/platform-fields/location-value.d.ts +20 -0
  84. package/dist/browser/components/platform-fields/location-value.d.ts.map +1 -0
  85. package/dist/browser/components/platform-fields/location-value.js +57 -0
  86. package/dist/browser/components/platform-fields/location-value.js.map +1 -0
  87. package/dist/browser/components/platform-fields/resource-query.d.ts +14 -0
  88. package/dist/browser/components/platform-fields/resource-query.d.ts.map +1 -0
  89. package/dist/browser/components/platform-fields/resource-query.js +102 -0
  90. package/dist/browser/components/platform-fields/resource-query.js.map +1 -0
  91. package/dist/browser/components/platform-fields/rich-text-value.d.ts +12 -0
  92. package/dist/browser/components/platform-fields/rich-text-value.d.ts.map +1 -0
  93. package/dist/browser/components/platform-fields/rich-text-value.js +83 -0
  94. package/dist/browser/components/platform-fields/rich-text-value.js.map +1 -0
  95. package/dist/browser/components/platform-fields/subtable-value.d.ts +31 -0
  96. package/dist/browser/components/platform-fields/subtable-value.d.ts.map +1 -0
  97. package/dist/browser/components/platform-fields/subtable-value.js +120 -0
  98. package/dist/browser/components/platform-fields/subtable-value.js.map +1 -0
  99. package/dist/browser/components/resource/GeneratedResourceCrud.d.ts +8 -0
  100. package/dist/browser/components/resource/GeneratedResourceCrud.d.ts.map +1 -0
  101. package/dist/browser/components/resource/GeneratedResourceCrud.js +580 -0
  102. package/dist/browser/components/resource/GeneratedResourceCrud.js.map +1 -0
  103. package/dist/browser/components/resource/ResourceBatchActions.d.ts +25 -0
  104. package/dist/browser/components/resource/ResourceBatchActions.d.ts.map +1 -0
  105. package/dist/browser/components/resource/ResourceBatchActions.js +168 -0
  106. package/dist/browser/components/resource/ResourceBatchActions.js.map +1 -0
  107. package/dist/browser/components/resource/StandardResourcePages.d.ts +57 -0
  108. package/dist/browser/components/resource/StandardResourcePages.d.ts.map +1 -0
  109. package/dist/browser/components/resource/StandardResourcePages.js +89 -0
  110. package/dist/browser/components/resource/StandardResourcePages.js.map +1 -0
  111. package/dist/browser/components/resource/SurfaceFields.d.ts +88 -0
  112. package/dist/browser/components/resource/SurfaceFields.d.ts.map +1 -0
  113. package/dist/browser/components/resource/SurfaceFields.js +497 -0
  114. package/dist/browser/components/resource/SurfaceFields.js.map +1 -0
  115. package/dist/browser/components/resource/generated-resource-definition.d.ts +19 -0
  116. package/dist/browser/components/resource/generated-resource-definition.d.ts.map +1 -0
  117. package/dist/browser/components/resource/generated-resource-definition.js +2 -0
  118. package/dist/browser/components/resource/generated-resource-definition.js.map +1 -0
  119. package/dist/browser/components/resource/resource-import.d.ts +15 -0
  120. package/dist/browser/components/resource/resource-import.d.ts.map +1 -0
  121. package/dist/browser/components/resource/resource-import.js +197 -0
  122. package/dist/browser/components/resource/resource-import.js.map +1 -0
  123. package/dist/browser/data-provider.d.ts +4 -0
  124. package/dist/browser/data-provider.d.ts.map +1 -0
  125. package/dist/browser/data-provider.js +45 -0
  126. package/dist/browser/data-provider.js.map +1 -0
  127. package/dist/browser/platform-client.d.ts +81 -0
  128. package/dist/browser/platform-client.d.ts.map +1 -0
  129. package/dist/browser/platform-client.js +422 -0
  130. package/dist/browser/platform-client.js.map +1 -0
  131. package/dist/browser/resource-definitions.d.ts +8 -0
  132. package/dist/browser/resource-definitions.d.ts.map +1 -0
  133. package/dist/browser/resource-definitions.js +14 -0
  134. package/dist/browser/resource-definitions.js.map +1 -0
  135. package/dist/browser/runtime-meta.d.ts +22 -0
  136. package/dist/browser/runtime-meta.d.ts.map +1 -0
  137. package/dist/browser/runtime-meta.js +79 -0
  138. package/dist/browser/runtime-meta.js.map +1 -0
  139. package/dist/browser/runtime.d.ts +13 -0
  140. package/dist/browser/runtime.d.ts.map +1 -0
  141. package/dist/browser/runtime.js +47 -0
  142. package/dist/browser/runtime.js.map +1 -0
  143. package/dist/browser/styles.css +1941 -0
  144. package/dist/config.d.ts +2 -0
  145. package/dist/config.d.ts.map +1 -0
  146. package/dist/config.js +2 -0
  147. package/dist/config.js.map +1 -0
  148. package/dist/core.d.ts +6 -0
  149. package/dist/core.d.ts.map +1 -0
  150. package/dist/core.js +4 -0
  151. package/dist/core.js.map +1 -0
  152. package/dist/field-kit.d.ts +22 -0
  153. package/dist/field-kit.d.ts.map +1 -0
  154. package/dist/field-kit.js +22 -0
  155. package/dist/field-kit.js.map +1 -0
  156. package/dist/index.d.ts +2 -0
  157. package/dist/index.d.ts.map +1 -0
  158. package/dist/index.js +2 -0
  159. package/dist/index.js.map +1 -0
  160. package/dist/nest.d.ts +10 -0
  161. package/dist/nest.d.ts.map +1 -0
  162. package/dist/nest.js +9 -0
  163. package/dist/nest.js.map +1 -0
  164. package/dist/react.d.ts +12 -0
  165. package/dist/react.d.ts.map +1 -0
  166. package/dist/react.js +11 -0
  167. package/dist/react.js.map +1 -0
  168. package/dist/testing.d.ts +4 -0
  169. package/dist/testing.d.ts.map +1 -0
  170. package/dist/testing.js +4 -0
  171. package/dist/testing.js.map +1 -0
  172. package/package.json +95 -200
  173. package/skills/manifest.json +10 -0
  174. package/skills/openxiangda-v2/SKILL.md +55 -0
  175. package/skills/openxiangda-v2/references/architecture.md +7 -0
  176. package/skills/openxiangda-v2/references/backend.md +116 -0
  177. package/skills/openxiangda-v2/references/data-authz.md +93 -0
  178. package/skills/openxiangda-v2/references/delivery.md +11 -0
  179. package/skills/openxiangda-v2/references/discovery.md +15 -0
  180. package/skills/openxiangda-v2/references/frontend.md +10 -0
  181. package/skills/openxiangda-v2/references/testing.md +16 -0
  182. package/skills/openxiangda-v2/references/workflow-notification.md +69 -0
  183. package/skills/openxiangda-v2/references/workspace.md +21 -0
  184. package/bin/openxiangda.js +0 -26
  185. package/lib/app-function-invoke.js +0 -28
  186. package/lib/application-environments.js +0 -1134
  187. package/lib/change-baseline.js +0 -1359
  188. package/lib/cli.js +0 -31084
  189. package/lib/config.js +0 -450
  190. package/lib/content-cache.js +0 -97
  191. package/lib/delivery-v2-cli.js +0 -329
  192. package/lib/delivery-v2-executor.js +0 -1703
  193. package/lib/delivery-v2-package.js +0 -1176
  194. package/lib/dependency-capsule.js +0 -246
  195. package/lib/design-gates.js +0 -668
  196. package/lib/design-review.js +0 -220
  197. package/lib/developer-center.js +0 -160
  198. package/lib/form-field-contract.js +0 -79
  199. package/lib/form-schema-loader.js +0 -181
  200. package/lib/git-remote-identity.js +0 -89
  201. package/lib/http.js +0 -196
  202. package/lib/integration-bundle.js +0 -225
  203. package/lib/js-code-build.js +0 -175
  204. package/lib/open-api.js +0 -256
  205. package/lib/policy.js +0 -137
  206. package/lib/publish-context.js +0 -98
  207. package/lib/publish-lease-heartbeat.js +0 -182
  208. package/lib/publish-lease.js +0 -221
  209. package/lib/release-error-classification.js +0 -41
  210. package/lib/release-explain.js +0 -75
  211. package/lib/release-mainline.js +0 -654
  212. package/lib/release-plan.js +0 -550
  213. package/lib/release-telemetry.js +0 -182
  214. package/lib/resource-binding-contract.js +0 -210
  215. package/lib/role-resolution.js +0 -57
  216. package/lib/runtime-lineage.js +0 -326
  217. package/lib/sdd.js +0 -3306
  218. package/lib/skills.js +0 -453
  219. package/lib/source-dependencies.js +0 -921
  220. package/lib/task-status.js +0 -330
  221. package/lib/utils.js +0 -178
  222. package/lib/workspace-bootstrap.js +0 -268
  223. package/lib/workspace-init.js +0 -202
  224. package/lib/worktree-cleanup.js +0 -631
  225. package/lib/worktree-owner.js +0 -354
  226. package/openxiangda-skills/SKILL.md +0 -226
  227. package/openxiangda-skills/references/architecture-design.md +0 -409
  228. package/openxiangda-skills/references/architecture-patterns.md +0 -264
  229. package/openxiangda-skills/references/automation-v3.md +0 -349
  230. package/openxiangda-skills/references/best-practices.md +0 -272
  231. package/openxiangda-skills/references/component-guide.md +0 -287
  232. package/openxiangda-skills/references/connector-resources.md +0 -80
  233. package/openxiangda-skills/references/data-views.md +0 -360
  234. package/openxiangda-skills/references/forms/component-registry.md +0 -90
  235. package/openxiangda-skills/references/forms/form-schema.md +0 -146
  236. package/openxiangda-skills/references/forms/layout-and-rules.md +0 -24
  237. package/openxiangda-skills/references/notifications.md +0 -227
  238. package/openxiangda-skills/references/openxiangda-api.md +0 -971
  239. package/openxiangda-skills/references/pages/app-shell.md +0 -66
  240. package/openxiangda-skills/references/pages/page-sdk.md +0 -401
  241. package/openxiangda-skills/references/pages/publish-flow.md +0 -84
  242. package/openxiangda-skills/references/pages/workspace-structure.md +0 -41
  243. package/openxiangda-skills/references/permission-design-patterns.md +0 -313
  244. package/openxiangda-skills/references/permissions-settings.md +0 -468
  245. package/openxiangda-skills/references/platform-data-model.md +0 -340
  246. package/openxiangda-skills/references/resource-manifest-cheatsheet.md +0 -936
  247. package/openxiangda-skills/references/school-contact-relations.md +0 -224
  248. package/openxiangda-skills/references/style-system.md +0 -218
  249. package/openxiangda-skills/references/troubleshooting.md +0 -271
  250. package/openxiangda-skills/references/workflow-v3.md +0 -441
  251. package/openxiangda-skills/references/workspace-state.md +0 -115
  252. package/openxiangda-skills/skills/openxiangda-app/SKILL.md +0 -118
  253. package/openxiangda-skills/skills/openxiangda-architecture-design/SKILL.md +0 -137
  254. package/openxiangda-skills/skills/openxiangda-core/SKILL.md +0 -222
  255. package/openxiangda-skills/skills/openxiangda-form/SKILL.md +0 -184
  256. package/openxiangda-skills/skills/openxiangda-inspect/SKILL.md +0 -63
  257. package/openxiangda-skills/skills/openxiangda-open-api/SKILL.md +0 -57
  258. package/openxiangda-skills/skills/openxiangda-open-api/agents/openai.yaml +0 -4
  259. package/openxiangda-skills/skills/openxiangda-open-api/references/backend-authentication.md +0 -63
  260. package/openxiangda-skills/skills/openxiangda-open-api/references/dingtalk-api.openapi.json +0 -15653
  261. package/openxiangda-skills/skills/openxiangda-page/SKILL.md +0 -154
  262. package/openxiangda-skills/skills/openxiangda-permission-settings/SKILL.md +0 -209
  263. package/openxiangda-skills/skills/openxiangda-workflow-automation/SKILL.md +0 -201
  264. package/packages/sdk/bin/lowcode-workspace.mjs +0 -4
  265. package/packages/sdk/dist/ProcessPreview-DSUIJi5V.d.mts +0 -1292
  266. package/packages/sdk/dist/ProcessPreview-DSUIJi5V.d.ts +0 -1292
  267. package/packages/sdk/dist/build/index.cjs +0 -1
  268. package/packages/sdk/dist/build/index.d.mts +0 -60
  269. package/packages/sdk/dist/build/index.d.ts +0 -60
  270. package/packages/sdk/dist/build/index.mjs +0 -1
  271. package/packages/sdk/dist/components/index.cjs +0 -148
  272. package/packages/sdk/dist/components/index.d.mts +0 -970
  273. package/packages/sdk/dist/components/index.d.ts +0 -970
  274. package/packages/sdk/dist/components/index.mjs +0 -148
  275. package/packages/sdk/dist/dataManagementApi-Ro9itwm8.d.ts +0 -142
  276. package/packages/sdk/dist/dataManagementApi-p_HOhQnA.d.mts +0 -142
  277. package/packages/sdk/dist/runtime/index.cjs +0 -148
  278. package/packages/sdk/dist/runtime/index.d.mts +0 -171
  279. package/packages/sdk/dist/runtime/index.d.ts +0 -171
  280. package/packages/sdk/dist/runtime/index.mjs +0 -148
  281. package/packages/sdk/dist/runtime/react.cjs +0 -148
  282. package/packages/sdk/dist/runtime/react.d.mts +0 -3202
  283. package/packages/sdk/dist/runtime/react.d.ts +0 -3202
  284. package/packages/sdk/dist/runtime/react.mjs +0 -148
  285. package/packages/sdk/dist/styles/antd-theme.cjs +0 -1
  286. package/packages/sdk/dist/styles/antd-theme.d.mts +0 -6
  287. package/packages/sdk/dist/styles/antd-theme.d.ts +0 -6
  288. package/packages/sdk/dist/styles/antd-theme.mjs +0 -1
  289. package/packages/sdk/dist/styles/tailwind-preset.cjs +0 -1
  290. package/packages/sdk/dist/styles/tailwind-preset.d.mts +0 -74
  291. package/packages/sdk/dist/styles/tailwind-preset.d.ts +0 -74
  292. package/packages/sdk/dist/styles/tailwind-preset.mjs +0 -1
  293. package/packages/sdk/dist/styles/tokens.css +0 -74
  294. package/packages/sdk/dist/workflow/index.cjs +0 -3
  295. package/packages/sdk/dist/workflow/index.d.mts +0 -291
  296. package/packages/sdk/dist/workflow/index.d.ts +0 -291
  297. package/packages/sdk/dist/workflow/index.mjs +0 -3
  298. package/packages/sdk/source/admin-list/AdminList.tsx +0 -1734
  299. package/packages/sdk/source/admin-list/README.md +0 -12
  300. package/packages/sdk/source/admin-list/dataSources.ts +0 -345
  301. package/packages/sdk/source/admin-list/index.ts +0 -42
  302. package/packages/sdk/source/admin-list/preferences.ts +0 -174
  303. package/packages/sdk/source/admin-list/types.ts +0 -273
  304. package/packages/sdk/src/build-source/README.md +0 -9
  305. package/packages/sdk/src/build-source/bin/lowcode-workspace.mjs +0 -7
  306. package/packages/sdk/src/build-source/package.json +0 -34
  307. package/packages/sdk/src/build-source/scripts/build-forms.mjs +0 -1129
  308. package/packages/sdk/src/build-source/scripts/build-pages.mjs +0 -897
  309. package/packages/sdk/src/build-source/scripts/build-workspace.mjs +0 -89
  310. package/packages/sdk/src/build-source/scripts/publish-all.mjs +0 -190
  311. package/packages/sdk/src/build-source/scripts/publish-oss.mjs +0 -144
  312. package/packages/sdk/src/build-source/scripts/register-bundle.mjs +0 -1
  313. package/packages/sdk/src/build-source/scripts/register.mjs +0 -362
  314. package/packages/sdk/src/build-source/scripts/sync-schema.mjs +0 -381
  315. package/packages/sdk/src/build-source/scripts/utils/form-api.mjs +0 -1058
  316. package/packages/sdk/src/build-source/scripts/utils/form-runtime-assets.mjs +0 -57
  317. package/packages/sdk/src/build-source/scripts/utils/incremental.mjs +0 -348
  318. package/packages/sdk/src/build-source/scripts/utils/load-config.mjs +0 -331
  319. package/packages/sdk/src/build-source/scripts/utils/mime-types.mjs +0 -70
  320. package/packages/sdk/src/build-source/scripts/utils/namespace-css.mjs +0 -77
  321. package/packages/sdk/src/build-source/scripts/utils/oss-client.mjs +0 -128
  322. package/packages/sdk/src/build-source/scripts/utils/pages.mjs +0 -150
  323. package/packages/sdk/src/build-source/scripts/utils/progress.mjs +0 -57
  324. package/packages/sdk/src/build-source/scripts/utils/publish-oss-patterns.mjs +0 -20
  325. package/packages/sdk/src/build-source/scripts/utils/register-payload.mjs +0 -90
  326. package/packages/sdk/src/build-source/scripts/utils/runtime-css-check.mjs +0 -44
  327. package/packages/sdk/src/build-source/scripts/utils/schema-transform.mjs +0 -142
  328. package/packages/sdk/src/build-source/scripts/utils/static-assets.mjs +0 -165
  329. package/packages/sdk/src/build-source/scripts/utils/tailwind-config.mjs +0 -283
  330. package/packages/sdk/src/build-source/scripts/utils/tailwind-token-warnings.mjs +0 -146
  331. package/packages/sdk/src/build-source/scripts/utils/workspace-style-entry.mjs +0 -29
  332. package/packages/sdk/src/build-source/src/cli.mjs +0 -735
  333. package/policy/openxiangda-policy.json +0 -72
  334. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-form.mdc +0 -24
  335. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-page.mdc +0 -25
  336. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-resources.mdc +0 -32
  337. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-workflow-automation.mdc +0 -26
  338. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda.mdc +0 -68
  339. package/templates/openxiangda-react-spa/.env.example +0 -4
  340. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-form.md +0 -37
  341. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-page.md +0 -29
  342. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-resources.md +0 -32
  343. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-workflow-automation.md +0 -34
  344. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda.md +0 -66
  345. package/templates/openxiangda-react-spa/AGENTS.md +0 -192
  346. package/templates/openxiangda-react-spa/DELIVERY.md +0 -43
  347. package/templates/openxiangda-react-spa/app-workspace.config.ts +0 -50
  348. package/templates/openxiangda-react-spa/index.html +0 -12
  349. package/templates/openxiangda-react-spa/package.json +0 -53
  350. package/templates/openxiangda-react-spa/postcss.config.cjs +0 -6
  351. package/templates/openxiangda-react-spa/scripts/build-js-code.mjs +0 -600
  352. package/templates/openxiangda-react-spa/scripts/deploy.mjs +0 -18
  353. package/templates/openxiangda-react-spa/scripts/guard-publish.mjs +0 -21
  354. package/templates/openxiangda-react-spa/src/app/navigation.ts +0 -73
  355. package/templates/openxiangda-react-spa/src/app/router.tsx +0 -146
  356. package/templates/openxiangda-react-spa/src/app/starter-content.ts +0 -144
  357. package/templates/openxiangda-react-spa/src/forms/.gitkeep +0 -1
  358. package/templates/openxiangda-react-spa/src/layouts/AdminShell.tsx +0 -570
  359. package/templates/openxiangda-react-spa/src/main.tsx +0 -21
  360. package/templates/openxiangda-react-spa/src/pages/admin/AdminDashboardPage.tsx +0 -170
  361. package/templates/openxiangda-react-spa/src/pages/admin/LoginLogPage.tsx +0 -425
  362. package/templates/openxiangda-react-spa/src/pages/defaults/DataRoutePage.tsx +0 -36
  363. package/templates/openxiangda-react-spa/src/pages/defaults/FilePreviewRoutePage.tsx +0 -65
  364. package/templates/openxiangda-react-spa/src/pages/defaults/FormRoutePage.tsx +0 -235
  365. package/templates/openxiangda-react-spa/src/pages/public/PublicRegisterPage.tsx +0 -15
  366. package/templates/openxiangda-react-spa/src/pages/states/NotFoundPage.tsx +0 -31
  367. package/templates/openxiangda-react-spa/src/resources/menus/menus.json +0 -22
  368. package/templates/openxiangda-react-spa/src/resources/permissions/page-groups/app-admin.json +0 -8
  369. package/templates/openxiangda-react-spa/src/resources/permissions/page-groups/public-visitor.json +0 -8
  370. package/templates/openxiangda-react-spa/src/resources/public-access/public-register.json +0 -14
  371. package/templates/openxiangda-react-spa/src/resources/roles/roles.json +0 -15
  372. package/templates/openxiangda-react-spa/src/resources/routes/public-register.json +0 -8
  373. package/templates/openxiangda-react-spa/src/runtime/default-page-overrides.tsx +0 -35
  374. package/templates/openxiangda-react-spa/src/runtime/default-routes.ts +0 -16
  375. package/templates/openxiangda-react-spa/src/shared/form-schema.ts +0 -135
  376. package/templates/openxiangda-react-spa/src/shared/mac-admin.tsx +0 -651
  377. package/templates/openxiangda-react-spa/src/shared/ui.tsx +0 -22
  378. package/templates/openxiangda-react-spa/src/styles/index.css +0 -105
  379. package/templates/openxiangda-react-spa/tailwind.config.cjs +0 -37
  380. package/templates/openxiangda-react-spa/tsconfig.app.json +0 -36
  381. package/templates/openxiangda-react-spa/tsconfig.js-code-nodes.json +0 -19
  382. package/templates/openxiangda-react-spa/tsconfig.json +0 -7
  383. package/templates/openxiangda-react-spa/tsconfig.node.json +0 -10
  384. package/templates/openxiangda-react-spa/vite.config.ts +0 -209
  385. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-form.mdc +0 -24
  386. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-page.mdc +0 -21
  387. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-resources.mdc +0 -40
  388. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-workflow-automation.mdc +0 -21
  389. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda.mdc +0 -81
  390. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-form.md +0 -38
  391. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-page.md +0 -39
  392. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-resources.md +0 -59
  393. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-workflow-automation.md +0 -46
  394. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda.md +0 -82
  395. package/templates/sy-lowcode-app-workspace/AGENTS.md +0 -158
  396. package/templates/sy-lowcode-app-workspace/DELIVERY.md +0 -43
  397. package/templates/sy-lowcode-app-workspace/app-workspace.config.ts +0 -51
  398. package/templates/sy-lowcode-app-workspace/examples/best-practices/README.md +0 -43
  399. package/templates/sy-lowcode-app-workspace/examples/best-practices/access-governance.md +0 -239
  400. package/templates/sy-lowcode-app-workspace/examples/best-practices/catalog.json +0 -99
  401. package/templates/sy-lowcode-app-workspace/examples/best-practices/decision-guide.md +0 -94
  402. package/templates/sy-lowcode-app-workspace/examples/best-practices/design-style.md +0 -91
  403. package/templates/sy-lowcode-app-workspace/examples/best-practices/module-structure.md +0 -48
  404. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/index.ts +0 -2
  405. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/permissions.test.ts +0 -52
  406. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/permissions.ts +0 -37
  407. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/types.ts +0 -19
  408. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/index.ts +0 -4
  409. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/permissions.test.ts +0 -42
  410. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/permissions.ts +0 -25
  411. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/state-machine.test.ts +0 -63
  412. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/state-machine.ts +0 -73
  413. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/ticket-query.test.ts +0 -34
  414. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/ticket-query.ts +0 -73
  415. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/types.ts +0 -66
  416. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/app-role/page.tsx +0 -1
  417. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/app-role/schema.ts +0 -109
  418. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/customer-profile/page.tsx +0 -1
  419. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/customer-profile/schema.ts +0 -92
  420. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/service-ticket/page.tsx +0 -1
  421. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/service-ticket/schema.ts +0 -153
  422. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/ticket-action-log/page.tsx +0 -1
  423. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/ticket-action-log/schema.ts +0 -65
  424. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/js-code-nodes/daily_ticket_digest/index.ts +0 -44
  425. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/js-code-nodes/sync_roles_to_platform/index.ts +0 -33
  426. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/App.tsx +0 -8
  427. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/GlassHomeDashboard.tsx +0 -232
  428. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/index.tsx +0 -10
  429. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/page.config.ts +0 -14
  430. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/styles.css +0 -196
  431. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/App.tsx +0 -7
  432. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/WorkbenchPage.tsx +0 -36
  433. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/components/ConfigPanel.tsx +0 -34
  434. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/components/PreviewPanel.tsx +0 -17
  435. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/index.tsx +0 -10
  436. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/page.config.ts +0 -9
  437. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/reducer.ts +0 -29
  438. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/styles.css +0 -24
  439. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/App.tsx +0 -8
  440. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/MintAnalyticsDashboard.tsx +0 -279
  441. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/index.tsx +0 -10
  442. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/page.config.ts +0 -14
  443. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/styles.css +0 -163
  444. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/App.tsx +0 -7
  445. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/MobilePortalShell.tsx +0 -31
  446. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/index.tsx +0 -10
  447. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/modules/MobileHome.tsx +0 -13
  448. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/page.config.ts +0 -14
  449. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/routes.ts +0 -13
  450. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/styles.css +0 -11
  451. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/App.tsx +0 -8
  452. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/OpsMonitorDashboard.tsx +0 -306
  453. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/index.tsx +0 -10
  454. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/page.config.ts +0 -14
  455. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/styles.css +0 -248
  456. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/App.tsx +0 -7
  457. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/PcPortalShell.tsx +0 -35
  458. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/components/PortalMetric.tsx +0 -11
  459. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/index.tsx +0 -10
  460. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/modules/HomeModule.tsx +0 -25
  461. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/modules/TicketsModule.tsx +0 -14
  462. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/page.config.ts +0 -14
  463. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/routes.ts +0 -19
  464. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/styles.css +0 -35
  465. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/App.tsx +0 -7
  466. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/TicketOpsPage.tsx +0 -105
  467. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketActionTimeline.tsx +0 -22
  468. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketDetailDrawer.tsx +0 -44
  469. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketTableActions.tsx +0 -57
  470. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/index.tsx +0 -10
  471. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/page.config.ts +0 -9
  472. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/styles.css +0 -35
  473. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/App.tsx +0 -8
  474. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/WorkOrderListDrawerPage.tsx +0 -371
  475. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/index.tsx +0 -10
  476. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/page.config.ts +0 -14
  477. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/styles.css +0 -182
  478. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/automations/daily-ticket-digest/automation.json +0 -25
  479. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/automations/daily-ticket-digest/trigger.json +0 -9
  480. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/notifications/daily-ticket-digest.json +0 -24
  481. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/permissions/form-groups/service-ticket-college.json +0 -21
  482. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/permissions/roles.json +0 -17
  483. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/workflows/expense-approval-workflow.json +0 -48
  484. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/ConfirmAction.tsx +0 -22
  485. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/QueryState.tsx +0 -37
  486. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/StatusTag.tsx +0 -20
  487. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/DashboardPrimitives.tsx +0 -832
  488. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/chartOptions.ts +0 -140
  489. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/sampleData.ts +0 -466
  490. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/styles.css +0 -874
  491. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/types.ts +0 -150
  492. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/hooks/useTicketOps.ts +0 -96
  493. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/services/role-governance.ts +0 -48
  494. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/services/service-ticket.ts +0 -113
  495. package/templates/sy-lowcode-app-workspace/examples/forms/customer/page.tsx +0 -1
  496. package/templates/sy-lowcode-app-workspace/examples/forms/customer/schema.ts +0 -36
  497. package/templates/sy-lowcode-app-workspace/index.html +0 -12
  498. package/templates/sy-lowcode-app-workspace/package.json +0 -58
  499. package/templates/sy-lowcode-app-workspace/postcss.config.cjs +0 -9
  500. package/templates/sy-lowcode-app-workspace/scripts/build-js-code.mjs +0 -600
  501. package/templates/sy-lowcode-app-workspace/scripts/guard-publish.mjs +0 -29
  502. package/templates/sy-lowcode-app-workspace/src/dev/App.tsx +0 -820
  503. package/templates/sy-lowcode-app-workspace/src/forms/.gitkeep +0 -1
  504. package/templates/sy-lowcode-app-workspace/src/forms/README.md +0 -52
  505. package/templates/sy-lowcode-app-workspace/src/index.css +0 -26
  506. package/templates/sy-lowcode-app-workspace/src/js-code-nodes/.gitkeep +0 -1
  507. package/templates/sy-lowcode-app-workspace/src/js-code-nodes/types.d.ts +0 -3
  508. package/templates/sy-lowcode-app-workspace/src/main.tsx +0 -29
  509. package/templates/sy-lowcode-app-workspace/src/pages/.gitkeep +0 -1
  510. package/templates/sy-lowcode-app-workspace/src/runtime/builtin-overrides.tsx +0 -8
  511. package/templates/sy-lowcode-app-workspace/src/shared/form-schema.ts +0 -135
  512. package/templates/sy-lowcode-app-workspace/src/types/app-workspace.types.ts +0 -88
  513. package/templates/sy-lowcode-app-workspace/tailwind.config.cjs +0 -31
  514. package/templates/sy-lowcode-app-workspace/tsconfig.app.json +0 -40
  515. package/templates/sy-lowcode-app-workspace/tsconfig.examples.json +0 -24
  516. package/templates/sy-lowcode-app-workspace/tsconfig.js-code-nodes.json +0 -19
  517. package/templates/sy-lowcode-app-workspace/tsconfig.json +0 -7
  518. package/templates/sy-lowcode-app-workspace/tsconfig.node.json +0 -10
  519. package/templates/sy-lowcode-app-workspace/vite.config.ts +0 -85
  520. package/v2/README.md +0 -35
  521. package/v2/skills/manifest.json +0 -45
  522. package/v2/skills/openxiangda-v1-maintenance/SKILL.md +0 -21
  523. package/v2/skills/openxiangda-v1-maintenance/agents/openai.yaml +0 -4
  524. package/v2/skills/openxiangda-v2/SKILL.md +0 -38
  525. package/v2/skills/openxiangda-v2-architecture/SKILL.md +0 -29
  526. package/v2/skills/openxiangda-v2-architecture/agents/openai.yaml +0 -4
  527. package/v2/skills/openxiangda-v2-backend/SKILL.md +0 -28
  528. package/v2/skills/openxiangda-v2-backend/agents/openai.yaml +0 -4
  529. package/v2/skills/openxiangda-v2-data-authz/SKILL.md +0 -28
  530. package/v2/skills/openxiangda-v2-data-authz/agents/openai.yaml +0 -4
  531. package/v2/skills/openxiangda-v2-delivery/SKILL.md +0 -30
  532. package/v2/skills/openxiangda-v2-delivery/agents/openai.yaml +0 -4
  533. package/v2/skills/openxiangda-v2-frontend/SKILL.md +0 -21
  534. package/v2/skills/openxiangda-v2-frontend/agents/openai.yaml +0 -4
  535. package/v2/skills/openxiangda-v2-workflow-events/SKILL.md +0 -28
  536. package/v2/skills/openxiangda-v2-workflow-events/agents/openai.yaml +0 -4
  537. /package/{v2/skills → skills}/openxiangda-v2/agents/openai.yaml +0 -0
@@ -1,150 +0,0 @@
1
- import fs from "node:fs/promises";
2
- import path from "node:path";
3
- import { pathToFileURL } from "node:url";
4
- import { rootDir as workspaceRoot } from "./load-config.mjs";
5
-
6
- export const rootDir = workspaceRoot;
7
- export const srcRoot = path.join(rootDir, "src");
8
- export const formsRoot = path.join(srcRoot, "forms");
9
- export const pagesRoot = path.join(srcRoot, "pages");
10
- export const distRoot = path.join(rootDir, "dist");
11
-
12
- async function fileExists(targetPath) {
13
- try {
14
- await fs.access(targetPath);
15
- return true;
16
- } catch {
17
- return false;
18
- }
19
- }
20
-
21
- async function resolveExistingModulePath(basePath) {
22
- const candidates = [
23
- basePath,
24
- `${basePath}.ts`,
25
- `${basePath}.tsx`,
26
- `${basePath}.js`,
27
- `${basePath}.jsx`,
28
- `${basePath}.mjs`,
29
- `${basePath}.cjs`,
30
- path.join(basePath, "index.ts"),
31
- path.join(basePath, "index.tsx"),
32
- path.join(basePath, "index.js"),
33
- path.join(basePath, "index.jsx"),
34
- path.join(basePath, "index.mjs"),
35
- path.join(basePath, "index.cjs"),
36
- ];
37
-
38
- for (const candidate of candidates) {
39
- if (await fileExists(candidate)) return candidate;
40
- }
41
- throw new Error(`无法解析工作区别名导入: @/${path.relative(srcRoot, basePath)}`);
42
- }
43
-
44
- async function rewriteWorkspaceAliasImports(source) {
45
- const importSpecifierPattern =
46
- /(\bfrom\s*["']|^\s*import\s*["']|import\s*\(\s*["'])(@\/[^"']+)(["'])/gm;
47
- const replacements = [];
48
- let match;
49
- while ((match = importSpecifierPattern.exec(source))) {
50
- const [, prefix, specifier, suffix] = match;
51
- const targetPath = await resolveExistingModulePath(
52
- path.join(srcRoot, specifier.slice(2)),
53
- );
54
- replacements.push({
55
- start: match.index,
56
- end: match.index + match[0].length,
57
- value: `${prefix}${pathToFileURL(targetPath).href}${suffix}`,
58
- });
59
- }
60
-
61
- if (replacements.length === 0) return source;
62
-
63
- let cursor = 0;
64
- let next = "";
65
- for (const replacement of replacements) {
66
- next += source.slice(cursor, replacement.start);
67
- next += replacement.value;
68
- cursor = replacement.end;
69
- }
70
- next += source.slice(cursor);
71
- return next;
72
- }
73
-
74
- async function loadTypeScriptModule(filePath) {
75
- const source = await fs.readFile(filePath, "utf8");
76
- const rewritten = await rewriteWorkspaceAliasImports(source);
77
- let importPath = filePath;
78
- if (rewritten !== source) {
79
- importPath = path.join(
80
- path.dirname(filePath),
81
- `.page.config.openxiangda-loader-${process.pid}-${Date.now()}.ts`,
82
- );
83
- await fs.writeFile(importPath, rewritten, "utf8");
84
- }
85
-
86
- try {
87
- const loaded = await import(`${pathToFileURL(importPath).href}?t=${Date.now()}`);
88
- return loaded.default || loaded;
89
- } finally {
90
- if (importPath !== filePath) {
91
- await fs.rm(importPath, { force: true });
92
- }
93
- }
94
- }
95
-
96
- export async function discoverPages(filterName = "") {
97
- if (!(await fileExists(pagesRoot))) {
98
- return [];
99
- }
100
-
101
- const entries = await fs.readdir(pagesRoot, { withFileTypes: true });
102
- const pages = [];
103
-
104
- for (const entry of entries) {
105
- if (!entry.isDirectory()) continue;
106
- if (filterName && entry.name !== filterName) continue;
107
-
108
- const dirPath = path.join(pagesRoot, entry.name);
109
- const entryPath = path.join(dirPath, "index.tsx");
110
- const appPath = path.join(dirPath, "App.tsx");
111
- const configPath = path.join(dirPath, "page.config.ts");
112
- const required = [entryPath, appPath, configPath];
113
- const exists = await Promise.all(required.map(fileExists));
114
- if (exists.every((item) => !item)) continue;
115
- for (let index = 0; index < required.length; index += 1) {
116
- if (!exists[index]) {
117
- throw new Error(`页面 ${entry.name} 缺少文件: ${path.basename(required[index])}`);
118
- }
119
- }
120
-
121
- const config = await loadTypeScriptModule(configPath);
122
- if (config.publish === false) continue;
123
- pages.push({
124
- dirName: entry.name,
125
- dirPath,
126
- entryPath,
127
- appPath,
128
- configPath,
129
- config,
130
- });
131
- }
132
-
133
- return pages.sort((left, right) =>
134
- String(left.config.name || left.dirName).localeCompare(
135
- String(right.config.name || right.dirName),
136
- "zh-Hans-CN",
137
- ),
138
- );
139
- }
140
-
141
- export async function readPackageJson() {
142
- return JSON.parse(await fs.readFile(path.join(rootDir, "package.json"), "utf8"));
143
- }
144
-
145
- export async function getReactVersion() {
146
- const packageJson = await readPackageJson();
147
- return String(packageJson.dependencies?.react || "")
148
- .replace(/^[~^]/, "")
149
- .trim();
150
- }
@@ -1,57 +0,0 @@
1
- /**
2
- * progress.mjs - 上传进度报告工具
3
- *
4
- * 提供文件上传进度跟踪,包括已完成数量、文件总大小、耗时统计。
5
- */
6
-
7
- import fs from "node:fs";
8
-
9
- /**
10
- * 创建进度跟踪器
11
- * @param {number} total - 总文件数
12
- * @returns {{ tick: (file: string, localPath: string) => void, summary: () => void }}
13
- */
14
- export function createProgressTracker(total) {
15
- let completed = 0;
16
- let totalBytes = 0;
17
- const startTime = Date.now();
18
-
19
- return {
20
- /**
21
- * 标记一个文件上传完成
22
- * @param {string} ossKey - OSS 对象键(用于日志)
23
- * @param {string} localPath - 本地文件路径(用于计算大小)
24
- */
25
- tick(ossKey, localPath) {
26
- completed += 1;
27
- try {
28
- const stat = fs.statSync(localPath);
29
- totalBytes += stat.size;
30
- } catch {
31
- // 忽略 stat 失败
32
- }
33
- const pct = Math.round((completed / total) * 100);
34
- console.log(` ✓ [${completed}/${total} ${pct}%] ${ossKey}`);
35
- },
36
-
37
- /**
38
- * 标记一个文件上传失败
39
- * @param {string} ossKey - OSS 对象键
40
- * @param {Error} error - 错误对象
41
- */
42
- fail(ossKey, error) {
43
- completed += 1;
44
- const pct = Math.round((completed / total) * 100);
45
- console.error(` ✗ [${completed}/${total} ${pct}%] ${ossKey}: ${error.message}`);
46
- },
47
-
48
- /**
49
- * 打印上传汇总信息
50
- */
51
- summary() {
52
- const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
53
- const sizeMB = (totalBytes / (1024 * 1024)).toFixed(2);
54
- console.log(`\n📊 上传统计: ${total} 个文件, ${sizeMB} MB, 耗时 ${elapsed}s`);
55
- },
56
- };
57
- }
@@ -1,20 +0,0 @@
1
- export function getPageUploadPatterns(targetPage, pages = []) {
2
- const names = new Set([targetPage].filter(Boolean));
3
- for (const page of pages) {
4
- const code = page?.config?.code;
5
- if (page?.dirName === targetPage || code === targetPage) {
6
- if (page.dirName) names.add(page.dirName);
7
- if (code) names.add(code);
8
- }
9
- }
10
- return ["page-runtime/**/*", ...[...names].map((name) => `pages/${name}/**/*`)];
11
- }
12
-
13
- export async function buildUploadPatterns({ targetForm, targetPage, discoverPages }) {
14
- if (targetForm) return ["form-runtime/**/*", `forms/${targetForm}/**/*`];
15
- if (targetPage) {
16
- const pages = discoverPages ? await discoverPages() : [];
17
- return getPageUploadPatterns(targetPage, pages);
18
- }
19
- return ["{form-runtime,page-runtime,forms,pages}/**/*"];
20
- }
@@ -1,90 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import {
4
- getPageAssetBaseUrl,
5
- getPageAssetUrl,
6
- getPageRuntimeUrl,
7
- rootDir,
8
- } from "./load-config.mjs";
9
-
10
- function readPageRuntimeManifest() {
11
- const manifestPath = path.resolve(rootDir, "dist/page-runtime/manifest.json");
12
- if (!fs.existsSync(manifestPath)) return null;
13
- try {
14
- const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf-8"));
15
- if (
16
- manifest?.protocol !== "sy-page-runtime" ||
17
- manifest?.majorVersion !== 1 ||
18
- !manifest?.version ||
19
- !manifest?.files?.entry
20
- ) {
21
- return null;
22
- }
23
- return manifest;
24
- } catch {
25
- return null;
26
- }
27
- }
28
-
29
- export function buildPageMenuConfig(config, pageConfig) {
30
- if (pageConfig.menu?.enabled === false) {
31
- return { enabled: false };
32
- }
33
-
34
- return {
35
- enabled: true,
36
- name: pageConfig.menu?.name || pageConfig.name,
37
- parentId:
38
- pageConfig.menu && "parentId" in pageConfig.menu
39
- ? pageConfig.menu.parentId
40
- : config.defaults.pageMenuParentId || null,
41
- icon:
42
- pageConfig.menu && "icon" in pageConfig.menu
43
- ? pageConfig.menu.icon
44
- : config.defaults.pageMenuIcon || null,
45
- };
46
- }
47
-
48
- export function buildDirectPagePublishPayload(config, pages) {
49
- const pageRuntime = readPageRuntimeManifest();
50
- return {
51
- appType: config.appType,
52
- userId: config.userId,
53
- version: config.version,
54
- buildId: config.buildId,
55
- pages: pages.map((page) => {
56
- const pageBaseUrl = getPageAssetBaseUrl(config, page.config.code);
57
- const pageEntryUrl = getPageAssetUrl(config, page.config.code, "index.js");
58
- const pageStyleUrl = getPageAssetUrl(config, page.config.code, "style.css");
59
- const runtimeJsUrl = pageRuntime?.files?.entry
60
- ? getPageRuntimeUrl(config, pageRuntime.files.entry)
61
- : null;
62
- const runtimeCssUrl = pageRuntime?.files?.css
63
- ? getPageRuntimeUrl(config, pageRuntime.files.css)
64
- : null;
65
- return {
66
- code: page.config.code,
67
- name: page.config.name,
68
- description: page.config.description || "",
69
- entry: page.config.entry || {},
70
- route: page.config.route,
71
- props: page.config.props || {},
72
- dataSources: page.config.dataSources || [],
73
- runtime: {
74
- entryUrl: pageEntryUrl,
75
- cssUrls: [runtimeCssUrl, pageStyleUrl].filter(Boolean),
76
- jsUrls: runtimeJsUrl ? [runtimeJsUrl] : [pageEntryUrl],
77
- cdnBaseUrl: pageBaseUrl,
78
- framework: "react",
79
- frameworkVersion: config.defaults.frameworkVersion,
80
- protocolVersion: config.defaults.protocolVersion,
81
- protocol: pageRuntime?.protocol || undefined,
82
- version: config.version,
83
- cssIsolation:
84
- page.config.cssIsolation || config.defaults.cssIsolation,
85
- },
86
- menu: buildPageMenuConfig(config, page.config),
87
- };
88
- }),
89
- };
90
- }
@@ -1,44 +0,0 @@
1
- import fs from "node:fs";
2
-
3
- export const requiredRuntimeCssSelectors = [
4
- ".flex",
5
- ".grid",
6
- ".rounded-lg",
7
- ".bg-ant-bg-layout",
8
- ".sy-form-layout",
9
- ".sy-layout-field",
10
- ".sy-field-wrapper",
11
- ".sy-field-control",
12
- ".sy-subform",
13
- ];
14
-
15
- function selectorPattern(selector) {
16
- const escaped = selector.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
17
- return new RegExp(`(^|[^A-Za-z0-9_-])${escaped}([^A-Za-z0-9_-]|$)`);
18
- }
19
-
20
- export function getMissingRuntimeCssSelectors(
21
- css,
22
- selectors = requiredRuntimeCssSelectors,
23
- ) {
24
- return selectors.filter((selector) => !selectorPattern(selector).test(css));
25
- }
26
-
27
- export function validateRuntimeCssFile(
28
- cssPath,
29
- { label = "runtime", selectors = requiredRuntimeCssSelectors } = {},
30
- ) {
31
- if (!cssPath || !fs.existsSync(cssPath) || fs.statSync(cssPath).size === 0) {
32
- throw new Error(
33
- `${label} style.css is empty or missing; run lowcode-workspace update to refresh Tailwind config and ensure src/index.css keeps Tailwind base in its own layer`,
34
- );
35
- }
36
-
37
- const css = fs.readFileSync(cssPath, "utf-8");
38
- const missing = getMissingRuntimeCssSelectors(css, selectors);
39
- if (missing.length) {
40
- throw new Error(
41
- `${label} style.css is missing required runtime utility selectors: ${missing.join(", ")}; run lowcode-workspace update to refresh Tailwind preset/content scanning, then rebuild without stale runtime cache`,
42
- );
43
- }
44
- }
@@ -1,142 +0,0 @@
1
- export function normalizeComponentName(componentName) {
2
- if (componentName === "TextAreaField") return "TextareaField";
3
- return componentName;
4
- }
5
-
6
- export function getObjectSize(value) {
7
- if (!value || typeof value !== "object" || Array.isArray(value)) return 0;
8
- return Object.keys(value).length;
9
- }
10
-
11
- export function isValidTableName(value) {
12
- const normalized = String(value || "").trim();
13
- return Boolean(normalized) && normalized.toLowerCase() !== "null";
14
- }
15
-
16
- export function validateFormSchema(schema, formName = "unknown") {
17
- if (!schema || typeof schema !== "object") {
18
- throw new Error(`${formName}: schema 必须是对象`);
19
- }
20
- if (!schema.formMeta || typeof schema.formMeta !== "object") {
21
- throw new Error(`${formName}: schema.formMeta 缺失`);
22
- }
23
- if (!Array.isArray(schema.fields) || schema.fields.length === 0) {
24
- throw new Error(`${formName}: schema.fields 不能为空`);
25
- }
26
-
27
- const seenFieldIds = new Set();
28
- schema.fields.forEach((field, index) => {
29
- const fieldLabel = `${formName}: fields[${index}]`;
30
- if (!field || typeof field !== "object") {
31
- throw new Error(`${fieldLabel} 必须是对象`);
32
- }
33
- const fieldId = String(field.fieldId || "").trim();
34
- if (!fieldId) {
35
- throw new Error(`${fieldLabel}.fieldId 不能为空`);
36
- }
37
- if (seenFieldIds.has(fieldId)) {
38
- throw new Error(`${formName}: fieldId 重复: ${fieldId}`);
39
- }
40
- seenFieldIds.add(fieldId);
41
- if (!String(field.componentName || "").trim()) {
42
- throw new Error(`${fieldLabel}.componentName 不能为空`);
43
- }
44
- });
45
- }
46
-
47
- export function createFormComponentNode(field, index) {
48
- const componentName = normalizeComponentName(field.componentName);
49
-
50
- return {
51
- componentName,
52
- id: field.id || `${field.fieldId || componentName}_${index + 1}`,
53
- title: field.label || field.fieldId || componentName,
54
- hidden: false,
55
- isLocked: false,
56
- condition: true,
57
- conditionGroup: "",
58
- props: {
59
- ...field,
60
- componentName,
61
- isFormComponent: true,
62
- fieldId: field.fieldId,
63
- label: field.label || field.fieldId,
64
- tips: field.tips || "",
65
- value: field.value || "",
66
- placeholder: field.placeholder || "",
67
- },
68
- };
69
- }
70
-
71
- export function transformToApiFormat(schema, formName = "unknown") {
72
- validateFormSchema(schema, formName);
73
-
74
- const { formMeta, fields } = schema;
75
- const formType = normalizeFormType(
76
- formMeta.formType || schema.template?.formType,
77
- );
78
- const componentNodes = fields.map(createFormComponentNode);
79
- const pageSchema = {
80
- version: "2.0",
81
- componentsTree: [
82
- {
83
- componentName: "Page",
84
- id: `${formMeta.formUuid || "form"}_page`,
85
- props: {},
86
- children: componentNodes,
87
- },
88
- ],
89
- };
90
-
91
- return {
92
- formUuid: formMeta.formUuid,
93
- appType: formMeta.appType,
94
- formType,
95
- fieldCount: componentNodes.length,
96
- schema: JSON.stringify(pageSchema),
97
- packages: JSON.stringify({}),
98
- };
99
- }
100
-
101
- export function normalizeFormType(formType) {
102
- const normalized = String(formType || "").trim().toLowerCase();
103
- if (["process", "workflow", "flow", "flowform", "processform"].includes(normalized)) {
104
- return "process";
105
- }
106
- return "receipt";
107
- }
108
-
109
- export function assertSchemaSyncResult(body, expectedFieldCount) {
110
- if (body?.code !== 200) {
111
- throw new Error(
112
- `API 业务失败: ${body?.code || "unknown"} ${body?.message || ""}`,
113
- );
114
- }
115
-
116
- if (!isValidTableName(body?.data?.tableName)) {
117
- throw new Error("API 同步后未返回有效 tableName,表结构可能未创建");
118
- }
119
-
120
- const actualFieldCount = getObjectSize(body?.data?.formFields);
121
- if (actualFieldCount !== expectedFieldCount) {
122
- throw new Error(
123
- `API 同步后 formFields 数量不匹配,期望 ${expectedFieldCount},实际 ${actualFieldCount}`,
124
- );
125
- }
126
- }
127
-
128
- export function assertFormReadyForBundle(formMeta, formName = "unknown") {
129
- if (!formMeta) {
130
- throw new Error(`${formName}: 平台未找到表单定义`);
131
- }
132
- if (!isValidTableName(formMeta.tableName)) {
133
- throw new Error(
134
- `${formName}: 平台表单缺少 tableName,请先运行 pnpm sync-schema --form ${formName}`,
135
- );
136
- }
137
- if (getObjectSize(formMeta.formFields) === 0) {
138
- throw new Error(
139
- `${formName}: 平台表单缺少 formFields,请先运行 pnpm sync-schema --form ${formName}`,
140
- );
141
- }
142
- }
@@ -1,165 +0,0 @@
1
- import crypto from "node:crypto";
2
- import fs from "node:fs";
3
- import path from "node:path";
4
-
5
- const defaultInlineLimit = 4096;
6
-
7
- const mimeExtensions = new Map([
8
- ["image/png", ".png"],
9
- ["image/jpeg", ".jpg"],
10
- ["image/gif", ".gif"],
11
- ["image/svg+xml", ".svg"],
12
- ["image/webp", ".webp"],
13
- ["image/avif", ".avif"],
14
- ["image/x-icon", ".ico"],
15
- ["font/woff", ".woff"],
16
- ["font/woff2", ".woff2"],
17
- ["font/ttf", ".ttf"],
18
- ["application/vnd.ms-fontobject", ".eot"],
19
- ["application/octet-stream", ".bin"],
20
- ]);
21
-
22
- function readInlineLimit() {
23
- const raw =
24
- process.env.LOWCODE_WORKSPACE_ASSETS_INLINE_LIMIT ||
25
- process.env.LOWCODE_ASSETS_INLINE_LIMIT ||
26
- "";
27
- if (!raw) return defaultInlineLimit;
28
- const parsed = Number(raw);
29
- if (!Number.isFinite(parsed) || parsed < 0) return defaultInlineLimit;
30
- return parsed;
31
- }
32
-
33
- function parseDataUrl(value) {
34
- if (!value.startsWith("data:")) return null;
35
- const commaIndex = value.indexOf(",");
36
- if (commaIndex < 0) return null;
37
- const meta = value.slice(5, commaIndex);
38
- const body = value.slice(commaIndex + 1);
39
- const parts = meta.split(";").filter(Boolean);
40
- const mime = (parts[0] || "application/octet-stream").toLowerCase();
41
- if (!parts.slice(1).some((part) => part.toLowerCase() === "base64")) {
42
- return null;
43
- }
44
- if (!/^[A-Za-z0-9+/=]+$/.test(body)) return null;
45
- return { mime, buffer: Buffer.from(body, "base64") };
46
- }
47
-
48
- function resolveAssetFile(parsed, assetCache, assetsDir) {
49
- const hash = crypto.createHash("sha256").update(parsed.buffer).digest("hex").slice(0, 16);
50
- const ext = mimeExtensions.get(parsed.mime) || ".bin";
51
- const cacheKey = `${parsed.mime}:${hash}`;
52
- const cached = assetCache.get(cacheKey);
53
- if (cached) return cached;
54
-
55
- const fileName = `asset-${hash}${ext}`;
56
- const filePath = path.join(assetsDir, fileName);
57
- fs.mkdirSync(assetsDir, { recursive: true });
58
- if (!fs.existsSync(filePath)) {
59
- fs.writeFileSync(filePath, parsed.buffer);
60
- }
61
- const asset = {
62
- fileName,
63
- filePath,
64
- mime: parsed.mime,
65
- size: parsed.buffer.length,
66
- };
67
- assetCache.set(cacheKey, asset);
68
- return asset;
69
- }
70
-
71
- function createExtractor({ inlineLimit, assetsDir, assetCache, emittedAssets }) {
72
- return function extract(dataUrl) {
73
- const parsed = parseDataUrl(dataUrl);
74
- if (!parsed || parsed.buffer.length <= inlineLimit) return null;
75
- const asset = resolveAssetFile(parsed, assetCache, assetsDir);
76
- emittedAssets.set(asset.fileName, asset);
77
- return asset;
78
- };
79
- }
80
-
81
- function rewriteCss(content, extractAsset) {
82
- let changed = false;
83
- const code = content.replace(
84
- /url\(\s*(["']?)(data:[^"'\\)]*?;base64,[A-Za-z0-9+/=]+)\1\s*\)/g,
85
- (full, _quote, dataUrl) => {
86
- const asset = extractAsset(dataUrl);
87
- if (!asset) return full;
88
- changed = true;
89
- return `url("assets/${asset.fileName}")`;
90
- },
91
- );
92
- return { changed, code };
93
- }
94
-
95
- function rewriteJs(content, extractAsset) {
96
- let changed = false;
97
- const code = content.replace(
98
- /(["'])(data:[^"'\\]*?;base64,[A-Za-z0-9+/=]+)\1/g,
99
- (full, _quote, dataUrl) => {
100
- const asset = extractAsset(dataUrl);
101
- if (!asset) return full;
102
- changed = true;
103
- return `new URL("assets/${asset.fileName}", import.meta.url).href`;
104
- },
105
- );
106
- return { changed, code };
107
- }
108
-
109
- function rewriteFile(filePath, extractAsset) {
110
- if (!fs.existsSync(filePath)) return { changed: false };
111
- const ext = path.extname(filePath).toLowerCase();
112
- if (ext !== ".css" && ext !== ".js" && ext !== ".mjs") {
113
- return { changed: false };
114
- }
115
- const content = fs.readFileSync(filePath, "utf-8");
116
- const result = ext === ".css" ? rewriteCss(content, extractAsset) : rewriteJs(content, extractAsset);
117
- if (result.changed) {
118
- fs.writeFileSync(filePath, result.code, "utf-8");
119
- }
120
- return { changed: result.changed };
121
- }
122
-
123
- export function extractLargeDataUrlAssets(options) {
124
- const outDir = options?.outDir;
125
- const files = (options?.files || []).filter(Boolean);
126
- if (!outDir || files.length === 0) {
127
- return { extracted: [], changedFiles: [] };
128
- }
129
-
130
- const inlineLimit =
131
- typeof options.inlineLimit === "number" ? options.inlineLimit : readInlineLimit();
132
- const assetsDir = path.join(outDir, options.assetsDir || "assets");
133
- const assetCache = new Map();
134
- const emittedAssets = new Map();
135
- const extractAsset = createExtractor({
136
- inlineLimit,
137
- assetsDir,
138
- assetCache,
139
- emittedAssets,
140
- });
141
- const changedFiles = [];
142
-
143
- for (const file of files) {
144
- const result = rewriteFile(file, extractAsset);
145
- if (result.changed) changedFiles.push(file);
146
- }
147
-
148
- return {
149
- changedFiles,
150
- extracted: Array.from(emittedAssets.values()),
151
- inlineLimit,
152
- };
153
- }
154
-
155
- export function formatExtractedAssetSummary(result) {
156
- const count = result?.extracted?.length || 0;
157
- if (!count) return "";
158
- const total = result.extracted.reduce((sum, asset) => sum + asset.size, 0);
159
- const formatBytes = (bytes) => {
160
- if (bytes < 1024) return `${bytes} B`;
161
- if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;
162
- return `${(bytes / 1024 / 1024).toFixed(2)} MB`;
163
- };
164
- return `抽离静态资源 ${count} 个,${formatBytes(total)},阈值 ${formatBytes(result.inlineLimit)}`;
165
- }