@venizia/ignis-docs 0.0.3 → 0.0.4-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 (131) hide show
  1. package/README.md +1 -1
  2. package/package.json +4 -2
  3. package/wiki/best-practices/api-usage-examples.md +591 -0
  4. package/wiki/best-practices/architectural-patterns.md +415 -0
  5. package/wiki/best-practices/architecture-decisions.md +488 -0
  6. package/wiki/{get-started/best-practices → best-practices}/code-style-standards.md +406 -17
  7. package/wiki/{get-started/best-practices → best-practices}/common-pitfalls.md +109 -4
  8. package/wiki/{get-started/best-practices → best-practices}/contribution-workflow.md +34 -7
  9. package/wiki/best-practices/data-modeling.md +376 -0
  10. package/wiki/best-practices/deployment-strategies.md +698 -0
  11. package/wiki/best-practices/index.md +27 -0
  12. package/wiki/best-practices/performance-optimization.md +196 -0
  13. package/wiki/best-practices/security-guidelines.md +218 -0
  14. package/wiki/{get-started/best-practices → best-practices}/troubleshooting-tips.md +97 -1
  15. package/wiki/changelogs/2025-12-16-initial-architecture.md +1 -1
  16. package/wiki/changelogs/2025-12-16-model-repo-datasource-refactor.md +1 -1
  17. package/wiki/changelogs/2025-12-17-refactor.md +1 -1
  18. package/wiki/changelogs/2025-12-18-performance-optimizations.md +5 -5
  19. package/wiki/changelogs/2025-12-18-repository-validation-security.md +13 -7
  20. package/wiki/changelogs/2025-12-26-nested-relations-and-generics.md +2 -2
  21. package/wiki/changelogs/2025-12-29-dynamic-binding-registration.md +104 -0
  22. package/wiki/changelogs/2025-12-29-snowflake-uid-helper.md +100 -0
  23. package/wiki/changelogs/2025-12-30-repository-enhancements.md +214 -0
  24. package/wiki/changelogs/2025-12-31-json-path-filtering-array-operators.md +214 -0
  25. package/wiki/changelogs/2025-12-31-string-id-custom-generator.md +137 -0
  26. package/wiki/changelogs/2026-01-02-default-filter-and-repository-mixins.md +418 -0
  27. package/wiki/changelogs/index.md +6 -0
  28. package/wiki/changelogs/planned-schema-migrator.md +0 -8
  29. package/wiki/{get-started/core-concepts → guides/core-concepts/application}/bootstrapping.md +18 -5
  30. package/wiki/{get-started/core-concepts/application.md → guides/core-concepts/application/index.md} +47 -104
  31. package/wiki/guides/core-concepts/components-guide.md +509 -0
  32. package/wiki/{get-started → guides}/core-concepts/components.md +24 -17
  33. package/wiki/{get-started → guides}/core-concepts/controllers.md +30 -13
  34. package/wiki/{get-started → guides}/core-concepts/dependency-injection.md +97 -0
  35. package/wiki/guides/core-concepts/persistent/datasources.md +179 -0
  36. package/wiki/guides/core-concepts/persistent/index.md +119 -0
  37. package/wiki/guides/core-concepts/persistent/models.md +241 -0
  38. package/wiki/guides/core-concepts/persistent/repositories.md +219 -0
  39. package/wiki/guides/core-concepts/persistent/transactions.md +170 -0
  40. package/wiki/{get-started → guides}/core-concepts/services.md +26 -3
  41. package/wiki/{get-started → guides/get-started}/5-minute-quickstart.md +59 -14
  42. package/wiki/guides/get-started/philosophy.md +682 -0
  43. package/wiki/guides/get-started/setup.md +157 -0
  44. package/wiki/guides/index.md +89 -0
  45. package/wiki/guides/reference/glossary.md +243 -0
  46. package/wiki/{get-started → guides/reference}/mcp-docs-server.md +0 -10
  47. package/wiki/{get-started → guides/tutorials}/building-a-crud-api.md +134 -132
  48. package/wiki/{get-started/quickstart.md → guides/tutorials/complete-installation.md} +107 -71
  49. package/wiki/guides/tutorials/ecommerce-api.md +1399 -0
  50. package/wiki/guides/tutorials/realtime-chat.md +1261 -0
  51. package/wiki/guides/tutorials/testing.md +723 -0
  52. package/wiki/index.md +176 -37
  53. package/wiki/references/base/application.md +27 -0
  54. package/wiki/references/base/bootstrapping.md +30 -26
  55. package/wiki/references/base/components.md +24 -7
  56. package/wiki/references/base/controllers.md +51 -20
  57. package/wiki/references/base/datasources.md +30 -0
  58. package/wiki/references/base/dependency-injection.md +39 -3
  59. package/wiki/references/base/filter-system/application-usage.md +224 -0
  60. package/wiki/references/base/filter-system/array-operators.md +132 -0
  61. package/wiki/references/base/filter-system/comparison-operators.md +109 -0
  62. package/wiki/references/base/filter-system/default-filter.md +428 -0
  63. package/wiki/references/base/filter-system/fields-order-pagination.md +155 -0
  64. package/wiki/references/base/filter-system/index.md +127 -0
  65. package/wiki/references/base/filter-system/json-filtering.md +197 -0
  66. package/wiki/references/base/filter-system/list-operators.md +71 -0
  67. package/wiki/references/base/filter-system/logical-operators.md +156 -0
  68. package/wiki/references/base/filter-system/null-operators.md +58 -0
  69. package/wiki/references/base/filter-system/pattern-matching.md +108 -0
  70. package/wiki/references/base/filter-system/quick-reference.md +431 -0
  71. package/wiki/references/base/filter-system/range-operators.md +63 -0
  72. package/wiki/references/base/filter-system/tips.md +190 -0
  73. package/wiki/references/base/filter-system/use-cases.md +452 -0
  74. package/wiki/references/base/index.md +90 -0
  75. package/wiki/references/base/middlewares.md +602 -0
  76. package/wiki/references/base/models.md +215 -23
  77. package/wiki/references/base/providers.md +732 -0
  78. package/wiki/references/base/repositories/advanced.md +555 -0
  79. package/wiki/references/base/repositories/index.md +228 -0
  80. package/wiki/references/base/repositories/mixins.md +331 -0
  81. package/wiki/references/base/repositories/relations.md +486 -0
  82. package/wiki/references/base/repositories.md +40 -635
  83. package/wiki/references/base/services.md +28 -4
  84. package/wiki/references/components/authentication.md +22 -2
  85. package/wiki/references/components/health-check.md +12 -0
  86. package/wiki/references/components/index.md +23 -0
  87. package/wiki/references/components/mail.md +687 -0
  88. package/wiki/references/components/request-tracker.md +16 -0
  89. package/wiki/references/components/socket-io.md +18 -0
  90. package/wiki/references/components/static-asset.md +14 -26
  91. package/wiki/references/components/swagger.md +17 -0
  92. package/wiki/references/configuration/environment-variables.md +427 -0
  93. package/wiki/references/configuration/index.md +73 -0
  94. package/wiki/references/helpers/cron.md +14 -0
  95. package/wiki/references/helpers/crypto.md +15 -0
  96. package/wiki/references/helpers/env.md +16 -0
  97. package/wiki/references/helpers/error.md +17 -0
  98. package/wiki/references/helpers/index.md +14 -0
  99. package/wiki/references/helpers/inversion.md +24 -4
  100. package/wiki/references/helpers/logger.md +19 -0
  101. package/wiki/references/helpers/network.md +11 -0
  102. package/wiki/references/helpers/queue.md +19 -0
  103. package/wiki/references/helpers/redis.md +21 -0
  104. package/wiki/references/helpers/socket-io.md +24 -5
  105. package/wiki/references/helpers/storage.md +18 -10
  106. package/wiki/references/helpers/testing.md +18 -0
  107. package/wiki/references/helpers/types.md +16 -0
  108. package/wiki/references/helpers/uid.md +167 -0
  109. package/wiki/references/helpers/worker-thread.md +16 -0
  110. package/wiki/references/index.md +177 -0
  111. package/wiki/references/quick-reference.md +634 -0
  112. package/wiki/references/src-details/boot.md +3 -3
  113. package/wiki/references/src-details/dev-configs.md +0 -4
  114. package/wiki/references/src-details/docs.md +2 -2
  115. package/wiki/references/src-details/index.md +86 -0
  116. package/wiki/references/src-details/inversion.md +1 -6
  117. package/wiki/references/src-details/mcp-server.md +3 -15
  118. package/wiki/references/utilities/index.md +86 -10
  119. package/wiki/references/utilities/jsx.md +577 -0
  120. package/wiki/references/utilities/request.md +0 -2
  121. package/wiki/references/utilities/statuses.md +740 -0
  122. package/wiki/get-started/best-practices/api-usage-examples.md +0 -266
  123. package/wiki/get-started/best-practices/architectural-patterns.md +0 -170
  124. package/wiki/get-started/best-practices/data-modeling.md +0 -177
  125. package/wiki/get-started/best-practices/deployment-strategies.md +0 -121
  126. package/wiki/get-started/best-practices/performance-optimization.md +0 -97
  127. package/wiki/get-started/best-practices/security-guidelines.md +0 -99
  128. package/wiki/get-started/core-concepts/persistent.md +0 -539
  129. package/wiki/get-started/index.md +0 -65
  130. package/wiki/get-started/philosophy.md +0 -296
  131. package/wiki/get-started/prerequisites.md +0 -113
