mm_os 3.3.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/LICENSE +21 -201
  2. package/README.md +491 -99
  3. package/README_EN.md +498 -0
  4. package/adapter/adapter.js +431 -0
  5. package/adapter/custom_persistence.js +660 -0
  6. package/adapter/mqtt.js +273 -0
  7. package/adapter/socket.js +113 -0
  8. package/adapter/web.js +67 -0
  9. package/adapter/websocket.js +146 -0
  10. package/com/api/com.json +5 -0
  11. package/{core/com → com}/api/config.tpl.json +8 -8
  12. package/com/api/drive.js +708 -0
  13. package/com/api/index.js +198 -0
  14. package/com/api/oauth.js +200 -0
  15. package/com/api/script.tpl.js +32 -0
  16. package/com/cmd/README.md +11 -0
  17. package/com/cmd/com.json +5 -0
  18. package/com/cmd/config.tpl.json +122 -0
  19. package/com/cmd/drive.js +1548 -0
  20. package/com/cmd/index.js +1066 -0
  21. package/com/cmd/msg.json +48 -0
  22. package/com/cmd/nlp.js +525 -0
  23. package/com/cmd/script.tpl.js +32 -0
  24. package/com/db/com.json +5 -0
  25. package/com/db/drive.js +1999 -0
  26. package/com/db/index.js +242 -0
  27. package/{core/com → com}/event/README.md +4 -4
  28. package/com/event/com.json +5 -0
  29. package/{core/com → com}/event/config.tpl.json +18 -18
  30. package/com/event/drive.js +59 -0
  31. package/com/event/index.js +409 -0
  32. package/com/event/script.tpl.js +23 -0
  33. package/com/mqtt/com.json +5 -0
  34. package/{core/com → com}/mqtt/config.tpl.json +3 -5
  35. package/com/mqtt/drive.js +676 -0
  36. package/com/mqtt/index.js +822 -0
  37. package/com/mqtt/mm_mqtt.js +425 -0
  38. package/com/mqtt/script.tpl.js +723 -0
  39. package/com/nav/com.json +5 -0
  40. package/com/nav/config.tpl.json +84 -0
  41. package/com/nav/drive.js +702 -0
  42. package/com/nav/index.js +231 -0
  43. package/{core/com → com}/nav/tpl/admin_pc/page_config.vue +280 -280
  44. package/{core/com → com}/nav/tpl/admin_pc/page_config_form.vue +194 -194
  45. package/com/nav/tpl/admin_pc/page_form.vue +180 -0
  46. package/com/nav/tpl/admin_pc/page_view.vue +124 -0
  47. package/com/nav/tpl/dev_pc/page_default.vue +247 -0
  48. package/com/nav/tpl/dev_pc/page_type.vue +313 -0
  49. package/com/nav/tpl/home_pc/page_default.vue +234 -0
  50. package/com/nav/tpl/home_pc/page_form.vue +137 -0
  51. package/com/nav/tpl/home_pc/page_list.vue +234 -0
  52. package/com/nav/tpl/home_pc/page_nav.vue +221 -0
  53. package/com/nav/tpl/home_pc/page_type.vue +234 -0
  54. package/com/nav/tpl/home_pc/page_view.vue +125 -0
  55. package/com/nav/tpl/home_phone/page_channel.vue +234 -0
  56. package/com/nav/tpl/home_phone/page_default.vue +234 -0
  57. package/com/nav/tpl/home_phone/page_form.vue +137 -0
  58. package/com/nav/tpl/home_phone/page_nav.vue +237 -0
  59. package/com/nav/tpl/home_phone/page_type.vue +234 -0
  60. package/com/nav/tpl/home_phone/page_view.vue +125 -0
  61. package/com/nav/viewmodel.js +446 -0
  62. package/com/param/com.json +5 -0
  63. package/{core/com → com}/param/config.tpl.json +7 -1
  64. package/com/param/drive.js +502 -0
  65. package/com/param/index.js +155 -0
  66. package/com/param/script.tpl.js +12 -0
  67. package/com/pendant/com.json +5 -0
  68. package/{core/com/component → com/pendant}/config.tpl.json +15 -13
  69. package/com/pendant/drive.js +204 -0
  70. package/com/pendant/index.js +441 -0
  71. package/com/pendant/pendant.html +16 -0
  72. package/com/pendant/script.tpl.js +18 -0
  73. package/com/socket/com.json +5 -0
  74. package/com/socket/config.tpl.json +12 -0
  75. package/com/socket/drive.js +651 -0
  76. package/com/socket/index.js +351 -0
  77. package/com/socket/script.tpl.js +41 -0
  78. package/com/sql/com.json +5 -0
  79. package/{core/com → com}/sql/config.tpl.json +13 -9
  80. package/com/sql/drive.js +1259 -0
  81. package/com/sql/index.js +150 -0
  82. package/com/sql/script.tpl.js +47 -0
  83. package/com/static/com.json +5 -0
  84. package/{core/com → com}/static/config.tpl.json +10 -6
  85. package/com/static/drive.js +194 -0
  86. package/com/static/index.js +226 -0
  87. package/com/static/script.tpl.js +28 -0
  88. package/com/task/com.json +5 -0
  89. package/{core/com → com}/task/config.tpl.json +4 -6
  90. package/com/task/drive.js +405 -0
  91. package/com/task/index.js +148 -0
  92. package/com/task/script.tpl.js +37 -0
  93. package/com/template/com.json +5 -0
  94. package/com/template/config.tpl.json +16 -0
  95. package/com/template/drive.js +80 -0
  96. package/com/template/index.js +141 -0
  97. package/com.js +156 -0
  98. package/common/README.md +2 -0
  99. package/common/handler/msg/handler.json +22 -0
  100. package/common/handler/msg/index.js +23 -0
  101. package/common/handler/player/handler.json +22 -0
  102. package/common/handler/player/index.js +287 -0
  103. package/common/handler/user/handler.json +22 -0
  104. package/common/handler/user/index.js +23 -0
  105. package/common/middleware/web_after/index.js +29 -0
  106. package/common/middleware/web_after/middleware.json +9 -0
  107. package/common/middleware/web_base/index.js +113 -0
  108. package/common/middleware/web_base/middleware.json +19 -0
  109. package/common/middleware/web_before/index.js +33 -0
  110. package/common/middleware/web_before/middleware.json +9 -0
  111. package/common/middleware/web_cors/index.js +87 -0
  112. package/common/middleware/web_cors/middleware.json +24 -0
  113. package/common/middleware/web_error/index.js +119 -0
  114. package/common/middleware/web_error/middleware.json +18 -0
  115. package/common/middleware/web_ip/index.js +15 -0
  116. package/common/middleware/web_ip/middleware.json +14 -0
  117. package/common/middleware/web_logger/index.js +156 -0
  118. package/common/middleware/web_logger/middleware.json +14 -0
  119. package/common/middleware/web_main/index.js +24 -0
  120. package/common/middleware/web_main/middleware.json +9 -0
  121. package/common/middleware/web_static/index.js +73 -0
  122. package/common/middleware/web_static/middleware.json +54 -0
  123. package/common/middleware/web_waf/index.js +385 -0
  124. package/common/middleware/web_waf/middleware.json +13 -0
  125. package/common/model/msg/index.js +88 -0
  126. package/common/model/msg/model.json +401 -0
  127. package/common/model/player/index.js +63 -0
  128. package/common/model/player/model.json +185 -0
  129. package/common/model/user/index.js +11 -0
  130. package/common/model/user/model.json +219 -0
  131. package/core/app/config.tpl.json +67 -0
  132. package/core/app/index.js +632 -0
  133. package/core/app/script.tpl.js +52 -0
  134. package/core/channel/index.js +899 -0
  135. package/core/channel/matcher.js +585 -0
  136. package/core/com/config.tpl.json +16 -0
  137. package/core/com/index.js +74 -0
  138. package/core/com/script.tpl.js +5 -0
  139. package/core/component/component.js +42 -0
  140. package/core/component/config.tpl.json +63 -0
  141. package/core/component/index.js +273 -0
  142. package/core/component/script.tpl.js +19 -0
  143. package/core/controller/config.tpl.json +14 -0
  144. package/core/controller/index.js +373 -0
  145. package/core/controller/script.tpl.js +27 -0
  146. package/core/factory/config.tpl.json +14 -0
  147. package/core/factory/entity.js +275 -0
  148. package/core/factory/index.js +241 -0
  149. package/core/factory/script.tpl.js +16 -0
  150. package/core/game/bat/index.js +137 -0
  151. package/core/game/bat/world.js +622 -0
  152. package/core/game/config.tpl.json +16 -0
  153. package/core/game/entity_admin.js +230 -0
  154. package/core/game/index.js +186 -0
  155. package/core/handler/config.tpl.json +22 -0
  156. package/core/handler/index.js +181 -0
  157. package/core/handler/script.tpl.js +23 -0
  158. package/core/logic/config.tpl.json +14 -0
  159. package/core/logic/index.js +59 -0
  160. package/core/logic/script.tpl.js +19 -0
  161. package/core/middleware/config.tpl.json +16 -0
  162. package/core/middleware/index.js +125 -0
  163. package/core/middleware/script.tpl.js +37 -0
  164. package/core/mod/config.tpl.json +22 -0
  165. package/core/mod/index.js +130 -0
  166. package/core/mod/script.tpl.js +34 -0
  167. package/core/model/config.tpl.json +219 -0
  168. package/core/model/index.js +272 -0
  169. package/core/model/model.js +27 -0
  170. package/core/model/script.tpl.js +20 -0
  171. package/core/notifier/config.tpl.json +14 -0
  172. package/core/notifier/index.js +77 -0
  173. package/core/notifier/script.tpl.js +20 -0
  174. package/core/plugin/config.tpl.json +24 -0
  175. package/core/plugin/index.js +232 -0
  176. package/core/plugin/script.tpl.js +51 -0
  177. package/core/pusher/config.tpl.json +14 -0
  178. package/core/pusher/index.js +161 -0
  179. package/core/pusher/script.tpl.js +20 -0
  180. package/core/room/bat/index.js +170 -0
  181. package/core/room/bat/room.js +524 -0
  182. package/core/room/config.tpl.json +20 -0
  183. package/core/room/index.js +249 -0
  184. package/core/room/room.js +61 -0
  185. package/core/scene/config.tpl.json +14 -0
  186. package/core/scene/index.js +466 -0
  187. package/core/scene/loop.js +1255 -0
  188. package/core/scene/map.js +28 -0
  189. package/core/scene/script.tpl.js +22 -0
  190. package/core/sender/config.tpl.json +14 -0
  191. package/core/sender/index.js +79 -0
  192. package/core/sender/script.tpl.js +20 -0
  193. package/core/service/config.tpl.json +14 -0
  194. package/core/service/index.js +100 -0
  195. package/core/service/script.tpl.js +25 -0
  196. package/core/store/config.tpl.json +26 -0
  197. package/core/store/index.js +1755 -0
  198. package/core/store/script.tpl.js +22 -0
  199. package/core/store/sql.js +1464 -0
  200. package/core/system/config.tpl.json +18 -0
  201. package/core/system/index.js +312 -0
  202. package/core/system/script.tpl.js +77 -0
  203. package/core/view/config.tpl.json +14 -0
  204. package/core/view/index.js +91 -0
  205. package/core/view/script.tpl.js +20 -0
  206. package/core/zone/bat/index.js +725 -0
  207. package/core/zone/config.tpl.json +54 -0
  208. package/core/zone/index.js +614 -0
  209. package/core/zone/script.tpl.js +10 -0
  210. package/core/zone/zone_bat.js +136 -0
  211. package/core//345/237/272/347/261/273/346/250/241/345/235/227/346/270/205/345/215/225.md +24 -0
  212. package/index.js +17 -333
  213. package/os.js +57 -0
  214. package/package.json +58 -58
  215. package/server.js +598 -0
  216. package/README.en.md +0 -36
  217. package/conf.json +0 -3
  218. package/core/base/mqtt/index.js +0 -1110
  219. package/core/base/mqtt/lib.js +0 -40
  220. package/core/base/web/index.js +0 -245
  221. package/core/com/api/com.json +0 -4
  222. package/core/com/api/drive.js +0 -668
  223. package/core/com/api/index.js +0 -108
  224. package/core/com/api/oauth.js +0 -158
  225. package/core/com/api/script.js +0 -32
  226. package/core/com/app/README.md +0 -3
  227. package/core/com/app/com.json +0 -4
  228. package/core/com/app/config.tpl.json +0 -16
  229. package/core/com/app/drive.js +0 -309
  230. package/core/com/app/index.js +0 -211
  231. package/core/com/app/script.js +0 -155
  232. package/core/com/cmd/com.json +0 -4
  233. package/core/com/cmd/config.tpl.json +0 -66
  234. package/core/com/cmd/drive.js +0 -513
  235. package/core/com/cmd/index.js +0 -354
  236. package/core/com/cmd/old/5w2h.js +0 -54
  237. package/core/com/cmd/old/drive.js +0 -423
  238. package/core/com/cmd/script.js +0 -11
  239. package/core/com/component/README.md +0 -3
  240. package/core/com/component/com.json +0 -4
  241. package/core/com/component/component.html +0 -16
  242. package/core/com/component/drive.js +0 -197
  243. package/core/com/component/index.js +0 -312
  244. package/core/com/component/script.js +0 -18
  245. package/core/com/db/com.json +0 -4
  246. package/core/com/db/drive.js +0 -1160
  247. package/core/com/db/index.js +0 -176
  248. package/core/com/event/com.json +0 -4
  249. package/core/com/event/drive.js +0 -133
  250. package/core/com/event/index.js +0 -345
  251. package/core/com/event/script.js +0 -26
  252. package/core/com/eventer/com.js +0 -477
  253. package/core/com/eventer/com.json +0 -4
  254. package/core/com/middleware/com.js +0 -154
  255. package/core/com/middleware/com.json +0 -4
  256. package/core/com/middleware/config.tpl.json +0 -8
  257. package/core/com/middleware/script.js +0 -9
  258. package/core/com/mqtt/com.json +0 -4
  259. package/core/com/mqtt/drive.js +0 -600
  260. package/core/com/mqtt/index.js +0 -572
  261. package/core/com/mqtt/mm_mqtt.js +0 -330
  262. package/core/com/mqtt/script.js +0 -604
  263. package/core/com/msg/com.js +0 -296
  264. package/core/com/msg/com.json +0 -4
  265. package/core/com/nav/com.json +0 -4
  266. package/core/com/nav/config.tpl.json +0 -75
  267. package/core/com/nav/drive.js +0 -549
  268. package/core/com/nav/index.js +0 -182
  269. package/core/com/nav/tpl/admin_pc/page_form.vue +0 -180
  270. package/core/com/nav/tpl/admin_pc/page_view.vue +0 -124
  271. package/core/com/nav/tpl/dev_pc/page_default.vue +0 -247
  272. package/core/com/nav/tpl/dev_pc/page_type.vue +0 -313
  273. package/core/com/nav/tpl/home_pc/page_default.vue +0 -234
  274. package/core/com/nav/tpl/home_pc/page_form.vue +0 -137
  275. package/core/com/nav/tpl/home_pc/page_list.vue +0 -234
  276. package/core/com/nav/tpl/home_pc/page_nav.vue +0 -221
  277. package/core/com/nav/tpl/home_pc/page_type.vue +0 -234
  278. package/core/com/nav/tpl/home_pc/page_view.vue +0 -125
  279. package/core/com/nav/tpl/home_phone/page_channel.vue +0 -234
  280. package/core/com/nav/tpl/home_phone/page_default.vue +0 -234
  281. package/core/com/nav/tpl/home_phone/page_form.vue +0 -137
  282. package/core/com/nav/tpl/home_phone/page_nav.vue +0 -237
  283. package/core/com/nav/tpl/home_phone/page_type.vue +0 -234
  284. package/core/com/nav/tpl/home_phone/page_view.vue +0 -125
  285. package/core/com/nav/viewmodel.js +0 -296
  286. package/core/com/param/drive.js +0 -366
  287. package/core/com/param/index.js +0 -80
  288. package/core/com/param/script.js +0 -12
  289. package/core/com/param/test.js +0 -98
  290. package/core/com/plugin/README.md +0 -3
  291. package/core/com/plugin/com.json +0 -4
  292. package/core/com/plugin/config.tpl.json +0 -26
  293. package/core/com/plugin/drive.js +0 -536
  294. package/core/com/plugin/index.js +0 -259
  295. package/core/com/plugin/script.js +0 -213
  296. package/core/com/rpc/com.json +0 -4
  297. package/core/com/rpc/drive.js +0 -160
  298. package/core/com/rpc/index.js +0 -87
  299. package/core/com/rpc/rpc.js +0 -118
  300. package/core/com/socket/com.json +0 -4
  301. package/core/com/socket/config.tpl.json +0 -14
  302. package/core/com/socket/drive.js +0 -403
  303. package/core/com/socket/index.js +0 -62
  304. package/core/com/socket/script.js +0 -42
  305. package/core/com/sql/drive.js +0 -1087
  306. package/core/com/sql/index.js +0 -83
  307. package/core/com/sql/script.js +0 -48
  308. package/core/com/static/com.json +0 -4
  309. package/core/com/static/drive.js +0 -220
  310. package/core/com/static/index.js +0 -149
  311. package/core/com/static/script.js +0 -28
  312. package/core/com/task/com.json +0 -4
  313. package/core/com/task/drive.js +0 -403
  314. package/core/com/task/index.js +0 -110
  315. package/core/com/task/script.js +0 -37
  316. package/core/com/timer/com.js +0 -217
  317. package/core/com/timer/com.json +0 -4
  318. package/core/com/tpl/com.js +0 -19
  319. package/core/com/tpl/com.json +0 -4
  320. package/lib/actions.js +0 -50
  321. package/lib/base.js +0 -361
  322. package/lib/com.js +0 -29
  323. package/lib/ref.js +0 -121
  324. package/middleware/cors/index.js +0 -119
  325. package/middleware/cors/middleware.json +0 -20
  326. package/middleware/csrf/index.js +0 -202
  327. package/middleware/csrf/middleware.json +0 -24
  328. package/middleware/ip_firewall/index.js +0 -476
  329. package/middleware/ip_firewall/middleware.json +0 -109
  330. package/middleware/mqtt_base/index.js +0 -10
  331. package/middleware/mqtt_base/middleware.json +0 -11
  332. package/middleware/security_audit/index.js +0 -543
  333. package/middleware/security_audit/middleware.json +0 -48
  334. package/middleware/waf/index.js +0 -343
  335. package/middleware/waf/middleware.json +0 -10
  336. package/middleware/waf_ddos/index.js +0 -520
  337. package/middleware/waf_ddos/middleware.json +0 -38
  338. package/middleware/waf_xss/index.js +0 -269
  339. package/middleware/waf_xss/middleware.json +0 -18
  340. package/middleware/web_after/index.js +0 -33
  341. package/middleware/web_after/middleware.json +0 -10
  342. package/middleware/web_base/index.js +0 -90
  343. package/middleware/web_base/middleware.json +0 -10
  344. package/middleware/web_before/index.js +0 -27
  345. package/middleware/web_before/middleware.json +0 -10
  346. package/middleware/web_check/index.js +0 -28
  347. package/middleware/web_check/middleware.json +0 -10
  348. package/middleware/web_main/index.js +0 -28
  349. package/middleware/web_main/middleware.json +0 -10
  350. package/middleware/web_proxy/index.js +0 -37
  351. package/middleware/web_proxy/middleware.json +0 -10
  352. package/middleware/web_render/index.js +0 -87
  353. package/middleware/web_render/middleware.json +0 -10
  354. package/middleware/web_socket/index.js +0 -34
  355. package/middleware/web_socket/middleware.json +0 -10
  356. package/middleware/web_static/index.js +0 -115
  357. package/middleware/web_static/middleware.json +0 -10
  358. /package/{core/com → com}/api/README.md +0 -0
  359. /package/{core/com → com}/db/README.md +0 -0
  360. /package/{core/com → com}/mqtt/README.md +0 -0
  361. /package/{core/com → com}/nav/README.md +0 -0
  362. /package/{core/com → com}/nav/tpl/admin_pc/page_channel.vue +0 -0
  363. /package/{core/com → com}/nav/tpl/admin_pc/page_default.vue +0 -0
  364. /package/{core/com → com}/nav/tpl/admin_pc/page_lang.vue +0 -0
  365. /package/{core/com → com}/nav/tpl/admin_pc/page_nav.vue +0 -0
  366. /package/{core/com → com}/nav/tpl/admin_pc/page_table.vue +0 -0
  367. /package/{core/com → com}/nav/tpl/admin_pc/page_type.vue +0 -0
  368. /package/{core/com → com}/nav/tpl/dev_pc/page_channel.vue +0 -0
  369. /package/{core/com → com}/nav/tpl/dev_pc/page_config.vue +0 -0
  370. /package/{core/com → com}/nav/tpl/dev_pc/page_form.vue +0 -0
  371. /package/{core/com → com}/nav/tpl/dev_pc/page_nav.vue +0 -0
  372. /package/{core/com → com}/nav/tpl/dev_pc/page_table.vue +0 -0
  373. /package/{core/com → com}/nav/tpl/home_pc/page_channel.vue +0 -0
  374. /package/{core/com → com}/nav/tpl/home_phone/page_list.vue +0 -0
  375. /package/{core/com → com}/param/README.md +0 -0
  376. /package/{core/com/cmd → com/pendant}/README.md +0 -0
  377. /package/{core/com → com}/socket/README.md +0 -0
  378. /package/{core/com → com}/sql/README.md +0 -0
  379. /package/{core/com → com}/static/README.md +0 -0
  380. /package/{core/com → com}/task/README.md +0 -0
