@lovrabet/rabetbase-cli 2.5.4-beta.3 → 2.5.4-beta.5
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 +8 -2
- package/lib/api/api-doc.js +1 -1
- package/lib/api/api-group.js +1 -1
- package/lib/api/fetch-model-list.js +1 -1
- package/lib/api/generate-api-file.js +1 -1
- package/lib/api/generate-sdk-config-file.js +1 -1
- package/lib/api/legacy-api-file.js +1 -1
- package/lib/api/model-registry-file.js +1 -1
- package/lib/api/model-registry-scaffold.js +1 -1
- package/lib/api/model-source.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/detail.d.ts +2 -0
- package/lib/commands/app/detail.js +1 -0
- 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/logs.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/delete.js +1 -1
- package/lib/commands/config/get.js +1 -1
- package/lib/commands/config/index.js +1 -1
- package/lib/commands/config/init.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/dataset/batch-design.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/cross-relation-create.js +1 -1
- package/lib/commands/dataset/cross-relation-delete.js +1 -1
- package/lib/commands/dataset/cross-relation-list.js +1 -1
- package/lib/commands/dataset/cross-relation-shared.js +1 -1
- package/lib/commands/dataset/cross-relation-update.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-restore.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/dataset/user-deleted-field-list.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/table-diff-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/deployment/index.js +1 -1
- package/lib/commands/deployment/sync-all.js +1 -1
- package/lib/commands/deployment/sync-jobs.js +1 -1
- package/lib/commands/deployment/sync-status.js +1 -1
- package/lib/commands/doctor.js +1 -1
- package/lib/commands/file/index.js +1 -1
- package/lib/commands/flow/create.js +1 -1
- package/lib/commands/flow/detail.js +1 -1
- package/lib/commands/flow/index.js +1 -1
- package/lib/commands/flow/list.js +1 -1
- package/lib/commands/flow/publish.js +1 -1
- package/lib/commands/flow/runtime-resources-shared.js +1 -1
- package/lib/commands/flow/runtime-role-list.js +1 -1
- package/lib/commands/flow/runtime-role-user-list.js +1 -1
- package/lib/commands/flow/runtime-user-search.js +1 -1
- package/lib/commands/flow/shared.js +1 -1
- package/lib/commands/flow/update.js +1 -1
- package/lib/commands/flow/validate.js +1 -1
- package/lib/commands/instant-api-policy/current.js +1 -1
- package/lib/commands/instant-api-policy/index.js +1 -1
- package/lib/commands/instant-api-policy/init.js +1 -1
- package/lib/commands/instant-api-policy/publish.js +1 -1
- package/lib/commands/instant-api-policy/pull.js +1 -1
- package/lib/commands/instant-api-policy/revision.js +1 -1
- package/lib/commands/instant-api-policy/revisions.js +1 -1
- package/lib/commands/instant-api-policy/rollback.js +1 -1
- package/lib/commands/instant-api-policy/shared.js +1 -1
- package/lib/commands/instant-api-policy/validate.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/search.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.d.ts +1 -1
- package/lib/commands/menu/shared/local-pages.js +1 -1
- package/lib/commands/menu/shared/logic.d.ts +3 -1
- package/lib/commands/menu/shared/logic.js +1 -1
- package/lib/commands/menu/shared/mutations.js +1 -1
- package/lib/commands/menu/shared/path.d.ts +2 -0
- package/lib/commands/menu/shared/path.js +1 -0
- package/lib/commands/menu/shared/service.d.ts +6 -1
- package/lib/commands/menu/shared/service.js +1 -1
- package/lib/commands/menu/shared/subapp-assets.d.ts +28 -0
- package/lib/commands/menu/shared/subapp-assets.js +1 -0
- package/lib/commands/menu/shared/sync-core.d.ts +2 -1
- package/lib/commands/menu/shared/sync-core.js +1 -1
- package/lib/commands/menu/shared/types.d.ts +14 -4
- package/lib/commands/menu/shared/update-core.js +1 -1
- package/lib/commands/menu/shared/valid-url.js +1 -1
- package/lib/commands/menu/subapp-assets-status.d.ts +2 -0
- package/lib/commands/menu/subapp-assets-status.js +1 -0
- package/lib/commands/menu/subapp-assets-update.d.ts +2 -0
- package/lib/commands/menu/subapp-assets-update.js +1 -0
- package/lib/commands/menu/sync.js +1 -1
- package/lib/commands/menu/visibility-update.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/create.js +1 -1
- package/lib/commands/page/custom/detail.js +1 -1
- package/lib/commands/page/custom/list.js +1 -1
- package/lib/commands/page/custom/publish.js +1 -1
- package/lib/commands/page/custom/shared.js +1 -1
- package/lib/commands/page/custom/syntax.js +1 -1
- package/lib/commands/page/custom/update.js +1 -1
- package/lib/commands/page/data-list-status.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/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/sync.js +1 -1
- package/lib/commands/project/api-architecture-upgrade.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/domain-routing-sync.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/rule/get.js +1 -1
- package/lib/commands/rule/index.js +1 -1
- package/lib/commands/rule/list.js +1 -1
- package/lib/commands/rule/set.js +1 -1
- package/lib/commands/rule/shared.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/feishu-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/domain-config.js +1 -1
- package/lib/config/project-domain-routing.js +1 -1
- package/lib/config/region-config.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/region.js +1 -1
- package/lib/constant/risk.js +1 -1
- package/lib/constant/routing-profile.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 +16 -1
- 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/hook-directory.js +1 -1
- package/lib/core/bff/lock.js +1 -1
- package/lib/core/bff/utils.js +1 -1
- package/lib/core/cross-db-relation.js +1 -1
- package/lib/core/db-resolver.js +1 -1
- package/lib/core/flow-config.js +1 -1
- package/lib/core/instant-api-policy/config.js +1 -1
- package/lib/core/kb-search-client.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/page/lr-smart-jsx.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/supported-flags.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/generated/official-routing.js +1 -1
- package/lib/generated/routing-contract.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/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 +22 -13
- package/skills/rabetbase/guides/backend-function.md +2 -7
- package/skills/rabetbase/guides/bff-creation-workflow.md +24 -23
- package/skills/rabetbase/guides/host-frontend-integration.md +62 -0
- package/skills/rabetbase/guides/independent-deployment.md +45 -0
- package/skills/rabetbase/guides/troubleshooting.md +9 -1
- package/skills/rabetbase/references/rabetbase-app-detail.md +31 -0
- package/skills/rabetbase/references/rabetbase-bff-detail.md +1 -1
- package/skills/rabetbase/references/rabetbase-bff-push.md +2 -2
- package/skills/rabetbase/references/rabetbase-data-list-status.md +1 -0
- package/skills/rabetbase/references/rabetbase-deployment-sync-all.md +5 -1
- package/skills/rabetbase/references/rabetbase-menu-asset-update.md +9 -7
- package/skills/rabetbase/references/rabetbase-menu-list.md +2 -2
- package/skills/rabetbase/references/rabetbase-menu-subapp-assets-status.md +19 -0
- package/skills/rabetbase/references/rabetbase-menu-subapp-assets-update.md +27 -0
- package/skills/rabetbase/references/rabetbase-menu-sync.md +40 -14
- package/skills/rabetbase/references/rabetbase-page-create.md +1 -1
- package/skills/rabetbase/references/rabetbase-page-generate-start.md +5 -3
- package/skills/rabetbase/references/rabetbase-page-generate-status.md +1 -0
- package/skills/rabetbase/references/rabetbase-user-account.md +8 -8
- package/skills/rabetbase.manifest.json +8 -3
package/lib/utils/logger.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const a351_0x37a907=a351_0x3177;(function(_0x52b36b,_0x544b2c){const _0x4e1581=a351_0x3177,_0x3758dc=_0x52b36b();while(!![]){try{const _0x2b6f0f=parseInt(_0x4e1581(0x15a))/0x1*(parseInt(_0x4e1581(0x17b))/0x2)+-parseInt(_0x4e1581(0x162))/0x3*(parseInt(_0x4e1581(0x168))/0x4)+-parseInt(_0x4e1581(0x174))/0x5+-parseInt(_0x4e1581(0x18d))/0x6+parseInt(_0x4e1581(0x17d))/0x7+-parseInt(_0x4e1581(0x15c))/0x8+-parseInt(_0x4e1581(0x176))/0x9*(-parseInt(_0x4e1581(0x154))/0xa);if(_0x2b6f0f===_0x544b2c)break;else _0x3758dc['push'](_0x3758dc['shift']());}catch(_0x4c2341){_0x3758dc['push'](_0x3758dc['shift']());}}}(a351_0x1e69,0x3db71));import a351_0x2eddf0 from'winston';function a351_0x1e69(){const _0x13f80c=['9iebbUP','getWinstonInstance','dirname','Starting:\x20','currentRawCommand','977564zqiRoA','toISOString','2697639hNvIDd','clearLogs','existsSync','split','now','initWinstonLogger','File','readLogs','combine','green','timestamp','red','error','map','Failed\x20to\x20read\x20logs:','logFilePath','3020814gqxoUK','transports','6449210XuWEvi','info','Failed:\x20','Failed\x20to\x20clear\x20logs:','blue','unknown','1vOUdqr','trim','3173568aEWJDB','clear','.lovrabet.log','logTask','stringify','filter','115083eYlmNK','join','log','errors','utf8','Completed:\x20','36PjJHdc','warn','createLogger','success','parse','command','winstonLogger','rawCommand','message','setRawCommand','details','readFileSync','104405YSAhZq','format'];a351_0x1e69=function(){return _0x13f80c;};return a351_0x1e69();}import a351_0x49d1d6 from'node:fs';import a351_0x1bce94 from'node:path';class Logger{['winstonLogger'];['logFilePath'];[a351_0x37a907(0x17a)]='';constructor(){const _0x1722b4=a351_0x37a907;this[_0x1722b4(0x18c)]='';}[a351_0x37a907(0x171)](_0x2a3a1d){const _0x45d837=a351_0x37a907;this[_0x45d837(0x17a)]=_0x2a3a1d;}['initWinstonLogger'](){const _0x4fcb0d=a351_0x37a907,_0x2fc9d5=a351_0x1bce94[_0x4fcb0d(0x178)](this[_0x4fcb0d(0x18c)]);!a351_0x49d1d6[_0x4fcb0d(0x17f)](_0x2fc9d5)&&a351_0x49d1d6['mkdirSync'](_0x2fc9d5,{'recursive':!![]});const _0x467d28=a351_0x2eddf0[_0x4fcb0d(0x175)][_0x4fcb0d(0x185)](a351_0x2eddf0[_0x4fcb0d(0x175)][_0x4fcb0d(0x187)](),a351_0x2eddf0[_0x4fcb0d(0x175)][_0x4fcb0d(0x165)]({'stack':!![]}),a351_0x2eddf0['format']['printf'](_0x39ac7d=>{const _0x2393ba=_0x4fcb0d,_0x3dc8b2={'timestamp':_0x39ac7d[_0x2393ba(0x187)]||new Date()[_0x2393ba(0x17c)](),'level':_0x39ac7d['level']||'info','command':_0x39ac7d[_0x2393ba(0x16d)]||_0x2393ba(0x159),'rawCommand':_0x39ac7d[_0x2393ba(0x16f)]||this[_0x2393ba(0x17a)]||undefined,'message':_0x39ac7d[_0x2393ba(0x170)]||'','duration':_0x39ac7d['duration']||undefined,'details':_0x39ac7d[_0x2393ba(0x172)]||undefined};return JSON[_0x2393ba(0x160)](_0x3dc8b2);}));this['winstonLogger']=a351_0x2eddf0[_0x4fcb0d(0x16a)]({'level':_0x4fcb0d(0x155),'format':_0x467d28,'transports':[new a351_0x2eddf0[(_0x4fcb0d(0x18e))][(_0x4fcb0d(0x183))]({'filename':this[_0x4fcb0d(0x18c)],'level':_0x4fcb0d(0x155)})],'silent':![]}),a351_0x2eddf0['addColors']({'success':_0x4fcb0d(0x186),'error':_0x4fcb0d(0x188),'warn':'yellow','info':_0x4fcb0d(0x158)});}['setLogPath'](_0x79c1ec){const _0x4114f4=a351_0x37a907;this[_0x4114f4(0x18c)]=a351_0x1bce94[_0x4114f4(0x163)](_0x79c1ec,_0x4114f4(0x15e)),this[_0x4114f4(0x16e)]&&this[_0x4114f4(0x16e)][_0x4114f4(0x15d)](),this[_0x4114f4(0x182)]();}[a351_0x37a907(0x155)](_0xacc61,_0x4eb182,_0x5d7756){const _0xf7f761=a351_0x37a907;if(!this['logFilePath']||!this[_0xf7f761(0x16e)])return;this[_0xf7f761(0x16e)][_0xf7f761(0x155)](_0x4eb182,{'command':_0xacc61,'details':_0x5d7756});}[a351_0x37a907(0x16b)](_0xd3512a,_0x2fba83,_0x15a572,_0x2b1174){const _0x350652=a351_0x37a907;if(!this[_0x350652(0x18c)]||!this[_0x350652(0x16e)])return;this['winstonLogger'][_0x350652(0x164)]('info',_0x2fba83,{'level':_0x350652(0x16b),'command':_0xd3512a,'duration':_0x15a572,'details':_0x2b1174});}[a351_0x37a907(0x189)](_0x16b7d2,_0x2aa107,_0x28911c){const _0x41f644=a351_0x37a907;if(!this[_0x41f644(0x18c)]||!this[_0x41f644(0x16e)])return;this[_0x41f644(0x16e)]['error'](_0x2aa107,{'command':_0x16b7d2,'details':_0x28911c});}['warn'](_0x1cf649,_0x13e818,_0x16ae34){const _0x372232=a351_0x37a907;if(!this[_0x372232(0x18c)]||!this[_0x372232(0x16e)])return;this['winstonLogger'][_0x372232(0x169)](_0x13e818,{'command':_0x1cf649,'details':_0x16ae34});}async[a351_0x37a907(0x15f)](_0x1748aa,_0x574b2b,_0x17bde7){const _0x206123=a351_0x37a907,_0x2bfb57=Date['now']();this[_0x206123(0x155)](_0x1748aa,_0x206123(0x179)+_0x574b2b);try{const _0x2455df=await _0x17bde7(),_0x4b2fc2=Date['now']()-_0x2bfb57;return this['success'](_0x1748aa,_0x206123(0x167)+_0x574b2b,_0x4b2fc2),_0x2455df;}catch(_0x468cc1){const _0x91bc90=Date[_0x206123(0x181)]()-_0x2bfb57;this[_0x206123(0x189)](_0x1748aa,_0x206123(0x156)+_0x574b2b,{'error':_0x468cc1 instanceof Error?_0x468cc1['message']:String(_0x468cc1),'duration':_0x91bc90});throw _0x468cc1;}}[a351_0x37a907(0x184)](){const _0x2b8b7a=a351_0x37a907;try{if(!a351_0x49d1d6[_0x2b8b7a(0x17f)](this[_0x2b8b7a(0x18c)]))return[];const _0x594ece=a351_0x49d1d6[_0x2b8b7a(0x173)](this['logFilePath'],_0x2b8b7a(0x166));return _0x594ece[_0x2b8b7a(0x180)]('\x0a')[_0x2b8b7a(0x161)](_0x522c7b=>_0x522c7b[_0x2b8b7a(0x15b)]())[_0x2b8b7a(0x18a)](_0x457f64=>JSON[_0x2b8b7a(0x16c)](_0x457f64));}catch(_0x1b15b5){return console['warn'](_0x2b8b7a(0x18b),_0x1b15b5),[];}}[a351_0x37a907(0x17e)](){const _0x2d079e=a351_0x37a907;try{a351_0x49d1d6['existsSync'](this[_0x2d079e(0x18c)])&&a351_0x49d1d6['writeFileSync'](this[_0x2d079e(0x18c)],'',_0x2d079e(0x166));}catch(_0x93a6bb){console[_0x2d079e(0x169)](_0x2d079e(0x157),_0x93a6bb);}}[a351_0x37a907(0x177)](){return this['winstonLogger'];}}function a351_0x3177(_0x5b44ac,_0x428a9f){_0x5b44ac=_0x5b44ac-0x154;const _0x1e6914=a351_0x1e69();let _0x31774a=_0x1e6914[_0x5b44ac];return _0x31774a;}export const logger=new Logger();
|
package/lib/utils/params.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
(function(_0x1ada8e,_0x23492d){const _0x2d45e2=a352_0x2e7d,_0x26f3ea=_0x1ada8e();while(!![]){try{const _0x15791e=parseInt(_0x2d45e2(0x153))/0x1+-parseInt(_0x2d45e2(0x149))/0x2*(-parseInt(_0x2d45e2(0x156))/0x3)+-parseInt(_0x2d45e2(0x150))/0x4+parseInt(_0x2d45e2(0x152))/0x5*(parseInt(_0x2d45e2(0x155))/0x6)+-parseInt(_0x2d45e2(0x14a))/0x7*(-parseInt(_0x2d45e2(0x147))/0x8)+-parseInt(_0x2d45e2(0x14d))/0x9*(parseInt(_0x2d45e2(0x14b))/0xa)+-parseInt(_0x2d45e2(0x14e))/0xb;if(_0x15791e===_0x23492d)break;else _0x26f3ea['push'](_0x26f3ea['shift']());}catch(_0x541700){_0x26f3ea['push'](_0x26f3ea['shift']());}}}(a352_0x1bf9,0x2e5c2));function a352_0x2e7d(_0x377e5a,_0x7fe547){_0x377e5a=_0x377e5a-0x146;const _0x1bf9e9=a352_0x1bf9();let _0x2e7d09=_0x1bf9e9[_0x377e5a];return _0x2e7d09;}function a352_0x1bf9(){const _0x3f623e=['16SCrYqa','object','13738fkntbV','976150EEMytZ','690oFnXtu','validation','34767QRIHfX','1186570YHBnHg','parse','203852wsKcQW','Example:\x20--params\x20\x27{\x22id\x22:123}\x27','200zYHWaN','188098zrCTOE','isArray','13998NCDfiO','24wcWqZS','--params\x20must\x20be\x20a\x20JSON\x20object'];a352_0x1bf9=function(){return _0x3f623e;};return a352_0x1bf9();}import{CliErrors}from'../errors.js';export function parseJsonParams(_0x3c0d34){const _0x1f50f9=a352_0x2e7d;if(!_0x3c0d34)return undefined;let _0x5d2ac3;try{_0x5d2ac3=JSON[_0x1f50f9(0x14f)](_0x3c0d34);}catch{throw CliErrors['validation']('Invalid\x20JSON\x20for\x20--params:\x20'+_0x3c0d34);}if(!_0x5d2ac3||typeof _0x5d2ac3!==_0x1f50f9(0x148)||Array[_0x1f50f9(0x154)](_0x5d2ac3))throw CliErrors[_0x1f50f9(0x14c)](_0x1f50f9(0x146),_0x1f50f9(0x151));return _0x5d2ac3;}
|
package/lib/utils/platform.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const a353_0x1e870e=a353_0x1447;(function(_0x52803b,_0x41c0f6){const _0x21c1e4=a353_0x1447,_0x341153=_0x52803b();while(!![]){try{const _0x282b89=-parseInt(_0x21c1e4(0x1a1))/0x1+parseInt(_0x21c1e4(0x1a5))/0x2+-parseInt(_0x21c1e4(0x1a4))/0x3*(parseInt(_0x21c1e4(0x19e))/0x4)+-parseInt(_0x21c1e4(0x19d))/0x5+-parseInt(_0x21c1e4(0x1a2))/0x6*(parseInt(_0x21c1e4(0x1a7))/0x7)+-parseInt(_0x21c1e4(0x1a3))/0x8*(-parseInt(_0x21c1e4(0x1a6))/0x9)+parseInt(_0x21c1e4(0x19f))/0xa;if(_0x282b89===_0x41c0f6)break;else _0x341153['push'](_0x341153['shift']());}catch(_0x36971c){_0x341153['push'](_0x341153['shift']());}}}(a353_0x1bac,0x41528));function a353_0x1bac(){const _0x217867=['9828BHJdyO','3373224oKVhWv','87HedZwS','1049708JWFnhA','9VACrEQ','1722QVeSau','2484575SxyHFA','41908itVJVB','9857520iEOVyb','win32','461003HVtdML'];a353_0x1bac=function(){return _0x217867;};return a353_0x1bac();}export const isWindows=process['platform']===a353_0x1e870e(0x1a0);function a353_0x1447(_0x5d4699,_0x3164fc){_0x5d4699=_0x5d4699-0x19d;const _0x1bac5b=a353_0x1bac();let _0x1447da=_0x1bac5b[_0x5d4699];return _0x1447da;}export function resolveNpmBin(_0x56251e){return isWindows?_0x56251e+'.cmd':_0x56251e;}
|
package/lib/utils/sleep.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export function sleep(
|
|
1
|
+
export function sleep(_0x5de083){return new Promise(_0x4a4e8b=>setTimeout(_0x4a4e8b,_0x5de083));}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function a355_0x342a(){const _0x1b927a=['YourModel','error','api','tableName','Template\x20content\x20replacement\x20failed','formatLocalTimestamp','slice','toComponentName','name','toDisplayTitle','641960GzNuTr','readdir','replace','extname','datasetCode:\x20\x22','utf8','.tpl','Starting\x20template\x20content\x20replacement','.css','.md','tableName:\x20\x22','endsWith','38754GQRxqf','.js','getMinutes','pop','1953dQDKAd','join','getMonth','replaceApiContent','toUpperCase','.ts','180paKCQD','sdk-config','mkdir','pad','alias','processTemplate','.tsx','split','getSeconds','message','41chrZUX','19143070SSrddZ','getFullYear','template','\x20},','toISOString','padStart','getDate','isDirectory','map','.jsx','7978xHtbSS','now','push','name:\x20\x22','charAt','readFile','\x0a\x20\x20\x20\x20{\x20','.json','742695GutElo','3912232NiwkZG','5267145XKpcoS','replaceContent','includes','datasetCode','processDirectory','writeFile','promises','toLowerCase','processFile'];a355_0x342a=function(){return _0x1b927a;};return a355_0x342a();}const a355_0x4463a4=a355_0x8cb8;(function(_0x42a8e0,_0x3126c){const _0x1a9a64=a355_0x8cb8,_0xdb8be5=_0x42a8e0();while(!![]){try{const _0x299bd1=parseInt(_0x1a9a64(0x157))/0x1*(parseInt(_0x1a9a64(0x162))/0x2)+parseInt(_0x1a9a64(0x16a))/0x3+parseInt(_0x1a9a64(0x16b))/0x4+parseInt(_0x1a9a64(0x16c))/0x5+-parseInt(_0x1a9a64(0x18b))/0x6*(parseInt(_0x1a9a64(0x18f))/0x7)+-parseInt(_0x1a9a64(0x17f))/0x8*(parseInt(_0x1a9a64(0x14d))/0x9)+parseInt(_0x1a9a64(0x158))/0xa;if(_0x299bd1===_0x3126c)break;else _0xdb8be5['push'](_0xdb8be5['shift']());}catch(_0x3141fa){_0xdb8be5['push'](_0xdb8be5['shift']());}}}(a355_0x342a,0xe7ebb));function a355_0x8cb8(_0x560cd7,_0x4c4e7e){_0x560cd7=_0x560cd7-0x149;const _0x342a6b=a355_0x342a();let _0x8cb87a=_0x342a6b[_0x560cd7];return _0x8cb87a;}import a355_0x1f391a from'node:fs';import a355_0x57985d from'node:path';import{logger}from'../utils/logger.js';import{getCliVersion}from'../utils/version.js';const CLI_VERSION=getCliVersion();export class TemplateReplacer{static['pad'](_0x4127f4){const _0x1e2eda=a355_0x8cb8;return String(_0x4127f4)[_0x1e2eda(0x15d)](0x2,'0');}static['formatLocalTimestamp'](_0x1dcc91){const _0x441069=a355_0x8cb8,_0x4b0762=_0x1dcc91[_0x441069(0x159)](),_0x5831b4=this['pad'](_0x1dcc91[_0x441069(0x149)]()+0x1),_0x1ed6c0=this[_0x441069(0x150)](_0x1dcc91[_0x441069(0x15e)]()),_0x4d9087=this[_0x441069(0x150)](_0x1dcc91['getHours']()),_0x26de2=this[_0x441069(0x150)](_0x1dcc91[_0x441069(0x18d)]()),_0x3d8d34=this[_0x441069(0x150)](_0x1dcc91[_0x441069(0x155)]());return{'createdAt':_0x4b0762+'-'+_0x5831b4+'-'+_0x1ed6c0+'\x20'+_0x4d9087+':'+_0x26de2+':'+_0x3d8d34,'createdDate':_0x4b0762+'-'+_0x5831b4+'-'+_0x1ed6c0,'createdTime':_0x4d9087+':'+_0x26de2+':'+_0x3d8d34};}static[a355_0x4463a4(0x17c)](_0x26c203){const _0x2cf730=a355_0x4463a4,_0xe1c87f=_0x26c203[_0x2cf730(0x154)]('/')[_0x2cf730(0x18e)]()||_0x26c203;return _0xe1c87f[_0x2cf730(0x154)]('-')[_0x2cf730(0x160)](_0x23b70a=>_0x23b70a[_0x2cf730(0x166)](0x0)['toUpperCase']()+_0x23b70a[_0x2cf730(0x17b)](0x1)['toLowerCase']())['join']('');}static[a355_0x4463a4(0x17e)](_0x489e38){const _0xbbdce3=a355_0x4463a4,_0x1c6690=_0x489e38[_0xbbdce3(0x154)]('/')[_0xbbdce3(0x18e)]()||_0x489e38;return _0x1c6690[_0xbbdce3(0x154)]('-')['map'](_0x340592=>_0x340592['charAt'](0x0)[_0xbbdce3(0x14b)]()+_0x340592['slice'](0x1)[_0xbbdce3(0x173)]())['join']('\x20');}static[a355_0x4463a4(0x16d)](_0x4d86af,_0x2fbfe2,_0x32745b){const _0x37f78a=a355_0x4463a4,_0xa137a9=this[_0x37f78a(0x17c)](_0x2fbfe2),_0x88d2b4=this[_0x37f78a(0x17e)](_0x2fbfe2),{createdAt:_0x4fd9dc,createdDate:_0x1f9356,createdTime:_0x2131f7}=this[_0x37f78a(0x17a)](new Date());let _0x51e81e=_0x4d86af[_0x37f78a(0x181)](/\{CliVersion\}/g,CLI_VERSION)[_0x37f78a(0x181)](/\{ComponentName\}/g,_0xa137a9)['replace'](/\{DisplayTitle\}/g,_0x88d2b4)['replace'](/\{PageName\}/g,_0x2fbfe2)[_0x37f78a(0x181)](/\{TemplateName\}/g,_0x32745b)['replace'](/\{CreatedAt\}/g,_0x4fd9dc)[_0x37f78a(0x181)](/\{CreatedDate\}/g,_0x1f9356)[_0x37f78a(0x181)](/\{CreatedTime\}/g,_0x2131f7);return _0x51e81e;}static[a355_0x4463a4(0x14a)](_0x42db2d,_0x3b3e77,_0x488e09,_0x155716,_0x50cd33,_0x27c102,_0x58b5c1,_0x3823b3,_0x309ee9){const _0x2f81b8=a355_0x4463a4,_0x4f26b4=new Date(),_0x2cc958=_0x4f26b4[_0x2f81b8(0x15c)](),_0x1d3e9b=_0x488e09[_0x2f81b8(0x160)](_0x1ec411=>{const _0x53504b=_0x2f81b8,_0xe3bf4b=[_0x53504b(0x183)+_0x1ec411[_0x53504b(0x16f)]+'\x22',_0x53504b(0x189)+_0x1ec411[_0x53504b(0x178)]+'\x22',_0x53504b(0x165)+_0x1ec411[_0x53504b(0x17d)]+'\x22'];return _0x1ec411[_0x53504b(0x151)]&&_0xe3bf4b[_0x53504b(0x164)]('alias:\x20\x22'+_0x1ec411[_0x53504b(0x151)]+'\x22'),_0x53504b(0x168)+_0xe3bf4b['join'](',\x20')+_0x53504b(0x15b);})[_0x2f81b8(0x190)](''),_0x37c4bb=_0x155716||_0x488e09[0x0]?.[_0x2f81b8(0x151)]||_0x2f81b8(0x175);let _0x5b7e91=_0x42db2d[_0x2f81b8(0x181)](/\{AppCode\}/g,_0x3b3e77)[_0x2f81b8(0x181)](/\{ModelConfigs\}/g,_0x1d3e9b)[_0x2f81b8(0x181)](/\{ExampleModelName\}/g,_0x37c4bb)['replace'](/\{ApiFileName\}/g,_0x50cd33||_0x2f81b8(0x177))[_0x2f81b8(0x181)](/\{ConfigName\}/g,_0x27c102||'default')[_0x2f81b8(0x181)](/\{ClientConfigParam\}/g,_0x58b5c1||'')[_0x2f81b8(0x181)](/\{SdkConfigFileName\}/g,_0x309ee9||_0x2f81b8(0x14e))['replace'](/\{VarPrefix\}/g,_0x3823b3||'LOVRABET')[_0x2f81b8(0x181)](/\{CreatedAt\}/g,_0x2cc958);return _0x5b7e91;}static async[a355_0x4463a4(0x152)](_0x2d47a3,_0x136df1,_0x26bd84,_0x3fedb7,_0x14cff4=!![]){const _0x549dae=a355_0x4463a4,_0x30c691=Date[_0x549dae(0x163)]();try{_0x14cff4&&logger['info']('template',_0x549dae(0x186),{'templatePath':_0x2d47a3,'targetPath':_0x136df1,'pageName':_0x26bd84,'templateName':_0x3fedb7});await a355_0x1f391a[_0x549dae(0x172)][_0x549dae(0x14f)](_0x136df1,{'recursive':!![]}),await this[_0x549dae(0x170)](_0x2d47a3,_0x136df1,_0x26bd84,_0x3fedb7);if(_0x14cff4){const _0xb3aacf=Date[_0x549dae(0x163)]()-_0x30c691;logger['success'](_0x549dae(0x15a),'Template\x20content\x20replacement\x20completed',_0xb3aacf,{'pageName':_0x26bd84,'templateName':_0x3fedb7});}}catch(_0x49ac4c){if(_0x14cff4){const _0xe49659=Date[_0x549dae(0x163)]()-_0x30c691;logger[_0x549dae(0x176)]('template',_0x549dae(0x179),{'templatePath':_0x2d47a3,'targetPath':_0x136df1,'pageName':_0x26bd84,'templateName':_0x3fedb7,'error':_0x49ac4c instanceof Error?_0x49ac4c[_0x549dae(0x156)]:String(_0x49ac4c),'duration':_0xe49659});}throw _0x49ac4c;}}static async[a355_0x4463a4(0x170)](_0x22770e,_0x39b3db,_0x1fc6f3,_0xf81f52){const _0x511871=a355_0x4463a4,_0x5e527c=await a355_0x1f391a[_0x511871(0x172)][_0x511871(0x180)](_0x22770e,{'withFileTypes':!![]});for(const _0x2507a3 of _0x5e527c){const _0x419076=a355_0x57985d['join'](_0x22770e,_0x2507a3['name']);let _0x165e6f=a355_0x57985d[_0x511871(0x190)](_0x39b3db,_0x2507a3[_0x511871(0x17d)]);_0x2507a3[_0x511871(0x17d)][_0x511871(0x18a)](_0x511871(0x185))&&(_0x165e6f=a355_0x57985d[_0x511871(0x190)](_0x39b3db,_0x2507a3[_0x511871(0x17d)]['replace'](/\.tpl$/,'')));if(_0x2507a3[_0x511871(0x15f)]())await a355_0x1f391a[_0x511871(0x172)][_0x511871(0x14f)](_0x165e6f,{'recursive':!![]}),await this[_0x511871(0x170)](_0x419076,_0x165e6f,_0x1fc6f3,_0xf81f52);else _0x2507a3['isFile']()&&await this[_0x511871(0x174)](_0x419076,_0x165e6f,_0x1fc6f3,_0xf81f52);}}static async['processFile'](_0xb6b70c,_0x1472ba,_0x1376e8,_0x10e97e){const _0x35b08d=a355_0x4463a4,_0x4e34f3=a355_0x57985d[_0x35b08d(0x182)](_0xb6b70c)[_0x35b08d(0x173)]();_0xb6b70c['endsWith'](_0x35b08d(0x185))&&(_0x1472ba=_0x1472ba[_0x35b08d(0x181)](/\.tpl$/,''));const _0x153c6d=[_0x35b08d(0x153),_0x35b08d(0x14c),_0x35b08d(0x161),_0x35b08d(0x18c),_0x35b08d(0x169),_0x35b08d(0x188),_0x35b08d(0x187),'.scss','.tpl'];if(_0x153c6d[_0x35b08d(0x16e)](_0x4e34f3)||_0xb6b70c['endsWith']('.tpl')){const _0x5bb648=await a355_0x1f391a[_0x35b08d(0x172)][_0x35b08d(0x167)](_0xb6b70c,_0x35b08d(0x184)),_0x41cc67=this[_0x35b08d(0x16d)](_0x5bb648,_0x1376e8,_0x10e97e);await a355_0x1f391a['promises'][_0x35b08d(0x171)](_0x1472ba,_0x41cc67,_0x35b08d(0x184));}else await a355_0x1f391a[_0x35b08d(0x172)]['copyFile'](_0xb6b70c,_0x1472ba);}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x11d6d0,_0x11b77e){const _0x469a47=a356_0x2a3c,_0x5bfdb9=_0x11d6d0();while(!![]){try{const _0x5ef5e7=parseInt(_0x469a47(0x178))/0x1*(parseInt(_0x469a47(0x166))/0x2)+parseInt(_0x469a47(0x162))/0x3+parseInt(_0x469a47(0x165))/0x4+parseInt(_0x469a47(0x160))/0x5+parseInt(_0x469a47(0x16a))/0x6*(parseInt(_0x469a47(0x173))/0x7)+parseInt(_0x469a47(0x16b))/0x8+parseInt(_0x469a47(0x15d))/0x9*(-parseInt(_0x469a47(0x176))/0xa);if(_0x5ef5e7===_0x11b77e)break;else _0x5bfdb9['push'](_0x5bfdb9['shift']());}catch(_0x310b37){_0x5bfdb9['push'](_0x5bfdb9['shift']());}}}(a356_0x3183,0x88636));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';function a356_0x2a3c(_0x3a1ae8,_0xecef86){_0x3a1ae8=_0x3a1ae8-0x15b;const _0x31839c=a356_0x3183();let _0x2a3c83=_0x31839c[_0x3a1ae8];return _0x2a3c83;}import{dirname,join}from'node:path';import a356_0x17be8d 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 _0x3a5e93=a356_0x2a3c,_0x52a452=process.env.RABETBASE_NO_UPDATE_NOTICE?.[_0x3a5e93(0x163)]()[_0x3a5e93(0x15c)]();return _0x52a452==='1'||_0x52a452===_0x3a5e93(0x15b)||_0x52a452===_0x3a5e93(0x177);}function cacheRoot(){const _0x544e9d=a356_0x2a3c;return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),_0x544e9d(0x16f));}export function getUpdateNoticeCachePath(){const _0x8b6254=a356_0x2a3c;return join(cacheRoot(),'rabetbase-cli',_0x8b6254(0x171));}async function readUpdateNoticeCache(){const _0x40597b=a356_0x2a3c;try{const _0x4df602=await readFile(getUpdateNoticeCachePath(),_0x40597b(0x174)),_0x46e9a1=JSON['parse'](_0x4df602);if(!_0x46e9a1||typeof _0x46e9a1!==_0x40597b(0x164))return{};return _0x46e9a1;}catch{return{};}}async function writeUpdateNoticeCache(_0x256a2e){try{const _0x16a923=getUpdateNoticeCachePath();await mkdir(dirname(_0x16a923),{'recursive':!![]}),await writeFile(_0x16a923,JSON['stringify'](_0x256a2e,null,0x2)+'\x0a','utf8');}catch{}}function isFreshCheck(_0x42363d,_0x4213df){const _0x5ba2c2=a356_0x2a3c;return typeof _0x42363d['checkedAt']===_0x5ba2c2(0x172)&&_0x4213df-_0x42363d['checkedAt']<UPDATE_CHECK_TTL_MS;}function isRecentlyNotified(_0x4ee9bb,_0x26b34f,_0x56e7b9){const _0x174977=a356_0x2a3c;return _0x4ee9bb[_0x174977(0x161)]===_0x26b34f&&typeof _0x4ee9bb[_0x174977(0x167)]==='number'&&_0x56e7b9-_0x4ee9bb[_0x174977(0x167)]<UPDATE_NOTICE_TTL_MS;}function a356_0x3183(){const _0x6e615=['2936130JlMNYT','trim','object','1929272YoUSbh','419586PAPsba','lastNotifiedAt',',\x20run:\x20','valid','631776fCmTKV','4371240RTJeHa','/v/','now','https://www.npmjs.com/package/','.cache','\x20update','update-check.json','number','7ToDToC','utf8','checkedAt','10InMgwQ','yes','5UaLzLX','latest','true','toLowerCase','31284261dgieYY','stableVersion','gte','4364905fxyAFm','lastNotifiedVersion'];a356_0x3183=function(){return _0x6e615;};return a356_0x3183();}export function buildNpmVersionUrl(_0xa7673b){const _0x4ff415=a356_0x2a3c;return _0x4ff415(0x16e)+NPM_PACKAGE_NAME+_0x4ff415(0x16c)+_0xa7673b;}export async function resolveLatestUpdateNotice(){const _0x28f5c7=a356_0x2a3c;if(isUpdateNoticeDisabled())return null;try{const _0x25a3c2=Date[_0x28f5c7(0x16d)](),_0x2cf60c=getCliVersion(),_0x29293a=await readUpdateNoticeCache();let _0x351b14=isFreshCheck(_0x29293a,_0x25a3c2)?_0x29293a[_0x28f5c7(0x179)]?.[_0x28f5c7(0x163)]():undefined;if(!_0x351b14&&!isFreshCheck(_0x29293a,_0x25a3c2)){const _0xacc0cc=await getCliVersionPolicy();_0x351b14=_0xacc0cc?.[_0x28f5c7(0x15e)]?.[_0x28f5c7(0x163)]()||undefined,await writeUpdateNoticeCache({..._0x29293a,'checkedAt':_0x25a3c2,'latest':_0x351b14,'failed':!_0x351b14});}if(!_0x351b14||!a356_0x17be8d[_0x28f5c7(0x169)](_0x2cf60c)||!a356_0x17be8d[_0x28f5c7(0x169)](_0x351b14))return null;if(a356_0x17be8d[_0x28f5c7(0x15f)](_0x2cf60c,_0x351b14))return null;if(isRecentlyNotified(_0x29293a,_0x351b14,_0x25a3c2))return null;const _0x392a0d=CLI_BIN_NAME+_0x28f5c7(0x170);return await writeUpdateNoticeCache({..._0x29293a,'checkedAt':isFreshCheck(_0x29293a,_0x25a3c2)?_0x29293a[_0x28f5c7(0x175)]:_0x25a3c2,'latest':_0x351b14,'failed':![],'lastNotifiedVersion':_0x351b14,'lastNotifiedAt':_0x25a3c2}),{'command':_0x392a0d,'current':_0x2cf60c,'latest':_0x351b14,'url':buildNpmVersionUrl(_0x351b14),'message':CLI_BIN_NAME+'\x20'+_0x351b14+'\x20available,\x20current\x20'+_0x2cf60c+_0x28f5c7(0x168)+_0x392a0d};}catch{return null;}}
|
package/lib/utils/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function a357_0x2855(){var _0x39ba2b=['638rWIJXV','1044156cXFkzd','5756625jJZmON','587808RSGSeZ','921840sZZqVq','618VEYecR','2569CoHDEp','177474kBvfCH','24TlKfCQ'];a357_0x2855=function(){return _0x39ba2b;};return a357_0x2855();}function a357_0x1c0e(_0x1558c2,_0x2aafe3){_0x1558c2=_0x1558c2-0xfc;var _0x2855a5=a357_0x2855();var _0x1c0edf=_0x2855a5[_0x1558c2];return _0x1c0edf;}(function(_0x6caa89,_0xb88174){var _0x250d1f=a357_0x1c0e,_0x4b02ae=_0x6caa89();while(!![]){try{var _0xe03735=parseInt(_0x250d1f(0xfe))/0x1+parseInt(_0x250d1f(0x100))/0x2*(parseInt(_0x250d1f(0xfc))/0x3)+parseInt(_0x250d1f(0x103))/0x4+parseInt(_0x250d1f(0x104))/0x5+parseInt(_0x250d1f(0x101))/0x6+parseInt(_0x250d1f(0xfd))/0x7*(parseInt(_0x250d1f(0xff))/0x8)+-parseInt(_0x250d1f(0x102))/0x9;if(_0xe03735===_0xb88174)break;else _0x4b02ae['push'](_0x4b02ae['shift']());}catch(_0x466a9a){_0x4b02ae['push'](_0x4b02ae['shift']());}}}(a357_0x2855,0x1adba));import{VERSION}from'../generated/build-info.js';export function getCliVersion(){return VERSION;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x436b99,_0x4984ae){var _0x5dddc2=a358_0x44bf,_0xd74ac9=_0x436b99();while(!![]){try{var _0x2cc6ab=parseInt(_0x5dddc2(0x124))/0x1+-parseInt(_0x5dddc2(0x127))/0x2*(-parseInt(_0x5dddc2(0x122))/0x3)+-parseInt(_0x5dddc2(0x12b))/0x4+parseInt(_0x5dddc2(0x123))/0x5*(-parseInt(_0x5dddc2(0x126))/0x6)+-parseInt(_0x5dddc2(0x12a))/0x7*(-parseInt(_0x5dddc2(0x125))/0x8)+-parseInt(_0x5dddc2(0x129))/0x9+-parseInt(_0x5dddc2(0x121))/0xa*(parseInt(_0x5dddc2(0x128))/0xb);if(_0x2cc6ab===_0x4984ae)break;else _0xd74ac9['push'](_0xd74ac9['shift']());}catch(_0x228ffa){_0xd74ac9['push'](_0xd74ac9['shift']());}}}(a358_0x5779,0x9bf48));function a358_0x44bf(_0x43b10e,_0x164751){_0x43b10e=_0x43b10e-0x121;var _0x57796c=a358_0x5779();var _0x44bffb=_0x57796c[_0x43b10e];return _0x44bffb;}import{setActiveCookie,clearActiveCookie}from'../core/api-client.js';function a358_0x5779(){var _0x5d7390=['5CfQKAY','1128391BwcTtu','206824tgaQUf','202254vaEyLg','936638MsvVtk','11wSjToC','1609380XYwUDA','49SSdxQC','3539824XMOOsy','5097230tacOOf','6dSqDyT'];a358_0x5779=function(){return _0x5d7390;};return a358_0x5779();}export async function withActiveCookie(_0x1a2412,_0x17ed77){setActiveCookie(_0x1a2412);try{return await _0x17ed77();}finally{clearActiveCookie();}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
function a359_0x4817(_0x246be1,_0x1905bc){_0x246be1=_0x246be1-0x198;var _0x13087c=a359_0x1308();var _0x4817bc=_0x13087c[_0x246be1];return _0x4817bc;}function a359_0x1308(){var _0x35f1e3=['2784kciIAj','876270yAsSHe','stderr','write','15717190lxxUsc','376yguYFj','3574590jFnpVl','12006252OxQOvW','1456vYJGPe','8OylRig','8142239mwcAFF','6898DbAXii'];a359_0x1308=function(){return _0x35f1e3;};return a359_0x1308();}(function(_0x15b078,_0x25d1f2){var _0x2301f9=a359_0x4817,_0x48e807=_0x15b078();while(!![]){try{var _0x2ca232=parseInt(_0x2301f9(0x19f))/0x1*(parseInt(_0x2301f9(0x199))/0x2)+parseInt(_0x2301f9(0x19a))/0x3*(parseInt(_0x2301f9(0x1a2))/0x4)+parseInt(_0x2301f9(0x1a0))/0x5+parseInt(_0x2301f9(0x19b))/0x6+parseInt(_0x2301f9(0x198))/0x7*(parseInt(_0x2301f9(0x1a3))/0x8)+-parseInt(_0x2301f9(0x1a1))/0x9+-parseInt(_0x2301f9(0x19e))/0xa;if(_0x2ca232===_0x25d1f2)break;else _0x48e807['push'](_0x48e807['shift']());}catch(_0x17f7dc){_0x48e807['push'](_0x48e807['shift']());}}}(a359_0x1308,0xb7d71));export function writeCliSideChannelLine(_0x5e800e){var _0x2924e2=a359_0x4817;process[_0x2924e2(0x19c)][_0x2924e2(0x19d)](_0x5e800e+'\x0a');}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lovrabet/rabetbase-cli",
|
|
3
|
-
"version": "2.5.4-beta.
|
|
3
|
+
"version": "2.5.4-beta.5",
|
|
4
4
|
"description": "Developer CLI for Lovrabet apps, datasets, pages, SQL, Backend Function, 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.5.4-beta.
|
|
4
|
-
description: "Use for Lovrabet development work through the rabetbase CLI: create or bind projects (including creating an AppCode project in the current folder), pull Dataset/API facts and maintain SDK clients, or manage datasets, Instant API access policies, database connections, pages, SQL, Backend Functions, approval flows and workflows, menus, notifications, knowledge bases and kb search, Agent Context Rules, roles, files, OCR, deployment metadata, platform issues, and 钉钉沙箱账号绑定. Trigger when the user mentions rabetbase, Lovrabet development, AppCode, Dataset, Instant API allow/deny/route policy, project creation, api pull/codegen, dblink, page, SQL, BFF, creating or designing an approval flow, workflow, business process, or multi-step approval, menu, notification, knowledge base, kb search, Agent Context Rules, RULES.md, DATABASE.md, rule list/get/set, role, file/OCR, or related development workflows."
|
|
3
|
+
version: 2.5.4-beta.5
|
|
4
|
+
description: "Use for Lovrabet development work through the rabetbase CLI: create or bind projects (including creating an AppCode project in the current folder), pull Dataset/API facts and maintain SDK clients, or manage datasets, Instant API access policies, database connections, pages, host frontend integration, frontend subapp resources, SQL, Backend Functions, approval flows and workflows, menus, notifications, knowledge bases and kb search, Agent Context Rules, roles, files, OCR, deployment metadata, platform issues, and 钉钉沙箱账号绑定. Trigger when the user mentions rabetbase, Lovrabet development, AppCode, Dataset, Instant API allow/deny/route policy, project creation, api pull/codegen, dblink, page, host frontend integration, subapp resource versions, SQL, BFF, creating or designing an approval flow, workflow, business process, or multi-step approval, menu, notification, knowledge base, kb search, Agent Context Rules, RULES.md, DATABASE.md, rule list/get/set, role, file/OCR, or related development workflows."
|
|
5
5
|
metadata:
|
|
6
6
|
requires:
|
|
7
7
|
bins: ["rabetbase"]
|
|
@@ -66,7 +66,7 @@ Agent 负责把已授权的目标推进到可验证的结果:主动获取事
|
|
|
66
66
|
- 需要管理不同数据库连接之间的 DB_TABLE 关联时,先读 [跨库关系](references/rabetbase-dataset-cross-relations.md),使用 `dataset cross-relation-list/create/update/delete`;源数据集+字段定位,更新/删除必须唯一匹配,写前 dry-run,写后以跨库 list 回读为准
|
|
67
67
|
- 需要从文本需求创建新的 `METADATA` 数据集时,先读 [`dataset generate-start/status`](references/rabetbase-dataset-generate.md),执行 preview 写出 design 文件,审阅后用 `generate-start --apply --design-file` 提交任务,再用 `generate-status` 查询到成功
|
|
68
68
|
- **管理物理库连接 / 测连 / 同步表结构分析**时用 `rabetbase db …`(先 [`db list`](references/rabetbase-db-list.md),trace/plan id 见 [`database-connection-workflow.md`](guides/database-connection-workflow.md))
|
|
69
|
-
-
|
|
69
|
+
- 仅在管理员明确要求独立部署首次初始化、历史回填或同步故障恢复时,读取 [`deployment sync-all`](references/rabetbase-deployment-sync-all.md)
|
|
70
70
|
- DBAgent 增量分析默认先执行一次异步差异刷新:调用 `db diff-refresh-start`,保存 traceId,并用 `db diff-refresh-status` 查询同一任务到终态;成功后按原始意图执行 `db diff --all`(差异表)或 `db tables`(全部表)。无论 `tableCount` 大小都执行刷新;只有用户明确表示“不需要分析”“不刷新”或“只看现有结果”时才跳过异步刷新,并说明结果可能不是最新事实
|
|
71
71
|
- 需要查看全部表(含无差异表)或主动重新分析既有表时,用 `db tables`;它固定聚合全表分页。`db diff --all` 只聚合全部差异分页
|
|
72
72
|
- DB 增量分析先对完整 `toAnalyzeTables` 执行 `db analyze-batch-plan`;它生成的是本地批次方案,不是服务端 `planId`,也不会创建任务。再严格按批次顺序启动;每批独立保存 `planId`(即 `analyze-start` 返回值),当前批次到达已知终态前不得启动下一批
|
|
@@ -79,15 +79,16 @@ Agent 负责把已授权的目标推进到可验证的结果:主动获取事
|
|
|
79
79
|
- 推荐路径:查现有(`sql list/detail`) 或新建(`sql create`) → 拉/落本地(`sql pull` / `sql create`) → 编辑同步目录文件 → 检查、修复与复验(默认使用 `sql validate` 辅助诊断)→ 检查状态(`sql status`) → 先预览(`sql push --dry-run` / `sql delete --dry-run`) → 再 `sql push` / `sql delete` → `sql detail` / `sql exec` 验证
|
|
80
80
|
- 先使用 `sql list/detail` 查找可复用的 Custom SQL;没有满足需求的资源时,按照 [`sql-creation-workflow.md`](guides/sql-creation-workflow.md) 与 [`sql-mybatis.md`](guides/sql-mybatis.md) 创建、校验、发布并验证
|
|
81
81
|
- 页面执行已发布的 Custom SQL 时使用 `sqlCode` + `params`;Backend Function 默认使用 `context.client.sql.byName(sqlName).execute({ params })`,`sql.execute({ sqlCode, params })` 仅作兼容路径
|
|
82
|
-
4. **Backend Function
|
|
82
|
+
4. **Backend Function 工作流**
|
|
83
83
|
- 跨数据库连接的业务查询、关联筛选或聚合,先读 [跨库 BFF 查询与拼接](guides/cross-database-bff.md),确认完整键、执行顺序、各端授权和结果完整性
|
|
84
|
-
-
|
|
84
|
+
- 创建或修改 Backend Function 时,按 [BFF 工作流](guides/bff-creation-workflow.md)复用有效事实、按需查询并完成必要验证;运行行为异常时用 `bff logs` 按时间、级别和关键字查询日志
|
|
85
85
|
- `bff pull` / `bff push` 返回 `data.conflicts` 时,逐项报告 `lockKey` 和 `code`,并只在审阅后执行该项 `nextAction`;不得把同步冲突说成失败、自动使用 `--force`,或盲目重试整批脚本
|
|
86
86
|
- 创建会发送消息通知的 Backend Function 时,先读取 [`backend-function.md`](guides/backend-function.md) 的“消息通知扩展”契约,再执行 [`rabetbase notification config-list --type EMAIL`](references/rabetbase-notification-config-list.md) 获取当前应用的 `configCode`;不得猜测渠道、收件人或把密钥写进脚本
|
|
87
|
-
-
|
|
87
|
+
- 推送成功只证明平台保存;需要确认运行效果时,按 [BFF 运行验证](guides/bff-creation-workflow.md#9-运行态-smoke按需)执行,不把保存成功当作运行验证通过
|
|
88
|
+
- 已确认独立部署并需验证、出现平台到业务环境的同步疑点或明确需要独立部署同步功能时,读取[独立部署指南](guides/independent-deployment.md);正常开发和 push 不查询或展示 `vipDeploy`
|
|
88
89
|
5. **页面体系选择**
|
|
89
90
|
- 数据列表页(Data List Page)是数据集驱动的结构化页面组,用于数据查看、维护和模型验证,不等同于最终业务工作台
|
|
90
|
-
- 自定义页面(Custom Page
|
|
91
|
+
- 自定义页面(Custom Page)是完整代码文件驱动的平台页面,用于工作台、看板、门户和复杂业务交互;当前 React JSX 只是渲染实现,不是页面产品类型
|
|
91
92
|
- 图表、统计卡片和数据大屏使用自定义页面与白名单内的 ECharts
|
|
92
93
|
- 页面体系不明确时,先向用户确认;不要为同一目标同时创建数据列表页与自定义页面
|
|
93
94
|
6. **数据列表页(Data List Page,page)工作流**
|
|
@@ -102,7 +103,7 @@ Agent 负责把已授权的目标推进到可验证的结果:主动获取事
|
|
|
102
103
|
- 恢复已删除页面:先读 [`page restore`](references/rabetbase-page-restore.md),CLI 产品类型只使用 `DATA_LIST|CUSTOM`;默认按 ID 自动识别,存在跨类型同 ID 时显式传 `--page-type`
|
|
103
104
|
- 需要理解 formal schema 组件语义时,再按需阅读 `knowledge/page-schema/` 下的 PageSchema 组件资料;不要把它与 `rabetbase page` 命令 reference 混淆
|
|
104
105
|
7. **自定义页面工作流**
|
|
105
|
-
-
|
|
106
|
+
- 自定义页面与数据列表页是两类平台页面产品,不混用两类页面的命令
|
|
106
107
|
- 创建、修改或发布前,必须先阅读 [`custom-page-workflow.md`](guides/custom-page-workflow.md),再按其中的编排读取对应原子命令 reference
|
|
107
108
|
- 编写 JSX、CSS 或词包前,必须阅读 [`generation-standards.md`](knowledge/custom-page/generation-standards.md);选择 UI 组件时阅读 [`components.md`](knowledge/components.md)
|
|
108
109
|
- 自定义页面需要发起、查询或办理独立工作流时,必须完整阅读 [`custom-page-flow-sdk.md`](guides/custom-page-flow-sdk.md) 的返回对象字段字典和页面组合规则;生成时间线 UI 还必须阅读 [`custom-page-flow-timeline-display.md`](guides/custom-page-flow-timeline-display.md),中文页面保留“处理人 / 处理结果 / 处理说明 / 处理时间”等可见字段标题。页面使用 `useSdkClient()` 提供的当前登录态客户端调用无参数 `client.flow()`;不手动传 `appCode`、`operatorUserId`、AccessKey 或 Cookie,也不根据字段名猜测列表、详情、时间线、审批记录、抄送或批量结果的展示语义
|
|
@@ -149,6 +150,12 @@ Agent 负责把已授权的目标推进到可验证的结果:主动获取事
|
|
|
149
150
|
- 平台上有,本地没有:说明还没登记到本地配置,可用 `rabetbase workspace add`
|
|
150
151
|
- 本地有,平台上查不到:说明当前账号可能无权限,或本地配置已过时,应先核对权限与 appcode
|
|
151
152
|
|
|
153
|
+
## 页面开发与宿主前端集成
|
|
154
|
+
|
|
155
|
+
一个宿主应用可以集成多个前端子应用,以及多个平台页面。平台页面包括数据列表页(DATA_LIST)和自定义页面(CUSTOM)。按实际创建、集成与发布方式选择入口:子应用使用 appName 关联共享资源;平台页面走页面流程,无需额外绑定 appName;仅在明确需要调整菜单资源时使用 `menu asset-update`。具体命令选择见[宿主前端集成指南](guides/host-frontend-integration.md)。
|
|
156
|
+
|
|
157
|
+
前端子应用共享资源属于宿主的前端集成配置,菜单通过 appName 关联,使用 [`menu subapp-assets-status`](references/rabetbase-menu-subapp-assets-status.md) 核查、[`menu subapp-assets-update`](references/rabetbase-menu-subapp-assets-update.md) 更新。前端 `appName` 与业务 appCode 相互独立;这两个命令将 CLI 选中的应用作为菜单宿主:支持 `--appcode` / `--app` 覆盖,也支持工作区默认应用或唯一应用;多应用未选定目标时提示选择。资源优先级为子应用共享资源优先、菜单资源回退;执行前阅读[宿主前端集成指南](guides/host-frontend-integration.md),确定标识来源及工程对应关系,再按命令 reference 核查或更新。
|
|
158
|
+
|
|
152
159
|
## 菜单异步重新分组(`menu regroup-start`)
|
|
153
160
|
|
|
154
161
|
执行前先阅读 [`menu regroup-start`](references/rabetbase-menu-regroup-start.md) 与 [`task status`](references/rabetbase-task-status.md)。该流程的完成口径不是“任务已提交”,而是异步重新分组任务到达明确终态:
|
|
@@ -338,7 +345,7 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
338
345
|
| 运行 package.json 脚本 | [`rabetbase run <script>`](references/rabetbase-run.md) | `write`;先审阅脚本命令体,嵌入式工具暂不开放 |
|
|
339
346
|
| 安装 / 重装 / 刷新 CLI Built-in Skill | [`rabetbase cli-skill install`](references/rabetbase-cli-skill-install.md) | 由最新版官方 Skills CLI 从当前 npm 包内本地源重装同版本 Skill;发现本地 skill 过期时优先执行 |
|
|
340
347
|
| 退出登录 | [`rabetbase auth logout`](references/rabetbase-auth-logout.md) | 删除本地认证 cookie |
|
|
341
|
-
| 绑定当前用户的飞书账号 | [`rabetbase user-account feishu-bind`](references/rabetbase-user-account.md) | `write`;先 `--dry-run` 核对
|
|
348
|
+
| 绑定当前用户的飞书账号 | [`rabetbase user-account feishu-bind`](references/rabetbase-user-account.md) | `write`;先 `--dry-run` 核对 union_id;不需要 appCode;仅声明绑定,不验证账号归属 |
|
|
342
349
|
| 绑定当前用户的钉钉沙箱账号 | [`rabetbase user-account dingding-sandbox-bind`](references/rabetbase-user-account.md) | `write`;先 `--dry-run` 核对 ID,正式执行不要求 `--yes`;不需要 appCode |
|
|
343
350
|
| 诊断配置问题 | [`rabetbase doctor`](references/rabetbase-doctor.md) | Built-in Skill 一致性、合并配置、各侧 JSON 语法、域名、认证状态 |
|
|
344
351
|
| 上报平台问题 | [`rabetbase issue report`](references/rabetbase-issue-report.md) | 由 Skill 组织完整客观事实,禁止代替平台侧做根因判断或方案设计 |
|
|
@@ -362,8 +369,10 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
362
369
|
| 创建外部网站链接菜单 | [`rabetbase menu external-link-create`](references/rabetbase-menu-external-link-create.md) | `write`;显式选择 `embedded` 或 `new-window`,仅接受 HTTPS;建议先 dry-run,正式执行不要求 `--yes` |
|
|
363
370
|
| 原地更新既有外链 URL | [`rabetbase menu external-link-update`](references/rabetbase-menu-external-link-update.md) | `write`;精确单 ID、URL-only;必须带旧 URL 与父级断言,先 dry-run,再复用参数正式执行 |
|
|
364
371
|
| 修改任意类型菜单名称 | [`rabetbase menu rename`](references/rabetbase-menu-rename.md) | 精确单 ID、label-only;使用 `--expect-label` 防漂移,先 dry-run 并检查 before/after |
|
|
365
|
-
|
|
|
366
|
-
|
|
|
372
|
+
| 注册前端子应用页面与菜单 | [`菜单树注册流程`](references/rabetbase-menu-sync.md) | 默认由 Agent 读取现有分组、规划并预演菜单树、引用共享资源、创建后回读;原有 `menu sync` 交互及批量路径保留兜底 |
|
|
373
|
+
| 核查子应用资源版本 | [`rabetbase menu subapp-assets-status`](references/rabetbase-menu-subapp-assets-status.md) | 使用选中的菜单宿主与指定前端子应用,只读核查共享资源、菜单回退资源及优先级 |
|
|
374
|
+
| 更新子应用共享资源 | [`rabetbase menu subapp-assets-update`](references/rabetbase-menu-subapp-assets-update.md) | `write`;按明确的 URL 列表更新指定菜单宿主中的一个既有子应用资源项,先 dry-run 获取配置摘要,正式写入时带回摘要并回读管理端 |
|
|
375
|
+
| 修改平台页面或菜单兜底资源 URL | [`rabetbase menu asset-update`](references/rabetbase-menu-asset-update.md) | `write`;用 ID/path 精确选目标或显式 `--all`,默认 patch 且保留加载模式,先 dry-run 再复用参数正式执行 |
|
|
367
376
|
| 查看/管理开发角色 | [`rabetbase role list/detail/update/delete`](references/rabetbase-role-list.md) | 角色类型为 ADMIN/DEV/OWNER/CUSTOM;仅 CUSTOM 可改/删;当前不提供 create;输出 `scope: dev` |
|
|
368
377
|
| 解析昵称/用户名到 userId | [`rabetbase role user-resolve`](references/rabetbase-role-user-resolve.md) | 基于租户成员目录;重名时列出候选 ID,再把选中的 ID 传给 `role user-add/user-remove --user <id>` |
|
|
369
378
|
| 查询租户人员列表 | [`rabetbase tenant members-list --tenant-code <code>`](references/rabetbase-tenant-members-list.md) | 先校验当前账号所属租户,再返回全量人员;不分页、不输出邮箱/手机号/头像 |
|
|
@@ -469,7 +478,7 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
469
478
|
| Approval Flow | [`validate/list/detail/create/update/publish`](references/rabetbase-flow-commands.md) / [`runtime-user-search/runtime-role-list/runtime-role-user-list`](references/rabetbase-flow-resources.md) |
|
|
470
479
|
| Roles | [`list`](references/rabetbase-role-list.md) / `detail` / `update` / `delete` / [`user-resolve`](references/rabetbase-role-user-resolve.md) / [`user-add` / `user-remove`](references/rabetbase-role-user-add.md) |
|
|
471
480
|
| Tenant Members | [`tenant members-list`](references/rabetbase-tenant-members-list.md)(当前账号所属租户的全量人员目录) |
|
|
472
|
-
| app commands | [`list`](references/rabetbase-app-list.md)(只读应用事实;平台目录用 `list --remote`)/ [`members-list`](references/rabetbase-app-members-list.md)(应用人员及角色归属)。登记/移除应用改用 `workspace add` / `workspace remove` |
|
|
481
|
+
| app commands | [`detail`](references/rabetbase-app-detail.md)(按需读取平台 `vipDeploy`,不缓存到配置)/ [`list`](references/rabetbase-app-list.md)(只读应用事实;平台目录用 `list --remote`)/ [`members-list`](references/rabetbase-app-members-list.md)(应用人员及角色归属)。登记/移除应用改用 `workspace add` / `workspace remove` |
|
|
473
482
|
| 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) / [`user-deleted-field-list`](references/rabetbase-dataset-user-deleted-field-list.md) / [`field-restore`](references/rabetbase-dataset-field-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) |
|
|
474
483
|
| 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) |
|
|
475
484
|
| 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) |
|
|
@@ -517,7 +526,7 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
517
526
|
|
|
518
527
|
| 错误类型 | 含义 | 解决方案 |
|
|
519
528
|
| ------------------ | ---------------------------------------------------------- | ---------------------------------------------------------- |
|
|
520
|
-
| `auth_required` |
|
|
529
|
+
| `auth_required` | 当前请求缺少或未通过认证 | 先确认失败接口与身份;只有开发者侧认证失败才处理 `rabetbase auth`,不能据此判断浏览器业务会话 |
|
|
521
530
|
| `config_missing` | 未配置 appcode | `rabetbase workspace init --appcode <code>` 或传 `--appcode` |
|
|
522
531
|
| `flag_missing` | 缺少必填参数 | 检查 reference 文档确认必填 flags |
|
|
523
532
|
| `validation_error` | 输入校验失败 | 按实际诊断查证内容或参数;修复确认的错误,不迎合误报删改必要语义 |
|
|
@@ -193,15 +193,10 @@ rabetbase dataset detail --code <datasetCode> --format compress \
|
|
|
193
193
|
本地文件是主工作副本:
|
|
194
194
|
|
|
195
195
|
* 新建时用 `rabetbase bff create`
|
|
196
|
-
*
|
|
196
|
+
* 修改前按 [BFF 工作流](bff-creation-workflow.md#3-获取本轮平台基线)取得本轮最新平台基线、保留并合并本地改动,再编辑 `.rabetbase/bff/<appCode>/...`
|
|
197
197
|
* 需要远端最新内容时先 `rabetbase bff pull`
|
|
198
198
|
|
|
199
|
-
如果 Backend Function 行为与预期不符,或 `push` 显示 `unchanged`
|
|
200
|
-
|
|
201
|
-
* `rabetbase bff detail --id <id> --format json`
|
|
202
|
-
* 必要时再 `rabetbase bff pull --format json` 同步远端到本地
|
|
203
|
-
|
|
204
|
-
先确认“远端现在是什么”,再决定是否继续改本地、查页面或查锁状态。
|
|
199
|
+
如果 Backend Function 行为与预期不符,或 `push` 显示 `unchanged` 但效果没变,先区分平台保存事实与目标环境的运行事实。平台保存内容未知或出现远端变化证据时,用 `rabetbase bff detail --id <id> --format json` 核对;已有明确保存结果时不反复读取。`detail` 只返回平台保存的源码,不能证明业务环境实际执行了同一版本。独立部署或存在平台到业务环境同步疑点时,按[独立部署指南](independent-deployment.md)定位,运行验证按 [BFF 工作流](bff-creation-workflow.md#9-运行态-smoke按需)执行。
|
|
205
200
|
|
|
206
201
|
需要定位运行时输入、分支或异常时,用只读日志查询缩小范围:
|
|
207
202
|
|
|
@@ -4,22 +4,26 @@
|
|
|
4
4
|
|
|
5
5
|
## 核心原则
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
同一平台、同一应用的同一 BFF,以平台数据库中最新成功保存的内容及版本为远端基线。Git 分支不隔离该资源,其他开发者从不同分支执行 `bff push` 也可能更新它;`git pull` 不能替代获取平台最新基线。
|
|
8
|
+
|
|
9
|
+
每轮修改已有脚本前,先获取平台最新源码及版本,与本地改动比较、必要时合并,不能直接覆盖未提交修改。正式 push 继续使用版本冲突保护,防止覆盖获取基线后其他开发者或分支提交到平台的更新。
|
|
10
|
+
|
|
11
|
+
同一应用、连接和资源下,已确认且仍有效的需求与依赖事实可以复用;源码基线仅复用本轮修改开始前已从平台取得的最新内容,不能用上一轮或历史会话中的源码代替。本轮编辑和测试期间不因每次本地修改重复拉取;出现远端变化证据、真实冲突或写入结果未知时,按对应规则重新核对。按任务影响选择步骤,不按改动行数或文件数量省略必要验证。遵守项目工作目录约定,不通过更换目录或配置绕过冲突。
|
|
8
12
|
|
|
9
13
|
## 工作流
|
|
10
14
|
|
|
11
15
|
```
|
|
12
|
-
|
|
16
|
+
确认需求与已有事实 → [按需]发现资源及校验依赖 → 确认平台基线 → 编写本地脚本 → 自检与相关测试 → status → dry-run → push → [按需]运行态 smoke
|
|
13
17
|
```
|
|
14
18
|
|
|
15
|
-
### 0.
|
|
16
|
-
|
|
19
|
+
### 0. 速查公共函数(按需)
|
|
20
|
+
新建能力或需要寻找可复用依赖时,执行 `rabetbase bff list --type COMMON --format json`。对拟复用但契约尚未确认的函数,用 `rabetbase bff detail --id <id> --format json` 确认入参、返回值和副作用;已有有效依赖事实且本次不改变依赖时不重复发现。
|
|
17
21
|
|
|
18
22
|
### 1. 确认需求
|
|
19
|
-
写码前必须明确:类型(ENDPOINT/HOOK/COMMON
|
|
23
|
+
写码前必须明确:类型(ENDPOINT/HOOK/COMMON)、函数名、入参、返回结构,以及是否涉及数据集或消息通知。先复用已确认事实,无法从现有上下文确认的业务决策再问用户。通知型 Backend Function 还必须确认当前应用已有的 `configCode`、接收对象、标题/摘要和是否允许执行真实发送;不能用示例编码代替真实配置。
|
|
20
24
|
|
|
21
25
|
### 2. 校验依赖事实
|
|
22
|
-
Backend Function
|
|
26
|
+
Backend Function 涉及数据集时,核对本次依赖的字段名、类型、必填字段、枚举值、关联关系。事实缺失、依赖变化或已有证据不再有效时,执行 `rabetbase dataset detail --code <数据集编码> --format json`(或 `compress`);已确认且未变化的事实直接复用。禁止凭经验猜字段名,禁止把 Demo 或历史案例里的字段、表名、枚举值复制到当前脚本。
|
|
23
27
|
|
|
24
28
|
不读写数据集的纯消息通知 ENDPOINT 可以不依赖数据集;业务明确要求在数据集操作执行前发送预通知或告警时使用 Before HOOK;作为数据集操作成功后副作用的通知,只有响应结果已包含通知所需字段时才使用 After HOOK。三者都必须按 [`backend-function.md`](backend-function.md) 的“消息通知扩展”核对 `configCode`、`audiences` 和 `message`。先执行以下只读命令获取当前应用的 EMAIL 配置:
|
|
25
29
|
|
|
@@ -45,12 +49,12 @@ rabetbase dataset detail --code <数据集编码> --format compress \
|
|
|
45
49
|
|
|
46
50
|
涉及跨连接读取或拼接时,先读 [跨库 BFF 查询与拼接](cross-database-bff.md),确认完整键、基数、目标字段用途、各端授权和读取预算。业务关系说明与平台登记事实分别核对;冲突时报告差异,不能自动采用平台关系。复合键不能拆成独立的单字段 Relation。
|
|
47
51
|
|
|
48
|
-
### 3.
|
|
52
|
+
### 3. 获取本轮平台基线
|
|
49
53
|
* 新建 → 跳过
|
|
50
|
-
* 修改已有 →
|
|
51
|
-
*
|
|
54
|
+
* 修改已有 → 已知 ID 时执行 `rabetbase bff detail --id <id> --format json` 获取最新源码及版本;ID 未知时先 list 定位。本轮已通过 detail 或 pull 取得同一目标最新基线时不重复读取。需要更新本地副本时按冲突规则 pull 或合并,不覆盖未审阅的本地改动
|
|
55
|
+
* 目标不确定 → 先 list 定位,再读取所选资源详情
|
|
52
56
|
|
|
53
|
-
|
|
57
|
+
新建时命中同名脚本且用户意图不明确,再确认修改还是另起新名;用户已明确要求修改目标函数时直接继续。
|
|
54
58
|
|
|
55
59
|
### 4. 编写脚本(规范路径)
|
|
56
60
|
新建脚本应使用 **`rabetbase bff create`**,在 **`.rabetbase/bff/<appCode>/...`** 下生成脚手架后再编辑(路径与 `bff status` / `bff push` 一致)。**不要**在 `src/` 或仓库任意目录手写 Backend Function 再期望被 CLI 识别。
|
|
@@ -59,6 +63,8 @@ rabetbase dataset detail --code <数据集编码> --format compress \
|
|
|
59
63
|
通知需要在数据集 `create` / `update` / `delete` 执行前明确预告,并且通知失败应阻止本次操作时,选择 Before HOOK;通知由数据集操作成功触发,且响应结果已包含通知所需字段时,选择 After HOOK;响应结果不包含通知所需字段时,选择能在写入前读取并暂存必要字段、在成功后发送通知的受控 `ENDPOINT`。三者都使用 `await context.client.extension.execute("notification", "send", ...)`,并由 runtime 注入可信 `appCode` 和当前用户;不要把 `appCode`、渠道地址或密钥作为外部参数透传。
|
|
60
64
|
|
|
61
65
|
### 5. 自检
|
|
66
|
+
按变更影响运行相关行为测试,覆盖本次目标及受影响的既有约束;涉及权限、写入或外部副作用时验证相关入口。测试证据必须对应最终待推送内容及依赖,合并后内容变化须重跑受影响测试。
|
|
67
|
+
|
|
62
68
|
* 方法名正确
|
|
63
69
|
* 单条查询用 `getOne`
|
|
64
70
|
* `DB_TABLE` 优先使用 `context.client.models.byTable("<物理表名>")`;同名表存在多个 dblink 时补 `{ dblinkId: <已确认 ID> }`
|
|
@@ -99,8 +105,12 @@ rabetbase dataset detail --code <数据集编码> --format compress \
|
|
|
99
105
|
* 同步分歧进入 `conflicts`;逐项审阅 `lockKey`、`code` 和 `nextAction`,不要将它们说成失败
|
|
100
106
|
* 失败项进入 `failed`
|
|
101
107
|
|
|
108
|
+
push 失败或响应丢失时,按[写入结果与恢复动作](conflict-detection.md#写入结果与恢复动作)处理。
|
|
109
|
+
|
|
102
110
|
### 9. 运行态 smoke(按需)
|
|
103
|
-
`rabetbase bff push`
|
|
111
|
+
`rabetbase bff push` 的成功保存结果只证明对应脚本配置已写入平台。若需求要求确认运行效果,核对目标应用后执行验证;非独立部署应用沿用平台内的普通验证流程。已确认独立部署,或出现平台到业务环境的同步疑点时,读取[独立部署指南](independent-deployment.md)。
|
|
112
|
+
|
|
113
|
+
通过目标浏览器请求验证,或在运行 CLI 已配置到对应业务环境、认证与权限适用、函数契约及参数已确认且副作用获准后执行:
|
|
104
114
|
|
|
105
115
|
```bash
|
|
106
116
|
lovrabet bff exec --appcode <appCode> --name <functionName> --params '<json>' --format compress
|
|
@@ -111,8 +121,6 @@ lovrabet bff exec --appcode <appCode> --name <functionName> --params '<json>' --
|
|
|
111
121
|
* `lovrabet bff detail` 只确认运行契约和版本,不返回脚本源码;通知参数必须来自本地已审查脚本或明确业务契约,不能按函数名猜
|
|
112
122
|
* 通知执行超时或客户端未拿到结果时,先按“状态未知”处理;不得自动重试,避免重复发送
|
|
113
123
|
* `lovrabet` CLI 不可用、未配置或无权限时,明确记录“运行态 smoke 未执行”,不要把它写成 `rabetbase` 验证已通过
|
|
114
|
-
* 管理态已同步但运行态仍返回旧版本时,优先按传播延迟 / 缓存延迟处理:等待后重试;必要时再对目标脚本执行一次精确 `bff push --force --type <type> --name <name>`
|
|
115
|
-
* 多次重试仍旧版本时,记录平台运行态缓存风险并上报;不要通过修改 Skill、配置文件或另建脚本来掩盖
|
|
116
124
|
|
|
117
125
|
### 10. 本地文件
|
|
118
126
|
脚本内容直接保存在本地文件中,纳入 Git 管理。路径遵循 `.rabetbase/bff/<appCode>/` 目录约定(详见 `backend-function.md`):
|
|
@@ -135,18 +143,11 @@ lovrabet bff exec --appcode <appCode> --name <functionName> --params '<json>' --
|
|
|
135
143
|
* 不要假装成功
|
|
136
144
|
* 已成功推送的其他脚本不会自动回滚
|
|
137
145
|
|
|
138
|
-
##
|
|
139
|
-
|
|
140
|
-
正常流程:先在本地创建/修改,再通过 `push` 同步远端,路径同 Step 10(`.rabetbase/bff/<appCode>/` 下)。
|
|
141
|
-
例外场景:
|
|
142
|
-
* 用户主动要求"同步平台最新到本地" → 从平台拉取 → 覆盖本地(`bff pull`)
|
|
143
|
-
* 用户要求删除脚本 → `bff delete --yes --target ...`
|
|
144
|
-
|
|
145
|
-
修改已有脚本时,从平台拉取最新内容。
|
|
146
|
+
## 验证与收尾
|
|
146
147
|
|
|
147
|
-
|
|
148
|
+
优先消费 CLI 返回的保存及锁更新结果。最终内容通过相关测试、平台保存结果明确、本地同步状态正确且本次要求的运行验证完成后,报告结果并结束。无法完成的环节明确标为未验证,不把保存成功当成运行验收成功。
|
|
148
149
|
|
|
149
|
-
|
|
150
|
+
仅在内容、依赖、配置或目标变化,出现冲突、失败、未知结果或新风险时,追加能解决该问题的检查。没有新证据时不重复同内容测试、远端回读或 push;这不限制对真实失败的继续调查。
|
|
150
151
|
|
|
151
152
|
## Backend Function 语义差异
|
|
152
153
|
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# 宿主前端集成
|
|
2
|
+
|
|
3
|
+
按用户目标和已有对象选择流程。已有 pageId 且页面产品类型明确时,直接进入对应页面工作流;类型未知时先读取页面事实。处理前端子应用接入或资源版本时,再确定宿主与 appName;CLI 通过 `--app-name` 显式接收标识,不自动从当前工程推导。
|
|
4
|
+
|
|
5
|
+
## 产品对象与操作入口
|
|
6
|
+
|
|
7
|
+
`appCode` 唯一标识一个应用;该应用承载前端集成时称为“宿主应用”。确定目标 `appCode` 后即确定宿主,无需在该 appCode 下再选择另一个宿主实体。应用权限也直接归属于这个 appCode;同一应用可以集成多个以 `appName` 区分的前端子应用。
|
|
8
|
+
|
|
9
|
+
一个宿主应用可以集成多个前端子应用,以及多个平台页面。平台页面包括数据列表页(DATA_LIST)和自定义页面(CUSTOM);前端子应用是拥有自身工程、构建资源和页面路由的集成单位。菜单承载导航、路由及资源关联,不要求每个菜单都属于某个子应用。
|
|
10
|
+
|
|
11
|
+
| 产品对象 | 定位与操作入口 |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| 前端子应用 | 按宿主 appCode + appName 定位共享资源;需要注册本地页面路由时使用 `menu sync`,保留菜单分组与绑定 |
|
|
14
|
+
| 数据列表页(DATA_LIST) | `page generate-start` 发起异步生成,生成流程自动创建菜单入口;通过 `page generate-status` 跟进任务,以 `page data-list-status` 核对页面组及对应菜单,无需额外绑定 appName 或用 `menu sync` 注册菜单 |
|
|
15
|
+
| 自定义页面(CUSTOM) | `page create` 同时创建页面与菜单入口;后续按 pageId 使用 `page custom-update` 保存、`page custom-publish` 发布,无需额外绑定 appName 或用 `menu sync` 注册菜单 |
|
|
16
|
+
|
|
17
|
+
平台页面的完整工作流分别见[数据列表页开发](page-development-workflow.md)和[自定义页面开发](custom-page-workflow.md)。自定义页面的创建来源、完整文件更新与发布核验分别见 [`page create`](../references/rabetbase-page-create.md)、[`page custom-update`](../references/rabetbase-page-custom-update.md)、[`page custom-publish`](../references/rabetbase-page-custom-publish.md)。仅在明确需要调整菜单资源配置时,按 [`menu asset-update`](../references/rabetbase-menu-asset-update.md) 精确维护对应菜单;这不属于每次页面发布的必做步骤。
|
|
18
|
+
|
|
19
|
+
数据列表页的生成与核验见 [`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)。任务提交成功不代表页面和菜单已就绪;生成后核对完整页面组及对应菜单事实,不把菜单可见性等同于菜单是否存在,也不要求每个辅助页面都有可见菜单。预期菜单入口缺失时报告并核查,不自动用 `menu sync` 补建。
|
|
20
|
+
|
|
21
|
+
根据已有页面产品类型、菜单绑定、工程部署方式和用户目标选择流程。PageSchema 是数据列表页的页面描述技术,JSX 是自定义页面的实现技术,不作为额外产品类别;文件类型、页面数量、目录或包名也不能单独决定是否属于子应用。未绑定 appName 可能是尚未接入的子应用,应结合已有事实判断。归属明确时继续对应流程,不明确时只澄清本次目标的集成方式。平台页面不为使用共享资源而自动改造成子应用,也不强制补 appName。
|
|
22
|
+
|
|
23
|
+
子应用共享资源属于宿主的前端集成配置,菜单通过 appName 关联。同一宿主中的多个子应用分别使用各自的 appName;更新一个子应用时保留其他子应用与平台页面的配置。资源优先级判断仅适用于关联该子应用的菜单:共享资源优先,菜单资源回退;不扩展到宿主中的所有页面。`menu sync` 负责子应用本地路由注册,不替代平台页面的创建、内容更新与发布。
|
|
24
|
+
|
|
25
|
+
## 子应用标识与来源
|
|
26
|
+
|
|
27
|
+
`appName` 是同一宿主内稳定的前端子应用标识:宿主 `extend.assets[].appName` 与关联菜单 `extend.appName` 精确匹配。版本升级沿用该标识,只更新资源 URL。子应用访问的业务 appCode、CLI 应用 profile 和 `.rabetbase.json` 的 `defaultApp` 都不是该标识。
|
|
28
|
+
|
|
29
|
+
1. 沿用 CLI 的应用选择确定宿主:支持默认应用、唯一应用以及 `--appcode` / `--app` 覆盖。默认应用与目标宿主不同才覆盖,不要求每次显式传宿主。
|
|
30
|
+
2. 用户已提供准确标识时,用该值查询共享资源并核对关联菜单;用户只给了业务名称时,先定位真实标识。
|
|
31
|
+
3. 未提供标识时,用 `menu list --verbose` 读取 `extend.appName`,结合当前工程的页面路由、已知部署资源及用户提供的对应关系,定位属于本工程的菜单绑定。已知宿主共享配置中的标识也可作为候选。仅宿主内候选唯一、名称相似或单个路径相同,不足以证明属于当前工程。
|
|
32
|
+
4. 有明确对应关系且标识唯一时,沿用平台已有值。多个候选、来源冲突或无法建立工程对应关系时,展示候选和来源,请用户选择;不要自行改名或覆盖绑定。一个工程包含多个子应用时按本次目标分别定位。
|
|
33
|
+
5. 首次接入且没有已有绑定时,可参考工程现有命名提出候选,由用户确定标识;用户已明确指定时无需重复确认。`package.json.name`、目录名及构建目录中的名称只是线索,不作为平台标识的自动默认值;包名改变也不自动修改已有绑定。
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 读取标识必须带 --verbose;将占位符替换为已确定的宿主与标识
|
|
37
|
+
rabetbase menu list --appcode <host-appcode> --verbose --format json
|
|
38
|
+
rabetbase menu subapp-assets-status --appcode <host-appcode> --app-name <app-name> --format json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
执行前说明已定位的宿主、标识及其来源,例如:“已定位宿主 A 下的子应用 store-app,标识来自当前工程对应菜单的绑定;本次更新它的共享资源 URL。”已有授权和明确对应关系时继续执行,无需重复确认。
|
|
42
|
+
|
|
43
|
+
## 子应用资源版本核验
|
|
44
|
+
|
|
45
|
+
1. 用户只提供版本号时,先从用户提供的完整 URL、项目已有发布记录或构建上传结果中确认该版本对应的完整资源 URL 列表;版本号本身不是资源地址。不要仅凭 `package.json.version`、目录名称或替换旧 URL 中的版本字符串构造目标 URL。查不到可信对应关系时,说明缺少哪一版本的资源地址并请用户补充,暂不写入。
|
|
46
|
+
2. 用户指定“从 A 升到 B”时,先按共享资源优先、关联菜单资源回退的规则读取当前配置,并核对它与 A 的资源 URL 对应。当前配置已经等于 B 的完整 URL 列表时,报告配置已匹配,无需重复写入;当前配置与 A 不符、当前采用菜单回退且各关联菜单版本不一致,或无法确认 A 时,展示实际配置和差异,先澄清起点,不把预演指纹当成 A 版本已核验的证明。
|
|
47
|
+
3. 检测环境与本地发布版本是否一致时,比较实际发布资源的完整 URL 列表,并注明来源。本地包版本或源码版本不足以证明发布产物一致;没有可信发布资源地址时,报告“缺少发布资源依据,无法判断”,仍可列出已读取的共享配置和菜单回退配置。
|
|
48
|
+
4. 结论区分“资源 URL 配置一致”“CDN 文件内容已验证”“目标宿主加载已验证”。仅查询或更新管理端配置时只确认第一项,不能据此声称发布内容或实际加载版本已验证。
|
|
49
|
+
|
|
50
|
+
## 查询结果与后续操作
|
|
51
|
+
|
|
52
|
+
- `data.appName` 是输入 `--app-name` 去除首尾空白后的回显,不表示已匹配到配置。`sharedConfigured` 表示存在对应共享配置条目,`boundMenus` 表示关联菜单数量;共享资源是否可用还要检查 `sharedResources` 是否非空。
|
|
53
|
+
- 有菜单绑定但没有共享配置时,沿用菜单中的标识,引导在宿主中配置共享资源,并保留原有菜单资源。`menu subapp-assets-update` 只更新已有条目;首次建立条目需使用平台已有配置入口,配置后再查询核对,不把更新命令当作创建命令。
|
|
54
|
+
- 没有共享条目且没有关联菜单时,报告“该宿主下未找到此标识的共享配置或菜单绑定”,核对目标或按首次接入处理;不能凭回显报告已找到子应用。
|
|
55
|
+
- 检测子应用版本先比较非空共享资源,其次比较关联菜单资源;共享配置缺失时可以如实报告菜单当前配置,不自动写入或切换到逐菜单更新。数据列表页和自定义页面按各自页面流程核查,需要菜单资源时单独核查该菜单。
|
|
56
|
+
- 注册子应用页面时,将已确定的同一标识传给 `menu sync --params` 中的 `appName`,按现有菜单树保留分组;回读绑定时使用 `menu list --verbose`。共享资源更新和菜单注册分别按下列 reference 预演、执行和核验。
|
|
57
|
+
|
|
58
|
+
## 命令契约
|
|
59
|
+
|
|
60
|
+
- [查询共享资源](../references/rabetbase-menu-subapp-assets-status.md)
|
|
61
|
+
- [更新已有共享资源](../references/rabetbase-menu-subapp-assets-update.md)
|
|
62
|
+
- [注册菜单及保留原有操作路径](../references/rabetbase-menu-sync.md)
|