@@ -1,121 +0,0 @@
1
- # Deployment Strategies
2
-
3
- Deploy your Ignis application reliably, securely, and efficiently.
4
-
5
- ## 1. Building for Production
6
-
7
- Compile TypeScript to JavaScript before deploying:
8
-
9
- ```bash
10
- bun run build
11
- ```
12
-
13
- **What this does:**
14
- 1. `tsc -p tsconfig.json` - Compile TypeScript → JavaScript
15
- 2. `tsc-alias -p tsconfig.json` - Replace path aliases (`@/*`) with relative paths
16
-
17
- **Output:** `dist/` folder with production-ready JavaScript.
18
-
19
- ## 2. Environment Configuration
20
-
21
- Use environment variables for all configuration - never hard-code.
22
-
23
- **Production Environment Variables:**
24
- | Variable | Value | Purpose |
25
- |----------|-------|---------|
26
- | `NODE_ENV` | `production` | Enables performance optimizations |
27
- | `APP_ENV_APPLICATION_SECRET` | Strong random string | Application secret |
28
- | `APP_ENV_JWT_SECRET` | Strong random string | JWT signing key |
29
- | `APP_ENV_POSTGRES_*` | Production DB credentials | Database connection |
30
- | `APP_ENV_SERVER_HOST` | `0.0.0.0` | Accept connections from any IP |
31
- | `APP_ENV_SERVER_PORT` | `3000` or cloud-assigned | Server port |
32
-
33
- **Where to store:**
34
- - **Docker:** Use environment variables in `docker-compose.yml` or secrets
35
- - **Kubernetes:** ConfigMaps and Secrets
36
- - **Cloud Platforms:** AWS Secrets Manager, Azure Key Vault, Google Secret Manager
37
-
38
- ## 3. Deployment Methods
39
-
40
- ### Docker Deployment (Recommended)
41
-
42
- **Dockerfile:**
43
- ```dockerfile
44
- FROM node:20-slim
45
-
46
- WORKDIR /usr/src/app
47
-
48
- # Copy dependency files
49
- COPY package.json bun.lockb ./
50
-
51
- # Install production dependencies
52
- RUN bun install --production
53
-
54
- # Copy source code
55
- COPY . .
56
-
57
- # Build TypeScript
58
- RUN bun run build
59
-
60
- # Expose port
61
- EXPOSE 3000
62
-
63
- # Start server
64
- CMD [ "bun", "run", "server:prod" ]
65
- ```
66
-
67
- **Build and deploy:**
68
- ```bash
69
- # Build image
70
- docker build -t my-ignis-app .
71
-
72
- # Run container
73
- docker run -p 3000:3000 \
74
- -e NODE_ENV=production \
75
- -e APP_ENV_APPLICATION_SECRET=xxx \
76
- my-ignis-app
77
- ```
78
-
79
- ### Bun Single Executable (Alternative)
80
-
81
- Compile your app into a single standalone binary:
82
-
83
- ```bash
84
- bun build --compile --minify --target=bun-linux-x64 \
85
- ./src/index.ts --outfile ./dist/my-app
86
- ```
87
-
88
- **Pros:** No dependencies needed on server, simple deployment
89
- **Cons:** Platform-specific, newer technology (test thoroughly)
90
-
91
- **Deploy:**
92
- ```bash
93
- # Copy executable and .env to server
94
- scp dist/my-app .env user@server:/app/
95
-
96
- # Run
97
- ./my-app
98
- ```
99
-
100
- ## 4. Production Best Practices
101
-
102
- **Use a process manager:**
103
- - **PM2** - For Node.js/Bun processes
104
- - **systemd** - Linux service management
105
- - **Docker/Kubernetes** - Built-in orchestration
106
-
107
- **Example with PM2:**
108
- ```bash
109
- pm2 start dist/index.js --name my-app -i max
110
- pm2 save
111
- pm2 startup
112
- ```
113
-
114
- **Health checks:**
115
- Add health check endpoint for load balancers:
116
- ```typescript
117
- // In application.ts
118
- this.component(HealthCheckComponent);
119
- ```
120
-
121
- Access at `/health-check` for liveness/readiness probes.
@@ -1,97 +0,0 @@
1
- # Performance Optimization
2
-
3
- Optimize your Ignis application for speed and scalability.
4
-
5
- ## 1. Measure Performance
6
-
7
- Identify bottlenecks before optimizing:
8
-
9
- ```typescript
10
- import { executeWithPerformanceMeasure } from '@venizia/ignis';
11
-
12
- await executeWithPerformanceMeasure({
13
- logger: this.logger,
14
- scope: 'DataProcessing',
15
- description: 'Process large dataset',
16
- task: async () => {
17
- await processLargeDataset();
18
- },
19
- });
20
- ```
21
-
22
- Logs execution time automatically.
23
-
24
- > **Deep Dive:** See [Performance Utility](../../references/utilities/performance.md) for advanced profiling.
25
-
26
- ## 2. Offload CPU-Intensive Tasks
27
-
28
- Prevent blocking the event loop with Worker Threads:
29
-
30
- **Use Worker Threads for:**
31
- - Complex calculations or crypto operations
32
- - Large file/data processing
33
- - Any synchronous task > 5ms
34
-
35
- > **Deep Dive:** See [Worker Thread Helper](../../references/helpers/worker-thread.md) for implementation guide.
36
-
37
- ## 3. Optimize Database Queries
38
-
39
- | Technique | Example | Impact |
40
- |-----------|---------|--------|
41
- | **Select specific fields** | `fields: { id: true, name: true }` | Reduce data transfer |
42
- | **Use indexes** | Create indexes on WHERE/JOIN columns | 10-100x faster queries |
43
- | **Mandatory Limit** | `limit: 20` | Prevent fetching massive datasets |
44
- | **Paginate results** | `limit: 20, offset: 0` | Prevent memory overflow |
45
- | **Eager load relations** | `include: [{ relation: 'creator' }]` | Solve N+1 problem |
46
-
47
- > [!TIP]
48
- > **Avoid Deep Nesting:** While Ignis supports deeply nested `include` filters, each level adds significant overhead to query construction and result mapping. We strongly recommend a **maximum of 2 levels** (e.g., `User -> Orders -> Items`). For more complex data fetching, consider separate queries.
49
-
50
- **Example:**
51
- ```typescript
52
- await userRepository.find({
53
- filter: {
54
- fields: { id: true, name: true, email: true }, // ✅ Specific fields
55
- where: { status: 'ACTIVE' },
56
- limit: 20, // ✅ Mandatory limit
57
- include: [{
58
- relation: 'orders',
59
- scope: {
60
- include: [{ relation: 'items' }] // ✅ Level 2 (Recommended limit)
61
- }
62
- }],
63
- },
64
- });
65
- ```
66
-
67
- ## 4. Implement Caching
68
-
69
- Reduce database load with caching:
70
-
71
- | Cache Type | Use Case | Implementation |
72
- |-----------|----------|----------------|
73
- | **Redis** | Distributed cache, session storage | [Redis Helper](../../references/helpers/redis.md) |
74
- | **In-Memory** | Single-process cache | `MemoryStorageHelper` |
75
-
76
- **Example:**
77
- ```typescript
78
- // Cache expensive query results
79
- const cached = await redis.get('users:active');
80
- if (!cached) {
81
- const users = await userRepository.find({ where: { active: true } });
82
- await redis.set('users:active', users, 300); // 5 min TTL
83
- }
84
- ```
85
-
86
- ## 5. Production Settings
87
-
88
- | Setting | Value | Why |
89
- |---------|-------|-----|
90
- | `NODE_ENV` | `production` | Enables library optimizations |
91
- | Process Manager | PM2, systemd, Docker | Auto-restart, cluster mode |
92
- | Cluster Mode | CPU cores | Utilize all CPUs |
93
-
94
- **PM2 Cluster Mode:**
95
- ```bash
96
- pm2 start dist/index.js -i max # Use all CPU cores
97
- ```
@@ -1,99 +0,0 @@
1
- # Security Guidelines
2
-
3
- Critical security practices to protect your Ignis application.
4
-
5
- ## 1. Secret Management
6
-
7
- **Never hard-code secrets.** Use environment variables for all sensitive data.
8
-
9
- | Environment | Where to Store Secrets |
10
- |-------------|----------------------|
11
- | Development | `.env` file (add to `.gitignore`) |
12
- | Production | Cloud provider's secret manager (AWS Secrets Manager, Azure Key Vault, etc.) |
13
-
14
- **Example `.env`:**
15
- ```bash
16
- APP_ENV_APPLICATION_SECRET=your_strong_random_secret_here
17
- APP_ENV_JWT_SECRET=another_strong_random_secret_here
18
- APP_ENV_POSTGRES_PASSWORD=database_password_here
19
- ```
20
-
21
- **Generate strong secrets:**
22
- ```bash
23
- node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
24
- ```
25
-
26
- ## 2. Input Validation
27
-
28
- **Always validate incoming data** with Zod schemas. Ignis automatically rejects invalid requests.
29
-
30
- ```typescript
31
- import { z } from '@hono/zod-openapi';
32
- import { jsonContent, jsonResponse } from '@venizia/ignis';
33
-
34
- const CreateUserRoute = {
35
- method: 'post',
36
- path: '/users',
37
- request: {
38
- body: jsonContent({
39
- schema: z.object({
40
- email: z.string().email(), // Valid email
41
- age: z.number().int().min(18), // Adult only
42
- role: z.enum(['user', 'admin']), // Whitelist
43
- }),
44
- }),
45
- },
46
- responses: jsonResponse({ /* ... */ }),
47
- } as const;
48
- ```
49
-
50
- **Validation happens automatically** - invalid requests never reach your handler.
51
-
52
- ## 3. Authentication & Authorization
53
-
54
- Protect sensitive endpoints with `AuthenticateComponent`.
55
-
56
- **Setup:**
57
- ```typescript
58
- // application.ts
59
- this.component(AuthenticateComponent);
60
- ```
61
-
62
- **Protect routes:**
63
- ```typescript
64
- const SecureRoute = {
65
- path: '/admin/users',
66
- authStrategies: [Authentication.STRATEGY_JWT], // Requires JWT
67
- // ...
68
- };
69
- ```
70
-
71
- > **Deep Dive:** See [Authentication Component](../../references/components/authentication.md) for full setup guide.
72
-
73
- **Access user in protected routes:**
74
- ```typescript
75
- import { Authentication, IJWTTokenPayload, ApplicationError, getError } from '@venizia/ignis';
76
-
77
- const user = c.get(Authentication.CURRENT_USER) as IJWTTokenPayload;
78
- if (!user.roles.includes('admin')) {
79
- throw getError({ statusCode: 403, message: 'Forbidden' });
80
- }
81
- ```
82
-
83
- ## 4. Secure Dependencies
84
-
85
- Regularly audit and update dependencies:
86
-
87
- ```bash
88
- # Check for vulnerabilities
89
- bun audit
90
-
91
- # Update dependencies
92
- bun update
93
- ```
94
-
95
- **Critical packages to keep updated:**
96
- - `hono` - Web framework
97
- - `jose` - JWT handling
98
- - `drizzle-orm` - Database ORM
99
- - `@venizia/ignis` - Framework core