@yuku123/z-team-component 0.2.89 → 0.2.90

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.
Files changed (41) hide show
  1. package/dist/{ComponentDoc-CP8PmT4l.js → ComponentDoc-DgjWNYvc.js} +1 -1
  2. package/dist/{InvitationManagementPage-C-8t565B.js → InvitationManagementPage-BWeW0h7p.js} +1 -1
  3. package/dist/{OnboardingPage-DUUHQLSp.js → OnboardingPage-tW2xXPui.js} +2 -2
  4. package/dist/{ScheduledTasks-BSJP-8rB.js → ScheduledTasks-2X5KfwFi.js} +1470 -1461
  5. package/dist/{SystemShell-DTFR-Pfd.js → SystemShell-CSiNt2JL.js} +4 -4
  6. package/dist/{api-GfWm5pTp.js → api-WqoLUPy-.js} +1 -1
  7. package/dist/{index-C5FC0WCa.js → index-7iEmueKf.js} +2 -2
  8. package/dist/{index-BR0HXBjY.js → index-B8mikT45.js} +3 -3
  9. package/dist/{index-D92Y4nix.js → index-BIbkA-jX.js} +2 -2
  10. package/dist/{index-CHTu5H1U.js → index-CGSWoJJv.js} +2 -2
  11. package/dist/{index-DTFcQizU.js → index-ClRT3ECx.js} +2 -2
  12. package/dist/{index-9Vozb4E5.js → index-DBEdsfjb.js} +1 -1
  13. package/dist/{index-EdPtymBD.js → index-DKWvNjHa.js} +2 -2
  14. package/dist/{index-DelMCvoP.js → index-DS4IgliO.js} +1 -1
  15. package/dist/{index-BngdCYiY.js → index-Ds6Ac0UE.js} +2 -2
  16. package/dist/{index-Dxx0UEBW.js → index-NCoTXpQ0.js} +1 -1
  17. package/dist/{index-3qkbu-HG.js → index-Pt4RiXWL.js} +3 -3
  18. package/dist/{index-mIk8zAAm.js → index-iCpFhLce.js} +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/{menuPermission-CF3r6JEV.js → menuPermission-BqZsG_Fz.js} +1 -1
  21. package/dist/pages.js +1 -1
  22. package/package.json +1 -1
  23. package/dist/ComponentDoc-D1vtx1CE.js +0 -3998
  24. package/dist/InvitationManagementPage-DDx-AX4v.js +0 -495
  25. package/dist/OnboardingPage-DUVza4FC.js +0 -393
  26. package/dist/ScheduledTasks-CGNB0zlb.js +0 -10708
  27. package/dist/SystemShell-DZ-W2gUt.js +0 -689
  28. package/dist/api-nf4Uaca5.js +0 -20
  29. package/dist/index-B1lzhb6f.js +0 -1143
  30. package/dist/index-B_H-Ynz5.js +0 -9844
  31. package/dist/index-BqG6XqTh.js +0 -574
  32. package/dist/index-C1kpuot_.js +0 -118
  33. package/dist/index-CUhSJJL0.js +0 -178
  34. package/dist/index-D8ncig8C.js +0 -149
  35. package/dist/index-D_t92tEF.js +0 -2700
  36. package/dist/index-DoC-nKZZ.js +0 -93
  37. package/dist/index-JS2OVZ4Q.js +0 -3488
  38. package/dist/index-LkYDFjtJ.js +0 -914
  39. package/dist/index-d7BD8lzt.js +0 -242
  40. package/dist/index-p1jMVRnp.js +0 -112
  41. package/dist/menuPermission-CZvOK8eU.js +0 -60
