@lovrabet/rabetbase-cli 2.4.5 → 2.4.6-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 (342) hide show
  1. package/README.md +3 -2
  2. package/lib/api/api-doc.js +1 -1
  3. package/lib/api/fetch-model-list.js +1 -1
  4. package/lib/api/generate-api-file.js +1 -1
  5. package/lib/auth/auth-server-ui.js +1 -1
  6. package/lib/auth/auth-server.js +1 -1
  7. package/lib/auth/constant.js +1 -1
  8. package/lib/auth/get-cookie.js +1 -1
  9. package/lib/auth/get-session-user.js +1 -1
  10. package/lib/auth/is-session-valid.js +1 -1
  11. package/lib/auth/login-success-html.js +1 -1
  12. package/lib/auth/logout.js +1 -1
  13. package/lib/cli-flags.js +1 -1
  14. package/lib/cli.js +1 -1
  15. package/lib/commands/api/generate.js +1 -1
  16. package/lib/commands/api/index.js +1 -1
  17. package/lib/commands/api/list.js +1 -1
  18. package/lib/commands/api/pull.js +1 -1
  19. package/lib/commands/api/shared.js +1 -1
  20. package/lib/commands/app/index.js +1 -1
  21. package/lib/commands/app/list.js +1 -1
  22. package/lib/commands/app/members-list.js +1 -1
  23. package/lib/commands/app/remote-directory.js +1 -1
  24. package/lib/commands/app/shared.js +1 -1
  25. package/lib/commands/app-config/delete.js +1 -1
  26. package/lib/commands/app-config/get.js +1 -1
  27. package/lib/commands/app-config/index.js +1 -1
  28. package/lib/commands/app-config/list.js +1 -1
  29. package/lib/commands/app-config/set.js +1 -1
  30. package/lib/commands/app-config/shared.js +1 -1
  31. package/lib/commands/auth/index.js +1 -1
  32. package/lib/commands/bff/create.js +1 -1
  33. package/lib/commands/bff/delete.js +1 -1
  34. package/lib/commands/bff/detail.js +1 -1
  35. package/lib/commands/bff/index.js +1 -1
  36. package/lib/commands/bff/list.js +1 -1
  37. package/lib/commands/bff/pull.js +1 -1
  38. package/lib/commands/bff/push.js +1 -1
  39. package/lib/commands/bff/status.js +1 -1
  40. package/lib/commands/cli-skill/index.js +1 -1
  41. package/lib/commands/cli-update.js +1 -1
  42. package/lib/commands/codegen/index.js +1 -1
  43. package/lib/commands/codegen/sdk.js +1 -1
  44. package/lib/commands/codegen/sql.js +1 -1
  45. package/lib/commands/common/app-registry.js +1 -1
  46. package/lib/commands/common/app-selector.js +1 -1
  47. package/lib/commands/common/async-task.js +1 -1
  48. package/lib/commands/common/dry-run.js +1 -1
  49. package/lib/commands/common/flags.js +1 -1
  50. package/lib/commands/common/local-file.js +1 -1
  51. package/lib/commands/common/validate.js +1 -1
  52. package/lib/commands/config/get.js +1 -1
  53. package/lib/commands/config/index.js +1 -1
  54. package/lib/commands/config/list.js +1 -1
  55. package/lib/commands/config/set.js +1 -1
  56. package/lib/commands/config/shared.js +1 -1
  57. package/lib/commands/data/filter.js +1 -1
  58. package/lib/commands/data/getOne.js +1 -1
  59. package/lib/commands/data/index.js +1 -1
  60. package/lib/commands/data/shared.js +1 -1
  61. package/lib/commands/dataset/business-group-update.js +1 -1
  62. package/lib/commands/dataset/business-groups.js +1 -1
  63. package/lib/commands/dataset/capability.js +1 -1
  64. package/lib/commands/dataset/delete.js +1 -1
  65. package/lib/commands/dataset/detail.js +1 -1
  66. package/lib/commands/dataset/extend-update.js +1 -1
  67. package/lib/commands/dataset/field-update.js +1 -1
  68. package/lib/commands/dataset/generate.js +1 -1
  69. package/lib/commands/dataset/index.js +1 -1
  70. package/lib/commands/dataset/list.js +1 -1
  71. package/lib/commands/dataset/operations.js +1 -1
  72. package/lib/commands/dataset/relation-audit.js +1 -1
  73. package/lib/commands/dataset/relation-create.js +1 -1
  74. package/lib/commands/dataset/relation-delete.js +1 -1
  75. package/lib/commands/dataset/relation-shared.js +1 -1
  76. package/lib/commands/dataset/relation-update.js +1 -1
  77. package/lib/commands/dataset/relations.js +1 -1
  78. package/lib/commands/dataset/rename.js +1 -1
  79. package/lib/commands/dataset/restore.js +1 -1
  80. package/lib/commands/db/analysis-batching.js +1 -1
  81. package/lib/commands/db/analyze-batch-plan.js +1 -1
  82. package/lib/commands/db/analyze-cancel.js +1 -1
  83. package/lib/commands/db/analyze-start.js +1 -1
  84. package/lib/commands/db/analyze-status.js +1 -1
  85. package/lib/commands/db/create.js +1 -1
  86. package/lib/commands/db/delete.js +1 -1
  87. package/lib/commands/db/detail.js +1 -1
  88. package/lib/commands/db/diff-refresh-start.js +1 -1
  89. package/lib/commands/db/diff-refresh-status.js +1 -1
  90. package/lib/commands/db/diff.js +1 -1
  91. package/lib/commands/db/index.js +1 -1
  92. package/lib/commands/db/list.js +1 -1
  93. package/lib/commands/db/shared.js +1 -1
  94. package/lib/commands/db/tables.js +1 -1
  95. package/lib/commands/db/test.js +1 -1
  96. package/lib/commands/db/update.js +1 -1
  97. package/lib/commands/doctor.js +1 -1
  98. package/lib/commands/file/index.js +1 -1
  99. package/lib/commands/init/index.js +1 -1
  100. package/lib/commands/issue/index.js +1 -1
  101. package/lib/commands/issue/nudge.js +1 -1
  102. package/lib/commands/issue/report.js +1 -1
  103. package/lib/commands/issue/shared.js +1 -1
  104. package/lib/commands/kb/create.js +1 -1
  105. package/lib/commands/kb/delete.js +1 -1
  106. package/lib/commands/kb/detail.js +1 -1
  107. package/lib/commands/kb/index.js +1 -1
  108. package/lib/commands/kb/list.js +1 -1
  109. package/lib/commands/kb/shared.js +1 -1
  110. package/lib/commands/kb/update.js +1 -1
  111. package/lib/commands/logs/index.js +1 -1
  112. package/lib/commands/menu/asset-update.js +1 -1
  113. package/lib/commands/menu/delete.js +1 -1
  114. package/lib/commands/menu/external-link-create.js +1 -1
  115. package/lib/commands/menu/external-link-update.js +1 -1
  116. package/lib/commands/menu/group-create.js +1 -1
  117. package/lib/commands/menu/group-update.js +1 -1
  118. package/lib/commands/menu/index.js +1 -1
  119. package/lib/commands/menu/list.js +1 -1
  120. package/lib/commands/menu/move.js +1 -1
  121. package/lib/commands/menu/regroup-start.js +1 -1
  122. package/lib/commands/menu/rename.js +1 -1
  123. package/lib/commands/menu/shared/compare-table.js +1 -1
  124. package/lib/commands/menu/shared/delete-plan.js +1 -1
  125. package/lib/commands/menu/shared/facts.js +1 -1
  126. package/lib/commands/menu/shared/index.js +1 -1
  127. package/lib/commands/menu/shared/inquirer.js +1 -1
  128. package/lib/commands/menu/shared/local-pages.js +1 -1
  129. package/lib/commands/menu/shared/logic.js +1 -1
  130. package/lib/commands/menu/shared/mutations.js +1 -1
  131. package/lib/commands/menu/shared/service.js +1 -1
  132. package/lib/commands/menu/shared/sync-core.js +1 -1
  133. package/lib/commands/menu/shared/update-core.js +1 -1
  134. package/lib/commands/menu/shared/valid-url.js +1 -1
  135. package/lib/commands/menu/sync.js +1 -1
  136. package/lib/commands/notification/config-create.js +1 -1
  137. package/lib/commands/notification/config-delete.js +1 -1
  138. package/lib/commands/notification/config-list.js +1 -1
  139. package/lib/commands/notification/config-update.js +1 -1
  140. package/lib/commands/notification/index.js +1 -1
  141. package/lib/commands/notification/shared.js +1 -1
  142. package/lib/commands/ocr/index.js +1 -1
  143. package/lib/commands/page/{standard-page-status.d.ts → create.d.ts} +1 -1
  144. package/lib/commands/page/create.js +1 -0
  145. package/lib/commands/page/{react → custom}/detail.d.ts +1 -1
  146. package/lib/commands/page/custom/detail.js +1 -0
  147. package/lib/commands/page/{react → custom}/list.d.ts +1 -1
  148. package/lib/commands/page/custom/list.js +1 -0
  149. package/lib/commands/page/{react → custom}/publish.d.ts +1 -1
  150. package/lib/commands/page/custom/publish.js +1 -0
  151. package/lib/commands/page/{react → custom}/shared.d.ts +15 -15
  152. package/lib/commands/page/custom/shared.js +1 -0
  153. package/lib/commands/page/{react → custom}/syntax.d.ts +2 -2
  154. package/lib/commands/page/custom/syntax.js +1 -0
  155. package/lib/commands/page/custom/template.js +1 -0
  156. package/lib/commands/page/{react → custom}/update.d.ts +1 -1
  157. package/lib/commands/page/custom/update.js +1 -0
  158. package/lib/commands/page/data-list-status.d.ts +2 -0
  159. package/lib/commands/page/data-list-status.js +1 -0
  160. package/lib/commands/page/generate-start.js +1 -1
  161. package/lib/commands/page/generate-status.js +1 -1
  162. package/lib/commands/page/index.js +1 -1
  163. package/lib/commands/page/pull.js +1 -1
  164. package/lib/commands/page/push.js +1 -1
  165. package/lib/commands/page/relation-audit.js +1 -1
  166. package/lib/commands/page/restore.js +1 -1
  167. package/lib/commands/page/shared.d.ts +18 -18
  168. package/lib/commands/page/shared.js +1 -1
  169. package/lib/commands/page/sync.js +1 -1
  170. package/lib/commands/project/create/enhanced-guided-create.js +1 -1
  171. package/lib/commands/project/create/format-elapsed.js +1 -1
  172. package/lib/commands/project/create/main.js +1 -1
  173. package/lib/commands/project/create/materialize-project-template.js +1 -1
  174. package/lib/commands/project/create/project-name.js +1 -1
  175. package/lib/commands/project/create/project-template-archive.js +1 -1
  176. package/lib/commands/project/create/project-template-path.js +1 -1
  177. package/lib/commands/project/create/use-copy-project-template.js +1 -1
  178. package/lib/commands/project/create/use-format-code.js +1 -1
  179. package/lib/commands/project/create/use-install-dependencies.js +1 -1
  180. package/lib/commands/project/index.js +1 -1
  181. package/lib/commands/project/upgrade.js +1 -1
  182. package/lib/commands/registry.js +1 -1
  183. package/lib/commands/role/delete.js +1 -1
  184. package/lib/commands/role/detail.js +1 -1
  185. package/lib/commands/role/index.js +1 -1
  186. package/lib/commands/role/list.js +1 -1
  187. package/lib/commands/role/shared.js +1 -1
  188. package/lib/commands/role/update.js +1 -1
  189. package/lib/commands/role/user-add.js +1 -1
  190. package/lib/commands/role/user-remove.js +1 -1
  191. package/lib/commands/role/user-resolve.js +1 -1
  192. package/lib/commands/run/index.js +1 -1
  193. package/lib/commands/schema.js +1 -1
  194. package/lib/commands/sql/create.js +1 -1
  195. package/lib/commands/sql/delete.js +1 -1
  196. package/lib/commands/sql/detail.js +1 -1
  197. package/lib/commands/sql/exec.js +1 -1
  198. package/lib/commands/sql/index.js +1 -1
  199. package/lib/commands/sql/list.js +1 -1
  200. package/lib/commands/sql/pull.js +1 -1
  201. package/lib/commands/sql/push.js +1 -1
  202. package/lib/commands/sql/shared.js +1 -1
  203. package/lib/commands/sql/status.js +1 -1
  204. package/lib/commands/sql/validate.js +1 -1
  205. package/lib/commands/task/index.js +1 -1
  206. package/lib/commands/task/status.js +1 -1
  207. package/lib/commands/tenant/index.js +1 -1
  208. package/lib/commands/tenant/members-list.js +1 -1
  209. package/lib/commands/tenant/shared.js +1 -1
  210. package/lib/commands/user-account/dingding-sandbox-bind.js +1 -1
  211. package/lib/commands/user-account/index.js +1 -1
  212. package/lib/commands/workspace/add.js +1 -1
  213. package/lib/commands/workspace/index.js +1 -1
  214. package/lib/commands/workspace/remove.js +1 -1
  215. package/lib/config/schema.js +1 -1
  216. package/lib/constant/cdn.js +1 -1
  217. package/lib/constant/cli.js +1 -1
  218. package/lib/constant/defaults.js +1 -1
  219. package/lib/constant/domain.js +1 -1
  220. package/lib/constant/env.js +1 -1
  221. package/lib/constant/output.js +1 -1
  222. package/lib/constant/paths.js +1 -1
  223. package/lib/constant/risk.js +1 -1
  224. package/lib/context/app-resolver.js +1 -1
  225. package/lib/context/auth-resolver.js +1 -1
  226. package/lib/context/config-loader.js +1 -1
  227. package/lib/context.js +1 -1
  228. package/lib/core/alias-resolver.js +1 -1
  229. package/lib/core/api-client.d.ts +43 -43
  230. package/lib/core/api-client.js +1 -1
  231. package/lib/core/bff/config.js +1 -1
  232. package/lib/core/bff/file-system.js +1 -1
  233. package/lib/core/bff/hash.js +1 -1
  234. package/lib/core/bff/lock.js +1 -1
  235. package/lib/core/bff/utils.d.ts +3 -1
  236. package/lib/core/bff/utils.js +1 -1
  237. package/lib/core/db-resolver.js +1 -1
  238. package/lib/core/page/file-system.js +1 -1
  239. package/lib/core/page/hash.js +1 -1
  240. package/lib/core/page/lock.js +1 -1
  241. package/lib/core/sql-index-auditor.js +1 -1
  242. package/lib/core/sql-sync/config.js +1 -1
  243. package/lib/core/sql-sync/file-system.js +1 -1
  244. package/lib/core/sql-sync/hash.js +1 -1
  245. package/lib/core/sql-sync/lock.js +1 -1
  246. package/lib/core/sql-sync/utils.js +1 -1
  247. package/lib/core/sql-validator.js +1 -1
  248. package/lib/errors.js +1 -1
  249. package/lib/framework/build-all-flags.js +1 -1
  250. package/lib/framework/error-output.js +1 -1
  251. package/lib/framework/explicit-yes.js +1 -1
  252. package/lib/framework/flags.js +1 -1
  253. package/lib/framework/help.js +1 -1
  254. package/lib/framework/index.js +1 -1
  255. package/lib/framework/output.js +1 -1
  256. package/lib/framework/response.js +1 -1
  257. package/lib/framework/runner-alias.js +1 -1
  258. package/lib/framework/runner.js +1 -1
  259. package/lib/framework/schema-export.js +1 -1
  260. package/lib/framework/types.js +1 -1
  261. package/lib/generated/build-info.d.ts +4 -4
  262. package/lib/generated/build-info.js +1 -1
  263. package/lib/help.js +1 -1
  264. package/lib/postinstall.js +1 -1
  265. package/lib/runtime/confirmation.js +1 -1
  266. package/lib/runtime/event.js +1 -1
  267. package/lib/runtime/index.js +1 -1
  268. package/lib/runtime/queue.js +1 -1
  269. package/lib/runtime/resolve.js +1 -1
  270. package/lib/skills/builtin-skill.js +1 -1
  271. package/lib/skills/main.js +1 -1
  272. package/lib/skills/npx-skills-add.js +1 -1
  273. package/lib/skills/skill-presence.js +1 -1
  274. package/lib/telemetry/cli-command-trace.js +1 -1
  275. package/lib/telemetry/cli-help-trace.js +1 -1
  276. package/lib/telemetry/ensure-cli-otel-config.js +1 -1
  277. package/lib/telemetry/register-otel-exit-shutdown.js +1 -1
  278. package/lib/telemetry/send-cli-trace-log.js +1 -1
  279. package/lib/telemetry/send-platform-issue-collect-log.js +1 -1
  280. package/lib/utils/ai_config.js +1 -1
  281. package/lib/utils/apply-jq-filter.js +1 -1
  282. package/lib/utils/cdn-config.js +1 -1
  283. package/lib/utils/check-sdk-version.js +1 -1
  284. package/lib/utils/cli-version-check.js +1 -1
  285. package/lib/utils/cli-version-policy.js +1 -1
  286. package/lib/utils/config.js +1 -1
  287. package/lib/utils/entity-with-id.js +1 -1
  288. package/lib/utils/file-utils.js +1 -1
  289. package/lib/utils/guides-cdn.js +1 -1
  290. package/lib/utils/http-client.js +1 -1
  291. package/lib/utils/is-non-interactive.js +1 -1
  292. package/lib/utils/logger.js +1 -1
  293. package/lib/utils/params.js +1 -1
  294. package/lib/utils/platform.js +1 -1
  295. package/lib/utils/rules-cdn.js +1 -1
  296. package/lib/utils/sleep.js +1 -1
  297. package/lib/utils/template-replacer.js +1 -1
  298. package/lib/utils/update-notice.js +1 -1
  299. package/lib/utils/version.js +1 -1
  300. package/lib/utils/with-active-cookie.js +1 -1
  301. package/lib/utils/write-cli-side-channel.js +1 -1
  302. package/package.json +1 -1
  303. package/skills/rabetbase/SKILL.md +34 -34
  304. package/skills/rabetbase/guides/backend-function.md +63 -18
  305. package/skills/rabetbase/guides/bff-creation-workflow.md +2 -0
  306. package/skills/rabetbase/guides/{react-custom-page-workflow.md → custom-page-workflow.md} +45 -45
  307. package/skills/rabetbase/guides/page-development-workflow.md +22 -22
  308. package/skills/rabetbase/knowledge/{react-page → custom-page}/components.md +2 -2
  309. package/skills/rabetbase/knowledge/{react-page → custom-page}/generation-standards.md +6 -6
  310. package/skills/rabetbase/knowledge/page-schema/LrSmartTable.md +6 -6
  311. package/skills/rabetbase/knowledge/page-schema/external-resources-usage.md +1 -1
  312. package/skills/rabetbase/references/rabetbase-bff-create.md +2 -0
  313. package/skills/rabetbase/references/{rabetbase-standard-page-status.md → rabetbase-data-list-status.md} +6 -6
  314. package/skills/rabetbase/references/rabetbase-dataset-generate.md +1 -1
  315. package/skills/rabetbase/references/rabetbase-dataset-relation-mutations.md +1 -1
  316. package/skills/rabetbase/references/rabetbase-dataset-relations.md +1 -1
  317. package/skills/rabetbase/references/rabetbase-dataset-restore.md +1 -1
  318. package/skills/rabetbase/references/rabetbase-menu-list.md +1 -1
  319. package/skills/rabetbase/references/rabetbase-page-create.md +31 -0
  320. package/skills/rabetbase/references/{rabetbase-page-react-detail.md → rabetbase-page-custom-detail.md} +5 -5
  321. package/skills/rabetbase/references/{rabetbase-page-react-list.md → rabetbase-page-custom-list.md} +4 -4
  322. package/skills/rabetbase/references/{rabetbase-page-react-publish.md → rabetbase-page-custom-publish.md} +6 -6
  323. package/skills/rabetbase/references/{rabetbase-page-react-update.md → rabetbase-page-custom-update.md} +6 -6
  324. package/skills/rabetbase/references/rabetbase-page-generate-start.md +5 -4
  325. package/skills/rabetbase/references/rabetbase-page-generate-status.md +4 -4
  326. package/skills/rabetbase/references/rabetbase-page-pull.md +2 -2
  327. package/skills/rabetbase/references/rabetbase-page-relation-binding.md +1 -1
  328. package/skills/rabetbase/references/rabetbase-page-restore.md +7 -7
  329. package/skills/rabetbase/references/rabetbase-page-sync.md +3 -3
  330. package/skills/rabetbase.manifest.json +12 -12
  331. package/lib/commands/page/react/create.d.ts +0 -2
  332. package/lib/commands/page/react/create.js +0 -1
  333. package/lib/commands/page/react/detail.js +0 -1
  334. package/lib/commands/page/react/list.js +0 -1
  335. package/lib/commands/page/react/publish.js +0 -1
  336. package/lib/commands/page/react/shared.js +0 -1
  337. package/lib/commands/page/react/syntax.js +0 -1
  338. package/lib/commands/page/react/template.js +0 -1
  339. package/lib/commands/page/react/update.js +0 -1
  340. package/lib/commands/page/standard-page-status.js +0 -1
  341. package/skills/rabetbase/references/rabetbase-page-react-create.md +0 -29
  342. /package/lib/commands/page/{react → custom}/template.d.ts +0 -0
