@lovrabet/rabetbase-cli 2.0.2-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/LICENSE +45 -0
  2. package/README.md +605 -0
  3. package/lib/ai-setup/config.js +1 -0
  4. package/lib/api/api-doc-ui.js +1 -0
  5. package/lib/api/api-doc.js +1 -0
  6. package/lib/api/api-pull-ui.js +1 -0
  7. package/lib/api/fetch-model-list.js +1 -0
  8. package/lib/api/generate-api-file.js +1 -0
  9. package/lib/api/main.js +1 -0
  10. package/lib/api/pull-silent.js +1 -0
  11. package/lib/app-menu/app-menu-sync-ui.js +1 -0
  12. package/lib/app-menu/create-menu.js +1 -0
  13. package/lib/app-menu/get-local-pages.js +1 -0
  14. package/lib/app-menu/get-online-menu-list.js +1 -0
  15. package/lib/app-menu/types.js +1 -0
  16. package/lib/app-menu/use-get-online-menu-list.js +1 -0
  17. package/lib/app-menu/utils.js +1 -0
  18. package/lib/app-menu/valid-url.js +1 -0
  19. package/lib/app-menu-update-cdn/current-content.js +1 -0
  20. package/lib/app-menu-update-cdn/input-cdn-asset.js +1 -0
  21. package/lib/app-menu-update-cdn/main.js +1 -0
  22. package/lib/app-menu-update-cdn/types.js +1 -0
  23. package/lib/app-menu-update-cdn/update-menu-cdn-url.js +1 -0
  24. package/lib/auth/auth-server-ui.js +1 -0
  25. package/lib/auth/auth-server.js +1 -0
  26. package/lib/auth/constant.js +1 -0
  27. package/lib/auth/get-cookie.js +1 -0
  28. package/lib/auth/is-session-valid.js +1 -0
  29. package/lib/auth/logout.js +1 -0
  30. package/lib/cli-flags.js +1 -0
  31. package/lib/cli.js +2 -0
  32. package/lib/commands/api.js +1 -0
  33. package/lib/commands/app.js +1 -0
  34. package/lib/commands/auth.js +1 -0
  35. package/lib/commands/bff/delete.js +1 -0
  36. package/lib/commands/bff/detail.js +1 -0
  37. package/lib/commands/bff/index.js +1 -0
  38. package/lib/commands/bff/list.js +1 -0
  39. package/lib/commands/bff/new.js +1 -0
  40. package/lib/commands/bff/pull.js +1 -0
  41. package/lib/commands/bff/push.js +1 -0
  42. package/lib/commands/bff/status.js +1 -0
  43. package/lib/commands/build.js +1 -0
  44. package/lib/commands/codegen/index.js +1 -0
  45. package/lib/commands/codegen/sdk.js +1 -0
  46. package/lib/commands/codegen/sql.js +1 -0
  47. package/lib/commands/config.js +1 -0
  48. package/lib/commands/create.js +1 -0
  49. package/lib/commands/dataset/detail.js +1 -0
  50. package/lib/commands/dataset/index.js +1 -0
  51. package/lib/commands/dataset/links.js +1 -0
  52. package/lib/commands/dataset/list.js +1 -0
  53. package/lib/commands/dataset/operations.js +1 -0
  54. package/lib/commands/init.js +1 -0
  55. package/lib/commands/logout.js +1 -0
  56. package/lib/commands/logs.js +1 -0
  57. package/lib/commands/mcp.js +1 -0
  58. package/lib/commands/menu.js +1 -0
  59. package/lib/commands/preview.js +1 -0
  60. package/lib/commands/registry.js +1 -0
  61. package/lib/commands/run.js +1 -0
  62. package/lib/commands/skill.js +1 -0
  63. package/lib/commands/sql/detail.js +1 -0
  64. package/lib/commands/sql/exec.js +1 -0
  65. package/lib/commands/sql/index.js +1 -0
  66. package/lib/commands/sql/list.js +1 -0
  67. package/lib/commands/sql/save.js +1 -0
  68. package/lib/commands/sql/validate.js +1 -0
  69. package/lib/commands/start.js +1 -0
  70. package/lib/config/config-help.js +1 -0
  71. package/lib/config/main.js +1 -0
  72. package/lib/constant/cli.js +1 -0
  73. package/lib/constant/domain.js +1 -0
  74. package/lib/constant/env.js +1 -0
  75. package/lib/context.js +1 -0
  76. package/lib/core/alias-resolver.js +1 -0
  77. package/lib/core/api-client.js +1 -0
  78. package/lib/core/bff/config.js +1 -0
  79. package/lib/core/bff/file-system.js +1 -0
  80. package/lib/core/bff/hash.js +1 -0
  81. package/lib/core/bff/lock.js +1 -0
  82. package/lib/core/bff/types.js +1 -0
  83. package/lib/core/bff/utils.js +1 -0
  84. package/lib/core/db-resolver.js +1 -0
  85. package/lib/core/sql-validator.js +1 -0
  86. package/lib/create-app/enhanced-guided-create.js +1 -0
  87. package/lib/create-app/format-elapsed.js +1 -0
  88. package/lib/create-app/main.js +1 -0
  89. package/lib/create-app/non-interactive.js +1 -0
  90. package/lib/create-app/task-finished.js +1 -0
  91. package/lib/create-app/task-loading.js +1 -0
  92. package/lib/create-app/task-running.js +1 -0
  93. package/lib/create-app/task-time.js +1 -0
  94. package/lib/create-app/use-copy-project-template.js +1 -0
  95. package/lib/create-app/use-format-code.js +1 -0
  96. package/lib/create-app/use-install-dependencies.js +1 -0
  97. package/lib/errors.js +1 -0
  98. package/lib/framework/flags.js +1 -0
  99. package/lib/framework/help.js +1 -0
  100. package/lib/framework/index.js +1 -0
  101. package/lib/framework/output.js +1 -0
  102. package/lib/framework/response.js +1 -0
  103. package/lib/framework/runner.js +1 -0
  104. package/lib/framework/types.js +1 -0
  105. package/lib/generated/build-info.js +1 -0
  106. package/lib/help.js +1 -0
  107. package/lib/init/main.js +1 -0
  108. package/lib/mcp/McpInstallUI.js +1 -0
  109. package/lib/mcp/claude.js +1 -0
  110. package/lib/mcp/cursor.js +1 -0
  111. package/lib/mcp/main.js +1 -0
  112. package/lib/mcp/mcp-install-non-interactive.js +1 -0
  113. package/lib/mcp/mcp-installer.js +1 -0
  114. package/lib/skills/main.js +1 -0
  115. package/lib/skills/npx-skills-add.js +1 -0
  116. package/lib/types/index.js +1 -0
  117. package/lib/ui/IDESelector.js +1 -0
  118. package/lib/ui/useIDESelection.js +1 -0
  119. package/lib/utils/ai_config.js +1 -0
  120. package/lib/utils/cdn-config.js +1 -0
  121. package/lib/utils/check-sdk-version.js +1 -0
  122. package/lib/utils/cli-version-check.js +1 -0
  123. package/lib/utils/config.js +1 -0
  124. package/lib/utils/copy-directory.js +1 -0
  125. package/lib/utils/file-utils.js +1 -0
  126. package/lib/utils/guides-cdn.js +1 -0
  127. package/lib/utils/http-client.js +1 -0
  128. package/lib/utils/logger.js +1 -0
  129. package/lib/utils/rules-cdn.js +1 -0
  130. package/lib/utils/sleep.js +1 -0
  131. package/lib/utils/template-replacer.js +1 -0
  132. package/package.json +77 -0
  133. package/sidecar/flags.json +10 -0
  134. package/templates/README.md +97 -0
  135. package/templates/generate-api/api.ts.tpl +47 -0
  136. package/templates/generate-api/client.ts.tpl +64 -0
  137. package/templates/projects/sub-app-react-demo/.prettierrc +1 -0
  138. package/templates/projects/sub-app-react-demo/CHANGELOG.md +53 -0
  139. package/templates/projects/sub-app-react-demo/README.md +318 -0
  140. package/templates/projects/sub-app-react-demo/docs/API_RULE_CHANGE.md +212 -0
  141. package/templates/projects/sub-app-react-demo/docs/quick-start.md +526 -0
  142. package/templates/projects/sub-app-react-demo/index.html +27 -0
  143. package/templates/projects/sub-app-react-demo/package.json +34 -0
  144. package/templates/projects/sub-app-react-demo/public/logo.svg +1 -0
  145. package/templates/projects/sub-app-react-demo/public/vite.svg +1 -0
  146. package/templates/projects/sub-app-react-demo/src/api/api.ts +83 -0
  147. package/templates/projects/sub-app-react-demo/src/api/client.ts +64 -0
  148. package/templates/projects/sub-app-react-demo/src/layouts/MainLayout.tsx +311 -0
  149. package/templates/projects/sub-app-react-demo/src/main.tsx +48 -0
  150. package/templates/projects/sub-app-react-demo/src/pages/dashboard/index.tsx +572 -0
  151. package/templates/projects/sub-app-react-demo/src/pages/data-screen/index.tsx +526 -0
  152. package/templates/projects/sub-app-react-demo/src/pages/index.tsx +467 -0
  153. package/templates/projects/sub-app-react-demo/src/pages/sdk-demo/index.tsx +453 -0
  154. package/templates/projects/sub-app-react-demo/src/pages/workbench/index.module.css +293 -0
  155. package/templates/projects/sub-app-react-demo/src/pages/workbench/index.tsx +155 -0
  156. package/templates/projects/sub-app-react-demo/src/router/index.tsx +30 -0
  157. package/templates/projects/sub-app-react-demo/src/style.css +92 -0
  158. package/templates/projects/sub-app-react-demo/src/utils/api.ts +12 -0
  159. package/templates/projects/sub-app-react-demo/src/vite-env.d.ts +2 -0
  160. package/templates/projects/sub-app-react-demo/tsconfig.json +26 -0
  161. package/templates/projects/sub-app-react-demo/vite.config.ts +111 -0
  162. package/templates/rules/lovrabet_rules.mdc.tpl +891 -0
  163. package/templates/skill/SKILL.md.tpl +120 -0
