@nyalajs/cli 1.0.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 (37) hide show
  1. package/dist/bin/nyala.d.ts +3 -0
  2. package/dist/bin/nyala.d.ts.map +1 -0
  3. package/dist/bin/nyala.js +190 -0
  4. package/dist/bin/nyala.js.map +1 -0
  5. package/dist/commands/generate.command.d.ts +63 -0
  6. package/dist/commands/generate.command.d.ts.map +1 -0
  7. package/dist/commands/generate.command.js +554 -0
  8. package/dist/commands/generate.command.js.map +1 -0
  9. package/dist/commands/migrate.command.d.ts +15 -0
  10. package/dist/commands/migrate.command.d.ts.map +1 -0
  11. package/dist/commands/migrate.command.js +179 -0
  12. package/dist/commands/migrate.command.js.map +1 -0
  13. package/dist/commands/new.command.d.ts +19 -0
  14. package/dist/commands/new.command.d.ts.map +1 -0
  15. package/dist/commands/new.command.helpers.d.ts +6 -0
  16. package/dist/commands/new.command.helpers.d.ts.map +1 -0
  17. package/dist/commands/new.command.helpers.js +92 -0
  18. package/dist/commands/new.command.helpers.js.map +1 -0
  19. package/dist/commands/new.command.js +515 -0
  20. package/dist/commands/new.command.js.map +1 -0
  21. package/dist/commands/seed.command.d.ts +15 -0
  22. package/dist/commands/seed.command.d.ts.map +1 -0
  23. package/dist/commands/seed.command.js +144 -0
  24. package/dist/commands/seed.command.js.map +1 -0
  25. package/dist/commands/validate.command.d.ts +7 -0
  26. package/dist/commands/validate.command.d.ts.map +1 -0
  27. package/dist/commands/validate.command.js +127 -0
  28. package/dist/commands/validate.command.js.map +1 -0
  29. package/dist/utils/banner.d.ts +5 -0
  30. package/dist/utils/banner.d.ts.map +1 -0
  31. package/dist/utils/banner.js +174 -0
  32. package/dist/utils/banner.js.map +1 -0
  33. package/dist/utils/naming.d.ts +4 -0
  34. package/dist/utils/naming.d.ts.map +1 -0
  35. package/dist/utils/naming.js +33 -0
  36. package/dist/utils/naming.js.map +1 -0
  37. package/package.json +34 -0
