@lightdash/common 0.1947.0 → 0.1949.0

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 (91) hide show
  1. package/dist/cjs/authorization/projectMemberAbility.d.ts.map +1 -1
  2. package/dist/cjs/authorization/projectMemberAbility.js +0 -4
  3. package/dist/cjs/authorization/projectMemberAbility.js.map +1 -1
  4. package/dist/cjs/authorization/roleToScopeMapping.d.ts +4 -5
  5. package/dist/cjs/authorization/roleToScopeMapping.d.ts.map +1 -1
  6. package/dist/cjs/authorization/roleToScopeMapping.js +28 -34
  7. package/dist/cjs/authorization/roleToScopeMapping.js.map +1 -1
  8. package/dist/cjs/authorization/roleToScopeMapping.test.js +38 -24
  9. package/dist/cjs/authorization/roleToScopeMapping.test.js.map +1 -1
  10. package/dist/cjs/authorization/roleToScopeMapping.testUtils.js +3 -3
  11. package/dist/cjs/authorization/roleToScopeMapping.testUtils.js.map +1 -1
  12. package/dist/cjs/authorization/roleToScopeParity.test.d.ts +2 -0
  13. package/dist/cjs/authorization/roleToScopeParity.test.d.ts.map +1 -0
  14. package/dist/cjs/authorization/roleToScopeParity.test.js +195 -0
  15. package/dist/cjs/authorization/roleToScopeParity.test.js.map +1 -0
  16. package/dist/cjs/authorization/scopeAbilityBuilder.d.ts.map +1 -1
  17. package/dist/cjs/authorization/scopeAbilityBuilder.js +10 -7
  18. package/dist/cjs/authorization/scopeAbilityBuilder.js.map +1 -1
  19. package/dist/cjs/authorization/scopeAbilityBuilder.test.js +312 -89
  20. package/dist/cjs/authorization/scopeAbilityBuilder.test.js.map +1 -1
  21. package/dist/cjs/authorization/scopes.d.ts.map +1 -1
  22. package/dist/cjs/authorization/scopes.js +102 -90
  23. package/dist/cjs/authorization/scopes.js.map +1 -1
  24. package/dist/cjs/ee/AiAgent/schemas/sortField.js +1 -1
  25. package/dist/cjs/ee/AiAgent/schemas/sortField.js.map +1 -1
  26. package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts +1 -1
  27. package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts.map +1 -1
  28. package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js +4 -4
  29. package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js.map +1 -1
  30. package/dist/cjs/index.d.ts +1 -0
  31. package/dist/cjs/index.d.ts.map +1 -1
  32. package/dist/cjs/index.js +1 -0
  33. package/dist/cjs/index.js.map +1 -1
  34. package/dist/cjs/types/roles.d.ts +6 -3
  35. package/dist/cjs/types/roles.d.ts.map +1 -1
  36. package/dist/cjs/types/scopes.d.ts +2 -2
  37. package/dist/cjs/types/scopes.d.ts.map +1 -1
  38. package/dist/esm/authorization/projectMemberAbility.d.ts.map +1 -1
  39. package/dist/esm/authorization/projectMemberAbility.js +0 -4
  40. package/dist/esm/authorization/projectMemberAbility.js.map +1 -1
  41. package/dist/esm/authorization/roleToScopeMapping.d.ts +4 -5
  42. package/dist/esm/authorization/roleToScopeMapping.d.ts.map +1 -1
  43. package/dist/esm/authorization/roleToScopeMapping.js +24 -31
  44. package/dist/esm/authorization/roleToScopeMapping.js.map +1 -1
  45. package/dist/esm/authorization/roleToScopeMapping.test.js +39 -25
  46. package/dist/esm/authorization/roleToScopeMapping.test.js.map +1 -1
  47. package/dist/esm/authorization/roleToScopeMapping.testUtils.js +4 -4
  48. package/dist/esm/authorization/roleToScopeMapping.testUtils.js.map +1 -1
  49. package/dist/esm/authorization/roleToScopeParity.test.d.ts +2 -0
  50. package/dist/esm/authorization/roleToScopeParity.test.d.ts.map +1 -0
  51. package/dist/esm/authorization/roleToScopeParity.test.js +193 -0
  52. package/dist/esm/authorization/roleToScopeParity.test.js.map +1 -0
  53. package/dist/esm/authorization/scopeAbilityBuilder.d.ts.map +1 -1
  54. package/dist/esm/authorization/scopeAbilityBuilder.js +10 -7
  55. package/dist/esm/authorization/scopeAbilityBuilder.js.map +1 -1
  56. package/dist/esm/authorization/scopeAbilityBuilder.test.js +312 -89
  57. package/dist/esm/authorization/scopeAbilityBuilder.test.js.map +1 -1
  58. package/dist/esm/authorization/scopes.d.ts.map +1 -1
  59. package/dist/esm/authorization/scopes.js +102 -90
  60. package/dist/esm/authorization/scopes.js.map +1 -1
  61. package/dist/esm/ee/AiAgent/schemas/sortField.js +1 -1
  62. package/dist/esm/ee/AiAgent/schemas/sortField.js.map +1 -1
  63. package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts +1 -1
  64. package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts.map +1 -1
  65. package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js +4 -4
  66. package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js.map +1 -1
  67. package/dist/esm/index.d.ts +1 -0
  68. package/dist/esm/index.d.ts.map +1 -1
  69. package/dist/esm/index.js +1 -0
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/types/roles.d.ts +6 -3
  72. package/dist/esm/types/roles.d.ts.map +1 -1
  73. package/dist/esm/types/scopes.d.ts +2 -2
  74. package/dist/esm/types/scopes.d.ts.map +1 -1
  75. package/dist/tsconfig.types.tsbuildinfo +1 -1
  76. package/dist/types/authorization/projectMemberAbility.d.ts.map +1 -1
  77. package/dist/types/authorization/roleToScopeMapping.d.ts +4 -5
  78. package/dist/types/authorization/roleToScopeMapping.d.ts.map +1 -1
  79. package/dist/types/authorization/roleToScopeParity.test.d.ts +2 -0
  80. package/dist/types/authorization/roleToScopeParity.test.d.ts.map +1 -0
  81. package/dist/types/authorization/scopeAbilityBuilder.d.ts.map +1 -1
  82. package/dist/types/authorization/scopes.d.ts.map +1 -1
  83. package/dist/types/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts +1 -1
  84. package/dist/types/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts.map +1 -1
  85. package/dist/types/index.d.ts +1 -0
  86. package/dist/types/index.d.ts.map +1 -1
  87. package/dist/types/types/roles.d.ts +6 -3
  88. package/dist/types/types/roles.d.ts.map +1 -1
  89. package/dist/types/types/scopes.d.ts +2 -2
  90. package/dist/types/types/scopes.d.ts.map +1 -1
  91. package/package.json +2 -1
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable no-console */
4
+ const ability_1 = require("@casl/ability");
5
+ const lodash_1 = require("lodash");
6
+ const projectMemberRole_1 = require("../types/projectMemberRole");
7
+ const projectMemberAbility_1 = require("./projectMemberAbility");
8
+ const projectMemberAbility_mock_1 = require("./projectMemberAbility.mock");
9
+ const roleToScopeMapping_1 = require("./roleToScopeMapping");
10
+ const scopeAbilityBuilder_1 = require("./scopeAbilityBuilder");
11
+ /**
12
+ * Normalize a CASL rule for comparison by sorting object keys and handling undefined values
13
+ */
14
+ const normalizeRule = (rule) => ({
15
+ action: rule.action,
16
+ subject: rule.subject,
17
+ });
18
+ /**
19
+ * Compare two sets of CASL rules for functional equivalence
20
+ */
21
+ const compareRuleSets = (roleBasedRules, scopeBasedRules, roleName) => {
22
+ const normalizedRoleRules = roleBasedRules.map(normalizeRule);
23
+ const normalizedScopeRules = scopeBasedRules.map(normalizeRule);
24
+ const mismatches = [];
25
+ // Check if rule counts match
26
+ if (normalizedRoleRules.length !== normalizedScopeRules.length) {
27
+ mismatches.push(`Rule count mismatch: role-based has ${normalizedRoleRules.length} rules, scope-based has ${normalizedScopeRules.length} rules`);
28
+ }
29
+ // Group rules by action+subject for easier comparison
30
+ const roleRulesGrouped = (0, lodash_1.groupBy)(normalizedRoleRules, (rule) => `${rule.action}:${rule.subject}`);
31
+ const scopeRulesGrouped = (0, lodash_1.groupBy)(normalizedScopeRules, (rule) => `${rule.action}:${rule.subject}`);
32
+ // Check for missing or extra rule types
33
+ const roleKeys = new Set(Object.keys(roleRulesGrouped));
34
+ const scopeKeys = new Set(Object.keys(scopeRulesGrouped));
35
+ const missingInScope = [...roleKeys].filter((key) => !scopeKeys.has(key));
36
+ const extraInScope = [...scopeKeys].filter((key) => !roleKeys.has(key));
37
+ missingInScope.forEach((key) => {
38
+ mismatches.push(`Missing in scope-based: ${key}`);
39
+ });
40
+ extraInScope.forEach((key) => {
41
+ mismatches.push(`Extra in scope-based: ${key}`);
42
+ });
43
+ // Compare matching rule groups
44
+ const commonKeys = [...roleKeys].filter((key) => scopeKeys.has(key));
45
+ commonKeys.forEach((key) => {
46
+ const roleRulesForKey = roleRulesGrouped[key];
47
+ const scopeRulesForKey = scopeRulesGrouped[key];
48
+ // For rules with the same action+subject, we need to check if the conditions are equivalent
49
+ // This is more complex because multiple rules might combine to create the same effective permissions
50
+ if (roleRulesForKey.length !== scopeRulesForKey.length) {
51
+ // Different number of rules for same action+subject - this might be OK if conditions are equivalent
52
+ // For now, we'll flag this as a potential issue but continue checking
53
+ mismatches.push(`Different rule count for ${key}: role-based has ${roleRulesForKey.length}, scope-based has ${scopeRulesForKey.length}`);
54
+ }
55
+ // Check if rule sets contain equivalent conditions
56
+ const roleConditions = roleRulesForKey
57
+ .map((r) => r.conditions)
58
+ .filter(Boolean);
59
+ const scopeConditions = scopeRulesForKey
60
+ .map((r) => r.conditions)
61
+ .filter(Boolean);
62
+ if (!(0, lodash_1.isEqual)(roleConditions, scopeConditions)) {
63
+ mismatches.push(`Condition mismatch on ${roleName} for ${key}:\nRole-based: ${JSON.stringify(roleConditions, null, 2)}\nScope-based: ${JSON.stringify(scopeConditions, null, 2)}`);
64
+ }
65
+ });
66
+ return {
67
+ isEqual: mismatches.length === 0,
68
+ mismatches,
69
+ };
70
+ };
71
+ /**
72
+ * List of enterprise-only subject names that should be filtered in non-enterprise mode
73
+ */
74
+ const ENTERPRISE_SUBJECTS = new Set([
75
+ 'MetricsTree',
76
+ 'SpotlightTableConfig',
77
+ 'AiAgent',
78
+ 'AiAgentThread',
79
+ 'ContentAsCode',
80
+ ]);
81
+ /**
82
+ * Filter enterprise rules from role-based abilities when testing in non-enterprise mode
83
+ */
84
+ const filterEnterpriseRules = (rules, isEnterprise) => {
85
+ if (isEnterprise) {
86
+ return rules;
87
+ }
88
+ return rules.filter((rule) => !ENTERPRISE_SUBJECTS.has(rule.subject));
89
+ };
90
+ /**
91
+ * Test role-to-scope parity for a specific role
92
+ */
93
+ const testRoleScopeParity = (role, isEnterprise = false) => {
94
+ // Get the appropriate mock member profile
95
+ const memberProfiles = {
96
+ [projectMemberRole_1.ProjectMemberRole.VIEWER]: projectMemberAbility_mock_1.PROJECT_VIEWER,
97
+ [projectMemberRole_1.ProjectMemberRole.INTERACTIVE_VIEWER]: projectMemberAbility_mock_1.PROJECT_INTERACTIVE_VIEWER,
98
+ [projectMemberRole_1.ProjectMemberRole.EDITOR]: projectMemberAbility_mock_1.PROJECT_EDITOR,
99
+ [projectMemberRole_1.ProjectMemberRole.DEVELOPER]: projectMemberAbility_mock_1.PROJECT_DEVELOPER,
100
+ [projectMemberRole_1.ProjectMemberRole.ADMIN]: projectMemberAbility_mock_1.PROJECT_ADMIN,
101
+ };
102
+ const member = memberProfiles[role];
103
+ // Build abilities using role-based approach
104
+ const roleBuilder = new ability_1.AbilityBuilder(ability_1.Ability);
105
+ projectMemberAbility_1.projectMemberAbilities[role](member, roleBuilder);
106
+ const roleAbility = roleBuilder.build();
107
+ // Filter enterprise rules from role-based abilities if not enterprise
108
+ const filteredRoleRules = filterEnterpriseRules(roleAbility.rules, isEnterprise);
109
+ // Build abilities using scope-based approach
110
+ const scopeBuilder = new ability_1.AbilityBuilder(ability_1.Ability);
111
+ const scopes = (0, roleToScopeMapping_1.getAllScopesForRole)(role);
112
+ (0, scopeAbilityBuilder_1.buildAbilityFromScopes)({
113
+ userUuid: member.userUuid,
114
+ projectUuid: member.projectUuid,
115
+ scopes,
116
+ isEnterprise,
117
+ }, scopeBuilder);
118
+ const scopeAbility = scopeBuilder.build();
119
+ // Compare the filtered rule sets
120
+ const result = compareRuleSets(filteredRoleRules, scopeAbility.rules, role);
121
+ return result;
122
+ };
123
+ describe('Role to Scope Parity', () => {
124
+ const systemProjectRoles = [
125
+ projectMemberRole_1.ProjectMemberRole.VIEWER,
126
+ projectMemberRole_1.ProjectMemberRole.INTERACTIVE_VIEWER,
127
+ projectMemberRole_1.ProjectMemberRole.EDITOR,
128
+ projectMemberRole_1.ProjectMemberRole.DEVELOPER,
129
+ projectMemberRole_1.ProjectMemberRole.ADMIN,
130
+ ];
131
+ describe('Non-Enterprise Environment', () => {
132
+ it.each(systemProjectRoles)('should have equivalent permissions for %s role', (role) => {
133
+ const comparison = testRoleScopeParity(role, false);
134
+ if (!comparison.isEqual) {
135
+ console.error(`\n=== PARITY MISMATCH FOR ${role.toUpperCase()} ROLE ===`);
136
+ comparison.mismatches.forEach((mismatch) => {
137
+ console.error(`❌ ${mismatch}`);
138
+ });
139
+ console.error('=== END MISMATCH REPORT ===\n');
140
+ }
141
+ expect(comparison.isEqual).toBe(true);
142
+ });
143
+ });
144
+ describe('Enterprise Environment', () => {
145
+ it.each(systemProjectRoles)('should have equivalent permissions for %s role in enterprise', (role) => {
146
+ const comparison = testRoleScopeParity(role, true);
147
+ if (!comparison.isEqual) {
148
+ console.error(`\n=== ENTERPRISE PARITY MISMATCH FOR ${role.toUpperCase()} ROLE ===`);
149
+ comparison.mismatches.forEach((mismatch) => {
150
+ console.error(`❌ ${mismatch}`);
151
+ });
152
+ console.error('=== END MISMATCH REPORT ===\n');
153
+ }
154
+ expect(comparison.isEqual).toBe(true);
155
+ });
156
+ });
157
+ // This is helpful for debugging, but it's not a test
158
+ describe.skip('Rule Count Analysis', () => {
159
+ it('should report rule counts for documentation', () => {
160
+ console.log('\n=== ROLE PERMISSION RULE COUNTS ===');
161
+ systemProjectRoles.forEach((role) => {
162
+ const member = {
163
+ [projectMemberRole_1.ProjectMemberRole.VIEWER]: projectMemberAbility_mock_1.PROJECT_VIEWER,
164
+ [projectMemberRole_1.ProjectMemberRole.INTERACTIVE_VIEWER]: projectMemberAbility_mock_1.PROJECT_INTERACTIVE_VIEWER,
165
+ [projectMemberRole_1.ProjectMemberRole.EDITOR]: projectMemberAbility_mock_1.PROJECT_EDITOR,
166
+ [projectMemberRole_1.ProjectMemberRole.DEVELOPER]: projectMemberAbility_mock_1.PROJECT_DEVELOPER,
167
+ [projectMemberRole_1.ProjectMemberRole.ADMIN]: projectMemberAbility_mock_1.PROJECT_ADMIN,
168
+ }[role];
169
+ // Count role-based rules
170
+ const roleBuilder = new ability_1.AbilityBuilder(ability_1.Ability);
171
+ projectMemberAbility_1.projectMemberAbilities[role](member, roleBuilder);
172
+ const roleRuleCount = roleBuilder.build().rules.length;
173
+ // Count scope-based rules
174
+ const scopeBuilder = new ability_1.AbilityBuilder(ability_1.Ability);
175
+ const scopes = (0, roleToScopeMapping_1.getAllScopesForRole)(role);
176
+ (0, scopeAbilityBuilder_1.buildAbilityFromScopes)({
177
+ userUuid: member.userUuid,
178
+ projectUuid: member.projectUuid,
179
+ scopes,
180
+ isEnterprise: false,
181
+ }, scopeBuilder);
182
+ const scopeRuleCount = scopeBuilder.build().rules.length;
183
+ console.log(`${role.padEnd(20)}: Role-based: ${roleRuleCount
184
+ .toString()
185
+ .padStart(3)}, Scope-based: ${scopeRuleCount
186
+ .toString()
187
+ .padStart(3)}, Scopes: ${scopes.length
188
+ .toString()
189
+ .padStart(3)}`);
190
+ });
191
+ console.log('=== END RULE COUNT ANALYSIS ===\n');
192
+ });
193
+ });
194
+ });
195
+ //# sourceMappingURL=roleToScopeParity.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roleToScopeParity.test.js","sourceRoot":"","sources":["../../../src/authorization/roleToScopeParity.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scopeAbilityBuilder.d.ts","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAqD7C,KAAK,iBAAiB,GAChB;IACI,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC;CACvB,GACD;IACI,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,KAAK,CAAC;CAC5B,CAAC;AAER,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE;QAChB,GAAG,EAAE;YACD,OAAO,EAAE,OAAO,CAAC;YACjB,eAAe,EAAE,MAAM,EAAE,CAAC;SAC7B,CAAC;KACL,CAAC;CACL,GAAG,iBAAiB,CAAC;AAEtB;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YACtB,cAAc,WACd,cAAc,CAAC,aAAa,CAAC,KACvC,IAaF,CAAC"}
1
+ {"version":3,"file":"scopeAbilityBuilder.d.ts","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAuD7C,KAAK,iBAAiB,GAChB;IACI,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC;CACvB,GACD;IACI,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,KAAK,CAAC;CAC5B,CAAC;AAER,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE;QAChB,GAAG,EAAE;YACD,OAAO,EAAE,OAAO,CAAC;YACjB,eAAe,EAAE,MAAM,EAAE,CAAC;SAC7B,CAAC;KACL,CAAC;CACL,GAAG,iBAAiB,CAAC;AAEtB;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YACtB,cAAc,WACd,cAAc,CAAC,aAAa,CAAC,KACvC,IAaF,CAAC"}
@@ -26,13 +26,16 @@ const applyScopeAbilities = (context, builder) => {
26
26
  if (!scope)
27
27
  return;
28
28
  const [action, subject] = (0, parseScopes_1.parseScope)(scopeName);
29
- const conditionsList = scope.getConditions
30
- ? scope.getConditions(context)
31
- : [];
32
- // Apply each condition set
33
- conditionsList.forEach((conditions) => {
34
- builder.can(action, subject, conditions);
35
- });
29
+ const conditionsList = scope.getConditions(context);
30
+ // Apply each condition set if there are any
31
+ if (conditionsList.length === 0) {
32
+ builder.can(action, subject);
33
+ }
34
+ else {
35
+ conditionsList.forEach((conditions) => {
36
+ builder.can(action, subject, conditions);
37
+ });
38
+ }
36
39
  });
