@lovrabet/rabetbase-cli 2.4.5 → 2.4.6-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/lib/api/api-doc.js +1 -1
- package/lib/api/fetch-model-list.js +1 -1
- package/lib/api/generate-api-file.js +1 -1
- package/lib/auth/auth-server-ui.js +1 -1
- package/lib/auth/auth-server.js +1 -1
- package/lib/auth/constant.js +1 -1
- package/lib/auth/get-cookie.js +1 -1
- package/lib/auth/get-session-user.js +1 -1
- package/lib/auth/is-session-valid.js +1 -1
- package/lib/auth/login-success-html.js +1 -1
- package/lib/auth/logout.js +1 -1
- package/lib/cli-flags.js +1 -1
- package/lib/cli.js +1 -1
- package/lib/commands/api/generate.js +1 -1
- package/lib/commands/api/index.js +1 -1
- package/lib/commands/api/list.js +1 -1
- package/lib/commands/api/pull.js +1 -1
- package/lib/commands/api/shared.js +1 -1
- package/lib/commands/app/index.js +1 -1
- package/lib/commands/app/list.js +1 -1
- package/lib/commands/app/members-list.js +1 -1
- package/lib/commands/app/remote-directory.js +1 -1
- package/lib/commands/app/shared.js +1 -1
- package/lib/commands/app-config/delete.js +1 -1
- package/lib/commands/app-config/get.js +1 -1
- package/lib/commands/app-config/index.js +1 -1
- package/lib/commands/app-config/list.js +1 -1
- package/lib/commands/app-config/set.js +1 -1
- package/lib/commands/app-config/shared.js +1 -1
- package/lib/commands/auth/index.js +1 -1
- package/lib/commands/bff/create.js +1 -1
- package/lib/commands/bff/delete.js +1 -1
- package/lib/commands/bff/detail.js +1 -1
- package/lib/commands/bff/index.js +1 -1
- package/lib/commands/bff/list.js +1 -1
- package/lib/commands/bff/pull.js +1 -1
- package/lib/commands/bff/push.js +1 -1
- package/lib/commands/bff/status.js +1 -1
- package/lib/commands/cli-skill/index.js +1 -1
- package/lib/commands/cli-update.js +1 -1
- package/lib/commands/codegen/index.js +1 -1
- package/lib/commands/codegen/sdk.js +1 -1
- package/lib/commands/codegen/sql.js +1 -1
- package/lib/commands/common/app-registry.js +1 -1
- package/lib/commands/common/app-selector.js +1 -1
- package/lib/commands/common/async-task.js +1 -1
- package/lib/commands/common/dry-run.js +1 -1
- package/lib/commands/common/flags.js +1 -1
- package/lib/commands/common/local-file.js +1 -1
- package/lib/commands/common/validate.js +1 -1
- package/lib/commands/config/get.js +1 -1
- package/lib/commands/config/index.js +1 -1
- package/lib/commands/config/list.js +1 -1
- package/lib/commands/config/set.js +1 -1
- package/lib/commands/config/shared.js +1 -1
- package/lib/commands/data/filter.js +1 -1
- package/lib/commands/data/getOne.js +1 -1
- package/lib/commands/data/index.js +1 -1
- package/lib/commands/data/shared.js +1 -1
- package/lib/commands/dataset/business-group-update.js +1 -1
- package/lib/commands/dataset/business-groups.js +1 -1
- package/lib/commands/dataset/capability.js +1 -1
- package/lib/commands/dataset/delete.js +1 -1
- package/lib/commands/dataset/detail.js +1 -1
- package/lib/commands/dataset/extend-update.js +1 -1
- package/lib/commands/dataset/field-update.js +1 -1
- package/lib/commands/dataset/generate.js +1 -1
- package/lib/commands/dataset/index.js +1 -1
- package/lib/commands/dataset/list.js +1 -1
- package/lib/commands/dataset/operations.js +1 -1
- package/lib/commands/dataset/relation-audit.js +1 -1
- package/lib/commands/dataset/relation-create.js +1 -1
- package/lib/commands/dataset/relation-delete.js +1 -1
- package/lib/commands/dataset/relation-shared.js +1 -1
- package/lib/commands/dataset/relation-update.js +1 -1
- package/lib/commands/dataset/relations.js +1 -1
- package/lib/commands/dataset/rename.js +1 -1
- package/lib/commands/dataset/restore.js +1 -1
- package/lib/commands/db/analysis-batching.js +1 -1
- package/lib/commands/db/analyze-batch-plan.js +1 -1
- package/lib/commands/db/analyze-cancel.js +1 -1
- package/lib/commands/db/analyze-start.js +1 -1
- package/lib/commands/db/analyze-status.js +1 -1
- package/lib/commands/db/create.js +1 -1
- package/lib/commands/db/delete.js +1 -1
- package/lib/commands/db/detail.js +1 -1
- package/lib/commands/db/diff-refresh-start.js +1 -1
- package/lib/commands/db/diff-refresh-status.js +1 -1
- package/lib/commands/db/diff.js +1 -1
- package/lib/commands/db/index.js +1 -1
- package/lib/commands/db/list.js +1 -1
- package/lib/commands/db/shared.js +1 -1
- package/lib/commands/db/tables.js +1 -1
- package/lib/commands/db/test.js +1 -1
- package/lib/commands/db/update.js +1 -1
- package/lib/commands/doctor.js +1 -1
- package/lib/commands/file/index.js +1 -1
- package/lib/commands/init/index.js +1 -1
- package/lib/commands/issue/index.js +1 -1
- package/lib/commands/issue/nudge.js +1 -1
- package/lib/commands/issue/report.js +1 -1
- package/lib/commands/issue/shared.js +1 -1
- package/lib/commands/kb/create.js +1 -1
- package/lib/commands/kb/delete.js +1 -1
- package/lib/commands/kb/detail.js +1 -1
- package/lib/commands/kb/index.js +1 -1
- package/lib/commands/kb/list.js +1 -1
- package/lib/commands/kb/shared.js +1 -1
- package/lib/commands/kb/update.js +1 -1
- package/lib/commands/logs/index.js +1 -1
- package/lib/commands/menu/asset-update.js +1 -1
- package/lib/commands/menu/delete.js +1 -1
- package/lib/commands/menu/external-link-create.js +1 -1
- package/lib/commands/menu/external-link-update.js +1 -1
- package/lib/commands/menu/group-create.js +1 -1
- package/lib/commands/menu/group-update.js +1 -1
- package/lib/commands/menu/index.js +1 -1
- package/lib/commands/menu/list.js +1 -1
- package/lib/commands/menu/move.js +1 -1
- package/lib/commands/menu/regroup-start.js +1 -1
- package/lib/commands/menu/rename.js +1 -1
- package/lib/commands/menu/shared/compare-table.js +1 -1
- package/lib/commands/menu/shared/delete-plan.js +1 -1
- package/lib/commands/menu/shared/facts.js +1 -1
- package/lib/commands/menu/shared/index.js +1 -1
- package/lib/commands/menu/shared/inquirer.js +1 -1
- package/lib/commands/menu/shared/local-pages.js +1 -1
- package/lib/commands/menu/shared/logic.js +1 -1
- package/lib/commands/menu/shared/mutations.d.ts +8 -7
- package/lib/commands/menu/shared/mutations.js +1 -1
- package/lib/commands/menu/shared/service.js +1 -1
- package/lib/commands/menu/shared/sync-core.js +1 -1
- package/lib/commands/menu/shared/types.d.ts +17 -2
- package/lib/commands/menu/shared/update-core.js +1 -1
- package/lib/commands/menu/shared/valid-url.js +1 -1
- package/lib/commands/menu/sync.js +1 -1
- package/lib/commands/{page/standard-page-status.d.ts → menu/visibility-update.d.ts} +1 -1
- package/lib/commands/menu/visibility-update.js +1 -0
- package/lib/commands/notification/config-create.js +1 -1
- package/lib/commands/notification/config-delete.js +1 -1
- package/lib/commands/notification/config-list.js +1 -1
- package/lib/commands/notification/config-update.js +1 -1
- package/lib/commands/notification/index.js +1 -1
- package/lib/commands/notification/shared.js +1 -1
- package/lib/commands/ocr/index.js +1 -1
- package/lib/commands/page/create.d.ts +2 -0
- package/lib/commands/page/create.js +1 -0
- package/lib/commands/page/{react → custom}/detail.d.ts +1 -1
- package/lib/commands/page/custom/detail.js +1 -0
- package/lib/commands/page/{react → custom}/list.d.ts +1 -1
- package/lib/commands/page/custom/list.js +1 -0
- package/lib/commands/page/{react → custom}/publish.d.ts +1 -1
- package/lib/commands/page/custom/publish.js +1 -0
- package/lib/commands/page/{react → custom}/shared.d.ts +15 -15
- package/lib/commands/page/custom/shared.js +1 -0
- package/lib/commands/page/{react → custom}/syntax.d.ts +2 -2
- package/lib/commands/page/custom/syntax.js +1 -0
- package/lib/commands/page/custom/template.js +1 -0
- package/lib/commands/page/{react → custom}/update.d.ts +1 -1
- package/lib/commands/page/custom/update.js +1 -0
- package/lib/commands/page/data-list-status.d.ts +2 -0
- package/lib/commands/page/data-list-status.js +1 -0
- package/lib/commands/page/generate-start.js +1 -1
- package/lib/commands/page/generate-status.js +1 -1
- package/lib/commands/page/index.js +1 -1
- package/lib/commands/page/pull.js +1 -1
- package/lib/commands/page/push.js +1 -1
- package/lib/commands/page/relation-audit.js +1 -1
- package/lib/commands/page/restore.js +1 -1
- package/lib/commands/page/shared.d.ts +18 -18
- package/lib/commands/page/shared.js +1 -1
- package/lib/commands/page/sync.js +1 -1
- package/lib/commands/project/create/enhanced-guided-create.js +1 -1
- package/lib/commands/project/create/format-elapsed.js +1 -1
- package/lib/commands/project/create/main.js +1 -1
- package/lib/commands/project/create/materialize-project-template.js +1 -1
- package/lib/commands/project/create/project-name.js +1 -1
- package/lib/commands/project/create/project-template-archive.js +1 -1
- package/lib/commands/project/create/project-template-path.js +1 -1
- package/lib/commands/project/create/use-copy-project-template.js +1 -1
- package/lib/commands/project/create/use-format-code.js +1 -1
- package/lib/commands/project/create/use-install-dependencies.js +1 -1
- package/lib/commands/project/index.js +1 -1
- package/lib/commands/project/upgrade.js +1 -1
- package/lib/commands/registry.js +1 -1
- package/lib/commands/role/delete.js +1 -1
- package/lib/commands/role/detail.js +1 -1
- package/lib/commands/role/index.js +1 -1
- package/lib/commands/role/list.js +1 -1
- package/lib/commands/role/shared.js +1 -1
- package/lib/commands/role/update.js +1 -1
- package/lib/commands/role/user-add.js +1 -1
- package/lib/commands/role/user-remove.js +1 -1
- package/lib/commands/role/user-resolve.js +1 -1
- package/lib/commands/run/index.js +1 -1
- package/lib/commands/schema.js +1 -1
- package/lib/commands/sql/create.js +1 -1
- package/lib/commands/sql/delete.js +1 -1
- package/lib/commands/sql/detail.js +1 -1
- package/lib/commands/sql/exec.js +1 -1
- package/lib/commands/sql/index.js +1 -1
- package/lib/commands/sql/list.js +1 -1
- package/lib/commands/sql/pull.js +1 -1
- package/lib/commands/sql/push.js +1 -1
- package/lib/commands/sql/shared.js +1 -1
- package/lib/commands/sql/status.js +1 -1
- package/lib/commands/sql/validate.js +1 -1
- package/lib/commands/task/index.js +1 -1
- package/lib/commands/task/status.js +1 -1
- package/lib/commands/tenant/index.js +1 -1
- package/lib/commands/tenant/members-list.js +1 -1
- package/lib/commands/tenant/shared.js +1 -1
- package/lib/commands/user-account/dingding-sandbox-bind.js +1 -1
- package/lib/commands/user-account/index.js +1 -1
- package/lib/commands/workspace/add.js +1 -1
- package/lib/commands/workspace/index.js +1 -1
- package/lib/commands/workspace/remove.js +1 -1
- package/lib/config/schema.js +1 -1
- package/lib/constant/cdn.js +1 -1
- package/lib/constant/cli.js +1 -1
- package/lib/constant/defaults.js +1 -1
- package/lib/constant/domain.js +1 -1
- package/lib/constant/env.js +1 -1
- package/lib/constant/output.js +1 -1
- package/lib/constant/paths.js +1 -1
- package/lib/constant/risk.js +1 -1
- package/lib/context/app-resolver.js +1 -1
- package/lib/context/auth-resolver.js +1 -1
- package/lib/context/config-loader.js +1 -1
- package/lib/context.js +1 -1
- package/lib/core/alias-resolver.js +1 -1
- package/lib/core/api-client.d.ts +43 -43
- package/lib/core/api-client.js +1 -1
- package/lib/core/bff/config.js +1 -1
- package/lib/core/bff/file-system.js +1 -1
- package/lib/core/bff/hash.js +1 -1
- package/lib/core/bff/lock.js +1 -1
- package/lib/core/bff/utils.d.ts +3 -1
- package/lib/core/bff/utils.js +1 -1
- package/lib/core/db-resolver.js +1 -1
- package/lib/core/page/file-system.js +1 -1
- package/lib/core/page/hash.js +1 -1
- package/lib/core/page/lock.js +1 -1
- package/lib/core/sql-index-auditor.js +1 -1
- package/lib/core/sql-sync/config.js +1 -1
- package/lib/core/sql-sync/file-system.js +1 -1
- package/lib/core/sql-sync/hash.js +1 -1
- package/lib/core/sql-sync/lock.js +1 -1
- package/lib/core/sql-sync/utils.js +1 -1
- package/lib/core/sql-validator.js +1 -1
- package/lib/errors.js +1 -1
- package/lib/framework/build-all-flags.js +1 -1
- package/lib/framework/error-output.js +1 -1
- package/lib/framework/explicit-yes.js +1 -1
- package/lib/framework/flags.js +1 -1
- package/lib/framework/help.js +1 -1
- package/lib/framework/index.js +1 -1
- package/lib/framework/output.js +1 -1
- package/lib/framework/response.js +1 -1
- package/lib/framework/runner-alias.js +1 -1
- package/lib/framework/runner.js +1 -1
- package/lib/framework/schema-export.js +1 -1
- package/lib/framework/types.js +1 -1
- package/lib/generated/build-info.d.ts +4 -4
- package/lib/generated/build-info.js +1 -1
- package/lib/help.js +1 -1
- package/lib/postinstall.js +1 -1
- package/lib/runtime/confirmation.js +1 -1
- package/lib/runtime/event.js +1 -1
- package/lib/runtime/index.js +1 -1
- package/lib/runtime/queue.js +1 -1
- package/lib/runtime/resolve.js +1 -1
- package/lib/skills/builtin-skill.js +1 -1
- package/lib/skills/main.js +1 -1
- package/lib/skills/npx-skills-add.js +1 -1
- package/lib/skills/skill-presence.js +1 -1
- package/lib/telemetry/cli-command-trace.js +1 -1
- package/lib/telemetry/cli-help-trace.js +1 -1
- package/lib/telemetry/ensure-cli-otel-config.js +1 -1
- package/lib/telemetry/register-otel-exit-shutdown.js +1 -1
- package/lib/telemetry/send-cli-trace-log.js +1 -1
- package/lib/telemetry/send-platform-issue-collect-log.js +1 -1
- package/lib/utils/ai_config.js +1 -1
- package/lib/utils/apply-jq-filter.js +1 -1
- package/lib/utils/cdn-config.js +1 -1
- package/lib/utils/check-sdk-version.js +1 -1
- package/lib/utils/cli-version-check.js +1 -1
- package/lib/utils/cli-version-policy.js +1 -1
- package/lib/utils/config.js +1 -1
- package/lib/utils/entity-with-id.js +1 -1
- package/lib/utils/file-utils.js +1 -1
- package/lib/utils/guides-cdn.js +1 -1
- package/lib/utils/http-client.js +1 -1
- package/lib/utils/is-non-interactive.js +1 -1
- package/lib/utils/logger.js +1 -1
- package/lib/utils/params.js +1 -1
- package/lib/utils/platform.js +1 -1
- package/lib/utils/rules-cdn.js +1 -1
- package/lib/utils/sleep.js +1 -1
- package/lib/utils/template-replacer.js +1 -1
- package/lib/utils/update-notice.js +1 -1
- package/lib/utils/version.js +1 -1
- package/lib/utils/with-active-cookie.js +1 -1
- package/lib/utils/write-cli-side-channel.js +1 -1
- package/package.json +1 -1
- package/skills/rabetbase/SKILL.md +35 -34
- package/skills/rabetbase/guides/backend-function.md +63 -18
- package/skills/rabetbase/guides/bff-creation-workflow.md +2 -0
- package/skills/rabetbase/guides/{react-custom-page-workflow.md → custom-page-workflow.md} +45 -45
- package/skills/rabetbase/guides/page-development-workflow.md +22 -22
- package/skills/rabetbase/knowledge/{react-page → custom-page}/components.md +2 -2
- package/skills/rabetbase/knowledge/{react-page → custom-page}/generation-standards.md +6 -6
- package/skills/rabetbase/knowledge/page-schema/LrSmartTable.md +6 -6
- package/skills/rabetbase/knowledge/page-schema/external-resources-usage.md +1 -1
- package/skills/rabetbase/references/rabetbase-bff-create.md +2 -0
- package/skills/rabetbase/references/{rabetbase-standard-page-status.md → rabetbase-data-list-status.md} +6 -6
- package/skills/rabetbase/references/rabetbase-dataset-generate.md +1 -1
- package/skills/rabetbase/references/rabetbase-dataset-relation-mutations.md +1 -1
- package/skills/rabetbase/references/rabetbase-dataset-relations.md +1 -1
- package/skills/rabetbase/references/rabetbase-dataset-restore.md +1 -1
- package/skills/rabetbase/references/rabetbase-menu-list.md +4 -2
- package/skills/rabetbase/references/rabetbase-menu-visibility-update.md +59 -0
- package/skills/rabetbase/references/rabetbase-page-create.md +31 -0
- package/skills/rabetbase/references/{rabetbase-page-react-detail.md → rabetbase-page-custom-detail.md} +5 -5
- package/skills/rabetbase/references/{rabetbase-page-react-list.md → rabetbase-page-custom-list.md} +4 -4
- package/skills/rabetbase/references/{rabetbase-page-react-publish.md → rabetbase-page-custom-publish.md} +6 -6
- package/skills/rabetbase/references/{rabetbase-page-react-update.md → rabetbase-page-custom-update.md} +6 -6
- package/skills/rabetbase/references/rabetbase-page-generate-start.md +5 -4
- package/skills/rabetbase/references/rabetbase-page-generate-status.md +4 -4
- package/skills/rabetbase/references/rabetbase-page-pull.md +2 -2
- package/skills/rabetbase/references/rabetbase-page-relation-binding.md +1 -1
- package/skills/rabetbase/references/rabetbase-page-restore.md +7 -7
- package/skills/rabetbase/references/rabetbase-page-sync.md +3 -3
- package/skills/rabetbase.manifest.json +13 -12
- package/lib/commands/page/react/create.d.ts +0 -2
- package/lib/commands/page/react/create.js +0 -1
- package/lib/commands/page/react/detail.js +0 -1
- package/lib/commands/page/react/list.js +0 -1
- package/lib/commands/page/react/publish.js +0 -1
- package/lib/commands/page/react/shared.js +0 -1
- package/lib/commands/page/react/syntax.js +0 -1
- package/lib/commands/page/react/template.js +0 -1
- package/lib/commands/page/react/update.js +0 -1
- package/lib/commands/page/standard-page-status.js +0 -1
- package/skills/rabetbase/references/rabetbase-page-react-create.md +0 -29
- /package/lib/commands/page/{react → custom}/template.d.ts +0 -0
package/lib/utils/logger.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const a285_0x107d4b=a285_0x5d2e;(function(_0x4cc890,_0x3f4848){const _0x3902ad=a285_0x5d2e,_0x177748=_0x4cc890();while(!![]){try{const _0x1a6559=parseInt(_0x3902ad(0xf3))/0x1+parseInt(_0x3902ad(0x101))/0x2*(-parseInt(_0x3902ad(0xd8))/0x3)+-parseInt(_0x3902ad(0xec))/0x4*(-parseInt(_0x3902ad(0xd6))/0x5)+-parseInt(_0x3902ad(0xe5))/0x6+parseInt(_0x3902ad(0x105))/0x7*(parseInt(_0x3902ad(0xf1))/0x8)+-parseInt(_0x3902ad(0xf2))/0x9*(-parseInt(_0x3902ad(0xdc))/0xa)+parseInt(_0x3902ad(0x108))/0xb*(-parseInt(_0x3902ad(0xd7))/0xc);if(_0x1a6559===_0x3f4848)break;else _0x177748['push'](_0x177748['shift']());}catch(_0x7984a0){_0x177748['push'](_0x177748['shift']());}}}(a285_0x1ffe,0xeb682));import a285_0x5c3e77 from'winston';import a285_0x2c899c from'node:fs';import a285_0xa93cba from'node:path';function a285_0x1ffe(){const _0x2f5130=['655306RgPbjT','stringify','printf','message','完成:\x20','createLogger','timestamp','success','开始执行:\x20','command','currentRawCommand','dirname','parse','warn','4NqeWbm','readLogs','trim','format','133mXBMBw','logFilePath','duration','1933019nAxlZx','blue','error','join','writeFileSync','details','4952075Wkfxqz','12oilRpR','2083986dUpMRd','addColors','logTask','now','110530WFMTtL','map','log','toISOString','Failed\x20to\x20read\x20logs:','green','initWinstonLogger','split','setLogPath','5889636kAoCGM','File','.lovrabet.log','combine','info','setRawCommand','winstonLogger','4QuaNEE','Failed\x20to\x20clear\x20logs:','utf8','existsSync','mkdirSync','352520JDOXjq','837uTbHRY'];a285_0x1ffe=function(){return _0x2f5130;};return a285_0x1ffe();}function a285_0x5d2e(_0x4de151,_0xa5cba6){_0x4de151=_0x4de151-0xd5;const _0x1ffebb=a285_0x1ffe();let _0x5d2e33=_0x1ffebb[_0x4de151];return _0x5d2e33;}class Logger{['winstonLogger'];[a285_0x107d4b(0x106)];[a285_0x107d4b(0xfd)]='';constructor(){const _0x17c181=a285_0x107d4b;this[_0x17c181(0x106)]='';}[a285_0x107d4b(0xea)](_0xe213dc){const _0x5a8483=a285_0x107d4b;this[_0x5a8483(0xfd)]=_0xe213dc;}['initWinstonLogger'](){const _0x2061a6=a285_0x107d4b,_0x487e3d=a285_0xa93cba[_0x2061a6(0xfe)](this[_0x2061a6(0x106)]);!a285_0x2c899c['existsSync'](_0x487e3d)&&a285_0x2c899c[_0x2061a6(0xf0)](_0x487e3d,{'recursive':!![]});const _0x23e465=a285_0x5c3e77['format'][_0x2061a6(0xe8)](a285_0x5c3e77[_0x2061a6(0x104)]['timestamp'](),a285_0x5c3e77[_0x2061a6(0x104)]['errors']({'stack':!![]}),a285_0x5c3e77[_0x2061a6(0x104)][_0x2061a6(0xf5)](_0x5407a9=>{const _0x4d778d=_0x2061a6,_0x1fff87={'timestamp':_0x5407a9[_0x4d778d(0xf9)]||new Date()[_0x4d778d(0xdf)](),'level':_0x5407a9['level']||'info','command':_0x5407a9[_0x4d778d(0xfc)]||'unknown','rawCommand':_0x5407a9['rawCommand']||this[_0x4d778d(0xfd)]||undefined,'message':_0x5407a9['message']||'','duration':_0x5407a9[_0x4d778d(0x107)]||undefined,'details':_0x5407a9[_0x4d778d(0xd5)]||undefined};return JSON[_0x4d778d(0xf4)](_0x1fff87);}));this['winstonLogger']=a285_0x5c3e77[_0x2061a6(0xf8)]({'level':_0x2061a6(0xe9),'format':_0x23e465,'transports':[new a285_0x5c3e77['transports'][(_0x2061a6(0xe6))]({'filename':this[_0x2061a6(0x106)],'level':'info'})],'silent':![]}),a285_0x5c3e77[_0x2061a6(0xd9)]({'success':_0x2061a6(0xe1),'error':'red','warn':'yellow','info':_0x2061a6(0x109)});}[a285_0x107d4b(0xe4)](_0x4d2a19){const _0x36a8fa=a285_0x107d4b;this['logFilePath']=a285_0xa93cba[_0x36a8fa(0x10b)](_0x4d2a19,_0x36a8fa(0xe7)),this[_0x36a8fa(0xeb)]&&this[_0x36a8fa(0xeb)]['clear'](),this[_0x36a8fa(0xe2)]();}[a285_0x107d4b(0xe9)](_0x4392b2,_0x1ac63c,_0x11ef1f){const _0x4c1fa8=a285_0x107d4b;if(!this[_0x4c1fa8(0x106)]||!this[_0x4c1fa8(0xeb)])return;this['winstonLogger'][_0x4c1fa8(0xe9)](_0x1ac63c,{'command':_0x4392b2,'details':_0x11ef1f});}['success'](_0x1916d1,_0x348b3e,_0xce80b3,_0x1d8584){const _0x1fa324=a285_0x107d4b;if(!this[_0x1fa324(0x106)]||!this[_0x1fa324(0xeb)])return;this[_0x1fa324(0xeb)][_0x1fa324(0xde)](_0x1fa324(0xe9),_0x348b3e,{'level':'success','command':_0x1916d1,'duration':_0xce80b3,'details':_0x1d8584});}[a285_0x107d4b(0x10a)](_0x3c8387,_0x17babc,_0x4c1454){const _0xfb4c14=a285_0x107d4b;if(!this['logFilePath']||!this[_0xfb4c14(0xeb)])return;this[_0xfb4c14(0xeb)][_0xfb4c14(0x10a)](_0x17babc,{'command':_0x3c8387,'details':_0x4c1454});}[a285_0x107d4b(0x100)](_0x793f50,_0x266a75,_0x44e7c2){const _0x2b93b7=a285_0x107d4b;if(!this['logFilePath']||!this[_0x2b93b7(0xeb)])return;this[_0x2b93b7(0xeb)][_0x2b93b7(0x100)](_0x266a75,{'command':_0x793f50,'details':_0x44e7c2});}async[a285_0x107d4b(0xda)](_0x399e6e,_0x5530f3,_0xd7a72a){const _0x104528=a285_0x107d4b,_0x7e6582=Date[_0x104528(0xdb)]();this[_0x104528(0xe9)](_0x399e6e,_0x104528(0xfb)+_0x5530f3);try{const _0x247707=await _0xd7a72a(),_0xc17c7a=Date['now']()-_0x7e6582;return this[_0x104528(0xfa)](_0x399e6e,_0x104528(0xf7)+_0x5530f3,_0xc17c7a),_0x247707;}catch(_0x52ba86){const _0xdcfeeb=Date[_0x104528(0xdb)]()-_0x7e6582;this[_0x104528(0x10a)](_0x399e6e,'失败:\x20'+_0x5530f3,{'error':_0x52ba86 instanceof Error?_0x52ba86[_0x104528(0xf6)]:String(_0x52ba86),'duration':_0xdcfeeb});throw _0x52ba86;}}[a285_0x107d4b(0x102)](){const _0x59cd1b=a285_0x107d4b;try{if(!a285_0x2c899c[_0x59cd1b(0xef)](this[_0x59cd1b(0x106)]))return[];const _0x2a1d1e=a285_0x2c899c['readFileSync'](this['logFilePath'],_0x59cd1b(0xee));return _0x2a1d1e[_0x59cd1b(0xe3)]('\x0a')['filter'](_0x597295=>_0x597295[_0x59cd1b(0x103)]())[_0x59cd1b(0xdd)](_0x3641d9=>JSON[_0x59cd1b(0xff)](_0x3641d9));}catch(_0x26117c){return console[_0x59cd1b(0x100)](_0x59cd1b(0xe0),_0x26117c),[];}}['clearLogs'](){const _0x28d686=a285_0x107d4b;try{a285_0x2c899c[_0x28d686(0xef)](this['logFilePath'])&&a285_0x2c899c[_0x28d686(0x10c)](this[_0x28d686(0x106)],'',_0x28d686(0xee));}catch(_0x272ffb){console[_0x28d686(0x100)](_0x28d686(0xed),_0x272ffb);}}['getWinstonInstance'](){const _0x57d311=a285_0x107d4b;return this[_0x57d311(0xeb)];}}export const logger=new Logger();
|
package/lib/utils/params.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x1fed7f,_0x175e31){const _0x7dbe4f=a286_0x2117,_0x1d1f86=_0x1fed7f();while(!![]){try{const _0x2503d7=-parseInt(_0x7dbe4f(0x136))/0x1*(parseInt(_0x7dbe4f(0x138))/0x2)+-parseInt(_0x7dbe4f(0x134))/0x3*(parseInt(_0x7dbe4f(0x135))/0x4)+parseInt(_0x7dbe4f(0x13d))/0x5*(parseInt(_0x7dbe4f(0x133))/0x6)+-parseInt(_0x7dbe4f(0x13b))/0x7+parseInt(_0x7dbe4f(0x137))/0x8*(parseInt(_0x7dbe4f(0x12e))/0x9)+parseInt(_0x7dbe4f(0x13a))/0xa+-parseInt(_0x7dbe4f(0x12f))/0xb*(-parseInt(_0x7dbe4f(0x131))/0xc);if(_0x2503d7===_0x175e31)break;else _0x1d1f86['push'](_0x1d1f86['shift']());}catch(_0x1d4e34){_0x1d1f86['push'](_0x1d1f86['shift']());}}}(a286_0x2a60,0x7a1e1));function a286_0x2a60(){const _0x26bf76=['24lBIRzZ','--params\x20must\x20be\x20a\x20JSON\x20object','5400414nZXQNE','705210enFYAW','8hCWrKV','352POFCep','1096NZRWOe','4432qPTJMq','isArray','3478950jLqsJm','4578238UFveYy','object','5KQlsZy','validation','48825bTooth','2272655cUwXVn','Invalid\x20JSON\x20for\x20--params:\x20'];a286_0x2a60=function(){return _0x26bf76;};return a286_0x2a60();}function a286_0x2117(_0x233130,_0x3d5751){_0x233130=_0x233130-0x12d;const _0x2a60a3=a286_0x2a60();let _0x211740=_0x2a60a3[_0x233130];return _0x211740;}import{CliErrors}from'../errors.js';export function parseJsonParams(_0x4bb25d){const _0x17bb22=a286_0x2117;if(!_0x4bb25d)return undefined;let _0x3fd92d;try{_0x3fd92d=JSON['parse'](_0x4bb25d);}catch{throw CliErrors[_0x17bb22(0x12d)](_0x17bb22(0x130)+_0x4bb25d);}if(!_0x3fd92d||typeof _0x3fd92d!==_0x17bb22(0x13c)||Array[_0x17bb22(0x139)](_0x3fd92d))throw CliErrors[_0x17bb22(0x12d)](_0x17bb22(0x132),'Example:\x20--params\x20\x27{\x22id\x22:123}\x27');return _0x3fd92d;}
|
package/lib/utils/platform.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const a287_0x3ca004=a287_0x582b;function a287_0x1e9e(){const _0x100bae=['1953MSULim','11tGAqus','278136pDAlgH','4IwGnou','152XIkejY','1470970twrJJE','356849TCsvod','63CSdcxV','14910vatnHH','836912NQWWsH','133525ZaaSPg','win32','7594680cRKPXo','.cmd'];a287_0x1e9e=function(){return _0x100bae;};return a287_0x1e9e();}(function(_0x3fdc65,_0x3ed2c0){const _0x1c26cc=a287_0x582b,_0x4de467=_0x3fdc65();while(!![]){try{const _0x5ddf30=parseInt(_0x1c26cc(0x14b))/0x1+-parseInt(_0x1c26cc(0x156))/0x2*(-parseInt(_0x1c26cc(0x155))/0x3)+parseInt(_0x1c26cc(0x157))/0x4*(-parseInt(_0x1c26cc(0x14f))/0x5)+-parseInt(_0x1c26cc(0x14d))/0x6*(parseInt(_0x1c26cc(0x153))/0x7)+parseInt(_0x1c26cc(0x14e))/0x8+parseInt(_0x1c26cc(0x14c))/0x9*(parseInt(_0x1c26cc(0x158))/0xa)+-parseInt(_0x1c26cc(0x154))/0xb*(-parseInt(_0x1c26cc(0x151))/0xc);if(_0x5ddf30===_0x3ed2c0)break;else _0x4de467['push'](_0x4de467['shift']());}catch(_0x13a15e){_0x4de467['push'](_0x4de467['shift']());}}}(a287_0x1e9e,0x92d07));export const isWindows=process['platform']===a287_0x3ca004(0x150);function a287_0x582b(_0x645d14,_0x2057a8){_0x645d14=_0x645d14-0x14b;const _0x1e9e60=a287_0x1e9e();let _0x582b7f=_0x1e9e60[_0x645d14];return _0x582b7f;}export function resolveNpmBin(_0x205d37){const _0x32cdd4=a287_0x3ca004;return isWindows?_0x205d37+_0x32cdd4(0x152):_0x205d37;}
|
package/lib/utils/rules-cdn.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
const a288_0x2b0d42=a288_0x718b;function a288_0x4a7f(){const _0x151127=['lastUpdated','60060bTVzGV','33oKjUEn','string','CDN\x20请求失败:\x20','2484JyWStp','/rules/rules.json','status','10375Mpfhwe','1158247weaQgK','content','44464ljqkVk','application/json','utf-8','13125390cAZvAx','json','../../templates/rules/lovrabet_rules.mdc.tpl','1304901CNdivN','CDN\x20返回数据格式错误','416XKLxmb','agents.md','.cursor/rules','669822DBQhjR'];a288_0x4a7f=function(){return _0x151127;};return a288_0x4a7f();}(function(_0x50dcd8,_0x1b9c57){const _0x39599e=a288_0x718b,_0x122785=_0x50dcd8();while(!![]){try{const _0x5d54ea=-parseInt(_0x39599e(0x1d2))/0x1+parseInt(_0x39599e(0x1c8))/0x2+-parseInt(_0x39599e(0x1cb))/0x3*(parseInt(_0x39599e(0x1d4))/0x4)+parseInt(_0x39599e(0x1d1))/0x5*(parseInt(_0x39599e(0x1ce))/0x6)+-parseInt(_0x39599e(0x1ca))/0x7*(parseInt(_0x39599e(0x1dc))/0x8)+parseInt(_0x39599e(0x1da))/0x9+parseInt(_0x39599e(0x1d7))/0xa;if(_0x5d54ea===_0x1b9c57)break;else _0x122785['push'](_0x122785['shift']());}catch(_0x3a5eb1){_0x122785['push'](_0x122785['shift']());}}}(a288_0x4a7f,0xe1c86));import{existsSync,mkdirSync,readFileSync,writeFileSync}from'node:fs';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 _0x4f6b51=a288_0x718b,_0x58b545=getTemplateBaseUrl();return _0x58b545+_0x4f6b51(0x1cf);}const LOCAL_TEMPLATE_PATH=resolve(__dirname,a288_0x2b0d42(0x1d9));export async function fetchRulesFromCDN(){const _0x349af8=a288_0x2b0d42,_0x292700=getRulesCdnUrl(),_0x5511a2=await fetch(_0x292700,{'headers':{'Accept':_0x349af8(0x1d5)}});if(!_0x5511a2['ok'])throw new Error(_0x349af8(0x1cd)+_0x5511a2[_0x349af8(0x1d0)]+'\x20'+_0x5511a2['statusText']);const _0x3ed2f4=await _0x5511a2[_0x349af8(0x1d8)]();if(!_0x3ed2f4[_0x349af8(0x1d3)]||typeof _0x3ed2f4[_0x349af8(0x1d3)]!==_0x349af8(0x1cc))throw new Error(_0x349af8(0x1db));return _0x3ed2f4;}function a288_0x718b(_0x299940,_0x2db24f){_0x299940=_0x299940-0x1c7;const _0x4a7f3b=a288_0x4a7f();let _0x718b6d=_0x4a7f3b[_0x299940];return _0x718b6d;}export async function getRulesContent(){const _0x31aefd=a288_0x2b0d42;try{const _0x2a6ad3=await fetchRulesFromCDN();return _0x2a6ad3[_0x31aefd(0x1d3)];}catch{return readLocalTemplate();}}export function readLocalTemplate(){const _0x1a9241=a288_0x2b0d42;if(existsSync(LOCAL_TEMPLATE_PATH))return readFileSync(LOCAL_TEMPLATE_PATH,_0x1a9241(0x1d6));throw new Error('本地模板文件不存在:\x20'+LOCAL_TEMPLATE_PATH);}export async function writeRulesFile(_0xaf8ab8){const _0x15242e=a288_0x2b0d42,_0x580720=await fetchRulesFromCDN()['catch'](()=>null);let _0xa27b1f;_0x580720?(_0xa27b1f=_0x580720[_0x15242e(0x1d3)],_0x580720[_0x15242e(0x1c9)]&&(_0xa27b1f=appendUpdateTime(_0xa27b1f,_0x580720[_0x15242e(0x1c9)]))):_0xa27b1f=readLocalTemplate();const _0x471431=dirname(_0xaf8ab8);!existsSync(_0x471431)&&mkdirSync(_0x471431,{'recursive':!![]}),writeFileSync(_0xaf8ab8,_0xa27b1f,_0x15242e(0x1d6));}export async function copyRulesToCursor(_0x256ab5){const _0x36b8ba=a288_0x2b0d42,_0x602660=join(_0x256ab5,_0x36b8ba(0x1c7)),_0xf9a00b=join(_0x602660,'lovrabet_rules.mdc');if(existsSync(_0xf9a00b))return![];return await writeRulesFile(_0xf9a00b),!![];}export async function copyRulesToAgentsMd(_0x520200){const _0x128d88=a288_0x2b0d42,_0x39ea42=join(_0x520200,_0x128d88(0x1dd));if(existsSync(_0x39ea42))return![];return await writeRulesFile(_0x39ea42),!![];}
|
package/lib/utils/sleep.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export function sleep(
|
|
1
|
+
export function sleep(_0x49d89f){return new Promise(_0x4bff0f=>setTimeout(_0x4bff0f,_0x49d89f));}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const a290_0x2d9d4a=a290_0x2bae;(function(_0x4ba162,_0x28cc7e){const _0x2be425=a290_0x2bae,_0x21a807=_0x4ba162();while(!![]){try{const _0x488064=-parseInt(_0x2be425(0x1b8))/0x1*(parseInt(_0x2be425(0x184))/0x2)+-parseInt(_0x2be425(0x1a7))/0x3*(parseInt(_0x2be425(0x1be))/0x4)+parseInt(_0x2be425(0x183))/0x5*(parseInt(_0x2be425(0x19e))/0x6)+-parseInt(_0x2be425(0x18c))/0x7+-parseInt(_0x2be425(0x18d))/0x8*(parseInt(_0x2be425(0x1a1))/0x9)+parseInt(_0x2be425(0x1a6))/0xa+-parseInt(_0x2be425(0x1c0))/0xb*(-parseInt(_0x2be425(0x189))/0xc);if(_0x488064===_0x28cc7e)break;else _0x21a807['push'](_0x21a807['shift']());}catch(_0x16b9a5){_0x21a807['push'](_0x21a807['shift']());}}}(a290_0x11c8,0x6e1d7));function a290_0x2bae(_0x410b2b,_0x5b69df){_0x410b2b=_0x410b2b-0x17e;const _0x11c8bb=a290_0x11c8();let _0x2bae9a=_0x11c8bb[_0x410b2b];return _0x2bae9a;}import a290_0x44da1e from'node:fs';function a290_0x11c8(){const _0x977563=['template','alias:\x20\x22','slice','1839770gjTqgs','230691sUjJde','.json','.js','name','processDirectory','getMinutes','toComponentName','now','extname','push','开始处理模板内容替换','name:\x20\x22','toLowerCase','LOVRABET','writeFile','join','success','101GmWDud','datasetCode:\x20\x22','formatLocalTimestamp','map','\x20},','datasetCode','8mgexXO','tableName','16103483RzGtPz','alias','utf8','isFile','error','promises','getFullYear','copyFile','getHours','replace','1815MmrsyH','8858Tgjwfu','toISOString','readFile','.tpl','padStart','12PpsSlx','.jsx','processFile','86128hfEEfl','8imFhJW','YourModel','isDirectory','pop','readdir','模板内容替换失败','api','tableName:\x20\x22','getSeconds','toDisplayTitle','pad','.css','.md','replaceApiContent','split','toUpperCase','endsWith','822lYJuYf','replaceContent','.tsx','5698827ZeHZuC','info'];a290_0x11c8=function(){return _0x977563;};return a290_0x11c8();}import a290_0x23b54f from'node:path';import{logger}from'../utils/logger.js';import{getCliVersion}from'../utils/version.js';const CLI_VERSION=getCliVersion();export class TemplateReplacer{static[a290_0x2d9d4a(0x197)](_0x3e4f44){const _0x356afe=a290_0x2d9d4a;return String(_0x3e4f44)[_0x356afe(0x188)](0x2,'0');}static[a290_0x2d9d4a(0x1ba)](_0x105d95){const _0xf909fc=a290_0x2d9d4a,_0x4de423=_0x105d95[_0xf909fc(0x17f)](),_0x568d4f=this[_0xf909fc(0x197)](_0x105d95['getMonth']()+0x1),_0x5d8e23=this[_0xf909fc(0x197)](_0x105d95['getDate']()),_0x4ecede=this['pad'](_0x105d95[_0xf909fc(0x181)]()),_0x4841bd=this[_0xf909fc(0x197)](_0x105d95[_0xf909fc(0x1ac)]()),_0x5c1aa8=this[_0xf909fc(0x197)](_0x105d95[_0xf909fc(0x195)]());return{'createdAt':_0x4de423+'-'+_0x568d4f+'-'+_0x5d8e23+'\x20'+_0x4ecede+':'+_0x4841bd+':'+_0x5c1aa8,'createdDate':_0x4de423+'-'+_0x568d4f+'-'+_0x5d8e23,'createdTime':_0x4ecede+':'+_0x4841bd+':'+_0x5c1aa8};}static[a290_0x2d9d4a(0x1ad)](_0x588a8d){const _0x236413=a290_0x2d9d4a,_0x5174bb=_0x588a8d[_0x236413(0x19b)]('/')[_0x236413(0x190)]()||_0x588a8d;return _0x5174bb[_0x236413(0x19b)]('-')[_0x236413(0x1bb)](_0x191e47=>_0x191e47['charAt'](0x0)[_0x236413(0x19c)]()+_0x191e47[_0x236413(0x1a5)](0x1)[_0x236413(0x1b3)]())[_0x236413(0x1b6)]('');}static[a290_0x2d9d4a(0x196)](_0x4ced3a){const _0x258990=a290_0x2d9d4a,_0x8219d5=_0x4ced3a[_0x258990(0x19b)]('/')['pop']()||_0x4ced3a;return _0x8219d5[_0x258990(0x19b)]('-')[_0x258990(0x1bb)](_0x2b94b6=>_0x2b94b6['charAt'](0x0)['toUpperCase']()+_0x2b94b6[_0x258990(0x1a5)](0x1)[_0x258990(0x1b3)]())[_0x258990(0x1b6)]('\x20');}static[a290_0x2d9d4a(0x19f)](_0x40e02e,_0x5a65f2,_0x2ae945){const _0x128221=a290_0x2d9d4a,_0x2c4710=this[_0x128221(0x1ad)](_0x5a65f2),_0x48b50e=this[_0x128221(0x196)](_0x5a65f2),{createdAt:_0x210002,createdDate:_0x277e01,createdTime:_0x30c59d}=this[_0x128221(0x1ba)](new Date());let _0x334e7b=_0x40e02e['replace'](/\{CliVersion\}/g,CLI_VERSION)[_0x128221(0x182)](/\{ComponentName\}/g,_0x2c4710)[_0x128221(0x182)](/\{DisplayTitle\}/g,_0x48b50e)['replace'](/\{PageName\}/g,_0x5a65f2)[_0x128221(0x182)](/\{TemplateName\}/g,_0x2ae945)[_0x128221(0x182)](/\{CreatedAt\}/g,_0x210002)['replace'](/\{CreatedDate\}/g,_0x277e01)['replace'](/\{CreatedTime\}/g,_0x30c59d);return _0x334e7b;}static[a290_0x2d9d4a(0x19a)](_0x41db2b,_0x1b07d5,_0x34839a,_0x498ed3,_0x2f1b11,_0x273fea,_0x586c0d,_0xfe0de5){const _0x49a5f2=a290_0x2d9d4a,_0x4d489f=new Date(),_0x5d0491=_0x4d489f[_0x49a5f2(0x185)](),_0x4959c2=_0x34839a[_0x49a5f2(0x1bb)](_0x21b3de=>{const _0x1b96dd=_0x49a5f2,_0xada87a=[_0x1b96dd(0x1b9)+_0x21b3de[_0x1b96dd(0x1bd)]+'\x22',_0x1b96dd(0x194)+_0x21b3de[_0x1b96dd(0x1bf)]+'\x22',_0x1b96dd(0x1b2)+_0x21b3de['name']+'\x22'];return _0x21b3de[_0x1b96dd(0x1c1)]&&_0xada87a[_0x1b96dd(0x1b0)](_0x1b96dd(0x1a4)+_0x21b3de['alias']+'\x22'),'\x0a\x20\x20\x20\x20{\x20'+_0xada87a[_0x1b96dd(0x1b6)](',\x20')+_0x1b96dd(0x1bc);})['join'](''),_0x1d1911=_0x498ed3||_0x34839a[0x0]?.[_0x49a5f2(0x1c1)]||_0x49a5f2(0x18e);let _0x32ea89=_0x41db2b['replace'](/\{AppCode\}/g,_0x1b07d5)[_0x49a5f2(0x182)](/\{ModelConfigs\}/g,_0x4959c2)[_0x49a5f2(0x182)](/\{ExampleModelName\}/g,_0x1d1911)[_0x49a5f2(0x182)](/\{ApiFileName\}/g,_0x2f1b11||_0x49a5f2(0x193))[_0x49a5f2(0x182)](/\{ConfigName\}/g,_0x273fea||'default')['replace'](/\{ClientConfigParam\}/g,_0x586c0d||'')[_0x49a5f2(0x182)](/\{VarPrefix\}/g,_0xfe0de5||_0x49a5f2(0x1b4))[_0x49a5f2(0x182)](/\{CreatedAt\}/g,_0x5d0491);return _0x32ea89;}static async['processTemplate'](_0x4583b2,_0x28e5ef,_0x587162,_0x14d181,_0xbbce06=!![]){const _0x5c68c8=a290_0x2d9d4a,_0x127d50=Date[_0x5c68c8(0x1ae)]();try{_0xbbce06&&logger[_0x5c68c8(0x1a2)](_0x5c68c8(0x1a3),_0x5c68c8(0x1b1),{'templatePath':_0x4583b2,'targetPath':_0x28e5ef,'pageName':_0x587162,'templateName':_0x14d181});await a290_0x44da1e[_0x5c68c8(0x17e)]['mkdir'](_0x28e5ef,{'recursive':!![]}),await this['processDirectory'](_0x4583b2,_0x28e5ef,_0x587162,_0x14d181);if(_0xbbce06){const _0x326587=Date[_0x5c68c8(0x1ae)]()-_0x127d50;logger[_0x5c68c8(0x1b7)](_0x5c68c8(0x1a3),'模板内容替换完成',_0x326587,{'pageName':_0x587162,'templateName':_0x14d181});}}catch(_0x12c635){if(_0xbbce06){const _0x39d956=Date[_0x5c68c8(0x1ae)]()-_0x127d50;logger[_0x5c68c8(0x1c4)](_0x5c68c8(0x1a3),_0x5c68c8(0x192),{'templatePath':_0x4583b2,'targetPath':_0x28e5ef,'pageName':_0x587162,'templateName':_0x14d181,'error':_0x12c635 instanceof Error?_0x12c635['message']:String(_0x12c635),'duration':_0x39d956});}throw _0x12c635;}}static async[a290_0x2d9d4a(0x1ab)](_0x4dc048,_0x13b9d6,_0x5e57bf,_0x7e4631){const _0x108433=a290_0x2d9d4a,_0x57dca3=await a290_0x44da1e[_0x108433(0x17e)][_0x108433(0x191)](_0x4dc048,{'withFileTypes':!![]});for(const _0xad6b82 of _0x57dca3){const _0xa76317=a290_0x23b54f[_0x108433(0x1b6)](_0x4dc048,_0xad6b82[_0x108433(0x1aa)]);let _0x2a0c8b=a290_0x23b54f[_0x108433(0x1b6)](_0x13b9d6,_0xad6b82[_0x108433(0x1aa)]);_0xad6b82[_0x108433(0x1aa)][_0x108433(0x19d)](_0x108433(0x187))&&(_0x2a0c8b=a290_0x23b54f[_0x108433(0x1b6)](_0x13b9d6,_0xad6b82[_0x108433(0x1aa)][_0x108433(0x182)](/\.tpl$/,'')));if(_0xad6b82[_0x108433(0x18f)]())await a290_0x44da1e[_0x108433(0x17e)]['mkdir'](_0x2a0c8b,{'recursive':!![]}),await this[_0x108433(0x1ab)](_0xa76317,_0x2a0c8b,_0x5e57bf,_0x7e4631);else _0xad6b82[_0x108433(0x1c3)]()&&await this[_0x108433(0x18b)](_0xa76317,_0x2a0c8b,_0x5e57bf,_0x7e4631);}}static async['processFile'](_0x451bcf,_0x333563,_0x1c686e,_0xdf2738){const _0x2807bb=a290_0x2d9d4a,_0x20fb69=a290_0x23b54f[_0x2807bb(0x1af)](_0x451bcf)[_0x2807bb(0x1b3)]();_0x451bcf['endsWith']('.tpl')&&(_0x333563=_0x333563[_0x2807bb(0x182)](/\.tpl$/,''));const _0x73bb5f=[_0x2807bb(0x1a0),'.ts',_0x2807bb(0x18a),_0x2807bb(0x1a9),_0x2807bb(0x1a8),_0x2807bb(0x199),_0x2807bb(0x198),'.scss',_0x2807bb(0x187)];if(_0x73bb5f['includes'](_0x20fb69)||_0x451bcf['endsWith'](_0x2807bb(0x187))){const _0x65a5c1=await a290_0x44da1e[_0x2807bb(0x17e)][_0x2807bb(0x186)](_0x451bcf,_0x2807bb(0x1c2)),_0x1247e2=this[_0x2807bb(0x19f)](_0x65a5c1,_0x1c686e,_0xdf2738);await a290_0x44da1e[_0x2807bb(0x17e)][_0x2807bb(0x1b5)](_0x333563,_0x1247e2,_0x2807bb(0x1c2));}else await a290_0x44da1e['promises'][_0x2807bb(0x180)](_0x451bcf,_0x333563);}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x46a7ee,_0x55f486){const _0x9bffc8=a291_0x58de,_0x2e9959=_0x46a7ee();while(!![]){try{const _0x306f82=parseInt(_0x9bffc8(0x9c))/0x1*(-parseInt(_0x9bffc8(0x85))/0x2)+-parseInt(_0x9bffc8(0x81))/0x3*(-parseInt(_0x9bffc8(0x84))/0x4)+-parseInt(_0x9bffc8(0x95))/0x5+parseInt(_0x9bffc8(0x8e))/0x6+parseInt(_0x9bffc8(0x96))/0x7*(-parseInt(_0x9bffc8(0x88))/0x8)+-parseInt(_0x9bffc8(0x89))/0x9*(-parseInt(_0x9bffc8(0x9e))/0xa)+parseInt(_0x9bffc8(0x82))/0xb;if(_0x306f82===_0x55f486)break;else _0x2e9959['push'](_0x2e9959['shift']());}catch(_0xe42241){_0x2e9959['push'](_0x2e9959['shift']());}}}(a291_0x5386,0xa7600));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';function a291_0x58de(_0x5c364f,_0x13c0b6){_0x5c364f=_0x5c364f-0x81;const _0x5386f3=a291_0x5386();let _0x58de8c=_0x5386f3[_0x5c364f];return _0x58de8c;}import{dirname,join}from'node:path';function a291_0x5386(){const _0x4c6c4f=['parse','now','7026216HLoJKH','lastNotifiedVersion','toLowerCase','number','https://www.npmjs.com/package/','trim','utf8','3923345UggLUg','2268zkWobj','object','stringify','latest','stableVersion',',\x20run:\x20','121ACpsJX','checkedAt','325690yNiFak','2806539zytcmE','3943522ghqBJj','yes','4KPwfoJ','14054vmqkxY','\x20available,\x20current\x20','lastNotifiedAt','17240tWYWHu','153mUmjjz','rabetbase-cli','valid'];a291_0x5386=function(){return _0x4c6c4f;};return a291_0x5386();}import a291_0x274702 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 _0x41aaac=a291_0x58de,_0x17392f=process.env.RABETBASE_NO_UPDATE_NOTICE?.['trim']()[_0x41aaac(0x90)]();return _0x17392f==='1'||_0x17392f==='true'||_0x17392f===_0x41aaac(0x83);}function cacheRoot(){return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),'.cache');}export function getUpdateNoticeCachePath(){const _0x371386=a291_0x58de;return join(cacheRoot(),_0x371386(0x8a),'update-check.json');}async function readUpdateNoticeCache(){const _0x1ee928=a291_0x58de;try{const _0x43defc=await readFile(getUpdateNoticeCachePath(),_0x1ee928(0x94)),_0x50fce6=JSON[_0x1ee928(0x8c)](_0x43defc);if(!_0x50fce6||typeof _0x50fce6!==_0x1ee928(0x97))return{};return _0x50fce6;}catch{return{};}}async function writeUpdateNoticeCache(_0x874654){const _0x2d8eaf=a291_0x58de;try{const _0x561b1a=getUpdateNoticeCachePath();await mkdir(dirname(_0x561b1a),{'recursive':!![]}),await writeFile(_0x561b1a,JSON[_0x2d8eaf(0x98)](_0x874654,null,0x2)+'\x0a',_0x2d8eaf(0x94));}catch{}}function isFreshCheck(_0x559f02,_0x6ab614){const _0xe33e8c=a291_0x58de;return typeof _0x559f02['checkedAt']===_0xe33e8c(0x91)&&_0x6ab614-_0x559f02[_0xe33e8c(0x9d)]<UPDATE_CHECK_TTL_MS;}function isRecentlyNotified(_0x5cd50f,_0x17689d,_0xbd5a13){const _0x406875=a291_0x58de;return _0x5cd50f[_0x406875(0x8f)]===_0x17689d&&typeof _0x5cd50f[_0x406875(0x87)]===_0x406875(0x91)&&_0xbd5a13-_0x5cd50f['lastNotifiedAt']<UPDATE_NOTICE_TTL_MS;}export function buildNpmVersionUrl(_0x1ee93d){const _0x3036ab=a291_0x58de;return _0x3036ab(0x92)+NPM_PACKAGE_NAME+'/v/'+_0x1ee93d;}export async function resolveLatestUpdateNotice(){const _0x494798=a291_0x58de;if(isUpdateNoticeDisabled())return null;try{const _0x379b4c=Date[_0x494798(0x8d)](),_0x2a873b=getCliVersion(),_0x5037ca=await readUpdateNoticeCache();let _0x3a9df2=isFreshCheck(_0x5037ca,_0x379b4c)?_0x5037ca[_0x494798(0x99)]?.[_0x494798(0x93)]():undefined;if(!_0x3a9df2&&!isFreshCheck(_0x5037ca,_0x379b4c)){const _0x1b59d6=await getCliVersionPolicy();_0x3a9df2=_0x1b59d6?.[_0x494798(0x9a)]?.[_0x494798(0x93)]()||undefined,await writeUpdateNoticeCache({..._0x5037ca,'checkedAt':_0x379b4c,'latest':_0x3a9df2,'failed':!_0x3a9df2});}if(!_0x3a9df2||!a291_0x274702[_0x494798(0x8b)](_0x2a873b)||!a291_0x274702[_0x494798(0x8b)](_0x3a9df2))return null;if(a291_0x274702['gte'](_0x2a873b,_0x3a9df2))return null;if(isRecentlyNotified(_0x5037ca,_0x3a9df2,_0x379b4c))return null;const _0x50e823=CLI_BIN_NAME+'\x20update';return await writeUpdateNoticeCache({..._0x5037ca,'checkedAt':isFreshCheck(_0x5037ca,_0x379b4c)?_0x5037ca[_0x494798(0x9d)]:_0x379b4c,'latest':_0x3a9df2,'failed':![],'lastNotifiedVersion':_0x3a9df2,'lastNotifiedAt':_0x379b4c}),{'command':_0x50e823,'current':_0x2a873b,'latest':_0x3a9df2,'url':buildNpmVersionUrl(_0x3a9df2),'message':CLI_BIN_NAME+'\x20'+_0x3a9df2+_0x494798(0x86)+_0x2a873b+_0x494798(0x9b)+_0x50e823};}catch{return null;}}
|
package/lib/utils/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x10e5b0,_0x49fd5a){var _0x74f010=a292_0x4fc9,_0x29a6f5=_0x10e5b0();while(!![]){try{var _0x73f443=-parseInt(_0x74f010(0xaf))/0x1*(parseInt(_0x74f010(0xae))/0x2)+-parseInt(_0x74f010(0xa6))/0x3+parseInt(_0x74f010(0xa7))/0x4+-parseInt(_0x74f010(0xaa))/0x5+-parseInt(_0x74f010(0xa8))/0x6*(parseInt(_0x74f010(0xab))/0x7)+parseInt(_0x74f010(0xa5))/0x8*(-parseInt(_0x74f010(0xac))/0x9)+-parseInt(_0x74f010(0xa9))/0xa*(-parseInt(_0x74f010(0xad))/0xb);if(_0x73f443===_0x49fd5a)break;else _0x29a6f5['push'](_0x29a6f5['shift']());}catch(_0x318769){_0x29a6f5['push'](_0x29a6f5['shift']());}}}(a292_0x1070,0xb5982));import{VERSION}from'../generated/build-info.js';function a292_0x4fc9(_0x138974,_0x239a32){_0x138974=_0x138974-0xa5;var _0x1070f3=a292_0x1070();var _0x4fc9dc=_0x1070f3[_0x138974];return _0x4fc9dc;}export function getCliVersion(){return VERSION;}function a292_0x1070(){var _0x4e50e0=['5108538mrplzm','3100210DtiwaI','4334305vbQiFl','7hVkozg','4140009OCMbOW','165twAnCH','34JNCUbR','54023QGPoVZ','24ooGNVP','1385607OdRatB','2288168bugoBN'];a292_0x1070=function(){return _0x4e50e0;};return a292_0x1070();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x26ce06,_0x164494){var _0x9d92c5=a293_0x290a,_0x1b2aaa=_0x26ce06();while(!![]){try{var _0x5ce123=-parseInt(_0x9d92c5(0x74))/0x1+parseInt(_0x9d92c5(0x79))/0x2+parseInt(_0x9d92c5(0x75))/0x3+parseInt(_0x9d92c5(0x7a))/0x4+-parseInt(_0x9d92c5(0x76))/0x5+parseInt(_0x9d92c5(0x77))/0x6+-parseInt(_0x9d92c5(0x7b))/0x7*(parseInt(_0x9d92c5(0x78))/0x8);if(_0x5ce123===_0x164494)break;else _0x1b2aaa['push'](_0x1b2aaa['shift']());}catch(_0x3bd8e9){_0x1b2aaa['push'](_0x1b2aaa['shift']());}}}(a293_0x4adc,0xbfd9b));import{setActiveCookie,clearActiveCookie}from'../core/api-client.js';function a293_0x4adc(){var _0x476dbf=['5149728Bnfnpg','754016VLRICY','531284VIPImn','740988DRASht','7IHdVVH','212457muJPsN','2574147MxViWr','5373490ARGqGQ'];a293_0x4adc=function(){return _0x476dbf;};return a293_0x4adc();}function a293_0x290a(_0x5a795b,_0x4d12e4){_0x5a795b=_0x5a795b-0x74;var _0x4adc01=a293_0x4adc();var _0x290ab0=_0x4adc01[_0x5a795b];return _0x290ab0;}export async function withActiveCookie(_0x21ab3a,_0x59700f){setActiveCookie(_0x21ab3a);try{return await _0x59700f();}finally{clearActiveCookie();}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
function a294_0x9dc0(){var _0x48a328=['206205vovCFo','2NOqaln','6HPikKi','1649301mWAALV','88RZOAdL','13707561ScblxW','12413552rWuAfP','2830509RzOfjg','write','3271581EVuGGd','152NeKYqQ','340570wOAFUw','stderr'];a294_0x9dc0=function(){return _0x48a328;};return a294_0x9dc0();}function a294_0x5eea(_0x50c956,_0x1682cf){_0x50c956=_0x50c956-0x1e5;var _0x9dc034=a294_0x9dc0();var _0x5eea2c=_0x9dc034[_0x50c956];return _0x5eea2c;}(function(_0x353bfc,_0x2a36de){var _0x18bf56=a294_0x5eea,_0x239f12=_0x353bfc();while(!![]){try{var _0x1dd5fa=-parseInt(_0x18bf56(0x1ef))/0x1*(-parseInt(_0x18bf56(0x1ed))/0x2)+parseInt(_0x18bf56(0x1e8))/0x3+-parseInt(_0x18bf56(0x1e9))/0x4*(parseInt(_0x18bf56(0x1ec))/0x5)+parseInt(_0x18bf56(0x1ee))/0x6*(parseInt(_0x18bf56(0x1f1))/0x7)+-parseInt(_0x18bf56(0x1e5))/0x8+-parseInt(_0x18bf56(0x1e6))/0x9+parseInt(_0x18bf56(0x1ea))/0xa*(-parseInt(_0x18bf56(0x1f0))/0xb);if(_0x1dd5fa===_0x2a36de)break;else _0x239f12['push'](_0x239f12['shift']());}catch(_0x56cf64){_0x239f12['push'](_0x239f12['shift']());}}}(a294_0x9dc0,0xf23f2));export function writeCliSideChannelLine(_0x12b290){var _0x9a11ad=a294_0x5eea;process[_0x9a11ad(0x1eb)][_0x9a11ad(0x1e7)](_0x12b290+'\x0a');}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lovrabet/rabetbase-cli",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.6-beta.2",
|
|
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.
|
|
4
|
-
description: "Lovrabet 开发工作流 CLI — 通过 rabetbase 命令管理数据集、数据库连接(dblink
|
|
3
|
+
version: 2.4.6-beta.2
|
|
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 visibility-update、菜单显示、菜单隐藏、visible、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
|
-
- 图表、统计卡片或数据大屏 →
|
|
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
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
6.
|
|
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
|
|
78
|
-
-
|
|
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
|
-
- 遇到“关联数据带不出 /
|
|
81
|
-
- `page sync`
|
|
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
|
-
-
|
|
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.
|
|
86
|
-
-
|
|
87
|
-
- 创建、修改或发布前,必须先阅读 [`
|
|
88
|
-
- 编写 JSX、CSS 或词包前,必须阅读 [`generation-standards.md`](knowledge/
|
|
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
|
-
|
|
261
|
+
自定义页面需要图表时,在其 React JSX 实现中使用 ECharts 呈现;只读查询且平台 `sqlCode` 权限已经满足时可以直接调用上面已发布的 Custom SQL。需要基于当前用户、角色、数据范围或业务规则做额外控制时,页面改调 BFF,由 BFF 完成校验后再执行该 Custom SQL。执行失败时保留并报告原始错误,根据 SQL 资源状态、参数与权限定位问题。
|
|
262
262
|
|
|
263
263
|
### BFF 调用
|
|
264
264
|
|
|
@@ -307,6 +307,7 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
307
307
|
| 管理当前研发应用的企业知识库 | [`rabetbase kb list/detail/create/update/delete`](references/rabetbase-kb.md) | 标准解析 `--app/--appcode`;仅 company scope;`create/update` 为 `write`,`delete` 保持 `high-risk-write` |
|
|
308
308
|
| 查询或管理应用级通知配置 | [`rabetbase notification config-list`](references/rabetbase-notification-config-list.md) / [`rabetbase notification config-create`](references/rabetbase-notification-config-mutations.md) / [`rabetbase notification config-update`](references/rabetbase-notification-config-mutations.md) / [`rabetbase notification config-delete`](references/rabetbase-notification-config-mutations.md) | list 获取 BFF 所需 `configCode`;写入只接收单一敏感 JSON 源,先 dry-run;update/delete 必须 `--yes` |
|
|
309
309
|
| 查看线上菜单事实 / 菜单异常审计 | [`rabetbase menu list`](references/rabetbase-menu-list.md) | 返回 DFS 事实、children/page、URL、最近更新人/时间和 snapshotHash;异常治理先读 [`menu-anomaly-manual-cleanup`](guides/menu-anomaly-manual-cleanup.md) |
|
|
310
|
+
| 批量显示或隐藏菜单 | [`rabetbase menu visibility-update`](references/rabetbase-menu-visibility-update.md) | 用精确 ID/path 选择目标;先 dry-run,使用 `--expect-visible` / `--expected-count` 防漂移,正式执行必须 `--yes` |
|
|
310
311
|
| 创建外部网站链接菜单 | [`rabetbase menu external-link-create`](references/rabetbase-menu-external-link-create.md) | `write`;显式选择 `embedded` 或 `new-window`,仅接受 HTTPS;建议先 dry-run,正式执行不要求 `--yes` |
|
|
311
312
|
| 原地更新既有外链 URL | [`rabetbase menu external-link-update`](references/rabetbase-menu-external-link-update.md) | `write`;精确单 ID、URL-only;必须带旧 URL 与父级断言,先 dry-run,再复用参数正式执行 |
|
|
312
313
|
| 修改任意类型菜单名称 | [`rabetbase menu rename`](references/rabetbase-menu-rename.md) | 精确单 ID、label-only;使用 `--expect-label` 防漂移,先 dry-run 并检查 before/after |
|
|
@@ -337,20 +338,20 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
337
338
|
| 查看数据集关联关系 | [`rabetbase dataset relations`](references/rabetbase-dataset-relations.md) | 标准只读入口,输出 `datasetCode + field` 关系事实;支持 `DB_TABLE -> DB_TABLE`、`DB_TABLE -> METADATA`、`METADATA -> METADATA` |
|
|
338
339
|
| 审计数据集关联关系 | [`rabetbase dataset relation-audit`](references/rabetbase-dataset-relation-audit.md) | 只读审计关系事实结构错误、风险和人工复核项 |
|
|
339
340
|
| 管理单条数据集关联关系 | [`rabetbase dataset relation-create/update/delete`](references/rabetbase-dataset-relation-mutations.md) | 单条关系写入;写入前用 `relations` 确认 `datasetCode + field` 关系事实,DB_TABLE 写入所需表名来自显式参数或物理表事实 |
|
|
340
|
-
|
|
|
341
|
-
|
|
|
342
|
-
|
|
|
343
|
-
|
|
|
344
|
-
|
|
|
345
|
-
|
|
|
346
|
-
|
|
|
347
|
-
|
|
|
348
|
-
|
|
|
349
|
-
|
|
|
350
|
-
|
|
|
351
|
-
|
|
|
352
|
-
|
|
|
353
|
-
| 恢复已删除页面 | [`rabetbase page restore --id <pageId>`](references/rabetbase-page-restore.md) | 支持
|
|
341
|
+
| 首次生成数据列表页 | [`rabetbase page generate-start --datasetcode <code>`](references/rabetbase-page-generate-start.md) | 提交或复用服务端异步任务 |
|
|
342
|
+
| 创建自定义页面 | [`rabetbase page create --page-pattern BLANK --name "客户看板"`](references/rabetbase-page-create.md) | 当前只发布 `BLANK` 模式;创建 JSX/CSS/词包及菜单;先 dry-run |
|
|
343
|
+
| 查询自定义页面 | [`rabetbase page custom-list`](references/rabetbase-page-custom-list.md) | 返回页面 ID、页面名称、`pageUrl`(查看最新保存内容)和 `editPageUrl`(打开编辑器) |
|
|
344
|
+
| 查看自定义页面详情 | [`rabetbase page custom-detail --id <pageId>`](references/rabetbase-page-custom-detail.md) | 查询页面详情,`codeContent` 包含可修改后整体提交的完整页面文件 |
|
|
345
|
+
| 更新自定义页面 | [`rabetbase page custom-update --id <pageId> --page-content <json>`](references/rabetbase-page-custom-update.md) | 保存完整页面文件并创建新版本;先 dry-run |
|
|
346
|
+
| 发布自定义页面 | [`rabetbase page custom-publish --id <pageId>`](references/rabetbase-page-custom-publish.md) | `write`;发布当前保存内容,先 dry-run 并审阅预览 |
|
|
347
|
+
| 查询数据列表页生成任务状态 | [`rabetbase page generate-status --datasetcode <code> --operation-id <id>`](references/rabetbase-page-generate-status.md) | 查询 job 状态,支持 `operationId` / `clientOperationId` |
|
|
348
|
+
| 查询数据列表页生成任务状态 | [`rabetbase page generate-status --datasetcode <code> --task-id <id>`](references/rabetbase-page-generate-status.md) | 查询 job 状态;taskId 首选,operationId/clientOperationId 兼容。成功后仍读取数据列表页事实,未知状态不得自动重提 |
|
|
349
|
+
| 查询数据列表页事实快照 | [`rabetbase page data-list-status --datasetcode <code>`](references/rabetbase-data-list-status.md) | 查询数据列表页四件套、残留页与菜单事实 |
|
|
350
|
+
| 审计数据列表页关系绑定 | [`rabetbase page relation-audit --datasetcode <code>`](references/rabetbase-page-relation-binding.md) | 只读检查数据列表页 options 绑定是否匹配 `dataset relations` |
|
|
351
|
+
| 同步已有数据列表页 | [`rabetbase page sync --datasetcode <code>`](references/rabetbase-page-sync.md) | 数据集字段变更后同步到关联数据列表页 |
|
|
352
|
+
| 拉取数据列表页 schema 到本地 | [`rabetbase page pull --id <pageId>`](references/rabetbase-page-pull.md) | 写入 `.rabetbase/page/<appCode>/`,进入本地编辑工作流 |
|
|
353
|
+
| 推送本地数据列表页 schema | [`rabetbase page push --id <pageId>`](references/rabetbase-page-push.md) | 推送后自动回拉 canonical schema 覆盖本地 |
|
|
354
|
+
| 恢复已删除页面 | [`rabetbase page restore --id <pageId>`](references/rabetbase-page-restore.md) | 支持 `DATA_LIST|CUSTOM` 自动识别;跨类型同 ID 时显式传 `--page-type` |
|
|
354
355
|
| 数据库连接(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
356
|
| 生成 API 客户端代码 | [`rabetbase api pull`](references/rabetbase-api-pull.md) | 拉取数据集并生成 `src/api/` TypeScript 代码 |
|
|
356
357
|
| 查看生成的 API 模型 | [`rabetbase api list`](references/rabetbase-api-list.md) | 列出已生成的数据模型 |
|
|
@@ -411,8 +412,8 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
411
412
|
| Tenant Members | [`tenant members-list`](references/rabetbase-tenant-members-list.md)(当前账号所属租户的全量人员目录) |
|
|
412
413
|
| app commands | [`list`](references/rabetbase-app-list.md)(只读应用事实;平台目录用 `list --remote`)/ [`members-list`](references/rabetbase-app-members-list.md)(应用人员及角色归属)。登记/移除应用改用 `workspace add` / `workspace remove` |
|
|
413
414
|
| 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
|
-
|
|
|
415
|
-
|
|
|
415
|
+
| 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) |
|
|
416
|
+
| 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
417
|
| 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
418
|
| api commands | [`pull`](references/rabetbase-api-pull.md) / [`list`](references/rabetbase-api-list.md) |
|
|
418
419
|
| 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
|
-
*
|
|
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
|
-
* [
|
|
263
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
277
|
-
* [
|
|
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
|
-
* [
|
|
280
|
-
*
|
|
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
|
-
*
|
|
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`;不直接返回通知扩展结果,并明确接受“通知已发送但后续业务仍可能失败”
|