@abdul53245/create-dev-stack 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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend.d.ts","sourceRoot":"","sources":["../../src/generator/frontend.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAsB1E"}
@@ -0,0 +1,423 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ export async function generateFrontend(config, appsDir) {
4
+ if (!config.frontend || config.frontend === 'none') {
5
+ return;
6
+ }
7
+ const targetDir = path.join(appsDir, 'web');
8
+ await fs.ensureDir(targetDir);
9
+ switch (config.frontend) {
10
+ case 'nextjs':
11
+ await writeNextApp(targetDir);
12
+ break;
13
+ case 'react':
14
+ await writeReactApp(targetDir);
15
+ break;
16
+ case 'vue':
17
+ await writeVueApp(targetDir);
18
+ break;
19
+ case 'angular':
20
+ await writeAngularApp(targetDir);
21
+ break;
22
+ }
23
+ }
24
+ async function writeNextApp(targetDir) {
25
+ const packageJson = {
26
+ name: '@app/web',
27
+ version: '1.0.0',
28
+ private: true,
29
+ scripts: {
30
+ dev: 'next dev -p 3000',
31
+ build: 'next build',
32
+ start: 'next start -p 3000',
33
+ },
34
+ dependencies: {
35
+ next: '14.2.15',
36
+ react: '18.3.1',
37
+ 'react-dom': '18.3.1',
38
+ },
39
+ devDependencies: {
40
+ '@types/node': '^22.10.1',
41
+ '@types/react': '^18.3.3',
42
+ '@types/react-dom': '^18.3.1',
43
+ typescript: '^5.6.3',
44
+ },
45
+ };
46
+ const tsconfig = {
47
+ compilerOptions: {
48
+ target: 'ES2022',
49
+ lib: ['dom', 'dom.iterable', 'es2022'],
50
+ allowJs: true,
51
+ skipLibCheck: true,
52
+ strict: true,
53
+ noEmit: true,
54
+ esModuleInterop: true,
55
+ module: 'esnext',
56
+ moduleResolution: 'bundler',
57
+ resolveJsonModule: true,
58
+ isolatedModules: true,
59
+ jsx: 'preserve',
60
+ incremental: true,
61
+ plugins: [{ name: 'next' }],
62
+ paths: { '@/*': ['./src/*'] },
63
+ },
64
+ include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],
65
+ exclude: ['node_modules'],
66
+ };
67
+ const appLayout = `import type { Metadata } from 'next';
68
+ import './globals.css';
69
+
70
+ export const metadata: Metadata = {
71
+ title: 'Dev Stack App',
72
+ description: 'Generated with create-dev-stack',
73
+ };
74
+
75
+ export default function RootLayout({ children }: { children: React.ReactNode }) {
76
+ return (
77
+ <html lang="en">
78
+ <body>{children}</body>
79
+ </html>
80
+ );
81
+ }
82
+ `;
83
+ const page = `export default function Home() {
84
+ return (
85
+ <main style={{ padding: '2rem', fontFamily: 'sans-serif' }}>
86
+ <h1>App is ready</h1>
87
+ <p>Your Next.js workspace is connected to the API and database services.</p>
88
+ </main>
89
+ );
90
+ }
91
+ `;
92
+ const globals = `:root { color-scheme: light dark; font-family: Arial, sans-serif; }
93
+ body { margin: 0; min-height: 100vh; background: #f8fafc; color: #0f172a; }
94
+ `;
95
+ await fs.writeFile(path.join(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2) + '\n');
96
+ await fs.writeFile(path.join(targetDir, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2) + '\n');
97
+ await fs.writeFile(path.join(targetDir, 'next-env.d.ts'), "/// <reference types=\"next\" />\n/// <reference types=\"next/image-types/global\" />\n\n// NOTE: This file should not be edited\n");
98
+ await fs.writeFile(path.join(targetDir, 'next.config.js'), "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nmodule.exports = nextConfig;\n");
99
+ await fs.ensureDir(path.join(targetDir, 'src', 'app'));
100
+ await fs.writeFile(path.join(targetDir, 'src', 'app', 'layout.tsx'), appLayout);
101
+ await fs.writeFile(path.join(targetDir, 'src', 'app', 'page.tsx'), page);
102
+ await fs.writeFile(path.join(targetDir, 'src', 'app', 'globals.css'), globals);
103
+ }
104
+ async function writeReactApp(targetDir) {
105
+ const packageJson = {
106
+ name: '@app/web',
107
+ version: '1.0.0',
108
+ private: true,
109
+ type: 'module',
110
+ scripts: {
111
+ dev: 'vite --host 0.0.0.0 --port 3000',
112
+ build: 'tsc -b && vite build',
113
+ preview: 'vite preview --host 0.0.0.0 --port 3000',
114
+ },
115
+ dependencies: {
116
+ react: '^18.3.1',
117
+ 'react-dom': '^18.3.1',
118
+ },
119
+ devDependencies: {
120
+ '@types/react': '^18.3.3',
121
+ '@types/react-dom': '^18.3.1',
122
+ '@vitejs/plugin-react': '^4.3.2',
123
+ typescript: '^5.6.3',
124
+ vite: '^5.4.10',
125
+ },
126
+ };
127
+ const tsconfig = {
128
+ files: [],
129
+ references: [{ path: './tsconfig.app.json' }, { path: './tsconfig.node.json' }],
130
+ };
131
+ const tsconfigApp = {
132
+ compilerOptions: {
133
+ target: 'ES2022',
134
+ useDefineForClassFields: true,
135
+ lib: ['ES2022', 'DOM', 'DOM.Iterable'],
136
+ module: 'ESNext',
137
+ skipLibCheck: true,
138
+ moduleResolution: 'Bundler',
139
+ allowImportingTsExtensions: false,
140
+ resolveJsonModule: true,
141
+ isolatedModules: true,
142
+ noEmit: true,
143
+ jsx: 'react-jsx',
144
+ strict: true,
145
+ },
146
+ include: ['src'],
147
+ };
148
+ const tsconfigNode = {
149
+ compilerOptions: {
150
+ composite: true,
151
+ module: 'ESNext',
152
+ moduleResolution: 'Bundler',
153
+ allowSyntheticDefaultImports: true,
154
+ },
155
+ include: ['vite.config.ts'],
156
+ };
157
+ const viteConfig = `import { defineConfig } from 'vite';
158
+ import react from '@vitejs/plugin-react';
159
+
160
+ export default defineConfig({
161
+ plugins: [react()],
162
+ server: {
163
+ host: '0.0.0.0',
164
+ port: 3000,
165
+ },
166
+ });
167
+ `;
168
+ const indexHtml = `<!doctype html>
169
+ <html lang="en">
170
+ <head>
171
+ <meta charset="UTF-8" />
172
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
173
+ <title>Dev Stack App</title>
174
+ </head>
175
+ <body>
176
+ <div id="root"></div>
177
+ <script type="module" src="/src/main.tsx"></script>
178
+ </body>
179
+ </html>
180
+ `;
181
+ const mainTsx = `import React from 'react';
182
+ import ReactDOM from 'react-dom/client';
183
+ import App from './App';
184
+ import './index.css';
185
+
186
+ ReactDOM.createRoot(document.getElementById('root')!).render(
187
+ <React.StrictMode>
188
+ <App />
189
+ </React.StrictMode>,
190
+ );
191
+ `;
192
+ const appTsx = `export default function App() {
193
+ return (
194
+ <main style={{ padding: '2rem', fontFamily: 'sans-serif', lineHeight: 1.5 }}>
195
+ <h1>App is ready</h1>
196
+ <p>Your React frontend is running.</p>
197
+ <p>API health check: <a href="http://localhost:4000/health" target="_blank" rel="noreferrer">http://localhost:4000/health</a></p>
198
+ <p>Start it with <code>npm run web:dev</code> from the project root.</p>
199
+ </main>
200
+ );
201
+ }
202
+ `;
203
+ const indexCss = `:root { font-family: Inter, system-ui, sans-serif; color: #0f172a; background: #f8fafc; }
204
+ body { margin: 0; min-height: 100vh; }
205
+ main { padding: 2rem; }
206
+ `;
207
+ await fs.writeFile(path.join(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2) + '\n');
208
+ await fs.writeFile(path.join(targetDir, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2) + '\n');
209
+ await fs.writeFile(path.join(targetDir, 'tsconfig.app.json'), JSON.stringify(tsconfigApp, null, 2) + '\n');
210
+ await fs.writeFile(path.join(targetDir, 'tsconfig.node.json'), JSON.stringify(tsconfigNode, null, 2) + '\n');
211
+ await fs.writeFile(path.join(targetDir, 'vite.config.ts'), viteConfig);
212
+ await fs.writeFile(path.join(targetDir, 'index.html'), indexHtml);
213
+ await fs.ensureDir(path.join(targetDir, 'src'));
214
+ await fs.writeFile(path.join(targetDir, 'src', 'main.tsx'), mainTsx);
215
+ await fs.writeFile(path.join(targetDir, 'src', 'App.tsx'), appTsx);
216
+ await fs.writeFile(path.join(targetDir, 'src', 'index.css'), indexCss);
217
+ }
218
+ async function writeVueApp(targetDir) {
219
+ const packageJson = {
220
+ name: '@app/web',
221
+ version: '1.0.0',
222
+ private: true,
223
+ type: 'module',
224
+ scripts: {
225
+ dev: 'vite --host 0.0.0.0 --port 3000',
226
+ build: 'vue-tsc -b && vite build',
227
+ preview: 'vite preview --host 0.0.0.0 --port 3000',
228
+ },
229
+ dependencies: {
230
+ vue: '^3.5.12',
231
+ },
232
+ devDependencies: {
233
+ '@vitejs/plugin-vue': '^5.0.0',
234
+ typescript: '^5.6.3',
235
+ 'vite': '^5.4.10',
236
+ 'vue-tsc': '^2.1.8',
237
+ },
238
+ };
239
+ const tsconfig = {
240
+ compilerOptions: {
241
+ target: 'ES2022',
242
+ useDefineForClassFields: true,
243
+ module: 'ESNext',
244
+ moduleResolution: 'Bundler',
245
+ strict: true,
246
+ jsx: 'preserve',
247
+ resolveJsonModule: true,
248
+ isolatedModules: true,
249
+ lib: ['ES2022', 'DOM', 'DOM.Iterable'],
250
+ skipLibCheck: true,
251
+ noEmit: true,
252
+ },
253
+ include: ['src/**/*.ts', 'src/**/*.d.ts', 'src/**/*.tsx', 'src/**/*.vue'],
254
+ };
255
+ const viteConfig = `import { defineConfig } from 'vite';
256
+ import vue from '@vitejs/plugin-vue';
257
+
258
+ export default defineConfig({
259
+ plugins: [vue()],
260
+ server: {
261
+ host: '0.0.0.0',
262
+ port: 3000,
263
+ },
264
+ });
265
+ `;
266
+ const indexHtml = `<!doctype html>
267
+ <html lang="en">
268
+ <head>
269
+ <meta charset="UTF-8" />
270
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
271
+ <title>Dev Stack App</title>
272
+ </head>
273
+ <body>
274
+ <div id="app"></div>
275
+ <script type="module" src="/src/main.ts"></script>
276
+ </body>
277
+ </html>
278
+ `;
279
+ const mainTs = `import { createApp } from 'vue';
280
+ import App from './App.vue';
281
+ import './style.css';
282
+
283
+ createApp(App).mount('#app');
284
+ `;
285
+ const appVue = `<template>
286
+ <main>
287
+ <h1>App is ready</h1>
288
+ <p>Your Vue frontend is running.</p>
289
+ <p>API health check: <a href="http://localhost:4000/health" target="_blank" rel="noreferrer">http://localhost:4000/health</a></p>
290
+ <p>Start it with <code>npm run web:dev</code> from the project root.</p>
291
+ </main>
292
+ </template>
293
+ `;
294
+ const styleCss = `:root { font-family: Inter, system-ui, sans-serif; color: #0f172a; background: #f8fafc; }
295
+ body { margin: 0; min-height: 100vh; }
296
+ main { padding: 2rem; }
297
+ `;
298
+ await fs.writeFile(path.join(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2) + '\n');
299
+ await fs.writeFile(path.join(targetDir, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2) + '\n');
300
+ await fs.writeFile(path.join(targetDir, 'vite.config.ts'), viteConfig);
301
+ await fs.writeFile(path.join(targetDir, 'index.html'), indexHtml);
302
+ await fs.ensureDir(path.join(targetDir, 'src'));
303
+ await fs.writeFile(path.join(targetDir, 'src', 'main.ts'), mainTs);
304
+ await fs.writeFile(path.join(targetDir, 'src', 'App.vue'), appVue);
305
+ await fs.writeFile(path.join(targetDir, 'src', 'style.css'), styleCss);
306
+ }
307
+ async function writeAngularApp(targetDir) {
308
+ const packageJson = {
309
+ name: '@app/web',
310
+ version: '1.0.0',
311
+ private: true,
312
+ scripts: {
313
+ dev: 'ng serve --host 0.0.0.0 --port 3000',
314
+ build: 'ng build',
315
+ },
316
+ dependencies: {
317
+ '@angular/animations': '^18.2.0',
318
+ '@angular/common': '^18.2.0',
319
+ '@angular/compiler': '^18.2.0',
320
+ '@angular/core': '^18.2.0',
321
+ '@angular/forms': '^18.2.0',
322
+ '@angular/platform-browser': '^18.2.0',
323
+ '@angular/platform-browser-dynamic': '^18.2.0',
324
+ '@angular/router': '^18.2.0',
325
+ rxjs: '^7.8.0',
326
+ tslib: '^2.3.0',
327
+ 'zone.js': '~0.14.10',
328
+ },
329
+ devDependencies: {
330
+ '@angular/cli': '^18.2.0',
331
+ '@angular/compiler-cli': '^18.2.0',
332
+ 'typescript': '~5.5.4',
333
+ },
334
+ };
335
+ const angularJson = {
336
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
337
+ version: 1,
338
+ projects: {
339
+ web: {
340
+ projectType: 'application',
341
+ root: '',
342
+ sourceRoot: 'src',
343
+ architect: {
344
+ build: {
345
+ builder: '@angular-devkit/build-angular:browser',
346
+ options: {
347
+ outputPath: 'dist/web',
348
+ index: 'src/index.html',
349
+ main: 'src/main.ts',
350
+ polyfills: 'src/polyfills.ts',
351
+ tsConfig: 'tsconfig.app.json',
352
+ },
353
+ },
354
+ },
355
+ },
356
+ },
357
+ };
358
+ const tsconfigApp = {
359
+ compilerOptions: {
360
+ target: 'ES2022',
361
+ module: 'ES2022',
362
+ moduleResolution: 'Node',
363
+ lib: ['ES2022', 'DOM'],
364
+ experimentalDecorators: true,
365
+ emitDecoratorMetadata: true,
366
+ strict: true,
367
+ skipLibCheck: true,
368
+ types: ['node'],
369
+ },
370
+ include: ['src/**/*.ts'],
371
+ };
372
+ const indexHtml = `<!doctype html>
373
+ <html lang="en">
374
+ <head>
375
+ <meta charset="utf-8" />
376
+ <title>Dev Stack App</title>
377
+ <base href="/" />
378
+ </head>
379
+ <body>
380
+ <app-root></app-root>
381
+ </body>
382
+ </html>
383
+ `;
384
+ const mainTs = `import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
385
+ import { AppModule } from './app/app.module';
386
+ import 'zone.js';
387
+
388
+ platformBrowserDynamic().bootstrapModule(AppModule);
389
+ `;
390
+ const polyfillsTs = `import 'zone.js';
391
+ `;
392
+ const appModule = `import { NgModule } from '@angular/core';
393
+ import { BrowserModule } from '@angular/platform-browser';
394
+ import { AppComponent } from './app.component';
395
+
396
+ @NgModule({
397
+ declarations: [AppComponent],
398
+ imports: [BrowserModule],
399
+ bootstrap: [AppComponent],
400
+ })
401
+ export class AppModule {}
402
+ `;
403
+ const appComponent = `import { Component } from '@angular/core';
404
+
405
+ @Component({
406
+ selector: 'app-root',
407
+ template: '<main><h1>App is ready</h1><p>Your Angular front end is connected to the generated stack.</p></main>',
408
+ })
409
+ export class AppComponent {}
410
+ `;
411
+ await fs.writeFile(path.join(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2) + '\n');
412
+ await fs.writeFile(path.join(targetDir, 'angular.json'), JSON.stringify(angularJson, null, 2) + '\n');
413
+ await fs.writeFile(path.join(targetDir, 'tsconfig.json'), JSON.stringify({ extends: './tsconfig.app.json' }, null, 2) + '\n');
414
+ await fs.writeFile(path.join(targetDir, 'tsconfig.app.json'), JSON.stringify(tsconfigApp, null, 2) + '\n');
415
+ await fs.ensureDir(path.join(targetDir, 'src'));
416
+ await fs.writeFile(path.join(targetDir, 'src', 'index.html'), indexHtml);
417
+ await fs.writeFile(path.join(targetDir, 'src', 'main.ts'), mainTs);
418
+ await fs.writeFile(path.join(targetDir, 'src', 'polyfills.ts'), polyfillsTs);
419
+ await fs.ensureDir(path.join(targetDir, 'src', 'app'));
420
+ await fs.writeFile(path.join(targetDir, 'src', 'app', 'app.module.ts'), appModule);
421
+ await fs.writeFile(path.join(targetDir, 'src', 'app', 'app.component.ts'), appComponent);
422
+ }
423
+ //# sourceMappingURL=frontend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend.js","sourceRoot":"","sources":["../../src/generator/frontend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { StackConfig } from '../types.js';
2
+ export declare function generateFullStack(config: StackConfig): Promise<void>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,WAAW,iBAoD1D"}
@@ -0,0 +1,54 @@
1
+ import { execSync } from 'child_process';
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ import { generateBackend } from './backend.js';
5
+ import { generateDockerConfig } from './docker.js';
6
+ import { generateEnvFile } from './env.js';
7
+ import { generateFrontend } from './frontend.js';
8
+ import { generateORM } from './orm.js';
9
+ export async function generateFullStack(config) {
10
+ const rootDir = path.join(process.cwd(), config.projectName);
11
+ await fs.ensureDir(rootDir);
12
+ const appsDir = path.join(rootDir, 'apps');
13
+ const packagesDir = path.join(rootDir, 'packages');
14
+ const infraDir = path.join(rootDir, 'infra', 'docker');
15
+ await fs.ensureDir(appsDir);
16
+ await fs.ensureDir(packagesDir);
17
+ await fs.ensureDir(infraDir);
18
+ try {
19
+ execSync('git init', { cwd: rootDir, stdio: 'ignore' });
20
+ }
21
+ catch {
22
+ }
23
+ const rootPkg = {
24
+ name: config.projectName,
25
+ version: '0.0.0',
26
+ private: true,
27
+ workspaces: ['apps/*', 'packages/*'],
28
+ scripts: {
29
+ dev: 'concurrently -n api,web -c blue,green "npm run api:dev" "npm run web:dev"',
30
+ build: 'npm run build --workspaces --if-present',
31
+ 'docker:up': 'docker compose -f infra/docker/docker-compose.yml up -d',
32
+ 'docker:down': 'docker compose -f infra/docker/docker-compose.yml down',
33
+ 'docker:logs': 'docker compose -f infra/docker/docker-compose.yml logs -f',
34
+ 'api:dev': 'npm run dev --workspace apps/api',
35
+ 'web:dev': 'npm run dev --workspace apps/web',
36
+ },
37
+ devDependencies: {
38
+ concurrently: '^9.0.4',
39
+ },
40
+ };
41
+ await fs.writeFile(path.join(rootDir, 'package.json'), JSON.stringify(rootPkg, null, 2) + '\n');
42
+ await fs.writeFile(path.join(rootDir, 'README.md'), `# ${config.projectName}\n\nA production-oriented development stack generated by create-dev-stack.\n\n## Structure\n\n- apps/api - backend service\n- apps/web - frontend service\n- packages/database - data access layer\n- infra/docker - container orchestration\n\n## Start the app\n\nFrom the project root:\n\n- npm run api:dev\n- npm run web:dev\n\nOr start both together:\n\n- npm run dev\n\nThe API will be available at http://localhost:4000 and the web app at http://localhost:3000.\n\n## Other commands\n\n- npm run build\n- npm run docker:up\n`);
43
+ await generateFrontend(config, appsDir);
44
+ await generateBackend(config, appsDir);
45
+ await generateORM(config, packagesDir);
46
+ await generateDockerConfig(config, rootDir);
47
+ await generateEnvFile(config, rootDir);
48
+ try {
49
+ execSync('npm install', { cwd: rootDir, stdio: 'inherit' });
50
+ }
51
+ catch {
52
+ }
53
+ }
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAmB;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAE7D,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAChC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAE7B,IAAI,CAAC;QACH,QAAQ,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;IACT,CAAC;IAED,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,MAAM,CAAC,WAAW;QACxB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;QACpC,OAAO,EAAE;YACP,GAAG,EAAE,2EAA2E;YAChF,KAAK,EAAE,yCAAyC;YAChD,WAAW,EAAE,yDAAyD;YACtE,aAAa,EAAE,wDAAwD;YACvE,aAAa,EAAE,2DAA2D;YAC1E,SAAS,EAAE,kCAAkC;YAC7C,SAAS,EAAE,kCAAkC;SAC9C;QACD,eAAe,EAAE;YACf,YAAY,EAAE,QAAQ;SACvB;KACF,CAAC;IAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAChG,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAC/B,KAAK,MAAM,CAAC,WAAW,+gBAA+gB,CACviB,CAAC;IAEF,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,MAAM,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,QAAQ,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;IACT,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { StackConfig } from '../types.js';
2
+ export declare function generateORM(config: StackConfig, packagesDir: string): Promise<void>;
3
+ //# sourceMappingURL=orm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orm.d.ts","sourceRoot":"","sources":["../../src/generator/orm.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAoBzE"}