@@ -1 +1 @@
1
- const a284_0x31b047=a284_0x57cf;function a284_0x5f0d(){const _0x26071b=['909198zANMjw','5LvunFd','level','setRawCommand','success','red','3512957wzpwTG','error','File','transports','yellow','timestamp','combine','warn','format','2097788VsZcre','errors','stringify','addColors','Failed\x20to\x20clear\x20logs:','duration','toISOString','winstonLogger','3527721IQrlnF','split','now','1710bhiDXK','utf8','existsSync','失败:\x20','8rbvcok','readLogs','printf','Failed\x20to\x20read\x20logs:','logFilePath','initWinstonLogger','rawCommand','info','dirname','filter','setLogPath','58450GxJGeU','unknown','blue','logTask','log','mkdirSync','currentRawCommand','完成:\x20','开始执行:\x20','getWinstonInstance','details','4372960fhAKsc','817196IfnNgm','clear'];a284_0x5f0d=function(){return _0x26071b;};return a284_0x5f0d();}(function(_0x24c920,_0x516bde){const _0x5989f8=a284_0x57cf,_0x79f09c=_0x24c920();while(!![]){try{const _0xdb3f70=parseInt(_0x5989f8(0xa9))/0x1+-parseInt(_0x5989f8(0xba))/0x2+parseInt(_0x5989f8(0xc2))/0x3+-parseInt(_0x5989f8(0xdf))/0x4+parseInt(_0x5989f8(0xac))/0x5*(parseInt(_0x5989f8(0xab))/0x6)+-parseInt(_0x5989f8(0xb1))/0x7*(parseInt(_0x5989f8(0xc9))/0x8)+parseInt(_0x5989f8(0xc5))/0x9*(parseInt(_0x5989f8(0xd4))/0xa);if(_0xdb3f70===_0x516bde)break;else _0x79f09c['push'](_0x79f09c['shift']());}catch(_0x270cee){_0x79f09c['push'](_0x79f09c['shift']());}}}(a284_0x5f0d,0x95381));function a284_0x57cf(_0x14bb77,_0xaf68e5){_0x14bb77=_0x14bb77-0xa9;const _0x5f0d33=a284_0x5f0d();let _0x57cf7c=_0x5f0d33[_0x14bb77];return _0x57cf7c;}import a284_0x4ba0b0 from'winston';import a284_0x1c0096 from'node:fs';import a284_0x3fcc16 from'node:path';class Logger{['winstonLogger'];[a284_0x31b047(0xcd)];[a284_0x31b047(0xda)]='';constructor(){this['logFilePath']='';}[a284_0x31b047(0xae)](_0x6453e5){const _0x1892f2=a284_0x31b047;this[_0x1892f2(0xda)]=_0x6453e5;}[a284_0x31b047(0xce)](){const _0x5d81c3=a284_0x31b047,_0x3044ae=a284_0x3fcc16[_0x5d81c3(0xd1)](this[_0x5d81c3(0xcd)]);!a284_0x1c0096[_0x5d81c3(0xc7)](_0x3044ae)&&a284_0x1c0096[_0x5d81c3(0xd9)](_0x3044ae,{'recursive':!![]});const _0x5a5170=a284_0x4ba0b0[_0x5d81c3(0xb9)][_0x5d81c3(0xb7)](a284_0x4ba0b0['format'][_0x5d81c3(0xb6)](),a284_0x4ba0b0['format'][_0x5d81c3(0xbb)]({'stack':!![]}),a284_0x4ba0b0[_0x5d81c3(0xb9)][_0x5d81c3(0xcb)](_0x4d4cdc=>{const _0xd4cef8=_0x5d81c3,_0x1250e2={'timestamp':_0x4d4cdc['timestamp']||new Date()[_0xd4cef8(0xc0)](),'level':_0x4d4cdc[_0xd4cef8(0xad)]||_0xd4cef8(0xd0),'command':_0x4d4cdc['command']||_0xd4cef8(0xd5),'rawCommand':_0x4d4cdc[_0xd4cef8(0xcf)]||this[_0xd4cef8(0xda)]||undefined,'message':_0x4d4cdc['message']||'','duration':_0x4d4cdc[_0xd4cef8(0xbf)]||undefined,'details':_0x4d4cdc[_0xd4cef8(0xde)]||undefined};return JSON[_0xd4cef8(0xbc)](_0x1250e2);}));this[_0x5d81c3(0xc1)]=a284_0x4ba0b0['createLogger']({'level':_0x5d81c3(0xd0),'format':_0x5a5170,'transports':[new a284_0x4ba0b0[(_0x5d81c3(0xb4))][(_0x5d81c3(0xb3))]({'filename':this[_0x5d81c3(0xcd)],'level':_0x5d81c3(0xd0)})],'silent':![]}),a284_0x4ba0b0[_0x5d81c3(0xbd)]({'success':'green','error':_0x5d81c3(0xb0),'warn':_0x5d81c3(0xb5),'info':_0x5d81c3(0xd6)});}[a284_0x31b047(0xd3)](_0xfacad3){const _0x5a202e=a284_0x31b047;this[_0x5a202e(0xcd)]=a284_0x3fcc16['join'](_0xfacad3,'.lovrabet.log'),this[_0x5a202e(0xc1)]&&this['winstonLogger'][_0x5a202e(0xaa)](),this[_0x5a202e(0xce)]();}[a284_0x31b047(0xd0)](_0x5d9f87,_0x273cb3,_0x234d03){const _0x272ca5=a284_0x31b047;if(!this['logFilePath']||!this[_0x272ca5(0xc1)])return;this[_0x272ca5(0xc1)]['info'](_0x273cb3,{'command':_0x5d9f87,'details':_0x234d03});}[a284_0x31b047(0xaf)](_0x484602,_0x595a7b,_0x2d429b,_0x4ae76e){const _0x35e6be=a284_0x31b047;if(!this[_0x35e6be(0xcd)]||!this[_0x35e6be(0xc1)])return;this['winstonLogger'][_0x35e6be(0xd8)](_0x35e6be(0xd0),_0x595a7b,{'level':_0x35e6be(0xaf),'command':_0x484602,'duration':_0x2d429b,'details':_0x4ae76e});}[a284_0x31b047(0xb2)](_0x13b7e9,_0x7c775d,_0x1e18df){const _0x3007fb=a284_0x31b047;if(!this[_0x3007fb(0xcd)]||!this['winstonLogger'])return;this[_0x3007fb(0xc1)][_0x3007fb(0xb2)](_0x7c775d,{'command':_0x13b7e9,'details':_0x1e18df});}[a284_0x31b047(0xb8)](_0x364b68,_0x96beb7,_0x2f3d32){const _0x2db149=a284_0x31b047;if(!this[_0x2db149(0xcd)]||!this[_0x2db149(0xc1)])return;this['winstonLogger'][_0x2db149(0xb8)](_0x96beb7,{'command':_0x364b68,'details':_0x2f3d32});}async[a284_0x31b047(0xd7)](_0x393583,_0x2054a3,_0x242496){const _0x386703=a284_0x31b047,_0x530e7e=Date[_0x386703(0xc4)]();this[_0x386703(0xd0)](_0x393583,_0x386703(0xdc)+_0x2054a3);try{const _0x63ab40=await _0x242496(),_0x1c353f=Date[_0x386703(0xc4)]()-_0x530e7e;return this[_0x386703(0xaf)](_0x393583,_0x386703(0xdb)+_0x2054a3,_0x1c353f),_0x63ab40;}catch(_0x276934){const _0x2ded65=Date[_0x386703(0xc4)]()-_0x530e7e;this[_0x386703(0xb2)](_0x393583,_0x386703(0xc8)+_0x2054a3,{'error':_0x276934 instanceof Error?_0x276934['message']:String(_0x276934),'duration':_0x2ded65});throw _0x276934;}}[a284_0x31b047(0xca)](){const _0x4d048b=a284_0x31b047;try{if(!a284_0x1c0096[_0x4d048b(0xc7)](this['logFilePath']))return[];const _0x304d05=a284_0x1c0096['readFileSync'](this[_0x4d048b(0xcd)],_0x4d048b(0xc6));return _0x304d05[_0x4d048b(0xc3)]('\x0a')[_0x4d048b(0xd2)](_0x4c3d58=>_0x4c3d58['trim']())['map'](_0x2f091f=>JSON['parse'](_0x2f091f));}catch(_0x2f1c9b){return console[_0x4d048b(0xb8)](_0x4d048b(0xcc),_0x2f1c9b),[];}}['clearLogs'](){const _0x1eeec8=a284_0x31b047;try{a284_0x1c0096['existsSync'](this[_0x1eeec8(0xcd)])&&a284_0x1c0096['writeFileSync'](this['logFilePath'],'',_0x1eeec8(0xc6));}catch(_0x5568c6){console['warn'](_0x1eeec8(0xbe),_0x5568c6);}}[a284_0x31b047(0xdd)](){const _0x3a6a37=a284_0x31b047;return this[_0x3a6a37(0xc1)];}}export const logger=new Logger();
1
+ function a284_0x21b3(){const _0xdf8294=['2172310QOcBAH','logFilePath','map','info','Failed\x20to\x20clear\x20logs:','34692sglPNg','currentRawCommand','details','existsSync','getWinstonInstance','level','setRawCommand','green','6GPhxzI','readFileSync','1283rQPwqR','createLogger','clearLogs','red','warn','error','clear','完成:\x20','rawCommand','message','readLogs','Failed\x20to\x20read\x20logs:','success','join','83601lquXQc','addColors','log','toISOString','printf','7604824bzUzzU','combine','File','winstonLogger','logTask','5133296lXoBbb','dirname','开始执行:\x20','setLogPath','timestamp','1230QnYEaW','mkdirSync','command','utf8','1328470kafhpB','transports','initWinstonLogger','format','now','390HSrIBW','unknown','752NocHZa'];a284_0x21b3=function(){return _0xdf8294;};return a284_0x21b3();}const a284_0x17f3a6=a284_0x287f;(function(_0x79f1c,_0xe88e65){const _0x4f2b67=a284_0x287f,_0x14af9c=_0x79f1c();while(!![]){try{const _0x31948e=parseInt(_0x4f2b67(0xb0))/0x1*(-parseInt(_0x4f2b67(0xa0))/0x2)+parseInt(_0x4f2b67(0x9e))/0x3*(parseInt(_0x4f2b67(0xa6))/0x4)+-parseInt(_0x4f2b67(0xa1))/0x5*(parseInt(_0x4f2b67(0xae))/0x6)+parseInt(_0x4f2b67(0xc8))/0x7+parseInt(_0x4f2b67(0xc3))/0x8+-parseInt(_0x4f2b67(0xbe))/0x9*(parseInt(_0x4f2b67(0xcd))/0xa)+parseInt(_0x4f2b67(0xd1))/0xb;if(_0x31948e===_0xe88e65)break;else _0x14af9c['push'](_0x14af9c['shift']());}catch(_0x581658){_0x14af9c['push'](_0x14af9c['shift']());}}}(a284_0x21b3,0xd5146));import a284_0x817cc7 from'winston';import a284_0x265ced from'node:fs';import a284_0x2b212d from'node:path';function a284_0x287f(_0x3d4b0b,_0x535c7c){_0x3d4b0b=_0x3d4b0b-0x9d;const _0x21b31a=a284_0x21b3();let _0x287f29=_0x21b31a[_0x3d4b0b];return _0x287f29;}class Logger{[a284_0x17f3a6(0xc6)];[a284_0x17f3a6(0xa2)];['currentRawCommand']='';constructor(){const _0x1fe15e=a284_0x17f3a6;this[_0x1fe15e(0xa2)]='';}[a284_0x17f3a6(0xac)](_0xebd4c2){const _0x285d73=a284_0x17f3a6;this[_0x285d73(0xa7)]=_0xebd4c2;}[a284_0x17f3a6(0xd3)](){const _0x3424a6=a284_0x17f3a6,_0x2d6c2b=a284_0x2b212d[_0x3424a6(0xc9)](this[_0x3424a6(0xa2)]);!a284_0x265ced[_0x3424a6(0xa9)](_0x2d6c2b)&&a284_0x265ced[_0x3424a6(0xce)](_0x2d6c2b,{'recursive':!![]});const _0xf3a4a=a284_0x817cc7[_0x3424a6(0xd4)][_0x3424a6(0xc4)](a284_0x817cc7[_0x3424a6(0xd4)]['timestamp'](),a284_0x817cc7[_0x3424a6(0xd4)]['errors']({'stack':!![]}),a284_0x817cc7[_0x3424a6(0xd4)][_0x3424a6(0xc2)](_0x314904=>{const _0x5284dd=_0x3424a6,_0x62749f={'timestamp':_0x314904[_0x5284dd(0xcc)]||new Date()[_0x5284dd(0xc1)](),'level':_0x314904[_0x5284dd(0xab)]||_0x5284dd(0xa4),'command':_0x314904[_0x5284dd(0xcf)]||_0x5284dd(0x9f),'rawCommand':_0x314904[_0x5284dd(0xb8)]||this[_0x5284dd(0xa7)]||undefined,'message':_0x314904[_0x5284dd(0xb9)]||'','duration':_0x314904['duration']||undefined,'details':_0x314904[_0x5284dd(0xa8)]||undefined};return JSON['stringify'](_0x62749f);}));this[_0x3424a6(0xc6)]=a284_0x817cc7[_0x3424a6(0xb1)]({'level':'info','format':_0xf3a4a,'transports':[new a284_0x817cc7[(_0x3424a6(0xd2))][(_0x3424a6(0xc5))]({'filename':this['logFilePath'],'level':'info'})],'silent':![]}),a284_0x817cc7[_0x3424a6(0xbf)]({'success':_0x3424a6(0xad),'error':_0x3424a6(0xb3),'warn':'yellow','info':'blue'});}[a284_0x17f3a6(0xcb)](_0x4748d5){const _0x123797=a284_0x17f3a6;this[_0x123797(0xa2)]=a284_0x2b212d[_0x123797(0xbd)](_0x4748d5,'.lovrabet.log'),this[_0x123797(0xc6)]&&this[_0x123797(0xc6)][_0x123797(0xb6)](),this[_0x123797(0xd3)]();}[a284_0x17f3a6(0xa4)](_0xf2c07f,_0x227b68,_0x195a5c){const _0xa45b11=a284_0x17f3a6;if(!this[_0xa45b11(0xa2)]||!this[_0xa45b11(0xc6)])return;this['winstonLogger'][_0xa45b11(0xa4)](_0x227b68,{'command':_0xf2c07f,'details':_0x195a5c});}['success'](_0x402399,_0x315000,_0x476b39,_0x25a76b){const _0x38e15f=a284_0x17f3a6;if(!this[_0x38e15f(0xa2)]||!this[_0x38e15f(0xc6)])return;this[_0x38e15f(0xc6)][_0x38e15f(0xc0)](_0x38e15f(0xa4),_0x315000,{'level':_0x38e15f(0xbc),'command':_0x402399,'duration':_0x476b39,'details':_0x25a76b});}['error'](_0x540825,_0x1daa28,_0x44d9af){const _0x10630d=a284_0x17f3a6;if(!this[_0x10630d(0xa2)]||!this[_0x10630d(0xc6)])return;this[_0x10630d(0xc6)][_0x10630d(0xb5)](_0x1daa28,{'command':_0x540825,'details':_0x44d9af});}[a284_0x17f3a6(0xb4)](_0x135bff,_0x19a87b,_0x90712d){const _0x8e6f85=a284_0x17f3a6;if(!this[_0x8e6f85(0xa2)]||!this[_0x8e6f85(0xc6)])return;this[_0x8e6f85(0xc6)][_0x8e6f85(0xb4)](_0x19a87b,{'command':_0x135bff,'details':_0x90712d});}async[a284_0x17f3a6(0xc7)](_0x21010b,_0x241ec0,_0x472cfe){const _0x10e06d=a284_0x17f3a6,_0x146243=Date[_0x10e06d(0x9d)]();this[_0x10e06d(0xa4)](_0x21010b,_0x10e06d(0xca)+_0x241ec0);try{const _0x551a78=await _0x472cfe(),_0x1d4a9c=Date[_0x10e06d(0x9d)]()-_0x146243;return this[_0x10e06d(0xbc)](_0x21010b,_0x10e06d(0xb7)+_0x241ec0,_0x1d4a9c),_0x551a78;}catch(_0x22433e){const _0x123b02=Date['now']()-_0x146243;this['error'](_0x21010b,'失败:\x20'+_0x241ec0,{'error':_0x22433e instanceof Error?_0x22433e[_0x10e06d(0xb9)]:String(_0x22433e),'duration':_0x123b02});throw _0x22433e;}}[a284_0x17f3a6(0xba)](){const _0x550c78=a284_0x17f3a6;try{if(!a284_0x265ced[_0x550c78(0xa9)](this[_0x550c78(0xa2)]))return[];const _0x1f7fc2=a284_0x265ced[_0x550c78(0xaf)](this[_0x550c78(0xa2)],'utf8');return _0x1f7fc2['split']('\x0a')['filter'](_0x167a97=>_0x167a97['trim']())[_0x550c78(0xa3)](_0x52fe79=>JSON['parse'](_0x52fe79));}catch(_0x28b53f){return console['warn'](_0x550c78(0xbb),_0x28b53f),[];}}[a284_0x17f3a6(0xb2)](){const _0x293529=a284_0x17f3a6;try{a284_0x265ced['existsSync'](this[_0x293529(0xa2)])&&a284_0x265ced['writeFileSync'](this[_0x293529(0xa2)],'',_0x293529(0xd0));}catch(_0x2f1075){console[_0x293529(0xb4)](_0x293529(0xa5),_0x2f1075);}}[a284_0x17f3a6(0xaa)](){const _0x56036f=a284_0x17f3a6;return this[_0x56036f(0xc6)];}}export const logger=new Logger();
@@ -1 +1 @@
1
- (function(_0x1ba250,_0x74687d){const _0x17752f=a285_0xe4b8,_0x32e12f=_0x1ba250();while(!![]){try{const _0xc6bf70=parseInt(_0x17752f(0x1b9))/0x1*(parseInt(_0x17752f(0x1b1))/0x2)+-parseInt(_0x17752f(0x1b7))/0x3+-parseInt(_0x17752f(0x1b2))/0x4*(-parseInt(_0x17752f(0x1b8))/0x5)+parseInt(_0x17752f(0x1bd))/0x6*(parseInt(_0x17752f(0x1b6))/0x7)+-parseInt(_0x17752f(0x1b3))/0x8*(parseInt(_0x17752f(0x1be))/0x9)+-parseInt(_0x17752f(0x1b4))/0xa*(-parseInt(_0x17752f(0x1ba))/0xb)+-parseInt(_0x17752f(0x1bc))/0xc;if(_0xc6bf70===_0x74687d)break;else _0x32e12f['push'](_0x32e12f['shift']());}catch(_0x3c134b){_0x32e12f['push'](_0x32e12f['shift']());}}}(a285_0x28f7,0xb8292));import{CliErrors}from'../errors.js';function a285_0xe4b8(_0x48c0ab,_0x29da77){_0x48c0ab=_0x48c0ab-0x1b1;const _0x28f708=a285_0x28f7();let _0xe4b8d3=_0x28f708[_0x48c0ab];return _0xe4b8d3;}export function parseJsonParams(_0x4ddc11){const _0x3db1b9=a285_0xe4b8;if(!_0x4ddc11)return undefined;let _0x454672;try{_0x454672=JSON['parse'](_0x4ddc11);}catch{throw CliErrors[_0x3db1b9(0x1bf)](_0x3db1b9(0x1bb)+_0x4ddc11);}if(!_0x454672||typeof _0x454672!==_0x3db1b9(0x1c0)||Array['isArray'](_0x454672))throw CliErrors[_0x3db1b9(0x1bf)]('--params\x20must\x20be\x20a\x20JSON\x20object',_0x3db1b9(0x1b5));return _0x454672;}function a285_0x28f7(){const _0x464f76=['913PYlmTq','Invalid\x20JSON\x20for\x20--params:\x20','16484076BvUxzs','204tvfqPt','111123ZvuTdM','validation','object','2743384PuDOwb','4GwZXVF','744jFrPbA','106360enVSTl','Example:\x20--params\x20\x27{\x22id\x22:123}\x27','94101yTacBu','864012xpUJnb','4263640bsKkDI','1Utgsvs'];a285_0x28f7=function(){return _0x464f76;};return a285_0x28f7();}
1
+ (function(_0x47ee8b,_0x1fb7e3){const _0x3a2b09=a285_0x333f,_0x3b5da9=_0x47ee8b();while(!![]){try{const _0xd44d7b=parseInt(_0x3a2b09(0x155))/0x1*(parseInt(_0x3a2b09(0x148))/0x2)+-parseInt(_0x3a2b09(0x150))/0x3*(-parseInt(_0x3a2b09(0x14c))/0x4)+-parseInt(_0x3a2b09(0x14f))/0x5+-parseInt(_0x3a2b09(0x153))/0x6+parseInt(_0x3a2b09(0x154))/0x7*(parseInt(_0x3a2b09(0x149))/0x8)+parseInt(_0x3a2b09(0x14e))/0x9*(parseInt(_0x3a2b09(0x147))/0xa)+-parseInt(_0x3a2b09(0x14d))/0xb*(parseInt(_0x3a2b09(0x152))/0xc);if(_0xd44d7b===_0x1fb7e3)break;else _0x3b5da9['push'](_0x3b5da9['shift']());}catch(_0x458c54){_0x3b5da9['push'](_0x3b5da9['shift']());}}}(a285_0x5444,0x35167));function a285_0x333f(_0x37bf0b,_0xba1d3b){_0x37bf0b=_0x37bf0b-0x146;const _0x54441d=a285_0x5444();let _0x333fb5=_0x54441d[_0x37bf0b];return _0x333fb5;}function a285_0x5444(){const _0x1834b7=['99734rUtpRz','24rVekFF','object','isArray','1556284Bhfkam','33chXXbk','7713MryAbc','963755YgxPAv','3SOvGpN','Example:\x20--params\x20\x27{\x22id\x22:123}\x27','2655948ZjsSsF','2419416WKuZCp','634795jYrURs','8qiiNaM','Invalid\x20JSON\x20for\x20--params:\x20','validation','4870cWpBzt'];a285_0x5444=function(){return _0x1834b7;};return a285_0x5444();}import{CliErrors}from'../errors.js';export function parseJsonParams(_0x210f95){const _0x154163=a285_0x333f;if(!_0x210f95)return undefined;let _0x32d648;try{_0x32d648=JSON['parse'](_0x210f95);}catch{throw CliErrors[_0x154163(0x146)](_0x154163(0x156)+_0x210f95);}if(!_0x32d648||typeof _0x32d648!==_0x154163(0x14a)||Array[_0x154163(0x14b)](_0x32d648))throw CliErrors[_0x154163(0x146)]('--params\x20must\x20be\x20a\x20JSON\x20object',_0x154163(0x151));return _0x32d648;}
@@ -1 +1 @@
1
- const a286_0x85a41f=a286_0x1fd8;(function(_0x3c7120,_0x4cada8){const _0x318afc=a286_0x1fd8,_0x15b5f7=_0x3c7120();while(!![]){try{const _0x5c8089=parseInt(_0x318afc(0xe2))/0x1*(-parseInt(_0x318afc(0xe4))/0x2)+parseInt(_0x318afc(0xde))/0x3*(-parseInt(_0x318afc(0xdd))/0x4)+parseInt(_0x318afc(0xd9))/0x5+parseInt(_0x318afc(0xdf))/0x6*(-parseInt(_0x318afc(0xd7))/0x7)+parseInt(_0x318afc(0xda))/0x8*(parseInt(_0x318afc(0xe1))/0x9)+parseInt(_0x318afc(0xe3))/0xa*(parseInt(_0x318afc(0xdb))/0xb)+-parseInt(_0x318afc(0xdc))/0xc*(parseInt(_0x318afc(0xe0))/0xd);if(_0x5c8089===_0x4cada8)break;else _0x15b5f7['push'](_0x15b5f7['shift']());}catch(_0x1b79a9){_0x15b5f7['push'](_0x15b5f7['shift']());}}}(a286_0x4edd,0xab249));function a286_0x1fd8(_0x53c211,_0xf092a1){_0x53c211=_0x53c211-0xd7;const _0x4eddcf=a286_0x4edd();let _0x1fd864=_0x4eddcf[_0x53c211];return _0x1fd864;}function a286_0x4edd(){const _0x106044=['4264316JKdDjr','3avHxpY','50766Eiuuxt','27287QTAtMV','540blabdq','2WgWcmk','7310pjiDNh','258326prFKEN','.cmd','105ksqOkK','platform','3752535ghnWWn','151888BVlhWw','16555riclpT','4788pLKprk'];a286_0x4edd=function(){return _0x106044;};return a286_0x4edd();}export const isWindows=process[a286_0x85a41f(0xd8)]==='win32';export function resolveNpmBin(_0x31349d){const _0x45bc41=a286_0x85a41f;return isWindows?_0x31349d+_0x45bc41(0xe5):_0x31349d;}
1
+ const a286_0x3ffcd5=a286_0x5ed5;function a286_0x5ed5(_0x4be5c9,_0x478804){_0x4be5c9=_0x4be5c9-0x11b;const _0x1a8b3d=a286_0x1a8b();let _0x5ed542=_0x1a8b3d[_0x4be5c9];return _0x5ed542;}(function(_0x50b99d,_0x4d0bc3){const _0x4ed236=a286_0x5ed5,_0x5202e0=_0x50b99d();while(!![]){try{const _0x3885e2=-parseInt(_0x4ed236(0x11e))/0x1*(-parseInt(_0x4ed236(0x127))/0x2)+parseInt(_0x4ed236(0x122))/0x3*(-parseInt(_0x4ed236(0x125))/0x4)+parseInt(_0x4ed236(0x126))/0x5+-parseInt(_0x4ed236(0x121))/0x6*(parseInt(_0x4ed236(0x120))/0x7)+-parseInt(_0x4ed236(0x123))/0x8+-parseInt(_0x4ed236(0x124))/0x9+-parseInt(_0x4ed236(0x11d))/0xa*(-parseInt(_0x4ed236(0x11c))/0xb);if(_0x3885e2===_0x4d0bc3)break;else _0x5202e0['push'](_0x5202e0['shift']());}catch(_0x2a67b9){_0x5202e0['push'](_0x5202e0['shift']());}}}(a286_0x1a8b,0x266ad));function a286_0x1a8b(){const _0x2dd314=['308796LVwIis','489575nnjyfo','106JfQzDe','win32','11xJOVeX','8420180aexlOm','746lMJrvi','platform','7WvbAWW','1062066AlLdJv','9CsEPmm','2389600PkbGXv','1033254hFhTGq'];a286_0x1a8b=function(){return _0x2dd314;};return a286_0x1a8b();}export const isWindows=process[a286_0x3ffcd5(0x11f)]===a286_0x3ffcd5(0x11b);export function resolveNpmBin(_0x9f1bea){return isWindows?_0x9f1bea+'.cmd':_0x9f1bea;}
@@ -1 +1 @@
1
- (function(_0x1e8136,_0x7e623b){const _0x5e6f83=a287_0x2661,_0x1bb59a=_0x1e8136();while(!![]){try{const _0xd0ab89=parseInt(_0x5e6f83(0x1e5))/0x1*(-parseInt(_0x5e6f83(0x1e9))/0x2)+-parseInt(_0x5e6f83(0x1e7))/0x3*(parseInt(_0x5e6f83(0x1e3))/0x4)+-parseInt(_0x5e6f83(0x1e1))/0x5*(-parseInt(_0x5e6f83(0x1e4))/0x6)+-parseInt(_0x5e6f83(0x1e6))/0x7+parseInt(_0x5e6f83(0x1da))/0x8+-parseInt(_0x5e6f83(0x1db))/0x9*(-parseInt(_0x5e6f83(0x1e2))/0xa)+-parseInt(_0x5e6f83(0x1ee))/0xb*(-parseInt(_0x5e6f83(0x1dc))/0xc);if(_0xd0ab89===_0x7e623b)break;else _0x1bb59a['push'](_0x1bb59a['shift']());}catch(_0x513719){_0x1bb59a['push'](_0x1bb59a['shift']());}}}(a287_0x5691,0x9eb66));import{existsSync,mkdirSync,readFileSync,writeFileSync}from'node:fs';import{dirname,join,resolve}from'node:path';import{fileURLToPath}from'node:url';function a287_0x5691(){const _0x3e3787=['1911102gUYMOA','string','2bhvfgb','本地模板文件不存在:\x20','CDN\x20请求失败:\x20','lovrabet_rules.mdc','utf-8','33XaKObR','lastUpdated','7944528iBTlFH','5126391dXPWSp','1767516XyQAFq','content','status','agents.md','statusText','5lfSrIh','10xQuFOI','4NZLUcR','1563162MPcJrA','752847NWypav','1575728ALneQu'];a287_0x5691=function(){return _0x3e3787;};return a287_0x5691();}import{getTemplateBaseUrl}from'../utils/config.js';import{appendUpdateTime}from'../utils/guides-cdn.js';const __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename);function getRulesCdnUrl(){const _0x3aeebd=getTemplateBaseUrl();return _0x3aeebd+'/rules/rules.json';}const LOCAL_TEMPLATE_PATH=resolve(__dirname,'../../templates/rules/lovrabet_rules.mdc.tpl');export async function fetchRulesFromCDN(){const _0xa8aece=a287_0x2661,_0x4a5328=getRulesCdnUrl(),_0x942ade=await fetch(_0x4a5328,{'headers':{'Accept':'application/json'}});if(!_0x942ade['ok'])throw new Error(_0xa8aece(0x1eb)+_0x942ade[_0xa8aece(0x1de)]+'\x20'+_0x942ade[_0xa8aece(0x1e0)]);const _0x5d85ac=await _0x942ade['json']();if(!_0x5d85ac[_0xa8aece(0x1dd)]||typeof _0x5d85ac[_0xa8aece(0x1dd)]!==_0xa8aece(0x1e8))throw new Error('CDN\x20返回数据格式错误');return _0x5d85ac;}export async function getRulesContent(){const _0x33aa6e=a287_0x2661;try{const _0x34e0c4=await fetchRulesFromCDN();return _0x34e0c4[_0x33aa6e(0x1dd)];}catch{return readLocalTemplate();}}export function readLocalTemplate(){const _0x2a8c37=a287_0x2661;if(existsSync(LOCAL_TEMPLATE_PATH))return readFileSync(LOCAL_TEMPLATE_PATH,_0x2a8c37(0x1ed));throw new Error(_0x2a8c37(0x1ea)+LOCAL_TEMPLATE_PATH);}function a287_0x2661(_0x44d23e,_0x538718){_0x44d23e=_0x44d23e-0x1d9;const _0x5691cb=a287_0x5691();let _0x2661c5=_0x5691cb[_0x44d23e];return _0x2661c5;}export async function writeRulesFile(_0x45ca42){const _0x47419e=a287_0x2661,_0xe13f4f=await fetchRulesFromCDN()['catch'](()=>null);let _0x41fa68;_0xe13f4f?(_0x41fa68=_0xe13f4f[_0x47419e(0x1dd)],_0xe13f4f[_0x47419e(0x1d9)]&&(_0x41fa68=appendUpdateTime(_0x41fa68,_0xe13f4f[_0x47419e(0x1d9)]))):_0x41fa68=readLocalTemplate();const _0x879eb9=dirname(_0x45ca42);!existsSync(_0x879eb9)&&mkdirSync(_0x879eb9,{'recursive':!![]}),writeFileSync(_0x45ca42,_0x41fa68,_0x47419e(0x1ed));}export async function copyRulesToCursor(_0x27edb5){const _0x10cc8c=a287_0x2661,_0x505280=join(_0x27edb5,'.cursor/rules'),_0x35c4fe=join(_0x505280,_0x10cc8c(0x1ec));if(existsSync(_0x35c4fe))return![];return await writeRulesFile(_0x35c4fe),!![];}export async function copyRulesToAgentsMd(_0x2254ba){const _0x2e8c05=a287_0x2661,_0x51e83d=join(_0x2254ba,_0x2e8c05(0x1df));if(existsSync(_0x51e83d))return![];return await writeRulesFile(_0x51e83d),!![];}
1
+ const a287_0x26d419=a287_0x135a;(function(_0x47dd95,_0x300f51){const _0x5c2167=a287_0x135a,_0x4574f7=_0x47dd95();while(!![]){try{const _0xfa493=-parseInt(_0x5c2167(0x18d))/0x1*(-parseInt(_0x5c2167(0x189))/0x2)+-parseInt(_0x5c2167(0x18c))/0x3*(-parseInt(_0x5c2167(0x19a))/0x4)+-parseInt(_0x5c2167(0x19f))/0x5+parseInt(_0x5c2167(0x19e))/0x6*(-parseInt(_0x5c2167(0x190))/0x7)+-parseInt(_0x5c2167(0x1a1))/0x8*(parseInt(_0x5c2167(0x1a5))/0x9)+parseInt(_0x5c2167(0x18a))/0xa*(parseInt(_0x5c2167(0x191))/0xb)+-parseInt(_0x5c2167(0x188))/0xc*(-parseInt(_0x5c2167(0x197))/0xd);if(_0xfa493===_0x300f51)break;else _0x4574f7['push'](_0x4574f7['shift']());}catch(_0x2f9cb6){_0x4574f7['push'](_0x4574f7['shift']());}}}(a287_0xad29,0xa1c9a));import{existsSync,mkdirSync,readFileSync,writeFileSync}from'node:fs';function a287_0x135a(_0x411424,_0x15aa38){_0x411424=_0x411424-0x188;const _0xad2983=a287_0xad29();let _0x135a84=_0xad2983[_0x411424];return _0x135a84;}import{dirname,join,resolve}from'node:path';import{fileURLToPath}from'node:url';import{getTemplateBaseUrl}from'../utils/config.js';import{appendUpdateTime}from'../utils/guides-cdn.js';const __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename);function getRulesCdnUrl(){const _0x10af8f=a287_0x135a,_0x1d1b67=getTemplateBaseUrl();return _0x1d1b67+_0x10af8f(0x1a0);}const LOCAL_TEMPLATE_PATH=resolve(__dirname,a287_0x26d419(0x196));export async function fetchRulesFromCDN(){const _0x350058=a287_0x26d419,_0x186377=getRulesCdnUrl(),_0x25d3b8=await fetch(_0x186377,{'headers':{'Accept':_0x350058(0x19b)}});if(!_0x25d3b8['ok'])throw new Error(_0x350058(0x19d)+_0x25d3b8[_0x350058(0x193)]+'\x20'+_0x25d3b8[_0x350058(0x194)]);const _0x27ac31=await _0x25d3b8[_0x350058(0x18f)]();if(!_0x27ac31[_0x350058(0x1a4)]||typeof _0x27ac31[_0x350058(0x1a4)]!==_0x350058(0x198))throw new Error(_0x350058(0x1a2));return _0x27ac31;}export async function getRulesContent(){const _0x4d9de5=a287_0x26d419;try{const _0x213ba8=await fetchRulesFromCDN();return _0x213ba8[_0x4d9de5(0x1a4)];}catch{return readLocalTemplate();}}export function readLocalTemplate(){const _0x303e23=a287_0x26d419;if(existsSync(LOCAL_TEMPLATE_PATH))return readFileSync(LOCAL_TEMPLATE_PATH,_0x303e23(0x199));throw new Error(_0x303e23(0x19c)+LOCAL_TEMPLATE_PATH);}export async function writeRulesFile(_0x487c85){const _0x2917c7=a287_0x26d419,_0x50c552=await fetchRulesFromCDN()[_0x2917c7(0x192)](()=>null);let _0x4aec63;_0x50c552?(_0x4aec63=_0x50c552[_0x2917c7(0x1a4)],_0x50c552[_0x2917c7(0x18b)]&&(_0x4aec63=appendUpdateTime(_0x4aec63,_0x50c552[_0x2917c7(0x18b)]))):_0x4aec63=readLocalTemplate();const _0x4c52ee=dirname(_0x487c85);!existsSync(_0x4c52ee)&&mkdirSync(_0x4c52ee,{'recursive':!![]}),writeFileSync(_0x487c85,_0x4aec63,_0x2917c7(0x199));}export async function copyRulesToCursor(_0x38b9bc){const _0x5f0c11=a287_0x26d419,_0x519e03=join(_0x38b9bc,_0x5f0c11(0x1a3)),_0x1b6508=join(_0x519e03,_0x5f0c11(0x18e));if(existsSync(_0x1b6508))return![];return await writeRulesFile(_0x1b6508),!![];}export async function copyRulesToAgentsMd(_0x46e4fa){const _0x92e6e0=a287_0x26d419,_0x3163c8=join(_0x46e4fa,_0x92e6e0(0x195));if(existsSync(_0x3163c8))return![];return await writeRulesFile(_0x3163c8),!![];}function a287_0xad29(){const _0x3feab2=['12492mqaOKh','6534EYyPik','9504790yKojdR','lastUpdated','896007ZQwPtZ','8bxkwAX','lovrabet_rules.mdc','json','14zQGmmD','11KJCTgH','catch','status','statusText','agents.md','../../templates/rules/lovrabet_rules.mdc.tpl','11466SwsFdO','string','utf-8','8YyOTWc','application/json','本地模板文件不存在:\x20','CDN\x20请求失败:\x20','33468gGucRY','5653540QGODbH','/rules/rules.json','5500552UEUshJ','CDN\x20返回数据格式错误','.cursor/rules','content','9XGvuxO'];a287_0xad29=function(){return _0x3feab2;};return a287_0xad29();}
@@ -1 +1 @@
1
- export function sleep(_0x3d8ce1){return new Promise(_0x410dba=>setTimeout(_0x410dba,_0x3d8ce1));}
1
+ export function sleep(_0x19202f){return new Promise(_0x3c3ad6=>setTimeout(_0x3c3ad6,_0x19202f));}
@@ -1 +1 @@
1
- const a289_0x433a90=a289_0x41f5;(function(_0x112a2d,_0x48e317){const _0x1297c5=a289_0x41f5,_0x5be978=_0x112a2d();while(!![]){try{const _0x53c784=parseInt(_0x1297c5(0x17e))/0x1*(parseInt(_0x1297c5(0x167))/0x2)+-parseInt(_0x1297c5(0x164))/0x3*(parseInt(_0x1297c5(0x144))/0x4)+parseInt(_0x1297c5(0x175))/0x5*(parseInt(_0x1297c5(0x148))/0x6)+-parseInt(_0x1297c5(0x160))/0x7*(-parseInt(_0x1297c5(0x177))/0x8)+-parseInt(_0x1297c5(0x180))/0x9*(parseInt(_0x1297c5(0x181))/0xa)+parseInt(_0x1297c5(0x156))/0xb*(parseInt(_0x1297c5(0x176))/0xc)+parseInt(_0x1297c5(0x14e))/0xd*(parseInt(_0x1297c5(0x150))/0xe);if(_0x53c784===_0x48e317)break;else _0x5be978['push'](_0x5be978['shift']());}catch(_0x1b489f){_0x5be978['push'](_0x5be978['shift']());}}}(a289_0x367b,0x47353));import a289_0x4a3863 from'node:fs';import a289_0x9098b3 from'node:path';import{logger}from'../utils/logger.js';function a289_0x41f5(_0x1abb0f,_0x2d36b9){_0x1abb0f=_0x1abb0f-0x13b;const _0x367b88=a289_0x367b();let _0x41f551=_0x367b88[_0x1abb0f];return _0x41f551;}function a289_0x367b(){const _0x44e475=['toISOString','6746wtvJHL','.json','replaceContent','split','getFullYear','replace','success','promises','开始处理模板内容替换','alias:\x20\x22','getDate','replaceApiContent','name','join','1295QsphnG','335892EsbcpX','56hRHUSh','isFile','template','toUpperCase','writeFile','datasetCode:\x20\x22','getMinutes','50mRFDQW','info','2268927EOPMfq','10aVoOvR','mkdir','.css','toLowerCase','readFile','YourModel','now','slice','.ts','datasetCode','567244vDKhSb','.jsx','\x0a\x20\x20\x20\x20{\x20','includes','9726BXntYY','message','map','.tsx','.scss','.md','31655jhWTtH','tableName','238JzKXUE','processFile','.js','.tpl','toDisplayTitle','toComponentName','33QIyVee','padStart','pad','name:\x20\x22','error','endsWith','alias','getHours','formatLocalTimestamp','utf8','255346EDtGpH','copyFile','processDirectory','api','9RUkACR','pop'];a289_0x367b=function(){return _0x44e475;};return a289_0x367b();}import{getCliVersion}from'../utils/version.js';const CLI_VERSION=getCliVersion();export class TemplateReplacer{static[a289_0x433a90(0x158)](_0x5eea71){const _0x11105e=a289_0x433a90;return String(_0x5eea71)[_0x11105e(0x157)](0x2,'0');}static[a289_0x433a90(0x15e)](_0xe2738e){const _0x4823be=a289_0x433a90,_0x2db74a=_0xe2738e[_0x4823be(0x16b)](),_0x261127=this[_0x4823be(0x158)](_0xe2738e['getMonth']()+0x1),_0x4ee94f=this['pad'](_0xe2738e[_0x4823be(0x171)]()),_0x1b813d=this['pad'](_0xe2738e[_0x4823be(0x15d)]()),_0x409427=this['pad'](_0xe2738e[_0x4823be(0x17d)]()),_0x13e954=this[_0x4823be(0x158)](_0xe2738e['getSeconds']());return{'createdAt':_0x2db74a+'-'+_0x261127+'-'+_0x4ee94f+'\x20'+_0x1b813d+':'+_0x409427+':'+_0x13e954,'createdDate':_0x2db74a+'-'+_0x261127+'-'+_0x4ee94f,'createdTime':_0x1b813d+':'+_0x409427+':'+_0x13e954};}static[a289_0x433a90(0x155)](_0x2b1dd9){const _0x4c52e=a289_0x433a90,_0x1bffd7=_0x2b1dd9['split']('/')[_0x4c52e(0x165)]()||_0x2b1dd9;return _0x1bffd7[_0x4c52e(0x16a)]('-')[_0x4c52e(0x14a)](_0x59be06=>_0x59be06['charAt'](0x0)[_0x4c52e(0x17a)]()+_0x59be06['slice'](0x1)[_0x4c52e(0x13d)]())[_0x4c52e(0x174)]('');}static['toDisplayTitle'](_0x5b2d79){const _0x2b7fec=a289_0x433a90,_0xa910af=_0x5b2d79[_0x2b7fec(0x16a)]('/')[_0x2b7fec(0x165)]()||_0x5b2d79;return _0xa910af['split']('-')[_0x2b7fec(0x14a)](_0xf80fe6=>_0xf80fe6['charAt'](0x0)[_0x2b7fec(0x17a)]()+_0xf80fe6[_0x2b7fec(0x141)](0x1)[_0x2b7fec(0x13d)]())[_0x2b7fec(0x174)]('\x20');}static[a289_0x433a90(0x169)](_0x20f3ad,_0xb70529,_0x2900f8){const _0x1e8a73=a289_0x433a90,_0x365b81=this[_0x1e8a73(0x155)](_0xb70529),_0x252b28=this[_0x1e8a73(0x154)](_0xb70529),{createdAt:_0x1836d3,createdDate:_0x21cba3,createdTime:_0x1cb492}=this[_0x1e8a73(0x15e)](new Date());let _0x3a0528=_0x20f3ad[_0x1e8a73(0x16c)](/\{CliVersion\}/g,CLI_VERSION)['replace'](/\{ComponentName\}/g,_0x365b81)[_0x1e8a73(0x16c)](/\{DisplayTitle\}/g,_0x252b28)['replace'](/\{PageName\}/g,_0xb70529)[_0x1e8a73(0x16c)](/\{TemplateName\}/g,_0x2900f8)[_0x1e8a73(0x16c)](/\{CreatedAt\}/g,_0x1836d3)[_0x1e8a73(0x16c)](/\{CreatedDate\}/g,_0x21cba3)[_0x1e8a73(0x16c)](/\{CreatedTime\}/g,_0x1cb492);return _0x3a0528;}static[a289_0x433a90(0x172)](_0xf5c531,_0x4c9054,_0x7d4064,_0xa28496,_0x512ba1,_0x586040,_0x4c8d88,_0x59c236){const _0x1eec1a=a289_0x433a90,_0x47ed3a=new Date(),_0x523a16=_0x47ed3a[_0x1eec1a(0x166)](),_0xa5da6f=_0x7d4064['map'](_0x3d926d=>{const _0xea9ea5=_0x1eec1a,_0x20ce40=[_0xea9ea5(0x17c)+_0x3d926d[_0xea9ea5(0x143)]+'\x22','tableName:\x20\x22'+_0x3d926d[_0xea9ea5(0x14f)]+'\x22',_0xea9ea5(0x159)+_0x3d926d[_0xea9ea5(0x173)]+'\x22'];return _0x3d926d[_0xea9ea5(0x15c)]&&_0x20ce40['push'](_0xea9ea5(0x170)+_0x3d926d[_0xea9ea5(0x15c)]+'\x22'),_0xea9ea5(0x146)+_0x20ce40['join'](',\x20')+'\x20},';})['join'](''),_0x1f85ca=_0xa28496||_0x7d4064[0x0]?.[_0x1eec1a(0x15c)]||_0x1eec1a(0x13f);let _0x51f566=_0xf5c531['replace'](/\{AppCode\}/g,_0x4c9054)['replace'](/\{ModelConfigs\}/g,_0xa5da6f)['replace'](/\{ExampleModelName\}/g,_0x1f85ca)['replace'](/\{ApiFileName\}/g,_0x512ba1||_0x1eec1a(0x163))[_0x1eec1a(0x16c)](/\{ConfigName\}/g,_0x586040||'default')[_0x1eec1a(0x16c)](/\{ClientConfigParam\}/g,_0x4c8d88||'')[_0x1eec1a(0x16c)](/\{VarPrefix\}/g,_0x59c236||'LOVRABET')[_0x1eec1a(0x16c)](/\{CreatedAt\}/g,_0x523a16);return _0x51f566;}static async['processTemplate'](_0x43fc4d,_0x4636e0,_0x340c9e,_0x4e0a5b,_0x322cf1=!![]){const _0x462594=a289_0x433a90,_0x1ad73a=Date[_0x462594(0x140)]();try{_0x322cf1&&logger[_0x462594(0x17f)](_0x462594(0x179),_0x462594(0x16f),{'templatePath':_0x43fc4d,'targetPath':_0x4636e0,'pageName':_0x340c9e,'templateName':_0x4e0a5b});await a289_0x4a3863[_0x462594(0x16e)]['mkdir'](_0x4636e0,{'recursive':!![]}),await this['processDirectory'](_0x43fc4d,_0x4636e0,_0x340c9e,_0x4e0a5b);if(_0x322cf1){const _0x27d25a=Date[_0x462594(0x140)]()-_0x1ad73a;logger[_0x462594(0x16d)](_0x462594(0x179),'模板内容替换完成',_0x27d25a,{'pageName':_0x340c9e,'templateName':_0x4e0a5b});}}catch(_0xc9c8ee){if(_0x322cf1){const _0xe25ada=Date[_0x462594(0x140)]()-_0x1ad73a;logger[_0x462594(0x15a)](_0x462594(0x179),'模板内容替换失败',{'templatePath':_0x43fc4d,'targetPath':_0x4636e0,'pageName':_0x340c9e,'templateName':_0x4e0a5b,'error':_0xc9c8ee instanceof Error?_0xc9c8ee[_0x462594(0x149)]:String(_0xc9c8ee),'duration':_0xe25ada});}throw _0xc9c8ee;}}static async[a289_0x433a90(0x162)](_0x43c42f,_0x7fe9c7,_0x3fbd4c,_0xac66ae){const _0x29c3e3=a289_0x433a90,_0x4a26e2=await a289_0x4a3863[_0x29c3e3(0x16e)]['readdir'](_0x43c42f,{'withFileTypes':!![]});for(const _0x501d44 of _0x4a26e2){const _0x4cba12=a289_0x9098b3[_0x29c3e3(0x174)](_0x43c42f,_0x501d44['name']);let _0x2c2d4c=a289_0x9098b3[_0x29c3e3(0x174)](_0x7fe9c7,_0x501d44[_0x29c3e3(0x173)]);_0x501d44[_0x29c3e3(0x173)][_0x29c3e3(0x15b)](_0x29c3e3(0x153))&&(_0x2c2d4c=a289_0x9098b3[_0x29c3e3(0x174)](_0x7fe9c7,_0x501d44[_0x29c3e3(0x173)][_0x29c3e3(0x16c)](/\.tpl$/,'')));if(_0x501d44['isDirectory']())await a289_0x4a3863[_0x29c3e3(0x16e)][_0x29c3e3(0x13b)](_0x2c2d4c,{'recursive':!![]}),await this[_0x29c3e3(0x162)](_0x4cba12,_0x2c2d4c,_0x3fbd4c,_0xac66ae);else _0x501d44[_0x29c3e3(0x178)]()&&await this[_0x29c3e3(0x151)](_0x4cba12,_0x2c2d4c,_0x3fbd4c,_0xac66ae);}}static async[a289_0x433a90(0x151)](_0x47d330,_0x1d1212,_0x33bdf3,_0x1a4bdd){const _0x3f19cc=a289_0x433a90,_0x344e9a=a289_0x9098b3['extname'](_0x47d330)[_0x3f19cc(0x13d)]();_0x47d330[_0x3f19cc(0x15b)](_0x3f19cc(0x153))&&(_0x1d1212=_0x1d1212[_0x3f19cc(0x16c)](/\.tpl$/,''));const _0x41185e=[_0x3f19cc(0x14b),_0x3f19cc(0x142),_0x3f19cc(0x145),_0x3f19cc(0x152),_0x3f19cc(0x168),_0x3f19cc(0x14d),_0x3f19cc(0x13c),_0x3f19cc(0x14c),_0x3f19cc(0x153)];if(_0x41185e[_0x3f19cc(0x147)](_0x344e9a)||_0x47d330[_0x3f19cc(0x15b)]('.tpl')){const _0x41a603=await a289_0x4a3863[_0x3f19cc(0x16e)][_0x3f19cc(0x13e)](_0x47d330,_0x3f19cc(0x15f)),_0x5075dd=this[_0x3f19cc(0x169)](_0x41a603,_0x33bdf3,_0x1a4bdd);await a289_0x4a3863[_0x3f19cc(0x16e)][_0x3f19cc(0x17b)](_0x1d1212,_0x5075dd,'utf8');}else await a289_0x4a3863[_0x3f19cc(0x16e)][_0x3f19cc(0x161)](_0x47d330,_0x1d1212);}}
1
+ function a289_0x501e(){const _0xbdb89b=['endsWith','.ts','api','.jsx','getHours','default','YourModel','.md','pop','.scss','模板内容替换失败','.js','.tpl','readFile','name','开始处理模板内容替换','toISOString','mkdir','toLowerCase','replaceApiContent','replace','LOVRABET','error','slice','179530BtyeWe','promises','6362aGUXql','name:\x20\x22','processDirectory','utf8','datasetCode','9735033tGfhzJ','117WHzDBV','replaceContent','25796ZhKpgV','datasetCode:\x20\x22','readdir','join','split','getMonth','processFile','5748120eUJOUK','extname','\x20},','alias','245XPgakj','formatLocalTimestamp','copyFile','81WbpJDr','getMinutes','83930XLFDnv','template','message','toComponentName','push','charAt','writeFile','tableName:\x20\x22','includes','584jbVvys','isDirectory','getSeconds','isFile','pad','toUpperCase','toDisplayTitle','getDate','map','success','now','26894WNiysU'];a289_0x501e=function(){return _0xbdb89b;};return a289_0x501e();}const a289_0x4073af=a289_0x1db6;function a289_0x1db6(_0x3db484,_0x5035ce){_0x3db484=_0x3db484-0x64;const _0x501e38=a289_0x501e();let _0x1db6fe=_0x501e38[_0x3db484];return _0x1db6fe;}(function(_0xb8cb27,_0x1f81af){const _0x2da05b=a289_0x1db6,_0x1dec57=_0xb8cb27();while(!![]){try{const _0x4794c5=parseInt(_0x2da05b(0x73))/0x1+-parseInt(_0x2da05b(0x75))/0x2*(-parseInt(_0x2da05b(0x7b))/0x3)+parseInt(_0x2da05b(0x7d))/0x4*(parseInt(_0x2da05b(0x88))/0x5)+-parseInt(_0x2da05b(0x84))/0x6+parseInt(_0x2da05b(0xa1))/0x7*(parseInt(_0x2da05b(0x96))/0x8)+-parseInt(_0x2da05b(0x8b))/0x9*(parseInt(_0x2da05b(0x8d))/0xa)+parseInt(_0x2da05b(0x7a))/0xb;if(_0x4794c5===_0x1f81af)break;else _0x1dec57['push'](_0x1dec57['shift']());}catch(_0x505101){_0x1dec57['push'](_0x1dec57['shift']());}}}(a289_0x501e,0xb778e));import a289_0x4c604d from'node:fs';import a289_0x48601f from'node:path';import{logger}from'../utils/logger.js';import{getCliVersion}from'../utils/version.js';const CLI_VERSION=getCliVersion();export class TemplateReplacer{static['pad'](_0x441064){return String(_0x441064)['padStart'](0x2,'0');}static[a289_0x4073af(0x89)](_0xd8e7e2){const _0x2330f6=a289_0x4073af,_0x3fa98e=_0xd8e7e2['getFullYear'](),_0x4ee0cd=this['pad'](_0xd8e7e2[_0x2330f6(0x82)]()+0x1),_0x1e34a4=this[_0x2330f6(0x9a)](_0xd8e7e2[_0x2330f6(0x9d)]()),_0x4e252d=this[_0x2330f6(0x9a)](_0xd8e7e2[_0x2330f6(0xa6)]()),_0x5d9a6d=this[_0x2330f6(0x9a)](_0xd8e7e2[_0x2330f6(0x8c)]()),_0x318a1d=this['pad'](_0xd8e7e2[_0x2330f6(0x98)]());return{'createdAt':_0x3fa98e+'-'+_0x4ee0cd+'-'+_0x1e34a4+'\x20'+_0x4e252d+':'+_0x5d9a6d+':'+_0x318a1d,'createdDate':_0x3fa98e+'-'+_0x4ee0cd+'-'+_0x1e34a4,'createdTime':_0x4e252d+':'+_0x5d9a6d+':'+_0x318a1d};}static[a289_0x4073af(0x90)](_0x4d4305){const _0x3901ea=a289_0x4073af,_0x13b411=_0x4d4305[_0x3901ea(0x81)]('/')[_0x3901ea(0xaa)]()||_0x4d4305;return _0x13b411[_0x3901ea(0x81)]('-')[_0x3901ea(0x9e)](_0x234d82=>_0x234d82[_0x3901ea(0x92)](0x0)['toUpperCase']()+_0x234d82[_0x3901ea(0x72)](0x1)[_0x3901ea(0x6d)]())['join']('');}static[a289_0x4073af(0x9c)](_0x5000d2){const _0x209b20=a289_0x4073af,_0x2b6ac8=_0x5000d2[_0x209b20(0x81)]('/')['pop']()||_0x5000d2;return _0x2b6ac8[_0x209b20(0x81)]('-')[_0x209b20(0x9e)](_0x149ee8=>_0x149ee8['charAt'](0x0)[_0x209b20(0x9b)]()+_0x149ee8[_0x209b20(0x72)](0x1)[_0x209b20(0x6d)]())['join']('\x20');}static[a289_0x4073af(0x7c)](_0xcbd11a,_0x519334,_0x5da7cd){const _0x2832fe=a289_0x4073af,_0x32407f=this[_0x2832fe(0x90)](_0x519334),_0x427130=this[_0x2832fe(0x9c)](_0x519334),{createdAt:_0x1dd93f,createdDate:_0xcca67f,createdTime:_0x2e180a}=this[_0x2832fe(0x89)](new Date());let _0x339013=_0xcbd11a[_0x2832fe(0x6f)](/\{CliVersion\}/g,CLI_VERSION)[_0x2832fe(0x6f)](/\{ComponentName\}/g,_0x32407f)[_0x2832fe(0x6f)](/\{DisplayTitle\}/g,_0x427130)[_0x2832fe(0x6f)](/\{PageName\}/g,_0x519334)[_0x2832fe(0x6f)](/\{TemplateName\}/g,_0x5da7cd)[_0x2832fe(0x6f)](/\{CreatedAt\}/g,_0x1dd93f)[_0x2832fe(0x6f)](/\{CreatedDate\}/g,_0xcca67f)[_0x2832fe(0x6f)](/\{CreatedTime\}/g,_0x2e180a);return _0x339013;}static[a289_0x4073af(0x6e)](_0x27dddb,_0x26d973,_0xb7d745,_0x5647b2,_0x14508e,_0x4dfad6,_0x22b332,_0xf0be78){const _0x597afb=a289_0x4073af,_0x262dee=new Date(),_0x15f912=_0x262dee[_0x597afb(0x6b)](),_0xbf387a=_0xb7d745[_0x597afb(0x9e)](_0x9e54aa=>{const _0x420e69=_0x597afb,_0x12ea0f=[_0x420e69(0x7e)+_0x9e54aa[_0x420e69(0x79)]+'\x22',_0x420e69(0x94)+_0x9e54aa['tableName']+'\x22',_0x420e69(0x76)+_0x9e54aa['name']+'\x22'];return _0x9e54aa[_0x420e69(0x87)]&&_0x12ea0f[_0x420e69(0x91)]('alias:\x20\x22'+_0x9e54aa['alias']+'\x22'),'\x0a\x20\x20\x20\x20{\x20'+_0x12ea0f[_0x420e69(0x80)](',\x20')+_0x420e69(0x86);})['join'](''),_0x4e6ed3=_0x5647b2||_0xb7d745[0x0]?.[_0x597afb(0x87)]||_0x597afb(0xa8);let _0x296355=_0x27dddb['replace'](/\{AppCode\}/g,_0x26d973)[_0x597afb(0x6f)](/\{ModelConfigs\}/g,_0xbf387a)[_0x597afb(0x6f)](/\{ExampleModelName\}/g,_0x4e6ed3)[_0x597afb(0x6f)](/\{ApiFileName\}/g,_0x14508e||_0x597afb(0xa4))[_0x597afb(0x6f)](/\{ConfigName\}/g,_0x4dfad6||_0x597afb(0xa7))[_0x597afb(0x6f)](/\{ClientConfigParam\}/g,_0x22b332||'')[_0x597afb(0x6f)](/\{VarPrefix\}/g,_0xf0be78||_0x597afb(0x70))[_0x597afb(0x6f)](/\{CreatedAt\}/g,_0x15f912);return _0x296355;}static async['processTemplate'](_0x182ee6,_0xf333d9,_0x55c1bc,_0xa5e859,_0x44368a=!![]){const _0x465dd1=a289_0x4073af,_0x124c5d=Date[_0x465dd1(0xa0)]();try{_0x44368a&&logger['info'](_0x465dd1(0x8e),_0x465dd1(0x6a),{'templatePath':_0x182ee6,'targetPath':_0xf333d9,'pageName':_0x55c1bc,'templateName':_0xa5e859});await a289_0x4c604d[_0x465dd1(0x74)][_0x465dd1(0x6c)](_0xf333d9,{'recursive':!![]}),await this[_0x465dd1(0x77)](_0x182ee6,_0xf333d9,_0x55c1bc,_0xa5e859);if(_0x44368a){const _0x4a63b4=Date['now']()-_0x124c5d;logger[_0x465dd1(0x9f)](_0x465dd1(0x8e),'模板内容替换完成',_0x4a63b4,{'pageName':_0x55c1bc,'templateName':_0xa5e859});}}catch(_0x2e96b6){if(_0x44368a){const _0x8ee1dc=Date['now']()-_0x124c5d;logger[_0x465dd1(0x71)]('template',_0x465dd1(0x65),{'templatePath':_0x182ee6,'targetPath':_0xf333d9,'pageName':_0x55c1bc,'templateName':_0xa5e859,'error':_0x2e96b6 instanceof Error?_0x2e96b6[_0x465dd1(0x8f)]:String(_0x2e96b6),'duration':_0x8ee1dc});}throw _0x2e96b6;}}static async['processDirectory'](_0x3e2173,_0x55f74b,_0x55df7,_0x120829){const _0x121cd4=a289_0x4073af,_0x4bf5f3=await a289_0x4c604d[_0x121cd4(0x74)][_0x121cd4(0x7f)](_0x3e2173,{'withFileTypes':!![]});for(const _0x177a19 of _0x4bf5f3){const _0x262221=a289_0x48601f[_0x121cd4(0x80)](_0x3e2173,_0x177a19[_0x121cd4(0x69)]);let _0x23327a=a289_0x48601f[_0x121cd4(0x80)](_0x55f74b,_0x177a19[_0x121cd4(0x69)]);_0x177a19[_0x121cd4(0x69)][_0x121cd4(0xa2)]('.tpl')&&(_0x23327a=a289_0x48601f[_0x121cd4(0x80)](_0x55f74b,_0x177a19[_0x121cd4(0x69)][_0x121cd4(0x6f)](/\.tpl$/,'')));if(_0x177a19[_0x121cd4(0x97)]())await a289_0x4c604d['promises'][_0x121cd4(0x6c)](_0x23327a,{'recursive':!![]}),await this['processDirectory'](_0x262221,_0x23327a,_0x55df7,_0x120829);else _0x177a19[_0x121cd4(0x99)]()&&await this[_0x121cd4(0x83)](_0x262221,_0x23327a,_0x55df7,_0x120829);}}static async[a289_0x4073af(0x83)](_0x403af9,_0x22c8e5,_0x454c52,_0x5b64eb){const _0x4e9650=a289_0x4073af,_0x41e5d8=a289_0x48601f[_0x4e9650(0x85)](_0x403af9)[_0x4e9650(0x6d)]();_0x403af9['endsWith'](_0x4e9650(0x67))&&(_0x22c8e5=_0x22c8e5['replace'](/\.tpl$/,''));const _0xa66f4b=['.tsx',_0x4e9650(0xa3),_0x4e9650(0xa5),_0x4e9650(0x66),'.json',_0x4e9650(0xa9),'.css',_0x4e9650(0x64),_0x4e9650(0x67)];if(_0xa66f4b[_0x4e9650(0x95)](_0x41e5d8)||_0x403af9[_0x4e9650(0xa2)](_0x4e9650(0x67))){const _0x477d7c=await a289_0x4c604d[_0x4e9650(0x74)][_0x4e9650(0x68)](_0x403af9,_0x4e9650(0x78)),_0x4397a9=this[_0x4e9650(0x7c)](_0x477d7c,_0x454c52,_0x5b64eb);await a289_0x4c604d['promises'][_0x4e9650(0x93)](_0x22c8e5,_0x4397a9,_0x4e9650(0x78));}else await a289_0x4c604d[_0x4e9650(0x74)][_0x4e9650(0x8a)](_0x403af9,_0x22c8e5);}}
@@ -1 +1 @@
1
- (function(_0x107409,_0x1d40dc){const _0x2ef64e=a290_0x53a3,_0x44a63d=_0x107409();while(!![]){try{const _0x218f29=-parseInt(_0x2ef64e(0x1f8))/0x1*(parseInt(_0x2ef64e(0x208))/0x2)+parseInt(_0x2ef64e(0x1fc))/0x3+-parseInt(_0x2ef64e(0x203))/0x4+parseInt(_0x2ef64e(0x20f))/0x5*(parseInt(_0x2ef64e(0x1fb))/0x6)+parseInt(_0x2ef64e(0x200))/0x7+-parseInt(_0x2ef64e(0x20d))/0x8+parseInt(_0x2ef64e(0x204))/0x9;if(_0x218f29===_0x1d40dc)break;else _0x44a63d['push'](_0x44a63d['shift']());}catch(_0x509e66){_0x44a63d['push'](_0x44a63d['shift']());}}}(a290_0x59e0,0x60b5c));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,join}from'node:path';import a290_0x17950e from'semver';import{CLI_BIN_NAME,NPM_PACKAGE_NAME}from'../constant/cli.js';import{getCliVersionPolicy}from'../utils/cli-version-policy.js';import{getCliVersion}from'../utils/version.js';const UPDATE_CHECK_TTL_MS=0xc*0x3c*0x3c*0x3e8,UPDATE_NOTICE_TTL_MS=0x18*0x3c*0x3c*0x3e8;function isUpdateNoticeDisabled(){const _0xdbf91d=a290_0x53a3,_0xefae71=process.env.RABETBASE_NO_UPDATE_NOTICE?.['trim']()[_0xdbf91d(0x1f5)]();return _0xefae71==='1'||_0xefae71===_0xdbf91d(0x210)||_0xefae71===_0xdbf91d(0x207);}function a290_0x59e0(){const _0xb70ad2=['13ppVapR','\x20available,\x20current\x20','\x20update','6kGseXN','967443cEdqGU','rabetbase-cli','valid','update-check.json','3175494AmAIIx',',\x20run:\x20','now','1826436XJzKdh','6633306qEvoDs','trim','/v/','yes','120374ZVvLXQ','stringify','object','stableVersion','checkedAt','5354000iiknco','gte','3956285MQYcLv','true','https://www.npmjs.com/package/','utf8','number','toLowerCase','latest','.cache'];a290_0x59e0=function(){return _0xb70ad2;};return a290_0x59e0();}function cacheRoot(){const _0x1a3c71=a290_0x53a3;return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),_0x1a3c71(0x1f7));}export function getUpdateNoticeCachePath(){const _0x1b0119=a290_0x53a3;return join(cacheRoot(),_0x1b0119(0x1fd),_0x1b0119(0x1ff));}async function readUpdateNoticeCache(){const _0x1c22a1=a290_0x53a3;try{const _0x245005=await readFile(getUpdateNoticeCachePath(),_0x1c22a1(0x212)),_0x2d3c0f=JSON['parse'](_0x245005);if(!_0x2d3c0f||typeof _0x2d3c0f!==_0x1c22a1(0x20a))return{};return _0x2d3c0f;}catch{return{};}}async function writeUpdateNoticeCache(_0xab0d86){const _0x465656=a290_0x53a3;try{const _0x479197=getUpdateNoticeCachePath();await mkdir(dirname(_0x479197),{'recursive':!![]}),await writeFile(_0x479197,JSON[_0x465656(0x209)](_0xab0d86,null,0x2)+'\x0a',_0x465656(0x212));}catch{}}function a290_0x53a3(_0x49bf64,_0x2e9b46){_0x49bf64=_0x49bf64-0x1f4;const _0x59e032=a290_0x59e0();let _0x53a39d=_0x59e032[_0x49bf64];return _0x53a39d;}function isFreshCheck(_0x44fbb3,_0x4fc882){const _0x3ee912=a290_0x53a3;return typeof _0x44fbb3['checkedAt']===_0x3ee912(0x1f4)&&_0x4fc882-_0x44fbb3[_0x3ee912(0x20c)]<UPDATE_CHECK_TTL_MS;}function isRecentlyNotified(_0x40fb6c,_0xea2149,_0x30169c){const _0x2aef0a=a290_0x53a3;return _0x40fb6c['lastNotifiedVersion']===_0xea2149&&typeof _0x40fb6c['lastNotifiedAt']===_0x2aef0a(0x1f4)&&_0x30169c-_0x40fb6c['lastNotifiedAt']<UPDATE_NOTICE_TTL_MS;}export function buildNpmVersionUrl(_0x1457e8){const _0x794cf1=a290_0x53a3;return _0x794cf1(0x211)+NPM_PACKAGE_NAME+_0x794cf1(0x206)+_0x1457e8;}export async function resolveLatestUpdateNotice(){const _0x535910=a290_0x53a3;if(isUpdateNoticeDisabled())return null;try{const _0x59f028=Date[_0x535910(0x202)](),_0x1d5e99=getCliVersion(),_0x4acab6=await readUpdateNoticeCache();let _0x74be8=isFreshCheck(_0x4acab6,_0x59f028)?_0x4acab6[_0x535910(0x1f6)]?.[_0x535910(0x205)]():undefined;if(!_0x74be8&&!isFreshCheck(_0x4acab6,_0x59f028)){const _0x4ca10f=await getCliVersionPolicy();_0x74be8=_0x4ca10f?.[_0x535910(0x20b)]?.['trim']()||undefined,await writeUpdateNoticeCache({..._0x4acab6,'checkedAt':_0x59f028,'latest':_0x74be8,'failed':!_0x74be8});}if(!_0x74be8||!a290_0x17950e['valid'](_0x1d5e99)||!a290_0x17950e[_0x535910(0x1fe)](_0x74be8))return null;if(a290_0x17950e[_0x535910(0x20e)](_0x1d5e99,_0x74be8))return null;if(isRecentlyNotified(_0x4acab6,_0x74be8,_0x59f028))return null;const _0x444a21=CLI_BIN_NAME+_0x535910(0x1fa);return await writeUpdateNoticeCache({..._0x4acab6,'checkedAt':isFreshCheck(_0x4acab6,_0x59f028)?_0x4acab6[_0x535910(0x20c)]:_0x59f028,'latest':_0x74be8,'failed':![],'lastNotifiedVersion':_0x74be8,'lastNotifiedAt':_0x59f028}),{'command':_0x444a21,'current':_0x1d5e99,'latest':_0x74be8,'url':buildNpmVersionUrl(_0x74be8),'message':CLI_BIN_NAME+'\x20'+_0x74be8+_0x535910(0x1f9)+_0x1d5e99+_0x535910(0x201)+_0x444a21};}catch{return null;}}
1
+ (function(_0x40cd7,_0x4471cf){const _0x159899=a290_0x57d4,_0x50dbb1=_0x40cd7();while(!![]){try{const _0x34a097=-parseInt(_0x159899(0x1d6))/0x1*(-parseInt(_0x159899(0x1cd))/0x2)+-parseInt(_0x159899(0x1ce))/0x3+-parseInt(_0x159899(0x1cc))/0x4*(parseInt(_0x159899(0x1d0))/0x5)+-parseInt(_0x159899(0x1d4))/0x6+-parseInt(_0x159899(0x1d7))/0x7+parseInt(_0x159899(0x1cb))/0x8*(-parseInt(_0x159899(0x1d5))/0x9)+parseInt(_0x159899(0x1e5))/0xa;if(_0x34a097===_0x4471cf)break;else _0x50dbb1['push'](_0x50dbb1['shift']());}catch(_0x4a1b7b){_0x50dbb1['push'](_0x50dbb1['shift']());}}}(a290_0x1975,0x91a76));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,join}from'node:path';import a290_0x5e8e05 from'semver';import{CLI_BIN_NAME,NPM_PACKAGE_NAME}from'../constant/cli.js';import{getCliVersionPolicy}from'../utils/cli-version-policy.js';import{getCliVersion}from'../utils/version.js';const UPDATE_CHECK_TTL_MS=0xc*0x3c*0x3c*0x3e8,UPDATE_NOTICE_TTL_MS=0x18*0x3c*0x3c*0x3e8;function isUpdateNoticeDisabled(){const _0x593997=a290_0x57d4,_0x571532=process.env.RABETBASE_NO_UPDATE_NOTICE?.[_0x593997(0x1e0)]()[_0x593997(0x1d8)]();return _0x571532==='1'||_0x571532==='true'||_0x571532===_0x593997(0x1e2);}function cacheRoot(){const _0x1c9149=a290_0x57d4;return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),_0x1c9149(0x1d9));}export function getUpdateNoticeCachePath(){const _0x3fd1b4=a290_0x57d4;return join(cacheRoot(),_0x3fd1b4(0x1d3),_0x3fd1b4(0x1e1));}function a290_0x57d4(_0x11756c,_0x4e6abd){_0x11756c=_0x11756c-0x1c9;const _0x19751f=a290_0x1975();let _0x57d499=_0x19751f[_0x11756c];return _0x57d499;}async function readUpdateNoticeCache(){const _0x401543=a290_0x57d4;try{const _0x5de0af=await readFile(getUpdateNoticeCachePath(),'utf8'),_0x1fbb9d=JSON[_0x401543(0x1e4)](_0x5de0af);if(!_0x1fbb9d||typeof _0x1fbb9d!==_0x401543(0x1cf))return{};return _0x1fbb9d;}catch{return{};}}function a290_0x1975(){const _0x353e94=['32SBFiCW','4vSugHu','943332NLlZmr','2795625unSnic','object','583735dzHrXo',',\x20run:\x20','stringify','rabetbase-cli','1556964mhmYCB','146484kfqYlE','2EuAPMi','7810684JBqSWh','toLowerCase','.cache','\x20update','utf8','now','checkedAt','\x20available,\x20current\x20','https://www.npmjs.com/package/','trim','update-check.json','yes','number','parse','21422980HemWyA','lastNotifiedAt','valid','latest'];a290_0x1975=function(){return _0x353e94;};return a290_0x1975();}async function writeUpdateNoticeCache(_0x1ce6e1){const _0x1427e1=a290_0x57d4;try{const _0x5d3c25=getUpdateNoticeCachePath();await mkdir(dirname(_0x5d3c25),{'recursive':!![]}),await writeFile(_0x5d3c25,JSON[_0x1427e1(0x1d2)](_0x1ce6e1,null,0x2)+'\x0a',_0x1427e1(0x1db));}catch{}}function isFreshCheck(_0x247bf5,_0x2b7508){const _0x27fa45=a290_0x57d4;return typeof _0x247bf5[_0x27fa45(0x1dd)]===_0x27fa45(0x1e3)&&_0x2b7508-_0x247bf5[_0x27fa45(0x1dd)]<UPDATE_CHECK_TTL_MS;}function isRecentlyNotified(_0x545c96,_0x555502,_0x1523fb){const _0x903fcd=a290_0x57d4;return _0x545c96['lastNotifiedVersion']===_0x555502&&typeof _0x545c96[_0x903fcd(0x1e6)]===_0x903fcd(0x1e3)&&_0x1523fb-_0x545c96['lastNotifiedAt']<UPDATE_NOTICE_TTL_MS;}export function buildNpmVersionUrl(_0x3c7d60){const _0x5f52de=a290_0x57d4;return _0x5f52de(0x1df)+NPM_PACKAGE_NAME+'/v/'+_0x3c7d60;}export async function resolveLatestUpdateNotice(){const _0x18fad2=a290_0x57d4;if(isUpdateNoticeDisabled())return null;try{const _0x1bf761=Date[_0x18fad2(0x1dc)](),_0x2227fe=getCliVersion(),_0x28fe14=await readUpdateNoticeCache();let _0x38883c=isFreshCheck(_0x28fe14,_0x1bf761)?_0x28fe14[_0x18fad2(0x1ca)]?.[_0x18fad2(0x1e0)]():undefined;if(!_0x38883c&&!isFreshCheck(_0x28fe14,_0x1bf761)){const _0x5a58ac=await getCliVersionPolicy();_0x38883c=_0x5a58ac?.['stableVersion']?.[_0x18fad2(0x1e0)]()||undefined,await writeUpdateNoticeCache({..._0x28fe14,'checkedAt':_0x1bf761,'latest':_0x38883c,'failed':!_0x38883c});}if(!_0x38883c||!a290_0x5e8e05[_0x18fad2(0x1c9)](_0x2227fe)||!a290_0x5e8e05['valid'](_0x38883c))return null;if(a290_0x5e8e05['gte'](_0x2227fe,_0x38883c))return null;if(isRecentlyNotified(_0x28fe14,_0x38883c,_0x1bf761))return null;const _0x2cc96e=CLI_BIN_NAME+_0x18fad2(0x1da);return await writeUpdateNoticeCache({..._0x28fe14,'checkedAt':isFreshCheck(_0x28fe14,_0x1bf761)?_0x28fe14[_0x18fad2(0x1dd)]:_0x1bf761,'latest':_0x38883c,'failed':![],'lastNotifiedVersion':_0x38883c,'lastNotifiedAt':_0x1bf761}),{'command':_0x2cc96e,'current':_0x2227fe,'latest':_0x38883c,'url':buildNpmVersionUrl(_0x38883c),'message':CLI_BIN_NAME+'\x20'+_0x38883c+_0x18fad2(0x1de)+_0x2227fe+_0x18fad2(0x1d1)+_0x2cc96e};}catch{return null;}}
@@ -1 +1 @@
1
- (function(_0x3f961f,_0x38ce36){var _0xa5c188=a291_0x4622,_0x13c600=_0x3f961f();while(!![]){try{var _0x18516c=parseInt(_0xa5c188(0x155))/0x1*(-parseInt(_0xa5c188(0x15e))/0x2)+-parseInt(_0xa5c188(0x158))/0x3*(parseInt(_0xa5c188(0x15c))/0x4)+parseInt(_0xa5c188(0x159))/0x5*(-parseInt(_0xa5c188(0x156))/0x6)+-parseInt(_0xa5c188(0x15a))/0x7+-parseInt(_0xa5c188(0x157))/0x8+-parseInt(_0xa5c188(0x15f))/0x9*(parseInt(_0xa5c188(0x15b))/0xa)+parseInt(_0xa5c188(0x15d))/0xb;if(_0x18516c===_0x38ce36)break;else _0x13c600['push'](_0x13c600['shift']());}catch(_0x1d005d){_0x13c600['push'](_0x13c600['shift']());}}}(a291_0x4120,0x850cc));function a291_0x4622(_0xbeff97,_0x3feee7){_0xbeff97=_0xbeff97-0x155;var _0x4120b3=a291_0x4120();var _0x462244=_0x4120b3[_0xbeff97];return _0x462244;}import{VERSION}from'../generated/build-info.js';export function getCliVersion(){return VERSION;}function a291_0x4120(){var _0x4dbb81=['4jOJTHU','36111900GYeFMr','2uRcCrS','108dkogAf','564797HfoYFQ','57630ZZkDEc','1210568bHShTa','261255yDrkuJ','125pCMJPV','6835304JDhXCT','598440OspYjM'];a291_0x4120=function(){return _0x4dbb81;};return a291_0x4120();}
1
+ (function(_0x43dfaa,_0x2f5a31){var _0x92151d=a291_0x2bcf,_0x2d1d43=_0x43dfaa();while(!![]){try{var _0x5c23cf=parseInt(_0x92151d(0xa0))/0x1*(parseInt(_0x92151d(0xa6))/0x2)+parseInt(_0x92151d(0xa7))/0x3+parseInt(_0x92151d(0xa1))/0x4*(-parseInt(_0x92151d(0xaa))/0x5)+-parseInt(_0x92151d(0xa9))/0x6*(parseInt(_0x92151d(0xa2))/0x7)+parseInt(_0x92151d(0xa5))/0x8*(parseInt(_0x92151d(0xa3))/0x9)+-parseInt(_0x92151d(0xab))/0xa*(-parseInt(_0x92151d(0xa8))/0xb)+parseInt(_0x92151d(0xac))/0xc*(-parseInt(_0x92151d(0xa4))/0xd);if(_0x5c23cf===_0x2f5a31)break;else _0x2d1d43['push'](_0x2d1d43['shift']());}catch(_0x59e215){_0x2d1d43['push'](_0x2d1d43['shift']());}}}(a291_0x57b5,0x4b8d4));import{VERSION}from'../generated/build-info.js';function a291_0x2bcf(_0x5140e6,_0x14f16a){_0x5140e6=_0x5140e6-0xa0;var _0x57b59e=a291_0x57b5();var _0x2bcfe3=_0x57b59e[_0x5140e6];return _0x2bcfe3;}function a291_0x57b5(){var _0x4a63f3=['54006Evthes','1788834YIoXuR','891LRqagC','1840302qqigek','363790eamZuL','25430KkCpQf','6420blmkfd','19NkLRgh','20sSVgNe','7bqkGZr','18QeFmfU','16315omNaYM','1344296uPHykS'];a291_0x57b5=function(){return _0x4a63f3;};return a291_0x57b5();}export function getCliVersion(){return VERSION;}
@@ -1 +1 @@
1
- (function(_0xaa88c4,_0x56bc62){var _0x75ad04=a292_0x3821,_0x1ae783=_0xaa88c4();while(!![]){try{var _0x41ff88=-parseInt(_0x75ad04(0xe3))/0x1+parseInt(_0x75ad04(0xdf))/0x2+parseInt(_0x75ad04(0xe2))/0x3*(-parseInt(_0x75ad04(0xe1))/0x4)+-parseInt(_0x75ad04(0xdc))/0x5+parseInt(_0x75ad04(0xde))/0x6*(-parseInt(_0x75ad04(0xe0))/0x7)+-parseInt(_0x75ad04(0xe4))/0x8+parseInt(_0x75ad04(0xdd))/0x9;if(_0x41ff88===_0x56bc62)break;else _0x1ae783['push'](_0x1ae783['shift']());}catch(_0x2e5c5a){_0x1ae783['push'](_0x1ae783['shift']());}}}(a292_0x3296,0x72a29));import{setActiveCookie,clearActiveCookie}from'../core/api-client.js';export async function withActiveCookie(_0xf5a5ec,_0x5efe63){setActiveCookie(_0xf5a5ec);try{return await _0x5efe63();}finally{clearActiveCookie();}}function a292_0x3821(_0x5e1c57,_0x20a0dc){_0x5e1c57=_0x5e1c57-0xdc;var _0x329665=a292_0x3296();var _0x3821ae=_0x329665[_0x5e1c57];return _0x3821ae;}function a292_0x3296(){var _0x4bf8ff=['2760942bsJGEJ','137110UxVnip','7ZNMlqE','30612sWFnGD','69nmpahy','625972wYTMSR','7362224CwywzS','769590mIsZaG','24636006XfBNDF'];a292_0x3296=function(){return _0x4bf8ff;};return a292_0x3296();}
1
+ (function(_0x1fcc65,_0x38db49){var _0x50a55c=a292_0x2648,_0xc1827c=_0x1fcc65();while(!![]){try{var _0x387deb=-parseInt(_0x50a55c(0xbe))/0x1*(-parseInt(_0x50a55c(0xb8))/0x2)+parseInt(_0x50a55c(0xbb))/0x3*(parseInt(_0x50a55c(0xb7))/0x4)+-parseInt(_0x50a55c(0xbc))/0x5+-parseInt(_0x50a55c(0xbf))/0x6+-parseInt(_0x50a55c(0xb6))/0x7*(-parseInt(_0x50a55c(0xb9))/0x8)+-parseInt(_0x50a55c(0xba))/0x9+-parseInt(_0x50a55c(0xc0))/0xa*(-parseInt(_0x50a55c(0xbd))/0xb);if(_0x387deb===_0x38db49)break;else _0xc1827c['push'](_0xc1827c['shift']());}catch(_0x469c43){_0xc1827c['push'](_0xc1827c['shift']());}}}(a292_0x40db,0x66e66));import{setActiveCookie,clearActiveCookie}from'../core/api-client.js';function a292_0x40db(){var _0x7f1548=['2274825zjkvtV','224776mYsgkn','2GWVQCx','8fjNgIX','4473963SgeOtR','27iyRrVZ','2382530KgxoZP','1612886RDBFCg','8633BsQjGR','2823870zzayLy','70oAMpzi'];a292_0x40db=function(){return _0x7f1548;};return a292_0x40db();}function a292_0x2648(_0x3beaf9,_0x5335a6){_0x3beaf9=_0x3beaf9-0xb6;var _0x40db2e=a292_0x40db();var _0x264878=_0x40db2e[_0x3beaf9];return _0x264878;}export async function withActiveCookie(_0x57cc9a,_0x379f89){setActiveCookie(_0x57cc9a);try{return await _0x379f89();}finally{clearActiveCookie();}}
@@ -1 +1 @@
1
- (function(_0x5c78d0,_0x4d52de){var _0xe557c4=a293_0x2b01,_0x2abf17=_0x5c78d0();while(!![]){try{var _0xfcdebf=-parseInt(_0xe557c4(0xf1))/0x1*(parseInt(_0xe557c4(0xed))/0x2)+parseInt(_0xe557c4(0xf0))/0x3+-parseInt(_0xe557c4(0xea))/0x4*(parseInt(_0xe557c4(0xef))/0x5)+-parseInt(_0xe557c4(0xee))/0x6*(-parseInt(_0xe557c4(0xf2))/0x7)+parseInt(_0xe557c4(0xeb))/0x8*(parseInt(_0xe557c4(0xf5))/0x9)+-parseInt(_0xe557c4(0xe8))/0xa+-parseInt(_0xe557c4(0xec))/0xb*(-parseInt(_0xe557c4(0xf4))/0xc);if(_0xfcdebf===_0x4d52de)break;else _0x2abf17['push'](_0x2abf17['shift']());}catch(_0x2397f5){_0x2abf17['push'](_0x2abf17['shift']());}}}(a293_0x58af,0xbad38));export function writeCliSideChannelLine(_0x45319e){var _0x4c943f=a293_0x2b01;process[_0x4c943f(0xe9)][_0x4c943f(0xf3)](_0x45319e+'\x0a');}function a293_0x2b01(_0x530b64,_0xe6d663){_0x530b64=_0x530b64-0xe8;var _0x58af09=a293_0x58af();var _0x2b0120=_0x58af09[_0x530b64];return _0x2b0120;}function a293_0x58af(){var _0x47a2c5=['59980xNRsoj','7NYqBVu','write','23954652IJTKqR','202266FPywSS','6500650HBrAXD','stderr','18472dYQsLG','376oehQQI','11bjCPqe','34EDctHD','3911994WVpbhm','1585JVqLRs','583119NXzMlc'];a293_0x58af=function(){return _0x47a2c5;};return a293_0x58af();}
1
+ (function(_0x4c5d48,_0x4168f1){var _0x140799=a293_0x14fd,_0x39b926=_0x4c5d48();while(!![]){try{var _0xd25de7=parseInt(_0x140799(0xaa))/0x1*(parseInt(_0x140799(0xa7))/0x2)+parseInt(_0x140799(0xac))/0x3+-parseInt(_0x140799(0xae))/0x4+parseInt(_0x140799(0xaf))/0x5+-parseInt(_0x140799(0xb0))/0x6+-parseInt(_0x140799(0xab))/0x7*(parseInt(_0x140799(0xa9))/0x8)+parseInt(_0x140799(0xa6))/0x9*(parseInt(_0x140799(0xa8))/0xa);if(_0xd25de7===_0x4168f1)break;else _0x39b926['push'](_0x39b926['shift']());}catch(_0x70e477){_0x39b926['push'](_0x39b926['shift']());}}}(a293_0x1385,0x8bbf0));function a293_0x14fd(_0x5d9e63,_0x3ea059){_0x5d9e63=_0x5d9e63-0xa6;var _0x1385f3=a293_0x1385();var _0x14fda3=_0x1385f3[_0x5d9e63];return _0x14fda3;}function a293_0x1385(){var _0x3f65bb=['4185981iHGqRR','823114danNUI','10dDhwYH','8FOzizo','1iBKEqr','9072FsJnUH','2482248uPvAKi','write','3610400adPcEg','3242905jDqBNC','5258202DEuqUR'];a293_0x1385=function(){return _0x3f65bb;};return a293_0x1385();}export function writeCliSideChannelLine(_0xfffbb8){var _0x4e35c2=a293_0x14fd;process['stderr'][_0x4e35c2(0xad)](_0xfffbb8+'\x0a');}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lovrabet/rabetbase-cli",
3
- "version": "2.4.5",
3
+ "version": "2.4.6-beta.1",
4
4
  "description": "Developer CLI for Lovrabet apps, datasets, pages, SQL, BFF, database connections, skills, and AI agent workflows.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "keywords": [
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: rabetbase
3
- version: 2.4.5
4
- description: "Lovrabet 开发工作流 CLI — 通过 rabetbase 命令管理数据集、数据库连接(dblink)、智能列表页(Smart List Page)、React 自定义页面(JSX 页面)、SQL 查询、BFF 脚本、通知配置、菜单事实读取与同步、开发角色与协作者、应用文件、OCR 识别、代码生成,以及平台问题上报。触发词:数据集、数据表、dataset relation-audit、dataset delete、dataset restore、废弃数据集、恢复数据集、dataset rename、dataset field-update、dataset extend-update、dataset business-groups、dataset business-group-update、businessGroup、字段对象更新、doType、options、智能列表页、Smart List Page、React 自定义页面、JSX 页面、page react-create、page react-list、page react-detail、page react-update、page react-publish、page generate-start、page generate-status、page relation-audit、page sync、page pull、page push、page restore、恢复已删除页面、dblink、数据库连接、schema 分析、db list、db detail、db create、db update、db delete、db test、db tables、db diff、db diff --view all、db diff-refresh-start、db diff-refresh-status、db analyze-batch-plan、db analyze-start、analyze-cancel、analyze-status、traceId、自定义 SQL、sql.execute、bff.execute、BF 消息通知、BFF 消息通知、Backend Function 消息通知、notification config-list、EMAIL configCode、通知配置、notification.send、get_dataset_detail、validate_sql_content、save_or_update_custom_sql、@lovrabet/sdk、lovrabet 开发、rabetbase、filter、codegen、init、appcode、app list、app members-list、tenant members-list、应用人员列表、租户人员列表、workspace、workspace init、workspace use、workspace add、workspace remove、多应用、默认应用、menu list、menu external-link-create、menu external-link-update、menu rename、菜单改名、外链菜单创建、外链 URL 更新、菜单异常审计、菜单手动删除清单、menu sync、menu asset-update、菜单资源更新、menu move、菜单移动、开发角色、开发协作者、role、role list、role user-add、role user-remove、user-resolve、加入开发者、ADMIN、DEV、OWNER、CUSTOM、project create、project upgrade、schema、jq、compress、file upload、file query-url、ocr recognize、文件上传、OCR 识别、发票识别、图片识别、长期链接、issue report、平台问题、platform issue、问题上报、user-account dingding-sandbox-bind、钉钉沙箱账号绑定。"
3
+ version: 2.4.6-beta.1
4
+ description: "Lovrabet 开发工作流 CLI — 通过 rabetbase 命令管理数据集、数据库连接(dblink)、数据列表页(Data List Page)、自定义页面(Custom Page)、SQL 查询、BFF 脚本、通知配置、菜单事实读取与同步、开发角色与协作者、应用文件、OCR 识别、代码生成,以及平台问题上报。触发词:数据集、数据表、dataset relation-audit、dataset delete、dataset restore、废弃数据集、恢复数据集、dataset rename、dataset field-update、dataset extend-update、dataset business-groups、dataset business-group-update、businessGroup、字段对象更新、doType、options、数据列表页、Data List Page、自定义页面、Custom Page、page create、page custom-list、page custom-detail、page custom-update、page custom-publish、page generate-start、page generate-status、page relation-audit、page sync、page pull、page push、page restore、恢复已删除页面、dblink、数据库连接、schema 分析、db list、db detail、db create、db update、db delete、db test、db tables、db diff、db diff --view all、db diff-refresh-start、db diff-refresh-status、db analyze-batch-plan、db analyze-start、analyze-cancel、analyze-status、traceId、自定义 SQL、sql.execute、bff.execute、BF 消息通知、BFF 消息通知、Backend Function 消息通知、notification config-list、EMAIL configCode、通知配置、notification.send、get_dataset_detail、validate_sql_content、save_or_update_custom_sql、@lovrabet/sdk、lovrabet 开发、rabetbase、filter、codegen、init、appcode、app list、app members-list、tenant members-list、应用人员列表、租户人员列表、workspace、workspace init、workspace use、workspace add、workspace remove、多应用、默认应用、menu list、menu external-link-create、menu external-link-update、menu rename、菜单改名、外链菜单创建、外链 URL 更新、菜单异常审计、菜单手动删除清单、menu sync、menu asset-update、菜单资源更新、menu move、菜单移动、开发角色、开发协作者、role、role list、role user-add、role user-remove、user-resolve、加入开发者、ADMIN、DEV、OWNER、CUSTOM、project create、project upgrade、schema、jq、compress、file upload、file query-url、ocr recognize、文件上传、OCR 识别、发票识别、图片识别、长期链接、issue report、平台问题、platform issue、问题上报、user-account dingding-sandbox-bind、钉钉沙箱账号绑定。"
5
5
  metadata:
