fragment-ts 1.0.2 → 1.0.3
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 +401 -0
- package/USAGE.md +1439 -0
- package/bin/fragment.js +2 -0
- package/dist/ai/ai.module.d.ts +27 -0
- package/dist/ai/ai.module.d.ts.map +1 -0
- package/dist/ai/ai.module.js +77 -0
- package/dist/ai/ai.module.js.map +1 -0
- package/dist/auth/auth.module.d.ts +18 -0
- package/dist/auth/auth.module.d.ts.map +1 -0
- package/dist/auth/auth.module.js +89 -0
- package/dist/auth/auth.module.js.map +1 -0
- package/dist/cli/commands/build.command.d.ts +6 -1
- package/dist/cli/commands/build.command.d.ts.map +1 -0
- package/dist/cli/commands/build.command.js +130 -10
- package/dist/cli/commands/build.command.js.map +1 -1
- package/dist/cli/commands/diagnostics.command.d.ts +16 -0
- package/dist/cli/commands/diagnostics.command.d.ts.map +1 -0
- package/dist/cli/commands/diagnostics.command.js +419 -0
- package/dist/cli/commands/diagnostics.command.js.map +1 -0
- package/dist/cli/commands/generate.command.d.ts +13 -6
- package/dist/cli/commands/generate.command.d.ts.map +1 -0
- package/dist/cli/commands/generate.command.js +200 -128
- package/dist/cli/commands/generate.command.js.map +1 -1
- package/dist/cli/commands/init.command.d.ts +11 -5
- package/dist/cli/commands/init.command.d.ts.map +1 -0
- package/dist/cli/commands/init.command.js +267 -305
- package/dist/cli/commands/init.command.js.map +1 -1
- package/dist/cli/commands/migrate.command.d.ts +12 -5
- package/dist/cli/commands/migrate.command.d.ts.map +1 -0
- package/dist/cli/commands/migrate.command.js +211 -83
- package/dist/cli/commands/migrate.command.js.map +1 -1
- package/dist/cli/commands/serve.command.d.ts +5 -4
- package/dist/cli/commands/serve.command.d.ts.map +1 -0
- package/dist/cli/commands/serve.command.js +178 -21
- package/dist/cli/commands/serve.command.js.map +1 -1
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +22 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/container/di-container.d.ts +13 -7
- package/dist/core/container/di-container.d.ts.map +1 -0
- package/dist/core/container/di-container.js +75 -25
- package/dist/core/container/di-container.js.map +1 -1
- package/dist/core/decorators/application.decorator.d.ts +8 -0
- package/dist/core/decorators/application.decorator.d.ts.map +1 -0
- package/dist/core/decorators/application.decorator.js +16 -0
- package/dist/core/decorators/application.decorator.js.map +1 -0
- package/dist/core/decorators/auto-configuration.decorator.d.ts +2 -0
- package/dist/core/decorators/auto-configuration.decorator.d.ts.map +1 -0
- package/dist/core/decorators/auto-configuration.decorator.js +19 -0
- package/dist/core/decorators/auto-configuration.decorator.js.map +1 -0
- package/dist/core/decorators/conditional.decorators.d.ts +4 -0
- package/dist/core/decorators/conditional.decorators.d.ts.map +1 -0
- package/dist/core/decorators/conditional.decorators.js +22 -0
- package/dist/core/decorators/conditional.decorators.js.map +1 -0
- package/dist/core/decorators/controller.decorator.d.ts +1 -3
- package/dist/core/decorators/controller.decorator.d.ts.map +1 -0
- package/dist/core/decorators/controller.decorator.js +12 -9
- package/dist/core/decorators/controller.decorator.js.map +1 -1
- package/dist/core/decorators/http.decorators.d.ts +12 -0
- package/dist/core/decorators/http.decorators.d.ts.map +1 -0
- package/dist/core/decorators/http.decorators.js +52 -0
- package/dist/core/decorators/http.decorators.js.map +1 -0
- package/dist/core/decorators/injectable.decorator.d.ts +3 -3
- package/dist/core/decorators/injectable.decorator.d.ts.map +1 -0
- package/dist/core/decorators/injectable.decorator.js +11 -8
- package/dist/core/decorators/injectable.decorator.js.map +1 -1
- package/dist/core/decorators/injection.decorators.d.ts +5 -0
- package/dist/core/decorators/injection.decorators.d.ts.map +1 -0
- package/dist/core/decorators/injection.decorators.js +29 -0
- package/dist/core/decorators/injection.decorators.js.map +1 -0
- package/dist/core/decorators/repository.decorator.d.ts +1 -0
- package/dist/core/decorators/repository.decorator.d.ts.map +1 -0
- package/dist/core/decorators/repository.decorator.js +12 -1
- package/dist/core/decorators/repository.decorator.js.map +1 -1
- package/dist/core/decorators/service.decorator.d.ts +1 -0
- package/dist/core/decorators/service.decorator.d.ts.map +1 -0
- package/dist/core/decorators/service.decorator.js +12 -1
- package/dist/core/decorators/service.decorator.js.map +1 -1
- package/dist/core/index.d.ts +13 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +29 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/loader/file-loader.d.ts +5 -0
- package/dist/core/loader/file-loader.d.ts.map +1 -0
- package/dist/core/loader/file-loader.js +85 -0
- package/dist/core/loader/file-loader.js.map +1 -0
- package/dist/core/metadata/metadata-keys.d.ts +20 -0
- package/dist/core/metadata/metadata-keys.d.ts.map +1 -0
- package/dist/core/metadata/metadata-keys.js +23 -0
- package/dist/core/metadata/metadata-keys.js.map +1 -0
- package/dist/core/metadata/metadata-storage.d.ts +36 -0
- package/dist/core/metadata/metadata-storage.d.ts.map +1 -0
- package/dist/core/metadata/metadata-storage.js +53 -0
- package/dist/core/metadata/metadata-storage.js.map +1 -0
- package/dist/core/scanner/component-scanner.d.ts +16 -0
- package/dist/core/scanner/component-scanner.d.ts.map +1 -0
- package/dist/core/scanner/component-scanner.js +147 -0
- package/dist/core/scanner/component-scanner.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/plugin-manager.d.ts +14 -0
- package/dist/plugins/plugin-manager.d.ts.map +1 -0
- package/dist/{cli/utils/file-generator.js → plugins/plugin-manager.js} +32 -24
- package/dist/plugins/plugin-manager.js.map +1 -0
- package/dist/shared/errors.d.ts +18 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +41 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/testing/runner.d.ts +26 -0
- package/dist/testing/runner.d.ts.map +1 -0
- package/dist/testing/runner.js +143 -0
- package/dist/testing/runner.js.map +1 -0
- package/dist/typeorm/typeorm-module.d.ts +36 -0
- package/dist/typeorm/typeorm-module.d.ts.map +1 -0
- package/dist/typeorm/typeorm-module.js +150 -0
- package/dist/typeorm/typeorm-module.js.map +1 -0
- package/dist/web/application.d.ts +29 -0
- package/dist/web/application.d.ts.map +1 -0
- package/dist/web/application.js +301 -0
- package/dist/web/application.js.map +1 -0
- package/dist/web/interfaces.d.ts +14 -0
- package/dist/web/interfaces.d.ts.map +1 -0
- package/dist/{auth/dto/login.dto.js → web/interfaces.js} +1 -1
- package/dist/web/interfaces.js.map +1 -0
- package/examples/blog-api/fragment.json +14 -0
- package/examples/blog-api/package-lock.json +3405 -0
- package/examples/blog-api/package.json +19 -0
- package/examples/blog-api/src/controllers/app.controller.ts +9 -0
- package/examples/blog-api/src/controllers/auth.controller.ts +17 -0
- package/examples/blog-api/src/controllers/category.controller.ts +29 -0
- package/examples/blog-api/src/controllers/comment.controller.ts +31 -0
- package/examples/blog-api/src/controllers/post.controller.ts +46 -0
- package/examples/blog-api/src/dto/create-category.dto.ts +6 -0
- package/examples/blog-api/src/dto/create-comment.dto.ts +6 -0
- package/examples/blog-api/src/dto/create-post.dto.ts +6 -0
- package/examples/blog-api/src/entities/category.entity.ts +16 -0
- package/examples/blog-api/src/entities/comment.entity.ts +29 -0
- package/examples/blog-api/src/entities/post.entity.ts +42 -0
- package/examples/blog-api/src/entities/user.entity.ts +25 -0
- package/examples/blog-api/src/main.ts +16 -0
- package/examples/blog-api/src/migrations/1767737463842-InitialSchema.ts +60 -0
- package/examples/blog-api/src/repositories/category.repository.ts +25 -0
- package/examples/blog-api/src/repositories/comment.repository.ts +25 -0
- package/examples/blog-api/src/repositories/post.repository.ts +29 -0
- package/examples/blog-api/src/seeds/SampleData.seed.ts +41 -0
- package/examples/blog-api/src/services/app.service.ts +8 -0
- package/examples/blog-api/src/services/auth.service.ts +15 -0
- package/examples/blog-api/src/services/category.service.ts +27 -0
- package/examples/blog-api/src/services/comment.service.ts +31 -0
- package/examples/blog-api/src/services/post.service.ts +35 -0
- package/examples/blog-api/tsconfig.json +23 -0
- package/package.json +55 -33
- package/src/ai/ai.module.ts +110 -0
- package/src/auth/auth.module.ts +77 -0
- package/src/cli/commands/build.command.ts +123 -13
- package/src/cli/commands/diagnostics.command.ts +438 -0
- package/src/cli/commands/generate.command.ts +206 -137
- package/src/cli/commands/init.command.ts +337 -349
- package/src/cli/commands/migrate.command.ts +203 -88
- package/src/cli/commands/serve.command.ts +176 -24
- package/src/cli/index.ts +23 -0
- package/src/core/container/di-container.ts +83 -26
- package/src/core/decorators/application.decorator.ts +26 -0
- package/src/core/decorators/auto-configuration.decorator.ts +17 -0
- package/src/core/decorators/conditional.decorators.ts +19 -0
- package/src/core/decorators/controller.decorator.ts +14 -11
- package/src/core/decorators/http.decorators.ts +71 -0
- package/src/core/decorators/injectable.decorator.ts +14 -9
- package/src/core/decorators/injection.decorators.ts +26 -0
- package/src/core/decorators/repository.decorator.ts +13 -2
- package/src/core/decorators/service.decorator.ts +13 -2
- package/src/core/index.ts +13 -0
- package/src/core/loader/file-loader.ts +55 -0
- package/src/core/metadata/metadata-keys.ts +19 -0
- package/src/core/metadata/metadata-storage.ts +91 -0
- package/src/core/scanner/component-scanner.ts +129 -0
- package/src/index.ts +45 -0
- package/src/plugins/plugin-manager.ts +52 -0
- package/src/shared/errors.ts +34 -0
- package/src/testing/runner.ts +143 -0
- package/src/typeorm/typeorm-module.ts +216 -0
- package/src/web/application.ts +348 -0
- package/src/web/interfaces.ts +17 -0
- package/tsconfig.json +8 -6
- package/.env.example +0 -0
- package/base.ts +0 -1810
- package/base2.ts +0 -968
- package/bin/frg.ts +0 -5
- package/config/fragment.lock.yaml +0 -0
- package/config/fragment.yaml +0 -0
- package/dist/app.d.ts +0 -15
- package/dist/app.js +0 -91
- package/dist/app.js.map +0 -1
- package/dist/auth/auth.controller.d.ts +0 -10
- package/dist/auth/auth.controller.js +0 -88
- package/dist/auth/auth.controller.js.map +0 -1
- package/dist/auth/auth.middleware.d.ts +0 -2
- package/dist/auth/auth.middleware.js +0 -25
- package/dist/auth/auth.middleware.js.map +0 -1
- package/dist/auth/auth.service.d.ts +0 -20
- package/dist/auth/auth.service.js +0 -144
- package/dist/auth/auth.service.js.map +0 -1
- package/dist/auth/dto/login.dto.d.ts +0 -9
- package/dist/auth/dto/login.dto.js.map +0 -1
- package/dist/cli/cli.d.ts +0 -12
- package/dist/cli/cli.js +0 -187
- package/dist/cli/cli.js.map +0 -1
- package/dist/cli/commands/config.command.d.ts +0 -6
- package/dist/cli/commands/config.command.js +0 -285
- package/dist/cli/commands/config.command.js.map +0 -1
- package/dist/cli/templates/controller.template.d.ts +0 -1
- package/dist/cli/templates/controller.template.js +0 -53
- package/dist/cli/templates/controller.template.js.map +0 -1
- package/dist/cli/templates/entity.template.d.ts +0 -1
- package/dist/cli/templates/entity.template.js +0 -24
- package/dist/cli/templates/entity.template.js.map +0 -1
- package/dist/cli/templates/repository.template.d.ts +0 -1
- package/dist/cli/templates/repository.template.js +0 -44
- package/dist/cli/templates/repository.template.js.map +0 -1
- package/dist/cli/templates/service.template.d.ts +0 -1
- package/dist/cli/templates/service.template.js +0 -44
- package/dist/cli/templates/service.template.js.map +0 -1
- package/dist/cli/utils/file-generator.d.ts +0 -9
- package/dist/cli/utils/file-generator.js.map +0 -1
- package/dist/cli/utils/logger.d.ts +0 -14
- package/dist/cli/utils/logger.js +0 -50
- package/dist/cli/utils/logger.js.map +0 -1
- package/dist/controllers/health.controller.d.ts +0 -13
- package/dist/controllers/health.controller.js +0 -51
- package/dist/controllers/health.controller.js.map +0 -1
- package/dist/core/config/config-loader.d.ts +0 -31
- package/dist/core/config/config-loader.js +0 -99
- package/dist/core/config/config-loader.js.map +0 -1
- package/dist/core/decorators/auth-guard.decorator.d.ts +0 -3
- package/dist/core/decorators/auth-guard.decorator.js +0 -19
- package/dist/core/decorators/auth-guard.decorator.js.map +0 -1
- package/dist/core/decorators/autowire.decorator.d.ts +0 -3
- package/dist/core/decorators/autowire.decorator.js +0 -18
- package/dist/core/decorators/autowire.decorator.js.map +0 -1
- package/dist/core/decorators/middleware.decorator.d.ts +0 -3
- package/dist/core/decorators/middleware.decorator.js +0 -21
- package/dist/core/decorators/middleware.decorator.js.map +0 -1
- package/dist/core/decorators/route.decorator.d.ts +0 -14
- package/dist/core/decorators/route.decorator.js +0 -33
- package/dist/core/decorators/route.decorator.js.map +0 -1
- package/dist/core/openai/openai-client.d.ts +0 -12
- package/dist/core/openai/openai-client.js +0 -94
- package/dist/core/openai/openai-client.js.map +0 -1
- package/dist/database/data-source.d.ts +0 -4
- package/dist/database/data-source.js +0 -27
- package/dist/database/data-source.js.map +0 -1
- package/dist/entities/session.entity.d.ts +0 -9
- package/dist/entities/session.entity.js +0 -46
- package/dist/entities/session.entity.js.map +0 -1
- package/dist/entities/user.entity.d.ts +0 -10
- package/dist/entities/user.entity.js +0 -49
- package/dist/entities/user.entity.js.map +0 -1
- package/dist/middlewares/logging.middleware.d.ts +0 -2
- package/dist/middlewares/logging.middleware.js +0 -29
- package/dist/middlewares/logging.middleware.js.map +0 -1
- package/dist/repositories/session.repository.d.ts +0 -9
- package/dist/repositories/session.repository.js +0 -51
- package/dist/repositories/session.repository.js.map +0 -1
- package/dist/repositories/user.repository.d.ts +0 -10
- package/dist/repositories/user.repository.js +0 -44
- package/dist/repositories/user.repository.js.map +0 -1
- package/dist/server.d.ts +0 -1
- package/dist/server.js +0 -31
- package/dist/server.js.map +0 -1
- package/dist/services/health.service.d.ts +0 -13
- package/dist/services/health.service.js +0 -45
- package/dist/services/health.service.js.map +0 -1
- package/readme.md +0 -120
- package/src/app.ts +0 -121
- package/src/auth/auth.controller.ts +0 -52
- package/src/auth/auth.middleware.ts +0 -27
- package/src/auth/auth.service.ts +0 -110
- package/src/auth/dto/login.dto.ts +0 -11
- package/src/cli/cli.ts +0 -212
- package/src/cli/commands/config.command.ts +0 -280
- package/src/cli/templates/controller.template.ts +0 -51
- package/src/cli/templates/entity.template.ts +0 -22
- package/src/cli/templates/repository.template.ts +0 -42
- package/src/cli/templates/service.template.ts +0 -42
- package/src/cli/utils/file-generator.ts +0 -37
- package/src/cli/utils/logger.ts +0 -52
- package/src/controllers/health.controller.ts +0 -24
- package/src/core/config/config-loader.ts +0 -98
- package/src/core/decorators/auth-guard.decorator.ts +0 -15
- package/src/core/decorators/autowire.decorator.ts +0 -18
- package/src/core/decorators/middleware.decorator.ts +0 -18
- package/src/core/decorators/route.decorator.ts +0 -33
- package/src/core/openai/openai-client.ts +0 -99
- package/src/database/data-source.ts +0 -29
- package/src/entities/session.entity.ts +0 -25
- package/src/entities/user.entity.ts +0 -27
- package/src/middlewares/logging.middleware.ts +0 -28
- package/src/repositories/session.repository.ts +0 -42
- package/src/repositories/user.repository.ts +0 -37
- package/src/server.ts +0 -32
- package/src/services/health.service.ts +0 -29
package/README.md
ADDED
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
## README.md
|
|
2
|
+
|
|
3
|
+
```markdown
|
|
4
|
+
# Fragment Framework
|
|
5
|
+
|
|
6
|
+
A Spring Boot-style framework for TypeScript with Express and TypeORM.
|
|
7
|
+
|
|
8
|
+
## Installation
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install -g fragment-ts
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Create a new project (in current directory)
|
|
18
|
+
fragment init .
|
|
19
|
+
|
|
20
|
+
# Or create a new directory
|
|
21
|
+
fragment init my-app
|
|
22
|
+
cd my-app
|
|
23
|
+
|
|
24
|
+
# Start development server with hot reload
|
|
25
|
+
fragment serve
|
|
26
|
+
|
|
27
|
+
# Build for production
|
|
28
|
+
fragment build
|
|
29
|
+
|
|
30
|
+
# Start production server
|
|
31
|
+
npm start
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Features
|
|
35
|
+
|
|
36
|
+
- 🎯 **Decorator-based API** - Clean, intuitive syntax inspired by Spring Boot
|
|
37
|
+
- 💉 **Dependency Injection** - Automatic resolution of dependencies
|
|
38
|
+
- 🗄️ **TypeORM Integration** - Full database support with migrations
|
|
39
|
+
- 🔐 **Built-in Authentication** - JWT tokens, password hashing, role guards
|
|
40
|
+
- 🤖 **AI Integrations** - OpenAI, Ollama, and custom AI providers
|
|
41
|
+
- 🔌 **Plugin System** - Extensible architecture
|
|
42
|
+
- 🧪 **Testing Framework** - Built-in test runner
|
|
43
|
+
- 📦 **All-in-One Package** - No complex setup required
|
|
44
|
+
- 🔄 **Hot Reload** - Automatic server restart on file changes
|
|
45
|
+
- 🎨 **Code Generation** - CLI tools for rapid development
|
|
46
|
+
|
|
47
|
+
## CLI Commands
|
|
48
|
+
|
|
49
|
+
### Project Management
|
|
50
|
+
```bash
|
|
51
|
+
fragment init [dir] # Initialize new project (use . for current directory)
|
|
52
|
+
fragment init . --features=auth # Initialize with specific features
|
|
53
|
+
fragment serve # Start development server with hot reload
|
|
54
|
+
fragment serve --port=4000 # Start on custom port
|
|
55
|
+
fragment build # Build for production
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Code Generation
|
|
59
|
+
```bash
|
|
60
|
+
fragment generate controller <name> # Generate controller
|
|
61
|
+
fragment generate service <name> # Generate service with optional repository
|
|
62
|
+
fragment generate entity <name> # Generate TypeORM entity
|
|
63
|
+
fragment generate resource <name> # Generate complete CRUD resource
|
|
64
|
+
fragment generate dto <name> # Generate Data Transfer Object
|
|
65
|
+
fragment generate repository <name> # Generate repository
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Examples:**
|
|
69
|
+
```bash
|
|
70
|
+
fragment generate resource product # Creates controller, service, entity, DTO, repository
|
|
71
|
+
fragment g controller users # Shorthand: g = generate
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Database Operations
|
|
75
|
+
```bash
|
|
76
|
+
fragment migrate # Run all pending migrations
|
|
77
|
+
fragment migrate:create <name> # Create a new migration
|
|
78
|
+
fragment migrate:run # Run migrations
|
|
79
|
+
fragment migrate:revert # Revert last migration
|
|
80
|
+
fragment migrate:refresh # Drop all and re-run migrations
|
|
81
|
+
fragment migrate:status # Show migration status
|
|
82
|
+
fragment schema:sync # Sync database schema (dev only)
|
|
83
|
+
fragment schema:drop # Drop all database tables
|
|
84
|
+
fragment seed # Run database seeds
|
|
85
|
+
fragment seed:create <name> # Create a new seed file
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Diagnostics & Debugging
|
|
89
|
+
```bash
|
|
90
|
+
fragment routes # List all registered routes
|
|
91
|
+
fragment routes --env=dev # List routes from TypeScript source
|
|
92
|
+
fragment routes --env=prod # List routes from compiled dist/
|
|
93
|
+
fragment beans # List all registered beans
|
|
94
|
+
fragment beans --tree # Show beans as tree structure
|
|
95
|
+
fragment info # Show application information
|
|
96
|
+
fragment config # Show current configuration
|
|
97
|
+
fragment version # Show Fragment version
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Project Structure
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
my-app/
|
|
104
|
+
├── src/
|
|
105
|
+
│ ├── controllers/ # HTTP controllers
|
|
106
|
+
│ ├── services/ # Business logic
|
|
107
|
+
│ ├── repositories/ # Data access layer
|
|
108
|
+
│ ├── entities/ # TypeORM entities
|
|
109
|
+
│ ├── dto/ # Data transfer objects
|
|
110
|
+
│ ├── middlewares/ # Express middlewares
|
|
111
|
+
│ ├── config/ # Configuration files
|
|
112
|
+
│ └── main.ts # Application entry point
|
|
113
|
+
├── dist/ # Compiled JavaScript (after build)
|
|
114
|
+
├── test/ # Test files
|
|
115
|
+
├── fragment.json # Fragment configuration
|
|
116
|
+
├── tsconfig.json # TypeScript configuration
|
|
117
|
+
└── package.json
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Basic Example
|
|
121
|
+
|
|
122
|
+
### Application Entry Point
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
// src/main.ts
|
|
126
|
+
import 'reflect-metadata';
|
|
127
|
+
import { FragmentApplication, FragmentWebApplication } from 'fragment-ts;
|
|
128
|
+
|
|
129
|
+
@FragmentApplication({
|
|
130
|
+
port: 3000,
|
|
131
|
+
autoScan: true
|
|
132
|
+
})
|
|
133
|
+
class Application {}
|
|
134
|
+
|
|
135
|
+
async function bootstrap() {
|
|
136
|
+
const app = new FragmentWebApplication();
|
|
137
|
+
await app.bootstrap(Application);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
bootstrap();
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Creating a Controller
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
// src/controllers/users.controller.ts
|
|
147
|
+
import { Controller, Get, Post, Put, Delete, Body, Param } from 'fragment-ts';
|
|
148
|
+
import { UserService } from '../services/user.service';
|
|
149
|
+
|
|
150
|
+
@Controller('/users')
|
|
151
|
+
export class UserController {
|
|
152
|
+
constructor(private userService: UserService) {}
|
|
153
|
+
|
|
154
|
+
@Get()
|
|
155
|
+
async findAll() {
|
|
156
|
+
return this.userService.findAll();
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
@Get('/:id')
|
|
160
|
+
async findOne(@Param('id') id: string) {
|
|
161
|
+
return this.userService.findOne(id);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
@Post()
|
|
165
|
+
async create(@Body() body: any) {
|
|
166
|
+
return this.userService.create(body);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@Put('/:id')
|
|
170
|
+
async update(@Param('id') id: string, @Body() body: any) {
|
|
171
|
+
return this.userService.update(id, body);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@Delete('/:id')
|
|
175
|
+
async delete(@Param('id') id: string) {
|
|
176
|
+
return this.userService.delete(id);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Creating a Service
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
// src/services/user.service.ts
|
|
185
|
+
import { Service } from 'fragment-ts';
|
|
186
|
+
import { UserRepository } from '../repositories/user.repository';
|
|
187
|
+
|
|
188
|
+
@Service()
|
|
189
|
+
export class UserService {
|
|
190
|
+
constructor(private userRepository: UserRepository) {}
|
|
191
|
+
|
|
192
|
+
async findAll() {
|
|
193
|
+
return this.userRepository.findAll();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
async findOne(id: string) {
|
|
197
|
+
return this.userRepository.findById(parseInt(id));
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
async create(data: any) {
|
|
201
|
+
return this.userRepository.create(data);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
async update(id: string, data: any) {
|
|
205
|
+
return this.userRepository.update(parseInt(id), data);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
async delete(id: string) {
|
|
209
|
+
return this.userRepository.delete(parseInt(id));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Authentication Example
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
import { Controller, Post, Body } from 'fragment-ts';
|
|
218
|
+
import { AuthModule } from 'fragment-ts';
|
|
219
|
+
|
|
220
|
+
@Controller('/auth')
|
|
221
|
+
export class AuthController {
|
|
222
|
+
@Post('/login')
|
|
223
|
+
async login(@Body() body: any) {
|
|
224
|
+
// Verify user credentials...
|
|
225
|
+
const token = AuthModule.generateToken({
|
|
226
|
+
userId: '123',
|
|
227
|
+
email: body.email,
|
|
228
|
+
roles: ['user']
|
|
229
|
+
});
|
|
230
|
+
return { token };
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
@Post('/register')
|
|
234
|
+
async register(@Body() body: any) {
|
|
235
|
+
const hashedPassword = await AuthModule.hashPassword(body.password);
|
|
236
|
+
// Save user...
|
|
237
|
+
return { message: 'User registered successfully' };
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## AI Integration Example
|
|
243
|
+
|
|
244
|
+
```typescript
|
|
245
|
+
import { Service } from 'fragment-ts';
|
|
246
|
+
import { AIModule } from 'fragment-ts';
|
|
247
|
+
|
|
248
|
+
@Service()
|
|
249
|
+
export class ChatService {
|
|
250
|
+
private aiModule: AIModule;
|
|
251
|
+
|
|
252
|
+
constructor() {
|
|
253
|
+
this.aiModule = new AIModule({
|
|
254
|
+
openaiKey: process.env.OPENAI_API_KEY
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
async chat(message: string) {
|
|
259
|
+
return this.aiModule.complete([
|
|
260
|
+
{ role: 'system', content: 'You are a helpful assistant.' },
|
|
261
|
+
{ role: 'user', content: message }
|
|
262
|
+
]);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## Configuration
|
|
268
|
+
|
|
269
|
+
### fragment.json
|
|
270
|
+
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"server": {
|
|
274
|
+
"port": 3000,
|
|
275
|
+
"host": "0.0.0.0"
|
|
276
|
+
},
|
|
277
|
+
"database": {
|
|
278
|
+
"type": "postgres",
|
|
279
|
+
"host": "localhost",
|
|
280
|
+
"port": 5432,
|
|
281
|
+
"username": "postgres",
|
|
282
|
+
"password": "password",
|
|
283
|
+
"database": "myapp",
|
|
284
|
+
"synchronize": false,
|
|
285
|
+
"logging": false,
|
|
286
|
+
"entities": ["dist/**/*.entity.js"],
|
|
287
|
+
"migrations": ["dist/migrations/**/*.js"]
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Environment Variables
|
|
293
|
+
|
|
294
|
+
```env
|
|
295
|
+
NODE_ENV=development
|
|
296
|
+
PORT=3000
|
|
297
|
+
JWT_SECRET=your-secret-key
|
|
298
|
+
DATABASE_URL=postgresql://user:pass@localhost:5432/db
|
|
299
|
+
OPENAI_API_KEY=sk-your-key-here
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
## Development Workflow
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
# 1. Initialize project
|
|
306
|
+
fragment init my-api --features=auth,database
|
|
307
|
+
cd my-api
|
|
308
|
+
|
|
309
|
+
# 2. Generate resources
|
|
310
|
+
fragment generate resource user
|
|
311
|
+
fragment generate resource product
|
|
312
|
+
|
|
313
|
+
# 3. Create and run migrations
|
|
314
|
+
fragment migrate:create InitialSchema
|
|
315
|
+
fragment migrate:run
|
|
316
|
+
|
|
317
|
+
# 4. Start development server
|
|
318
|
+
fragment serve
|
|
319
|
+
|
|
320
|
+
# 5. List routes to verify
|
|
321
|
+
fragment routes
|
|
322
|
+
|
|
323
|
+
# 6. Build for production
|
|
324
|
+
fragment build
|
|
325
|
+
|
|
326
|
+
# 7. Start production server
|
|
327
|
+
npm start
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## Testing
|
|
331
|
+
|
|
332
|
+
```typescript
|
|
333
|
+
// test/user.spec.ts
|
|
334
|
+
import { describe, it, expect } from 'fragment-ts';
|
|
335
|
+
|
|
336
|
+
describe('UserService', () => {
|
|
337
|
+
it('should create a user', async () => {
|
|
338
|
+
const user = await userService.create({
|
|
339
|
+
email: 'test@example.com',
|
|
340
|
+
name: 'Test User'
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
expect(user.email).toBe('test@example.com');
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
```bash
|
|
349
|
+
# Run tests
|
|
350
|
+
fragment test
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
## Production Deployment
|
|
354
|
+
|
|
355
|
+
### Docker
|
|
356
|
+
|
|
357
|
+
```dockerfile
|
|
358
|
+
FROM node:18-alpine
|
|
359
|
+
WORKDIR /app
|
|
360
|
+
COPY package*.json ./
|
|
361
|
+
RUN npm ci --only=production
|
|
362
|
+
COPY . .
|
|
363
|
+
RUN npm run build
|
|
364
|
+
EXPOSE 3000
|
|
365
|
+
CMD ["npm", "start"]
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
docker build -t my-app .
|
|
370
|
+
docker run -p 3000:3000 my-app
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
## Examples
|
|
374
|
+
|
|
375
|
+
Check out the [examples](./examples) directory for complete working applications:
|
|
376
|
+
- REST API
|
|
377
|
+
- Authentication System
|
|
378
|
+
- AI Chat Application
|
|
379
|
+
- E-commerce Backend
|
|
380
|
+
|
|
381
|
+
## Documentation
|
|
382
|
+
|
|
383
|
+
For comprehensive guides and API reference, visit:
|
|
384
|
+
- **Full Documentation**: [https://fragment.digitwhale.com](https://fragment.digitwhale.com)
|
|
385
|
+
- **Use Cases & Examples**: [USECASES.md](./USECASES.md)
|
|
386
|
+
- **API Reference**: [https://fragment.digitwhale.com/api](https://fragment.digitwhale.com/api)
|
|
387
|
+
|
|
388
|
+
## Community
|
|
389
|
+
|
|
390
|
+
- **GitHub**: [https://github.com/fragment/framework](https://github.com/fragment/framework)
|
|
391
|
+
- **Discord**: [https://discord.gg/fragment](https://discord.gg/fragment)
|
|
392
|
+
- **Twitter**: [@FragmentJS](https://twitter.com/FragmentJS)
|
|
393
|
+
|
|
394
|
+
## Contributing
|
|
395
|
+
|
|
396
|
+
We welcome contributions! See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
|
|
397
|
+
|
|
398
|
+
## License
|
|
399
|
+
|
|
400
|
+
MIT © Fragment Team
|
|
401
|
+
```
|