crudora 0.1.0-alpha.3 → 0.1.0-alpha.4
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 +0 -1
- package/dist/scripts/postinstall.js +6 -0
- package/package.json +2 -7
- package/scripts/postinstall.js +6 -0
- package/bin/crudora.js +0 -25
- package/dist/bin/crudora.js +0 -25
- package/dist/cli.d.ts +0 -2
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -233
- package/dist/cli.js.map +0 -1
package/README.md
CHANGED
|
@@ -313,7 +313,6 @@ Crudora automatically adds these scripts to your package.json:
|
|
|
313
313
|
- [API Reference](./docs/api.md)
|
|
314
314
|
- [Model Definition Guide](./docs/models.md)
|
|
315
315
|
- [Custom Routes](./docs/custom-routes.md)
|
|
316
|
-
- [CLI Reference](./docs/cli.md)
|
|
317
316
|
- [Deployment Guide](./docs/deployment.md)
|
|
318
317
|
|
|
319
318
|
## Contributing
|
|
@@ -99,8 +99,14 @@ if (fs.existsSync(targetPackagePath)) {
|
|
|
99
99
|
|
|
100
100
|
// Add useful scripts if they don't exist
|
|
101
101
|
const scriptsToAdd = {
|
|
102
|
+
'build': 'tsc',
|
|
102
103
|
'dev': 'ts-node src/server.ts',
|
|
103
104
|
'start': 'ts-node src/server.ts',
|
|
105
|
+
'start:prod': 'node dist/index.js',
|
|
106
|
+
'db:generate': 'prisma generate',
|
|
107
|
+
'db:push': 'prisma db push',
|
|
108
|
+
'db:migrate': 'prisma migrate dev',
|
|
109
|
+
'db:studio': 'prisma studio'
|
|
104
110
|
};
|
|
105
111
|
|
|
106
112
|
let scriptsAdded = false;
|
package/package.json
CHANGED
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "crudora",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.4",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"bin": {
|
|
8
|
-
"crudora": "./bin/crudora.js"
|
|
9
|
-
},
|
|
10
6
|
"files": [
|
|
11
7
|
"dist",
|
|
12
8
|
"README.md",
|
|
13
9
|
"LICENSE",
|
|
14
10
|
"templates",
|
|
15
|
-
"scripts"
|
|
16
|
-
"bin"
|
|
11
|
+
"scripts"
|
|
17
12
|
],
|
|
18
13
|
"scripts": {
|
|
19
14
|
"build": "tsc && node scripts/copy-assets.js",
|
package/scripts/postinstall.js
CHANGED
|
@@ -99,8 +99,14 @@ if (fs.existsSync(targetPackagePath)) {
|
|
|
99
99
|
|
|
100
100
|
// Add useful scripts if they don't exist
|
|
101
101
|
const scriptsToAdd = {
|
|
102
|
+
'build': 'tsc',
|
|
102
103
|
'dev': 'ts-node src/server.ts',
|
|
103
104
|
'start': 'ts-node src/server.ts',
|
|
105
|
+
'start:prod': 'node dist/index.js',
|
|
106
|
+
'db:generate': 'prisma generate',
|
|
107
|
+
'db:push': 'prisma db push',
|
|
108
|
+
'db:migrate': 'prisma migrate dev',
|
|
109
|
+
'db:studio': 'prisma studio'
|
|
104
110
|
};
|
|
105
111
|
|
|
106
112
|
let scriptsAdded = false;
|
package/bin/crudora.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { dirname } from 'path';
|
|
5
|
-
import { createRequire } from 'module';
|
|
6
|
-
|
|
7
|
-
const require = createRequire(import.meta.url);
|
|
8
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
-
const __dirname = dirname(__filename);
|
|
10
|
-
|
|
11
|
-
let cliPath;
|
|
12
|
-
try {
|
|
13
|
-
cliPath = new URL('../dist/cli.js', import.meta.url);
|
|
14
|
-
await import(cliPath);
|
|
15
|
-
} catch (error) {
|
|
16
|
-
try {
|
|
17
|
-
cliPath = new URL('../src/cli.ts', import.meta.url);
|
|
18
|
-
const tsNodePath = require.resolve('ts-node/register');
|
|
19
|
-
require(tsNodePath);
|
|
20
|
-
await import(cliPath);
|
|
21
|
-
} catch (innerError) {
|
|
22
|
-
console.error('Error loading CLI:', innerError);
|
|
23
|
-
process.exit(1);
|
|
24
|
-
}
|
|
25
|
-
}
|
package/dist/bin/crudora.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { dirname } from 'path';
|
|
5
|
-
import { createRequire } from 'module';
|
|
6
|
-
|
|
7
|
-
const require = createRequire(import.meta.url);
|
|
8
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
-
const __dirname = dirname(__filename);
|
|
10
|
-
|
|
11
|
-
let cliPath;
|
|
12
|
-
try {
|
|
13
|
-
cliPath = new URL('../dist/cli.js', import.meta.url);
|
|
14
|
-
await import(cliPath);
|
|
15
|
-
} catch (error) {
|
|
16
|
-
try {
|
|
17
|
-
cliPath = new URL('../src/cli.ts', import.meta.url);
|
|
18
|
-
const tsNodePath = require.resolve('ts-node/register');
|
|
19
|
-
require(tsNodePath);
|
|
20
|
-
await import(cliPath);
|
|
21
|
-
} catch (innerError) {
|
|
22
|
-
console.error('Error loading CLI:', innerError);
|
|
23
|
-
process.exit(1);
|
|
24
|
-
}
|
|
25
|
-
}
|
package/dist/cli.d.ts
DELETED
package/dist/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
DELETED
|
@@ -1,233 +0,0 @@
|
|
|
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
|
-
// Ubah semua import menjadi require
|
|
7
|
-
const commander_1 = require("commander");
|
|
8
|
-
const fs_1 = __importDefault(require("fs"));
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const child_process_1 = require("child_process");
|
|
11
|
-
function initProject() {
|
|
12
|
-
const templatePath = path_1.default.join(__dirname, '..', 'templates', 'schema.prisma');
|
|
13
|
-
const targetPrismaPath = path_1.default.join(process.cwd(), 'prisma', 'schema.prisma');
|
|
14
|
-
const targetEnvPath = path_1.default.join(process.cwd(), '.env');
|
|
15
|
-
const targetServerPath = path_1.default.join(process.cwd(), 'src', 'server.ts'); // Ubah ke .ts
|
|
16
|
-
const targetPackagePath = path_1.default.join(process.cwd(), 'package.json');
|
|
17
|
-
console.log('🚀 Setting up Crudora project...');
|
|
18
|
-
// 1. Create prisma directory and schema
|
|
19
|
-
if (!fs_1.default.existsSync(path_1.default.dirname(targetPrismaPath))) {
|
|
20
|
-
console.log('📋 Creating Prisma schema...');
|
|
21
|
-
fs_1.default.mkdirSync(path_1.default.dirname(targetPrismaPath), { recursive: true });
|
|
22
|
-
fs_1.default.copyFileSync(templatePath, targetPrismaPath);
|
|
23
|
-
console.log('✅ Prisma schema created at prisma/schema.prisma');
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
console.log('📋 Prisma directory already exists, skipping schema creation');
|
|
27
|
-
}
|
|
28
|
-
// 2. Create .env file
|
|
29
|
-
if (!fs_1.default.existsSync(targetEnvPath)) {
|
|
30
|
-
console.log('🔧 Creating .env file...');
|
|
31
|
-
const envContent = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'templates', '.env.example'), 'utf8');
|
|
32
|
-
fs_1.default.writeFileSync(targetEnvPath, envContent);
|
|
33
|
-
console.log('✅ .env file created');
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
console.log('🔧 .env file already exists, skipping creation');
|
|
37
|
-
}
|
|
38
|
-
// 3. Create basic server setup with TypeScript and ESM
|
|
39
|
-
if (!fs_1.default.existsSync(targetServerPath)) {
|
|
40
|
-
console.log('🖥️ Creating server setup...');
|
|
41
|
-
const serverContent = `import { CrudoraServer } from 'crudora';
|
|
42
|
-
import { PrismaClient } from '@prisma/client';
|
|
43
|
-
import dotenv from 'dotenv';
|
|
44
|
-
dotenv.config();
|
|
45
|
-
|
|
46
|
-
const prisma = new PrismaClient();
|
|
47
|
-
|
|
48
|
-
// Example User model (uncomment and modify as needed)
|
|
49
|
-
/*
|
|
50
|
-
class User {
|
|
51
|
-
static tableName = 'users';
|
|
52
|
-
static primaryKey = 'id';
|
|
53
|
-
static timestamps = true;
|
|
54
|
-
static fillable = ['name', 'email'];
|
|
55
|
-
static hidden = ['password'];
|
|
56
|
-
}
|
|
57
|
-
*/
|
|
58
|
-
|
|
59
|
-
const server = new CrudoraServer({
|
|
60
|
-
port: Number(process.env.PORT) || 3000,
|
|
61
|
-
prisma: prisma,
|
|
62
|
-
cors: true,
|
|
63
|
-
basePath: process.env.API_BASE_PATH || '/api'
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
// Register your models here
|
|
67
|
-
// server.registerModel(User);
|
|
68
|
-
|
|
69
|
-
// Add custom routes if needed
|
|
70
|
-
server.get('/health', (req, res) => {
|
|
71
|
-
res.json({ status: 'ok', timestamp: new Date() });
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
// Generate routes and start server
|
|
75
|
-
server
|
|
76
|
-
.generateRoutes()
|
|
77
|
-
.listen(() => {
|
|
78
|
-
console.log('🚀 Crudora server is running!');
|
|
79
|
-
console.log('📚 API documentation: http://localhost:\${process.env.PORT || 3000}\${process.env.API_BASE_PATH || '/api'}');
|
|
80
|
-
});
|
|
81
|
-
`;
|
|
82
|
-
fs_1.default.writeFileSync(targetServerPath, serverContent);
|
|
83
|
-
console.log('✅ Server setup created at server.ts');
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
console.log('🖥️ server.ts already exists, skipping creation');
|
|
87
|
-
}
|
|
88
|
-
// 4. Update package.json scripts (if package.json exists)
|
|
89
|
-
if (fs_1.default.existsSync(targetPackagePath)) {
|
|
90
|
-
try {
|
|
91
|
-
const packageJson = JSON.parse(fs_1.default.readFileSync(targetPackagePath, 'utf8'));
|
|
92
|
-
if (!packageJson.scripts) {
|
|
93
|
-
packageJson.scripts = {};
|
|
94
|
-
}
|
|
95
|
-
// Add useful scripts if they don't exist
|
|
96
|
-
const scriptsToAdd = {
|
|
97
|
-
'dev': 'ts-node server.ts',
|
|
98
|
-
'start': 'ts-node server.ts',
|
|
99
|
-
'build': 'tsc',
|
|
100
|
-
'start:prod': 'node dist/server.js',
|
|
101
|
-
};
|
|
102
|
-
let scriptsAdded = false;
|
|
103
|
-
for (const [scriptName, scriptCommand] of Object.entries(scriptsToAdd)) {
|
|
104
|
-
if (!packageJson.scripts[scriptName]) {
|
|
105
|
-
packageJson.scripts[scriptName] = scriptCommand;
|
|
106
|
-
scriptsAdded = true;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
if (scriptsAdded) {
|
|
110
|
-
fs_1.default.writeFileSync(targetPackagePath, JSON.stringify(packageJson, null, 2));
|
|
111
|
-
console.log('✅ Package.json scripts updated');
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
console.log('⚠️ Could not update package.json scripts:', error.message);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// 5. Create tsconfig.json if it doesn't exist
|
|
119
|
-
const targetTsConfigPath = path_1.default.join(process.cwd(), 'tsconfig.json');
|
|
120
|
-
if (!fs_1.default.existsSync(targetTsConfigPath)) {
|
|
121
|
-
console.log('📝 Creating tsconfig.json...');
|
|
122
|
-
const tsConfigContent = {
|
|
123
|
-
"compilerOptions": {
|
|
124
|
-
"target": "ES2020",
|
|
125
|
-
"module": "NodeNext",
|
|
126
|
-
"moduleResolution": "NodeNext",
|
|
127
|
-
"lib": ["ES2020"],
|
|
128
|
-
"outDir": "./dist",
|
|
129
|
-
"rootDir": "./",
|
|
130
|
-
"strict": true,
|
|
131
|
-
"esModuleInterop": true,
|
|
132
|
-
"skipLibCheck": true,
|
|
133
|
-
"forceConsistentCasingInFileNames": true,
|
|
134
|
-
"experimentalDecorators": true,
|
|
135
|
-
"emitDecoratorMetadata": true,
|
|
136
|
-
"resolveJsonModule": true,
|
|
137
|
-
"declaration": true,
|
|
138
|
-
"sourceMap": true
|
|
139
|
-
},
|
|
140
|
-
"include": ["*.ts", "src/**/*"],
|
|
141
|
-
"exclude": ["node_modules", "dist", "**/*.test.ts"]
|
|
142
|
-
};
|
|
143
|
-
fs_1.default.writeFileSync(targetTsConfigPath, JSON.stringify(tsConfigContent, null, 2));
|
|
144
|
-
console.log('✅ tsconfig.json created');
|
|
145
|
-
}
|
|
146
|
-
console.log('\n🎉 Crudora setup complete!');
|
|
147
|
-
console.log('\n📝 Next steps:');
|
|
148
|
-
console.log('1. Install dependencies: npm install @prisma/client prisma dotenv ts-node typescript');
|
|
149
|
-
console.log('2. Generate Prisma client: npx prisma generate');
|
|
150
|
-
console.log('3. Push database schema: npx prisma db push');
|
|
151
|
-
console.log('4. Define your models in server.ts');
|
|
152
|
-
console.log('5. Start development server: npm run dev');
|
|
153
|
-
console.log('\n📖 Documentation: https://github.com/suryamsj/crudora#readme');
|
|
154
|
-
}
|
|
155
|
-
function runPrismaStudio() {
|
|
156
|
-
console.log('🚀 Starting Prisma Studio...');
|
|
157
|
-
try {
|
|
158
|
-
(0, child_process_1.execSync)('npx prisma studio', { stdio: 'inherit' });
|
|
159
|
-
}
|
|
160
|
-
catch (error) {
|
|
161
|
-
console.error('❌ Failed to start Prisma Studio:', error.message);
|
|
162
|
-
process.exit(1);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
function generatePrismaClient() {
|
|
166
|
-
console.log('🔧 Generating Prisma Client...');
|
|
167
|
-
try {
|
|
168
|
-
(0, child_process_1.execSync)('npx prisma generate', { stdio: 'inherit' });
|
|
169
|
-
console.log('✅ Prisma Client generated successfully');
|
|
170
|
-
}
|
|
171
|
-
catch (error) {
|
|
172
|
-
console.error('❌ Failed to generate Prisma Client:', error.message);
|
|
173
|
-
process.exit(1);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
function pushPrismaSchema() {
|
|
177
|
-
console.log('🔄 Pushing Prisma schema to database...');
|
|
178
|
-
try {
|
|
179
|
-
(0, child_process_1.execSync)('npx prisma db push', { stdio: 'inherit' });
|
|
180
|
-
console.log('✅ Schema pushed to database successfully');
|
|
181
|
-
}
|
|
182
|
-
catch (error) {
|
|
183
|
-
console.error('❌ Failed to push schema to database:', error.message);
|
|
184
|
-
process.exit(1);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
function migratePrismaSchema() {
|
|
188
|
-
console.log('🔄 Running Prisma migrations...');
|
|
189
|
-
try {
|
|
190
|
-
(0, child_process_1.execSync)('npx prisma migrate dev', { stdio: 'inherit' });
|
|
191
|
-
console.log('✅ Migrations completed successfully');
|
|
192
|
-
}
|
|
193
|
-
catch (error) {
|
|
194
|
-
console.error('❌ Failed to run migrations:', error.message);
|
|
195
|
-
process.exit(1);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
// Membuat CLI program
|
|
199
|
-
const program = new commander_1.Command();
|
|
200
|
-
program
|
|
201
|
-
.name('crudora')
|
|
202
|
-
.description('CLI for Crudora - TypeScript framework for automated CRUD API generation')
|
|
203
|
-
.version('0.1.0-alpha.3');
|
|
204
|
-
program
|
|
205
|
-
.command('init')
|
|
206
|
-
.description('Initialize a new Crudora project')
|
|
207
|
-
.action(initProject);
|
|
208
|
-
program
|
|
209
|
-
.command('studio')
|
|
210
|
-
.description('Start Prisma Studio')
|
|
211
|
-
.action(runPrismaStudio);
|
|
212
|
-
program
|
|
213
|
-
.command('generate')
|
|
214
|
-
.description('Generate Prisma Client')
|
|
215
|
-
.action(generatePrismaClient);
|
|
216
|
-
program
|
|
217
|
-
.command('push')
|
|
218
|
-
.description('Push Prisma schema to database')
|
|
219
|
-
.action(pushPrismaSchema);
|
|
220
|
-
program
|
|
221
|
-
.command('migrate')
|
|
222
|
-
.description('Run Prisma migrations')
|
|
223
|
-
.action(migratePrismaSchema);
|
|
224
|
-
program.parse();
|
|
225
|
-
// Di akhir file, ubah export jika ada
|
|
226
|
-
module.exports = {
|
|
227
|
-
initProject,
|
|
228
|
-
runPrismaStudio,
|
|
229
|
-
generatePrismaClient,
|
|
230
|
-
pushPrismaSchema,
|
|
231
|
-
migratePrismaSchema
|
|
232
|
-
};
|
|
233
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AAAA,oCAAoC;AACpC,yCAAoC;AACpC,4CAAoB;AACpB,gDAAwB;AACxB,iDAAyC;AAGzC,SAAS,WAAW;IAClB,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IAC9E,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC7E,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc;IAErF,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,wCAAwC;IACxC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC9E,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,YAAE,CAAC,YAAY,CAChC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,EACvD,MAAM,CACP,CAAC;QACF,YAAE,CAAC,aAAa,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;IAED,uDAAuD;IACvD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCzB,CAAC;QACE,YAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IAED,0DAA0D;IAC1D,IAAI,YAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;YAE3E,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBACzB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;YAC3B,CAAC;YAED,yCAAyC;YACzC,MAAM,YAAY,GAAG;gBACnB,KAAK,EAAE,mBAAmB;gBAC1B,OAAO,EAAE,mBAAmB;gBAC5B,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,qBAAqB;aACpC,CAAC;YAEF,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,KAAK,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;oBACrC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC;oBAChD,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,YAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,MAAM,kBAAkB,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;IACrE,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,MAAM,eAAe,GAAG;YACtB,iBAAiB,EAAE;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,UAAU;gBACpB,kBAAkB,EAAE,UAAU;gBAC9B,KAAK,EAAE,CAAC,QAAQ,CAAC;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,SAAS,EAAE,IAAI;gBACf,QAAQ,EAAE,IAAI;gBACd,iBAAiB,EAAE,IAAI;gBACvB,cAAc,EAAE,IAAI;gBACpB,kCAAkC,EAAE,IAAI;gBACxC,wBAAwB,EAAE,IAAI;gBAC9B,uBAAuB,EAAE,IAAI;gBAC7B,mBAAmB,EAAE,IAAI;gBACzB,aAAa,EAAE,IAAI;gBACnB,WAAW,EAAE,IAAI;aAClB;YACD,SAAS,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;YAC/B,SAAS,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,CAAC;SACpD,CAAC;QACF,YAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,sBAAsB;AACtB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,0EAA0E,CAAC;KACvF,OAAO,CAAC,eAAe,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAEhC,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,sCAAsC;AACtC,MAAM,CAAC,OAAO,GAAG;IACf,WAAW;IACX,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,mBAAmB;CACpB,CAAC"}
|