6
6
  requires:
7
7
  bins: ["rabetbase"]
@@ -44,7 +44,7 @@ metadata:
44
44
  - Instant API 标准数据记录操作 → SDK filter/getOne/create/batchCreate/update/delete;批量更新使用 `update({ id: [...] })`,不存在 `batchUpdate()`
45
45
  - 简单聚合且数据集是 DB_TABLE → SDK aggregate;聚合列用 `aggregate[].column`,不要用旧别名 `field`
46
46
  - 复杂 JOIN / 数据库函数且数据集是 DB_TABLE → Custom SQL
47
- - 图表、统计卡片或数据大屏 → React 自定义页面 + ECharts;数据层根据查询复杂度选择 Dataset 或 Custom SQL
47
+ - 图表、统计卡片或数据大屏 → 自定义页面 + ECharts;数据层根据查询复杂度选择 Dataset 或 Custom SQL
48
48
  - 当前用户、角色、数据范围、外部系统、跨表事务或复杂业务编排 → BFF;BFF HOOK 可挂 DB_TABLE 或 METADATA,具体 operation 以后端返回为准
49
49
  2. **先拿元数据,再写代码**
50
50
  - 至少先查 `rabetbase dataset detail --code xxx --format compress`(或 `json`)获取表结构
@@ -68,24 +68,24 @@ metadata:
68
68
  - 创建会发送消息通知的 BFF 时,先读取 [`backend-function.md`](guides/backend-function.md) 的“消息通知扩展”契约,再执行 [`rabetbase notification config-list --type EMAIL`](references/rabetbase-notification-config-list.md) 获取当前应用的 `configCode`;不得猜测渠道、收件人或把密钥写进脚本
