@ereactthohir/cli 1.1.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.
@@ -0,0 +1,584 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.create = create;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const ora_1 = __importDefault(require("ora"));
12
+ async function create(name) {
13
+ console.log(chalk_1.default.blue(`\n🚀 Initializing EreactThohir Project: ${name}`));
14
+ console.log(chalk_1.default.gray(' Powered by KangPCode (Dhafa Nazula Permadi)\n'));
15
+ let answers;
16
+ if (process.env.CI) {
17
+ console.log(chalk_1.default.yellow(' Run in automated CI mode (Skipping prompts)'));
18
+ answers = {
19
+ projectType: 'Fullstack (Mobile + Web)',
20
+ renderingMode: 'Hybrid',
21
+ database: 'sawit.db (default lightweight embedded DB)',
22
+ uiSystem: 'Rice UI (default, official)',
23
+ template: 'Enterprise App Template'
24
+ };
25
+ }
26
+ else {
27
+ const questions = [
28
+ {
29
+ type: 'list',
30
+ name: 'projectType',
31
+ message: 'What type of app do you want to build?',
32
+ choices: [
33
+ 'Mobile Native (Android)',
34
+ 'Mobile Native (iOS)',
35
+ 'Mobile Native (Android + iOS)',
36
+ 'Web App',
37
+ 'PWA',
38
+ 'Fullstack (Mobile + Web)'
39
+ ]
40
+ },
41
+ {
42
+ type: 'list',
43
+ name: 'renderingMode',
44
+ message: 'Choose rendering mode:',
45
+ choices: ['SPA', 'SSR', 'Hybrid']
46
+ },
47
+ {
48
+ type: 'list',
49
+ name: 'database',
50
+ message: 'Choose database:',
51
+ choices: ['sawit.db (default lightweight embedded DB)', 'MySQL', 'PostgreSQL', 'MongoDB']
52
+ },
53
+ {
54
+ type: 'list',
55
+ name: 'uiSystem',
56
+ message: 'UI Style:',
57
+ choices: ['Rice UI (default, official)']
58
+ },
59
+ {
60
+ type: 'list',
61
+ name: 'template',
62
+ message: 'Choose a starter template:',
63
+ choices: [
64
+ 'None (Blank)',
65
+ 'Mobile App Starter',
66
+ 'Admin Dashboard',
67
+ 'Authentication Starter',
68
+ 'Enterprise App Template',
69
+ 'SaaS Template'
70
+ ]
71
+ }
72
+ ];
73
+ answers = await inquirer_1.default.prompt(questions);
74
+ // If web-based project, offer Semouth installation
75
+ if (['Web App', 'PWA', 'Fullstack (Mobile + Web)'].includes(answers.projectType)) {
76
+ const semouthQuestions = [
77
+ {
78
+ type: 'confirm',
79
+ name: 'installSemouth',
80
+ message: 'Would you like to install Semouth (pre-built authentication & scaffolding)?',
81
+ default: true
82
+ }
83
+ ];
84
+ const semouthAnswers = await inquirer_1.default.prompt(semouthQuestions);
85
+ answers.installSemouth = semouthAnswers.installSemouth;
86
+ if (answers.installSemouth) {
87
+ const semouthComponentQuestions = [
88
+ {
89
+ type: 'checkbox',
90
+ name: 'semouthComponents',
91
+ message: 'Select Semouth components to install:',
92
+ choices: [
93
+ { name: 'Authentication (Login, Register, Password Reset)', value: 'auth', checked: true },
94
+ { name: 'User Management Dashboard', value: 'users', checked: true },
95
+ { name: 'Role & Permission System', value: 'rbac', checked: false },
96
+ { name: 'Email Verification', value: 'email-verification', checked: false },
97
+ { name: 'Two-Factor Authentication', value: '2fa', checked: false }
98
+ ]
99
+ }
100
+ ];
101
+ const semouthComponentAnswers = await inquirer_1.default.prompt(semouthComponentQuestions);
102
+ answers.semouthComponents = semouthComponentAnswers.semouthComponents;
103
+ }
104
+ }
105
+ }
106
+ const spinner = (0, ora_1.default)('Scaffolding project...').start();
107
+ try {
108
+ const projectDir = path_1.default.resolve(process.cwd(), name);
109
+ if (fs_extra_1.default.existsSync(projectDir)) {
110
+ spinner.fail('Directory already exists!');
111
+ process.exit(1);
112
+ }
113
+ await fs_extra_1.default.ensureDir(projectDir);
114
+ // Define Laravel-like structure
115
+ const structure = [
116
+ 'app/Controllers',
117
+ 'app/Services',
118
+ 'app/Models',
119
+ 'app/Providers',
120
+ 'app/Middleware',
121
+ 'app/Jobs',
122
+ 'app/Policies',
123
+ 'database/migrations',
124
+ 'database/seeders',
125
+ 'database/factories',
126
+ 'resources/views',
127
+ 'resources/rice-ui',
128
+ 'resources/assets',
129
+ 'routes',
130
+ 'config',
131
+ 'storage',
132
+ 'tests'
133
+ ];
134
+ for (const dir of structure) {
135
+ await fs_extra_1.default.ensureDir(path_1.default.join(projectDir, dir));
136
+ }
137
+ // Write routes/web.ts
138
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'routes/web.ts'), `import { Route } from '@ereactthohir/core';
139
+
140
+ Route.get('/', (req, res) => {
141
+ return { message: 'Welcome to EreactThohir' };
142
+ });
143
+ `);
144
+ // Write routes/api.ts
145
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'routes/api.ts'), `import { Route } from '@ereactthohir/core';
146
+
147
+ Route.group({ prefix: '/api' }, () => {
148
+ Route.get('/user', (req, res) => {
149
+ return { name: 'John Doe' };
150
+ });
151
+ });
152
+ `);
153
+ // Write routes/mobile.ts
154
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'routes/mobile.ts'), `import { Route } from '@ereactthohir/core';
155
+
156
+ Route.screen('Home', () => {
157
+ // Screen component
158
+ });
159
+ `);
160
+ // Write ereactthohir.config.ts
161
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'ereactthohir.config.ts'), `export default {
162
+ name: process.env.APP_NAME || '${name}',
163
+ env: process.env.APP_ENV || 'local',
164
+ debug: process.env.APP_DEBUG === 'true',
165
+ url: process.env.APP_URL || 'http://localhost',
166
+ database: {
167
+ driver: process.env.DB_DRIVER || '${answers.database.includes('sawit') ? 'sawit' : answers.database.toLowerCase()}',
168
+ connection: process.env.DB_CONNECTION || 'default'
169
+ },
170
+ template: '${answers.template}'
171
+ };
172
+ `);
173
+ // Write ereact.json marker
174
+ await fs_extra_1.default.writeJSON(path_1.default.join(projectDir, 'ereact.json'), {
175
+ name: name,
176
+ version: '0.0.1',
177
+ created_at: new Date().toISOString()
178
+ }, { spaces: 2 });
179
+ // Write README.md with template info
180
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'README.md'), `# ${name}
181
+
182
+ This project was created with EreactThohir using the **${answers.template}** template.
183
+
184
+ ## Getting Started
185
+
186
+ 1. Install dependencies:
187
+ \`\`\`bash
188
+ npm install
189
+ \`\`\`
190
+
191
+ 2. Run development server:
192
+ \`\`\`bash
193
+ ereact jalan
194
+ \`\`\`
195
+ `);
196
+ // Write .env
197
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, '.env'), `APP_NAME=${name}
198
+ APP_ENV=local
199
+ APP_KEY=
200
+ APP_DEBUG=true
201
+ APP_URL=http://localhost
202
+
203
+ DB_CONNECTION=default
204
+ DB_DRIVER=${answers.database.includes('sawit') ? 'sawit' : answers.database.toLowerCase()}
205
+ `);
206
+ // Write .env.example
207
+ await fs_extra_1.default.copy(path_1.default.join(projectDir, '.env'), path_1.default.join(projectDir, '.env.example'));
208
+ // Write config/app.json
209
+ await fs_extra_1.default.writeJSON(path_1.default.join(projectDir, 'config/app.json'), {
210
+ name,
211
+ version: '1.0.0',
212
+ providers: [
213
+ "App\\Providers\\RouteServiceProvider",
214
+ "App\\Providers\\AuthServiceProvider"
215
+ ]
216
+ }, { spaces: 2 });
217
+ // Install Semouth if selected
218
+ if (answers.installSemouth) {
219
+ spinner.text = 'Installing Semouth components...';
220
+ await installSemouthComponents(projectDir, answers.semouthComponents);
221
+ }
222
+ // Write package.json
223
+ const dependencies = {
224
+ "@ereactthohir/core": "^1.0.0",
225
+ "@ereactthohir/rice-ui": "^1.0.0",
226
+ "react": "^18.0.0",
227
+ "react-dom": "^18.0.0"
228
+ };
229
+ // Add Semouth dependencies if installed
230
+ if (answers.installSemouth) {
231
+ dependencies["@ereactthohir/semouth"] = "^1.0.0";
232
+ }
233
+ await fs_extra_1.default.writeJSON(path_1.default.join(projectDir, 'package.json'), {
234
+ name,
235
+ version: '0.0.1',
236
+ scripts: {
237
+ "dev": "ereact jalan",
238
+ "build": "ereact build",
239
+ "test": "ereact test"
240
+ },
241
+ dependencies,
242
+ devDependencies: {
243
+ "@ereactthohir/cli": "^1.0.0",
244
+ "typescript": "^5.0.0",
245
+ "@types/react": "^18.0.0",
246
+ "@types/react-dom": "^18.0.0"
247
+ }
248
+ }, { spaces: 2 });
249
+ spinner.succeed(chalk_1.default.green('Project created successfully!'));
250
+ console.log(chalk_1.default.yellow('\nNext steps:'));
251
+ console.log(` cd ${name}`);
252
+ console.log(' npm install');
253
+ console.log(' ereact jalan\n');
254
+ }
255
+ catch (error) {
256
+ spinner.fail('Failed to create project.');
257
+ console.error(error);
258
+ }
259
+ }
260
+ /**
261
+ * Install Semouth components (auth scaffolding similar to Laravel Breeze)
262
+ */
263
+ async function installSemouthComponents(projectDir, components) {
264
+ const semouthDir = path_1.default.join(projectDir, 'app/Semouth');
265
+ await fs_extra_1.default.ensureDir(semouthDir);
266
+ // Install Authentication
267
+ if (components.includes('auth')) {
268
+ await fs_extra_1.default.ensureDir(path_1.default.join(projectDir, 'app/Controllers/Auth'));
269
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'app/Controllers/Auth/LoginController.ts'), `import { Controller } from '@ereactthohir/core';
270
+
271
+ export class LoginController extends Controller {
272
+ /**
273
+ * Show the login form
274
+ */
275
+ public showLoginForm(req: any, res: any) {
276
+ return res.view('auth.login');
277
+ }
278
+
279
+ /**
280
+ * Handle login request
281
+ */
282
+ public async store(req: any, res: any) {
283
+ const { email, password } = req.only('email', 'password');
284
+
285
+ // Validate credentials
286
+ try {
287
+ const user = await req.app.make('auth').attempt(email, password);
288
+ req.session.set('user_id', user.id);
289
+ return res.redirect('/');
290
+ } catch (error) {
291
+ return res.back().withErrors({ email: 'Invalid credentials' });
292
+ }
293
+ }
294
+
295
+ /**
296
+ * Handle logout
297
+ */
298
+ public logout(req: any, res: any) {
299
+ req.session.destroy();
300
+ return res.redirect('/login');
301
+ }
302
+ }
303
+ `);
304
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'app/Controllers/Auth/RegisterController.ts'), `import { Controller } from '@ereactthohir/core';
305
+
306
+ export class RegisterController extends Controller {
307
+ /**
308
+ * Show the registration form
309
+ */
310
+ public showRegistrationForm(req: any, res: any) {
311
+ return res.view('auth.register');
312
+ }
313
+
314
+ /**
315
+ * Handle registration request
316
+ */
317
+ public async store(req: any, res: any) {
318
+ const { name, email, password, password_confirmation } = req.all();
319
+
320
+ // Validate input
321
+ await req.validate({
322
+ name: 'required|string|max:255',
323
+ email: 'required|email|unique:users',
324
+ password: 'required|min:8|confirmed'
325
+ });
326
+
327
+ const user = await req.app.make('auth').create({
328
+ name, email, password
329
+ });
330
+
331
+ req.session.set('user_id', user.id);
332
+ return res.redirect('/');
333
+ }
334
+ }
335
+ `);
336
+ // Add auth routes
337
+ const authRoutesContent = `import { Route } from '@ereactthohir/core';
338
+ import { LoginController } from '../Controllers/Auth/LoginController';
339
+ import { RegisterController } from '../Controllers/Auth/RegisterController';
340
+
341
+ Route.group({ prefix: '/auth' }, () => {
342
+ Route.get('/login', [LoginController, 'showLoginForm']).name('login');
343
+ Route.post('/login', [LoginController, 'store']).name('login.store');
344
+ Route.post('/logout', [LoginController, 'logout']).name('logout');
345
+
346
+ Route.get('/register', [RegisterController, 'showRegistrationForm']).name('register');
347
+ Route.post('/register', [RegisterController, 'store']).name('register.store');
348
+ });
349
+ `;
350
+ const webRoutesPath = path_1.default.join(projectDir, 'routes/web.ts');
351
+ const existingRoutes = await fs_extra_1.default.readFile(webRoutesPath, 'utf-8');
352
+ await fs_extra_1.default.writeFile(webRoutesPath, existingRoutes + '\n' + authRoutesContent);
353
+ }
354
+ // Install User Management
355
+ if (components.includes('users')) {
356
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'app/Controllers/UserController.ts'), `import { Controller } from '@ereactthohir/core';
357
+
358
+ export class UserController extends Controller {
359
+ /**
360
+ * Display all users
361
+ */
362
+ public async index(req: any, res: any) {
363
+ const users = await req.app.make('db').table('users').paginate(15);
364
+ return res.json(users);
365
+ }
366
+
367
+ /**
368
+ * Display user profile
369
+ */
370
+ public async show(req: any, res: any) {
371
+ const user = await req.app.make('db').table('users')
372
+ .where('id', req.param('id'))
373
+ .first();
374
+
375
+ if (!user) {
376
+ return res.status(404).json({ error: 'User not found' });
377
+ }
378
+
379
+ return res.json(user);
380
+ }
381
+
382
+ /**
383
+ * Update user
384
+ */
385
+ public async update(req: any, res: any) {
386
+ const { name, email } = req.only('name', 'email');
387
+
388
+ await req.app.make('db').table('users')
389
+ .where('id', req.param('id'))
390
+ .update({ name, email });
391
+
392
+ return res.success('User updated successfully');
393
+ }
394
+
395
+ /**
396
+ * Delete user
397
+ */
398
+ public async destroy(req: any, res: any) {
399
+ await req.app.make('db').table('users')
400
+ .where('id', req.param('id'))
401
+ .delete();
402
+
403
+ return res.success('User deleted successfully');
404
+ }
405
+ }
406
+ `);
407
+ }
408
+ // Install RBAC (Role & Permission System)
409
+ if (components.includes('rbac')) {
410
+ await fs_extra_1.default.ensureDir(path_1.default.join(projectDir, 'app/RBAC'));
411
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'app/RBAC/Role.ts'), `import { Model } from '@ereactthohir/core';
412
+
413
+ export class Role extends Model {
414
+ protected table = 'roles';
415
+ protected fillable = ['name', 'description', 'slug'];
416
+
417
+ /**
418
+ * Get permissions for this role
419
+ */
420
+ public permissions() {
421
+ return this.belongsToMany('Permission', 'role_permissions');
422
+ }
423
+
424
+ /**
425
+ * Assign permission to role
426
+ */
427
+ public givePermissionTo(permission: string) {
428
+ // Implementation
429
+ }
430
+ }
431
+ `);
432
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'app/RBAC/Permission.ts'), `import { Model } from '@ereactthohir/core';
433
+
434
+ export class Permission extends Model {
435
+ protected table = 'permissions';
436
+ protected fillable = ['name', 'description', 'slug'];
437
+
438
+ /**
439
+ * Get roles for this permission
440
+ */
441
+ public roles() {
442
+ return this.belongsToMany('Role', 'role_permissions');
443
+ }
444
+ }
445
+ `);
446
+ // Add RBAC migration stub info
447
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'database/migrations/RBAC_SETUP.txt'), `
448
+ # RBAC Setup Migrations
449
+
450
+ Run these migrations to set up the role and permission system:
451
+
452
+ 1. Create roles table
453
+ 2. Create permissions table
454
+ 3. Create role_permissions pivot table
455
+ 4. Seed default roles (Admin, User, Moderator, etc.)
456
+ 5. Seed default permissions (create, read, update, delete, etc.)
457
+
458
+ Use: ereact migrate
459
+ `);
460
+ }
461
+ // Install Email Verification
462
+ if (components.includes('email-verification')) {
463
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'app/Middleware/VerifyEmailMiddleware.ts'), `import { Middleware } from '@ereactthohir/core';
464
+
465
+ export class VerifyEmailMiddleware implements Middleware {
466
+ public async handle(req: any, res: any, next: () => Promise<void>): Promise<void> {
467
+ const user = req.getAuthenticatedUser();
468
+
469
+ if (user && !user.email_verified_at) {
470
+ return res.redirect('/email/verify');
471
+ }
472
+
473
+ await next();
474
+ }
475
+ }
476
+ `);
477
+ }
478
+ // Install 2FA (Two-Factor Authentication)
479
+ if (components.includes('2fa')) {
480
+ await fs_extra_1.default.writeFile(path_1.default.join(projectDir, 'app/Services/TwoFactorService.ts'), `import crypto from 'crypto';
481
+
482
+ export class TwoFactorService {
483
+ /**
484
+ * Generate 2FA secret
485
+ */
486
+ public generateSecret(): string {
487
+ return crypto.randomBytes(32).toString('hex');
488
+ }
489
+
490
+ /**
491
+ * Generate 2FA code
492
+ */
493
+ public generateCode(secret: string): string {
494
+ // TOTP implementation
495
+ const counter = Math.floor(Date.now() / 30000);
496
+ return crypto.createHmac('sha1', Buffer.from(secret, 'hex'))
497
+ .update(counter.toString())
498
+ .digest('hex')
499
+ .slice(0, 6);
500
+ }
501
+
502
+ /**
503
+ * Verify 2FA code
504
+ */
505
+ public verifyCode(secret: string, code: string, window: number = 1): boolean {
506
+ const counter = Math.floor(Date.now() / 30000);
507
+
508
+ for (let i = -window; i <= window; i++) {
509
+ const c = counter + i;
510
+ const expected = crypto.createHmac('sha1', Buffer.from(secret, 'hex'))
511
+ .update(c.toString())
512
+ .digest('hex')
513
+ .slice(0, 6);
514
+
515
+ if (expected === code) {
516
+ return true;
517
+ }
518
+ }
519
+
520
+ return false;
521
+ }
522
+ }
523
+ `);
524
+ }
525
+ // Create Semouth documentation
526
+ await fs_extra_1.default.writeFile(path_1.default.join(semouthDir, 'README.md'), `# Semouth - EreactThohir Authentication & Scaffolding
527
+
528
+ Semouth is EreactThohir's built-in authentication and application scaffolding, similar to Laravel's Breeze.
529
+
530
+ ## Installed Components
531
+
532
+ ${components.map(c => `- ${c}`).join('\n')}
533
+
534
+ ## Quick Start
535
+
536
+ ### Authentication
537
+ After installation, Benzo provides ready-to-use authentication controllers:
538
+
539
+ \`\`\`typescript
540
+ // routes/web.ts
541
+ import { LoginController } from '../app/Controllers/Auth/LoginController';
542
+
543
+ Route.post('/login', [LoginController, 'store']);
544
+ \`\`\`
545
+
546
+ ### User Management
547
+ Access the user management dashboard at \`/users\`.
548
+
549
+ ### RBAC (if installed)
550
+ Manage roles and permissions through the admin interface.
551
+
552
+ \`\`\`typescript
553
+ import { Role } from '../app/RBAC/Role';
554
+
555
+ const adminRole = await Role.where('slug', 'admin').first();
556
+ adminRole.givePermissionTo('manage-users');
557
+ \`\`\`
558
+
559
+ ### Email Verification (if installed)
560
+ Users must verify their email before accessing the application:
561
+
562
+ \`\`\`typescript
563
+ Route.middleware([VerifyEmailMiddleware]).group(() => {
564
+ // Protected routes
565
+ });
566
+ \`\`\`
567
+
568
+ ### Two-Factor Authentication (if installed)
569
+ Enable 2FA for enhanced security:
570
+
571
+ \`\`\`typescript
572
+ import { TwoFactorService } from '../app/Services/TwoFactorService';
573
+
574
+ const 2fa = new TwoFactorService();
575
+ const secret = 2fa.generateSecret();
576
+ const code = 2fa.generateCode(secret);
577
+ \`\`\`
578
+
579
+ ## Documentation
580
+
581
+ For more information, refer to the [Security Guide](../../docs/SECURITY.md).
582
+ `);
583
+ }
584
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare function makeController(name: string): Promise<void>;
2
+ export declare function makeModel(name: string): Promise<void>;
3
+ export declare function makeService(name: string): Promise<void>;
4
+ export declare function makeScreen(name: string): Promise<void>;
5
+ export declare function makeComponent(name: string): Promise<void>;
6
+ export declare function makeMigration(name: string): Promise<void>;
7
+ export declare function makeSeeder(name: string): Promise<void>;
8
+ export declare function makeProvider(name: string): Promise<void>;
9
+ export declare function makeMiddleware(name: string): Promise<void>;
10
+ export declare function makeJob(name: string): Promise<void>;
11
+ export declare function makePolicy(name: string): Promise<void>;
12
+ //# sourceMappingURL=generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../src/commands/generators.ts"],"names":[],"mappings":"AA6BA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,iBAYhD;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,iBAa3C;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,iBAU7C;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,iBAe5C;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,iBAgB/C;AACD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,iBAe/C;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,iBAU5C;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,iBAc9C;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,iBAShD;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,iBAQzC;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,iBAQ5C"}