@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.
- package/dist/bin/nyala.d.ts +3 -0
- package/dist/bin/nyala.d.ts.map +1 -0
- package/dist/bin/nyala.js +190 -0
- package/dist/bin/nyala.js.map +1 -0
- package/dist/commands/generate.command.d.ts +63 -0
- package/dist/commands/generate.command.d.ts.map +1 -0
- package/dist/commands/generate.command.js +554 -0
- package/dist/commands/generate.command.js.map +1 -0
- package/dist/commands/migrate.command.d.ts +15 -0
- package/dist/commands/migrate.command.d.ts.map +1 -0
- package/dist/commands/migrate.command.js +179 -0
- package/dist/commands/migrate.command.js.map +1 -0
- package/dist/commands/new.command.d.ts +19 -0
- package/dist/commands/new.command.d.ts.map +1 -0
- package/dist/commands/new.command.helpers.d.ts +6 -0
- package/dist/commands/new.command.helpers.d.ts.map +1 -0
- package/dist/commands/new.command.helpers.js +92 -0
- package/dist/commands/new.command.helpers.js.map +1 -0
- package/dist/commands/new.command.js +515 -0
- package/dist/commands/new.command.js.map +1 -0
- package/dist/commands/seed.command.d.ts +15 -0
- package/dist/commands/seed.command.d.ts.map +1 -0
- package/dist/commands/seed.command.js +144 -0
- package/dist/commands/seed.command.js.map +1 -0
- package/dist/commands/validate.command.d.ts +7 -0
- package/dist/commands/validate.command.d.ts.map +1 -0
- package/dist/commands/validate.command.js +127 -0
- package/dist/commands/validate.command.js.map +1 -0
- package/dist/utils/banner.d.ts +5 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +174 -0
- package/dist/utils/banner.js.map +1 -0
- package/dist/utils/naming.d.ts +4 -0
- package/dist/utils/naming.d.ts.map +1 -0
- package/dist/utils/naming.js +33 -0
- package/dist/utils/naming.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|