69
69
  - 推送完成只代表脚本配置已同步到平台;若用户要确认最终运行效果,显式交接到运行验证(如可用的 `lovrabet bff exec`),不要把运行验证伪装成 `rabetbase` 已完成
70
70
  5. **页面体系选择**
71
- - 智能标准页面(Smart List Page)是内置的基础表单、表格展示和常规数据操作页面,常规数据管理需求优先使用它
72
- - 仅当标准页面无法满足个性化布局、可视化、复杂交互或自定义页面结构时,才使用 React 自定义 JSX 页面
73
- - 图表、统计卡片和数据大屏使用 React 自定义页面与白名单内的 ECharts
74
- - 页面体系不明确时,先向用户确认;不要为同一目标同时创建标准页面与 React 页面
75
- 6. **智能列表页(Smart List Page,page)工作流**
71
+ - 数据列表页(Data List Page)是数据集驱动的结构化页面组,用于数据查看、维护和模型验证,不等同于最终业务工作台
72
+ - 自定义页面(Custom Page)是完整代码文件驱动的独立页面,用于工作台、看板、门户和复杂业务交互;当前 React JSX 只是渲染实现,不是页面产品类型
73
+ - 图表、统计卡片和数据大屏使用自定义页面与白名单内的 ECharts
74
+ - 页面体系不明确时,先向用户确认;不要为同一目标同时创建数据列表页与自定义页面
75
+ 6. **数据列表页(Data List Page,page)工作流**
76
76
  - 工作流判断先看 [`guides/page-development-workflow.md`](guides/page-development-workflow.md)
