@rhino-dev/rhino-nestjs 4.2.1 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/permissions-migrate.command.d.ts +13 -0
- package/dist/cli/commands/permissions-migrate.command.js +51 -0
- package/dist/cli/commands/permissions-migrate.command.js.map +1 -0
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/permissions-migrator.d.ts +28 -0
- package/dist/cli/permissions-migrator.js +75 -0
- package/dist/cli/permissions-migrator.js.map +1 -0
- package/dist/controllers/global.controller.d.ts +19 -3
- package/dist/controllers/global.controller.js +53 -14
- package/dist/controllers/global.controller.js.map +1 -1
- package/dist/guards/group-membership.guard.js +4 -1
- package/dist/guards/group-membership.guard.js.map +1 -1
- package/dist/guards/jwt-auth.guard.js +16 -1
- package/dist/guards/jwt-auth.guard.js.map +1 -1
- package/dist/services/membership.service.d.ts +9 -1
- package/dist/services/membership.service.js +17 -2
- package/dist/services/membership.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/permission-matcher.d.ts +16 -4
- package/dist/utils/permission-matcher.js +106 -15
- package/dist/utils/permission-matcher.js.map +1 -1
- package/package.json +1 -1
|
@@ -26,20 +26,32 @@ export declare function coercePermissions(raw: unknown): string[];
|
|
|
26
26
|
* real array, a JSON-string array, or a comma-separated string.
|
|
27
27
|
*/
|
|
28
28
|
export declare function matchesPermission(permission: string, granted: string[] | string | null | undefined): boolean;
|
|
29
|
+
/** The shared role-layer permissions for a single user_role row. */
|
|
30
|
+
export declare function rowRolePermissions(ur: any): string[];
|
|
31
|
+
/** The allow set contributed by a single user_role row (legacy ∪ granted ∪ role). */
|
|
32
|
+
export declare function rowAllowPermissions(ur: any): string[];
|
|
33
|
+
/** The deny set contributed by a single user_role row. */
|
|
34
|
+
export declare function rowDeniedPermissions(ur: any): string[];
|
|
29
35
|
/**
|
|
30
36
|
* Resolve the role slug for a user in a specific organization.
|
|
31
37
|
* Expects a user object shaped like the Laravel user with userRoles relation.
|
|
32
38
|
*/
|
|
33
39
|
export declare function resolveUserRoleSlug(user: any, organizationId: number | string | null | undefined): string | null;
|
|
34
40
|
/**
|
|
35
|
-
* Resolve permissions granted to a user in an organization context.
|
|
36
|
-
* Tenant context →
|
|
37
|
-
*
|
|
38
|
-
* No org context →
|
|
41
|
+
* Resolve the ALLOW permissions granted to a user in an organization context.
|
|
42
|
+
* Tenant context → unions every user_roles entry's (legacy ∪ granted ∪ role
|
|
43
|
+
* layer) for the org.
|
|
44
|
+
* No org context → the user's top-level permissions ∪ grantedPermissions.
|
|
39
45
|
*/
|
|
40
46
|
export declare function resolveUserPermissions(user: any, organizationId?: number | string | null): string[];
|
|
47
|
+
/**
|
|
48
|
+
* Resolve the DENY permissions for a user in an organization context. Deny
|
|
49
|
+
* always wins over the allow set.
|
|
50
|
+
*/
|
|
51
|
+
export declare function resolveDeniedPermissions(user: any, organizationId?: number | string | null): string[];
|
|
41
52
|
/**
|
|
42
53
|
* Top-level permission check mirroring the Laravel `hasPermission` method.
|
|
54
|
+
* Applies deny-overrides: a denied permission is denied even under a role `*`.
|
|
43
55
|
*/
|
|
44
56
|
export declare function userHasPermission(user: any, permission: string, organization?: {
|
|
45
57
|
id: number | string;
|
|
@@ -2,8 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.coercePermissions = coercePermissions;
|
|
4
4
|
exports.matchesPermission = matchesPermission;
|
|
5
|
+
exports.rowRolePermissions = rowRolePermissions;
|
|
6
|
+
exports.rowAllowPermissions = rowAllowPermissions;
|
|
7
|
+
exports.rowDeniedPermissions = rowDeniedPermissions;
|
|
5
8
|
exports.resolveUserRoleSlug = resolveUserRoleSlug;
|
|
6
9
|
exports.resolveUserPermissions = resolveUserPermissions;
|
|
10
|
+
exports.resolveDeniedPermissions = resolveDeniedPermissions;
|
|
7
11
|
exports.userHasPermission = userHasPermission;
|
|
8
12
|
/**
|
|
9
13
|
* Coerce a raw permissions value into a string array.
|
|
@@ -66,6 +70,67 @@ function matchesPermission(permission, granted) {
|
|
|
66
70
|
}
|
|
67
71
|
return false;
|
|
68
72
|
}
|
|
73
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
74
|
+
// Layered permissions (PERMISSIONS_DESIGN.md)
|
|
75
|
+
//
|
|
76
|
+
// effective = (role ∪ granted) − denied (deny always wins)
|
|
77
|
+
//
|
|
78
|
+
// - role → org_role_permissions[(org, role)].permissions (shared role layer)
|
|
79
|
+
// - granted → user_roles.granted_permissions (per-user additive)
|
|
80
|
+
// - denied → user_roles.denied_permissions (per-user subtractive)
|
|
81
|
+
// - legacy → user_roles.permissions (back-compat allow)
|
|
82
|
+
//
|
|
83
|
+
// The matcher reads these from the in-memory user object. `grantedPermissions`
|
|
84
|
+
// / `deniedPermissions` are scalar columns on user_roles (loaded automatically).
|
|
85
|
+
// The role layer is read from the row's `role.orgRolePermissions` (Prisma deep
|
|
86
|
+
// include), filtered to the row's own organization — or from a pre-resolved
|
|
87
|
+
// `rolePermissions` list if a service attached one.
|
|
88
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
89
|
+
function readOrgId(ur) {
|
|
90
|
+
return ur?.organizationId ?? ur?.organization_id;
|
|
91
|
+
}
|
|
92
|
+
/** The shared role-layer permissions for a single user_role row. */
|
|
93
|
+
function rowRolePermissions(ur) {
|
|
94
|
+
if (!ur)
|
|
95
|
+
return [];
|
|
96
|
+
// Pre-resolved by a service (e.g. raw-SQL consumers).
|
|
97
|
+
const direct = ur.rolePermissions ?? ur.role_permissions;
|
|
98
|
+
if (direct != null)
|
|
99
|
+
return coercePermissions(direct);
|
|
100
|
+
// From the role's org_role_permissions, scoped to this row's organization.
|
|
101
|
+
const orgId = readOrgId(ur);
|
|
102
|
+
const layers = ur.role?.orgRolePermissions ??
|
|
103
|
+
ur.role?.org_role_permissions ??
|
|
104
|
+
ur.orgRolePermissions ??
|
|
105
|
+
ur.org_role_permissions;
|
|
106
|
+
if (!Array.isArray(layers))
|
|
107
|
+
return [];
|
|
108
|
+
const acc = [];
|
|
109
|
+
for (const entry of layers) {
|
|
110
|
+
const entryOrg = entry?.organizationId ?? entry?.organization_id;
|
|
111
|
+
if (orgId == null || entryOrg === orgId) {
|
|
112
|
+
for (const p of coercePermissions(entry?.permissions))
|
|
113
|
+
acc.push(p);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return acc;
|
|
117
|
+
}
|
|
118
|
+
/** The allow set contributed by a single user_role row (legacy ∪ granted ∪ role). */
|
|
119
|
+
function rowAllowPermissions(ur) {
|
|
120
|
+
if (!ur)
|
|
121
|
+
return [];
|
|
122
|
+
return [
|
|
123
|
+
...coercePermissions(ur.permissions),
|
|
124
|
+
...coercePermissions(ur.grantedPermissions ?? ur.granted_permissions),
|
|
125
|
+
...rowRolePermissions(ur),
|
|
126
|
+
];
|
|
127
|
+
}
|
|
128
|
+
/** The deny set contributed by a single user_role row. */
|
|
129
|
+
function rowDeniedPermissions(ur) {
|
|
130
|
+
if (!ur)
|
|
131
|
+
return [];
|
|
132
|
+
return coercePermissions(ur.deniedPermissions ?? ur.denied_permissions);
|
|
133
|
+
}
|
|
69
134
|
/**
|
|
70
135
|
* Resolve the role slug for a user in a specific organization.
|
|
71
136
|
* Expects a user object shaped like the Laravel user with userRoles relation.
|
|
@@ -83,19 +148,19 @@ function resolveUserRoleSlug(user, organizationId) {
|
|
|
83
148
|
return null;
|
|
84
149
|
}
|
|
85
150
|
/**
|
|
86
|
-
* Resolve permissions granted to a user in an organization context.
|
|
87
|
-
* Tenant context →
|
|
88
|
-
*
|
|
89
|
-
* No org context →
|
|
151
|
+
* Resolve the ALLOW permissions granted to a user in an organization context.
|
|
152
|
+
* Tenant context → unions every user_roles entry's (legacy ∪ granted ∪ role
|
|
153
|
+
* layer) for the org.
|
|
154
|
+
* No org context → the user's top-level permissions ∪ grantedPermissions.
|
|
90
155
|
*/
|
|
91
156
|
function resolveUserPermissions(user, organizationId) {
|
|
92
157
|
if (!user)
|
|
93
158
|
return [];
|
|
94
159
|
// Group-membership enforcement (design §6): when the membership layer has
|
|
95
160
|
// resolved the matching row(s), the permission source switches to that row
|
|
96
|
-
// only. The guard attaches the resolved list as `__membershipPermissions`.
|
|
97
|
-
// Absent (enforcement off) → fall through to the legacy heuristic, so
|
|
98
|
-
//
|
|
161
|
+
// only. The guard attaches the resolved ALLOW list as `__membershipPermissions`.
|
|
162
|
+
// Absent (enforcement off) → fall through to the legacy heuristic, so existing
|
|
163
|
+
// behavior is byte-for-byte unchanged.
|
|
99
164
|
if (Array.isArray(user.__membershipPermissions)) {
|
|
100
165
|
return coercePermissions(user.__membershipPermissions);
|
|
101
166
|
}
|
|
@@ -103,26 +168,52 @@ function resolveUserPermissions(user, organizationId) {
|
|
|
103
168
|
const userRoles = user.userRoles ?? user.user_roles ?? [];
|
|
104
169
|
const all = [];
|
|
105
170
|
for (const ur of userRoles) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
171
|
+
if (readOrgId(ur) === organizationId) {
|
|
172
|
+
for (const p of rowAllowPermissions(ur))
|
|
173
|
+
all.push(p);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return all;
|
|
177
|
+
}
|
|
178
|
+
return [
|
|
179
|
+
...coercePermissions(user.permissions),
|
|
180
|
+
...coercePermissions(user.grantedPermissions ?? user.granted_permissions),
|
|
181
|
+
];
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Resolve the DENY permissions for a user in an organization context. Deny
|
|
185
|
+
* always wins over the allow set.
|
|
186
|
+
*/
|
|
187
|
+
function resolveDeniedPermissions(user, organizationId) {
|
|
188
|
+
if (!user)
|
|
189
|
+
return [];
|
|
190
|
+
if (Array.isArray(user.__membershipDeniedPermissions)) {
|
|
191
|
+
return coercePermissions(user.__membershipDeniedPermissions);
|
|
192
|
+
}
|
|
193
|
+
if (organizationId != null) {
|
|
194
|
+
const userRoles = user.userRoles ?? user.user_roles ?? [];
|
|
195
|
+
const all = [];
|
|
196
|
+
for (const ur of userRoles) {
|
|
197
|
+
if (readOrgId(ur) === organizationId) {
|
|
198
|
+
for (const p of rowDeniedPermissions(ur))
|
|
111
199
|
all.push(p);
|
|
112
200
|
}
|
|
113
201
|
}
|
|
114
202
|
return all;
|
|
115
203
|
}
|
|
116
|
-
return coercePermissions(user.
|
|
204
|
+
return coercePermissions(user.deniedPermissions ?? user.denied_permissions);
|
|
117
205
|
}
|
|
118
206
|
/**
|
|
119
207
|
* Top-level permission check mirroring the Laravel `hasPermission` method.
|
|
208
|
+
* Applies deny-overrides: a denied permission is denied even under a role `*`.
|
|
120
209
|
*/
|
|
121
210
|
function userHasPermission(user, permission, organization) {
|
|
122
211
|
if (!user)
|
|
123
212
|
return false;
|
|
124
213
|
const orgId = organization ? organization.id : null;
|
|
125
|
-
|
|
126
|
-
|
|
214
|
+
// Deny always wins.
|
|
215
|
+
if (matchesPermission(permission, resolveDeniedPermissions(user, orgId)))
|
|
216
|
+
return false;
|
|
217
|
+
return matchesPermission(permission, resolveUserPermissions(user, orgId));
|
|
127
218
|
}
|
|
128
219
|
//# sourceMappingURL=permission-matcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission-matcher.js","sourceRoot":"","sources":["../../src/utils/permission-matcher.ts"],"names":[],"mappings":";;AAeA,8CAiBC;AAaD,8CAYC;AAMD,kDAUC;AAQD,wDAwBC;
|
|
1
|
+
{"version":3,"file":"permission-matcher.js","sourceRoot":"","sources":["../../src/utils/permission-matcher.ts"],"names":[],"mappings":";;AAeA,8CAiBC;AAaD,8CAYC;AAwBD,gDAuBC;AAGD,kDAOC;AAGD,oDAGC;AAMD,kDAUC;AAQD,wDAwBC;AAMD,4DAgBC;AAMD,8CAYC;AAhND;;;;;;;;;;;;;;GAcG;AACH,SAAgB,iBAAiB,CAAC,GAAY;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAe,CAAC;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,OAAO;SACX,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,iBAAiB,CAC/B,UAAkB,EAClB,OAA6C;IAE7C,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,GAAG,IAAI,IAAI,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,YAAY;YAAE,OAAO,IAAI,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,8CAA8C;AAC9C,EAAE;AACF,oEAAoE;AACpE,EAAE;AACF,mFAAmF;AACnF,mFAAmF;AACnF,sFAAsF;AACtF,mFAAmF;AACnF,EAAE;AACF,+EAA+E;AAC/E,iFAAiF;AACjF,+EAA+E;AAC/E,4EAA4E;AAC5E,oDAAoD;AACpD,6EAA6E;AAE7E,SAAS,SAAS,CAAC,EAAO;IACxB,OAAO,EAAE,EAAE,cAAc,IAAI,EAAE,EAAE,eAAe,CAAC;AACnD,CAAC;AAED,oEAAoE;AACpE,SAAgB,kBAAkB,CAAC,EAAO;IACxC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,sDAAsD;IACtD,MAAM,MAAM,GAAG,EAAE,CAAC,eAAe,IAAI,EAAE,CAAC,gBAAgB,CAAC;IACzD,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAErD,2EAA2E;IAC3E,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,MAAM,GACV,EAAE,CAAC,IAAI,EAAE,kBAAkB;QAC3B,EAAE,CAAC,IAAI,EAAE,oBAAoB;QAC7B,EAAE,CAAC,kBAAkB;QACrB,EAAE,CAAC,oBAAoB,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,EAAE,cAAc,IAAI,KAAK,EAAE,eAAe,CAAC;QACjE,IAAI,KAAK,IAAI,IAAI,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,IAAI,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,qFAAqF;AACrF,SAAgB,mBAAmB,CAAC,EAAO;IACzC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,OAAO;QACL,GAAG,iBAAiB,CAAC,EAAE,CAAC,WAAW,CAAC;QACpC,GAAG,iBAAiB,CAAC,EAAE,CAAC,kBAAkB,IAAI,EAAE,CAAC,mBAAmB,CAAC;QACrE,GAAG,kBAAkB,CAAC,EAAE,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,SAAgB,oBAAoB,CAAC,EAAO;IAC1C,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,OAAO,iBAAiB,CAAC,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,kBAAkB,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,IAAS,EAAE,cAAkD;IAC/F,IAAI,CAAC,IAAI,IAAI,cAAc,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IAC1D,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC,eAAe,CAAC;QACtD,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CAAC,IAAS,EAAE,cAAuC;IACvF,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,0EAA0E;IAC1E,2EAA2E;IAC3E,iFAAiF;IACjF,+EAA+E;IAC/E,uCAAuC;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAChD,OAAO,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,SAAS,CAAC,EAAE,CAAC,KAAK,cAAc,EAAE,CAAC;gBACrC,KAAK,MAAM,CAAC,IAAI,mBAAmB,CAAC,EAAE,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO;QACL,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;QACtC,GAAG,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,IAAS,EAAE,cAAuC;IACzF,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,EAAE,CAAC;QACtD,OAAO,iBAAiB,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,SAAS,CAAC,EAAE,CAAC,KAAK,cAAc,EAAE,CAAC;gBACrC,KAAK,MAAM,CAAC,IAAI,oBAAoB,CAAC,EAAE,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC9E,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAC/B,IAAS,EACT,UAAkB,EAClB,YAA6C;IAE7C,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAEpD,oBAAoB;IACpB,IAAI,iBAAiB,CAAC,UAAU,EAAE,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAEvF,OAAO,iBAAiB,CAAC,UAAU,EAAE,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5E,CAAC"}
|
package/package.json
CHANGED