@nextsparkjs/core 0.1.0-beta.175 → 0.1.0-beta.177
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/dist/components/permissions/PermissionsMatrix.d.ts.map +1 -1
- package/dist/components/permissions/PermissionsMatrix.js +5 -4
- package/dist/components/teams/InviteMemberDialog.js +1 -1
- package/dist/components/teams/TeamMembersList.js +1 -1
- package/dist/lib/actions/team.actions.d.ts.map +1 -1
- package/dist/lib/actions/team.actions.js +7 -5
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +3 -3
- package/dist/lib/config/app.config.js +60 -60
- package/dist/lib/config/config-sync.d.ts.map +1 -1
- package/dist/lib/config/config-sync.js +14 -9
- package/dist/lib/config/roles-merge.d.ts +0 -77
- package/dist/lib/config/roles-merge.d.ts.map +1 -1
- package/dist/lib/config/roles-merge.js +1 -98
- package/dist/lib/config/types.d.ts +6 -2
- package/dist/lib/config/types.d.ts.map +1 -1
- package/dist/lib/services/membership.service.js +2 -2
- package/dist/lib/services/team-member.service.d.ts +2 -2
- package/dist/lib/services/team-member.service.d.ts.map +1 -1
- package/dist/lib/services/team-member.service.js +4 -3
- package/dist/lib/teams/types.d.ts +2 -1
- package/dist/lib/teams/types.d.ts.map +1 -1
- package/dist/lib/teams/types.js +4 -4
- package/dist/styles/classes.json +1 -1
- package/dist/styles/ui.css +1 -1
- package/dist/templates/app/api/v1/auth/signup-with-invite/route.ts +11 -2
- package/dist/templates/app/superadmin/team-roles/page.tsx +2 -2
- package/package.json +2 -2
- package/scripts/build/registry/__tests__/team-roles.test.mjs +192 -0
- package/scripts/build/registry/discovery/permissions.mjs +163 -1
- package/scripts/build/registry/generators/permissions-registry.mjs +95 -35
- package/templates/app/api/v1/auth/signup-with-invite/route.ts +11 -2
- package/templates/app/superadmin/team-roles/page.tsx +2 -2
- package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionsMatrix.d.ts","sourceRoot":"","sources":["../../../src/components/permissions/PermissionsMatrix.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,6BAA6B,CAAA;AAS/E,UAAU,sBAAsB;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB,yEAAyE;IACzE,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAA;CAC3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,OAAe,EACf,WAAW,GACZ,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"PermissionsMatrix.d.ts","sourceRoot":"","sources":["../../../src/components/permissions/PermissionsMatrix.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,6BAA6B,CAAA;AAS/E,UAAU,sBAAsB;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB,yEAAyE;IACzE,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAA;CAC3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,OAAe,EACf,WAAW,GACZ,EAAE,sBAAsB,2CAgHxB"}
|
|
@@ -31,17 +31,18 @@ function PermissionsMatrix({
|
|
|
31
31
|
onCellClick
|
|
32
32
|
}) {
|
|
33
33
|
const t = useTranslations("permissions");
|
|
34
|
-
const { permissions, matrix } = useMemo(() => {
|
|
34
|
+
const { permissions, matrix, roles: allRoles } = useMemo(() => {
|
|
35
35
|
const data = PermissionService.getMatrix();
|
|
36
36
|
if (category) {
|
|
37
37
|
return {
|
|
38
38
|
permissions: data.permissions.filter((p) => p.category === category),
|
|
39
|
-
matrix: data.matrix
|
|
39
|
+
matrix: data.matrix,
|
|
40
|
+
roles: data.roles
|
|
40
41
|
};
|
|
41
42
|
}
|
|
42
43
|
return data;
|
|
43
44
|
}, [category]);
|
|
44
|
-
const roles = compact ?
|
|
45
|
+
const roles = compact ? allRoles.filter((role) => role !== "owner") : allRoles;
|
|
45
46
|
const groupedPermissions = useMemo(() => {
|
|
46
47
|
const groups = {};
|
|
47
48
|
for (const perm of permissions) {
|
|
@@ -55,7 +56,7 @@ function PermissionsMatrix({
|
|
|
55
56
|
return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx("div", { className: "rounded-md border", "data-cy": "permissions-matrix", children: /* @__PURE__ */ jsxs(Table, { children: [
|
|
56
57
|
/* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
57
58
|
/* @__PURE__ */ jsx(TableHead, { className: "w-[300px]", children: t("permission") }),
|
|
58
|
-
roles.map((role) => /* @__PURE__ */ jsx(TableHead, { className: "text-center w-[100px]", children: /* @__PURE__ */ jsx(Badge, { variant: "outline", className: ROLE_COLORS[role], children: t(`roles.${role}.title`) }) }, role))
|
|
59
|
+
roles.map((role) => /* @__PURE__ */ jsx(TableHead, { className: "text-center w-[100px]", children: /* @__PURE__ */ jsx(Badge, { variant: "outline", className: ROLE_COLORS[role] ?? "text-muted-foreground bg-muted dark:bg-muted", children: t.has(`roles.${role}.title`) ? t(`roles.${role}.title`) : role.charAt(0).toUpperCase() + role.slice(1) }) }, role))
|
|
59
60
|
] }) }),
|
|
60
61
|
/* @__PURE__ */ jsx(TableBody, { children: Object.entries(groupedPermissions).map(([cat, perms]) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
61
62
|
/* @__PURE__ */ jsx(TableRow, { className: "bg-muted/50", children: /* @__PURE__ */ jsx(TableCell, { colSpan: roles.length + 1, className: "font-semibold", children: cat }) }, `cat-${cat}`),
|
|
@@ -25,7 +25,7 @@ import { toast } from "sonner";
|
|
|
25
25
|
import { APP_CONFIG_MERGED } from "../../lib/config/config-sync.js";
|
|
26
26
|
import { getInvitableRoles } from "../../lib/teams/permissions.js";
|
|
27
27
|
function getAvailableRolesForInvite(userRole) {
|
|
28
|
-
const hierarchy = APP_CONFIG_MERGED.
|
|
28
|
+
const hierarchy = APP_CONFIG_MERGED.teams.roles.hierarchy;
|
|
29
29
|
const userLevel = hierarchy[userRole] ?? 0;
|
|
30
30
|
const invitableRoles = getInvitableRoles();
|
|
31
31
|
return invitableRoles.filter((role) => {
|
|
@@ -107,7 +107,7 @@ function TeamMembersList({ teamId: propTeamId, readOnly = false } = {}) {
|
|
|
107
107
|
canManageMembers && /* @__PURE__ */ jsx(TableCell, { children: !isOwner && !isCurrentUser && /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
108
108
|
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", "data-cy": `member-actions-${member.id}`, children: /* @__PURE__ */ jsx(MoreHorizontal, { className: "h-4 w-4" }) }) }),
|
|
109
109
|
/* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", children: [
|
|
110
|
-
APP_CONFIG_MERGED.
|
|
110
|
+
APP_CONFIG_MERGED.teams.roles.availableTeamRoles.filter(
|
|
111
111
|
(role) => role !== "owner" && // Cannot assign owner role
|
|
112
112
|
role !== memberRole && // Don't show current role
|
|
113
113
|
canManageRole(currentUserRole, role)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team.actions.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/team.actions.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"team.actions.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/team.actions.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAQzE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,QAAQ,CAAA;CACf;AAgDD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CA4DnC;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,QAAoE,GACzE,OAAO,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAsEjD;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,CAAC,CAgEjC;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAuEzC"}
|
|
@@ -4,6 +4,8 @@ import { headers } from "next/headers";
|
|
|
4
4
|
import { getTypedSession } from "../auth.js";
|
|
5
5
|
import { TeamService } from "../services/team.service.js";
|
|
6
6
|
import { TeamMemberService } from "../services/team-member.service.js";
|
|
7
|
+
import { getInvitableRoles } from "../teams/permissions.js";
|
|
8
|
+
import { APP_CONFIG_MERGED } from "../config/config-sync.js";
|
|
7
9
|
async function getAuthUser() {
|
|
8
10
|
var _a;
|
|
9
11
|
const headersList = await headers();
|
|
@@ -68,7 +70,7 @@ async function updateTeam(teamId, data) {
|
|
|
68
70
|
};
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
|
-
async function inviteMember(teamId, email, role =
|
|
73
|
+
async function inviteMember(teamId, email, role = APP_CONFIG_MERGED.teams.roles.defaultTeamRole) {
|
|
72
74
|
try {
|
|
73
75
|
if (!(teamId == null ? void 0 : teamId.trim())) {
|
|
74
76
|
return { success: false, error: "Team ID is required" };
|
|
@@ -76,9 +78,9 @@ async function inviteMember(teamId, email, role = "member") {
|
|
|
76
78
|
if (!(email == null ? void 0 : email.trim())) {
|
|
77
79
|
return { success: false, error: "Email is required" };
|
|
78
80
|
}
|
|
79
|
-
const validRoles =
|
|
81
|
+
const validRoles = getInvitableRoles();
|
|
80
82
|
if (!validRoles.includes(role)) {
|
|
81
|
-
return { success: false, error:
|
|
83
|
+
return { success: false, error: `Invalid role. Must be one of: ${validRoles.join(", ")}` };
|
|
82
84
|
}
|
|
83
85
|
const authResult = await getAuthUser();
|
|
84
86
|
if (!authResult.success) {
|
|
@@ -172,9 +174,9 @@ async function updateMemberRole(teamId, memberId, role) {
|
|
|
172
174
|
if (!(memberId == null ? void 0 : memberId.trim())) {
|
|
173
175
|
return { success: false, error: "Member ID is required" };
|
|
174
176
|
}
|
|
175
|
-
const validRoles =
|
|
177
|
+
const validRoles = getInvitableRoles();
|
|
176
178
|
if (!validRoles.includes(role)) {
|
|
177
|
-
return { success: false, error:
|
|
179
|
+
return { success: false, error: `Invalid role. Must be one of: ${validRoles.join(", ")}. Use transferOwnership for owner.` };
|
|
178
180
|
}
|
|
179
181
|
const authResult = await getAuthUser();
|
|
180
182
|
if (!authResult.success) {
|
package/dist/lib/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAWA,OAAO,EAAgF,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AA2HvH,eAAO,MAAM,IAAI;;;;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/auth.js
CHANGED
|
@@ -32,14 +32,14 @@ const pool = new Pool({
|
|
|
32
32
|
max: 20
|
|
33
33
|
});
|
|
34
34
|
function resolveNonOwnerSignupRole() {
|
|
35
|
-
var _a, _b, _c;
|
|
35
|
+
var _a, _b, _c, _d;
|
|
36
36
|
const cfg = AUTH_CONFIG.signupIntent;
|
|
37
37
|
if (!(cfg == null ? void 0 : cfg.enabled)) return null;
|
|
38
38
|
const intent = (_a = getSignupContext()) == null ? void 0 : _a.signupIntent;
|
|
39
39
|
if (!intent) return null;
|
|
40
40
|
const mappedRole = (_b = cfg.roleMap) == null ? void 0 : _b[intent];
|
|
41
41
|
if (!mappedRole) return null;
|
|
42
|
-
const validTeamRoles = ((_c = APP_CONFIG_MERGED.
|
|
42
|
+
const validTeamRoles = ((_d = (_c = APP_CONFIG_MERGED.teams) == null ? void 0 : _c.roles) == null ? void 0 : _d.availableTeamRoles) ?? [];
|
|
43
43
|
if (!validTeamRoles.includes(mappedRole) || mappedRole === "owner") return null;
|
|
44
44
|
return mappedRole;
|
|
45
45
|
}
|
|
@@ -299,7 +299,7 @@ const auth = betterAuth({
|
|
|
299
299
|
await TeamService.create(user.id, teamName);
|
|
300
300
|
console.log(`[Teams] Global team created for first user ${user.id}`);
|
|
301
301
|
} else {
|
|
302
|
-
await TeamMemberService.addToGlobal(user.id
|
|
302
|
+
await TeamMemberService.addToGlobal(user.id);
|
|
303
303
|
console.log(`[Teams] User ${user.id} auto-joined global team (single-tenant mode)`);
|
|
304
304
|
}
|
|
305
305
|
break;
|
|
@@ -130,67 +130,67 @@ const DEFAULT_APP_CONFIG = {
|
|
|
130
130
|
},
|
|
131
131
|
// =============================================================================
|
|
132
132
|
// TEAM ROLES CONFIGURATION
|
|
133
|
-
// Team-specific roles (per team_members table)
|
|
134
|
-
// These are separate from global user roles (users.role)
|
|
133
|
+
// Team-specific roles live under `teams.roles` (per team_members table).
|
|
134
|
+
// These are separate from global user roles (users.role).
|
|
135
135
|
// =============================================================================
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
136
|
+
teams: {
|
|
137
|
+
roles: {
|
|
138
|
+
/**
|
|
139
|
+
* Protected core team role - CANNOT be removed by themes
|
|
140
|
+
*
|
|
141
|
+
* The 'owner' role is critical for team creation logic:
|
|
142
|
+
* - When a user creates a team, they automatically become 'owner'
|
|
143
|
+
* - The owner has full control over the team
|
|
144
|
+
* - This role cannot be removed, renamed, or modified by themes
|
|
145
|
+
*/
|
|
146
|
+
coreTeamRoles: ["owner"],
|
|
147
|
+
/**
|
|
148
|
+
* Default team role for new members
|
|
149
|
+
*/
|
|
150
|
+
defaultTeamRole: "member",
|
|
151
|
+
/**
|
|
152
|
+
* Default available team roles
|
|
153
|
+
* - owner: Team owner (PROTECTED - cannot be removed)
|
|
154
|
+
* - admin: Team administrator
|
|
155
|
+
* - member: Regular team member
|
|
156
|
+
* - viewer: Read-only access
|
|
157
|
+
*
|
|
158
|
+
* Themes declare the active set via `teams.roles` in their app.config
|
|
159
|
+
* (REPLACE model); 'owner' is always force-included and never removable.
|
|
160
|
+
*/
|
|
161
|
+
availableTeamRoles: ["owner", "admin", "member", "viewer"],
|
|
162
|
+
/**
|
|
163
|
+
* Team role hierarchy (higher number = higher permissions within the team)
|
|
164
|
+
* owner (100) > admin (50) > member (10) > viewer (1)
|
|
165
|
+
*/
|
|
166
|
+
hierarchy: {
|
|
167
|
+
owner: 100,
|
|
168
|
+
// Full team control (PROTECTED)
|
|
169
|
+
admin: 50,
|
|
170
|
+
// Team management
|
|
171
|
+
member: 10,
|
|
172
|
+
// Standard access
|
|
173
|
+
viewer: 1
|
|
174
|
+
// Read-only
|
|
175
|
+
},
|
|
176
|
+
/**
|
|
177
|
+
* Team role display names (translation keys)
|
|
178
|
+
*/
|
|
179
|
+
displayNames: {
|
|
180
|
+
owner: "common.teamRoles.owner",
|
|
181
|
+
admin: "common.teamRoles.admin",
|
|
182
|
+
member: "common.teamRoles.member",
|
|
183
|
+
viewer: "common.teamRoles.viewer"
|
|
184
|
+
},
|
|
185
|
+
/**
|
|
186
|
+
* Team role descriptions
|
|
187
|
+
*/
|
|
188
|
+
descriptions: {
|
|
189
|
+
owner: "Full team control, cannot be removed",
|
|
190
|
+
admin: "Manage team members and settings",
|
|
191
|
+
member: "Standard team access",
|
|
192
|
+
viewer: "Read-only access to team resources"
|
|
193
|
+
}
|
|
194
194
|
}
|
|
195
195
|
// =========================================================================
|
|
196
196
|
// NOTE: Team permissions are now defined in permissions.config.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-sync.d.ts","sourceRoot":"","sources":["../../../src/lib/config/config-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"config-sync.d.ts","sourceRoot":"","sources":["../../../src/lib/config/config-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA8NH,eAAO,MAAM,iBAAiB,KAAkB,CAAA;AAChD,eAAO,MAAM,gBAAgB,KAAwB,CAAA;AACrD,eAAO,MAAM,UAAU,6BAAkB,CAAA;AAGzC,eAAO,MAAM,iBAAiB,KAA0C,CAAA;AACxE,eAAO,MAAM,cAAc,KAAuC,CAAA;AAClE,eAAO,MAAM,eAAe,KAA6C,CAAA;AACzE,eAAO,MAAM,YAAY,KAA0C,CAAA;AACnE,eAAO,MAAM,QAAQ,KAA6B,CAAA;AAClD,eAAO,MAAM,WAAW,KAAgC,CAAA;AAGxD,eAAO,MAAM,WAAW,KAAyB,CAAA;AACjD,eAAO,MAAM,UAAU,KAAwB,CAAA;AAC/C,eAAO,MAAM,iBAAiB,KAA8B,CAAA;AAC5D,eAAO,MAAM,UAAU,KAAwB,CAAA;AAC/C,eAAO,MAAM,iBAAiB,KAA8B,CAAA;AAC5D,eAAO,MAAM,YAAY,KAA0B,CAAA;AACnD,eAAO,MAAM,YAAY,KAA0B,CAAA;AACnD,eAAO,MAAM,WAAW,KAAyB,CAAA;AAEjD;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;cAEqC,OAAO,SAAS,EAAE,gBAAgB;;;;;;;CAQxD,CAAA;AAI9C,eAAO,MAAM,aAAa,KAA0B,CAAA;AACpD,eAAO,MAAM,cAAc,KAA2B,CAAA;AACtD,eAAO,MAAM,eAAe,KAA4B,CAAA;AACxD,eAAO,MAAM,eAAe,KAA4B,CAAA;AACxD,eAAO,MAAM,eAAe,KAA4B,CAAA;AACxD,eAAO,MAAM,kBAAkB,KAA+B,CAAA;AAC9D,eAAO,MAAM,oBAAoB,KAAiC,CAAA;AAIlE,eAAO,MAAM,qBAAqB,GAAI,UAAU,MAAM,KAAG,OAExD,CAAA;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,uBAAuB,QAAO,mBAAmB,EAE7D,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,OAExD,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,KAAG,CAAC,GAAG,SAGzF,CAAA;AAGD,MAAM,MAAM,eAAe,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;AACpF,MAAM,MAAM,oBAAoB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;AACnF,MAAM,MAAM,QAAQ,GAAG,OAAO,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA"}
|
|
@@ -8,11 +8,13 @@ import {
|
|
|
8
8
|
AVAILABLE_ROLES as REGISTRY_AVAILABLE_ROLES,
|
|
9
9
|
ROLE_HIERARCHY as REGISTRY_ROLE_HIERARCHY,
|
|
10
10
|
ROLE_DISPLAY_NAMES as REGISTRY_ROLE_DISPLAY_NAMES,
|
|
11
|
-
ROLE_DESCRIPTIONS as REGISTRY_ROLE_DESCRIPTIONS
|
|
11
|
+
ROLE_DESCRIPTIONS as REGISTRY_ROLE_DESCRIPTIONS,
|
|
12
|
+
DEFAULT_TEAM_ROLE as REGISTRY_DEFAULT_TEAM_ROLE
|
|
12
13
|
} from "@nextsparkjs/registries/permissions-registry";
|
|
13
14
|
const DEBUG_CONFIG = process.env.NEXTSPARK_DEBUG_CONFIG === "true";
|
|
14
15
|
const globalCache = globalThis;
|
|
15
16
|
function loadAppConfigInternal() {
|
|
17
|
+
var _a2;
|
|
16
18
|
const activeTheme = process.env.NEXT_PUBLIC_ACTIVE_THEME;
|
|
17
19
|
if (DEBUG_CONFIG) {
|
|
18
20
|
console.log("[config-sync] Loading app config for theme:", activeTheme);
|
|
@@ -40,14 +42,17 @@ function loadAppConfigInternal() {
|
|
|
40
42
|
themeConfigOverrides.userRoles
|
|
41
43
|
);
|
|
42
44
|
}
|
|
43
|
-
if (DEFAULT_APP_CONFIG.
|
|
44
|
-
mergedConfig.
|
|
45
|
-
...
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
if ((_a2 = DEFAULT_APP_CONFIG.teams) == null ? void 0 : _a2.roles) {
|
|
46
|
+
mergedConfig.teams = {
|
|
47
|
+
...mergedConfig.teams,
|
|
48
|
+
roles: {
|
|
49
|
+
coreTeamRoles: DEFAULT_APP_CONFIG.teams.roles.coreTeamRoles,
|
|
50
|
+
availableTeamRoles: REGISTRY_AVAILABLE_ROLES,
|
|
51
|
+
defaultTeamRole: REGISTRY_DEFAULT_TEAM_ROLE,
|
|
52
|
+
hierarchy: REGISTRY_ROLE_HIERARCHY,
|
|
53
|
+
displayNames: REGISTRY_ROLE_DISPLAY_NAMES,
|
|
54
|
+
descriptions: REGISTRY_ROLE_DESCRIPTIONS
|
|
55
|
+
}
|
|
51
56
|
};
|
|
52
57
|
}
|
|
53
58
|
if (DEBUG_CONFIG) {
|
|
@@ -37,56 +37,6 @@ export interface ThemeRolesConfig {
|
|
|
37
37
|
displayNames?: Record<string, string>;
|
|
38
38
|
descriptions?: Record<string, string>;
|
|
39
39
|
}
|
|
40
|
-
/**
|
|
41
|
-
* Core team roles configuration (from DEFAULT_APP_CONFIG.teamRoles)
|
|
42
|
-
* Contains the protected team role (owner) that cannot be removed
|
|
43
|
-
*
|
|
44
|
-
* Note: Team permissions are now defined in permissions.config.ts
|
|
45
|
-
* and accessed via permissions-registry (TEAM_PERMISSIONS_BY_ROLE)
|
|
46
|
-
*/
|
|
47
|
-
export interface CoreTeamRolesConfig {
|
|
48
|
-
coreTeamRoles: readonly string[];
|
|
49
|
-
defaultTeamRole: string;
|
|
50
|
-
availableTeamRoles: readonly string[];
|
|
51
|
-
hierarchy: Record<string, number>;
|
|
52
|
-
displayNames: Record<string, string>;
|
|
53
|
-
descriptions: Record<string, string>;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Theme team roles configuration (from theme app.config.ts)
|
|
57
|
-
* Allows themes to customize team roles (except 'owner')
|
|
58
|
-
*
|
|
59
|
-
* Note: Team permissions are now defined in permissions.config.ts
|
|
60
|
-
* Use the `teams` array in permissions.config.ts to define role permissions.
|
|
61
|
-
*/
|
|
62
|
-
export interface ThemeTeamRolesConfig {
|
|
63
|
-
/** Additional team roles to add */
|
|
64
|
-
additionalTeamRoles?: readonly string[];
|
|
65
|
-
/** Team roles to remove (cannot include 'owner') */
|
|
66
|
-
removeTeamRoles?: readonly string[];
|
|
67
|
-
/** Default role for new team members */
|
|
68
|
-
defaultTeamRole?: string;
|
|
69
|
-
/** Hierarchy overrides (cannot modify 'owner') */
|
|
70
|
-
hierarchy?: Record<string, number>;
|
|
71
|
-
/** Display name overrides */
|
|
72
|
-
displayNames?: Record<string, string>;
|
|
73
|
-
/** Description overrides */
|
|
74
|
-
descriptions?: Record<string, string>;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Merged team roles configuration result
|
|
78
|
-
*
|
|
79
|
-
* Note: Team permissions are NOT included here anymore.
|
|
80
|
-
* Use TEAM_PERMISSIONS_BY_ROLE from permissions-registry instead.
|
|
81
|
-
*/
|
|
82
|
-
export interface MergedTeamRolesConfig {
|
|
83
|
-
coreTeamRoles: readonly string[];
|
|
84
|
-
availableTeamRoles: readonly string[];
|
|
85
|
-
defaultTeamRole: string;
|
|
86
|
-
hierarchy: Record<string, number>;
|
|
87
|
-
displayNames: Record<string, string>;
|
|
88
|
-
descriptions: Record<string, string>;
|
|
89
|
-
}
|
|
90
40
|
/**
|
|
91
41
|
* Merged roles configuration result
|
|
92
42
|
* Contains core roles + theme additions with validation applied
|
|
@@ -123,31 +73,4 @@ export interface MergedRolesConfig {
|
|
|
123
73
|
* ```
|
|
124
74
|
*/
|
|
125
75
|
export declare function mergeRolesConfig(coreConfig: CoreRolesConfig, themeConfig?: ThemeRolesConfig): MergedRolesConfig;
|
|
126
|
-
/**
|
|
127
|
-
* Merge core team roles configuration with theme-specific overrides
|
|
128
|
-
*
|
|
129
|
-
* This function implements the extensible team roles system by:
|
|
130
|
-
* 1. Protecting the 'owner' role from removal (critical for team creation)
|
|
131
|
-
* 2. Allowing themes to add custom team roles via `additionalTeamRoles`
|
|
132
|
-
* 3. Allowing themes to remove non-core roles via `removeTeamRoles`
|
|
133
|
-
* 4. Merging hierarchy with validation (owner=100, others <=99)
|
|
134
|
-
* 5. Validating defaultTeamRole exists in available roles
|
|
135
|
-
*
|
|
136
|
-
* @param coreConfig - Core team roles configuration from DEFAULT_APP_CONFIG
|
|
137
|
-
* @param themeConfig - Optional theme team roles configuration overrides
|
|
138
|
-
* @returns Merged and validated team roles configuration
|
|
139
|
-
*
|
|
140
|
-
* @example
|
|
141
|
-
* ```typescript
|
|
142
|
-
* const merged = mergeTeamRolesConfig(
|
|
143
|
-
* DEFAULT_APP_CONFIG.teamRoles,
|
|
144
|
-
* {
|
|
145
|
-
* additionalTeamRoles: ['editor', 'guest'],
|
|
146
|
-
* removeTeamRoles: ['viewer'],
|
|
147
|
-
* }
|
|
148
|
-
* )
|
|
149
|
-
* // merged.availableTeamRoles: ['owner', 'admin', 'member', 'editor', 'guest']
|
|
150
|
-
* ```
|
|
151
|
-
*/
|
|
152
|
-
export declare function mergeTeamRolesConfig(coreConfig: CoreTeamRolesConfig, themeConfig?: ThemeTeamRolesConfig): MergedTeamRolesConfig;
|
|
153
76
|
//# sourceMappingURL=roles-merge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roles-merge.d.ts","sourceRoot":"","sources":["../../../src/lib/config/roles-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC;
|
|
1
|
+
{"version":3,"file":"roles-merge.d.ts","sourceRoot":"","sources":["../../../src/lib/config/roles-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC;AAiBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,eAAe,EAC3B,WAAW,CAAC,EAAE,gBAAgB,GAC7B,iBAAiB,CAuHnB"}
|
|
@@ -3,11 +3,6 @@ const MAX_HIERARCHY = 100;
|
|
|
3
3
|
const MAX_NON_DEVELOPER_HIERARCHY = 99;
|
|
4
4
|
const DEFAULT_HIERARCHY = 1;
|
|
5
5
|
const FALLBACK_DEFAULT_ROLE = "member";
|
|
6
|
-
const OWNER_TEAM_ROLE = "owner";
|
|
7
|
-
const OWNER_TEAM_HIERARCHY = 100;
|
|
8
|
-
const MAX_NON_OWNER_TEAM_HIERARCHY = 99;
|
|
9
|
-
const DEFAULT_TEAM_HIERARCHY = 1;
|
|
10
|
-
const FALLBACK_DEFAULT_TEAM_ROLE = "member";
|
|
11
6
|
function mergeRolesConfig(coreConfig, themeConfig) {
|
|
12
7
|
const result = {
|
|
13
8
|
coreRoles: coreConfig.coreRoles,
|
|
@@ -84,98 +79,6 @@ function mergeRolesConfig(coreConfig, themeConfig) {
|
|
|
84
79
|
}
|
|
85
80
|
return result;
|
|
86
81
|
}
|
|
87
|
-
function mergeTeamRolesConfig(coreConfig, themeConfig) {
|
|
88
|
-
const result = {
|
|
89
|
-
coreTeamRoles: coreConfig.coreTeamRoles,
|
|
90
|
-
availableTeamRoles: [...coreConfig.availableTeamRoles],
|
|
91
|
-
defaultTeamRole: coreConfig.defaultTeamRole,
|
|
92
|
-
hierarchy: { ...coreConfig.hierarchy },
|
|
93
|
-
displayNames: { ...coreConfig.displayNames },
|
|
94
|
-
descriptions: { ...coreConfig.descriptions }
|
|
95
|
-
};
|
|
96
|
-
if (!themeConfig) {
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
|
-
const coreTeamRolesSet = new Set(coreConfig.coreTeamRoles);
|
|
100
|
-
if (themeConfig.removeTeamRoles && themeConfig.removeTeamRoles.length > 0) {
|
|
101
|
-
themeConfig.removeTeamRoles.forEach((role) => {
|
|
102
|
-
if (coreTeamRolesSet.has(role)) {
|
|
103
|
-
console.warn(
|
|
104
|
-
`[roles-merge] Theme attempted to remove core team role "${role}". Core team roles cannot be removed. Ignoring.`
|
|
105
|
-
);
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
result.availableTeamRoles = result.availableTeamRoles.filter((r) => r !== role);
|
|
109
|
-
delete result.hierarchy[role];
|
|
110
|
-
delete result.displayNames[role];
|
|
111
|
-
delete result.descriptions[role];
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
if (themeConfig.additionalTeamRoles && themeConfig.additionalTeamRoles.length > 0) {
|
|
115
|
-
themeConfig.additionalTeamRoles.forEach((role) => {
|
|
116
|
-
if (result.availableTeamRoles.includes(role)) {
|
|
117
|
-
console.warn(
|
|
118
|
-
`[roles-merge] Theme attempted to add existing team role "${role}". Ignoring.`
|
|
119
|
-
);
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
result.availableTeamRoles = [...result.availableTeamRoles, role];
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
if (themeConfig.hierarchy) {
|
|
126
|
-
Object.entries(themeConfig.hierarchy).forEach(([role, hierarchyValue]) => {
|
|
127
|
-
if (role === OWNER_TEAM_ROLE) {
|
|
128
|
-
if (hierarchyValue !== OWNER_TEAM_HIERARCHY) {
|
|
129
|
-
console.warn(
|
|
130
|
-
`[roles-merge] Theme attempted to set owner team hierarchy to ${hierarchyValue}. Owner role must always have hierarchy ${OWNER_TEAM_HIERARCHY}. Ignoring.`
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
if (hierarchyValue >= OWNER_TEAM_HIERARCHY) {
|
|
136
|
-
console.warn(
|
|
137
|
-
`[roles-merge] Theme attempted to set "${role}" team hierarchy to ${hierarchyValue}. Non-owner roles cannot have hierarchy >= ${OWNER_TEAM_HIERARCHY}. Capping to ${MAX_NON_OWNER_TEAM_HIERARCHY}.`
|
|
138
|
-
);
|
|
139
|
-
result.hierarchy[role] = MAX_NON_OWNER_TEAM_HIERARCHY;
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
result.hierarchy[role] = hierarchyValue;
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
result.availableTeamRoles.forEach((role) => {
|
|
146
|
-
if (!(role in result.hierarchy)) {
|
|
147
|
-
console.warn(
|
|
148
|
-
`[roles-merge] Team role "${role}" is missing hierarchy value. Defaulting to ${DEFAULT_TEAM_HIERARCHY}.`
|
|
149
|
-
);
|
|
150
|
-
result.hierarchy[role] = DEFAULT_TEAM_HIERARCHY;
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
if (themeConfig.displayNames) {
|
|
154
|
-
result.displayNames = {
|
|
155
|
-
...result.displayNames,
|
|
156
|
-
...themeConfig.displayNames
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
if (themeConfig.descriptions) {
|
|
160
|
-
result.descriptions = {
|
|
161
|
-
...result.descriptions,
|
|
162
|
-
...themeConfig.descriptions
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
if (themeConfig.defaultTeamRole) {
|
|
166
|
-
const availableRolesSet = new Set(result.availableTeamRoles);
|
|
167
|
-
if (!availableRolesSet.has(themeConfig.defaultTeamRole)) {
|
|
168
|
-
console.warn(
|
|
169
|
-
`[roles-merge] Theme defaultTeamRole "${themeConfig.defaultTeamRole}" does not exist in available team roles. Falling back to "${FALLBACK_DEFAULT_TEAM_ROLE}".`
|
|
170
|
-
);
|
|
171
|
-
result.defaultTeamRole = FALLBACK_DEFAULT_TEAM_ROLE;
|
|
172
|
-
} else {
|
|
173
|
-
result.defaultTeamRole = themeConfig.defaultTeamRole;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
return result;
|
|
177
|
-
}
|
|
178
82
|
export {
|
|
179
|
-
mergeRolesConfig
|
|
180
|
-
mergeTeamRolesConfig
|
|
83
|
+
mergeRolesConfig
|
|
181
84
|
};
|
|
@@ -37,6 +37,12 @@ export interface TeamsConfig {
|
|
|
37
37
|
mode: TeamsMode;
|
|
38
38
|
/** Additional options */
|
|
39
39
|
options?: TeamsConfigOptions;
|
|
40
|
+
/**
|
|
41
|
+
* Resolved team-role system (set, hierarchy, labels) for team_members.role.
|
|
42
|
+
* Themes declare the active set declaratively via `teams.roles` in app.config
|
|
43
|
+
* (REPLACE model); the merged value here is the fully resolved object.
|
|
44
|
+
*/
|
|
45
|
+
roles?: TeamRolesConfig;
|
|
40
46
|
}
|
|
41
47
|
/**
|
|
42
48
|
* Mobile Navigation Item
|
|
@@ -464,8 +470,6 @@ export interface AppConfig {
|
|
|
464
470
|
* Use DEV_CONFIG from config-sync.ts instead.
|
|
465
471
|
*/
|
|
466
472
|
devKeyring?: DevKeyringConfig;
|
|
467
|
-
/** Team roles configuration (for team_members.role) */
|
|
468
|
-
teamRoles?: TeamRolesConfig;
|
|
469
473
|
/** Scheduled actions system configuration */
|
|
470
474
|
scheduledActions?: ScheduledActionsConfig;
|
|
471
475
|
/** Media library configuration */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/config/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C;;;;GAIG;AACH,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,eAAe,GACf,cAAc,CAAA;AAElB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,+BAA+B;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,qCAAqC;IACrC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iBAAiB;IACjB,IAAI,EAAE,SAAS,CAAA;IACf,yBAAyB;IACzB,OAAO,CAAC,EAAE,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/config/types.ts"],"names":[],"mappings":"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"}
|