77
- - `page` 命令职责分离:[`page generate-start`](references/rabetbase-page-generate-start.md) 负责提交或复用任务,[`page generate-status`](references/rabetbase-page-generate-status.md) 负责查询任务状态,[`page standard-page-status`](references/rabetbase-standard-page-status.md) 负责查询智能列表页事实
78
- - 数据集字段变更后同步已有智能列表页:[`page sync`](references/rabetbase-page-sync.md)
77
+ - `page` 命令职责分离:[`page generate-start`](references/rabetbase-page-generate-start.md) 负责提交或复用任务,[`page generate-status`](references/rabetbase-page-generate-status.md) 负责查询任务状态,[`page data-list-status`](references/rabetbase-data-list-status.md) 负责查询数据列表页事实
78
+ - 数据集字段变更后同步已有数据列表页:[`page sync`](references/rabetbase-page-sync.md)
79
79
  - 页面关系绑定审计:先读 [`rabetbase-page-relation-binding.md`](references/rabetbase-page-relation-binding.md),再执行 [`page relation-audit`](references/rabetbase-page-relation-binding.md)
80
- - 遇到“关联数据带不出 / 标准页面没有生成关联关系 / 页面关联绑定异常”类问题,固定顺序是:`dataset relations` 只读确认关系事实 → `dataset relation-audit` 审计关系事实风险 → `page standard-page-status` 判断页面是否存在 → `page relation-audit` 审计页面绑定;若关系事实本身不对,先按 [`dataset relation-create/update/delete`](references/rabetbase-dataset-relation-mutations.md) 做 `--dry-run` 方案并等用户确认;已有页面再 `page sync --dry-run`,无页面走 `page generate-start --dry-run`
81
- - `page sync` 只负责同步已有智能列表页,不是数据集关系修复命令,也不能承诺自动修复所有 `wrong_code` / `wrong_label` / `missing`
80
+ - 遇到“关联数据带不出 / 数据列表页没有生成关联关系 / 页面关联绑定异常”类问题,固定顺序是:`dataset relations` 只读确认关系事实 → `dataset relation-audit` 审计关系事实风险 → `page data-list-status` 判断页面是否存在 → `page relation-audit` 审计页面绑定;若关系事实本身不对,先按 [`dataset relation-create/update/delete`](references/rabetbase-dataset-relation-mutations.md) 做 `--dry-run` 方案并等用户确认;已有页面再 `page sync --dry-run`,无页面走 `page generate-start --dry-run`
81
+ - `page sync` 只负责同步已有数据列表页,不是数据集关系修复命令,也不能承诺自动修复所有 `wrong_code` / `wrong_label` / `missing`
82
82
  - 本地 schema 开发:[`page pull`](references/rabetbase-page-pull.md) → IDE 编辑 → [`page push`](references/rabetbase-page-push.md)