37
40
  handlePatConfigApplication(context, builder);
38
41
  };
@@ -1 +1 @@
1
- {"version":3,"file":"scopeAbilityBuilder.js","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":";;;AAEA,+CAAwD;AACxD,qCAA0C;AAG1C,MAAM,0BAA0B,GAAG,CAC/B,OAAqB,EACrB,OAAsC,EACxC,EAAE;IACA,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,iBAAiB,IAAI,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,qBAAqB,CACzE,CAAC;IAEF,IACI,CAAC,UAAU;QACX,GAAG,EAAE,OAAO;QACZ,OAAO,CAAC,gBAAgB;QACxB,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAC1D,CAAC;QACC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACjD,CAAC;AACL,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,CACxB,OAAqB,EACrB,OAAsC,EAClC,EAAE;IACN,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAExE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAA,wBAAU,EAAC,SAAS,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa;YACtC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;YAC9B,CAAC,CAAC,EAAE,CAAC;QAET,2BAA2B;QAC3B,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC,CAAC;AAyBF;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,CAClC,OAAuB,EACvB,OAAsC,EAClC,EAAE;IACN,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;IACnD,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC;QACvB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY;KACf,CAAC,CAAC;IACH,MAAM,aAAa,GAAG;QAClB,GAAG,OAAO;QACV,MAAM;QACN,YAAY;KACf,CAAC;IAEF,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC,CAAC;AAhBW,QAAA,sBAAsB,0BAgBjC"}
1
+ {"version":3,"file":"scopeAbilityBuilder.js","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":";;;AAEA,+CAAwD;AACxD,qCAA0C;AAG1C,MAAM,0BAA0B,GAAG,CAC/B,OAAqB,EACrB,OAAsC,EACxC,EAAE;IACA,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,iBAAiB,IAAI,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,qBAAqB,CACzE,CAAC;IAEF,IACI,CAAC,UAAU;QACX,GAAG,EAAE,OAAO;QACZ,OAAO,CAAC,gBAAgB;QACxB,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAC1D,CAAC;QACC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACjD,CAAC;AACL,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,CACxB,OAAqB,EACrB,OAAsC,EAClC,EAAE;IACN,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAExE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAA,wBAAU,EAAC,SAAS,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEpD,4CAA4C;QAC5C,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBAClC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC,CAAC;AAyBF;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,CAClC,OAAuB,EACvB,OAAsC,EAClC,EAAE;IACN,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;IACnD,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC;QACvB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY;KACf,CAAC,CAAC;IACH,MAAM,aAAa,GAAG;QAClB,GAAG,OAAO;QACV,MAAM;QACN,YAAY;KACf,CAAC;IAEF,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC,CAAC;AAhBW,QAAA,sBAAsB,0BAgBjC"}