faf-cli 2.3.5 → 2.4.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 (67) hide show
  1. package/README.md +13 -2
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +128 -5
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/about.d.ts +10 -0
  6. package/dist/commands/about.d.ts.map +1 -0
  7. package/dist/commands/about.js +249 -0
  8. package/dist/commands/about.js.map +1 -0
  9. package/dist/commands/art.d.ts +10 -0
  10. package/dist/commands/art.d.ts.map +1 -0
  11. package/dist/commands/art.js +129 -0
  12. package/dist/commands/art.js.map +1 -0
  13. package/dist/commands/license-config.d.ts +10 -0
  14. package/dist/commands/license-config.d.ts.map +1 -0
  15. package/dist/commands/license-config.js +140 -0
  16. package/dist/commands/license-config.js.map +1 -0
  17. package/dist/commands/license.d.ts +7 -0
  18. package/dist/commands/license.d.ts.map +1 -0
  19. package/dist/commands/license.js +60 -0
  20. package/dist/commands/license.js.map +1 -0
  21. package/dist/commands/score-v3.d.ts.map +1 -1
  22. package/dist/commands/score-v3.js +14 -7
  23. package/dist/commands/score-v3.js.map +1 -1
  24. package/dist/commands/score.d.ts.map +1 -1
  25. package/dist/commands/score.js +30 -10
  26. package/dist/commands/score.js.map +1 -1
  27. package/dist/commands/submit-art.d.ts +25 -0
  28. package/dist/commands/submit-art.d.ts.map +1 -0
  29. package/dist/commands/submit-art.js +348 -0
  30. package/dist/commands/submit-art.js.map +1 -0
  31. package/dist/engine/engine-loader.d.ts +24 -0
  32. package/dist/engine/engine-loader.d.ts.map +1 -0
  33. package/dist/engine/engine-loader.js +156 -0
  34. package/dist/engine/engine-loader.js.map +1 -0
  35. package/dist/engine-bridge.d.ts +5 -5
  36. package/dist/engine-bridge.d.ts.map +1 -1
  37. package/dist/engine-bridge.js +20 -7
  38. package/dist/engine-bridge.js.map +1 -1
  39. package/dist/engine-mk2/mk2-core.d.ts +38 -0
  40. package/dist/engine-mk2/mk2-core.d.ts.map +1 -0
  41. package/dist/engine-mk2/mk2-core.js +217 -0
  42. package/dist/engine-mk2/mk2-core.js.map +1 -0
  43. package/dist/license/license-config.d.ts +59 -0
  44. package/dist/license/license-config.d.ts.map +1 -0
  45. package/dist/license/license-config.js +263 -0
  46. package/dist/license/license-config.js.map +1 -0
  47. package/dist/license/license-controller.d.ts +41 -0
  48. package/dist/license/license-controller.d.ts.map +1 -0
  49. package/dist/license/license-controller.js +243 -0
  50. package/dist/license/license-controller.js.map +1 -0
  51. package/dist/utils/art-gallery.d.ts +58 -0
  52. package/dist/utils/art-gallery.d.ts.map +1 -0
  53. package/dist/utils/art-gallery.js +275 -0
  54. package/dist/utils/art-gallery.js.map +1 -0
  55. package/dist/utils/championship-style.d.ts +1 -1
  56. package/dist/utils/championship-style.d.ts.map +1 -1
  57. package/dist/utils/championship-style.js +17 -13
  58. package/dist/utils/championship-style.js.map +1 -1
  59. package/dist/utils/score-header.d.ts +22 -0
  60. package/dist/utils/score-header.d.ts.map +1 -0
  61. package/dist/utils/score-header.js +85 -0
  62. package/dist/utils/score-header.js.map +1 -0
  63. package/dist/utils/score-indicators.d.ts +47 -0
  64. package/dist/utils/score-indicators.d.ts.map +1 -0
  65. package/dist/utils/score-indicators.js +197 -0
  66. package/dist/utils/score-indicators.js.map +1 -0
  67. package/package.json +8 -3
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ /**
3
+ * 🎨 Submit Art Command - Let users contribute their own FAF art!
4
+ * Building a community gallery of creativity
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.submitArtCommand = submitArtCommand;
44
+ exports.viewGalleryCommand = viewGalleryCommand;
45
+ exports.shareArtCommand = shareArtCommand;
46
+ exports.importArtCommand = importArtCommand;
47
+ exports.getUserArt = getUserArt;
48
+ const fs = __importStar(require("fs/promises"));
49
+ const path = __importStar(require("path"));
50
+ const os = __importStar(require("os"));
51
+ const chalk_1 = __importDefault(require("chalk"));
52
+ const championship_style_1 = require("../utils/championship-style");
53
+ const USER_GALLERY_DIR = path.join(os.homedir(), '.faf', 'user-gallery');
54
+ const SUBMISSION_FILE = path.join(USER_GALLERY_DIR, 'submissions.json');
55
+ /**
56
+ * Submit new art to the gallery
57
+ */
58
+ async function submitArtCommand() {
59
+ const inquirer = await Promise.resolve().then(() => __importStar(require('inquirer')));
60
+ console.log(championship_style_1.FAF_COLORS.fafCyan('╔══════════════════════════════════════════════════════════════╗'));
61
+ console.log(championship_style_1.FAF_COLORS.fafCyan('║') + ' 🎨 FAF ART SUBMISSION STUDIO 🎨 ' + championship_style_1.FAF_COLORS.fafCyan('║'));
62
+ console.log(championship_style_1.FAF_COLORS.fafCyan('╚══════════════════════════════════════════════════════════════╝'));
63
+ console.log();
64
+ // Get art details
65
+ const details = await inquirer.default.prompt([
66
+ {
67
+ type: 'input',
68
+ name: 'name',
69
+ message: '🎨 Name your art style:',
70
+ validate: (input) => input.length > 0 && input.length < 30
71
+ },
72
+ {
73
+ type: 'input',
74
+ name: 'author',
75
+ message: '✍️ Your name/handle:',
76
+ default: process.env.USER || 'anonymous'
77
+ },
78
+ {
79
+ type: 'input',
80
+ name: 'description',
81
+ message: '📝 Description (optional):',
82
+ },
83
+ {
84
+ type: 'list',
85
+ name: 'scoreRequirement',
86
+ message: '🏆 Minimum score to unlock this art:',
87
+ choices: [
88
+ { name: '0% - Available to everyone', value: 0 },
89
+ { name: '50% - Halfway there', value: 50 },
90
+ { name: '70% - Good progress', value: 70 },
91
+ { name: '85% - High achievers', value: 85 },
92
+ { name: '99% - Champions only!', value: 99 },
93
+ { name: '105% - BIG ORANGE exclusive!', value: 105 }
94
+ ]
95
+ },
96
+ {
97
+ type: 'list',
98
+ name: 'inputMethod',
99
+ message: '📥 How will you provide the art?',
100
+ choices: [
101
+ { name: 'Type/paste it now', value: 'inline' },
102
+ { name: 'Load from file', value: 'file' },
103
+ { name: 'Use editor', value: 'editor' }
104
+ ]
105
+ }
106
+ ]);
107
+ let artContent = '';
108
+ // Get the art content
109
+ if (details.inputMethod === 'inline') {
110
+ console.log(chalk_1.default.yellow('\nPaste your ASCII art below (press Enter twice when done):\n'));
111
+ const lines = [];
112
+ let emptyLineCount = 0;
113
+ // Read until we get two empty lines
114
+ const readline = require('readline').createInterface({
115
+ input: process.stdin,
116
+ output: process.stdout
117
+ });
118
+ await new Promise((resolve) => {
119
+ readline.on('line', (line) => {
120
+ if (line === '') {
121
+ emptyLineCount++;
122
+ if (emptyLineCount >= 2) {
123
+ readline.close();
124
+ resolve();
125
+ return;
126
+ }
127
+ }
128
+ else {
129
+ emptyLineCount = 0;
130
+ }
131
+ lines.push(line);
132
+ });
133
+ });
134
+ artContent = lines.join('\n').trim();
135
+ }
136
+ else if (details.inputMethod === 'file') {
137
+ const fileAnswer = await inquirer.default.prompt([
138
+ {
139
+ type: 'input',
140
+ name: 'filepath',
141
+ message: '📂 Path to art file:',
142
+ validate: async (input) => {
143
+ try {
144
+ await fs.access(input);
145
+ return true;
146
+ }
147
+ catch {
148
+ return 'File not found';
149
+ }
150
+ }
151
+ }
152
+ ]);
153
+ artContent = await fs.readFile(fileAnswer.filepath, 'utf-8');
154
+ }
155
+ else if (details.inputMethod === 'editor') {
156
+ const editorAnswer = await inquirer.default.prompt([
157
+ {
158
+ type: 'editor',
159
+ name: 'art',
160
+ message: '✏️ Create your art in the editor:'
161
+ }
162
+ ]);
163
+ artContent = editorAnswer.art;
164
+ }
165
+ // Validate art
166
+ if (!artContent || artContent.length < 10) {
167
+ console.log(chalk_1.default.red('❌ Art seems too short. Please try again.'));
168
+ return;
169
+ }
170
+ // Add placeholder for version
171
+ if (!artContent.includes('{version}') && !artContent.includes('v2.')) {
172
+ console.log(chalk_1.default.yellow('💡 TIP: Use {version} as placeholder for version number'));
173
+ }
174
+ // Preview the art
175
+ console.log(chalk_1.default.cyan('\n═══ PREVIEW ═══\n'));
176
+ console.log(artContent.replace(/{version}/g, '2.4.0'));
177
+ console.log(chalk_1.default.cyan('\n═══════════════\n'));
178
+ const confirm = await inquirer.default.prompt([
179
+ {
180
+ type: 'confirm',
181
+ name: 'submit',
182
+ message: '💾 Save this art to your gallery?',
183
+ default: true
184
+ }
185
+ ]);
186
+ if (!confirm.submit) {
187
+ console.log(chalk_1.default.yellow('Cancelled'));
188
+ return;
189
+ }
190
+ // Save the art
191
+ await saveUserArt({
192
+ id: generateId(),
193
+ name: details.name,
194
+ author: details.author,
195
+ description: details.description,
196
+ art: artContent,
197
+ score: details.scoreRequirement,
198
+ timestamp: new Date().toISOString(),
199
+ version: require('../../package.json').version
200
+ });
201
+ console.log(championship_style_1.FAF_COLORS.fafGreen('\n✅ Art submitted successfully!'));
202
+ console.log(chalk_1.default.gray(`\nTo use your art: faf --art-style user:${details.name}`));
203
+ console.log(chalk_1.default.gray(`To share: faf art share ${details.name}`));
204
+ console.log(chalk_1.default.gray(`To view gallery: faf art gallery\n`));
205
+ }
206
+ /**
207
+ * View user gallery
208
+ */
209
+ async function viewGalleryCommand(filter) {
210
+ const arts = await loadUserArts();
211
+ if (arts.length === 0) {
212
+ console.log(chalk_1.default.yellow('No user art submissions yet!'));
213
+ console.log(chalk_1.default.gray('Submit your own with: faf submit-art'));
214
+ return;
215
+ }
216
+ console.log(championship_style_1.FAF_COLORS.fafCyan('╔══════════════════════════════════════════════════════════════╗'));
217
+ console.log(championship_style_1.FAF_COLORS.fafCyan('║') + ' 🎨 USER ART GALLERY 🎨 ' + championship_style_1.FAF_COLORS.fafCyan('║'));
218
+ console.log(championship_style_1.FAF_COLORS.fafCyan('╚══════════════════════════════════════════════════════════════╝'));
219
+ console.log();
220
+ const filtered = filter
221
+ ? arts.filter(a => a.name.toLowerCase().includes(filter.toLowerCase()) ||
222
+ a.author.toLowerCase().includes(filter.toLowerCase()))
223
+ : arts;
224
+ for (const art of filtered) {
225
+ console.log(chalk_1.default.yellow(`\n═══ ${art.name.toUpperCase()} ═══`));
226
+ console.log(chalk_1.default.gray(`By: ${art.author} | ${art.timestamp.split('T')[0]}`));
227
+ if (art.description) {
228
+ console.log(chalk_1.default.gray(art.description));
229
+ }
230
+ if (art.score && art.score > 0) {
231
+ console.log(chalk_1.default.gray(`Requires: ${art.score}% score`));
232
+ }
233
+ console.log();
234
+ console.log(art.art.replace(/{version}/g, '2.4.0'));
235
+ console.log();
236
+ }
237
+ console.log(chalk_1.default.gray(`\n📊 Total submissions: ${filtered.length}`));
238
+ }
239
+ /**
240
+ * Share art (generate shareable format)
241
+ */
242
+ async function shareArtCommand(name) {
243
+ const arts = await loadUserArts();
244
+ const art = arts.find(a => a.name.toLowerCase() === name.toLowerCase());
245
+ if (!art) {
246
+ console.log(chalk_1.default.red(`Art "${name}" not found`));
247
+ console.log(chalk_1.default.gray('Use "faf art gallery" to see available art'));
248
+ return;
249
+ }
250
+ const shareData = {
251
+ faf_art: {
252
+ version: '1.0',
253
+ art: art
254
+ }
255
+ };
256
+ const encoded = Buffer.from(JSON.stringify(shareData)).toString('base64');
257
+ console.log(chalk_1.default.cyan('\n═══ SHAREABLE ART CODE ═══\n'));
258
+ console.log(chalk_1.default.yellow(encoded));
259
+ console.log(chalk_1.default.cyan('\n═══════════════════════════\n'));
260
+ console.log(chalk_1.default.gray('Share this code with others!'));
261
+ console.log(chalk_1.default.gray('They can import with: faf art import <code>'));
262
+ }
263
+ /**
264
+ * Import shared art
265
+ */
266
+ async function importArtCommand(code) {
267
+ try {
268
+ const decoded = Buffer.from(code, 'base64').toString('utf-8');
269
+ const data = JSON.parse(decoded);
270
+ if (!data.faf_art || !data.faf_art.art) {
271
+ throw new Error('Invalid art code');
272
+ }
273
+ const art = data.faf_art.art;
274
+ console.log(chalk_1.default.cyan('\n═══ PREVIEW IMPORTED ART ═══\n'));
275
+ console.log(chalk_1.default.yellow(`Name: ${art.name}`));
276
+ console.log(chalk_1.default.gray(`Author: ${art.author}`));
277
+ console.log();
278
+ console.log(art.art.replace(/{version}/g, '2.4.0'));
279
+ console.log();
280
+ const inquirer = await Promise.resolve().then(() => __importStar(require('inquirer')));
281
+ const confirm = await inquirer.default.prompt([
282
+ {
283
+ type: 'confirm',
284
+ name: 'import',
285
+ message: '💾 Import this art to your gallery?',
286
+ default: true
287
+ }
288
+ ]);
289
+ if (confirm.import) {
290
+ await saveUserArt(art);
291
+ console.log(championship_style_1.FAF_COLORS.fafGreen('✅ Art imported successfully!'));
292
+ console.log(chalk_1.default.gray(`Use with: faf --art-style user:${art.name}`));
293
+ }
294
+ }
295
+ catch (error) {
296
+ console.log(chalk_1.default.red('❌ Invalid art code'));
297
+ }
298
+ }
299
+ /**
300
+ * Helper functions
301
+ */
302
+ async function ensureGalleryDir() {
303
+ try {
304
+ await fs.mkdir(USER_GALLERY_DIR, { recursive: true });
305
+ }
306
+ catch {
307
+ // Dir exists
308
+ }
309
+ }
310
+ async function loadUserArts() {
311
+ await ensureGalleryDir();
312
+ try {
313
+ const data = await fs.readFile(SUBMISSION_FILE, 'utf-8');
314
+ return JSON.parse(data);
315
+ }
316
+ catch {
317
+ return [];
318
+ }
319
+ }
320
+ async function saveUserArt(art) {
321
+ await ensureGalleryDir();
322
+ const arts = await loadUserArts();
323
+ // Check for duplicates
324
+ const existing = arts.findIndex(a => a.id === art.id);
325
+ if (existing >= 0) {
326
+ arts[existing] = art;
327
+ }
328
+ else {
329
+ arts.push(art);
330
+ }
331
+ await fs.writeFile(SUBMISSION_FILE, JSON.stringify(arts, null, 2));
332
+ }
333
+ function generateId() {
334
+ return Date.now().toString(36) + Math.random().toString(36).substr(2);
335
+ }
336
+ /**
337
+ * Get user art by name (for use in art gallery)
338
+ */
339
+ async function getUserArt(name) {
340
+ const arts = await loadUserArts();
341
+ const art = arts.find(a => a.name.toLowerCase() === name.toLowerCase());
342
+ if (art) {
343
+ const version = require('../../package.json').version;
344
+ return art.art.replace(/{version}/g, version);
345
+ }
346
+ return null;
347
+ }
348
+ //# sourceMappingURL=submit-art.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-art.js","sourceRoot":"","sources":["../../src/commands/submit-art.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Engine Loader - Loads MK-1 or MK-2 based on license
3
+ */
4
+ interface Engine {
5
+ name: string;
6
+ version: string;
7
+ analyzeProject(path: string): Promise<any>;
8
+ calculateScore(data: any): Promise<any>;
9
+ }
10
+ declare class EngineLoader {
11
+ private static instance;
12
+ private currentEngine;
13
+ private constructor();
14
+ static getInstance(): EngineLoader;
15
+ loadEngine(): Promise<Engine>;
16
+ private loadMK1;
17
+ private loadMK2;
18
+ private getFallbackEngine;
19
+ getEngineInfo(): any;
20
+ reloadWithNewLicense(): Promise<Engine>;
21
+ }
22
+ export declare const engineLoader: EngineLoader;
23
+ export {};
24
+ //# sourceMappingURL=engine-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-loader.d.ts","sourceRoot":"","sources":["../../src/engine/engine-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,UAAU,MAAM;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACzC;AAED,cAAM,YAAY;IAChB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,YAAY;IAO5B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;YA0BrB,OAAO;YAoDP,OAAO;IAqCrB,OAAO,CAAC,iBAAiB;IAwBzB,aAAa,IAAI,GAAG;IAcd,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;CAI9C;AAED,eAAO,MAAM,YAAY,cAA6B,CAAC"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ /**
3
+ * Engine Loader - Loads MK-1 or MK-2 based on license
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.engineLoader = void 0;
7
+ const license_controller_1 = require("../license/license-controller");
8
+ class EngineLoader {
9
+ static instance;
10
+ currentEngine = null;
11
+ constructor() { }
12
+ static getInstance() {
13
+ if (!this.instance) {
14
+ this.instance = new EngineLoader();
15
+ }
16
+ return this.instance;
17
+ }
18
+ async loadEngine() {
19
+ if (this.currentEngine) {
20
+ return this.currentEngine;
21
+ }
22
+ const license = license_controller_1.licenseController.getLicense();
23
+ const engineVersion = license.engine;
24
+ console.log(`Loading ${engineVersion} engine (${license.type} license)`);
25
+ try {
26
+ if (engineVersion === 'MK-2' && license_controller_1.licenseController.canUseEngine('MK-2')) {
27
+ // Load MK-2 (obfuscated in production)
28
+ this.currentEngine = await this.loadMK2();
29
+ }
30
+ else {
31
+ // Fall back to MK-1
32
+ this.currentEngine = await this.loadMK1();
33
+ }
34
+ }
35
+ catch (error) {
36
+ console.warn('Failed to load engine, using fallback');
37
+ this.currentEngine = this.getFallbackEngine();
38
+ }
39
+ return this.currentEngine;
40
+ }
41
+ async loadMK1() {
42
+ // MK-1 is the basic engine
43
+ return {
44
+ name: 'FAF Engine MK-1',
45
+ version: '1.0.0',
46
+ async analyzeProject(path) {
47
+ // Basic analysis
48
+ const fs = require('fs');
49
+ const glob = require('glob');
50
+ const files = glob.sync('**/*', {
51
+ cwd: path,
52
+ ignore: ['node_modules/**', '.git/**'],
53
+ nodir: true
54
+ });
55
+ return {
56
+ engine: 'MK-1',
57
+ filesFound: files.length,
58
+ formats: this.detectBasicFormats(files),
59
+ score: Math.min(70, 10 + files.length) // Capped at 70%
60
+ };
61
+ },
62
+ async calculateScore(data) {
63
+ const baseScore = 10;
64
+ const fileBonus = Math.min(30, data.filesFound || 0);
65
+ const formatBonus = Math.min(30, (data.formats?.length || 0) * 5);
66
+ const total = baseScore + fileBonus + formatBonus;
67
+ const capped = Math.min(70, total); // MK-1 caps at 70%
68
+ return {
69
+ engine: 'MK-1',
70
+ score: capped,
71
+ limit: 70,
72
+ capped: total > 70
73
+ };
74
+ },
75
+ detectBasicFormats(files) {
76
+ const formats = new Set();
77
+ files.forEach(file => {
78
+ const ext = file.split('.').pop();
79
+ if (ext)
80
+ formats.add(ext);
81
+ });
82
+ return Array.from(formats);
83
+ }
84
+ };
85
+ }
86
+ async loadMK2() {
87
+ try {
88
+ // In production, this loads the obfuscated MK-2
89
+ const MK2Module = require('../engine-mk2/mk2-core');
90
+ const FafEngineMK2 = MK2Module.default || MK2Module.FafEngineMK2;
91
+ const licenseKey = license_controller_1.licenseController.getLicense().key;
92
+ const mk2Instance = new FafEngineMK2(licenseKey);
93
+ return {
94
+ name: 'FAF Engine MK-2',
95
+ version: '2.0.0',
96
+ async analyzeProject(path) {
97
+ return await mk2Instance.analyzeProject(path);
98
+ },
99
+ async calculateScore(data) {
100
+ const result = await mk2Instance.calculateScore(data);
101
+ const scoreLimit = license_controller_1.licenseController.getScoreLimit();
102
+ // Apply license cap
103
+ if (result.finalScore > scoreLimit) {
104
+ result.finalScore = scoreLimit;
105
+ result.capped = true;
106
+ result.cappedBy = 'license';
107
+ }
108
+ return result;
109
+ }
110
+ };
111
+ }
112
+ catch (error) {
113
+ console.warn('MK-2 unavailable, falling back to MK-1');
114
+ return this.loadMK1();
115
+ }
116
+ }
117
+ getFallbackEngine() {
118
+ // Minimal engine when nothing else works
119
+ return {
120
+ name: 'FAF Engine Fallback',
121
+ version: '0.0.1',
122
+ async analyzeProject() {
123
+ return {
124
+ engine: 'fallback',
125
+ error: 'Engine unavailable',
126
+ score: 0
127
+ };
128
+ },
129
+ async calculateScore() {
130
+ return {
131
+ engine: 'fallback',
132
+ score: 0,
133
+ error: 'Engine unavailable'
134
+ };
135
+ }
136
+ };
137
+ }
138
+ getEngineInfo() {
139
+ if (!this.currentEngine) {
140
+ return { status: 'not loaded' };
141
+ }
142
+ return {
143
+ name: this.currentEngine.name,
144
+ version: this.currentEngine.version,
145
+ license: license_controller_1.licenseController.getLicense().type,
146
+ scoreLimit: license_controller_1.licenseController.getScoreLimit(),
147
+ features: license_controller_1.licenseController.getLicense().features
148
+ };
149
+ }
150
+ async reloadWithNewLicense() {
151
+ this.currentEngine = null;
152
+ return this.loadEngine();
153
+ }
154
+ }
155
+ exports.engineLoader = EngineLoader.getInstance();
156
+ //# sourceMappingURL=engine-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-loader.js","sourceRoot":"","sources":["../../src/engine/engine-loader.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,sEAAkE;AASlE,MAAM,YAAY;IACR,MAAM,CAAC,QAAQ,CAAe;IAC9B,aAAa,GAAkB,IAAI,CAAC;IAE5C,gBAAuB,CAAC;IAExB,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QAED,MAAM,OAAO,GAAG,sCAAiB,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QAErC,OAAO,CAAC,GAAG,CAAC,WAAW,aAAa,YAAY,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC;QAEzE,IAAI,CAAC;YACH,IAAI,aAAa,KAAK,MAAM,IAAI,sCAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvE,uCAAuC;gBACvC,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,oBAAoB;gBACpB,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACtD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,2BAA2B;QAC3B,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,OAAO;YAEhB,KAAK,CAAC,cAAc,CAAC,IAAY;gBAC/B,iBAAiB;gBACjB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;gBAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBAC9B,GAAG,EAAE,IAAI;oBACT,MAAM,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC;oBACtC,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAC;gBAEH,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,UAAU,EAAE,KAAK,CAAC,MAAM;oBACxB,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;oBACvC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,gBAAgB;iBACxD,CAAC;YACJ,CAAC;YAED,KAAK,CAAC,cAAc,CAAC,IAAS;gBAC5B,MAAM,SAAS,GAAG,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;gBACrD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAElE,MAAM,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;gBAClD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB;gBAEvD,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,KAAK,GAAG,EAAE;iBACnB,CAAC;YACJ,CAAC;YAED,kBAAkB,CAAC,KAAe;gBAChC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;gBAClC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBAClC,IAAI,GAAG;wBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC;YACH,gDAAgD;YAChD,MAAM,SAAS,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,YAAY,CAAC;YAEjE,MAAM,UAAU,GAAG,sCAAiB,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;YACtD,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;YAEjD,OAAO;gBACL,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,OAAO;gBAEhB,KAAK,CAAC,cAAc,CAAC,IAAY;oBAC/B,OAAO,MAAM,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAChD,CAAC;gBAED,KAAK,CAAC,cAAc,CAAC,IAAS;oBAC5B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;oBACtD,MAAM,UAAU,GAAG,sCAAiB,CAAC,aAAa,EAAE,CAAC;oBAErD,oBAAoB;oBACpB,IAAI,MAAM,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC;wBACnC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;wBAC/B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;wBACrB,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;oBAC9B,CAAC;oBAED,OAAO,MAAM,CAAC;gBAChB,CAAC;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,yCAAyC;QACzC,OAAO;YACL,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,OAAO;YAEhB,KAAK,CAAC,cAAc;gBAClB,OAAO;oBACL,MAAM,EAAE,UAAU;oBAClB,KAAK,EAAE,oBAAoB;oBAC3B,KAAK,EAAE,CAAC;iBACT,CAAC;YACJ,CAAC;YAED,KAAK,CAAC,cAAc;gBAClB,OAAO;oBACL,MAAM,EAAE,UAAU;oBAClB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,oBAAoB;iBAC5B,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;QAClC,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;YAC7B,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO;YACnC,OAAO,EAAE,sCAAiB,CAAC,UAAU,EAAE,CAAC,IAAI;YAC5C,UAAU,EAAE,sCAAiB,CAAC,aAAa,EAAE;YAC7C,QAAQ,EAAE,sCAAiB,CAAC,UAAU,EAAE,CAAC,QAAQ;SAClD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;CACF;AAEY,QAAA,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC"}
@@ -2,10 +2,10 @@
2
2
  * 🚀 faf-engine Integration Bridge