@@ -1,242 +0,0 @@
1
- import { jsx as e, jsxs as n } from "react/jsx-runtime";
2
- import { Navigate as i, useLocation as b } from "react-router-dom";
3
- import { Alert as u } from "antd";
4
- import { DashboardOutlined as v, ClusterOutlined as r, ContainerOutlined as y, CloudServerOutlined as l, BranchesOutlined as O, RocketOutlined as g, AlertOutlined as k, FileTextOutlined as S, DatabaseOutlined as c, CloudOutlined as f, DeploymentUnitOutlined as z } from "@ant-design/icons";
5
- import { W as P } from "./index-CHTu5H1U.js";
6
- import { M as D } from "./ComponentDoc-CP8PmT4l.js";
7
- import "./index-B_H-Ynz5.js";
8
- const a = "K8s 管理面的数据源在**独立运维平台 z-ops**:/z-team/ops/k8s/** 由 z-ops 仓的 z-ops-web 提供(K8sController 注册 /z-team/ops/k8s,HpaController 注册 /z-team/ops/k8s/hpa)。**z-opc 主壳不承载它**:主壳制品 BOOT-INF/lib 里 0 个 z-ops-*,主壳 nginx 路由总表里也没有^/z-team/ops 这条反代规则 ⇒ 实测 GET /z-team/ops/k8s/nodes 得到的是 SPA 兜底页(HTTP 200 + text/html + 451B,与必假路径逐字节相同),不是后端 JSON。该页面的真实入口在 z-ops 独立平台(集群内端口 8886,其前端路由 /ops/k8s)。", E = [
9
- {
10
- title: "DevOps 运维",
11
- icon: /* @__PURE__ */ e(r, {}),
12
- items: [
13
- {
14
- key: "devops-dashboard",
15
- label: "运维总览",
16
- icon: /* @__PURE__ */ e(v, {}),
17
- path: "/ops/devops/dashboard",
18
- desc: "集群概览与资源统计"
19
- },
20
- {
21
- key: "devops-nodes",
22
- label: "节点管理",
23
- icon: /* @__PURE__ */ e(r, {}),
24
- path: "/ops/devops/nodes",
25
- desc: "K8s 节点列表与状态"
26
- },
27
- {
28
- key: "devops-pods",
29
- label: "Pod 管理",
30
- icon: /* @__PURE__ */ e(y, {}),
31
- path: "/ops/devops/pods",
32
- desc: "Pod 列表、日志、终端"
33
- },
34
- {
35
- key: "devops-hpa",
36
- label: "弹性伸缩",
37
- icon: /* @__PURE__ */ e(l, {}),
38
- path: "/ops/devops/hpa",
39
- desc: "HPA 自动扩缩容策略"
40
- },
41
- {
42
- key: "devops-registry",
43
- label: "镜像仓库",
44
- icon: /* @__PURE__ */ e(l, {}),
45
- path: "/ops/devops/registry",
46
- desc: "容器镜像统一管理"
47
- },
48
- {
49
- key: "devops-pipeline",
50
- label: "流水线",
51
- icon: /* @__PURE__ */ e(O, {}),
52
- path: "/ops/devops/pipeline",
53
- desc: "CI/CD 流水线编排"
54
- },
55
- {
56
- key: "devops-release",
57
- label: "发布管理",
58
- icon: /* @__PURE__ */ e(g, {}),
59
- path: "/ops/devops/release",
60
- desc: "应用发布与回滚"
61
- },
62
- {
63
- key: "devops-monitor",
64
- label: "监控告警",
65
- icon: /* @__PURE__ */ e(k, {}),
66
- path: "/ops/devops/monitor",
67
- desc: "Prometheus/Grafana 监控"
68
- },
69
- {
70
- key: "devops-logs",
71
- label: "日志管理",
72
- icon: /* @__PURE__ */ e(S, {}),
73
- path: "/ops/devops/logs",
74
- desc: "Loki 集中日志查询"
75
- },
76
- {
77
- key: "devops-dba",
78
- label: "DBA 工单",
79
- icon: /* @__PURE__ */ e(c, {}),
80
- path: "/ops/devops/dba",
81
- desc: "数据库运维工单"
82
- }
83
- ]
84
- },
85
- {
86
- title: "基础设施",
87
- icon: /* @__PURE__ */ e(r, {}),
88
- items: [
89
- {
90
- key: "ops-channel",
91
- label: "渠道管理",
92
- icon: /* @__PURE__ */ e(f, {}),
93
- path: "/ops/channel",
94
- desc: "部署渠道配置与管理"
95
- },
96
- {
97
- key: "ops-env",
98
- label: "环境管理",
99
- icon: /* @__PURE__ */ e(l, {}),
100
- path: "/ops/delivery",
101
- desc: "运行环境配置与管理"
102
- },
103
- {
104
- key: "ops-deploy",
105
- label: "部署管理",
106
- icon: /* @__PURE__ */ e(z, {}),
107
- path: "/ops/deployment",
108
- desc: "应用部署与发布管理"
109
- },
110
- {
111
- key: "ops-repo",
112
- label: "仓库管理",
113
- icon: /* @__PURE__ */ e(c, {}),
114
- path: "/ops/repo-mgmt",
115
- desc: "代码仓库与镜像管理"
116
- }
117
- ]
118
- },
119
- {
120
- title: "资源管理",
121
- icon: /* @__PURE__ */ e(l, {}),
122
- items: [
123
- {
124
- key: "resource",
125
- label: "资源管理",
126
- icon: /* @__PURE__ */ e(l, {}),
127
- path: "/resource/domain",
128
- desc: "域名、ECS、RDS、OSS 管理"
129
- }
130
- ]
131
- }
132
- ];
133
- function p({ label: o }) {
134
- return /* @__PURE__ */ n("div", { style: { padding: 40, textAlign: "center", color: "#999" }, children: [
135
- /* @__PURE__ */ n("h2", { children: [
136
- "🚧 ",
137
- o
138
- ] }),
139
- /* @__PURE__ */ e("p", { children: "功能开发中..." })
140
- ] });
141
- }
142
- function t({ label: o, reason: d, message: h = "该页面未孵化,因为后端接口尚不可用" }) {
143
- return /* @__PURE__ */ n("div", { style: { padding: 40, maxWidth: 720, margin: "0 auto" }, children: [
144
- /* @__PURE__ */ n("h2", { style: { textAlign: "center" }, children: [
145
- "🧪 ",
146
- o
147
- ] }),
148
- /* @__PURE__ */ e(
149
- u,
150
- {
151
- type: "warning",
152
- showIcon: !0,
153
- message: h,
154
- description: d
155
- }
156
- )
157
- ] });
158
- }
159
- function s({ label: o }) {
160
- return /* @__PURE__ */ e(
161
- t,
162
- {
163
- label: o,
164
- message: "该页面未孵化,因为组件从来不在本仓",
165
- reason: "组件从未迁进本仓:z-opc 的 src 目录下没有这个组件,历史上也没有任何提交 import 过它(OPS_ROUTES 里留着一个解析不到的标识符)。要恢复这一页,得先把组件从 z-ops 迁进来并接上它自己的后端;在那之前这里刻意不放假表格。"
166
- }
167
- );
168
- }
169
- function m() {
170
- const { pathname: o } = b();
171
- return /* @__PURE__ */ e(i, { to: `${o}?mode=middleware`, replace: !0 });
172
- }
173
- const A = [...D, "/script"], T = [
174
- // ─── 运维中心 ───
175
- // ⚠ 这一族路由的组件从来没有从 z-ops 迁进来(见 UnmigratedPage 注释)。原先直接写
176
- // <ChannelPage/> 之类会在**模块求值期**抛 ReferenceError 并白屏整个前端,不是只坏这一页。
177
- { path: "/ops", element: /* @__PURE__ */ e(i, { to: "/ops/devops", replace: !0 }) },
178
- { path: "/ops/channel", element: /* @__PURE__ */ e(s, { label: "渠道管理" }) },
179
- { path: "/ops/delivery", element: /* @__PURE__ */ e(s, { label: "环境管理" }) },
180
- { path: "/ops/deployment", element: /* @__PURE__ */ e(s, { label: "部署管理" }) },
181
- { path: "/ops/deployment/:id", element: /* @__PURE__ */ e(s, { label: "部署管理" }) },
182
- { path: "/ops/repo-mgmt", element: /* @__PURE__ */ e(s, { label: "仓库管理" }) },
183
- { path: "/ops/git-platform", element: /* @__PURE__ */ e(s, { label: "仓库管理" }) },
184
- // ─── DevOps 子路由(K8s 管理面:**本宿主不承载** ⇒ 显式占位,见 DEVOPS_MIGRATED_NOTE)───
185
- // ⚠ 这 4 条原先挂的是真组件(OpsDashboard / K8sNodeList / K8sPodList / K8sHpaList),
186
- // 而它们的 API_BASE = '/z-team/ops/k8s'(OpsK8s/api.ts)——
187
- // **该前缀的 handler 在 z-ops 仓的 z-ops-web 里**(K8sController @RequestMapping("/z-team/ops/k8s")
188
- // / HpaController @RequestMapping("/z-team/ops/k8s/hpa")),**不在 z-opc 主壳**:
189
- // ① 主壳 boot jar 的 BOOT-INF/lib 里 0 个 z-ops-*;
190
- // ② 主壳 nginx 路由总表里没有 `^/z-team/ops` 这条反代规则;
191
- // ⇒ 生产实测 GET /z-team/ops/k8s/nodes → HTTP 200 + text/html + 451B
192
- // (sha16 92c38b6b20edc50d,与必假路径逐字节相同)= **SPA 兜底页**。
193
- // ⇒ 这 4 条是「菜单项点进去是页面、数据源在后端不存在」的**断头路**
194
- // (卡 TASK-20261023-056 · ops-001~004)。
195
- // ⇒ 修法 = **撤菜单项的落地形态**:不再渲染真组件、不再发任何打到 /z-team/ops 的请求,
196
- // 改渲染显式占位并写明**实测到的堵点**与归属平台(口径见 003_辅助能力/
197
- // frontend-incubation-audit/SKILL.md:占位不许写成空表/全 0 的假绿)。
198
- // ⚠ 菜单项**保留**(不删条目):深链进来要有明确去处,而不是白屏或落回 SPA 兜底。
199
- { path: "/ops/devops", element: /* @__PURE__ */ e(t, { label: "DevOps 运维", reason: a, message: "该页面已迁至独立运维平台 z-ops,本宿主不承载" }) },
200
- { path: "/ops/devops/dashboard", element: /* @__PURE__ */ e(t, { label: "运维总览", reason: a, message: "该页面已迁至独立运维平台 z-ops,本宿主不承载" }) },
201
- { path: "/ops/devops/nodes", element: /* @__PURE__ */ e(t, { label: "节点管理", reason: a, message: "该页面已迁至独立运维平台 z-ops,本宿主不承载" }) },
202
- { path: "/ops/devops/pods", element: /* @__PURE__ */ e(t, { label: "Pod 管理", reason: a, message: "该页面已迁至独立运维平台 z-ops,本宿主不承载" }) },
203
- { path: "/ops/devops/hpa", element: /* @__PURE__ */ e(t, { label: "弹性伸缩", reason: a, message: "该页面已迁至独立运维平台 z-ops,本宿主不承载" }) },
204
- { path: "/ops/devops/registry", element: /* @__PURE__ */ e(p, { label: "镜像仓库" }) },
205
- { path: "/ops/devops/pipeline", element: /* @__PURE__ */ e(p, { label: "流水线" }) },
206
- { path: "/ops/devops/release", element: /* @__PURE__ */ e(p, { label: "发布管理" }) },
207
- { path: "/ops/devops/monitor", element: /* @__PURE__ */ e(p, { label: "监控告警" }) },
208
- { path: "/ops/devops/logs", element: /* @__PURE__ */ e(p, { label: "日志管理" }) },
209
- { path: "/ops/devops/dba", element: /* @__PURE__ */ e(p, { label: "DBA 工单" }) },
210
- // ─── 资源管理 ───
211
- { path: "/resource", element: /* @__PURE__ */ e(i, { to: "/resource/domain", replace: !0 }) },
212
- { path: "/resource/domain", element: /* @__PURE__ */ e(s, { label: "域名管理" }) },
213
- { path: "/resource/ecs", element: /* @__PURE__ */ e(s, { label: "ECS 管理" }) },
214
- { path: "/resource/rds", element: /* @__PURE__ */ e(s, { label: "RDS 管理" }) },
215
- { path: "/resource/oss", element: /* @__PURE__ */ e(s, { label: "OSS 管理" }) },
216
- // ─── 已迁到中间件面的前缀 → 旧深链交还中间件面 ───
217
- // ⚠ 必须排在最后:matchWorkbenchPath 先全表精确、再全表通配,
218
- // 但本面自己的 /ops/* 与 /resource/* 都在前面,不会被这几条吃掉。
219
- ...A.flatMap((o) => [
220
- { path: o, element: /* @__PURE__ */ e(m, {}) },
221
- { path: `${o}/*`, element: /* @__PURE__ */ e(m, {}) }
222
- ])
223
- ];
224
- function U({
225
- activePathOverride: o,
226
- menuOnly: d = !1
227
- } = {}) {
228
- return /* @__PURE__ */ e(
229
- P,
230
- {
231
- groups: E,
232
- routes: T,
233
- mode: "ops",
234
- emptyText: "请从左侧菜单选择运维模块",
235
- activePathOverride: o,
236
- menuOnly: d
237
- }
238
- );
239
- }
240
- export {
241
- U as default
242
- };
@@ -1,112 +0,0 @@
1
- import { jsxs as u, jsx as t } from "react/jsx-runtime";
2
- import { useState as L, useMemo as p } from "react";
3
- import { useNavigate as v, useLocation as A } from "react-router-dom";
4
- import { DownOutlined as k, RightOutlined as w } from "@ant-design/icons";
5
- import { P as W, R as $ } from "./index-Dxx0UEBW.js";
6
- import { f as E, M as g } from "./menuPermission-CZvOK8eU.js";
7
- import { u as j } from "./useAppStore-BFO_h1L2.js";
8
- const H = "_shell_1jjcx_7", M = "_sidebar_1jjcx_15", R = "_menuList_1jjcx_37", T = "_menuGroup_1jjcx_43", C = "_menuGroupHeader_1jjcx_47", P = "_menuGroupIcon_1jjcx_65", z = "_menuGroupLabel_1jjcx_70", K = "_menuGroupArrow_1jjcx_74", U = "_menuSubList_1jjcx_80", Z = "_menuSubItem_1jjcx_86", B = "_menuSubItemActive_1jjcx_103", D = "_menuSubItemIcon_1jjcx_110", O = "_menuSubItemLabel_1jjcx_115", q = "_menuSubItemWrap_1jjcx_119", F = "_main_1jjcx_123", J = "_empty_1jjcx_134", Q = "_emptyIcon_1jjcx_144", V = "_emptyText_1jjcx_149", n = {
9
- shell: H,
10
- sidebar: M,
11
- menuList: R,
12
- menuGroup: T,
13
- menuGroupHeader: C,
14
- menuGroupIcon: P,
15
- menuGroupLabel: z,
16
- menuGroupArrow: K,
17
- menuSubList: U,
18
- menuSubItem: Z,
19
- menuSubItemActive: B,
20
- menuSubItemIcon: D,
21
- menuSubItemLabel: O,
22
- menuSubItemWrap: q,
23
- main: F,
24
- empty: J,
25
- emptyIcon: Q,
26
- emptyText: V
27
- };
28
- function X(m, r) {
29
- for (const s of m)
30
- if (s.path === r) return s.element;
31
- for (const s of m)
32
- if (s.path.includes("*") || s.path.includes(":")) {
33
- const i = "^" + s.path.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*").replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, "[^/]+") + "$";
34
- if (new RegExp(i).test(r)) return s.element;
35
- }
36
- return null;
37
- }
38
- function Y({ text: m }) {
39
- return /* @__PURE__ */ u("div", { className: n.empty, children: [
40
- /* @__PURE__ */ t("div", { className: n.emptyIcon, children: "⚙️" }),
41
- /* @__PURE__ */ t("div", { className: n.emptyText, children: m })
42
- ] });
43
- }
44
- function oe({
45
- groups: m,
46
- routes: r,
47
- mode: s,
48
- emptyText: i,
49
- activePathOverride: _,
50
- menuOnly: h = !1
51
- }) {
52
- const I = v(), { pathname: a } = A(), d = j((e) => e.currentUser), b = j((e) => e.permissionState), [x, S] = L(
53
- new Set(m.map((e) => e.title))
54
- ), l = p(
55
- () => b === "failed" ? m : E(m, d),
56
- [m, d, b]
57
- ), f = p(() => {
58
- const e = _ ?? a;
59
- for (const o of l)
60
- for (const c of o.items)
61
- if (c.path === e) return c.key;
62
- return null;
63
- }, [l, _, a]), G = (e) => {
64
- S((o) => {
65
- const c = new Set(o);
66
- return c.has(e) ? c.delete(e) : c.add(e), c;
67
- });
68
- }, y = (e) => {
69
- I(`${e.path}?mode=${s}`);
70
- }, N = p(() => X(r, a), [r, a]);
71
- return /* @__PURE__ */ u("div", { className: n.shell, children: [
72
- /* @__PURE__ */ u("aside", { className: n.sidebar, children: [
73
- /* @__PURE__ */ t(g, {}),
74
- /* @__PURE__ */ t("nav", { className: n.menuList, children: l.map((e) => {
75
- const o = x.has(e.title);
76
- return /* @__PURE__ */ u("div", { className: n.menuGroup, children: [
77
- /* @__PURE__ */ u(
78
- "div",
79
- {
80
- className: n.menuGroupHeader,
81
- onClick: () => G(e.title),
82
- children: [
83
- /* @__PURE__ */ t("span", { className: n.menuGroupIcon, children: e.icon }),
84
- /* @__PURE__ */ t("span", { className: n.menuGroupLabel, children: e.title }),
85
- /* @__PURE__ */ t("span", { className: n.menuGroupArrow, children: o ? /* @__PURE__ */ t(k, {}) : /* @__PURE__ */ t(w, {}) })
86
- ]
87
- }
88
- ),
89
- o && /* @__PURE__ */ t("ul", { className: n.menuSubList, children: e.items.map((c) => /* @__PURE__ */ u(
90
- "li",
91
- {
92
- className: `${n.menuSubItemWrap} ${n.menuSubItem} ${f === c.key ? n.menuSubItemActive : ""}`,
93
- onClick: () => y(c),
94
- children: [
95
- /* @__PURE__ */ t("span", { className: n.menuSubItemIcon, children: c.icon }),
96
- /* @__PURE__ */ t("span", { className: n.menuSubItemLabel, children: c.label })
97
- ]
98
- },
99
- c.key
100
- )) })
101
- ] }, e.title);
102
- }) })
103
- ] }),
104
- h ? null : /* @__PURE__ */ u("main", { className: n.main, children: [
105
- /* @__PURE__ */ t(W, {}),
106
- /* @__PURE__ */ t($, { resetKey: a, children: N ?? /* @__PURE__ */ t(Y, { text: i }) })
107
- ] })
108
- ] });
109
- }
110
- export {
111
- oe as W
112
- };
@@ -1,60 +0,0 @@
1
- import { jsx as a } from "react/jsx-runtime";
2
- import { Alert as h } from "antd";
3
- import { u as d } from "./useAppStore-BFO_h1L2.js";
4
- import { h as g } from "./schedule-ChO2xIGd.js";
5
- import { N as A } from "./index-3qkbu-HG.js";
6
- function P() {
7
- return d((n) => n.permissionState) !== "failed" ? null : /* @__PURE__ */ a(
8
- h,
9
- {
10
- type: "warning",
11
- showIcon: !0,
12
- "data-testid": "menu-permission-notice",
13
- message: "权限校验失败",
14
- description: "未能获取当前账号的权限点(4A 授权中心接口异常)。下方菜单为全量展示,可能包含无权访问的入口;进入受限页面会返回 403。请联系管理员确认账号权限绑定。",
15
- style: { margin: "8px 12px" }
16
- }
17
- );
18
- }
19
- function m(e) {
20
- const n = e.permission;
21
- return n ? Array.isArray(n) ? n : [n] : [];
22
- }
23
- function S(e) {
24
- return e ? e.is_global_admin ? !1 : !(e.permissions && e.permissions.length > 0) : !0;
25
- }
26
- function f(e, n) {
27
- return n.length === 0 ? !0 : S(e) ? n.some((i) => A.includes(i)) : n.some((i) => g(e, i));
28
- }
29
- function c(e, n, i) {
30
- const t = m(n), s = t.length > 0 ? t : i ? [i] : [];
31
- return f(e, s);
32
- }
33
- function _(e, n) {
34
- const i = [];
35
- for (const t of e) {
36
- const s = t.permission;
37
- if (!f(n, m(t))) continue;
38
- const o = t.items;
39
- if (!Array.isArray(o)) {
40
- i.push(t);
41
- continue;
42
- }
43
- const u = o.filter((r) => c(n, r, s)).map(
44
- (r) => r.children ? {
45
- ...r,
46
- children: r.children.filter(
47
- (l) => c(n, l, r.permission ?? s)
48
- )
49
- } : r
50
- ).filter((r) => !r.children || r.children.length > 0);
51
- if (u.length === 0) continue;
52
- const p = { ...t, items: u };
53
- i.push(p);
54
- }
55
- return i;
56
- }
57
- export {
58
- P as M,
59
- _ as f
60
- };