83
- - 恢复已删除 STANDARD/JSX 页面:先读 [`page restore`](references/rabetbase-page-restore.md),默认按 ID 自动识别类型;存在跨类型同 ID 时显式传 `--page-type`
83
+ - 恢复已删除页面:先读 [`page restore`](references/rabetbase-page-restore.md),CLI 产品类型只使用 `DATA_LIST|CUSTOM`;默认按 ID 自动识别,存在跨类型同 ID 时显式传 `--page-type`
84
84
  - 需要理解 formal schema 组件语义时,再按需阅读 `knowledge/page-schema/` 下的 PageSchema 组件资料;不要把它与 `rabetbase page` 命令 reference 混淆
85
- 7. **React 自定义页面工作流**
86
- - React 自定义页面与智能列表页是两类独立页面能力,不混用两类页面的命令
87
- - 创建、修改或发布前,必须先阅读 [`react-custom-page-workflow.md`](guides/react-custom-page-workflow.md),再按其中的编排读取对应原子命令 reference
88
- - 编写 JSX、CSS 或词包前,必须阅读 [`generation-standards.md`](knowledge/react-page/generation-standards.md);选择 UI 组件时阅读 [`components.md`](knowledge/react-page/components.md)
85
+ 7. **自定义页面工作流**
86
+ - 自定义页面与数据列表页是两类独立页面能力,不混用两类页面的命令
87
+ - 创建、修改或发布前,必须先阅读 [`custom-page-workflow.md`](guides/custom-page-workflow.md),再按其中的编排读取对应原子命令 reference
88
+ - 编写 JSX、CSS 或词包前,必须阅读 [`generation-standards.md`](knowledge/custom-page/generation-standards.md);选择 UI 组件时阅读 [`components.md`](knowledge/custom-page/components.md)
89
89
  8. **Legacy modernization / Application Blueprint 工作流**