3
3
  * Connects the CLI to the independent faf-engine Mk-1
4
4
  */
5
- import { FafEngine } from '@faf/engine';
6
- import type { FafData, FafScore, ContextOnDemandResult } from '@faf/engine';
7
- export { FafEngine } from '@faf/engine';
8
- export type { FafData, FafScore, ContextOnDemandResult } from '@faf/engine';
5
+ import type { FafData, FafScore, ContextOnDemandResult } from './types/engine-types';
6
+ declare function loadMK2Engine(): any;
7
+ export declare const FafEngine: typeof loadMK2Engine;
8
+ export type { FafData, FafScore, ContextOnDemandResult };
9
9
  /**
10
10
  * Create a CLI-configured engine instance
11
11
  */
@@ -21,7 +21,7 @@ export declare function generateWithEngine(projectDir?: string): Promise<Context
21
21
  /**
22
22
  * Bridge function for existing CLI validate command
23
23
  */
24
- export declare function validateWithEngine(fafFilePath: string): Promise<import("@faf/engine").FafValidation>;
24
+ export declare function validateWithEngine(fafFilePath: string): Promise<any>;
25
25
  /**
26
26
  * Compatibility layer for existing CLI functions
27
27
  */
@@ -1 +1 @@
1
- {"version":3,"file":"engine-bridge.d.ts","sourceRoot":"","sources":["../src/engine-bridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAG5E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAM9D;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAI5E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAG5F;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,gDAI3D;AAED;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;qBAUA,OAAO,WAAW,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAgBnE,CAAC"}
1
+ {"version":3,"file":"engine-bridge.d.ts","sourceRoot":"","sources":["../src/engine-bridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAKrF,iBAAS,aAAa,QAYrB;AAGD,eAAO,MAAM,SAAS,sBAAgB,CAAC;AACvC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;AAEzD;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAM9D;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAI5E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAG5F;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,gBAI3D;AAED;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;qBAUA,OAAO,WAAW,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAgBnE,CAAC"}
@@ -9,19 +9,32 @@ exports.createCLIEngine = createCLIEngine;
9
9
  exports.scoreWithEngine = scoreWithEngine;
10
10
  exports.generateWithEngine = generateWithEngine;
11
11
  exports.validateWithEngine = validateWithEngine;
12
- const engine_1 = require("@faf/engine");
13
- const engine_2 = require("@faf/engine");
14
- // Export the engine for backwards compatibility
15
- var engine_3 = require("@faf/engine");
16
- Object.defineProperty(exports, "FafEngine", { enumerable: true, get: function () { return engine_3.FafEngine; } });
12
+ let engineInstance = null;
13
+ // Load the MK-2 engine (will be bundled and obfuscated)
14
+ function loadMK2Engine() {
15
+ if (!engineInstance) {
16
+ try {
17
+ // In production, this loads the obfuscated engine
18
+ const FafEngineMK2 = require('./engine-mk2/mk2-core').default;
19
+ engineInstance = new FafEngineMK2();
20
+ }
21
+ catch (error) {
22
+ console.warn('MK-2 engine not available, using fallback');
23
+ engineInstance = null;
24
+ }
25
+ }
26
+ return engineInstance;
27
+ }
28
+ // Export compatibility layer
29
+ exports.FafEngine = loadMK2Engine;
17
30
  /**
18
31
  * Create a CLI-configured engine instance
19
32
  */
20
33
  function createCLIEngine(projectDir) {
21
- return new engine_1.FafEngine({
34
+ return new exports.FafEngine({
22
35
  platform: 'cli',
23
36
  projectDir: projectDir || process.cwd(),
24
- adapter: new engine_2.CLIAdapter({ projectDir: projectDir || process.cwd() })
37
+ adapter: new CLIAdapter({ projectDir: projectDir || process.cwd() })
25
38
  });
26
39
  }
27
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"engine-bridge.js","sourceRoot":"","sources":["../src/engine-bridge.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAaH,0CAMC;AAKD,0CAIC;AAKD,gDAGC;AAKD,gDAIC;AA3CD,wCAAwC;AACxC,wCAAyC;AAGzC,gDAAgD;AAChD,sCAAwC;AAA/B,mGAAA,SAAS,OAAA;AAGlB;;GAEG;AACH,SAAgB,eAAe,CAAC,UAAmB;IACjD,OAAO,IAAI,kBAAS,CAAC;QACnB,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE;QACvC,OAAO,EAAE,IAAI,mBAAU,CAAC,EAAE,UAAU,EAAE,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;KACrE,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CAAC,UAAmB;IAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,uBAAuB;IACvB,YAAY,EAAE,eAAe;IAE7B,kBAAkB;IAClB,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,kBAAkB;IAE5B,oBAAoB;IACpB,KAAK,CAAC,OAAO,CAAC,OAAgB,EAAE,MAAe;QAC7C,2CAA2C;QAC3C,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,sCAAsC;QACtC,OAAO;YACL,GAAG,OAAO;YACV,WAAW,EAAE,IAAI;YACjB,qBAAqB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAChD,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"engine-bridge.js","sourceRoot":"","sources":["../src/engine-bridge.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA6BH,0CAMC;AAKD,0CAIC;AAKD,gDAGC;AAKD,gDAIC;AAxDD,IAAI,cAAc,GAAQ,IAAI,CAAC;AAE/B,wDAAwD;AACxD,SAAS,aAAa;IACpB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,kDAAkD;YAClD,MAAM,YAAY,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAAC;YAC9D,cAAc,GAAG,IAAI,YAAY,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YAC1D,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,6BAA6B;AAChB,QAAA,SAAS,GAAG,aAAa,CAAC;AAGvC;;GAEG;AACH,SAAgB,eAAe,CAAC,UAAmB;IACjD,OAAO,IAAI,iBAAS,CAAC;QACnB,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE;QACvC,OAAO,EAAE,IAAI,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;KACrE,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CAAC,UAAmB;IAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,uBAAuB;IACvB,YAAY,EAAE,eAAe;IAE7B,kBAAkB;IAClB,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,kBAAkB;IAE5B,oBAAoB;IACpB,KAAK,CAAC,OAAO,CAAC,OAAgB,EAAE,MAAe;QAC7C,2CAA2C;QAC3C,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,sCAAsC;QACtC,OAAO;YACL,GAAG,OAAO;YACV,WAAW,EAAE,IAAI;YACjB,qBAAqB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAChD,CAAC;IACJ,CAAC;CACF,CAAC"}