@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.
- 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.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/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/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/{standard-page-status.d.ts → create.d.ts} +1 -1
- 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 +34 -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 +1 -1
- 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 +12 -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
|
-
|
|
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();
|
package/lib/utils/params.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
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;}
|
package/lib/utils/platform.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
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;}
|
package/lib/utils/rules-cdn.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
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();}
|
package/lib/utils/sleep.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export function sleep(
|
|
1
|
+
export function sleep(_0x19202f){return new Promise(_0x3c3ad6=>setTimeout(_0x3c3ad6,_0x19202f));}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
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(
|
|
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;}}
|
package/lib/utils/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
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(
|
|
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(
|
|
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.
|
|
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.
|
|
4
|
-
description: "Lovrabet 开发工作流 CLI — 通过 rabetbase 命令管理数据集、数据库连接(dblink
|
|
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
|
-
- 图表、统计卡片或数据大屏 →
|
|
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
|
|
|
@@ -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
|
-
|
|
|
341
|
-
|
|
|
342
|
-
|
|
|
343
|
-
|
|
|
344
|
-
|
|
|
345
|
-
|
|
|
346
|
-
|
|
|
347
|
-
|
|
|
348
|
-
|
|
|
349
|
-
|
|
|
350
|
-
|
|
|
351
|
-
|
|
|
352
|
-
|
|
|
353
|
-
| 恢复已删除页面 | [`rabetbase page restore --id <pageId>`](references/rabetbase-page-restore.md) | 支持
|
|
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
|
-
|
|
|
415
|
-
|
|
|
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
|
-
*
|
|
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`;不直接返回通知扩展结果,并明确接受“通知已发送但后续业务仍可能失败”
|