90
90
  - 当用户要把无人交接老项目、外包接手项目或遗留系统翻新到 Lovrabet 体系时,先阅读 [`guides/legacy-application-blueprint-workflow.md`](guides/legacy-application-blueprint-workflow.md)
91
91
  - 主产物是 `.rabetbase/blueprint/<appCode>/application-blueprint.md`,不是直接生成或推送 SQL/BFF
@@ -258,7 +258,7 @@ if (data.execSuccess && data.execResult) {
258
258
  }
259
259
  ```
260
260
 
261
- React 页面需要图表时,使用 React 自定义页面 + ECharts 呈现;只读查询且平台 `sqlCode` 权限已经满足时可以直接调用上面已发布的 Custom SQL。需要基于当前用户、角色、数据范围或业务规则做额外控制时,页面改调 BFF,由 BFF 完成校验后再执行该 Custom SQL。执行失败时保留并报告原始错误,根据 SQL 资源状态、参数与权限定位问题。
261
+ 自定义页面需要图表时,在其 React JSX 实现中使用 ECharts 呈现;只读查询且平台 `sqlCode` 权限已经满足时可以直接调用上面已发布的 Custom SQL。需要基于当前用户、角色、数据范围或业务规则做额外控制时,页面改调 BFF,由 BFF 完成校验后再执行该 Custom SQL。执行失败时保留并报告原始错误,根据 SQL 资源状态、参数与权限定位问题。
262
262
 
263
263
  ### BFF 调用
264
264
 
@@ -337,20 +337,20 @@ const result = await client.bff.execute<DashboardData>({
337
337
  | 查看数据集关联关系 | [`rabetbase dataset relations`](references/rabetbase-dataset-relations.md) | 标准只读入口,输出 `datasetCode + field` 关系事实;支持 `DB_TABLE -> DB_TABLE`、`DB_TABLE -> METADATA`、`METADATA -> METADATA` |
338
338
  | 审计数据集关联关系 | [`rabetbase dataset relation-audit`](references/rabetbase-dataset-relation-audit.md) | 只读审计关系事实结构错误、风险和人工复核项 |
339
339
  | 管理单条数据集关联关系 | [`rabetbase dataset relation-create/update/delete`](references/rabetbase-dataset-relation-mutations.md) | 单条关系写入;写入前用 `relations` 确认 `datasetCode + field` 关系事实,DB_TABLE 写入所需表名来自显式参数或物理表事实 |
340
- | 首次生成智能列表页 | [`rabetbase page generate-start --datasetcode <code>`](references/rabetbase-page-generate-start.md) | 提交或复用服务端异步任务 |
341
- | 创建 React 自定义页面 | [`rabetbase page react-create --name "客户看板"`](references/rabetbase-page-react-create.md) | 创建初始 JSX/CSS/词包及菜单;先 dry-run |
342
- | 查询 React 自定义页面 | [`rabetbase page react-list`](references/rabetbase-page-react-list.md) | 返回页面 ID、页面名称、`pageUrl`(查看最新保存内容)和 `editPageUrl`(打开编辑器) |
343
- | 查看 React 自定义页面详情 | [`rabetbase page react-detail --id <pageId>`](references/rabetbase-page-react-detail.md) | 查询页面详情,`codeContent` 包含可修改后整体提交的完整页面文件 |
344
- | 更新 React 自定义页面 | [`rabetbase page react-update --id <pageId> --page-content <json>`](references/rabetbase-page-react-update.md) | 保存完整页面文件并创建新版本;先 dry-run |
345
- | 发布 React 自定义页面 | [`rabetbase page react-publish --id <pageId>`](references/rabetbase-page-react-publish.md) | `write`;发布当前保存内容,先 dry-run 并审阅预览 |
346
- | 查询智能列表页生成任务状态 | [`rabetbase page generate-status --datasetcode <code> --operation-id <id>`](references/rabetbase-page-generate-status.md) | 查询 job 状态,支持 `operationId` / `clientOperationId` |
347
- | 查询智能列表页生成任务状态 | [`rabetbase page generate-status --datasetcode <code> --task-id <id>`](references/rabetbase-page-generate-status.md) | 查询 job 状态;taskId 首选,operationId/clientOperationId 兼容。成功后仍读取标准页事实,未知状态不得自动重提 |
348
- | 查询智能列表页事实快照 | [`rabetbase page standard-page-status --datasetcode <code>`](references/rabetbase-standard-page-status.md) | 查询智能列表页四件套、残留页与菜单事实 |
349
- | 审计智能列表页关系绑定 | [`rabetbase page relation-audit --datasetcode <code>`](references/rabetbase-page-relation-binding.md) | 只读检查智能列表页 options 绑定是否匹配 `dataset relations` |
350
- | 同步已有智能列表页 | [`rabetbase page sync --datasetcode <code>`](references/rabetbase-page-sync.md) | 数据集字段变更后同步到关联智能列表页 |
351
- | 拉取智能列表页 schema 到本地 | [`rabetbase page pull --id <pageId>`](references/rabetbase-page-pull.md) | 写入 `.rabetbase/page/<appCode>/`,进入本地编辑工作流 |
352
- | 推送本地智能列表页 schema | [`rabetbase page push --id <pageId>`](references/rabetbase-page-push.md) | 推送后自动回拉 canonical schema 覆盖本地 |
353
- | 恢复已删除页面 | [`rabetbase page restore --id <pageId>`](references/rabetbase-page-restore.md) | 支持 STANDARD/JSX 自动识别;跨类型同 ID 时显式传 `--page-type` |
340
+ | 首次生成数据列表页 | [`rabetbase page generate-start --datasetcode <code>`](references/rabetbase-page-generate-start.md) | 提交或复用服务端异步任务 |
341
+ | 创建自定义页面 | [`rabetbase page create --page-pattern BLANK --name "客户看板"`](references/rabetbase-page-create.md) | 当前只发布 `BLANK` 模式;创建 JSX/CSS/词包及菜单;先 dry-run |
342
+ | 查询自定义页面 | [`rabetbase page custom-list`](references/rabetbase-page-custom-list.md) | 返回页面 ID、页面名称、`pageUrl`(查看最新保存内容)和 `editPageUrl`(打开编辑器) |
343
+ | 查看自定义页面详情 | [`rabetbase page custom-detail --id <pageId>`](references/rabetbase-page-custom-detail.md) | 查询页面详情,`codeContent` 包含可修改后整体提交的完整页面文件 |
344
+ | 更新自定义页面 | [`rabetbase page custom-update --id <pageId> --page-content <json>`](references/rabetbase-page-custom-update.md) | 保存完整页面文件并创建新版本;先 dry-run |
345
+ | 发布自定义页面 | [`rabetbase page custom-publish --id <pageId>`](references/rabetbase-page-custom-publish.md) | `write`;发布当前保存内容,先 dry-run 并审阅预览 |
346
+ | 查询数据列表页生成任务状态 | [`rabetbase page generate-status --datasetcode <code> --operation-id <id>`](references/rabetbase-page-generate-status.md) | 查询 job 状态,支持 `operationId` / `clientOperationId` |
347
+ | 查询数据列表页生成任务状态 | [`rabetbase page generate-status --datasetcode <code> --task-id <id>`](references/rabetbase-page-generate-status.md) | 查询 job 状态;taskId 首选,operationId/clientOperationId 兼容。成功后仍读取数据列表页事实,未知状态不得自动重提 |
348
+ | 查询数据列表页事实快照 | [`rabetbase page data-list-status --datasetcode <code>`](references/rabetbase-data-list-status.md) | 查询数据列表页四件套、残留页与菜单事实 |
349
+ | 审计数据列表页关系绑定 | [`rabetbase page relation-audit --datasetcode <code>`](references/rabetbase-page-relation-binding.md) | 只读检查数据列表页 options 绑定是否匹配 `dataset relations` |
350
+ | 同步已有数据列表页 | [`rabetbase page sync --datasetcode <code>`](references/rabetbase-page-sync.md) | 数据集字段变更后同步到关联数据列表页 |
351
+ | 拉取数据列表页 schema 到本地 | [`rabetbase page pull --id <pageId>`](references/rabetbase-page-pull.md) | 写入 `.rabetbase/page/<appCode>/`,进入本地编辑工作流 |
352
+ | 推送本地数据列表页 schema | [`rabetbase page push --id <pageId>`](references/rabetbase-page-push.md) | 推送后自动回拉 canonical schema 覆盖本地 |
353
+ | 恢复已删除页面 | [`rabetbase page restore --id <pageId>`](references/rabetbase-page-restore.md) | 支持 `DATA_LIST|CUSTOM` 自动识别;跨类型同 ID 时显式传 `--page-type` |
354
354
  | 数据库连接(dblink)/ 测连 / 结构分析 | [`rabetbase db list`](references/rabetbase-db-list.md) 起 | **`id`**、**trace/plan id** 与“终态 + 复跑 diff”完成口径见 [database-connection-workflow.md](guides/database-connection-workflow.md);各子命令见 `references/rabetbase-db-*.md` |
355
355
  | 生成 API 客户端代码 | [`rabetbase api pull`](references/rabetbase-api-pull.md) | 拉取数据集并生成 `src/api/` TypeScript 代码 |
356
356
  | 查看生成的 API 模型 | [`rabetbase api list`](references/rabetbase-api-list.md) | 列出已生成的数据模型 |
@@ -411,8 +411,8 @@ const result = await client.bff.execute<DashboardData>({
411
411
  | Tenant Members | [`tenant members-list`](references/rabetbase-tenant-members-list.md)(当前账号所属租户的全量人员目录) |
412
412
  | app commands | [`list`](references/rabetbase-app-list.md)(只读应用事实;平台目录用 `list --remote`)/ [`members-list`](references/rabetbase-app-members-list.md)(应用人员及角色归属)。登记/移除应用改用 `workspace add` / `workspace remove` |
413
413
  | dataset commands | [`list`](references/rabetbase-dataset-list.md) / [`detail`](references/rabetbase-dataset-detail.md) / [`delete`](references/rabetbase-dataset-delete.md) / [`restore`](references/rabetbase-dataset-restore.md) / [`generate-start/status`](references/rabetbase-dataset-generate.md) / [`rename`](references/rabetbase-dataset-rename.md) / [`field-update`](references/rabetbase-dataset-field-update.md) / [`extend-update`](references/rabetbase-dataset-extend-update.md) / [`business-group-update`](references/rabetbase-dataset-business-group-update.md) / [`operations`](references/rabetbase-dataset-operations.md) / [`relations`](references/rabetbase-dataset-relations.md) / [`relation-audit`](references/rabetbase-dataset-relation-audit.md) / [`relation-create/update/delete`](references/rabetbase-dataset-relation-mutations.md) |
414
- | Smart List Page commands | [`generate-start`](references/rabetbase-page-generate-start.md) / [`generate-status`](references/rabetbase-page-generate-status.md) / [`standard-page-status`](references/rabetbase-standard-page-status.md) / [`relation-audit`](references/rabetbase-page-relation-binding.md) / [`sync`](references/rabetbase-page-sync.md) / [`pull`](references/rabetbase-page-pull.md) / [`push`](references/rabetbase-page-push.md) |
415
- | React custom page commands | [`react-create`](references/rabetbase-page-react-create.md) / [`react-list`](references/rabetbase-page-react-list.md) / [`react-detail`](references/rabetbase-page-react-detail.md) / [`react-update`](references/rabetbase-page-react-update.md) / [`react-publish`](references/rabetbase-page-react-publish.md) |
414
+ | Data List Page commands | [`generate-start`](references/rabetbase-page-generate-start.md) / [`generate-status`](references/rabetbase-page-generate-status.md) / [`data-list-status`](references/rabetbase-data-list-status.md) / [`relation-audit`](references/rabetbase-page-relation-binding.md) / [`sync`](references/rabetbase-page-sync.md) / [`pull`](references/rabetbase-page-pull.md) / [`push`](references/rabetbase-page-push.md) |
415
+ | Custom Page commands | [`create`](references/rabetbase-page-create.md) / [`custom-list`](references/rabetbase-page-custom-list.md) / [`custom-detail`](references/rabetbase-page-custom-detail.md) / [`custom-update`](references/rabetbase-page-custom-update.md) / [`custom-publish`](references/rabetbase-page-custom-publish.md) |
416
416
  | Database Connections (`db`) | [`list`](references/rabetbase-db-list.md) / [`detail`](references/rabetbase-db-detail.md) / [`create`](references/rabetbase-db-create.md) / [`update`](references/rabetbase-db-update.md) / [`delete`](references/rabetbase-db-delete.md) / [`test`](references/rabetbase-db-test.md) / [`analyze`](references/rabetbase-db-analyze.md) / [`tables`](references/rabetbase-db-tables.md) / [`diff`](references/rabetbase-db-diff.md) / [`diff-refresh-start/status`](references/rabetbase-db-diff-refresh.md) |
417
417
  | api commands | [`pull`](references/rabetbase-api-pull.md) / [`list`](references/rabetbase-api-list.md) |
418
418
  | sql commands | [`list`](references/rabetbase-sql-list.md) / [`detail`](references/rabetbase-sql-detail.md) / [`create`](references/rabetbase-sql-create.md) / [`status`](references/rabetbase-sql-status.md) / [`pull`](references/rabetbase-sql-pull.md) / [`push`](references/rabetbase-sql-push.md) / [`delete`](references/rabetbase-sql-delete.md) / [`validate`](references/rabetbase-sql-validate.md) / [`save`(deprecated)](references/rabetbase-sql-save.md) / [`exec`](references/rabetbase-sql-exec.md) |
@@ -237,10 +237,14 @@ rabetbase dataset detail --code <datasetCode> --format compress \
237
237
  顶部注释必须写清楚:
238
238
 
239
239
  * 脚本功能描述
240
- * 接口路径
241
- * 平台配置地址
242
- * HTTP 请求参数
240
+ * 脚本类型与脚本名称
241
+ * 真实接口路径、平台配置地址和本地路径
242
+ * 根请求参数与实际使用的每个 `params.<字段名>`
243
243
  * 返回数据结构
244
+ * 依赖数据集、调用 BF、执行 SQL 和副作用
245
+ * 显式抛出异常时的异常类型与触发条件
246
+
247
+ 字段级参数使用标准 JSDoc `@param` 标签,写清类型、含义、必填性和默认值。没有字段级参数时只保留根 `params` 标签,不要虚构字段。代码出现显式 `throw` 时必须补充 `@throws`;依赖维护项必须与实际代码同步,便于发布后提取为 BFF 元数据。
244
248
 
245
249
  占位符必须替换为真实值,不能保留:
246
250
 
@@ -254,16 +258,24 @@ rabetbase dataset detail --code <datasetCode> --format compress \
254
258
 
255
259
  ```javascript
