@lovrabet/rabetbase-cli 2.5.3-beta.1 → 2.5.3-beta.3
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/api-group.d.ts +22 -0
- package/lib/api/api-group.js +1 -0
- package/lib/api/fetch-model-list.js +1 -1
- package/lib/api/generate-api-file.d.ts +18 -2
- 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.d.ts +11 -0
- package/lib/api/legacy-api-file.js +1 -0
- package/lib/api/model-registry-file.d.ts +36 -0
- package/lib/api/model-registry-file.js +1 -0
- package/lib/api/model-registry-scaffold.d.ts +7 -0
- package/lib/api/model-registry-scaffold.js +1 -0
- package/lib/api/model-source.d.ts +6 -0
- package/lib/api/model-source.js +1 -0
- 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/logs.d.ts +7 -0
- package/lib/commands/bff/logs.js +1 -0
- 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.d.ts +7 -0
- 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.d.ts +21 -0
- package/lib/commands/dataset/batch-design.js +1 -0
- 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.d.ts +2 -0
- package/lib/commands/dataset/cross-relation-create.js +1 -0
- package/lib/commands/dataset/cross-relation-delete.d.ts +2 -0
- package/lib/commands/dataset/cross-relation-delete.js +1 -0
- package/lib/commands/dataset/cross-relation-list.d.ts +2 -0
- package/lib/commands/dataset/cross-relation-list.js +1 -0
- package/lib/commands/dataset/cross-relation-shared.d.ts +190 -0
- package/lib/commands/dataset/cross-relation-shared.js +1 -0
- package/lib/commands/dataset/cross-relation-update.d.ts +2 -0
- package/lib/commands/dataset/cross-relation-update.js +1 -0
- 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.d.ts +2 -0
- package/lib/commands/flow/create.js +1 -0
- package/lib/commands/flow/detail.d.ts +2 -0
- package/lib/commands/flow/detail.js +1 -0
- package/lib/commands/flow/index.d.ts +3 -0
- package/lib/commands/flow/index.js +1 -0
- package/lib/commands/flow/list.d.ts +2 -0
- package/lib/commands/flow/list.js +1 -0
- package/lib/commands/flow/publish.d.ts +2 -0
- package/lib/commands/flow/publish.js +1 -0
- package/lib/commands/flow/runtime-resources-shared.d.ts +40 -0
- package/lib/commands/flow/runtime-resources-shared.js +1 -0
- package/lib/commands/flow/runtime-role-list.d.ts +2 -0
- package/lib/commands/flow/runtime-role-list.js +1 -0
- package/lib/commands/flow/runtime-role-user-list.d.ts +2 -0
- package/lib/commands/flow/runtime-role-user-list.js +1 -0
- package/lib/commands/flow/runtime-user-search.d.ts +2 -0
- package/lib/commands/flow/runtime-user-search.js +1 -0
- package/lib/commands/flow/shared.d.ts +41 -0
- package/lib/commands/flow/shared.js +1 -0
- package/lib/commands/flow/update.d.ts +2 -0
- package/lib/commands/flow/update.js +1 -0
- package/lib/commands/flow/validate.d.ts +3 -0
- package/lib/commands/flow/validate.js +1 -0
- 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.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/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.d.ts +28 -0
- package/lib/commands/project/api-architecture-upgrade.js +1 -0
- 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.d.ts +30 -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/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.d.ts +2 -0
- 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 +2 -1
- package/lib/context.js +1 -1
- package/lib/core/alias-resolver.d.ts +13 -17
- package/lib/core/alias-resolver.js +1 -1
- package/lib/core/api-client.d.ts +176 -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.d.ts +55 -0
- package/lib/core/bff/hook-directory.js +1 -0
- package/lib/core/bff/lock.js +1 -1
- package/lib/core/bff/types.d.ts +15 -0
- package/lib/core/bff/utils.js +1 -1
- package/lib/core/cross-db-relation.d.ts +41 -0
- package/lib/core/cross-db-relation.js +1 -0
- package/lib/core/db-resolver.js +1 -1
- package/lib/core/flow-config.d.ts +628 -0
- package/lib/core/flow-config.js +1 -0
- 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.d.ts +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.d.ts +0 -10
- 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/types/index.d.ts +11 -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 +12 -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/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 +4 -1
- package/skills/rabetbase/SKILL.md +31 -9
- package/skills/rabetbase/guides/approval-flow-development-workflow.md +137 -0
- package/skills/rabetbase/guides/backend-function.md +19 -9
- package/skills/rabetbase/guides/bff-creation-workflow.md +10 -1
- package/skills/rabetbase/guides/conflict-detection.md +2 -0
- package/skills/rabetbase/guides/sdk-client-generation.md +112 -60
- package/skills/rabetbase/guides/typescript-sdk.md +9 -0
- package/skills/rabetbase/knowledge/approval-flow/config-json-schema.md +290 -0
- package/skills/rabetbase/references/rabetbase-api-pull.md +30 -19
- package/skills/rabetbase/references/rabetbase-app-list.md +1 -1
- package/skills/rabetbase/references/rabetbase-bff-create.md +1 -1
- package/skills/rabetbase/references/rabetbase-bff-logs.md +47 -0
- package/skills/rabetbase/references/rabetbase-bff-pull.md +7 -3
- package/skills/rabetbase/references/rabetbase-bff-push.md +10 -2
- package/skills/rabetbase/references/rabetbase-config.md +2 -1
- package/skills/rabetbase/references/rabetbase-dataset-cross-relations.md +60 -0
- package/skills/rabetbase/references/rabetbase-dataset-generate.md +52 -2
- package/skills/rabetbase/references/rabetbase-flow-commands.md +86 -0
- package/skills/rabetbase/references/rabetbase-flow-resources.md +83 -0
- package/skills/rabetbase/references/rabetbase-flow-runtime-boundary.md +25 -0
- package/skills/rabetbase/references/rabetbase-instant-api-policy.md +103 -11
- package/skills/rabetbase/references/rabetbase-notification-config-list.md +17 -0
- package/skills/rabetbase/references/rabetbase-project-create.md +3 -3
- package/skills/rabetbase/references/rabetbase-project-upgrade.md +24 -13
- package/skills/rabetbase.manifest.json +10 -3
- package/templates/README.md +16 -4
- package/templates/generate-api/model-runtime.ts.tpl +101 -0
- package/templates/generate-api/profile-api.ts.tpl +21 -0
- package/templates/generate-api/profile-client.ts.tpl +14 -0
|
@@ -12,29 +12,114 @@
|
|
|
12
12
|
|
|
13
13
|
`init`、`pull`、`validate` 和 `publish` 只使用该路径,不提供 `--file`。目标应用来自当前工作区、`--app <name>` 或 `--appcode <code>`。策略不存入 `.rabetbase.json` 或运行态 app-config。
|
|
14
14
|
|
|
15
|
-
`version`
|
|
15
|
+
`version` 是 JSON 结构版本:`"1"` 保持精确匹配兼容,`"2"` 支持通配选择和排除项;新版 CLI 的 `init` 默认创建版本 2。`revision` 是服务端发布历史版本,首次发布为 1,后续发布和回滚递增;两者含义不同。
|
|
16
16
|
|
|
17
17
|
## 配置结构
|
|
18
18
|
|
|
19
|
+
### 先取得真实 Dataset 选择器
|
|
20
|
+
|
|
21
|
+
策略匹配的是平台 Dataset,不是前端 SDK 的变量名。编辑前按下面顺序取得当前应用的事实:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# 更新当前应用的本地模型事实;多应用项目显式选择目标
|
|
25
|
+
rabetbase api pull --appcode <appCode> --yes --format compress
|
|
26
|
+
|
|
27
|
+
# 对将被规则覆盖的 Dataset 确认真实 code、字段和支持的操作
|
|
28
|
+
rabetbase dataset detail --appcode <appCode> --code <datasetCode> --format compress
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`api pull` 生成的模型条目包含 `datasetCode`、可选 `tableName` 和 SDK `alias`。规则中优先只写这个 `datasetCode`;**不能**写 `alias`。例如模型中的 `alias: "brand"` 只是 SDK 调用名,不是策略选择器。只有无法取得 code 的兼容场景才使用 `tableName`;若两者同时填写,服务端要求它们解析为同一个 Dataset。
|
|
32
|
+
|
|
33
|
+
认证不可用、`api pull` 失败或模型文件明显过期时,停止配置并先恢复认证;不要根据业务名称、SDK alias 或旧截图猜测 `datasetCode`。
|
|
34
|
+
|
|
35
|
+
### Dataset 选择器规则
|
|
36
|
+
|
|
37
|
+
| 场景 | 合法写法 | 约束 |
|
|
38
|
+
| --- | --- | --- |
|
|
39
|
+
| v1/v2 的精确 Dataset | `{ "datasetCode": "<real-dataset-code>" }` | 首选;code 来自当前应用的 `api pull` 或 `dataset detail` |
|
|
40
|
+
| v1/v2 的精确物理表 | `{ "tableName": "<real-table-name>" }` | 可用作兼容选择器;不能填 SDK alias |
|
|
41
|
+
| v1/v2 双字段精确选择 | `{ "datasetCode": "…", "tableName": "…" }` | 两值必须解析为同一个 Dataset;已知 code 时不要冗余填写 tableName |
|
|
42
|
+
| 仅 v2 的全部 Dataset | `{ "datasetCode": "*" }` | `datasets` 的唯一元素;不能附带 `tableName`,也不能与精确选择器混用 |
|
|
43
|
+
|
|
44
|
+
`{ "tableName": "*" }` 在任何版本都不支持。版本 1 只接受上面的精确选择器,不能使用 Dataset/API 通配或 `excludes`。
|
|
45
|
+
|
|
46
|
+
### 顶层字段
|
|
47
|
+
|
|
48
|
+
| 字段 | 必填 | 取值 / 约束 | 作用 |
|
|
49
|
+
| --- | --- | --- | --- |
|
|
50
|
+
| `version` | 是 | `"1"` 或 `"2"`;新文件使用 `"2"` | JSON 结构版本,不是服务端发布 revision |
|
|
51
|
+
| `appCode` | 是 | 必须等于当前命令解析出的应用 | 防止跨应用误发布 |
|
|
52
|
+
| `defaults.instantApi` | 是 | `"allow"` 或 `"deny"` | 没有任何规则命中时的最终动作;不能是 `"route"` |
|
|
53
|
+
| `rules` | 否 | 规则数组;缺省或空数组表示全部使用默认动作 | 对特定 Dataset + API 组合覆盖默认动作 |
|
|
54
|
+
|
|
55
|
+
### 规则字段
|
|
56
|
+
|
|
57
|
+
| 字段 | 必填 | 取值 / 约束 |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| `name` | 是 | 稳定、可读的规则标识,方便审阅和版本回溯 |
|
|
60
|
+
| `description` | 否 | 说明规则的业务目的和影响范围 |
|
|
61
|
+
| `datasets` | 是 | 非空数组;每项优先仅 `{ "datasetCode": "<real-dataset-code>" }` |
|
|
62
|
+
| `apis` | 是 | 非空数组,每项是独立 API 名;不能把多个 API 拼为一个逗号字符串 |
|
|
63
|
+
| `action` | 是 | `"allow"`、`"deny"` 或 `"route"` |
|
|
64
|
+
| `backendFunction` | 条件必填 | 仅 `action: "route"` 时填写;必须是同一应用的普通 `ENDPOINT`,不能是 Personal Backend Function |
|
|
65
|
+
| `excludes` | 仅 v2 可用 | 从本规则的 Dataset × API 匹配集合中扣除的数组;每项都要有 `datasets` 和 `apis`,且不得超出父规则范围 |
|
|
66
|
+
|
|
67
|
+
支持的 API 名称为:`getSelectOptions`、`getList`、`excelExport`、`filter`、`aggregate`、`getOne`、`getOneOrigin`、`create`、`batchCreate`、`update`、`delete`。
|
|
68
|
+
|
|
69
|
+
规则数组**没有优先级**。服务端会先按每条规则的 Dataset × API 组合(扣除 `excludes` 后)计算覆盖范围;仍有重叠就校验失败,而不是“后一条覆盖前一条”。未被任何规则覆盖的组合回退到 `defaults.instantApi`。
|
|
70
|
+
|
|
71
|
+
### 精确匹配示例
|
|
72
|
+
|
|
73
|
+
下面的 `<real-dataset-code>` 必须替换为刚由 `api pull` 得到的 code,不能替换成 alias 或展示名称:
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"version": "2",
|
|
78
|
+
"appCode": "app-example",
|
|
79
|
+
"defaults": { "instantApi": "allow" },
|
|
80
|
+
"rules": [
|
|
81
|
+
{
|
|
82
|
+
"name": "deny-sensitive-export",
|
|
83
|
+
"description": "禁止敏感数据集通过 Instant API 导出",
|
|
84
|
+
"datasets": [{ "datasetCode": "<real-dataset-code>" }],
|
|
85
|
+
"apis": ["excelExport"],
|
|
86
|
+
"action": "deny"
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
这是默认放行下的最小收紧方式:仅该 Dataset 的 `excelExport` 被禁止,其他组合继续由默认动作处理。
|
|
93
|
+
|
|
94
|
+
### 版本 2 通配与排除示例
|
|
95
|
+
|
|
19
96
|
```json
|
|
20
97
|
{
|
|
21
|
-
"version": "
|
|
98
|
+
"version": "2",
|
|
22
99
|
"appCode": "app-example",
|
|
23
100
|
"defaults": {
|
|
24
101
|
"instantApi": "allow"
|
|
25
102
|
},
|
|
26
103
|
"rules": [
|
|
27
104
|
{
|
|
28
|
-
"name": "route-student-
|
|
29
|
-
"description": "
|
|
30
|
-
"datasets": [
|
|
105
|
+
"name": "route-all-except-student-create",
|
|
106
|
+
"description": "除学生新增外,全部数据集操作交给统一 Backend Function",
|
|
107
|
+
"datasets": [{"datasetCode": "*"}],
|
|
108
|
+
"apis": ["*"],
|
|
109
|
+
"excludes": [
|
|
31
110
|
{
|
|
32
|
-
"datasetCode": "student23"
|
|
111
|
+
"datasets": [{"datasetCode": "student23"}],
|
|
112
|
+
"apis": ["create"]
|
|
33
113
|
}
|
|
34
114
|
],
|
|
35
|
-
"apis": ["filter"],
|
|
36
115
|
"action": "route",
|
|
37
|
-
"backendFunction": "
|
|
116
|
+
"backendFunction": "unifiedGateway"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "allow-student-create",
|
|
120
|
+
"datasets": [{"datasetCode": "student23"}],
|
|
121
|
+
"apis": ["create"],
|
|
122
|
+
"action": "allow"
|
|
38
123
|
}
|
|
39
124
|
]
|
|
40
125
|
}
|
|
@@ -43,8 +128,13 @@
|
|
|
43
128
|
- `defaults.instantApi` 只允许 `allow` 或 `deny`,不能是 `route`。
|
|
44
129
|
- `rules[].action` 允许 `allow`、`deny`、`route`。
|
|
45
130
|
- `route` 必须填写 `backendFunction`;其他 action 禁止填写。
|
|
46
|
-
- `datasets[]` 至少填写 `datasetCode` 或 `tableName
|
|
47
|
-
-
|
|
131
|
+
- `datasets[]` 至少填写 `datasetCode` 或 `tableName`;已知 code 时只填写稳定的 `datasetCode`。两者同时填写时必须指向同一 Dataset。
|
|
132
|
+
- 版本 1 只支持精确匹配,不允许 `*` 或 `excludes`。
|
|
133
|
+
- 版本 2 的全部数据集写为 `datasets: [{"datasetCode":"*"}]`。通配项必须是数组唯一元素且不能包含 `tableName`;不支持 `tableName: "*"`。
|
|
134
|
+
- 版本 2 的全部 API 写为 `apis: ["*"]`,`"*"` 必须是数组唯一元素。
|
|
135
|
+
- `excludes[]` 每项包含 `datasets` 和 `apis`,表示从父规则中扣除两者笛卡尔积;排除范围不能超出父规则。
|
|
136
|
+
- 被排除的组合可以由后续其他规则处理;没有其他规则时执行 `defaults.instantApi`。
|
|
137
|
+
- 排除后仍重复的 `datasetCode + api` 会校验失败,规则数组顺序不表示优先级。
|
|
48
138
|
- `apis` 的每个元素是一个独立值。`["filter,create"]` 或包含中文逗号的 `["filter,create"]` 都不是两个 API。
|
|
49
139
|
- 支持的 API:`getSelectOptions`、`getList`、`excelExport`、`filter`、`aggregate`、`getOne`、`getOneOrigin`、`create`、`batchCreate`、`update`、`delete`。
|
|
50
140
|
|
|
@@ -70,7 +160,7 @@ rabetbase instant-api-policy publish --expected-revision 0 --change-summary "ini
|
|
|
70
160
|
rabetbase instant-api-policy publish --expected-revision 0 --change-summary "initial policy" --yes --format compress
|
|
71
161
|
```
|
|
72
162
|
|
|
73
|
-
`init --default-action deny`
|
|
163
|
+
`init --default-action deny` 可以创建版本 2 的默认禁止草稿。`init` 和 `pull` 遇到不同的既有文件时停止;只有 `--force --yes` 可以替换。已有版本 1 文件仍可继续校验和发布。
|
|
74
164
|
|
|
75
165
|
`validate` 调用服务端完整校验,返回 `configHash` 和 `normalizedConfig`,但不发布、不生成 revision。Dataset、API、规则重叠以及 Backend Function 合法性以该结果为准。
|
|
76
166
|
|
|
@@ -90,3 +180,5 @@ rabetbase instant-api-policy rollback --revision 2 --expected-revision 5 --chang
|
|
|
90
180
|
回滚不会把 revision 倒退,也不会覆盖历史。例如当前 revision 为 5,恢复 revision 2 后会生成新的 revision 6。
|
|
91
181
|
|
|
92
182
|
发布和回滚最多提交一次。CLI 随后读取当前策略,要求 configHash 匹配且 revision 推进。响应丢失但回读可以证明结果时返回 verified;证据不足时停止并提示执行 `current`,不得自动重提。Runtime 最迟约 30 秒感知新策略。
|
|
183
|
+
|
|
184
|
+
数据集通配项按应用当前有效数据集展开;应用新增数据集后,会在 Runtime 策略缓存刷新时自动进入通配规则范围。
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
```bash
|
|
8
8
|
rabetbase notification config-list --format compress
|
|
9
9
|
rabetbase notification config-list --type EMAIL --format compress
|
|
10
|
+
rabetbase notification config-list --all --format compress
|
|
10
11
|
rabetbase notification config-list --type EMAIL --appcode app-xxxxx --format json
|
|
11
12
|
```
|
|
12
13
|
|
|
@@ -20,6 +21,8 @@ rabetbase notification config-list --type EMAIL --appcode app-xxxxx --format jso
|
|
|
20
21
|
|
|
21
22
|
类型值使用大写。
|
|
22
23
|
|
|
24
|
+
`--all` 会分别查询 `EMAIL`、`FEISHU`、`DINGTALK`、`WECOM`、`WEBHOOK`,合并为同一份安全摘要。`--all` 与 `--type` 互斥;不传二者时继续保持默认 `EMAIL` 行为。
|
|
25
|
+
|
|
23
26
|
## 输出
|
|
24
27
|
|
|
25
28
|
```json
|
|
@@ -45,6 +48,20 @@ rabetbase notification config-list --type EMAIL --appcode app-xxxxx --format jso
|
|
|
45
48
|
}
|
|
46
49
|
```
|
|
47
50
|
|
|
51
|
+
`--all` 输出使用 `data.channelTypes` 代替单个 `data.channelType`,`configs` 为五种类型结果的合并列表:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"ok": true,
|
|
56
|
+
"data": {
|
|
57
|
+
"appCode": "app-xxxxx",
|
|
58
|
+
"channelTypes": ["EMAIL", "FEISHU", "DINGTALK", "WECOM", "WEBHOOK"],
|
|
59
|
+
"count": 2,
|
|
60
|
+
"configs": []
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
48
65
|
CLI 只输出用于选择配置的安全字段,不输出:
|
|
49
66
|
|
|
50
67
|
* `channelConfig`
|
|
@@ -51,8 +51,8 @@ rabetbase project create my-project --appcode <code>
|
|
|
51
51
|
**关键边界:**
|
|
52
52
|
|
|
53
53
|
- 当前目录非空时不得覆盖、移动或删除已有内容,应报告冲突。
|
|
54
|
-
- `
|
|
55
|
-
- `--force --yes`
|
|
54
|
+
- `needsProjectUpgrade` 表示模型事实已刷新,但已有项目尚未安装稳定源码入口;新建项目模板正常不会出现该状态。
|
|
55
|
+
- `--force --yes` 在注册表模式只用于确认远端空清单,不用于源码迁移。
|
|
56
56
|
- 此意图只授权本地工程创建与平台事实读取,不授权修改线上业务数据或平台资源。
|
|
57
57
|
|
|
58
58
|
`api pull` 的单应用/项目应用清单输出结构见 [`rabetbase-api-pull.md`](rabetbase-api-pull.md),TypeScript 合并规则见 [`sdk-client-generation.md`](../guides/sdk-client-generation.md)。Agent 可根据实际输出选择检查、修复和验证方式。
|
|
@@ -70,7 +70,7 @@ rabetbase project create my-project --appcode <code>
|
|
|
70
70
|
- 交互与非交互模式使用同一创建流程,都会安装依赖、格式化代码并写入项目配置
|
|
71
71
|
- 项目模板从 CDN 下载并校验 SHA-256;CDN 不可用、模板不兼容或校验失败时命令停止,修复后重试
|
|
72
72
|
- 新项目中的 `.rabetbase.json` **只继承**全局中的少量偏好及 `region` / Domain 路由配置,**不会**把全局的 `apps` / `defaultApp` 复制进新项目
|
|
73
|
-
- `src/api/sdk-config.ts` 与 `rabetbase.domain-routing.json` 只生成浏览器可公开的最终路由,不会写入 `cookie`、`accessKey` 等认证配置;`rabetbase run start|dev|build|preview` 会在执行脚本前刷新公开 Domain 快照,也可用 [`project domain-routing-sync`](rabetbase-project-domain-routing-sync.md)
|
|
73
|
+
- `src/api/sdk-config.ts` 与 `rabetbase.domain-routing.json` 只生成浏览器可公开的最终路由,不会写入 `cookie`、`accessKey` 等认证配置;`rabetbase run start|dev|build|preview` 会在执行脚本前刷新公开 Domain 快照,也可用 [`project domain-routing-sync`](rabetbase-project-domain-routing-sync.md) 立即显式刷新。新项目模板已经包含稳定 `api.ts` / `client.ts`;若首次拉取失败,修复登录或连接后执行普通 `rabetbase api pull --format compress` 刷新占位注册表
|
|
74
74
|
|
|
75
75
|
| 当前有效路由 | `src/api/sdk-config.ts` |
|
|
76
76
|
|--------------|-------------------------|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# project upgrade
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
升级已有项目的 SDK 依赖与应用源码结构。新项目继续使用 `project create`;Dataset 事实刷新继续使用 `api pull`。
|
|
4
|
+
|
|
5
|
+
`.lovrabet.json`、`.lovrabet/` 与 Lovrabet Skill 属于 Lovrabet 运行态 CLI,可与 Rabetbase 项目配置和源码共存。该命令不会读取、迁移、改写或删除这些运行态资产。
|
|
4
6
|
|
|
5
7
|
## 命令
|
|
6
8
|
|
|
@@ -8,6 +10,9 @@
|
|
|
8
10
|
# 交互模式(先分析 → 展示报告 → 确认 → 执行)
|
|
9
11
|
rabetbase project upgrade
|
|
10
12
|
|
|
13
|
+
# 只查看完整迁移计划,不写文件
|
|
14
|
+
rabetbase project upgrade --dry-run
|
|
15
|
+
|
|
11
16
|
# 自动模式(跳过确认)
|
|
12
17
|
rabetbase project upgrade --yes
|
|
13
18
|
```
|
|
@@ -17,27 +22,33 @@ rabetbase project upgrade --yes
|
|
|
17
22
|
| Flag | 类型 | 必填 | 默认 | 说明 |
|
|
18
23
|
|------|------|------|------|------|
|
|
19
24
|
| `--yes` | boolean | 否 | `false` | 跳过确认提示,直接执行 |
|
|
25
|
+
| `--dry-run` | boolean | 否 | `false` | 只输出依赖和源码升级计划 |
|
|
20
26
|
|
|
21
27
|
## 执行流程
|
|
22
28
|
|
|
23
|
-
两阶段模式:先分析 → 展示报告 → 确认 → 执行
|
|
29
|
+
两阶段模式:先分析 → 展示报告 → 确认 → 执行 2 步:
|
|
24
30
|
|
|
25
31
|
| 步骤 | 操作 | 说明 |
|
|
26
32
|
|------|------|------|
|
|
27
|
-
| 1 |
|
|
28
|
-
| 2 |
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
| 1 | 升级 SDK 依赖 | 将已有 `@lovrabet/sdk` 依赖更新到当前维护版本 |
|
|
34
|
+
| 2 | 升级应用源码 | 迁移稳定 API 入口、模型注册表、运行时选择器和项目 Domain 路由 |
|
|
35
|
+
|
|
36
|
+
## 源码迁移安全规则
|
|
37
|
+
|
|
38
|
+
- 先执行 `rabetbase project upgrade --dry-run`;确认 `apiArchitecture.groups[].files[]` 的动作后再正式执行。
|
|
39
|
+
- 缺失文件直接创建;可识别的旧 CLI 生成文件先备份到 `.rabetbase/project-upgrade/api-model-registry-v2/backups/` 再替换。
|
|
40
|
+
- 发现业务定制的 `api.ts` / `client.ts` 时不覆盖原文件,在 `candidates/` 下写入候选文件,并返回 `manualMergeRequired: true`。
|
|
41
|
+
- 旧 `api.ts` 中可识别的 Dataset 事实迁入 `models.generated.ts`,迁移后再运行 `rabetbase api pull --format compress` 刷新远端事实。
|
|
42
|
+
- 多个未配置 `apiGroup` 且共用同一 `apiDir` 的历史 profile 保留 `[name-]api.ts` / `[name-]client.ts`,不会被静默归并。
|
|
43
|
+
- 命令可重复执行;已是最新稳定入口时不重复改写。
|
|
33
44
|
|
|
34
45
|
## 分析报告
|
|
35
46
|
|
|
36
47
|
执行前会扫描并展示:
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
48
|
+
- `@lovrabet/sdk` 是否需要更新
|
|
49
|
+
- 每个 API 目录的 profile、文件动作、备份或候选文件路径
|
|
50
|
+
|
|
51
|
+
不会把 `.lovrabet.json`、`.lovrabet/`、Lovrabet Skill 或 Lovrabet 的 IDE 配置列为待清理项。
|
|
41
52
|
|
|
42
53
|
## 输出
|
|
43
54
|
|
|
@@ -49,7 +60,7 @@ rabetbase project upgrade --yes
|
|
|
49
60
|
## 触发方式
|
|
50
61
|
|
|
51
62
|
- 手动执行:`rabetbase project upgrade`
|
|
52
|
-
-
|
|
63
|
+
- 已有应用需要采用当前源码架构:先 `rabetbase project upgrade --dry-run`,再正式升级
|
|
53
64
|
|
|
54
65
|
## 参考
|
|
55
66
|
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"name": "rabetbase",
|
|
4
4
|
"packageName": "@lovrabet/rabetbase-cli",
|
|
5
|
-
"packageVersion": "2.5.3-beta.
|
|
6
|
-
"skillVersion": "2.5.3-beta.
|
|
5
|
+
"packageVersion": "2.5.3-beta.3",
|
|
6
|
+
"skillVersion": "2.5.3-beta.3",
|
|
7
7
|
"files": [
|
|
8
8
|
"SKILL.md",
|
|
9
|
+
"guides/approval-flow-development-workflow.md",
|
|
9
10
|
"guides/backend-function.md",
|
|
10
11
|
"guides/best-practices.md",
|
|
11
12
|
"guides/bff-creation-workflow.md",
|
|
@@ -22,6 +23,7 @@
|
|
|
22
23
|
"guides/sql-mybatis.md",
|
|
23
24
|
"guides/troubleshooting.md",
|
|
24
25
|
"guides/typescript-sdk.md",
|
|
26
|
+
"knowledge/approval-flow/config-json-schema.md",
|
|
25
27
|
"knowledge/components.md",
|
|
26
28
|
"knowledge/custom-page/generation-standards.md",
|
|
27
29
|
"knowledge/custom-page/page-templates.md",
|
|
@@ -46,6 +48,7 @@
|
|
|
46
48
|
"references/rabetbase-bff-delete.md",
|
|
47
49
|
"references/rabetbase-bff-detail.md",
|
|
48
50
|
"references/rabetbase-bff-list.md",
|
|
51
|
+
"references/rabetbase-bff-logs.md",
|
|
49
52
|
"references/rabetbase-bff-pull.md",
|
|
50
53
|
"references/rabetbase-bff-push.md",
|
|
51
54
|
"references/rabetbase-bff-save.md",
|
|
@@ -58,6 +61,7 @@
|
|
|
58
61
|
"references/rabetbase-database-template.md",
|
|
59
62
|
"references/rabetbase-dataset-business-group-update.md",
|
|
60
63
|
"references/rabetbase-dataset-business-groups.md",
|
|
64
|
+
"references/rabetbase-dataset-cross-relations.md",
|
|
61
65
|
"references/rabetbase-dataset-delete.md",
|
|
62
66
|
"references/rabetbase-dataset-detail.md",
|
|
63
67
|
"references/rabetbase-dataset-extend-update.md",
|
|
@@ -85,6 +89,9 @@
|
|
|
85
89
|
"references/rabetbase-deployment-sync-all.md",
|
|
86
90
|
"references/rabetbase-doctor.md",
|
|
87
91
|
"references/rabetbase-file.md",
|
|
92
|
+
"references/rabetbase-flow-commands.md",
|
|
93
|
+
"references/rabetbase-flow-resources.md",
|
|
94
|
+
"references/rabetbase-flow-runtime-boundary.md",
|
|
88
95
|
"references/rabetbase-init.md",
|
|
89
96
|
"references/rabetbase-instant-api-policy.md",
|
|
90
97
|
"references/rabetbase-issue-report.md",
|
|
@@ -140,5 +147,5 @@
|
|
|
140
147
|
"references/rabetbase-user-account.md",
|
|
141
148
|
"references/rabetbase-workspace.md"
|
|
142
149
|
],
|
|
143
|
-
"digest": "
|
|
150
|
+
"digest": "fb687c0d57936cfcba5e4f4d395e8695309e549ce848c5834befbade117e83e8"
|
|
144
151
|
}
|
package/templates/README.md
CHANGED
|
@@ -52,12 +52,24 @@ node lib/cli.js project create template-verify --template-source templates/proje
|
|
|
52
52
|
模板同步完成后,更新模板自身的 `package.json#version`,再生成待发布的 CDN 资产:
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
|
+
# 正式模板:更新顶层 projectTemplate
|
|
55
56
|
npm run sync:cdn
|
|
57
|
+
|
|
58
|
+
# beta 模板:只更新 beta.projectTemplate
|
|
59
|
+
npm run sync:cdn:beta
|
|
60
|
+
|
|
61
|
+
# 只读校验:发布门禁会按目标自动执行其中一条
|
|
62
|
+
npm run check:cdn
|
|
63
|
+
npm run check:cdn:beta
|
|
56
64
|
```
|
|
57
65
|
|
|
58
|
-
|
|
59
|
-
`
|
|
60
|
-
`
|
|
66
|
+
两个命令都只从同一个正式模板真源生成产物,并写入同一个
|
|
67
|
+
`dist/rabetbase-cli/config/index.json`。正式模板使用顶层 `projectTemplate` 和
|
|
68
|
+
`sub-app-react-demo.zip`;beta 模板使用 `beta.projectTemplate` 和
|
|
69
|
+
`sub-app-react-demo-beta.zip`,两条发布通道互不覆盖。旧 CLI 继续读取顶层字段;
|
|
70
|
+
新版 beta CLI 在 beta 描述缺失时兼容回退到顶层正式模板。
|
|
71
|
+
`check:cdn` / `check:cdn:beta` 在系统临时目录重建 ZIP,只读比对模板描述和仓内归档,
|
|
72
|
+
不会改动 `cdn/` 或 `dist/`。
|
|
61
73
|
|
|
62
74
|
### 模板结构
|
|
63
75
|
|
|
@@ -81,7 +93,7 @@ npm run sync:cdn
|
|
|
81
93
|
## 注意事项
|
|
82
94
|
|
|
83
95
|
- `templates/projects/sub-app-react-demo/` 是项目模板真源,不是独立 Git 仓,也不是外部仓快照
|
|
84
|
-
- `rabetbase project create` 从 CDN 下载 ZIP,然后更新 `package.json` 与 `.rabetbase.json`;此仓库模板不进入 npm 发布包
|
|
96
|
+
- `rabetbase project create` 从 CDN 下载 ZIP,然后更新 `package.json` 与 `.rabetbase.json`;正式 CLI 读取顶层模板,beta CLI 优先读取 `beta.projectTemplate`;此仓库模板不进入 npm 发布包
|
|
85
97
|
- 模板文件名必须兼容 Windows、macOS 和 Linux;禁止符号链接、大小写冲突路径和 Windows 保留名称
|
|
86
98
|
- 有 AppCode 时,CLI 会重新生成 `src/api/api.ts` 和 `src/api/client.ts`
|
|
87
99
|
- 项目模板中不要保留真实 AppCode、真实数据集模型、`.git`、`node_modules`、`dist` 或个人配置
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Profile-aware model selection generated by Rabetbase CLI.
|
|
3
|
+
* Do not add application-specific Dataset codes to this file.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { ModelsConfig } from "@lovrabet/sdk";
|
|
7
|
+
|
|
8
|
+
interface ModelProfile {
|
|
9
|
+
appCode: string;
|
|
10
|
+
runtimeDomain: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface ModelEntryMetadata {
|
|
14
|
+
alias: string;
|
|
15
|
+
tableName: string;
|
|
16
|
+
name: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type ModelEntry = ModelEntryMetadata &
|
|
20
|
+
(
|
|
21
|
+
| { datasetCode: string; datasetCodes?: never }
|
|
22
|
+
| { datasetCode?: never; datasetCodes: Record<string, string> }
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
interface ModelRegistry {
|
|
26
|
+
defaultProfile: string;
|
|
27
|
+
profiles: Record<string, ModelProfile>;
|
|
28
|
+
models: readonly ModelEntry[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function normalizeDomain(value: string | undefined): string | undefined {
|
|
32
|
+
return value?.trim().replace(/\/+$/, "");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function injectedRuntimeDomain(): string | undefined {
|
|
36
|
+
if (typeof window === "undefined") return undefined;
|
|
37
|
+
const globalWindow = window as Window & {
|
|
38
|
+
__GLOBAL__?: {
|
|
39
|
+
deploymentConfig?: { RUNTIME_API_DOMAIN?: string };
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
return normalizeDomain(
|
|
43
|
+
globalWindow.__GLOBAL__?.deploymentConfig?.RUNTIME_API_DOMAIN,
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function selectProfile(
|
|
48
|
+
registry: ModelRegistry,
|
|
49
|
+
projectRuntimeDomain: string,
|
|
50
|
+
): readonly [string, ModelProfile] {
|
|
51
|
+
const runtimeDomain =
|
|
52
|
+
injectedRuntimeDomain() ?? normalizeDomain(projectRuntimeDomain);
|
|
53
|
+
const matches = Object.entries(registry.profiles).filter(
|
|
54
|
+
([, profile]) => normalizeDomain(profile.runtimeDomain) === runtimeDomain,
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
if (matches.length > 1) {
|
|
58
|
+
throw new Error(
|
|
59
|
+
`Multiple Lovrabet model profiles match Runtime Domain "${runtimeDomain}". ` +
|
|
60
|
+
"Give each profile a distinct Runtime Domain.",
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
if (matches.length === 1) return matches[0]!;
|
|
64
|
+
|
|
65
|
+
throw new Error(
|
|
66
|
+
`No Lovrabet model profile matches Runtime Domain "${runtimeDomain ?? "(not set)"}". ` +
|
|
67
|
+
"Run `rabetbase api pull` after verifying the current project routing.",
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function resolveActiveModelConfig(
|
|
72
|
+
registry: ModelRegistry,
|
|
73
|
+
projectRuntimeDomain: string,
|
|
74
|
+
): {
|
|
75
|
+
profileName: string;
|
|
76
|
+
appCode: string;
|
|
77
|
+
runtimeDomain: string;
|
|
78
|
+
modelsConfig: ModelsConfig;
|
|
79
|
+
} {
|
|
80
|
+
const [profileName, profile] = selectProfile(registry, projectRuntimeDomain);
|
|
81
|
+
const models = registry.models.flatMap((model) => {
|
|
82
|
+
const datasetCode = model.datasetCode ?? model.datasetCodes?.[profileName];
|
|
83
|
+
return datasetCode
|
|
84
|
+
? [
|
|
85
|
+
{
|
|
86
|
+
datasetCode,
|
|
87
|
+
tableName: model.tableName,
|
|
88
|
+
name: model.name,
|
|
89
|
+
alias: model.alias,
|
|
90
|
+
},
|
|
91
|
+
]
|
|
92
|
+
: [];
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
return {
|
|
96
|
+
profileName,
|
|
97
|
+
appCode: profile.appCode,
|
|
98
|
+
runtimeDomain: profile.runtimeDomain,
|
|
99
|
+
modelsConfig: { appCode: profile.appCode, models },
|
|
100
|
+
};
|
|
101
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable Lovrabet SDK model entrypoint.
|
|
3
|
+
* Generated by Rabetbase CLI.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { registerModels, CONFIG_NAMES } from "@lovrabet/sdk";
|
|
7
|
+
import projectRouting from "{ProjectRoutingImport}";
|
|
8
|
+
import { LOVRABET_MODEL_REGISTRY } from "./models.generated";
|
|
9
|
+
import { resolveActiveModelConfig } from "./model-runtime";
|
|
10
|
+
|
|
11
|
+
const activeModelConfig = resolveActiveModelConfig(
|
|
12
|
+
LOVRABET_MODEL_REGISTRY,
|
|
13
|
+
projectRouting.domains.runtime,
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
export const LOVRABET_PROFILE_NAME = activeModelConfig.profileName;
|
|
17
|
+
export const LOVRABET_APP_CODE = activeModelConfig.appCode;
|
|
18
|
+
export const LOVRABET_RUNTIME_DOMAIN = activeModelConfig.runtimeDomain;
|
|
19
|
+
export const LOVRABET_MODELS_CONFIG = activeModelConfig.modelsConfig;
|
|
20
|
+
|
|
21
|
+
registerModels(LOVRABET_MODELS_CONFIG, CONFIG_NAMES.DEFAULT);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable Lovrabet SDK client entrypoint.
|
|
3
|
+
* Generated by Rabetbase CLI.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { createClient, CONFIG_NAMES } from "@lovrabet/sdk";
|
|
7
|
+
import { LOVRABET_RUNTIME_DOMAIN } from "./api";
|
|
8
|
+
import { LOVRABET_SDK_CONFIG } from "./sdk-config";
|
|
9
|
+
|
|
10
|
+
export const lovrabetClient = createClient({
|
|
11
|
+
apiConfigName: CONFIG_NAMES.DEFAULT,
|
|
12
|
+
...LOVRABET_SDK_CONFIG,
|
|
13
|
+
runtimeDomain: LOVRABET_RUNTIME_DOMAIN,
|
|
14
|
+
});
|