@lovrabet/rabetbase-cli 2.4.3 → 2.4.4-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/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/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.d.ts +2 -0
- package/lib/commands/db/diff-refresh-start.js +1 -0
- package/lib/commands/db/diff-refresh-status.d.ts +2 -0
- package/lib/commands/db/diff-refresh-status.js +1 -0
- 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.d.ts +2 -0
- package/lib/commands/notification/config-create.js +1 -0
- package/lib/commands/notification/config-delete.d.ts +2 -0
- package/lib/commands/notification/config-delete.js +1 -0
- package/lib/commands/notification/config-list.js +1 -1
- package/lib/commands/notification/config-update.d.ts +2 -0
- package/lib/commands/notification/config-update.js +1 -0
- package/lib/commands/notification/index.js +1 -1
- package/lib/commands/notification/shared.d.ts +97 -0
- package/lib/commands/notification/shared.js +1 -0
- package/lib/commands/ocr/index.js +1 -1
- 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/react/create.js +1 -1
- package/lib/commands/page/react/detail.js +1 -1
- package/lib/commands/page/react/list.js +1 -1
- package/lib/commands/page/react/publish.js +1 -1
- package/lib/commands/page/react/shared.js +1 -1
- package/lib/commands/page/react/syntax.js +1 -1
- package/lib/commands/page/react/template.js +1 -1
- package/lib/commands/page/react/update.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.js +1 -1
- package/lib/commands/page/standard-page-status.js +1 -1
- package/lib/commands/page/sync.js +1 -1
- package/lib/commands/permit/index.js +1 -1
- package/lib/commands/permit/page-get.js +1 -1
- package/lib/commands/permit/page-set.js +1 -1
- package/lib/commands/permit/role-apis-set.js +1 -1
- package/lib/commands/permit/role-menus-set.js +1 -1
- package/lib/commands/permit/role-menus.js +1 -1
- package/lib/commands/permit/shared.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.d.ts +1 -0
- package/lib/commands/project/create/main.js +1 -1
- package/lib/commands/project/create/materialize-project-template.d.ts +11 -0
- package/lib/commands/project/create/materialize-project-template.js +1 -0
- package/lib/commands/project/create/project-name.d.ts +2 -0
- package/lib/commands/project/create/project-name.js +1 -0
- package/lib/commands/project/create/project-template-archive.d.ts +6 -0
- package/lib/commands/project/create/project-template-archive.js +1 -0
- package/lib/commands/project/create/project-template-path.d.ts +1 -3
- package/lib/commands/project/create/project-template-path.js +1 -1
- package/lib/commands/project/create/use-copy-project-template.d.ts +2 -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/create.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.d.ts +2 -0
- 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.d.ts +1 -1
- package/lib/context.js +1 -1
- package/lib/core/alias-resolver.js +1 -1
- package/lib/core/api-client.d.ts +29 -2
- 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.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.d.ts +13 -0
- 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 +9 -4
- package/skills/rabetbase/SKILL.md +33 -22
- package/skills/rabetbase/guides/backend-function.md +5 -3
- package/skills/rabetbase/guides/bff-creation-workflow.md +2 -2
- package/skills/rabetbase/guides/conflict-detection.md +2 -2
- package/skills/rabetbase/guides/database-connection-workflow.md +39 -5
- package/skills/rabetbase/guides/react-custom-page-workflow.md +16 -4
- package/skills/rabetbase/guides/sql-creation-workflow.md +4 -2
- package/skills/rabetbase/guides/sql-mybatis.md +2 -2
- package/skills/rabetbase/knowledge/page-schema/YtPage.md +3 -37
- package/skills/rabetbase/knowledge/react-page/generation-standards.md +14 -3
- package/skills/rabetbase/references/rabetbase-app-config.md +2 -2
- package/skills/rabetbase/references/rabetbase-bff-push.md +4 -5
- package/skills/rabetbase/references/rabetbase-bff-save.md +3 -3
- package/skills/rabetbase/references/rabetbase-config.md +2 -2
- package/skills/rabetbase/references/rabetbase-db-analyze.md +2 -2
- package/skills/rabetbase/references/rabetbase-db-detail.md +3 -0
- package/skills/rabetbase/references/rabetbase-db-diff-refresh.md +53 -0
- package/skills/rabetbase/references/rabetbase-db-diff.md +40 -21
- package/skills/rabetbase/references/rabetbase-db-list.md +1 -1
- package/skills/rabetbase/references/rabetbase-kb.md +5 -3
- package/skills/rabetbase/references/rabetbase-menu-asset-update.md +9 -10
- package/skills/rabetbase/references/rabetbase-menu-external-link-update.md +1 -3
- package/skills/rabetbase/references/rabetbase-menu-regroup-start.md +2 -3
- package/skills/rabetbase/references/rabetbase-notification-config-list.md +2 -2
- package/skills/rabetbase/references/rabetbase-notification-config-mutations.md +56 -0
- package/skills/rabetbase/references/rabetbase-page-react-detail.md +1 -1
- package/skills/rabetbase/references/rabetbase-page-react-list.md +1 -1
- package/skills/rabetbase/references/rabetbase-page-react-publish.md +2 -2
- package/skills/rabetbase/references/rabetbase-project-create.md +3 -0
- package/skills/rabetbase/references/rabetbase-run.md +1 -1
- package/skills/rabetbase/references/rabetbase-sql-create.md +1 -1
- package/skills/rabetbase/references/rabetbase-sql-push.md +3 -4
- package/skills/rabetbase/references/rabetbase-user-account.md +0 -1
- package/skills/rabetbase.manifest.json +5 -5
- package/templates/README.md +14 -2
- package/lib/commands/project/create/non-interactive.d.ts +0 -9
- package/lib/commands/project/create/non-interactive.js +0 -1
- package/lib/utils/copy-directory.d.ts +0 -1
- package/lib/utils/copy-directory.js +0 -1
- package/skills/rabetbase/knowledge/page-schema/LrSmartEcharts.md +0 -291
- package/skills/rabetbase/knowledge/page-schema/LrSmartStatistic.md +0 -223
- package/templates/projects/sub-app-react-demo/.prettierrc +0 -1
- package/templates/projects/sub-app-react-demo/CHANGELOG.md +0 -67
- package/templates/projects/sub-app-react-demo/README.md +0 -246
- package/templates/projects/sub-app-react-demo/docs/quick-start.md +0 -245
- package/templates/projects/sub-app-react-demo/index.html +0 -27
- package/templates/projects/sub-app-react-demo/package.json +0 -34
- package/templates/projects/sub-app-react-demo/public/logo.svg +0 -1
- package/templates/projects/sub-app-react-demo/public/vite.svg +0 -1
- package/templates/projects/sub-app-react-demo/src/api/api.ts +0 -26
- package/templates/projects/sub-app-react-demo/src/api/client.ts +0 -32
- package/templates/projects/sub-app-react-demo/src/components/demo-page-container/DemoPageContainer.module.css +0 -28
- package/templates/projects/sub-app-react-demo/src/components/demo-page-container/DemoPageContainer.tsx +0 -55
- package/templates/projects/sub-app-react-demo/src/layouts/MainLayout.tsx +0 -308
- package/templates/projects/sub-app-react-demo/src/main.tsx +0 -52
- package/templates/projects/sub-app-react-demo/src/pages/dashboard/index.tsx +0 -570
- package/templates/projects/sub-app-react-demo/src/pages/data-screen/index.tsx +0 -531
- package/templates/projects/sub-app-react-demo/src/pages/index.module.css +0 -500
- package/templates/projects/sub-app-react-demo/src/pages/index.tsx +0 -641
- package/templates/projects/sub-app-react-demo/src/pages/sdk-demo/index.tsx +0 -536
- package/templates/projects/sub-app-react-demo/src/pages/workbench/index.module.css +0 -295
- package/templates/projects/sub-app-react-demo/src/pages/workbench/index.tsx +0 -242
- package/templates/projects/sub-app-react-demo/src/router/index.tsx +0 -30
- package/templates/projects/sub-app-react-demo/src/style.css +0 -108
- package/templates/projects/sub-app-react-demo/src/utils/api.ts +0 -12
- package/templates/projects/sub-app-react-demo/src/vite-env.d.ts +0 -2
- package/templates/projects/sub-app-react-demo/tsconfig.json +0 -26
- package/templates/projects/sub-app-react-demo/vite.config.ts +0 -111
|
@@ -1,57 +1,76 @@
|
|
|
1
1
|
# db diff
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
分页查看数据库表差异或全部数据表。只读。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 两种视角
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
| 视角 | 命令 | 服务端语义 |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| 差异表(默认) | `db diff` | 调用 `getDiffTableByPage`。表数量不大于 200 时服务端通常实时计算;大于 200 时可能读取最近一次差异快照。 |
|
|
10
|
+
| 全部表 | `db diff --view all` | 调用实时分页接口,包含 `ALREADY_ANALYZED`,用于查看无差异表或手动选择重新分析。 |
|
|
11
|
+
|
|
12
|
+
`--all` 始终表示“聚合当前视角的全部分页”,不表示“全部表”。需要全部表必须显式传 `--view all`。
|
|
9
13
|
|
|
10
14
|
## 命令
|
|
11
15
|
|
|
12
16
|
```bash
|
|
17
|
+
# 默认差异表视角
|
|
13
18
|
rabetbase db diff --id 10157 --format compress
|
|
14
|
-
rabetbase db diff --id 10157 --table order --page 1 --pagesize 20 --format compress
|
|
15
19
|
rabetbase db diff --id 10157 --all --changed-only --format compress
|
|
20
|
+
|
|
21
|
+
# 全部表实时视角
|
|
22
|
+
rabetbase db diff --id 10157 --view all --page 1 --pagesize 20 --format compress
|
|
23
|
+
rabetbase db diff --id 10157 --view all --all --format compress
|
|
16
24
|
```
|
|
17
25
|
|
|
18
26
|
## 参数
|
|
19
27
|
|
|
20
28
|
| Flag | 必填 | 说明 |
|
|
21
|
-
|
|
29
|
+
|---|---|---|
|
|
22
30
|
| `--id` | **是** | dblink id |
|
|
31
|
+
| `--view` | 否 | `diff`(默认)或 `all` |
|
|
23
32
|
| `--table` | 否 | 表名模糊过滤 |
|
|
24
33
|
| `--page` / `--pagesize` | 否 | 默认 `1` / `20` |
|
|
25
|
-
| `--all`
|
|
26
|
-
| `--changed-only`
|
|
34
|
+
| `--all` | 否 | 从第 1 页开始按 `pageSize=100` 自动聚合当前视角全部分页;优先级高于 `--page / --pagesize` |
|
|
35
|
+
| `--changed-only` | 否 | 从输出行中排除 `ALREADY_ANALYZED`;保留 `DELETED_TABLE` |
|
|
36
|
+
|
|
37
|
+
## 刷新决策
|
|
38
|
+
|
|
39
|
+
先执行 `db detail --id <id>` 读取 `tableCount`:
|
|
40
|
+
|
|
41
|
+
- `tableCount <= 200`:直接读取 `db diff`;除非用户明确要求,否则不要刷新。
|
|
42
|
+
- `tableCount > 200`:读取前建议按 [`db diff-refresh-start/status`](rabetbase-db-diff-refresh.md) 刷新差异快照。
|
|
43
|
+
- 用户明确要求“实时刷新/强制刷新”:不考虑表数量,执行刷新。
|
|
44
|
+
- 用户明确要求“不刷新/只看现有结果”:直接读取;大库需提示结果可能滞后。
|
|
45
|
+
- `tableCount` 缺失:直接读取并说明新鲜度未知,不要因为未知而隐式发起写任务。
|
|
46
|
+
|
|
47
|
+
`db diff` 是只读命令,绝不隐式启动刷新任务。
|
|
27
48
|
|
|
28
49
|
## 机器可读摘要
|
|
29
50
|
|
|
30
51
|
| 字段 | 语义 |
|
|
31
|
-
|
|
52
|
+
|---|---|
|
|
53
|
+
| `view` | 当前视角:`diff` 或 `all` |
|
|
32
54
|
| `summaryByType` | 本次查询范围内四种 `diffType` 的计数 |
|
|
33
55
|
| `toAnalyzeTables` | 仅包含 `NEW_TABLE` 与 `MODIFIED_TABLE` 的表名,可传给 `analyze-start --tables` |
|
|
34
56
|
| `deletedTables` | 仅包含 `DELETED_TABLE`,供人工确认,不自动分析或清理 |
|
|
35
57
|
| `modifiedFieldDiffs` | 修改表的新增、删除、变更字段摘要 |
|
|
36
58
|
|
|
37
|
-
未传 `--all`
|
|
59
|
+
未传 `--all` 时,派生字段只代表当前页。默认差异视角通常不会返回 `physicalTableCount`、`datasetTableCount` 或 `summary`;CLI 不以 `0` 伪造缺失值。全表实时视角在服务端提供这些字段时会原样返回。
|
|
38
60
|
|
|
39
|
-
## `diffType`
|
|
40
|
-
|
|
41
|
-
接口返回 `IDbTableDiffInfo.diffType`,工作台「数据库连接 → 增量分析」里对每行表的展示文案如下,可与 CLI 输出对照:
|
|
61
|
+
## `diffType` 语义
|
|
42
62
|
|
|
43
63
|
| `diffType` | 界面文案 | 含义 |
|
|
44
|
-
|
|
45
|
-
| `NEW_TABLE`
|
|
46
|
-
| `DELETED_TABLE`
|
|
47
|
-
| `MODIFIED_TABLE`
|
|
48
|
-
| `ALREADY_ANALYZED` | 无差异
|
|
49
|
-
|
|
50
|
-
`DELETED_TABLE` 不会进入 `toAnalyzeTables`。如果自动分页在达到 `totalCount` 前遇到空页或不再产生新的唯一表,命令会失败,不把部分结果当作完整结果返回。
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| `NEW_TABLE` | 表新增 | 物理库中有该表,但尚未纳入或尚未完成上次智能分析。 |
|
|
66
|
+
| `DELETED_TABLE` | 表删除 | 相对上次已分析结果,该表在库侧已不存在或已被移除。 |
|
|
67
|
+
| `MODIFIED_TABLE` | 表修改 | 表仍在,但结构相对上次分析有变化。 |
|
|
68
|
+
| `ALREADY_ANALYZED` | 无差异 | 当前表结构与上次分析结果一致;在 `--view all` 中可供用户主动重新分析。 |
|
|
51
69
|
|
|
52
|
-
|
|
70
|
+
`DELETED_TABLE` 不进入 `toAnalyzeTables`。自动分页在达到 `totalCount` 前遇到空页或没有新增唯一表时,命令失败,不把部分结果伪装成完整结果。
|
|
53
71
|
|
|
54
72
|
## 参考
|
|
55
73
|
|
|
74
|
+
- [差异刷新](rabetbase-db-diff-refresh.md)
|
|
56
75
|
- [database-connection-workflow.md](../guides/database-connection-workflow.md)
|
|
57
76
|
- [SKILL.md](../SKILL.md)
|
|
@@ -27,7 +27,7 @@ rabetbase db list --appcode app-xxxx --format compress
|
|
|
27
27
|
|
|
28
28
|
## 输出要点
|
|
29
29
|
|
|
30
|
-
- `connections[]`:每条含 `id`、`dbName`、`dbType`、`latestAnalysisStatus`、`latestAnalysisTraceId` 等
|
|
30
|
+
- `connections[]`:每条含 `id`、`dbName`、`dbType`、`latestAnalysisStatus`、`latestAnalysisTraceId`,以及服务端提供时的 `tableCount` 等
|
|
31
31
|
- 返回中密码已脱敏
|
|
32
32
|
- 若接口未返回分页元数据,`paging.totalCount` 为 `null` 并带 `note`,**勿将本页条数当作全量总数**
|
|
33
33
|
|
|
@@ -11,9 +11,9 @@ rabetbase kb list --format compress
|
|
|
11
11
|
rabetbase kb list --appcode app-xxxxx --title "业务规则" --format compress
|
|
12
12
|
rabetbase kb detail --id 60 --format compress
|
|
13
13
|
rabetbase kb create --title "业务规则" --file ./knowledge.md --dry-run
|
|
14
|
-
rabetbase kb create --title "业务规则" --file ./knowledge.md
|
|
14
|
+
rabetbase kb create --title "业务规则" --file ./knowledge.md
|
|
15
15
|
rabetbase kb update --id 60 --file ./knowledge.md --expected-version 2 --dry-run
|
|
16
|
-
rabetbase kb update --id 60 --file ./knowledge.md --expected-version 2
|
|
16
|
+
rabetbase kb update --id 60 --file ./knowledge.md --expected-version 2
|
|
17
17
|
rabetbase kb delete --id 60 --dry-run
|
|
18
18
|
rabetbase kb delete --id 60 --yes
|
|
19
19
|
```
|
|
@@ -33,9 +33,10 @@ rabetbase kb delete --id 60 --yes
|
|
|
33
33
|
|
|
34
34
|
## create
|
|
35
35
|
|
|
36
|
+
- `create/update` 为 `write`,正式执行不要求 `--yes`;仍应先审阅 dry-run。
|
|
36
37
|
- 只需 `--title`、`--file`;应用由标准全局应用解析得到。
|
|
37
38
|
- 写前按 `(company, appCode, title)` 精确检查重复。
|
|
38
|
-
-
|
|
39
|
+
- 审阅 dry-run 后,使用相同参数移除 `--dry-run` 正式执行;请求最多提交一次。
|
|
39
40
|
- 正常响应使用服务端返回 VO/ID 并按 ID 回读。只有底层响应不确定时,才按同一 company/app/title 三元组做只读恢复;零条或多条都返回 outcome unknown,绝不自动重提。
|
|
40
41
|
- 授权、权限、参数和其他确定性服务端错误直接失败,不能用旧状态回读伪装成成功。
|
|
41
42
|
|
|
@@ -50,6 +51,7 @@ rabetbase kb delete --id 60 --yes
|
|
|
50
51
|
## delete
|
|
51
52
|
|
|
52
53
|
- 已验证服务端合同:`POST /admin/knowledge-base/delete`,请求体 `{id}`,成功为 `Result<Void>`。
|
|
54
|
+
- `delete` 保持 `high-risk-write`;正式执行必须显式 `--yes`,并建议先审阅 dry-run。
|
|
53
55
|
- 写前读取目标,校验 ID、company scope、appCode、可选 expected-version 和安全快照;`--expected-version` 仍是非原子断言,dry-run 明确输出 `atomicCompareAndSet: false`。
|
|
54
56
|
- 目标明确不存在时返回 no-op 且不发请求;只有服务端 `DATA_NOT_EXIST (306)` 可识别为不存在,`PARAM_INVALID (103)`、权限、认证或传输错误不能降级为 no-op。
|
|
55
57
|
- 正式删除最多提交一次,再按同一 ID 回读;明确不存在用于验证数据库软删除。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
更新指定线上微前端菜单的 CDN 资源 URL。
|
|
4
4
|
|
|
5
|
-
> **风险等级:
|
|
5
|
+
> **风险等级:write** — 修改线上菜单运行资源;建议先 dry-run,正式执行复用相同参数并移除 `--dry-run`。
|
|
6
6
|
|
|
7
7
|
## 命令
|
|
8
8
|
|
|
@@ -12,7 +12,7 @@ rabetbase menu asset-update
|
|
|
12
12
|
|
|
13
13
|
# 使用 menu list 返回的真实 path 精确预览并更新
|
|
14
14
|
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://...css"}' --dry-run --format compress
|
|
15
|
-
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://...css"}' --
|
|
15
|
+
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://...css"}' --format compress
|
|
16
16
|
|
|
17
17
|
# 按菜单 ID 精确更新,并显式切换加载方式
|
|
18
18
|
rabetbase menu asset-update --menu-ids "<menu-id>" --load-mode fetch --params '{"jsUrl":"https://...js"}' --dry-run --format compress
|
|
@@ -53,7 +53,7 @@ rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://.
|
|
|
53
53
|
5. **正式执行必须复用 dry-run 的同一组 selector、`--mode` 和 `--params`**:
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://...css"}' --
|
|
56
|
+
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://...css"}' --format compress
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
6. **执行后回查资源现状**:
|
|
@@ -67,15 +67,15 @@ rabetbase menu list --format json --jq '.data.menus[] | select(.resources | leng
|
|
|
67
67
|
```bash
|
|
68
68
|
# 只替换 CSS,保留已有 JS
|
|
69
69
|
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://cdn.example.com/app.css"}' --dry-run --format compress
|
|
70
|
-
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://cdn.example.com/app.css"}' --
|
|
70
|
+
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://cdn.example.com/app.css"}' --format compress
|
|
71
71
|
|
|
72
72
|
# 只替换 JS,保留已有 CSS
|
|
73
73
|
rabetbase menu asset-update --menu-ids "<menu-id>" --params '{"jsUrl":"https://cdn.example.com/app.js"}' --dry-run --format compress
|
|
74
|
-
rabetbase menu asset-update --menu-ids "<menu-id>" --params '{"jsUrl":"https://cdn.example.com/app.js"}' --
|
|
74
|
+
rabetbase menu asset-update --menu-ids "<menu-id>" --params '{"jsUrl":"https://cdn.example.com/app.js"}' --format compress
|
|
75
75
|
|
|
76
76
|
# 显式更新全部菜单的 JS + CSS
|
|
77
77
|
rabetbase menu asset-update --all --params '{"jsUrl":"https://cdn.example.com/app.js","cssUrl":"https://cdn.example.com/app.css"}' --dry-run --format compress
|
|
78
|
-
rabetbase menu asset-update --all --params '{"jsUrl":"https://cdn.example.com/app.js","cssUrl":"https://cdn.example.com/app.css"}' --
|
|
78
|
+
rabetbase menu asset-update --all --params '{"jsUrl":"https://cdn.example.com/app.js","cssUrl":"https://cdn.example.com/app.css"}' --format compress
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
## 参数
|
|
@@ -86,7 +86,6 @@ rabetbase menu asset-update --all --params '{"jsUrl":"https://cdn.example.com/ap
|
|
|
86
86
|
| `--menu-ids <csv>` | string | 至少一个 selector | — | 精确菜单 ID;只接受正安全整数;可与 paths 组合,不可与 all 组合 |
|
|
87
87
|
| `--paths <csv>` | string | 至少一个 selector | — | 精确菜单 path;可与 menu-ids 组合,不可与 all 组合 |
|
|
88
88
|
| `--all` | boolean | 至少一个 selector | `false` | 显式选择所有已有 resources 的菜单;不可与 ID/path 组合 |
|
|
89
|
-
| `--yes` | boolean | 正式执行必填 | — | 跳过高风险确认并更新已选择菜单,必须配合有效 `--params` |
|
|
90
89
|
| `--mode <mode>` | string | 否 | `patch` | `patch` 只在目标唯一时替换传入的同类型资源并保留其他资源;`replace` 将传入 URL 作为完整 `resources` |
|
|
91
90
|
| `--load-mode <mode>` | string | 否 | 保留线上值 | 显式修改为 `import`、`script` 或 `fetch` |
|
|
92
91
|
| `--force` | boolean | 否 | `false` | 允许 `replace` 删除已有 JS 资源;仅用于明确的资源降级/迁移 |
|
|
@@ -96,7 +95,7 @@ rabetbase menu asset-update --all --params '{"jsUrl":"https://cdn.example.com/ap
|
|
|
96
95
|
## 执行模式
|
|
97
96
|
|
|
98
97
|
1. **selector + `--params` + `--dry-run`** — 非交互预览精确目标;全量必须显式 `--all`
|
|
99
|
-
2. **selector + `--params
|
|
98
|
+
2. **selector + `--params`** — 正式更新精确目标;必须复用 dry-run 参数并移除 `--dry-run`
|
|
100
99
|
3. **TTY 交互式** — 未给 selector 时展示全部有资源菜单并二次确认;给 selector 时只展示目标
|
|
101
100
|
|
|
102
101
|
## 输出
|
|
@@ -109,7 +108,7 @@ rabetbase menu asset-update --all --params '{"jsUrl":"https://cdn.example.com/ap
|
|
|
109
108
|
## 提示
|
|
110
109
|
|
|
111
110
|
- 仅更新已配置了资源 URL 且被 selector 命中的菜单
|
|
112
|
-
- 非交互和 dry-run 缺 selector
|
|
111
|
+
- 非交互和 dry-run 缺 selector 会被拒绝;空 `--params` 也会被拒绝
|
|
113
112
|
- 写入采用 read-modify-write:默认只更新 `extend.resources`,保留 `loadScriptMode` 和其他扩展字段
|
|
114
113
|
- 只有显式传 `--load-mode` 才修改加载方式
|
|
115
114
|
- 默认 `patch`;使用 `replace` 时仍会阻止无意删除已有 JS
|
|
@@ -120,7 +119,7 @@ rabetbase menu asset-update --all --params '{"jsUrl":"https://cdn.example.com/ap
|
|
|
120
119
|
## 常见错误
|
|
121
120
|
|
|
122
121
|
- 跳过 `--dry-run` 直接写入。
|
|
123
|
-
-
|
|
122
|
+
- 缺 selector 或传空 `--params`。
|
|
124
123
|
- 需要单菜单更新却使用 `--all`。
|
|
125
124
|
- 只想换 CSS 却显式使用 `replace`,导致已有 JS 被删除风险。
|
|
126
125
|
- dry-run 已出现删除 JS warning,仍未取得用户明确确认就继续执行。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
按精确 ID 原地更新一个既有 `iframe` 或 `link` 叶子菜单的 URL。只修改 URL,不删除重建菜单。
|
|
4
4
|
|
|
5
|
-
> **风险等级:
|
|
5
|
+
> **风险等级:write** — 会改变线上菜单实际打开地址;建议先 dry-run,正式执行复用相同参数并移除 `--dry-run`。
|
|
6
6
|
|
|
7
7
|
## 命令
|
|
8
8
|
|
|
@@ -20,7 +20,6 @@ rabetbase menu external-link-update \
|
|
|
20
20
|
--url "https://admin.example.com/new-page?hideShell=true" \
|
|
21
21
|
--expect-url "https://admin.example.com/old-page?hideShell=true" \
|
|
22
22
|
--expect-parent-id "<folder-id|root>" \
|
|
23
|
-
--yes \
|
|
24
23
|
--format compress
|
|
25
24
|
```
|
|
26
25
|
|
|
@@ -34,7 +33,6 @@ rabetbase menu external-link-update \
|
|
|
34
33
|
| `--expect-parent-id <id\|root>` | string | 是 | — | 始终断言当前父级 |
|
|
35
34
|
| `--appcode <code>` | string | 否 | 配置解析 | 显式指定 App Code |
|
|
36
35
|
| `--dry-run` | boolean | 否 | `false` | 输出精确 URL patch,不写入 |
|
|
37
|
-
| `--yes` | boolean | 正式执行必填 | — | 明确确认高风险写入 |
|
|
38
36
|
|
|
39
37
|
## 目标边界
|
|
40
38
|
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
提交一个异步任务:新建根级 folder,并将一组精确的非 folder 叶子菜单放入其中。命令返回重新分组任务的 `taskId/status`。
|
|
4
4
|
|
|
5
|
-
> **风险等级:
|
|
5
|
+
> **风险等级:write** — 建议先 dry-run,正式执行复用相同参数并移除 `--dry-run`。
|
|
6
6
|
|
|
7
7
|
## 命令
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
rabetbase menu regroup-start --label "业务管理" --menu-ids "<menu-id-1>,<menu-id-2>" --dry-run --format compress
|
|
11
|
-
rabetbase menu regroup-start --label "业务管理" --menu-ids "<menu-id-1>,<menu-id-2>" --
|
|
11
|
+
rabetbase menu regroup-start --label "业务管理" --menu-ids "<menu-id-1>,<menu-id-2>" --format compress
|
|
12
12
|
rabetbase task status --task-id "<task-id>" --format compress
|
|
13
13
|
```
|
|
14
14
|
|
|
@@ -19,7 +19,6 @@ rabetbase task status --task-id "<task-id>" --format compress
|
|
|
19
19
|
| `--label <label>` | string | 是 | 新建根 folder 名称;不能与现有根 folder 同名 |
|
|
20
20
|
| `--menu-ids <ids>` | string | 是 | 逗号分隔的精确叶子菜单 ID,最多 100 个 |
|
|
21
21
|
| `--dry-run` | boolean | 预览时 | 返回当前快照、before/after 和请求体,不写入 |
|
|
22
|
-
| `--yes` | boolean | 正式执行时 | 显式授权重新分组 |
|
|
23
22
|
|
|
24
23
|
## 状态流
|
|
25
24
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# rabetbase notification config-list
|
|
2
2
|
|
|
3
|
-
只读查询当前应用的应用级通知渠道配置,主要用于获取 BFF
|
|
3
|
+
只读查询当前应用的应用级通知渠道配置,主要用于获取 BFF 消息通知扩展需要的应用级 `configCode`。
|
|
4
4
|
|
|
5
5
|
## 命令
|
|
6
6
|
|
|
@@ -69,7 +69,7 @@ await context.client.extension.execute("notification", "send", {
|
|
|
69
69
|
边界:
|
|
70
70
|
|
|
71
71
|
* `configCode` 是应用级通知配置编码。
|
|
72
|
-
*
|
|
72
|
+
* 数据集级通知通道的 `channelCode` 不能替代应用级 `configCode`;创建、更新和删除应用级配置见 [`rabetbase-notification-config-mutations.md`](rabetbase-notification-config-mutations.md)。
|
|
73
73
|
* 没有查询结果时,不要编造配置编码。
|
|
74
74
|
* 多个候选无法判断时,向用户确认,不要默认取第一条。
|
|
75
75
|
* 该命令不会发送通知,也不会修改平台配置。
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# rabetbase notification config-create / config-update / config-delete
|
|
2
|
+
|
|
3
|
+
管理当前应用的应用级通知配置。它们使用应用级 `configCode`;数据集级通知通道的 `channelCode` 不能作为这些命令的输入,也不能替代 `configCode`。
|
|
4
|
+
|
|
5
|
+
## 命令与风险
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
rabetbase notification config-create --file notification.json --dry-run --format compress
|
|
9
|
+
rabetbase notification config-create --file notification.json --format compress
|
|
10
|
+
|
|
11
|
+
rabetbase notification config-update --id 88 --from-env NOTIFICATION_CONFIG_JSON --dry-run --format compress
|
|
12
|
+
rabetbase notification config-update --id 88 --from-env NOTIFICATION_CONFIG_JSON --yes --format compress
|
|
13
|
+
|
|
14
|
+
rabetbase notification config-delete --id 88 --dry-run --format compress
|
|
15
|
+
rabetbase notification config-delete --id 88 --yes --format compress
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
* `config-create` 是 `write`:支持 `--dry-run`,预览后可执行。
|
|
19
|
+
* `config-update --id <id>` 和 `config-delete --id <id>` 是 `high-risk-write`:强烈建议先运行 `--dry-run`,正式执行必须显式添加 `--yes`。
|
|
20
|
+
* 删除应用级配置可能使引用它的数据集级通道不可用;CLI 不会验证引用关系。先确认影响范围再删除。
|
|
21
|
+
|
|
22
|
+
## 安全 JSON 输入
|
|
23
|
+
|
|
24
|
+
create 和 update 必须在下列来源中恰好一个:`--file <path>`、`--stdin` 或 `--from-env <NAME>`。不得同时使用多个来源,也不要把敏感 JSON 放进命令行参数。
|
|
25
|
+
|
|
26
|
+
输入 JSON 是 CLI 文档,不是服务端原始 DTO。允许的顶层字段只有:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"configName": "Technical alerts",
|
|
31
|
+
"channelType": "FEISHU",
|
|
32
|
+
"endpointUrl": "<sensitive endpoint>",
|
|
33
|
+
"channelConfig": { "credential": "<sensitive value>" },
|
|
34
|
+
"description": "Technical alert bot",
|
|
35
|
+
"connectTimeout": 5000,
|
|
36
|
+
"readTimeout": 10000
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`channelConfig` 必须是 JSON 对象,CLI 会将其序列化为服务端所需格式。`config-create` 必须提供非空 `configName` 和 `channelType`;`config-update` 至少提供一个允许字段。支持类型:`EMAIL`、`FEISHU`、`DINGTALK`、`WECOM`、`WEBHOOK`。
|
|
41
|
+
|
|
42
|
+
禁止提交 `id`、`appCode`、`configCode`、`channelCode` 或任何未知顶层字段。服务端负责渠道专有的 endpoint 与凭据规则。显式 `null` 可清空可选字符串;`connectTimeout` 或 `readTimeout` 为 `null` 会恢复服务端默认超时:`connectTimeout` 为 `5000`、`readTimeout` 为 `10000`。
|
|
43
|
+
|
|
44
|
+
## 输出与结果确认
|
|
45
|
+
|
|
46
|
+
预览和执行均返回 `operation`、`selector`、`before`、`after`、`dryRun`、`backend`、`warnings`、`verification`。输出不包含真实 `endpointUrl`、webhook token、SMTP 凭据、`channelConfig`、环境变量值、stdin 内容或文件内容;已设置的敏感字段显示为 `<redacted>`。
|
|
47
|
+
|
|
48
|
+
update 会读取精确 ID 并合并补丁,省略的字段及服务端已脱敏的敏感字段都会保留。create 和 update 按精确 ID 回读确认;delete 按删除前的 `channelType` 列表确认 ID 不存在。
|
|
49
|
+
|
|
50
|
+
请求结果未知、网络中断或回读无法证明结果时,不得自动重提。只执行只读查询:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
rabetbase notification config-list --appcode app-xxxxx --type FEISHU --format compress
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
根据返回的 `configName`、`description`、`configCode` 与操作前记录人工确认后再决定下一步。
|
|
@@ -21,6 +21,6 @@ rabetbase page react-detail --id <pageId> --format compress
|
|
|
21
21
|
|
|
22
22
|
- `pageUrl`:查看最新保存内容的页面地址,包含尚未发布的修改
|
|
23
23
|
- `runtimePageUrl`:查看已发布内容的页面地址,仅在有已发布内容时返回;格式为 `https://<appCode>.app.lovrabet.com/<pageCode>`(线上)或 `https://<appCode>.daily.lovrabet.com/<pageCode>`(日常)
|
|
24
|
-
- `editPageUrl
|
|
24
|
+
- `editPageUrl`:打开页面编辑器的地址,可继续修改页面;线上为 `https://app.lovrabet.com/app/<appCode>/ide/<pageId>`,日常为 `https://daily.lovrabet.com/web-app/app/<appCode>/ide/<pageId>`
|
|
25
25
|
|
|
26
26
|
`data.codeContent` 是当前完整页面文件,可在本地完成新增、修改或删除后,作为 `page react-update --page-content <json>` 的完整页面内容提交。
|
|
@@ -20,4 +20,4 @@ rabetbase page react-list --appcode <appCode> --format json
|
|
|
20
20
|
|
|
21
21
|
- `label`:页面名称
|
|
22
22
|
- `pageUrl`:查看最新保存内容的页面地址,包含尚未发布的修改;日常为 `https://daily.lovrabet.com/web-app/app/<appCode>/pages/<path>`,线上为 `https://app.lovrabet.com/app/<appCode>/pages/<path>`
|
|
23
|
-
- `editPageUrl
|
|
23
|
+
- `editPageUrl`:打开页面编辑器的地址,可继续修改页面;线上为 `https://app.lovrabet.com/app/<appCode>/ide/<pageId>`,日常为 `https://daily.lovrabet.com/web-app/app/<appCode>/ide/<pageId>`
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
rabetbase page react-publish --id <pageId> --dry-run --format compress
|
|
7
|
-
rabetbase page react-publish --id <pageId> --remark "发布说明"
|
|
7
|
+
rabetbase page react-publish --id <pageId> --remark "发布说明"
|
|
8
8
|
```
|
|
9
9
|
|
|
10
10
|
## 参数
|
|
@@ -19,5 +19,5 @@ rabetbase page react-publish --id <pageId> --remark "发布说明" --yes
|
|
|
19
19
|
1. 先使用 `page react-detail` 检查 `status` 和页面版本
|
|
20
20
|
2. `status` 为 `FORMAL` 时表示当前内容已经发布,跳过发布,继续查看已发布页面或后续流程
|
|
21
21
|
3. `status` 不是 `FORMAL` 时,使用 `--dry-run` 确认目标页面和发布备注
|
|
22
|
-
4.
|
|
22
|
+
4. 审阅预览后,使用相同参数移除 `--dry-run` 执行发布
|
|
23
23
|
5. 命令发布后回读确认 `data.after.status` 为 `FORMAL`;`data.runtimePageUrl` 查看最近一次已发布内容,`data.pageUrl` 查看最新保存内容(包含尚未发布的修改),`data.editPageUrl` 用于打开页面编辑器。
|
|
@@ -38,6 +38,9 @@ rabetbase project create my-project --appcode <code> --env production
|
|
|
38
38
|
|
|
39
39
|
- `--name` 和位置参数二选一,`--name` 优先
|
|
40
40
|
- 非交互模式下缺少项目名会报错
|
|
41
|
+
- 项目名只接受字母、数字、`-`、`_`,不能传绝对路径、`../`、子目录路径或 Windows 保留名称
|
|
42
|
+
- 交互与非交互模式使用同一创建流程,都会安装依赖、格式化代码并写入项目配置
|
|
43
|
+
- 项目模板从 CDN 下载并校验 SHA-256;CDN 不可用、模板不兼容或校验失败时命令停止,修复后重试
|
|
41
44
|
- 新项目中的 `.rabetbase.json` **只继承**全局中的少量偏好(如 `cookie`、`accessKey`、`locale`、`format`、`riskLevel`),**不会**把全局的 `apps` / `defaultApp` 复制进新项目
|
|
42
45
|
|
|
43
46
|
## 参考
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
执行 `package.json` 中定义的脚本。
|
|
4
4
|
|
|
5
|
-
> **风险等级:
|
|
5
|
+
> **风险等级:write** — 任意 package script 都可能修改本地文件、调用远端服务或执行发布动作。执行前必须先审阅 `package.json` 中对应脚本;嵌入式 Rabetbase 工具暂不开放 `run`。
|
|
6
6
|
|
|
7
7
|
## 命令
|
|
8
8
|
|
|
@@ -33,7 +33,7 @@ rabetbase sql create --name getUserMapper --db-id 10001 --mode mybatisXml --form
|
|
|
33
33
|
## 提示
|
|
34
34
|
|
|
35
35
|
- 团队长期维护 SQL 时,用 `sql create` 建立本地同步资产
|
|
36
|
-
- 生成后通常继续执行:编辑本地文件 → `sql validate --file ...` → `sql status` → `sql push --sqlcode ... --dry-run` → `sql push --sqlcode
|
|
36
|
+
- 生成后通常继续执行:编辑本地文件 → `sql validate --file ...` → `sql status` → `sql push --sqlcode ... --dry-run` → `sql push --sqlcode ...`
|
|
37
37
|
|
|
38
38
|
## 参考
|
|
39
39
|
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
将本地同步目录中的 SQL 文件上传到远端,并刷新 `.rabetbase/sql.lock.json`。
|
|
4
4
|
|
|
5
|
-
> **风险等级:
|
|
5
|
+
> **风险等级:write** — 建议先 `--dry-run` 预览。
|
|
6
6
|
|
|
7
7
|
## 命令
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
rabetbase sql push --format json
|
|
11
11
|
rabetbase sql push --sqlcode 2305f915-dd48cd4c --dry-run --format json
|
|
12
|
-
rabetbase sql push --sqlcode 2305f915-dd48cd4c --
|
|
13
|
-
rabetbase sql push --sqlcode 2305f915-dd48cd4c --force --
|
|
12
|
+
rabetbase sql push --sqlcode 2305f915-dd48cd4c --format json
|
|
13
|
+
rabetbase sql push --sqlcode 2305f915-dd48cd4c --force --format json
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
## 参数
|
|
@@ -20,7 +20,6 @@ rabetbase sql push --sqlcode 2305f915-dd48cd4c --force --yes --format json
|
|
|
20
20
|
| `--sqlcode <code>` | string | 否 | — | 仅推指定 SQL;不传则扫描当前应用同步目录下的全部 SQL |
|
|
21
21
|
| `--force` | boolean | 否 | — | 即使本地 hash 与 lock 一致也强制推送 |
|
|
22
22
|
| `--dry-run` | boolean | 否 | — | 仅预览会推哪些 SQL |
|
|
23
|
-
| `--yes` | boolean | 否 | — | 跳过高风险确认 |
|
|
24
23
|
| `--format <fmt>` | string | 否 | `compress` | 输出格式 |
|
|
25
24
|
|
|
26
25
|
## 行为说明
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"name": "rabetbase",
|
|
4
4
|
"packageName": "@lovrabet/rabetbase-cli",
|
|
5
|
-
"packageVersion": "2.4.
|
|
6
|
-
"skillVersion": "2.4.
|
|
5
|
+
"packageVersion": "2.4.4-beta.1",
|
|
6
|
+
"skillVersion": "2.4.4-beta.1",
|
|
7
7
|
"files": [
|
|
8
8
|
"SKILL.md",
|
|
9
9
|
"guides/backend-function.md",
|
|
@@ -24,10 +24,8 @@
|
|
|
24
24
|
"guides/typescript-sdk.md",
|
|
25
25
|
"knowledge/page-schema/LrSmartCreate.md",
|
|
26
26
|
"knowledge/page-schema/LrSmartDetail.md",
|
|
27
|
-
"knowledge/page-schema/LrSmartEcharts.md",
|
|
28
27
|
"knowledge/page-schema/LrSmartFilter.md",
|
|
29
28
|
"knowledge/page-schema/LrSmartJsx.md",
|
|
30
|
-
"knowledge/page-schema/LrSmartStatistic.md",
|
|
31
29
|
"knowledge/page-schema/LrSmartTable.md",
|
|
32
30
|
"knowledge/page-schema/YtPage.md",
|
|
33
31
|
"knowledge/page-schema/dataset-relations.md",
|
|
@@ -72,6 +70,7 @@
|
|
|
72
70
|
"references/rabetbase-db-create.md",
|
|
73
71
|
"references/rabetbase-db-delete.md",
|
|
74
72
|
"references/rabetbase-db-detail.md",
|
|
73
|
+
"references/rabetbase-db-diff-refresh.md",
|
|
75
74
|
"references/rabetbase-db-diff.md",
|
|
76
75
|
"references/rabetbase-db-list.md",
|
|
77
76
|
"references/rabetbase-db-tables.md",
|
|
@@ -94,6 +93,7 @@
|
|
|
94
93
|
"references/rabetbase-menu-rename.md",
|
|
95
94
|
"references/rabetbase-menu-sync.md",
|
|
96
95
|
"references/rabetbase-notification-config-list.md",
|
|
96
|
+
"references/rabetbase-notification-config-mutations.md",
|
|
97
97
|
"references/rabetbase-ocr.md",
|
|
98
98
|
"references/rabetbase-page-generate-start.md",
|
|
99
99
|
"references/rabetbase-page-generate-status.md",
|
|
@@ -133,5 +133,5 @@
|
|
|
133
133
|
"references/rabetbase-user-account.md",
|
|
134
134
|
"references/rabetbase-workspace.md"
|
|
135
135
|
],
|
|
136
|
-
"digest": "
|
|
136
|
+
"digest": "6169fd253d752d93e8f6528a2a2068e146360bbf8916bfe0434e6a8ee67b049a"
|
|
137
137
|
}
|
package/templates/README.md
CHANGED
|
@@ -20,7 +20,7 @@ templates/
|
|
|
20
20
|
|
|
21
21
|
### 远程模板同步
|
|
22
22
|
|
|
23
|
-
`projects/sub-app-react-demo/`
|
|
23
|
+
`projects/sub-app-react-demo/` 目录是从模板真源仓同步来的 CDN 构建源:
|
|
24
24
|
**仓库地址**: https://github.com/lovrabet/sub-app-react-demo
|
|
25
25
|
|
|
26
26
|
#### 开发者:同步模板
|
|
@@ -31,9 +31,20 @@ templates/
|
|
|
31
31
|
npm run sync-template
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
+
模板同步完成后,更新模板自身的 `package.json#version`,再生成待发布的 CDN 资产:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm run sync:cdn
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
该命令会在 `dist/rabetbase-cli/templates/projects/` 下生成
|
|
41
|
+
`sub-app-react-demo.zip`,并把版本、文件名、大小和 SHA-256 写入现有
|
|
42
|
+
`dist/rabetbase-cli/config/index.json`。ZIP 使用固定地址,每次发布直接覆盖。
|
|
43
|
+
|
|
34
44
|
### 模板结构
|
|
35
45
|
|
|
36
46
|
项目模板应维护以下结构:
|
|
47
|
+
|
|
37
48
|
- 标准的 React + Vite 设置
|
|
38
49
|
- Ant Design 集成
|
|
39
50
|
- icestark 微前端配置
|
|
@@ -51,7 +62,8 @@ npm run sync-template
|
|
|
51
62
|
## 注意事项
|
|
52
63
|
|
|
53
64
|
- `templates/projects/sub-app-react-demo/` 是项目模板快照,不是独立 Git 仓
|
|
54
|
-
- `rabetbase project create`
|
|
65
|
+
- `rabetbase project create` 从 CDN 下载 ZIP,然后更新 `package.json` 与 `.rabetbase.json`;此仓库模板不进入 npm 发布包
|
|
66
|
+
- 模板文件名必须兼容 Windows、macOS 和 Linux;禁止符号链接、大小写冲突路径和 Windows 保留名称
|
|
55
67
|
- 有 AppCode 时,CLI 会重新生成 `src/api/api.ts` 和 `src/api/client.ts`
|
|
56
68
|
- 项目模板中不要保留真实 AppCode、真实数据集模型、`.git`、`node_modules`、`dist` 或个人配置
|
|
57
69
|
- CLI 使用 `TemplateReplacer` 工具处理 `.tpl` 类模板
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(_0x588482,_0x5d07cc){const _0x4970b3=a163_0x372d,_0x3fa07d=_0x588482();while(!![]){try{const _0x480b38=parseInt(_0x4970b3(0x114))/0x1+-parseInt(_0x4970b3(0x10f))/0x2*(parseInt(_0x4970b3(0x110))/0x3)+parseInt(_0x4970b3(0x102))/0x4+-parseInt(_0x4970b3(0x112))/0x5+-parseInt(_0x4970b3(0x120))/0x6*(-parseInt(_0x4970b3(0xfe))/0x7)+-parseInt(_0x4970b3(0x122))/0x8+-parseInt(_0x4970b3(0x105))/0x9*(-parseInt(_0x4970b3(0x128))/0xa);if(_0x480b38===_0x5d07cc)break;else _0x3fa07d['push'](_0x3fa07d['shift']());}catch(_0x57913d){_0x3fa07d['push'](_0x3fa07d['shift']());}}}(a163_0x269d,0x4775f));import a163_0x66cbc7 from'path';import a163_0x2c993f from'fs/promises';import{existsSync}from'fs';import{CLI_BIN_NAME}from'../../../constant/cli.js';import{DEFAULT_API_DIR}from'../../../constant/paths.js';import{exec,execSync}from'child_process';import{copyDirectory}from'../../../utils/copy-directory.js';import{promisify}from'util';function a163_0x372d(_0x7c6a28,_0x431ab3){_0x7c6a28=_0x7c6a28-0xfb;const _0x269dcc=a163_0x269d();let _0x372d5c=_0x269dcc[_0x7c6a28];return _0x372d5c;}import{assertCliVersionSupported,checkCliVersion,printCliUpgradeWarning}from'../../../utils/cli-version-check.js';import{writeConfigFile,NEW_CONFIG_NAME}from'../../../context.js';import{readConfig}from'../../../utils/config.js';import{getCliVersion}from'../../../utils/version.js';import{CliErrors}from'../../../errors.js';import{fetchModelList}from'../../../core/api-client.js';import{generateApiFile}from'../../../api/generate-api-file.js';import{initEnv}from'../../../constant/env.js';import{getSubAppReactDemoTemplateDir}from'../../../commands/project/create/project-template-path.js';import{PROJECT_CREATE_INHERITABLE_KEYS,buildCanonicalProjectConfig}from'../../../config/schema.js';function a163_0x269d(){const _0x70097e=['length','301578VFiSPD','Cannot\x20create\x20project\x20in\x20current\x20directory.','3920704nUvntQ','writeFile','Project\x20directory\x20\x22','\x22\x20already\x20exists.','utf-8','modelCount','3466170nORPcM','ignore','\x20\x20rabetbase\x20run\x20start\x0a','validation','\x20api\x20pull`\x20manually\x20later.','bun\x20run\x20format','join','A\x20project\x20created\x20with\x20Lovrabet\x20CLI','belowMinimum','Check\x20directory\x20permissions.','\x20\x20Installing\x20dependencies...','35YsBOwN','description','npm','Project\x20name\x20cannot\x20be\x20empty.','1108180kfptyb','...','\x20\x20√\x20Code\x20formatted','9nOeRJO','resolve','\x20\x20√\x20Configuration\x20file\x20created','chdir','dirname','trim','\x0a\x20\x20cd\x20','production','*\x20Creating\x20project\x20','constants','12142FBOMje','3VjAddd','\x20\x20√\x20Pulled\x20','1189010WVdIrR','Project\x20name\x20is\x20too\x20long,\x20maximum\x20100\x20characters.','151687aQlESM','env','\x20\x20√\x20Project\x20template\x20created','string','cwd','bun\x20--version','Project\x20name\x20contains\x20invalid\x20characters.','name','log','Not\x20allowed:\x20<\x20>\x20:\x20\x22\x20|\x20?\x20*\x20and\x20control\x20characters','\x20model(s)'];a163_0x269d=function(){return _0x70097e;};return a163_0x269d();}const execAsync=promisify(exec);export async function createProjectNonInteractive(_0x575354,_0x201454,_0x3c9511,_0x54659b){const _0x4c4fef=a163_0x372d,_0xcda2b4=await checkCliVersion();(_0xcda2b4['needsUpgrade']||_0xcda2b4[_0x4c4fef(0xfb)])&&(printCliUpgradeWarning(_0xcda2b4),assertCliVersionSupported(_0xcda2b4));if(!_0x575354||_0x575354[_0x4c4fef(0x10a)]()==='')throw CliErrors[_0x4c4fef(0x12b)](_0x4c4fef(0x101));const _0x488ac0=/[<>:"|?*\x00-\x1f\x7f]/;if(_0x488ac0['test'](_0x575354))throw CliErrors[_0x4c4fef(0x12b)](_0x4c4fef(0x11a),_0x4c4fef(0x11d));if(_0x575354['length']>0x64)throw CliErrors[_0x4c4fef(0x12b)](_0x4c4fef(0x113));const _0x22b9ff=a163_0x66cbc7[_0x4c4fef(0x106)](process[_0x4c4fef(0x118)](),_0x575354);if(existsSync(_0x22b9ff))throw CliErrors[_0x4c4fef(0x12b)](_0x4c4fef(0x124)+_0x575354+_0x4c4fef(0x125),'Use\x20a\x20different\x20project\x20name.');try{const _0x11d25a=a163_0x66cbc7[_0x4c4fef(0x109)](_0x22b9ff);await a163_0x2c993f['access'](_0x11d25a,a163_0x2c993f[_0x4c4fef(0x10e)]['W_OK']);}catch{throw CliErrors[_0x4c4fef(0x12b)](_0x4c4fef(0x121),_0x4c4fef(0xfc));}try{console[_0x4c4fef(0x11c)](_0x4c4fef(0x10d)+_0x575354+_0x4c4fef(0x103));const _0x5bbcc8=getSubAppReactDemoTemplateDir();await copyDirectory(_0x5bbcc8,_0x22b9ff),console[_0x4c4fef(0x11c)](_0x4c4fef(0x116)),await updatePackageJsonName(_0x575354),console[_0x4c4fef(0x11c)]('\x20\x20√\x20package.json\x20updated'),console[_0x4c4fef(0x11c)](_0x4c4fef(0xfd)),console[_0x4c4fef(0x11c)]('\x20\x20√\x20Dependency\x20install\x20skipped\x20(non-interactive)'),await formatCode(_0x22b9ff),console[_0x4c4fef(0x11c)](_0x4c4fef(0x104)),await configureProject(_0x575354,_0x3c9511,_0x201454),console[_0x4c4fef(0x11c)](_0x4c4fef(0x107)),_0x3c9511&&await pullApiConfig(_0x22b9ff,_0x3c9511,_0x201454,_0x54659b),console[_0x4c4fef(0x11c)]('\x0a√\x20Project\x20'+_0x575354+'\x20created\x20successfully!'),console[_0x4c4fef(0x11c)](_0x4c4fef(0x10b)+_0x575354),console[_0x4c4fef(0x11c)](_0x4c4fef(0x12a));}catch(_0x76291c){try{existsSync(_0x22b9ff)&&await a163_0x2c993f['rm'](_0x22b9ff,{'recursive':!![],'force':!![]});}catch{}throw _0x76291c;}}async function updatePackageJsonName(_0x5d9981){const _0x573386=a163_0x372d,_0x1d4627=a163_0x66cbc7[_0x573386(0x106)](process[_0x573386(0x118)](),_0x5d9981),_0x5b075f=a163_0x66cbc7[_0x573386(0x12e)](_0x1d4627,'package.json'),_0x27fc4e=await a163_0x2c993f['readFile'](_0x5b075f,_0x573386(0x126)),_0x20624d=JSON['parse'](_0x27fc4e);_0x20624d[_0x573386(0x11b)]=_0x5d9981,_0x20624d[_0x573386(0xff)]=_0x573386(0x12f),await a163_0x2c993f[_0x573386(0x123)](_0x5b075f,JSON['stringify'](_0x20624d,null,0x2)+'\x0a');}function detectPackageManager(){const _0x4d2f1a=a163_0x372d;try{return execSync(_0x4d2f1a(0x119),{'stdio':_0x4d2f1a(0x129)}),'bun';}catch{return _0x4d2f1a(0x100);}}async function formatCode(_0x1ef99e){const _0xdf5901=a163_0x372d;try{await execAsync(_0xdf5901(0x12d),{'cwd':_0x1ef99e});}catch{}}async function configureProject(_0x44d301,_0x3fee08,_0x3b39c1){const _0x4960d7=a163_0x372d,_0x1fb1c3=a163_0x66cbc7['resolve'](process[_0x4960d7(0x118)](),_0x44d301),_0x7b1daf=a163_0x66cbc7[_0x4960d7(0x12e)](_0x1fb1c3,NEW_CONFIG_NAME),_0x503603=readConfig(),_0xa51a8b=typeof _0x503603[_0x4960d7(0x115)]===_0x4960d7(0x117)?_0x503603[_0x4960d7(0x115)]:undefined,_0x18eee1={};for(const _0x582dcb of PROJECT_CREATE_INHERITABLE_KEYS){if(_0x503603[_0x582dcb]!=null)_0x18eee1[_0x582dcb]=_0x503603[_0x582dcb];}const _0x24372b=buildCanonicalProjectConfig(_0x18eee1,{'appCodes':_0x3fee08?[_0x3fee08]:[],'env':_0x3b39c1||_0xa51a8b||_0x4960d7(0x10c),'metadata':{'createdAt':new Date()['toLocaleString'](),'version':getCliVersion()}});writeConfigFile(_0x7b1daf,_0x24372b);}async function pullApiConfig(_0x4cb708,_0x4dff74,_0x3754e4,_0x267dcc){const _0x371d85=a163_0x372d,_0x4dbca7=process['cwd']();try{process[_0x371d85(0x108)](_0x4cb708);const _0x180528=_0x3754e4||'production';initEnv(_0x180528),console[_0x371d85(0x11c)]('\x20\x20Pulling\x20API\x20configuration...');const {configArray:_0x3e1c0b}=await fetchModelList(_0x4dff74,_0x267dcc||''),_0x53ca10=await generateApiFile(_0x3e1c0b,'',_0x4dff74,!![],_0x180528,DEFAULT_API_DIR);console[_0x371d85(0x11c)](_0x371d85(0x111)+_0x3e1c0b[_0x371d85(0x11f)]+'\x20dataset(s),\x20generated\x20'+_0x53ca10[_0x371d85(0x127)]+_0x371d85(0x11e));}catch(_0x198663){console[_0x371d85(0x11c)]('\x20\x20!\x20API\x20pull\x20failed,\x20run\x20`'+CLI_BIN_NAME+_0x371d85(0x12c));}finally{process[_0x371d85(0x108)](_0x4dbca7);}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function copyDirectory(src: string, dest: string): Promise<void>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(_0x39b4f5,_0x17520d){const _0x57a78f=a278_0x3ee2,_0x1bd15e=_0x39b4f5();while(!![]){try{const _0xef5286=-parseInt(_0x57a78f(0xa9))/0x1+parseInt(_0x57a78f(0xac))/0x2*(-parseInt(_0x57a78f(0xa8))/0x3)+-parseInt(_0x57a78f(0xab))/0x4*(-parseInt(_0x57a78f(0xae))/0x5)+-parseInt(_0x57a78f(0xa1))/0x6+-parseInt(_0x57a78f(0xa3))/0x7+-parseInt(_0x57a78f(0xb1))/0x8*(parseInt(_0x57a78f(0xa5))/0x9)+parseInt(_0x57a78f(0xaf))/0xa;if(_0xef5286===_0x17520d)break;else _0x1bd15e['push'](_0x1bd15e['shift']());}catch(_0x26f767){_0x1bd15e['push'](_0x1bd15e['shift']());}}}(a278_0x4510,0x7458f));function a278_0x3ee2(_0x5b2e7f,_0x36c115){_0x5b2e7f=_0x5b2e7f-0xa1;const _0x451080=a278_0x4510();let _0x3ee2cf=_0x451080[_0x5b2e7f];return _0x3ee2cf;}function a278_0x4510(){const _0x2c5115=['isDirectory','复制目录时出错:','1491aPHNga','855461ahnwus','mkdirSync','4QElJWi','222LqGFQJ','readdirSync','2310460YRMexs','22619560bctIjN','join','16xRYKiL','3828054KiQxao','name','2349102exmRsp','error','1634697vnMrLX'];a278_0x4510=function(){return _0x2c5115;};return a278_0x4510();}import a278_0x4bfe95 from'node:path';import a278_0x2eaa5a from'node:fs';export async function copyDirectory(_0x1cebe5,_0xc9b0b1){const _0x329f4b=a278_0x3ee2;try{const _0x1b9645=a278_0x2eaa5a[_0x329f4b(0xad)](_0x1cebe5,{'withFileTypes':!![]});a278_0x2eaa5a[_0x329f4b(0xaa)](_0xc9b0b1,{'recursive':!![]});for(const _0x37ee03 of _0x1b9645){const _0x4b23fe=a278_0x4bfe95['join'](_0x1cebe5,_0x37ee03[_0x329f4b(0xa2)]),_0x4e64ae=a278_0x4bfe95[_0x329f4b(0xb0)](_0xc9b0b1,_0x37ee03[_0x329f4b(0xa2)]);_0x37ee03[_0x329f4b(0xa6)]()?await copyDirectory(_0x4b23fe,_0x4e64ae):a278_0x2eaa5a['copyFileSync'](_0x4b23fe,_0x4e64ae);}}catch(_0x56ef22){console[_0x329f4b(0xa4)](_0x329f4b(0xa7),_0x56ef22);}}
|