@@ -0,0 +1,526 @@
1
+ # Lovrabet子应用接入指南 - React 18 + Vite 实操版
2
+
3
+ > 🎯 **目标**:通过实际操作完成React项目接入Lovrabet平台
4
+ > 📦 **官方代码**:https://github.com/lovrabet-ai/sub-app-react-demo
5
+ > ⏱️ **预计时间**:20min可以走通从本地开发到线上部署的完成流程,看到自定义页面在平台中的渲染效果
6
+
7
+ ---
8
+
9
+ ## 🚀 场景一:Hello World 实操(10min)
10
+
11
+ **目标**:下载官方代码,本地运行验证,构建部署,集成到主应用
12
+
13
+ ### Step 1: 下载GitHub仓库
14
+
15
+ ```bash
16
+ # 推荐使用SSH(需要配置GitHub SSH密钥)
17
+ git clone git@github.com:lovrabet-ai/sub-app-react-demo.git
18
+
19
+ # 或使用HTTPS(适合快速体验)
20
+ # git clone https://github.com/lovrabet-ai/sub-app-react-demo.git
21
+
22
+ cd sub-app-react-demo
23
+ git checkout main
24
+ ```
25
+
26
+ ### Step 2: 本地安装和运行
27
+
28
+ ```bash
29
+ # 安装依赖
30
+ npm i
31
+
32
+ # 本地运行查看效果
33
+ npm start
34
+ ```
35
+
36
+ **本地验证**:
37
+
38
+ - 浏览器打开 https://dev.lovrabet.com:5173/hello-world
39
+ - 确认Hello World页面正常显示
40
+ - 检查控制台无报错信息
41
+
42
+ ![本地终端运行](https://i.yuntooai.com/u/AZjq66VncACe2C_z8m9_Qg.png)
43
+
44
+ ### Step 3: 构建产物
45
+
46
+ ```bash
47
+ # 构建微前端产物
48
+ npm run build
49
+ ```
50
+
51
+ **构建验证**:
52
+
53
+ - 检查 `dist/` 目录生成
54
+ - 确认存在 `dist/assets/main.js` 文件(ES modules格式)
55
+ - 确认存在 `dist/assets/main.css` 样式文件
56
+
57
+ 本地构建成功
58
+ ![本地构建产物](https://i.yuntooai.com/u/AZjq8hJFcACYdK1TnupxaA.png)
59
+
60
+ 本地构建后生成的产物
61
+ ![本地构建后生成的产物](https://i.yuntooai.com/u/AZjrffaucACvb0HJGELOAQ.png)
62
+
63
+ ### Step 4: 上传构建产物到CDN
64
+
65
+ #### 选项A:使用业务方已有CDN
66
+
67
+ ```bash
68
+ # 将 dist/ 目录内容上传到您的CDN
69
+ # 例如:https://your-cdn.com/sub-app-react-demo/
70
+ ```
71
+
72
+ #### 选项B:使用Lovrabet临时CDN服务
73
+
74
+ ```bash
75
+ # 联系Lovrabet的技术支持 @风月 获取临时CDN上传地址,仅用于功能体验,3天后CDN链接会失效
76
+ ```
77
+
78
+ **CDN验证**:
79
+
80
+ - 确认JS文件可访问:
81
+ - 🔧 **您的CDN格式**:`https://your-cdn.com/sub-app-react-demo/dist/assets/main.js`
82
+ - 📌 **演示环境示例**:`https://g.yuntooai.com/dist/sub-app-react-demo/202508271755/main.js`
83
+ - 确认CSS文件可访问:
84
+ - 🔧 **您的CDN格式**:`https://your-cdn.com/sub-app-react-demo/dist/assets/main.css`
85
+ - 📌 **演示环境示例**:`https://g.yuntooai.com/dist/sub-app-react-demo/202508271755/main.css`
86
+
87
+ > 💡 **说明**:`your-cdn.com` 需替换为您实际的CDN域名
88
+
89
+ ### Step 5: 到Lovrabet主应用中集成Hello World页面
90
+
91
+ 在Lovrabet平台配置页面:
92
+
93
+ ```text
94
+ 页面配置:
95
+ ├── 页面名称: Hello World Demo # 🔧 可自定义:菜单中显示的名称
96
+ ├── 路由路径: /hello-world # ⚠️ 必须与 src/router/index.tsx 中的 path 保持一致
97
+ ├── 微应用唯一标识: react-hello-world # 🔧 可自定义:用于区分不同微应用
98
+ ├── 资源加载方式: import # ⚡ 固定值:Vite项目必须选择import
99
+ └── 资源加载列表: # 🔧 替换为您的CDN地址
100
+ ├── https://your-cdn.com/sub-app-react-demo/dist/assets/main.js
101
+ └── https://your-cdn.com/sub-app-react-demo/dist/assets/main.css
102
+ ```
103
+
104
+ > ⚠️ **重要提示**:路由路径必须与代码中定义的路径完全对应,否则页面无法正确加载
105
+
106
+ **集成验证**:
107
+
108
+ - 主应用菜单出现"Hello World Demo"
109
+ - 点击菜单能正常显示页面
110
+ - 页面功能与本地运行效果一致
111
+
112
+ #### 5.1 新增页面
113
+
114
+ 访问菜单配置链接:https://app.lovrabet.com/app/app-f4c03acb/pages/
115
+ ![](https://i.yuntooai.com/u/AZjrKSOvcACyPcNb4irCUA.png)
116
+
117
+ #### 5.2 配置路由
118
+
119
+ ![hello-world页面集成到主应用中](https://i.yuntooai.com/u/AZjq-EX5cACZF-TKk4EvTw.png)
120
+
121
+ ### step 6:验证页面运行效果
122
+
123
+ **✅ 场景一完成标志**:主应用中能正常访问Hello World页面
124
+
125
+ https://app-f4c03acb.app.lovrabet.com/hello-world
126
+ helloworld运行时页面: https://app-f4c03acb.app.lovrabet.com/hello-world
127
+ ![helloworld运行时页面](https://i.yuntooai.com/u/AZjq_pSDcACOdA8Me_CFFQ.png)
128
+
129
+ ---
130
+
131
+ ## 📊 场景二:真实API数据请求与图表展示(10min)
132
+
133
+ **目标**:体验调用真实业务接口、处理跨域请求、展示动态图表的完整功能
134
+
135
+ ### Step 1: 更新图表页面代码
136
+
137
+ ```bash
138
+ # 项目已包含 ChartFetch.tsx 页面
139
+ # 使用真实 API:https://runtime.lovrabet.com/dbapi/runtime/yuntoo/app-f4c03acb/6c6c94a6ef064fe898cfa895fe5a38f5/getList
140
+
141
+ cat src/pages/ChartFetch.tsx
142
+ ```
143
+
144
+ [https://github.com/lovrabet-ai/sub-app-react-demo/blob/26f5dd3981ed5ad955dc3949501e308678438fb7/src/pages/ChartFetch.tsx#L33](https://github.com/lovrabet-ai/sub-app-react-demo/blob/26f5dd3981ed5ad955dc3949501e308678438fb7/src/pages/ChartFetch.tsx#L33)
145
+
146
+ 注意:
147
+
148
+ - API地址的结构说明:https://runtime.lovrabet.com/${type}/runtime/${tenentCode}/${appCode}/${datasetCode}/getList
149
+ - 请将接口地址换成业务有权限的接口地址,就能运行看到自己负责业务的接口数据了,有权限的api地址请查看 https://app.lovrabet.com/app/${appCode}/admin/dataset,直接复制接口链接就能通过浏览器console控制验证接口请求的调用是否成功;
150
+
151
+ ### Step 2: 本地运行验证
152
+
153
+ ```bash
154
+ # 项目已安装echarts依赖
155
+ npm start
156
+ ```
157
+
158
+ **本地验证**:
159
+
160
+ - 浏览器访问 https://dev.lovrabet.com:5173/chart-fetch
161
+ - 确认饼图显示客户状态分布(活跃、正常、流失)
162
+
163
+ ### Step 3: 构建更新的产物
164
+
165
+ ```bash
166
+ # 重新构建包含图表功能的版本
167
+ npm run build
168
+ ```
169
+
170
+ **构建验证**:
171
+
172
+ - `dist/assets/main.js` 包含echarts
173
+ - `dist/assets/main.css` 样式文件更新
174
+ - 注意:React、Ant Design已外部化,体积较小
175
+
176
+ ### Step 4: 重新上传到CDN
177
+
178
+ ```bash
179
+ # 将更新后的 dist/ 内容重新上传
180
+ # 覆盖之前的文件或使用新的路径
181
+ ```
182
+
183
+ ### Step 5: 到Lovrabet主应用中集成ChartFetch页面
184
+
185
+ **页面2:数据图表入口**
186
+
187
+ ```text
188
+ 页面配置:
189
+ ├── 页面名称: 数据图表 # 🔧 可自定义:菜单中显示的名称
190
+ ├── 路由路径: /chart-fetch # ⚠️ 必须与 src/router/index.tsx 中的 path 保持一致
191
+ ├── 资源加载方式: import # ⚡ 固定值:Vite项目必须选择import
192
+ └── 资源加载列表: # 🔧 替换为您的CDN地址(与Hello World共享同一构建产物)
193
+ ├── https://your-cdn.com/sub-app-react-demo/dist/assets/main.js
194
+ └── https://your-cdn.com/sub-app-react-demo/dist/assets/main.css
195
+ ```
196
+
197
+ #### 5.1 配置
198
+
199
+ 访问链接:https://app.lovrabet.com/app/app-f4c03acb/preview
200
+ ![chart-fetch页面集成到主应用中](https://i.yuntooai.com/u/AZjq9nKvcACEawJpHIM4Gg.png)
201
+
202
+ **集成验证**:
203
+
204
+ - 主应用此时又多了一个菜单项,总计出现了2个菜单
205
+ - "Hello World"菜单 → 显示Hello World页面
206
+ - "数据图表"菜单 → 显示图表页面,数据正常加载
207
+
208
+ **✅ 场景二完成标志**:两个菜单都能正常工作,图表数据正常显示
209
+
210
+ ![](https://i.yuntooai.com/u/AZjrAvi8cACGVAKkuXXkkQ.png)
211
+
212
+ ---
213
+
214
+ ## 🔧 场景三:改造已有项目(20min)
215
+
216
+ **目标**:将您现有的React项目改造为微前端,直接请求真实的业务接口,实现无缝集成到Lovrabet平台
217
+
218
+ ### 改造已有项目流程
219
+
220
+ 1. **分析现有项目** → 确定改造范围和接口依赖
221
+ 2. **修改入口文件** → 添加微前端生命周期函数
222
+ 3. **配置构建工具** → 修改vite.config.js支持ES modules
223
+ 4. **封装API调用** → 统一请求方式,直接调用真实接口
224
+ 5. **本地开发测试** → 验证功能完整性
225
+ 6. **构建部署** → 生成ES modules格式产物
226
+ 7. **平台配置** → 配置多个页面入口
227
+ 8. **生产验证** → 确保集成效果符合预期
228
+
229
+ ### 官方配置参数详解
230
+
231
+ 根据Lovrabet官方文档,配置页面时需要理解以下关键参数:
232
+
233
+ #### 1. 路由路径 (path)
234
+
235
+ ```text
236
+ 说明:应用实际访问时链接URL中的path部分
237
+ 格式:https://${appcode}.app.lovrabet.com/${pagePath}
238
+
239
+ ⚠️ 重要:路由路径必须与 src/router/index.tsx 中定义的路径完全一致
240
+
241
+ 示例对应关系:
242
+ ```
243
+
244
+ ```typescript
245
+ // src/router/index.tsx 中的配置
246
+ {
247
+ path: "hello-world", // <- 这里定义的路径
248
+ element: <HelloWorld />,
249
+ }
250
+
251
+ // 平台配置中的路由路径
252
+ 路由路径: /hello-world // <- 必须保持一致(加上/前缀)
253
+ ```
254
+
255
+ ```text
256
+ 实际访问链接示例:
257
+ - 配置"/hello-world" → https://app-f4c03acb.app.lovrabet.com/hello-world
258
+ - 配置"/chart-fetch" → https://app-f4c03acb.app.lovrabet.com/chart-fetch
259
+
260
+ 其中:
261
+ - 🔧 appcode: 您的应用编码(创建应用时生成,如:app-f4c03acb)
262
+ - ⚠️ pagePath: 必须与代码中的路由配置一致
263
+
264
+ 要求:路径需要在整个应用中唯一
265
+ ```
266
+
267
+ #### 2. 微应用唯一标识
268
+
269
+ ```text
270
+ 说明:标记页面所属的源码微应用,多个页面可能属于同一个源码微应用
271
+ 默认:如不填写,则实际运行时会将"路由路径(path)"作为应用标识
272
+
273
+ 🔧 建议:使用有意义的名称,如:react-hello-world、customer-management 等
274
+ ```
275
+
276
+ #### 3. Basename
277
+
278
+ ```text
279
+ 说明:指定微应用接收的basename,微应用包含前端路由的场景下需要使用
280
+ 默认:如不填写,则默认"路由路径(path)"即作为basename
281
+
282
+ 💡 提示:本示例项目已自动处理 basename,通常无需手动配置
283
+ ```
284
+
285
+ #### 4. 资源加载方式
286
+
287
+ ```text
288
+ 可选值:
289
+ - script(默认):通过HTML <script /> 标签加载,适用于Angular CLI和Vue CLI
290
+ - fetch:通过window.fetch 加载并缓存脚本资源,沙箱模式下使用
291
+ - import:加载ES modules类型微应用
292
+
293
+ ⚡ 重要:Vite构建的项目必须选择 import
294
+ ```
295
+
296
+ ### Step 1: 改造现有项目结构
297
+
298
+ #### 1.1 修改入口文件
299
+
300
+ ```jsx
301
+ // src/main.jsx - 改造为微前端入口
302
+ import React from "react";
303
+ import { createRoot } from "react-dom/client";
304
+ import { isInIcestark } from "@ice/stark-app";
305
+ import { ConfigProvider } from "antd";
306
+ import zhCN from "antd/locale/zh_CN";
307
+ import App from "./router"; // 注意:App实际上是路由组件
308
+ import "./style.css";
309
+
310
+ // 判断是否在微前端环境中运行
311
+ if (!isInIcestark()) {
312
+ // 获取 index.html 中定义的根容器元素(id="root")
313
+ const container = document.getElementById("root");
314
+ if (container) {
315
+ const root = createRoot(container);
316
+ root.render(
317
+ <ConfigProvider locale={zhCN}>
318
+ <App />
319
+ </ConfigProvider>,
320
+ );
321
+ }
322
+ }
323
+
324
+ // 关键:暴露 mount 供主应用加载时调用
325
+ export function mount({ container, customProps }) {
326
+ const root = createRoot(container);
327
+ root.render(
328
+ <React.StrictMode>
329
+ <ConfigProvider locale={zhCN}>
330
+ <App {...customProps} />
331
+ </ConfigProvider>
332
+ </React.StrictMode>,
333
+ );
334
+ return root;
335
+ }
336
+
337
+ // 关键:暴露 unmount 供主应用卸载时调用
338
+ export function unmount({ container }) {
339
+ // React 18 中不再需要手动卸载,但为了兼容性保留
340
+ const root = container._reactRoot;
341
+ if (root) {
342
+ root.unmount();
343
+ }
344
+ }
345
+ ```
346
+
347
+ #### 1.2 配置Vite构建
348
+
349
+ ```javascript
350
+ // vite.config.ts - 微前端构建配置
351
+ import { defineConfig, loadEnv } from "vite";
352
+ import react from "@vitejs/plugin-react";
353
+ import htmlPlugin from "vite-plugin-index-html";
354
+ import pluginExternal from "vite-plugin-external";
355
+
356
+ export default defineConfig(async ({ mode }) => {
357
+ const env = loadEnv(mode, process.cwd());
358
+ const PORT = Number(env.VITE_APP_PORT) || 5173;
359
+
360
+ return {
361
+ plugins: [
362
+ react(),
363
+ // 关键配置:提供 vite lib 打包 + html plugin 能力
364
+ htmlPlugin({
365
+ input: "src/main.tsx",
366
+ preserveEntrySignatures: "exports-only",
367
+ }),
368
+ // 外部化依赖,减小打包体积
369
+ pluginExternal({
370
+ externals: {
371
+ react: "React",
372
+ "react-dom": "ReactDOM",
373
+ antd: "antd",
374
+ dayjs: "dayjs",
375
+ },
376
+ }),
377
+ ],
378
+
379
+ // 开发服务器配置
380
+ server: {
381
+ port: PORT,
382
+ host: "dev.lovrabet.com",
383
+ headers: {
384
+ "Access-Control-Allow-Origin": "*",
385
+ },
386
+ },
387
+
388
+ // 生产构建配置 - ES modules格式
389
+ build: {
390
+ outDir: "dist",
391
+ target: "esnext",
392
+ rollupOptions: {
393
+ output: {
394
+ format: "es",
395
+ entryFileNames: "assets/[name].js",
396
+ assetFileNames: "assets/[name].css",
397
+ },
398
+ },
399
+ },
400
+ };
401
+ });
402
+ ```
403
+
404
+ ### Step 2: API请求封装(核心配置)
405
+
406
+ **🔑 关键点:直接请求真实接口的跨域问题必须配置 `credentials: 'include'` 来携带Cookie**
407
+
408
+ ```javascript
409
+ // 简单封装 apiRequest - 这是最简单有效的实现
410
+ const apiRequest = async (path, options = {}) => {
411
+ const response = await fetch(`https://runtime.lovrabet.com${path}`, {
412
+ credentials: "include", // 关键配置:跨域请求携带Cookie
413
+ headers: {
414
+ "Content-Type": "application/json",
415
+ ...options.headers,
416
+ },
417
+ ...options,
418
+ });
419
+ return response.json();
420
+ };
421
+
422
+ // 使用示例
423
+ const fetchUserData = async () => {
424
+ try {
425
+ const data = await apiRequest(
426
+ "/dbapi/runtime/yuntoo/app-f4c03acb/6c6c94a6ef064fe898cfa895fe5a38f5/getList",
427
+ {
428
+ method: "POST",
429
+ body: JSON.stringify({ pageSize: 10, currentPage: 1 }),
430
+ },
431
+ );
432
+
433
+ if (data.success) {
434
+ console.log("数据获取成功:", data.data);
435
+ }
436
+ } catch (error) {
437
+ console.error("请求失败:", error);
438
+ }
439
+ };
440
+ ```
441
+
442
+ ### Step 3: 路由配置
443
+
444
+ ```jsx
445
+ // src/router/index.jsx - 路由配置文件
446
+ import React from "react";
447
+ import { createBrowserRouter, RouterProvider } from "react-router";
448
+ import { getBasename } from "@ice/stark-app";
449
+ import MainLayout from "../layouts/MainLayout";
450
+ import HelloWorld from "../pages/HelloWorld";
451
+ import ChartFetch from "../pages/ChartFetch";
452
+
453
+ const router = createBrowserRouter(
454
+ [
455
+ {
456
+ path: "/",
457
+ element: <MainLayout />,
458
+ children: [
459
+ {
460
+ index: true,
461
+ element: <HelloWorld />,
462
+ },
463
+ {
464
+ path: "hello-world",
465
+ element: <HelloWorld />,
466
+ },
467
+ {
468
+ path: "chart-fetch",
469
+ element: <ChartFetch />,
470
+ },
471
+ ],
472
+ },
473
+ ],
474
+ {
475
+ // 可选:通过getBasename()获取到微应用运行时的basename并传入
476
+ basename: getBasename() || "/",
477
+ },
478
+ );
479
+
480
+ console.log("MicroAppRouter:", {
481
+ routes: router.routes,
482
+ basename: router.basename,
483
+ });
484
+
485
+ const AppRouter: React.FC = () => {
486
+ return <RouterProvider router={router} />;
487
+ };
488
+
489
+ export default AppRouter;
490
+ ```
491
+
492
+ ### Step 4: 本地开发、测试、集成到主应用
493
+
494
+ 同场景一和场景二的操作
495
+
496
+ ## 🛠️ 常见问题和解决方案
497
+
498
+ ### 改造相关问题
499
+
500
+ **问题1:现有项目路由冲突**
501
+ **解决**:
502
+
503
+ - 使用正确的basename,确保在主应用中也是唯一的
504
+ - 检查路由配置与平台配置的路径匹配
505
+ - 使用相对路径而非绝对路径
506
+
507
+ **问题2:接口请求失败**
508
+ **解决**:
509
+
510
+ - 检查API地址配置是否正确
511
+ - 验证接口的CORS配置
512
+
513
+ ### 构建部署问题
514
+
515
+ **问题4:构建后资源加载失败**
516
+ **解决**:
517
+
518
+ - 确保选择import加载方式
519
+ - 检查CDN地址是否正确
520
+ - 验证资源文件是否完整上传
521
+
522
+ **问题5:我的业务工程能不能独立运行,仅调用Lovrabet的api接口**
523
+ **解决**:
524
+
525
+ - step1:子应用不挂载到主应用,也是支持独立运行的;
526
+ - step2:联系Lovrabet技术 @fengyue 独立配置业务自有域名来解决cors跨域;
@@ -0,0 +1,27 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+
4
+ <head>
5
+ <meta charset="UTF-8" />
6
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <title>Lovrabet扩展开发应用</title>
9
+ <!-- React 18 CDN -->
10
+ <script crossorigin src="https://g.alicdn.com/code/lib/react/18.3.1/umd/react.production.min.js"></script>
11
+ <script crossorigin src="https://g.alicdn.com/code/lib/react-dom/18.3.1/umd/react-dom.production.min.js"></script>
12
+ <!-- React Router CDN -->
13
+ <!-- <script
14
+ crossorigin
15
+ src="https://g.alicdn.com/code/lib/react-router/6.30.1/react-router.production.min.js"
16
+ ></script> -->
17
+ <!-- Ant Design CDN -->
18
+ <script crossorigin src="https://g.alicdn.com/code/lib/dayjs/1.11.13/dayjs.min.js"></script>
19
+ <script crossorigin src="https://g.alicdn.com/code/lib/antd/5.26.5/antd.min.js"></script>
20
+ <link rel="stylesheet" href="https://g.alicdn.com/code/lib/antd/5.26.5/reset.min.css" />
21
+ </head>
22
+
23
+ <body>
24
+ <div id="root"></div>
25
+ </body>
26
+
27
+ </html>
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "sub-app-react-demo",
3
+ "version": "1.1.0",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "start": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "@ant-design/icons": "^6.0.0",
13
+ "@ice/stark-app": "^1.5.0",
14
+ "@lovrabet/sdk": "latest",
15
+ "antd": "^5.26.7",
16
+ "echarts": "^5.6.0",
17
+ "echarts-for-react": "^3.0.2",
18
+ "prettier": "latest",
19
+ "react": "^18.3.1",
20
+ "react-dom": "^18.3.1",
21
+ "react-router-dom": "^6.30.1"
22
+ },
23
+ "devDependencies": {
24
+ "@types/react": "^18.3.23",
25
+ "@types/react-dom": "^18.3.7",
26
+ "@vitejs/plugin-react": "^4.7.0",
27
+ "rollup-plugin-visualizer": "^6.0.3",
28
+ "typescript": "~5.8.3",
29
+ "vite": "^7.0.6",
30
+ "vite-plugin-external": "^6.2.2",
31
+ "vite-plugin-index-html": "^2.0.2",
32
+ "vite-plugin-pages": "^0.33.1"
33
+ }
34
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="70" height="70" viewBox="0 0 70 70"><g><g><rect x="0" y="0" width="70" height="70" rx="12" fill="#FFFFFF" fill-opacity="1"/></g><g><g><path d="M7,26.333216076660158L7,46.010616076660156Q7.000263623,46.25591607666016,7.0126644,46.500916076660154Q7.0250652,46.74591607666016,7.0495733,46.990016076660154Q7.0740814,47.23411607666016,7.110638,47.47671607666015Q7.147194,47.71941607666015,7.195711,47.95991607666016Q7.244228,48.20051607666016,7.304589,48.438416076660154Q7.364949,48.67631607666016,7.437008,48.911016076660154Q7.509067,49.14571607666016,7.592652,49.376616076660156Q7.676236,49.607516076660154,7.771144,49.83411607666016Q7.866052,50.06071607666016,7.972056,50.282416076660155Q8.07806,50.504116076660154,8.1949,50.720316076660154Q8.31175,50.93661607666016,8.43915,51.146916076660155Q8.566559999999999,51.35721607666016,8.70421,51.561116076660156Q8.84187,51.76501607666015,8.98945,51.962016076660156Q9.13703,52.158916076660155,9.29418,52.348516076660154Q9.451319999999999,52.538016076660156,9.61766,52.719716076660156Q9.78399,52.901416076660155,9.959109999999999,53.07471607666016Q10.13424,53.24811607666015,10.317730000000001,53.41281607666016Q10.50122,53.57741607666016,10.69263,53.73301607666016Q10.88405,53.88851607666015,11.082930000000001,54.034516076660154Q11.28181,54.18061607666016,11.487680000000001,54.31681607666015Q11.69355,54.453016076660155,11.90591,54.579116076660156Q12.118269999999999,54.705116076660154,12.33661,54.820716076660155Q12.55495,54.93621607666016,12.778749999999999,55.04111607666016Q13.00254,55.14591607666016,13.231259999999999,55.23971607666016Q13.45997,55.33351607666015,13.69305,55.41611607666016Q13.92613,55.49871607666016,14.16301,55.56991607666016Q14.399899999999999,55.64101607666016,14.64002,55.700616076660154Q14.88014,55.76021607666016,15.12292,55.80801607666016Q15.3657,55.855816076660155,15.61056,55.891816076660156Q15.85541,55.92781607666016,16.10175,55.95181607666016Q16.34809,55.97581607666016,16.59532,55.987916076660156Q16.84256,55.999916076660156,17.0901,55.999916076660156L7,55.999916076660156L7,56.000116076660156L63,56.000116076660156L63,55.999916076660156L52.9099,55.999916076660156Q53.157,55.999916076660156,53.4037,55.987916076660156Q53.6505,55.975916076660155,53.8963,55.95201607666016Q54.1422,55.92811607666015,54.3866,55.892216076660155Q54.631,55.85641607666015,54.8733,55.80881607666016Q55.1156,55.76111607666016,55.3553,55.70181607666016Q55.595,55.642416076660155,55.8314,55.571616076660156Q56.0679,55.500716076660154,56.3006,55.41841607666016Q56.5333,55.336116076660154,56.7616,55.242616076660155Q56.9899,55.14921607666015,57.2134,55.044816076660155Q57.4368,54.94031607666015,57.6549,54.825216076660155Q57.8729,54.71011607666016,58.085,54.58451607666016Q58.297,54.45891607666016,58.5027,54.32321607666016Q58.7083,54.18751607666016,58.907,54.042016076660154Q59.1056,53.896516076660156,59.2969,53.741516076660155Q59.4881,53.58651607666015,59.6715,53.422416076660156Q59.8549,53.25831607666016,60.0299,53.08561607666016Q60.205,52.91281607666016,60.3713,52.73181607666016Q60.5376,52.55071607666016,60.6948,52.361816076660155Q60.8519,52.17291607666016,60.9996,51.97661607666016Q61.1472,51.78031607666016,61.285,51.577116076660154Q61.4228,51.37391607666016,61.5504,51.16421607666015Q61.678,50.954516076660155,61.795,50.73891607666015Q61.9121,50.52331607666016,62.0184,50.302316076660155Q62.1247,50.08131607666016,62.2199,49.855416076660156Q62.3152,49.62951607666016,62.3992,49.39921607666015Q62.4831,49.16891607666015,62.5556,48.93491607666016Q62.6282,48.70081607666015,62.689,48.463516076660156Q62.7499,48.22621607666016,62.799,47.98631607666016Q62.848,47.74631607666016,62.8852,47.50431607666015Q62.9224,47.26221607666016,62.9475,47.01861607666016Q62.9727,46.775116076660154,62.9858,46.53061607666016Q62.9989,46.28611607666016,62.9999,46.041216076660156L62.9999,26.333416076660157L62.9999,26.333216076660158Q62.9999,26.005916076660156,62.9837,25.679016076660155Q62.9675,25.352116076660156,62.9351,25.02631607666016Q62.9028,24.700616076660154,62.8543,24.376816076660155Q62.8058,24.053116076660157,62.7414,23.73201607666016Q62.677,23.411016076660154,62.5967,23.09351607666016Q62.5165,22.776006076660156,62.4206,22.46278607666016Q62.3247,22.149566076660157,62.2135,21.841386076660157Q62.1022,21.533206076660157,61.9758,21.23080607666016Q61.8494,20.928406076660156,61.7082,20.632516076660156Q61.567,20.336626076660156,61.4114,20.047956076660157Q61.2557,19.759296076660156,61.0859,19.478546076660155Q60.9161,19.197796076660154,60.7326,18.925646076660158Q60.5491,18.653496076660154,60.3524,18.390596076660156Q60.1556,18.127686076660154,59.9461,17.87467607666016Q59.7366,17.621656076660155,59.5148,17.379126076660157Q59.293,17.136606076660158,59.0595,16.905156076660155Q58.826,16.673716076660156,58.5813,16.453896076660158Q58.3365,16.234086076660155,58.0812,16.026446076660157Q57.826,15.818796076660156,57.5607,15.623816076660155Q57.2954,15.428836076660156,57.0208,15.246986076660157Q56.7462,15.065146076660156,56.4629,14.896866076660157Q56.1796,14.728596076660157,55.8884,14.574296076660156Q55.5971,14.420006076660156,55.2986,14.280056076660156Q55,14.140116076660156,54.6949,14.014856076660156Q54.3898,13.889597076660156,54.0788,13.779328076660157Q53.7678,13.669059076660156,53.4518,13.574045076660155Q53.1358,13.479030076660155,52.8154,13.399499076660156Q52.495,13.319968076660157,52.1711,13.256112076660155Q51.8472,13.192256076660156,51.5205,13.144229076660157Q51.1938,13.096202176660157,50.8651,13.064119676660157Q50.5365,13.032037276660157,50.2066,13.015976676660156Q49.8767,12.999916076660156,49.5465,12.999916076660156Q49.2162,12.999916076660156,48.8863,13.015976676660156Q48.5565,13.032037276660157,48.2278,13.064119676660157Q47.8991,13.096202176660157,47.5724,13.144229076660157Q47.2457,13.192256076660156,46.9218,13.256112076660155Q46.5979,13.319968076660157,46.2775,13.399499076660156Q45.9572,13.479030076660155,45.6411,13.574045076660155Q45.3251,13.669059076660156,45.0141,13.779328076660157Q44.7032,13.889597076660156,44.3981,14.014856076660156Q44.0929,14.140116076660156,43.7944,14.280056076660156Q43.4958,14.420006076660156,43.2046,14.574296076660156Q42.9133,14.728596076660157,42.63,14.896866076660157Q42.3467,15.065146076660156,42.0721,15.246986076660157Q41.7975,15.428836076660156,41.5323,15.623816076660155Q41.267,15.818796076660156,41.0117,16.026446076660157Q40.7564,16.234086076660155,40.5117,16.453896076660158Q40.267,16.673716076660156,40.0334,16.905156076660155Q39.7999,17.136606076660158,39.5781,17.379126076660157Q39.3563,17.621656076660155,39.1468,17.87467607666016Q38.9373,18.127686076660154,38.7406,18.390596076660156Q38.543800000000005,18.653496076660154,38.360299999999995,18.925646076660158Q38.1768,19.197796076660154,38.0071,19.478546076660155Q37.8373,19.759296076660156,37.6816,20.047956076660157Q37.5259,20.336626076660156,37.384699999999995,20.632516076660156Q37.2435,20.928406076660156,37.1171,21.23080607666016Q36.990700000000004,21.533206076660157,36.879400000000004,21.841386076660157Q36.7682,22.149566076660157,36.6723,22.46278607666016Q36.5764,22.776006076660156,36.4962,23.09351607666016Q36.416,23.411016076660154,36.3515,23.73201607666016Q36.287099999999995,24.053116076660157,36.238600000000005,24.376816076660155Q36.190200000000004,24.700616076660154,36.1578,25.02631607666016Q36.1254,25.352116076660156,36.1092,25.679016076660155Q36.093,26.005916076660156,36.093,26.333216076660158L36.093,26.333416076660157L33.9069,26.333416076660157L33.9069,26.333216076660158Q33.9069,26.005916076660156,33.890699999999995,25.679016076660155Q33.8745,25.352116076660156,33.8421,25.02631607666016Q33.809799999999996,24.700616076660154,33.7613,24.376816076660155Q33.7128,24.053116076660157,33.648399999999995,23.73201607666016Q33.584,23.411016076660154,33.503699999999995,23.09351607666016Q33.423500000000004,22.776006076660156,33.327600000000004,22.46278607666016Q33.231700000000004,22.149566076660157,33.1205,21.841386076660157Q33.0092,21.533206076660157,32.8828,21.23080607666016Q32.7564,20.928406076660156,32.6152,20.632516076660156Q32.474000000000004,20.336626076660156,32.3183,20.047956076660157Q32.1627,19.759296076660156,31.9929,19.478546076660155Q31.8231,19.197796076660154,31.6396,18.925646076660158Q31.4561,18.653496076660154,31.2594,18.390596076660156Q31.0626,18.127686076660154,30.8531,17.87467607666016Q30.6436,17.621656076660155,30.4218,17.379126076660157Q30.2,17.136606076660158,29.9665,16.905156076660155Q29.7329,16.673716076660156,29.4882,16.453896076660158Q29.2435,16.234086076660155,28.9882,16.026446076660157Q28.7329,15.818796076660156,28.4677,15.623816076660155Q28.2024,15.428836076660156,27.9278,15.246986076660157Q27.6532,15.065146076660156,27.3699,14.896866076660157Q27.0866,14.728596076660157,26.7954,14.574296076660156Q26.5041,14.420006076660156,26.2055,14.280056076660156Q25.907,14.140116076660156,25.6019,14.014856076660156Q25.2967,13.889597076660156,24.9858,13.779328076660157Q24.6748,13.669059076660156,24.3588,13.574045076660155Q24.0427,13.479030076660155,23.7224,13.399499076660156Q23.402,13.319968076660157,23.0781,13.256112076660155Q22.7542,13.192256076660156,22.427500000000002,13.144229076660157Q22.1008,13.096202176660157,21.772100000000002,13.064119676660157Q21.4434,13.032037276660157,21.113599999999998,13.015976676660156Q20.7837,12.999916076660156,20.4535,12.999916076660156Q20.1232,12.999916076660156,19.793300000000002,13.015976676660156Q19.4635,13.032037276660157,19.1348,13.064119676660157Q18.8061,13.096202176660157,18.4794,13.144229076660157Q18.1527,13.192256076660156,17.8288,13.256112076660155Q17.5049,13.319968076660157,17.1845,13.399499076660156Q16.86416,13.479030076660155,16.54812,13.574045076660155Q16.23208,13.669059076660156,15.92112,13.779328076660157Q15.61016,13.889597076660156,15.30504,14.014856076660156Q14.99992,14.140116076660156,14.701360000000001,14.280056076660156Q14.402809999999999,14.420006076660156,14.11154,14.574296076660156Q13.82027,14.728596076660157,13.536999999999999,14.896866076660157Q13.253720000000001,15.065146076660156,12.97912,15.246986076660157Q12.704509999999999,15.428836076660156,12.43924,15.623816076660155Q12.17397,15.818796076660156,11.918669999999999,16.026446076660157Q11.66338,16.234086076660155,11.418669999999999,16.453896076660158Q11.173960000000001,16.673716076660156,10.94043,16.905156076660155Q10.70689,17.136606076660158,10.4851,17.379126076660157Q10.26331,17.621656076660155,10.05379,17.87467607666016Q9.84428,18.127686076660154,9.64754,18.390596076660156Q9.450800000000001,18.653496076660154,9.26732,18.925646076660158Q9.083829999999999,19.197796076660154,8.91404,19.478546076660155Q8.744250000000001,19.759296076660156,8.58857,20.047956076660157Q8.43288,20.336626076660156,8.29168,20.632516076660156Q8.15047,20.928406076660156,8.02408,21.23080607666016Q7.897697,21.533206076660157,7.786434,21.841386076660157Q7.675172,22.149566076660157,7.579301,22.46278607666016Q7.483431,22.776006076660156,7.403183,23.09351607666016Q7.322936,23.411016076660154,7.258504,23.73201607666016Q7.194073,24.053116076660157,7.145613,24.376816076660155Q7.0971536,24.700616076660154,7.0647821,25.02631607666016Q7.0324105,25.352116076660156,7.0162053,25.679016076660155Q7,26.005916076660156,7,26.333216076660158ZM13.72673,46.023416076660155L13.72673,26.333416076660157L13.72681,26.333416076660157L13.72681,26.333116076660154Q13.72681,26.169416076660156,13.73491,26.006016076660156Q13.74301,25.842516076660154,13.7592,25.679616076660157Q13.77538,25.516816076660156,13.799610000000001,25.354916076660157Q13.82384,25.193016076660157,13.85606,25.03251607666016Q13.88827,24.872016076660156,13.9284,24.713216076660157Q13.96852,24.554416076660157,14.01646,24.397816076660156Q14.06439,24.24121607666016,14.12002,24.087116076660156Q14.175650000000001,23.933016076660156,14.23885,23.781816076660157Q14.30204,23.630616076660154,14.37264,23.482716076660154Q14.443249999999999,23.334816076660154,14.521090000000001,23.190416076660156Q14.59893,23.046116076660155,14.68383,22.905736076660155Q14.76872,22.765356076660154,14.86046,22.629286076660158Q14.952210000000001,22.493206076660158,15.05058,22.361756076660157Q15.14894,22.230306076660156,15.2537,22.103796076660156Q15.35846,21.977286076660157,15.46936,21.856026076660157Q15.58025,21.734766076660158,15.69702,21.619046076660155Q15.81378,21.503316076660155,15.93614,21.393416076660156Q16.05849,21.283506076660156,16.18614,21.179686076660154Q16.313789999999997,21.075856076660155,16.44643,20.978366076660155Q16.57906,20.880876076660158,16.71636,20.789956076660157Q16.85367,20.699036076660157,16.9953,20.614896076660155Q17.1369,20.530756076660158,17.282600000000002,20.453616076660158Q17.4282,20.376466076660158,17.5775,20.306486076660157Q17.7268,20.236516076660156,17.8793,20.173886076660157Q18.0319,20.111256076660155,18.1874,20.056126076660156Q18.3428,20.000996076660158,18.5009,19.953486076660155Q18.6589,19.905976076660156,18.8191,19.866216076660155Q18.979300000000002,19.826446076660154,19.141199999999998,19.794516076660155Q19.3032,19.762586076660156,19.4665,19.738576076660156Q19.6299,19.714566076660155,19.7942,19.69852607666016Q19.9585,19.682476076660155,20.1235,19.674446076660157Q20.2884,19.666416076660155,20.4535,19.666416076660155Q20.6187,19.666416076660155,20.7836,19.674446076660157Q20.9485,19.682476076660155,21.1129,19.69852607666016Q21.2772,19.714566076660155,21.4405,19.738576076660156Q21.6039,19.762586076660156,21.765900000000002,19.794516076660155Q21.927799999999998,19.826446076660154,22.088,19.866216076660155Q22.2482,19.905976076660156,22.4062,19.953486076660155Q22.5642,20.000996076660158,22.7197,20.056126076660156Q22.8752,20.111256076660155,23.0277,20.173886076660157Q23.1803,20.236516076660156,23.3296,20.306486076660157Q23.4789,20.376466076660158,23.6245,20.453616076660158Q23.7701,20.530756076660158,23.9118,20.614896076660155Q24.0534,20.699036076660157,24.1907,20.789956076660157Q24.328,20.880876076660158,24.4606,20.978366076660155Q24.5933,21.075856076660155,24.7209,21.179686076660154Q24.8486,21.283506076660156,24.9709,21.393416076660156Q25.0933,21.503316076660155,25.21,21.619046076660155Q25.3268,21.734766076660158,25.4377,21.856026076660157Q25.5486,21.977286076660157,25.6534,22.103796076660156Q25.7581,22.230306076660156,25.8565,22.361756076660157Q25.9549,22.493206076660158,26.0466,22.629286076660158Q26.1383,22.765356076660154,26.2232,22.905736076660155Q26.3081,23.046116076660155,26.386,23.190416076660156Q26.4638,23.334816076660154,26.5344,23.482716076660154Q26.605,23.630616076660154,26.6682,23.781816076660157Q26.7314,23.933016076660156,26.787,24.087116076660156Q26.8427,24.24121607666016,26.8906,24.397816076660156Q26.9385,24.554416076660157,26.9787,24.713216076660157Q27.0188,24.872016076660156,27.051,25.03251607666016Q27.0832,25.193016076660157,27.1074,25.354916076660157Q27.1317,25.516816076660156,27.1479,25.679616076660157Q27.1641,25.842516076660154,27.1722,26.006016076660156Q27.1803,26.169416076660156,27.1803,26.333116076660154L27.1803,26.333416076660157L27.1802,26.333416076660157L27.1802,33.000116076660156L42.8198,33.000116076660156L42.8198,26.333416076660157L42.8198,26.333116076660154Q42.8198,26.169416076660156,42.8279,26.006016076660156Q42.836,25.842516076660154,42.8522,25.679616076660157Q42.8684,25.516816076660156,42.8926,25.354916076660157Q42.9169,25.193016076660157,42.9491,25.03251607666016Q42.9813,24.872016076660156,43.0214,24.713216076660157Q43.0615,24.554416076660157,43.1095,24.397816076660156Q43.1574,24.24121607666016,43.213,24.087116076660156Q43.2687,23.933016076660156,43.3319,23.781816076660157Q43.3951,23.630616076660154,43.4657,23.482716076660154Q43.5363,23.334816076660154,43.6141,23.190416076660156Q43.692,23.046116076660155,43.7768,22.905736076660155Q43.8617,22.765356076660154,43.9535,22.629286076660158Q44.0452,22.493206076660158,44.1436,22.361756076660157Q44.242,22.230306076660156,44.3467,22.103796076660156Q44.4515,21.977286076660157,44.5624,21.856026076660157Q44.6733,21.734766076660158,44.79,21.619046076660155Q44.9068,21.503316076660155,45.0292,21.393416076660156Q45.1515,21.283506076660156,45.2792,21.179686076660154Q45.4068,21.075856076660155,45.5394,20.978366076660155Q45.6721,20.880876076660158,45.8094,20.789956076660157Q45.9467,20.699036076660157,46.0883,20.614896076660155Q46.23,20.530756076660158,46.3756,20.453616076660158Q46.5212,20.376466076660158,46.6705,20.306486076660157Q46.8198,20.236516076660156,46.9723,20.173886076660157Q47.1249,20.111256076660155,47.2804,20.056126076660156Q47.4359,20.000996076660158,47.5939,19.953486076660155Q47.7519,19.905976076660156,47.9121,19.866216076660155Q48.0723,19.826446076660154,48.2342,19.794516076660155Q48.3962,19.762586076660156,48.5595,19.738576076660156Q48.7229,19.714566076660155,48.8872,19.69852607666016Q49.0516,19.682476076660155,49.2165,19.674446076660157Q49.3814,19.666416076660155,49.5466,19.666416076660155Q49.7117,19.666416076660155,49.8766,19.674446076660157Q50.0415,19.682476076660155,50.2059,19.69852607666016Q50.3702,19.714566076660155,50.5336,19.738576076660156Q50.6969,19.762586076660156,50.8589,19.794516076660155Q51.0208,19.826446076660154,51.181,19.866216076660155Q51.3412,19.905976076660156,51.4992,19.953486076660155Q51.6572,20.000996076660158,51.8127,20.056126076660156Q51.9682,20.111256076660155,52.1208,20.173886076660157Q52.2733,20.236516076660156,52.4226,20.306486076660157Q52.5719,20.376466076660158,52.7175,20.453616076660158Q52.8631,20.530756076660158,53.0048,20.614896076660155Q53.1464,20.699036076660157,53.2837,20.789956076660157Q53.421,20.880876076660158,53.5537,20.978366076660155Q53.6863,21.075856076660155,53.8139,21.179686076660154Q53.9416,21.283506076660156,54.0639,21.393416076660156Q54.1863,21.503316076660155,54.3031,21.619046076660155Q54.4198,21.734766076660158,54.5307,21.856026076660157Q54.6416,21.977286076660157,54.7464,22.103796076660156Q54.8511,22.230306076660156,54.9495,22.361756076660157Q55.0479,22.493206076660158,55.1396,22.629286076660158Q55.2314,22.765356076660154,55.3163,22.905736076660155Q55.4011,23.046116076660155,55.479,23.190416076660156Q55.5568,23.334816076660154,55.6274,23.482716076660154Q55.698,23.630616076660154,55.7612,23.781816076660157Q55.8244,23.933016076660156,55.8801,24.087116076660156Q55.9357,24.24121607666016,55.9836,24.397816076660156Q56.0316,24.554416076660157,56.0717,24.713216076660157Q56.1118,24.872016076660156,56.144,25.03251607666016Q56.1762,25.193016076660157,56.2005,25.354916076660157Q56.2247,25.516816076660156,56.2409,25.679616076660157Q56.2571,25.842516076660154,56.2652,26.006016076660156Q56.2733,26.169416076660156,56.2733,26.333116076660154L56.2733,26.333416076660157L56.2732,26.333416076660157L56.2732,46.03291607666016Q56.2716,46.19561607666016,56.2539,46.35741607666016Q56.2363,46.519116076660154,56.2029,46.67851607666016Q56.1695,46.837816076660154,56.1205,46.99311607666016Q56.0716,47.148416076660155,56.0077,47.29831607666016Q55.9437,47.448116076660156,55.8653,47.59111607666016Q55.7869,47.73411607666016,55.6949,47.86881607666015Q55.6028,48.00361607666016,55.4979,48.12881607666016Q55.3931,48.25401607666016,55.2764,48.368416076660154Q55.1597,48.48291607666015,55.0324,48.58561607666016Q54.905,48.68831607666016,54.7681,48.77821607666016Q54.6313,48.86811607666016,54.4863,48.94431607666016Q54.3412,49.020616076660154,54.1894,49.082516076660156Q54.0375,49.14441607666016,53.8803,49.19131607666016Q53.7231,49.238316076660155,53.5621,49.269816076660156Q53.401,49.30141607666015,53.2376,49.31721607666016Q53.0742,49.333116076660154,52.91,49.333116076660154L52.9099,49.333116076660154L52.9099,49.33321607666016L56.2732,49.33321607666016L56.2732,49.33341607666016L13.72673,49.33341607666016L13.72672,49.33321607666016L17.0901,49.33321607666016L17.0901,49.333116076660154L17.09,49.333116076660154Q16.92552,49.333116076660154,16.76182,49.31721607666016Q16.59812,49.30131607666016,16.43677,49.26961607666016Q16.27542,49.237916076660156,16.11795,49.190816076660155Q15.96049,49.143716076660155,15.80842,49.081616076660154Q15.65634,49.01951607666015,15.51111,48.94301607666016Q15.36587,48.86641607666016,15.22887,48.776216076660155Q15.09186,48.68601607666016,14.96439,48.58301607666016Q14.83692,48.480016076660156,14.7202,48.36511607666016Q14.603480000000001,48.25021607666016,14.498619999999999,48.12461607666015Q14.39377,47.999016076660155,14.30178,47.86391607666015Q14.20979,47.72881607666016,14.13155,47.58541607666016Q14.05331,47.44201607666016,13.989550000000001,47.29171607666016Q13.925799999999999,47.14141607666016,13.87715,46.985716076660154Q13.82849,46.83001607666016,13.7954,46.67031607666016Q13.76231,46.510616076660156,13.7451,46.348516076660154Q13.72789,46.18641607666016,13.72673,46.023416076660155ZM30.3754,39.33321607666016L30.3754,42.66671607666015Q30.3754,42.83051607666016,30.3592,42.99351607666016Q30.343,43.15641607666016,30.3108,43.31701607666015Q30.2785,43.477616076660155,30.2306,43.634316076660156Q30.1826,43.791016076660156,30.1194,43.942316076660155Q30.0562,44.093616076660155,29.9783,44.23801607666016Q29.9004,44.38251607666015,29.8086,44.51861607666015Q29.7168,44.654816076660154,29.612,44.78141607666016Q29.5071,44.90801607666016,29.3903,45.02371607666016Q29.2735,45.13951607666016,29.1457,45.243416076660154Q29.018,45.34731607666016,28.8806,45.43831607666016Q28.7432,45.52931607666016,28.5975,45.60651607666016Q28.4518,45.683716076660154,28.2991,45.74631607666016Q28.1465,45.80901607666016,27.9884,45.85651607666016Q27.8303,45.90411607666016,27.6682,45.93601607666016Q27.5061,45.968016076660156,27.3417,45.984016076660154Q27.1773,46.000116076660156,27.012,46.000116076660156Q26.8468,46.000116076660156,26.6824,45.984016076660154Q26.5179,45.968016076660156,26.3559,45.93601607666016Q26.1938,45.90411607666016,26.0357,45.85651607666016Q25.8776,45.80901607666016,25.7249,45.74631607666016Q25.5723,45.683716076660154,25.4266,45.60651607666016Q25.2808,45.52931607666016,25.1435,45.43831607666016Q25.0061,45.34731607666016,24.8783,45.243416076660154Q24.7506,45.13951607666016,24.6338,45.02371607666016Q24.517,44.90801607666016,24.4121,44.78141607666016Q24.3073,44.654816076660154,24.2155,44.51861607666015Q24.1237,44.38251607666015,24.0458,44.238116076660155Q23.9679,44.093616076660155,23.9047,43.942316076660155Q23.8415,43.79111607666016,23.7935,43.634316076660156Q23.7455,43.477616076660155,23.7133,43.31701607666015Q23.6811,43.15641607666016,23.6649,42.99351607666016Q23.6487,42.83051607666016,23.6487,42.66671607666015L23.6487,39.33321607666016Q23.6487,39.16951607666016,23.6649,39.006516076660155Q23.6811,38.84351607666015,23.7133,38.682916076660156Q23.7455,38.52231607666016,23.7935,38.36561607666016Q23.8415,38.20891607666016,23.9047,38.05761607666015Q23.9679,37.90631607666016,24.0458,37.76191607666016Q24.1237,37.61751607666015,24.2155,37.48131607666016Q24.3073,37.34521607666016,24.4121,37.218616076660155Q24.517,37.09201607666016,24.6338,36.97621607666015Q24.7506,36.86041607666016,24.8783,36.756516076660155Q25.0061,36.65261607666015,25.1435,36.56171607666016Q25.2808,36.47071607666015,25.4266,36.393516076660156Q25.5723,36.31631607666016,25.7249,36.25361607666015Q25.8776,36.191016076660155,26.0357,36.14341607666016Q26.1938,36.09591607666016,26.3559,36.063916076660156Q26.5179,36.032016076660156,26.6824,36.01601607666016Q26.8468,35.999916076660156,27.012,35.999916076660156Q27.1773,35.999916076660156,27.3417,36.01601607666016Q27.5061,36.032016076660156,27.6682,36.063916076660156Q27.8303,36.09591607666016,27.9884,36.14341607666016Q28.1465,36.191016076660155,28.2991,36.25361607666015Q28.4518,36.31631607666016,28.5975,36.393516076660156Q28.7432,36.47071607666015,28.8806,36.56171607666016Q29.018,36.65261607666015,29.1457,36.756516076660155Q29.2735,36.86041607666016,29.3903,36.97621607666015Q29.5071,37.09201607666016,29.612,37.218616076660155Q29.7168,37.34521607666016,29.8086,37.48131607666016Q29.9004,37.61751607666015,29.9783,37.76191607666016Q30.0562,37.90631607666016,30.1194,38.05761607666015Q30.1826,38.20891607666016,30.2306,38.36561607666016Q30.2785,38.52231607666016,30.3108,38.682916076660156Q30.343,38.84351607666015,30.3592,39.006516076660155Q30.3754,39.16951607666016,30.3754,39.33321607666016ZM46.3515,39.33321607666016L46.3515,42.66671607666015Q46.3515,42.83051607666016,46.3353,42.99351607666016Q46.3191,43.15641607666016,46.2869,43.31701607666015Q46.2546,43.477616076660155,46.2067,43.634316076660156Q46.1587,43.791016076660156,46.0955,43.942316076660155Q46.0322,44.093616076660155,45.9543,44.23801607666016Q45.8764,44.38251607666015,45.7846,44.51861607666015Q45.6929,44.654816076660154,45.588,44.78141607666016Q45.4832,44.90801607666016,45.3664,45.02371607666016Q45.2495,45.13951607666016,45.1218,45.243416076660154Q44.9941,45.34731607666016,44.8567,45.43831607666016Q44.7193,45.52931607666016,44.5736,45.60651607666016Q44.4279,45.683716076660154,44.2752,45.74631607666016Q44.1226,45.80901607666016,43.9645,45.85651607666016Q43.8063,45.90411607666016,43.6443,45.93601607666016Q43.4822,45.968016076660156,43.3178,45.984016076660154Q43.1534,46.000116076660156,42.9881,46.000116076660156Q42.8229,46.000116076660156,42.6585,45.984016076660154Q42.494,45.968016076660156,42.332,45.93601607666016Q42.1699,45.90411607666016,42.0118,45.85651607666016Q41.8537,45.80901607666016,41.701,45.74631607666016Q41.5484,45.683716076660154,41.4026,45.60651607666016Q41.2569,45.52931607666016,41.1195,45.43831607666016Q40.9821,45.34731607666016,40.8544,45.243416076660154Q40.7267,45.13951607666016,40.6099,45.02371607666016Q40.493,44.90801607666016,40.3882,44.78141607666016Q40.2834,44.654816076660154,40.1916,44.51861607666015Q40.0998,44.38251607666015,40.0219,44.238116076660155Q39.944,44.093616076660155,39.8808,43.942316076660155Q39.8175,43.79111607666016,39.7696,43.634316076660156Q39.7216,43.477616076660155,39.6894,43.31701607666015Q39.6571,43.15641607666016,39.641,42.99351607666016Q39.6248,42.83051607666016,39.6248,42.66671607666015L39.6248,39.33321607666016Q39.6248,39.16951607666016,39.641,39.006516076660155Q39.6571,38.84351607666015,39.6894,38.682916076660156Q39.7216,38.52231607666016,39.7696,38.36561607666016Q39.8175,38.20891607666016,39.8808,38.05761607666015Q39.944,37.90631607666016,40.0219,37.76191607666016Q40.0998,37.61751607666015,40.1916,37.48131607666016Q40.2834,37.34521607666016,40.3882,37.218616076660155Q40.493,37.09201607666016,40.6099,36.97621607666015Q40.7267,36.86041607666016,40.8544,36.756516076660155Q40.9821,36.65261607666015,41.1195,36.56171607666016Q41.2569,36.47071607666015,41.4026,36.393516076660156Q41.5484,36.31631607666016,41.701,36.25361607666015Q41.8537,36.191016076660155,42.0118,36.14341607666016Q42.1699,36.09591607666016,42.332,36.063916076660156Q42.494,36.032016076660156,42.6585,36.01601607666016Q42.8229,35.999916076660156,42.9881,35.999916076660156Q43.1534,35.999916076660156,43.3178,36.01601607666016Q43.4822,36.032016076660156,43.6443,36.063916076660156Q43.8063,36.09591607666016,43.9645,36.14341607666016Q44.1226,36.191016076660155,44.2752,36.25361607666015Q44.4279,36.31631607666016,44.5736,36.393516076660156Q44.7193,36.47071607666015,44.8567,36.56171607666016Q44.9941,36.65261607666015,45.1218,36.756516076660155Q45.2495,36.86041607666016,45.3664,36.97621607666015Q45.4832,37.09201607666016,45.588,37.218616076660155Q45.6929,37.34521607666016,45.7846,37.48131607666016Q45.8764,37.61751607666015,45.9543,37.76191607666016Q46.0322,37.90631607666016,46.0955,38.05761607666015Q46.1587,38.20891607666016,46.2067,38.36561607666016Q46.2546,38.52231607666016,46.2869,38.682916076660156Q46.3191,38.84351607666015,46.3353,39.006516076660155Q46.3515,39.16951607666016,46.3515,39.33321607666016Z" fill-rule="evenodd" fill="#000000" fill-opacity="1"/></g></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>