@@ -0,0 +1,515 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.NewCommand = void 0;
40
+ const fs = __importStar(require("fs-extra"));
41
+ const path = __importStar(require("path"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const ora_1 = __importDefault(require("ora"));
44
+ const inquirer_1 = __importDefault(require("inquirer"));
45
+ const banner_1 = require("../utils/banner");
46
+ /**
47
+ * Application-level folder structure, per docs/requirements.md §3.1.
48
+ * Framework internals (packages/core, packages/http, ...) are unaffected —
49
+ * this is only the convention `nyala new` scaffolds for consuming apps.
50
+ */
51
+ const APP_SUBFOLDERS = [
52
+ "controllers",
53
+ "models",
54
+ "services",
55
+ "repositories",
56
+ "middleware",
57
+ "requests",
58
+ "resources",
59
+ "validators",
60
+ "policies",
61
+ "events",
62
+ "listeners",
63
+ "jobs",
64
+ "mail",
65
+ "notifications",
66
+ "exceptions",
67
+ "dto",
68
+ "enums",
69
+ "interfaces",
70
+ "contracts",
71
+ "helpers",
72
+ ];
73
+ const EMPTY_TOP_LEVEL_FOLDERS = [
74
+ "database/migrations",
75
+ "database/seeders",
76
+ "database/factories",
77
+ "routes",
78
+ "storage",
79
+ "public",
80
+ "resources",
81
+ "tests",
82
+ "docs",
83
+ "plugins",
84
+ "framework",
85
+ ];
86
+ class NewCommand {
87
+ async execute(name, options) {
88
+ let projectName = name;
89
+ let dbDriver = options.database || "postgres";
90
+ let template = options.template || null;
91
+ // Interactive prompts if options not provided
92
+ const prompts = [];
93
+ if (!projectName) {
94
+ prompts.push({
95
+ type: "input",
96
+ name: "projectName",
97
+ message: "What is the name of your new Nyala project?",
98
+ validate: (input) => (input ? true : "Project name is required"),
99
+ });
100
+ }
101
+ if (!template) {
102
+ prompts.push({
103
+ type: "list",
104
+ name: "template",
105
+ message: "Which starter template would you like to use?",
106
+ choices: [
107
+ {
108
+ name: "MVC Starter - Standard MVC application with auth & CRUD",
109
+ value: "mvc",
110
+ },
111
+ {
112
+ name: "SaaS Starter - Multi-tenant SaaS with advanced features",
113
+ value: "saas",
114
+ },
115
+ {
116
+ name: "Basic - Minimal setup (current default)",
117
+ value: "basic",
118
+ },
119
+ ],
120
+ default: "mvc",
121
+ });
122
+ }
123
+ if (!options.database) {
124
+ prompts.push({
125
+ type: "list",
126
+ name: "dbDriver",
127
+ message: "Which database driver would you like to use?",
128
+ choices: [
129
+ { name: "PostgreSQL (recommended)", value: "postgres" },
130
+ { name: "MySQL", value: "mysql" },
131
+ { name: "SQLite", value: "sqlite" },
132
+ ],
133
+ });
134
+ }
135
+ if (prompts.length > 0) {
136
+ const answers = await inquirer_1.default.prompt(prompts);
137
+ projectName = projectName || answers.projectName;
138
+ template = template || answers.template;
139
+ dbDriver = options.database || answers.dbDriver;
140
+ }
141
+ const spinner = (0, ora_1.default)(`Creating new Nyala application: ${projectName}`).start();
142
+ try {
143
+ const projectPath = path.join(process.cwd(), projectName);
144
+ if (await fs.pathExists(projectPath)) {
145
+ spinner.fail(`Directory ${projectName} already exists`);
146
+ return;
147
+ }
148
+ // Check if template directory exists
149
+ const templatePath = path.join(__dirname, "../../../templates", `${template}-starter`);
150
+ const templateExists = await fs.pathExists(templatePath);
151
+ if (templateExists && template !== "basic") {
152
+ spinner.text = `Copying ${template} starter template...`;
153
+ await this.copyTemplate(templatePath, projectPath, projectName);
154
+ }
155
+ else {
156
+ spinner.text = `Creating basic project structure...`;
157
+ await this.createProjectStructure(projectPath, projectName);
158
+ }
159
+ spinner.succeed(chalk_1.default.bold.hex("#3AF08A")(`✓ Project '${projectName}' created successfully!`));
160
+ (0, banner_1.printWelcomeBanner)(projectName);
161
+ }
162
+ catch (error) {
163
+ spinner.fail("Failed to create application");
164
+ console.error(error);
165
+ }
166
+ }
167
+ /**
168
+ * Copy template files to project directory
169
+ */
170
+ async copyTemplate(templatePath, projectPath, projectName) {
171
+ // Copy all files from template
172
+ await fs.copy(templatePath, projectPath, {
173
+ filter: (src) => {
174
+ // Exclude node_modules, dist, and other build artifacts
175
+ const relativePath = path.relative(templatePath, src);
176
+ return (!relativePath.includes("node_modules") &&
177
+ !relativePath.includes("dist") &&
178
+ !relativePath.includes(".turbo") &&
179
+ !relativePath.startsWith(".git"));
180
+ },
181
+ });
182
+ // Update package.json with project name
183
+ const packageJsonPath = path.join(projectPath, "package.json");
184
+ if (await fs.pathExists(packageJsonPath)) {
185
+ const packageJson = await fs.readJSON(packageJsonPath);
186
+ packageJson.name = projectName;
187
+ await fs.writeJSON(packageJsonPath, packageJson, { spaces: 2 });
188
+ }
189
+ }
190
+ async createProjectStructure(projectPath, name) {
191
+ for (const sub of APP_SUBFOLDERS) {
192
+ await fs.ensureDir(path.join(projectPath, "app", sub));
193
+ await fs.writeFile(path.join(projectPath, "app", sub, ".gitkeep"), "");
194
+ }
195
+ for (const folder of EMPTY_TOP_LEVEL_FOLDERS) {
196
+ await fs.ensureDir(path.join(projectPath, folder));
197
+ await fs.writeFile(path.join(projectPath, folder, ".gitkeep"), "");
198
+ }
199
+ await fs.ensureDir(path.join(projectPath, "config"));
200
+ await fs.ensureDir(path.join(projectPath, "bootstrap"));
201
+ await fs.writeFile(path.join(projectPath, "database/migrations/README.md"), "No migration runner ships yet — see docs/requirements.md §4.10. `nyala generate migration <name>` reserves this location.\n");
202
+ await fs.writeFile(path.join(projectPath, "database/seeders/README.md"), "No seeder runner ships yet — see docs/requirements.md §4.10.\n");
203
+ await fs.writeFile(path.join(projectPath, "database/factories/README.md"), "No model factory support ships yet — see docs/requirements.md §4.10.\n");
204
+ await fs.writeFile(path.join(projectPath, "plugins/README.md"), "No plugin loader ships yet — see docs/requirements.md §5. Plugins placed here are not auto-discovered until it does.\n");
205
+ await fs.writeFile(path.join(projectPath, "framework/README.md"), "Reserved for local framework overrides/extensions. Prefer packages published to node_modules; use this only for app-specific patches.\n");
206
+ await this.writeConfigFiles(projectPath);
207
+ await fs.writeFile(path.join(projectPath, "config/index.ts"), this.getConfigIndexTemplate());
208
+ await fs.writeFile(path.join(projectPath, "routes/api.ts"), this.getRoutesTemplate());
209
+ await fs.writeFile(path.join(projectPath, "bootstrap/app.module.ts"), this.getAppModuleTemplate());
210
+ await fs.writeFile(path.join(projectPath, "bootstrap/main.ts"), this.getMainTemplate());
211
+ await fs.writeJSON(path.join(projectPath, "package.json"), this.getPackageJson(name), { spaces: 2 });
212
+ await fs.writeJSON(path.join(projectPath, "tsconfig.json"), this.getTsConfig(), { spaces: 2 });
213
+ await fs.writeFile(path.join(projectPath, ".env"), this.getEnvTemplate());
214
+ await fs.writeFile(path.join(projectPath, ".env.example"), this.getEnvTemplate());
215
+ await fs.writeFile(path.join(projectPath, ".gitignore"), this.getGitignore());
216
+ await fs.writeFile(path.join(projectPath, "README.md"), this.getReadmeTemplate(name));
217
+ }
218
+ async writeConfigFiles(projectPath) {
219
+ const configDir = path.join(projectPath, "config");
220
+ const files = {
221
+ "app.ts": `export default {
222
+ name: process.env.APP_NAME || "Nyala App",
223
+ env: process.env.NODE_ENV || "development",
224
+ url: process.env.APP_URL || "http://localhost:3000",
225
+ };
226
+ `,
227
+ "server.ts": `export default {
228
+ host: process.env.HOST || "0.0.0.0",
229
+ port: Number(process.env.PORT) || 3000,
230
+ bodyLimit: Number(process.env.BODY_LIMIT) || 1_048_576,
231
+ };
232
+ `,
233
+ "database.ts": `// No ORM/database adapter ships yet — see docs/requirements.md §4.8-4.9.
234
+ // This reserves the shape so app/models, app/repositories, and
235
+ // database/migrations can be wired up without a breaking config change.
236
+ export default {
237
+ driver: process.env.DB_DRIVER || "postgres",
238
+ host: process.env.DB_HOST || "localhost",
239
+ port: Number(process.env.DB_PORT) || 5432,
240
+ database: process.env.DB_NAME || "nyala",
241
+ username: process.env.DB_USER || "postgres",
242
+ password: process.env.DB_PASSWORD || "",
243
+ };
244
+ `,
245
+ "auth.ts": `export default {
246
+ jwt: {
247
+ secret: process.env.JWT_SECRET || "change-me-in-production",
248
+ expiresIn: process.env.JWT_EXPIRES_IN || "1h",
249
+ },
250
+ };
251
+ `,
252
+ "cache.ts": `// No cache module ships yet — see docs/requirements.md §4.13.
253
+ export default {
254
+ driver: process.env.CACHE_DRIVER || "memory",
255
+ };
256
+ `,
257
+ "queue.ts": `// No queue module ships yet — see docs/requirements.md §4.14.
258
+ export default {
259
+ driver: process.env.QUEUE_DRIVER || "sync",
260
+ };
261
+ `,
262
+ "mail.ts": `// No mail module ships yet — see docs/requirements.md §4.17.
263
+ export default {
264
+ driver: process.env.MAIL_DRIVER || "smtp",
265
+ from: process.env.MAIL_FROM || "noreply@example.com",
266
+ };
267
+ `,
268
+ "storage.ts": `export default {
269
+ driver: process.env.STORAGE_DRIVER || "local",
270
+ local: {
271
+ root: process.env.STORAGE_LOCAL_ROOT || "./storage",
272
+ },
273
+ };
274
+ `,
275
+ "logging.ts": `export default {
276
+ level: process.env.LOG_LEVEL || "info",
277
+ pretty: process.env.NODE_ENV !== "production",
278
+ };
279
+ `,
280
+ "cors.ts": `export default {
281
+ origin: process.env.CORS_ORIGIN ? process.env.CORS_ORIGIN.split(",") : "*",
282
+ credentials: process.env.CORS_CREDENTIALS === "true",
283
+ };
284
+ `,
285
+ "security.ts": `export default {
286
+ rateLimit: {
287
+ max: Number(process.env.RATE_LIMIT_MAX) || 100,
288
+ windowMs: Number(process.env.RATE_LIMIT_WINDOW_MS) || 60_000,
289
+ },
290
+ };
291
+ `,
292
+ "session.ts": `// No session module ships yet — see docs/requirements.md §4.21.
293
+ export default {
294
+ driver: process.env.SESSION_DRIVER || "cookie",
295
+ };
296
+ `,
297
+ "plugins.ts": `// No plugin loader ships yet — see docs/requirements.md §5.
298
+ export default [];
299
+ `,
300
+ };
301
+ for (const [fileName, contents] of Object.entries(files)) {
302
+ await fs.writeFile(path.join(configDir, fileName), contents);
303
+ }
304
+ }
305
+ getPackageJson(name) {
306
+ return {
307
+ name,
308
+ version: "0.1.0",
309
+ private: true,
310
+ scripts: {
311
+ dev: "ts-node bootstrap/main.ts",
312
+ build: "tsc",
313
+ start: "node dist/bootstrap/main.js",
314
+ test: "vitest run",
315
+ },
316
+ dependencies: {
317
+ "@nyalajs/core": "^0.1.0",
318
+ "@nyalajs/http": "^0.1.0",
319
+ "@nyalajs/config": "^0.1.0",
320
+ "reflect-metadata": "^0.2.1",
321
+ },
322
+ devDependencies: {
323
+ typescript: "^5.3.3",
324
+ "ts-node": "^10.9.2",
325
+ "@types/node": "^20.10.6",
326
+ vitest: "^1.0.4",
327
+ },
328
+ };
329
+ }
330
+ getTsConfig() {
331
+ return {
332
+ compilerOptions: {
333
+ target: "ES2022",
334
+ module: "commonjs",
335
+ lib: ["ES2022"],
336
+ outDir: "./dist",
337
+ rootDir: "./",
338
+ strict: true,
339
+ esModuleInterop: true,
340
+ skipLibCheck: true,
341
+ forceConsistentCasingInFileNames: true,
342
+ experimentalDecorators: true,
343
+ emitDecoratorMetadata: true,
344
+ moduleResolution: "node",
345
+ resolveJsonModule: true,
346
+ },
347
+ include: ["app/**/*", "bootstrap/**/*", "config/**/*", "routes/**/*", "database/**/*"],
348
+ exclude: ["node_modules", "dist", "tests"],
349
+ };
350
+ }
351
+ getEnvTemplate() {
352
+ return `NODE_ENV=development
353
+ PORT=3000
354
+ LOG_LEVEL=info
355
+
356
+ # JWT Configuration
357
+ JWT_SECRET=your-secret-key-change-in-production
358
+ JWT_EXPIRES_IN=1h
359
+ `;
360
+ }
361
+ getGitignore() {
362
+ return `node_modules/
363
+ dist/
364
+ *.log
365
+ .env
366
+ .env.local
367
+ .DS_Store
368
+ coverage/
369
+ `;
370
+ }
371
+ getConfigIndexTemplate() {
372
+ return `import app from "./app";
373
+ import server from "./server";
374
+ import database from "./database";
375
+ import auth from "./auth";
376
+ import cache from "./cache";
377
+ import queue from "./queue";
378
+ import mail from "./mail";
379
+ import storage from "./storage";
380
+ import logging from "./logging";
381
+ import cors from "./cors";
382
+ import security from "./security";
383
+ import session from "./session";
384
+ import plugins from "./plugins";
385
+
386
+ // Aggregates every config/*.ts namespace so bootstrap/app.module.ts can
387
+ // load them all into ConfigService in one place. Read values back with
388
+ // configService.get("server.port") or configService.getNamespace("database").
389
+ export const namespaces = {
390
+ app,
391
+ server,
392
+ database,
393
+ auth,
394
+ cache,
395
+ queue,
396
+ mail,
397
+ storage,
398
+ logging,
399
+ cors,
400
+ security,
401
+ session,
402
+ plugins,
403
+ };
404
+ `;
405
+ }
406
+ getRoutesTemplate() {
407
+ return `// Route registration is decorator-driven today: add @Controller +
408
+ // @Get/@Post/... on a class in app/controllers, then register the
409
+ // controller in bootstrap/app.module.ts (nyala generate controller does
410
+ // this automatically).
411
+ //
412
+ // This file is reserved for a future file-based route table (named
413
+ // routes, groups, versioning — see docs/requirements.md §4.3).
414
+ export {};
415
+ `;
416
+ }
417
+ getAppModuleTemplate() {
418
+ return `import { Module } from "@nyalajs/core";
419
+ import { ConfigService } from "@nyalajs/config";
420
+ import { namespaces } from "../config";
421
+
422
+ // \`nyala generate controller|service\` appends entries here automatically.
423
+ @Module({
424
+ imports: [],
425
+ providers: [
426
+ {
427
+ provide: ConfigService,
428
+ useFactory: () => {
429
+ const configService = new ConfigService();
430
+ for (const [namespace, values] of Object.entries(namespaces)) {
431
+ configService.load(namespace, values as Record<string, any>);
432
+ }
433
+ return configService;
434
+ },
435
+ },
436
+ ],
437
+ controllers: [],
438
+ })
439
+ export class AppModule {}
440
+ `;
441
+ }
442
+ getMainTemplate() {
443
+ return `import "reflect-metadata";
444
+ import { NyalaFactory } from "@nyalajs/core";
445
+ import { FastifyAdapter } from "@nyalajs/http";
446
+ import { ConfigService } from "@nyalajs/config";
447
+ import { AppModule } from "./app.module";
448
+
449
+ async function bootstrap() {
450
+ const app = await NyalaFactory.create(AppModule);
451
+ const config = app.get<ConfigService>(ConfigService);
452
+
453
+ const httpAdapter = new FastifyAdapter(app.getKernel().getContainer(), {
454
+ cors: true,
455
+ helmet: true,
456
+ rateLimit: true,
457
+ });
458
+
459
+ app.setHttpAdapter(httpAdapter);
460
+
461
+ // Graceful shutdown
462
+ const shutdown = () => app.close().then(() => process.exit(0));
463
+ process.on("SIGTERM", shutdown);
464
+ process.on("SIGINT", shutdown);
465
+
466
+ const port = config.get<number>("server.port", 3000);
467
+ const host = config.get<string>("server.host", "0.0.0.0");
468
+
469
+ await app.listen(port, host);
470
+ console.log(\`Server running at http://\${host}:\${port}\`);
471
+ }
472
+
473
+ bootstrap().catch((error) => {
474
+ console.error("Failed to start application:", error);
475
+ process.exit(1);
476
+ });
477
+ `;
478
+ }
479
+ getReadmeTemplate(name) {
480
+ return `# ${name}
481
+
482
+ A Nyala Framework application.
483
+
484
+ ## Getting Started
485
+
486
+ \`\`\`bash
487
+ npm install
488
+ npm run dev
489
+ \`\`\`
490
+
491
+ ## Project Structure
492
+
493
+ - \`app/\` — your application code, one folder per artifact type (controllers, models, services, repositories, middleware, requests, resources, validators, policies, events, listeners, jobs, mail, notifications, exceptions, dto, enums, interfaces, contracts, helpers)
494
+ - \`config/\` — typed configuration, one file per concern
495
+ - \`database/\` — migrations, seeders, factories
496
+ - \`routes/\` — reserved for file-based route tables
497
+ - \`bootstrap/\` — application composition root (\`app.module.ts\`) and entry point (\`main.ts\`)
498
+ - \`storage/\`, \`public/\`, \`resources/\`, \`tests/\`, \`docs/\`, \`plugins/\`, \`framework/\` — see project README sections as each subsystem lands
499
+
500
+ Generate new artifacts with the CLI, e.g.:
501
+
502
+ \`\`\`bash
503
+ nyala generate controller User
504
+ nyala generate service User
505
+ nyala generate middleware Auth
506
+ \`\`\`
507
+
508
+ ## Documentation
509
+
510
+ Visit [Nyala Documentation](https://nyalajs.dev) for more information.
511
+ `;
512
+ }
513
+ }
514
+ exports.NewCommand = NewCommand;
515
+ //# sourceMappingURL=new.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.command.js","sourceRoot":"","sources":["../../src/commands/new.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,2CAA6B;AAC7B,kDAA0B;AAC1B,8CAAsB;AACtB,wDAAgC;AAChC,4CAAqD;AAErD;;;;GAIG;AACH,MAAM,cAAc,GAAG;IACrB,aAAa;IACb,QAAQ;IACR,UAAU;IACV,cAAc;IACd,YAAY;IACZ,UAAU;IACV,WAAW;IACX,YAAY;IACZ,UAAU;IACV,QAAQ;IACR,WAAW;IACX,MAAM;IACN,MAAM;IACN,eAAe;IACf,YAAY;IACZ,KAAK;IACL,OAAO;IACP,YAAY;IACZ,WAAW;IACX,SAAS;CACV,CAAC;AAEF,MAAM,uBAAuB,GAAG;IAC9B,qBAAqB;IACrB,kBAAkB;IAClB,oBAAoB;IACpB,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,WAAW;IACX,OAAO;IACP,MAAM;IACN,SAAS;IACT,WAAW;CACZ,CAAC;AAEF,MAAa,UAAU;IACrB,KAAK,CAAC,OAAO,CAAC,IAAwB,EAAE,OAAY;QAClD,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC;QAC9C,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;QAExC,8CAA8C;QAC9C,MAAM,OAAO,GAAU,EAAE,CAAC;QAE1B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,6CAA6C;gBACtD,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC;aACzE,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,+CAA+C;gBACxD,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,yDAAyD;wBAC/D,KAAK,EAAE,KAAK;qBACb;oBACD;wBACE,IAAI,EAAE,yDAAyD;wBAC/D,KAAK,EAAE,MAAM;qBACd;oBACD;wBACE,IAAI,EAAE,yCAAyC;wBAC/C,KAAK,EAAE,OAAO;qBACf;iBACF;gBACD,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,8CAA8C;gBACvD,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,UAAU,EAAE;oBACvD,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;oBACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;iBACpC;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/C,WAAW,GAAG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;YACjD,QAAQ,GAAG,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;YACxC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,mCAAmC,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAE9E,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAY,CAAC,CAAC;YAE3D,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,aAAa,WAAW,iBAAiB,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;YAED,qCAAqC;YACrC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,EAAE,GAAG,QAAQ,UAAU,CAAC,CAAC;YACvF,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAEzD,IAAI,cAAc,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,GAAG,WAAW,QAAQ,sBAAsB,CAAC;gBACzD,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,WAAY,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,GAAG,qCAAqC,CAAC;gBACrD,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,WAAY,CAAC,CAAC;YAC/D,CAAC;YAED,OAAO,CAAC,OAAO,CACb,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CACvB,cAAc,WAAW,yBAAyB,CACnD,CACF,CAAC;YAEF,IAAA,2BAAkB,EAAC,WAAY,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CACxB,YAAoB,EACpB,WAAmB,EACnB,WAAmB;QAEnB,+BAA+B;QAC/B,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;YACvC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;gBACd,wDAAwD;gBACxD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;gBACtD,OAAO,CACL,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;oBACtC,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC9B,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAChC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CACjC,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,wCAAwC;QACxC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC/D,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YACvD,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC;YAC/B,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,WAAmB,EAAE,IAAY;QACpE,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YACvD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,uBAAuB,EAAE,CAAC;YAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;YACnD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAExD,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,+BAA+B,CAAC,EACvD,6HAA6H,CAC9H,CAAC;QACF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,4BAA4B,CAAC,EACpD,gEAAgE,CACjE,CAAC;QACF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,8BAA8B,CAAC,EACtD,wEAAwE,CACzE,CAAC;QACF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,EAC3C,wHAAwH,CACzH,CAAC;QACF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,EAC7C,yIAAyI,CAC1I,CAAC;QAEF,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAEzC,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,EACzC,IAAI,CAAC,sBAAsB,EAAE,CAC9B,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EACvC,IAAI,CAAC,iBAAiB,EAAE,CACzB,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,yBAAyB,CAAC,EACjD,IAAI,CAAC,oBAAoB,EAAE,CAC5B,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,EAC3C,IAAI,CAAC,eAAe,EAAE,CACvB,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EACtC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EACzB,EAAE,MAAM,EAAE,CAAC,EAAE,CACd,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EACvC,IAAI,CAAC,WAAW,EAAE,EAClB,EAAE,MAAM,EAAE,CAAC,EAAE,CACd,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1E,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAClF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC9E,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACxF,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAEnD,MAAM,KAAK,GAA2B;YACpC,QAAQ,EAAE;;;;;CAKf;YACK,WAAW,EAAE;;;;;CAKlB;YACK,aAAa,EAAE;;;;;;;;;;;CAWpB;YACK,SAAS,EAAE;;;;;;CAMhB;YACK,UAAU,EAAE;;;;CAIjB;YACK,UAAU,EAAE;;;;CAIjB;YACK,SAAS,EAAE;;;;;CAKhB;YACK,YAAY,EAAE;;;;;;CAMnB;YACK,YAAY,EAAE;;;;CAInB;YACK,SAAS,EAAE;;;;CAIhB;YACK,aAAa,EAAE;;;;;;CAMpB;YACK,YAAY,EAAE;;;;CAInB;YACK,YAAY,EAAE;;CAEnB;SACI,CAAC;QAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,IAAY;QACjC,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,GAAG,EAAE,2BAA2B;gBAChC,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,6BAA6B;gBACpC,IAAI,EAAE,YAAY;aACnB;YACD,YAAY,EAAE;gBACZ,eAAe,EAAE,QAAQ;gBACzB,eAAe,EAAE,QAAQ;gBACzB,iBAAiB,EAAE,QAAQ;gBAC3B,kBAAkB,EAAE,QAAQ;aAC7B;YACD,eAAe,EAAE;gBACf,UAAU,EAAE,QAAQ;gBACpB,SAAS,EAAE,SAAS;gBACpB,aAAa,EAAE,UAAU;gBACzB,MAAM,EAAE,QAAQ;aACjB;SACF,CAAC;IACJ,CAAC;IAEO,WAAW;QACjB,OAAO;YACL,eAAe,EAAE;gBACf,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,UAAU;gBAClB,GAAG,EAAE,CAAC,QAAQ,CAAC;gBACf,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI;gBACZ,eAAe,EAAE,IAAI;gBACrB,YAAY,EAAE,IAAI;gBAClB,gCAAgC,EAAE,IAAI;gBACtC,sBAAsB,EAAE,IAAI;gBAC5B,qBAAqB,EAAE,IAAI;gBAC3B,gBAAgB,EAAE,MAAM;gBACxB,iBAAiB,EAAE,IAAI;aACxB;YACD,OAAO,EAAE,CAAC,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC;YACtF,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;SAC3C,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,OAAO;;;;;;;CAOV,CAAC;IACA,CAAC;IAEO,YAAY;QAClB,OAAO;;;;;;;CAOV,CAAC;IACA,CAAC;IAEO,sBAAsB;QAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCV,CAAC;IACA,CAAC;IAEO,iBAAiB;QACvB,OAAO;;;;;;;;CAQV,CAAC;IACA,CAAC;IAEO,oBAAoB;QAC1B,OAAO;;;;;;;;;;;;;;;;;;;;;;CAsBV,CAAC;IACA,CAAC;IAEO,eAAe;QACrB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCV,CAAC;IACA,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACpC,OAAO,KAAK,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BnB,CAAC;IACA,CAAC;CACF;AA5fD,gCA4fC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * db:seed — Discovers all seeder files in database/seeders/, instantiates
3
+ * each one, connects to the database, and calls seeder.run(db).
4
+ *
5
+ * Usage:
6
+ * nyala db:seed → runs all seeders in alphabetical order
7
+ * nyala db:seed --class UserSeeder → runs only that seeder
8
+ */
9
+ export declare class SeedCommand {
10
+ handle(options?: {
11
+ class?: string;
12
+ }): Promise<void>;
13
+ private buildConnectionString;
14
+ }
15
+ //# sourceMappingURL=seed.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.command.d.ts","sourceRoot":"","sources":["../../src/commands/seed.command.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,qBAAa,WAAW;IACd,MAAM,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA0F7D,OAAO,CAAC,qBAAqB;CAWhC"}