@@ -0,0 +1,63 @@
1
+ {
2
+ // 名称
3
+ "name": "${name}",
4
+ // 标题
5
+ "title": "角色信息",
6
+ // 描述
7
+ "description": "定义角色信息的组件",
8
+ // 状态 0:禁用 1:启用
9
+ "state": 1,
10
+ // 排序,越小越靠前
11
+ "sort": 10,
12
+ // 组件包含字段
13
+ "fields": {
14
+ "id": {
15
+ "type": "string",
16
+ "title": "角色ID",
17
+ "description": "角色的唯一标识符",
18
+ "min": 1,
19
+ "max": 10000000,
20
+ "default": "role_10000000"
21
+ },
22
+ "name": {
23
+ "type": "string",
24
+ "title": "角色名称",
25
+ "description": "角色的显示名称",
26
+ "min": 1,
27
+ "max": 24,
28
+ "default": "张三"
29
+ },
30
+ "description": {
31
+ "type": "string",
32
+ "title": "角色描述",
33
+ "description": "角色的详细说明",
34
+ "min": 1,
35
+ "max": 255,
36
+ "default": "一个普通的角色"
37
+ },
38
+ "type_id": {
39
+ "type": "number",
40
+ "title": "类型ID",
41
+ "description": "角色的类型ID",
42
+ "min": 1,
43
+ "max": 10000000,
44
+ "default": 1
45
+ },
46
+ "race": {
47
+ "type": "string",
48
+ "title": "种族",
49
+ "description": "角色的种族",
50
+ "min": 1,
51
+ "max": 10000000,
52
+ "default": "人族"
53
+ },
54
+ "age": {
55
+ "type": "number",
56
+ "title": "年龄",
57
+ "description": "角色的年龄",
58
+ "min": 1,
59
+ "max": 10000,
60
+ "default": 16
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,273 @@
1
+ const { Drive } = require('mm_machine');
2
+ const Comp = require('./component.js');
3
+
4
+ /**
5
+ * 组件基类
6
+ * 纯粹的组件数据容器,不包含任何业务逻辑
7
+ * 只负责定义组件的数据结构和验证规则
8
+ */
9
+ class Component extends Drive {
10
+ static config = {
11
+ 'name': 'default',
12
+ 'title': '组件',
13
+ 'main': '',
14
+ 'sort': 10
15
+ };
16
+
17
+ /**
18
+ * 构造函数
19
+ * @param {object} config 配置参数
20
+ * @param {object} parent 父对象
21
+ */
22
+ constructor(config, parent) {
23
+ super({ ...Component.config, ...config || {} }, parent);
24
+ }
25
+ }
26
+
27
+ /**
28
+ * 获取模板目录
29
+ * @returns {string} 模板目录
30
+ */
31
+ Component.prototype.getTplDir = function() {
32
+ return __dirname;
33
+ };
34
+
35
+ /**
36
+ * 获取组件字段定义
37
+ * @returns {object} 组件字段定义
38
+ */
39
+ Component.prototype.getFields = function () {
40
+ return this.config.fields || {};
41
+ };
42
+
43
+ /**
44
+ * 创建组件数据实例
45
+ * @param {object} data 组件数据
46
+ * @returns {object} 组件数据实例
47
+ */
48
+ Component.prototype.create = function (data = {}) {
49
+ if (typeof data !== 'object' || Array.isArray(data)) {
50
+ throw new TypeError('组件数据必须是对象');
51
+ }
52
+
53
+ let component = new Comp();
54
+ let fields = this.getFields();
55
+
56
+ for (let field_name in fields) {
57
+ let rule = fields[field_name];
58
+ let field_value = data[field_name];
59
+ component[field_name] = this._getDefaultValue(field_value, rule);
60
+ }
61
+ component.isDirty(false);
62
+ return component;
63
+ };
64
+
65
+ /**
66
+ * 获取字段默认值
67
+ * @param {*} field_value 字段值
68
+ * @param {object} rule 规则
69
+ * @returns {*} 默认值
70
+ */
71
+ Component.prototype._getDefaultValue = function(field_value, rule) {
72
+ if (field_value !== undefined) {
73
+ return field_value;
74
+ }
75
+ if (rule.default !== undefined) {
76
+ return rule.default;
77
+ }
78
+ return this._getTypeDefault(rule.type);
79
+ };
80
+
81
+ /**
82
+ * 根据类型获取默认值
83
+ * @param {string} type 类型
84
+ * @returns {*} 默认值
85
+ */
86
+ Component.prototype._getTypeDefault = function(type) {
87
+ const defaults = {
88
+ 'number': 0,
89
+ 'string': '',
90
+ 'boolean': false,
91
+ 'object': {},
92
+ 'array': []
93
+ };
94
+ return defaults[type] !== undefined ? defaults[type] : null;
95
+ };
96
+
97
+ /**
98
+ * 验证必填字段
99
+ * @param {string} field_name 字段名
100
+ * @param {*} field_value 字段值
101
+ * @param {object} rule 验证规则
102
+ * @returns {string|undefined} 错误信息
103
+ */
104
+ Component.prototype._validateRequired = function (field_name, field_value, rule) {
105
+ if (rule.required && (field_value === undefined || field_value === null || field_value === '')) {
106
+ return `${field_name} 是必填字段`;
107
+ }
108
+ };
109
+
110
+ /**
111
+ * 验证字段类型
112
+ * @param {string} field_name 字段名
113
+ * @param {*} field_value 字段值
114
+ * @param {object} rule 验证规则
115
+ * @returns {string|undefined} 错误信息
116
+ */
117
+ Component.prototype._validateType = function (field_name, field_value, rule) {
118
+ if (rule.type && typeof field_value !== rule.type) {
119
+ return `${field_name} 必须是 ${rule.type} 类型`;
120
+ }
121
+ };
122
+
123
+ /**
124
+ * 验证字段范围
125
+ * @param {string} field_name 字段名
126
+ * @param {*} field_value 字段值
127
+ * @param {object} rule 验证规则
128
+ * @returns {string|undefined} 错误信息
129
+ */
130
+ Component.prototype._validateRange = function (field_name, field_value, rule) {
131
+ if (rule.min !== undefined && field_value < rule.min) {
132
+ return `${field_name} 不能小于 ${rule.min}`;
133
+ }
134
+ if (rule.max !== undefined && field_value > rule.max) {
135
+ return `${field_name} 不能大于 ${rule.max}`;
136
+ }
137
+ };
138
+
139
+ /**
140
+ * 验证字段长度
141
+ * @param {string} field_name 字段名
142
+ * @param {*} field_value 字段值
143
+ * @param {object} rule 验证规则
144
+ * @returns {string|undefined} 错误信息
145
+ */
146
+ Component.prototype._validateLength = function (field_name, field_value, rule) {
147
+ if (rule.min_length !== undefined && field_value.length < rule.min_length) {
148
+ return `${field_name} 长度不能小于 ${rule.min_length}`;
149
+ }
150
+ if (rule.max_length !== undefined && field_value.length > rule.max_length) {
151
+ return `${field_name} 长度不能大于 ${rule.max_length}`;
152
+ }
153
+ };
154
+
155
+ /**
156
+ * 验证字段格式
157
+ * @param {string} field_name 字段名
158
+ * @param {*} field_value 字段值
159
+ * @param {object} rule 验证规则
160
+ * @returns {string|undefined} 错误信息
161
+ */
162
+ Component.prototype._validateFormat = function (field_name, field_value, rule) {
163
+ if (rule.pattern && !rule.pattern.test(field_value)) {
164
+ return `${field_name} 格式不正确`;
165
+ }
166
+ if (rule.enum && !rule.enum.includes(field_value)) {
167
+ return `${field_name} 的值必须是 ${rule.enum.join('、')}`;
168
+ }
169
+ };
170
+
171
+ /**
172
+ * 验证单个字段
173
+ * @param {string} field_name 字段名
174
+ * @param {*} field_value 字段值
175
+ * @param {object} rule 验证规则
176
+ * @returns {string|undefined} 错误信息
177
+ */
178
+ Component.prototype._validateField = function (field_name, field_value, rule) {
179
+ var error = this._validateRequired(field_name, field_value, rule);
180
+ if (error) return error;
181
+ if (field_value === undefined || field_value === null) return;
182
+ error = this._validateType(field_name, field_value, rule);
183
+ if (error) return error;
184
+ error = this._validateRange(field_name, field_value, rule);
185
+ if (error) return error;
186
+ error = this._validateLength(field_name, field_value, rule);
187
+ if (error) return error;
188
+ return this._validateFormat(field_name, field_value, rule);
189
+ };
190
+
191
+ /**
192
+ * 验证组件数据
193
+ * @param {object} data 组件数据
194
+ * @returns {object} 验证结果
195
+ */
196
+ Component.prototype.validate = function (data) {
197
+ if (typeof data !== 'object' || Array.isArray(data)) {
198
+ throw new TypeError('验证数据必须是对象');
199
+ }
200
+ const errors = {};
201
+ let fields = this.getFields();
202
+ for (let field_name in fields) {
203
+ let error = this._validateField(field_name, data[field_name], fields[field_name]);
204
+ if (error) errors[field_name] = error;
205
+ }
206
+ return { valid: Object.keys(errors).length === 0, errors };
207
+ };
208
+
209
+ /**
210
+ * 获取组件类型
211
+ * @returns {string} 组件类型
212
+ */
213
+ Component.prototype.getType = function () {
214
+ return this.config.name;
215
+ };
216
+
217
+ /**
218
+ * 获取组件标题
219
+ * @returns {string} 组件标题
220
+ */
221
+ Component.prototype.getTitle = function () {
222
+ return this.config.title;
223
+ };
224
+
225
+ /**
226
+ * 获取组件描述
227
+ * @returns {string} 组件描述
228
+ */
229
+ Component.prototype.getDescription = function () {
230
+ return this.config.description || '';
231
+ };
232
+
233
+ /**
234
+ * 转换为JSON字符串
235
+ * @param {object} component 组件数据
236
+ * @returns {string} JSON字符串
237
+ */
238
+ Component.prototype.toJson = function (component) {
239
+ // 参数校验
240
+ if (typeof component !== 'object' || Array.isArray(component)) {
241
+ throw new TypeError('组件数据必须是对象');
242
+ }
243
+ return JSON.stringify(component);
244
+ };
245
+
246
+ /**
247
+ * 从JSON字符串创建组件数据
248
+ * @param {string} json_str JSON字符串
249
+ * @returns {object} 组件数据
250
+ */
251
+ Component.prototype.fromJson = function (json_str) {
252
+ // 参数校验
253
+ if (typeof json_str !== 'string') {
254
+ throw new TypeError('JSON字符串必须是字符串');
255
+ }
256
+
257
+ let data = JSON.parse(json_str);
258
+ return this.create(data);
259
+ };
260
+
261
+ /**
262
+ * 初始化组件核心
263
+ * @param {object} logger 日志对象
264
+ */
265
+ Component.prototype._initCore = async function (logger) {
266
+ // 日志对象
267
+ if (logger) {
268
+ this.setLogger(logger);
269
+ }
270
+ };
271
+
272
+ // 导出模块
273
+ exports.Component = Component;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 组件,主要用于游戏
3
+ */
4
+ module.exports = {
5
+ /**
6
+ * 初始化
7
+ */
8
+ async _init() {
9
+ // this.log('debug', `初始化!`);
10
+ },
11
+ /**
12
+ * 主要逻辑
13
+ * @param {...any} args 逻辑参数
14
+ */
15
+ async main(...args) {
16
+ this.log('debug', `主要逻辑被调用`, { args });
17
+ // 主要代码写在这
18
+ }
19
+ };
@@ -0,0 +1,14 @@
1
+ {
2
+ // 名称
3
+ "name": "${name}",
4
+ // 标题
5
+ "title": "${title || '示例控制器'}",
6
+ // 描述
7
+ "description": "${description || '示例描述'}",
8
+ // 主文件
9
+ "main": "${main || 'index.js'}",
10
+ // 状态 0:禁用 1:启用
11
+ "state": 1,
12
+ // 排序,越小越靠前
13
+ "sort": 100
14
+ }