mycontext-cli 2.0.27 → 2.0.28
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/README.md +35 -369
- package/dist/agents/implementations/CodeGenSubAgent.d.ts.map +1 -1
- package/dist/agents/implementations/CodeGenSubAgent.js +67 -14
- package/dist/agents/implementations/CodeGenSubAgent.js.map +1 -1
- package/dist/agents/implementations/DesignPipelineAgent.d.ts +80 -0
- package/dist/agents/implementations/DesignPipelineAgent.d.ts.map +1 -0
- package/dist/agents/implementations/DesignPipelineAgent.js +1406 -0
- package/dist/agents/implementations/DesignPipelineAgent.js.map +1 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.d.ts +67 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.d.ts.map +1 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.js +564 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.js.map +1 -0
- package/dist/agents/implementations/PromptConstructorAgent.d.ts +10 -0
- package/dist/agents/implementations/PromptConstructorAgent.d.ts.map +1 -1
- package/dist/agents/implementations/PromptConstructorAgent.js +172 -12
- package/dist/agents/implementations/PromptConstructorAgent.js.map +1 -1
- package/dist/agents/implementations/RoleBasedGenerator.d.ts +52 -0
- package/dist/agents/implementations/RoleBasedGenerator.d.ts.map +1 -0
- package/dist/agents/implementations/RoleBasedGenerator.js +370 -0
- package/dist/agents/implementations/RoleBasedGenerator.js.map +1 -0
- package/dist/cli.js +65 -0
- package/dist/cli.js.map +1 -1
- package/dist/clients/ClaudeSDKClient.d.ts +48 -0
- package/dist/clients/ClaudeSDKClient.d.ts.map +1 -0
- package/dist/clients/ClaudeSDKClient.js +158 -0
- package/dist/clients/ClaudeSDKClient.js.map +1 -0
- package/dist/clients/MyContextAIClient.d.ts +73 -0
- package/dist/clients/MyContextAIClient.d.ts.map +1 -0
- package/dist/clients/MyContextAIClient.js +280 -0
- package/dist/clients/MyContextAIClient.js.map +1 -0
- package/dist/clients/ProviderChain.d.ts +87 -0
- package/dist/clients/ProviderChain.d.ts.map +1 -0
- package/dist/clients/ProviderChain.js +246 -0
- package/dist/clients/ProviderChain.js.map +1 -0
- package/dist/clients/XAIClient.d.ts +48 -0
- package/dist/clients/XAIClient.d.ts.map +1 -0
- package/dist/clients/XAIClient.js +152 -0
- package/dist/clients/XAIClient.js.map +1 -0
- package/dist/commands/assemble-features.d.ts +40 -0
- package/dist/commands/assemble-features.d.ts.map +1 -0
- package/dist/commands/assemble-features.js +383 -0
- package/dist/commands/assemble-features.js.map +1 -0
- package/dist/commands/clone-starter.d.ts +32 -0
- package/dist/commands/clone-starter.d.ts.map +1 -0
- package/dist/commands/clone-starter.js +218 -0
- package/dist/commands/clone-starter.js.map +1 -0
- package/dist/commands/design-analyze.d.ts +46 -0
- package/dist/commands/design-analyze.d.ts.map +1 -0
- package/dist/commands/design-analyze.js +232 -0
- package/dist/commands/design-analyze.js.map +1 -0
- package/dist/commands/generate-components.d.ts +1 -0
- package/dist/commands/generate-components.d.ts.map +1 -1
- package/dist/commands/generate-components.js +42 -9
- package/dist/commands/generate-components.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +34 -1
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/setup-complete.d.ts.map +1 -1
- package/dist/commands/setup-complete.js +38 -2
- package/dist/commands/setup-complete.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +86 -7
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config/intent-dictionary.json +3700 -0
- package/dist/package.json +3 -1
- package/dist/services/IntentEnricher.d.ts +61 -0
- package/dist/services/IntentEnricher.d.ts.map +1 -0
- package/dist/services/IntentEnricher.js +318 -0
- package/dist/services/IntentEnricher.js.map +1 -0
- package/dist/services/IntentValidator.d.ts +114 -0
- package/dist/services/IntentValidator.d.ts.map +1 -0
- package/dist/services/IntentValidator.js +680 -0
- package/dist/services/IntentValidator.js.map +1 -0
- package/dist/types/design-pipeline.d.ts +300 -0
- package/dist/types/design-pipeline.d.ts.map +1 -0
- package/dist/types/design-pipeline.js +9 -0
- package/dist/types/design-pipeline.js.map +1 -0
- package/dist/types/feature-bundle.d.ts +239 -0
- package/dist/types/feature-bundle.d.ts.map +1 -0
- package/dist/types/feature-bundle.js +9 -0
- package/dist/types/feature-bundle.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/intent-dictionary.d.ts +525 -0
- package/dist/types/intent-dictionary.d.ts.map +1 -0
- package/dist/types/intent-dictionary.js +11 -0
- package/dist/types/intent-dictionary.js.map +1 -0
- package/dist/types/role-permissions.d.ts +167 -0
- package/dist/types/role-permissions.d.ts.map +1 -0
- package/dist/types/role-permissions.js +9 -0
- package/dist/types/role-permissions.js.map +1 -0
- package/dist/utils/contextEnricher.d.ts +41 -0
- package/dist/utils/contextEnricher.d.ts.map +1 -0
- package/dist/utils/contextEnricher.js +327 -0
- package/dist/utils/contextEnricher.js.map +1 -0
- package/dist/utils/designFallbacks.d.ts +48 -0
- package/dist/utils/designFallbacks.d.ts.map +1 -0
- package/dist/utils/designFallbacks.js +885 -0
- package/dist/utils/designFallbacks.js.map +1 -0
- package/dist/utils/designManifestManager.d.ts +89 -0
- package/dist/utils/designManifestManager.d.ts.map +1 -0
- package/dist/utils/designManifestManager.js +533 -0
- package/dist/utils/designManifestManager.js.map +1 -0
- package/dist/utils/designPipelineStateManager.d.ts +63 -0
- package/dist/utils/designPipelineStateManager.d.ts.map +1 -0
- package/dist/utils/designPipelineStateManager.js +174 -0
- package/dist/utils/designPipelineStateManager.js.map +1 -0
- package/dist/utils/envExampleGenerator.d.ts.map +1 -1
- package/dist/utils/envExampleGenerator.js +35 -171
- package/dist/utils/envExampleGenerator.js.map +1 -1
- package/dist/utils/featureBundleManager.d.ts +90 -0
- package/dist/utils/featureBundleManager.d.ts.map +1 -0
- package/dist/utils/featureBundleManager.js +340 -0
- package/dist/utils/featureBundleManager.js.map +1 -0
- package/dist/utils/githubCloner.d.ts +93 -0
- package/dist/utils/githubCloner.d.ts.map +1 -0
- package/dist/utils/githubCloner.js +305 -0
- package/dist/utils/githubCloner.js.map +1 -0
- package/dist/utils/rolePermissionMapper.d.ts +89 -0
- package/dist/utils/rolePermissionMapper.d.ts.map +1 -0
- package/dist/utils/rolePermissionMapper.js +337 -0
- package/dist/utils/rolePermissionMapper.js.map +1 -0
- package/dist/utils/unifiedDesignContextLoader.d.ts +76 -0
- package/dist/utils/unifiedDesignContextLoader.d.ts.map +1 -0
- package/dist/utils/unifiedDesignContextLoader.js +344 -0
- package/dist/utils/unifiedDesignContextLoader.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Cloner Utility
|
|
4
|
+
*
|
|
5
|
+
* Handles cloning GitHub repositories for admin starter templates
|
|
6
|
+
* and other project templates.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
42
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.GitHubCloner = void 0;
|
|
46
|
+
const child_process_1 = require("child_process");
|
|
47
|
+
const util_1 = require("util");
|
|
48
|
+
const fs = __importStar(require("fs/promises"));
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
51
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
52
|
+
class GitHubCloner {
|
|
53
|
+
/**
|
|
54
|
+
* Clone a GitHub repository
|
|
55
|
+
*/
|
|
56
|
+
static async clone(options) {
|
|
57
|
+
try {
|
|
58
|
+
const { url, outputPath, branch = "main", depth = 1, removeGit = true, verbose = false, } = options;
|
|
59
|
+
if (verbose) {
|
|
60
|
+
console.log(chalk_1.default.gray(` 📥 Cloning ${url} to ${outputPath}`));
|
|
61
|
+
}
|
|
62
|
+
// Ensure output directory exists
|
|
63
|
+
await fs.mkdir(path.dirname(outputPath), { recursive: true });
|
|
64
|
+
// Clone repository
|
|
65
|
+
const cloneCommand = `git clone --depth ${depth} --branch ${branch} ${url} ${outputPath}`;
|
|
66
|
+
await execAsync(cloneCommand);
|
|
67
|
+
// Get commit hash
|
|
68
|
+
const commitHash = await this.getCommitHash(outputPath);
|
|
69
|
+
// Remove .git directory if requested
|
|
70
|
+
if (removeGit) {
|
|
71
|
+
await fs.rm(path.join(outputPath, ".git"), {
|
|
72
|
+
recursive: true,
|
|
73
|
+
force: true,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Extract repository name from URL
|
|
77
|
+
const repository = this.extractRepositoryName(url);
|
|
78
|
+
const result = {
|
|
79
|
+
success: true,
|
|
80
|
+
outputPath,
|
|
81
|
+
metadata: {
|
|
82
|
+
repository,
|
|
83
|
+
branch,
|
|
84
|
+
commitHash,
|
|
85
|
+
clonedAt: new Date().toISOString(),
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
if (verbose) {
|
|
89
|
+
console.log(chalk_1.default.green(` ✓ Repository cloned successfully`));
|
|
90
|
+
console.log(chalk_1.default.gray(` Repository: ${repository}`));
|
|
91
|
+
console.log(chalk_1.default.gray(` Branch: ${branch}`));
|
|
92
|
+
console.log(chalk_1.default.gray(` Commit: ${commitHash.substring(0, 8)}`));
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return {
|
|
98
|
+
success: false,
|
|
99
|
+
outputPath: options.outputPath,
|
|
100
|
+
error: error instanceof Error ? error.message : String(error),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Clone admin starter repository
|
|
106
|
+
*/
|
|
107
|
+
static async cloneAdminStarter(outputPath, options = {}) {
|
|
108
|
+
const defaultOptions = {
|
|
109
|
+
url: "https://github.com/mycontext/admin-starter",
|
|
110
|
+
outputPath,
|
|
111
|
+
branch: "main",
|
|
112
|
+
depth: 1,
|
|
113
|
+
removeGit: true,
|
|
114
|
+
verbose: true,
|
|
115
|
+
};
|
|
116
|
+
return this.clone({ ...defaultOptions, ...options });
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Clone a specific template repository
|
|
120
|
+
*/
|
|
121
|
+
static async cloneTemplate(templateName, outputPath, options = {}) {
|
|
122
|
+
const templateUrl = `https://github.com/mycontext/${templateName}-template`;
|
|
123
|
+
const defaultOptions = {
|
|
124
|
+
url: templateUrl,
|
|
125
|
+
outputPath,
|
|
126
|
+
branch: "main",
|
|
127
|
+
depth: 1,
|
|
128
|
+
removeGit: true,
|
|
129
|
+
verbose: true,
|
|
130
|
+
};
|
|
131
|
+
return this.clone({ ...defaultOptions, ...options });
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Check if a repository exists and is accessible
|
|
135
|
+
*/
|
|
136
|
+
static async checkRepository(url) {
|
|
137
|
+
try {
|
|
138
|
+
const command = `git ls-remote --heads ${url}`;
|
|
139
|
+
await execAsync(command);
|
|
140
|
+
return { exists: true };
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
return {
|
|
144
|
+
exists: false,
|
|
145
|
+
error: error instanceof Error ? error.message : String(error),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get available branches for a repository
|
|
151
|
+
*/
|
|
152
|
+
static async getBranches(url) {
|
|
153
|
+
try {
|
|
154
|
+
const command = `git ls-remote --heads ${url}`;
|
|
155
|
+
const { stdout } = await execAsync(command);
|
|
156
|
+
const branches = stdout
|
|
157
|
+
.split("\n")
|
|
158
|
+
.filter((line) => line.trim())
|
|
159
|
+
.map((line) => line.split("refs/heads/")[1])
|
|
160
|
+
.filter((branch) => Boolean(branch));
|
|
161
|
+
return { branches };
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
return {
|
|
165
|
+
branches: [],
|
|
166
|
+
error: error instanceof Error ? error.message : String(error),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get the latest commit hash for a repository
|
|
172
|
+
*/
|
|
173
|
+
static async getLatestCommit(url, branch = "main") {
|
|
174
|
+
try {
|
|
175
|
+
const command = `git ls-remote ${url} refs/heads/${branch}`;
|
|
176
|
+
const { stdout } = await execAsync(command);
|
|
177
|
+
const commitHash = stdout.split("\t")[0] || "";
|
|
178
|
+
return { commitHash };
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
return {
|
|
182
|
+
commitHash: "",
|
|
183
|
+
error: error instanceof Error ? error.message : String(error),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get commit hash for a cloned repository
|
|
189
|
+
*/
|
|
190
|
+
static async getCommitHash(repoPath) {
|
|
191
|
+
try {
|
|
192
|
+
const command = "git rev-parse HEAD";
|
|
193
|
+
const { stdout } = await execAsync(command, { cwd: repoPath });
|
|
194
|
+
return stdout.trim();
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return "unknown";
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Extract repository name from URL
|
|
202
|
+
*/
|
|
203
|
+
static extractRepositoryName(url) {
|
|
204
|
+
const match = url.match(/github\.com\/([^\/]+)\/([^\/]+)(?:\.git)?$/);
|
|
205
|
+
if (match) {
|
|
206
|
+
return `${match[1]}/${match[2]}`;
|
|
207
|
+
}
|
|
208
|
+
return url;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Clone with retry logic
|
|
212
|
+
*/
|
|
213
|
+
static async cloneWithRetry(options, maxRetries = 3) {
|
|
214
|
+
let lastError;
|
|
215
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
216
|
+
if (options.verbose && attempt > 1) {
|
|
217
|
+
console.log(chalk_1.default.yellow(` 🔄 Retry attempt ${attempt}/${maxRetries}`));
|
|
218
|
+
}
|
|
219
|
+
const result = await this.clone(options);
|
|
220
|
+
if (result.success) {
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
lastError = result.error;
|
|
224
|
+
if (attempt < maxRetries) {
|
|
225
|
+
// Wait before retry
|
|
226
|
+
await new Promise((resolve) => setTimeout(resolve, 1000 * attempt));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
success: false,
|
|
231
|
+
outputPath: options.outputPath,
|
|
232
|
+
error: `Failed after ${maxRetries} attempts. Last error: ${lastError}`,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Clone and setup project
|
|
237
|
+
*/
|
|
238
|
+
static async cloneAndSetup(options) {
|
|
239
|
+
const { installDependencies = true, runSetup = true, setupCommands = [], ...cloneOptions } = options;
|
|
240
|
+
// Clone repository
|
|
241
|
+
const cloneResult = await this.clone(cloneOptions);
|
|
242
|
+
if (!cloneResult.success) {
|
|
243
|
+
return cloneResult;
|
|
244
|
+
}
|
|
245
|
+
try {
|
|
246
|
+
// Install dependencies
|
|
247
|
+
if (installDependencies) {
|
|
248
|
+
await this.installDependencies(cloneResult.outputPath);
|
|
249
|
+
}
|
|
250
|
+
// Run setup commands
|
|
251
|
+
if (runSetup && setupCommands.length > 0) {
|
|
252
|
+
await this.runSetupCommands(cloneResult.outputPath, setupCommands);
|
|
253
|
+
}
|
|
254
|
+
return cloneResult;
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
return {
|
|
258
|
+
success: false,
|
|
259
|
+
outputPath: cloneResult.outputPath,
|
|
260
|
+
error: `Setup failed: ${error}`,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Install dependencies in cloned repository
|
|
266
|
+
*/
|
|
267
|
+
static async installDependencies(repoPath) {
|
|
268
|
+
try {
|
|
269
|
+
// Check if package.json exists
|
|
270
|
+
const packageJsonPath = path.join(repoPath, "package.json");
|
|
271
|
+
await fs.access(packageJsonPath);
|
|
272
|
+
// Install dependencies
|
|
273
|
+
await execAsync("npm install", { cwd: repoPath });
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
// No package.json or install failed, skip
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Run setup commands in cloned repository
|
|
281
|
+
*/
|
|
282
|
+
static async runSetupCommands(repoPath, commands) {
|
|
283
|
+
for (const command of commands) {
|
|
284
|
+
try {
|
|
285
|
+
await execAsync(command, { cwd: repoPath });
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
console.warn(chalk_1.default.yellow(` ⚠️ Setup command failed: ${command}`));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Clean up cloned repository
|
|
294
|
+
*/
|
|
295
|
+
static async cleanup(outputPath) {
|
|
296
|
+
try {
|
|
297
|
+
await fs.rm(outputPath, { recursive: true, force: true });
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
// Ignore cleanup errors
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
exports.GitHubCloner = GitHubCloner;
|
|
305
|
+
//# sourceMappingURL=githubCloner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubCloner.js","sourceRoot":"","sources":["../../src/utils/githubCloner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Role Permission Mapper
|
|
3
|
+
*
|
|
4
|
+
* Maps features, components, actions, and routes to role-based permissions
|
|
5
|
+
* for the Feature Assembly system.
|
|
6
|
+
*/
|
|
7
|
+
import { Role, Permission, RoleHierarchy } from "../types/role-permissions";
|
|
8
|
+
import { FeatureBundle } from "../types/feature-bundle";
|
|
9
|
+
export declare class RolePermissionMapper {
|
|
10
|
+
private roleHierarchy;
|
|
11
|
+
constructor(roleHierarchy: RoleHierarchy);
|
|
12
|
+
/**
|
|
13
|
+
* Map feature to role-based configuration
|
|
14
|
+
*/
|
|
15
|
+
mapFeatureToRoles(feature: FeatureBundle): Map<Role, FeatureBundle>;
|
|
16
|
+
/**
|
|
17
|
+
* Map component to permissions for a specific role
|
|
18
|
+
*/
|
|
19
|
+
mapComponentToPermissions(component: string, role: Role): Permission[];
|
|
20
|
+
/**
|
|
21
|
+
* Map action to permissions for a specific role
|
|
22
|
+
*/
|
|
23
|
+
mapActionToPermissions(action: string, role: Role): Permission[];
|
|
24
|
+
/**
|
|
25
|
+
* Map route to permissions for a specific role
|
|
26
|
+
*/
|
|
27
|
+
mapRouteToPermissions(route: string, role: Role): Permission[];
|
|
28
|
+
/**
|
|
29
|
+
* Generate role-based code for a feature
|
|
30
|
+
*/
|
|
31
|
+
generateRoleBasedCode(feature: FeatureBundle, role: Role, config: any): string;
|
|
32
|
+
/**
|
|
33
|
+
* Check if a role has permission for a specific action
|
|
34
|
+
*/
|
|
35
|
+
hasPermission(role: Role, resource: string, action: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Get all permissions for a role
|
|
38
|
+
*/
|
|
39
|
+
getRolePermissions(role: Role): Permission[];
|
|
40
|
+
/**
|
|
41
|
+
* Get inherited permissions for a role
|
|
42
|
+
*/
|
|
43
|
+
getInheritedPermissions(role: Role): Permission[];
|
|
44
|
+
/**
|
|
45
|
+
* Create a role-specific feature from a base feature
|
|
46
|
+
*/
|
|
47
|
+
private createRoleFeature;
|
|
48
|
+
/**
|
|
49
|
+
* Map component name to resource type
|
|
50
|
+
*/
|
|
51
|
+
private mapComponentToResource;
|
|
52
|
+
/**
|
|
53
|
+
* Map action name to resource type
|
|
54
|
+
*/
|
|
55
|
+
private mapActionToResource;
|
|
56
|
+
/**
|
|
57
|
+
* Map route path to resource type
|
|
58
|
+
*/
|
|
59
|
+
private mapRouteToResource;
|
|
60
|
+
/**
|
|
61
|
+
* Check if a role has permission for a component
|
|
62
|
+
*/
|
|
63
|
+
private hasComponentPermission;
|
|
64
|
+
/**
|
|
65
|
+
* Check if a role has permission for an action
|
|
66
|
+
*/
|
|
67
|
+
private hasActionPermission;
|
|
68
|
+
/**
|
|
69
|
+
* Check if a role has permission for a hook
|
|
70
|
+
*/
|
|
71
|
+
private hasHookPermission;
|
|
72
|
+
/**
|
|
73
|
+
* Check if a role has permission for a route
|
|
74
|
+
*/
|
|
75
|
+
private hasRoutePermission;
|
|
76
|
+
/**
|
|
77
|
+
* Apply role-specific restrictions to permissions
|
|
78
|
+
*/
|
|
79
|
+
private applyRoleRestrictions;
|
|
80
|
+
/**
|
|
81
|
+
* Generate permission code for a role
|
|
82
|
+
*/
|
|
83
|
+
private generatePermissionCode;
|
|
84
|
+
/**
|
|
85
|
+
* Get role definition by name
|
|
86
|
+
*/
|
|
87
|
+
private getRoleDefinition;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=rolePermissionMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rolePermissionMapper.d.ts","sourceRoot":"","sources":["../../src/utils/rolePermissionMapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,IAAI,EAEJ,UAAU,EACV,aAAa,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAmB,MAAM,yBAAyB,CAAC;AAEzE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,EAAE,aAAa;IAIxC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC;IAWnE;;OAEG;IACH,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU,EAAE;IA6BtE;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU,EAAE;IA6BhE;;OAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU,EAAE;IA6B9D;;OAEG;IACH,qBAAqB,CACnB,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,GAAG,GACV,MAAM;IAsCT;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAUpE;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,EAAE;IAO5C;;OAEG;IACH,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,EAAE;IAcjD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+CzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAK9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAG1B"}
|