256
260
  /**
257
- * 脚本功能描述
258
- *
259
- * [接口路径] POST /api/{appCode}/{datasetCode}/{operation}
260
- * [平台配置] https://app.lovrabet.com/app/{appCode}/data/dataset/{datasetId}#api-list
261
+ * 保存用户前校验手机号
261
262
  *
262
- * [HTTP 请求体参数]
263
- * { "field1": "字段说明" }
263
+ * [脚本类型] HOOK
264
+ * [脚本名称] validateMobile
265
+ * [接口路径] POST /api/demoApp/userDataset/save
266
+ * [平台配置] https://app.lovrabet.com/app/demoApp/data/dataset/1001#api-list
267
+ * [本地路径] .rabetbase/bff/demoApp/HOOK/user/save/before/validateMobile.js
268
+ * [触发节点] before
269
+ * [依赖数据集] userDataset(校验手机号唯一性)
270
+ * [调用 BF] 无
271
+ * [执行 SQL] 无
272
+ * [副作用] 无
264
273
  *
265
- * [返回数据结构]
266
- * HOOK: 返回修改后的 params
274
+ * @param {Object} params 当前请求参数
275
+ * @param {string} params.mobile 手机号,必填
276
+ * @param {Object} context 平台注入的执行上下文
277
+ * @returns {Promise<Object>} 修改后的请求参数
278
+ * @throws {Error} 手机号格式错误或已存在时抛出
267
279
  */
268
280
  ```
269
281
 
@@ -271,16 +283,46 @@ rabetbase dataset detail --code <datasetCode> --format compress \
271
283
 
272
284
  ```javascript
273
285
  /**
274
- * 脚本功能描述
286
+ * 查询用户列表
287
+ *
288
+ * [脚本类型] ENDPOINT
289
+ * [脚本名称] getUserList
290
+ * [接口路径] POST /api/endpoint/demoApp/getUserList
291
+ * [平台配置] https://app.lovrabet.com/app/demoApp/data/backend-function
292
+ * [本地路径] .rabetbase/bff/demoApp/ENDPOINT/getUserList.js
293
+ * [依赖数据集] userDataset(查询用户列表)
294
+ * [调用 BF] normalizeQuery(标准化查询条件)
295
+ * [执行 SQL] 无
296
+ * [副作用] 无
275
297
  *
276
- * [接口路径] POST /api/endpoint/{appCode}/{scriptName}
277
- * [平台配置] https://app.lovrabet.com/app/{appCode}/data/backend-function
298
+ * @param {Object} params HTTP 请求体参数
299
+ * @param {string} [params.keyword] 查询关键词,可选
300
+ * @param {number} [params.page=1] 页码,默认 1
301
+ * @param {Object} context 平台注入的执行上下文
302
+ * @returns {Promise<{tableData: Object[], total: number}>} 用户列表和总数
303
+ */
304
+ ```
305
+
306
+ ### COMMON 注释模板
307
+
308
+ ```javascript
309
+ /**
310
+ * 标准化查询参数
278
311
  *
279
- * [HTTP 请求体参数]
280
- * { "field1": "字段说明" }
312
+ * [脚本类型] COMMON
313
+ * [脚本名称] normalizeQuery
314
+ * [平台配置] https://app.lovrabet.com/app/demoApp/data/backend-function
315
+ * [本地路径] .rabetbase/bff/demoApp/COMMON/normalizeQuery.js
316
+ * [调用方式] context.client.bff.execute({ scriptName: "normalizeQuery", params })
317
+ * [依赖数据集] 无
318
+ * [调用 BF] 无
319
+ * [执行 SQL] 无
320
+ * [副作用] 无
281
321
  *
282
- * [返回数据结构]
283
- * ENDPOINT: 返回业务数据对象
322
+ * @param {Object} params 请求参数
323
+ * @param {string} [params.keyword] 原始查询关键词,可选
324
+ * @param {Object} context 平台注入的执行上下文
325
+ * @returns {Promise<{keyword: string}>} 标准化后的查询参数
284
326
  */
285
327
  ```
286
328
 
@@ -800,6 +842,7 @@ await context.client.db.transaction(async (tx) => {
800
842
  * 不要使用 `getList()` 代替 `filter()`
801
843
  * 不要手动设置系统字段
802
844
  * 不要保留顶部注释占位符
845
+ * 不要让参数、返回值、依赖数据集、调用 BF、执行 SQL 或副作用说明与实际代码不一致
803
846
  * 不要把前端 SQL 返回值语义套到 BFF
804
847
  * 不要在 BFF 中使用前端 SDK 独有的方法,如 `createClient`、`registerModels`
805
848
  * 不要把示例里的字段名、表名、枚举值复制到真实脚本;字段事实必须来自当前数据集详情
@@ -815,6 +858,8 @@ await context.client.db.transaction(async (tx) => {
815
858
  * [ ] 若涉及数据集,字段名、类型、必填、枚举、关系已核对
816
859
  * [ ] 函数名正确(将作为 `scriptName` 参数传入)
817
860
  * [ ] 顶部注释完整且占位符已替换
861
+ * [ ] JSDoc 已覆盖根请求参数、实际字段和返回值;显式抛出异常时已补充 `@throws`
862
+ * [ ] 依赖数据集、调用 BF、执行 SQL 和副作用说明与实际代码一致
818
863
  * [ ] 数据集映射使用 `"dataset_" + 32 位编码`
819
864
  * [ ] 单条查询统一使用 `getOne`
820
865
  * [ ] 列表查询使用 `filter`,并从 `.tableData` 读取结果
@@ -69,6 +69,8 @@ rabetbase dataset detail --code <数据集编码> --format compress \
69
69
  * BFF 中 `sql.execute` 返回数组,不是 `{ execSuccess, execResult }`
70
70
  * 没有在 BFF 中使用前端 SDK 初始化能力,如 `createClient`、`registerModels`
71
71
  * 参数校验、错误处理、脱敏
72
+ * 中文 JSDoc 已写清根请求参数、实际 `params.<字段名>`、返回值;显式抛出异常时包含 `@throws`
73
+ * 依赖数据集、调用 BF、执行 SQL、副作用维护项与实际代码一致,无依赖时明确填写“无”
72
74
  * 通知型 BFF 只传 `configCode` / `audiences` / `message`,并且没有 `${...}` 模板表达式、旧 MANUAL 参数或渠道密钥
73
75
  * 通知型 ENDPOINT 限制调用者可传的字段、`configCode` 和接收对象范围,不形成任意通知转发器
74
76
  * 通知型 Before HOOK 使用“即将执行”或“准备执行”的消息语义,`await` 发送后返回原始 `params`;不直接返回通知扩展结果,并明确接受“通知已发送但后续业务仍可能失败”