@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
@@ -0,0 +1,157 @@
1
+ # Setup
2
+
3
+ Everything you need to start building with Ignis. This guide covers installation for macOS, Linux, and Windows (via WSL2).
4
+
5
+ ## Requirements
6
+
7
+ | Tool | Version | Required | Notes |
8
+ |------|---------|----------|-------|
9
+ | **Bun** | >= 1.3 | Yes | Primary runtime, fastest performance |
10
+ | **Node.js** | >= 18 | Alternative | Use if Bun isn't available |
11
+ | **PostgreSQL** | >= 14 | Yes | Primary database |
12
+ | **VS Code** | Latest | Recommended | Best IDE experience with extensions |
13
+
14
+ ## Install Runtime
15
+
16
+ ### Bun (Recommended)
17
+
18
+ ```bash
19
+ # macOS / Linux
20
+ curl -fsSL https://bun.sh/install | bash
21
+
22
+ # Windows (use WSL2)
23
+ # First install WSL2: wsl --install
24
+ # Then run the curl command above in WSL
25
+
26
+ # Verify
27
+ bun --version # Should be 1.3+
28
+ ```
29
+
30
+ ### Node.js (Alternative)
31
+
32
+ ```bash
33
+ # macOS (Homebrew)
34
+ brew install node@18
35
+
36
+ # Ubuntu/Debian
37
+ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
38
+ sudo apt-get install -y nodejs
39
+
40
+ # Windows
41
+ # Download from https://nodejs.org/
42
+
43
+ # Verify
44
+ node --version # Should be 18+
45
+ ```
46
+
47
+ ## Install PostgreSQL
48
+
49
+ ### macOS
50
+
51
+ ```bash
52
+ brew install postgresql@14
53
+ brew services start postgresql@14
54
+ ```
55
+
56
+ ### Ubuntu/Debian
57
+
58
+ ```bash
59
+ sudo apt-get update
60
+ sudo apt-get install postgresql-14
61
+ sudo service postgresql start
62
+ ```
63
+
64
+ ### Windows
65
+
66
+ Download from [postgresql.org/download/windows](https://www.postgresql.org/download/windows/) or use WSL2.
67
+
68
+ ### Create Database
69
+
70
+ ```bash
71
+ # macOS
72
+ psql postgres -c "CREATE DATABASE my_app_db;"
73
+
74
+ # Linux (Ubuntu/Debian)
75
+ sudo -u postgres psql -c "CREATE DATABASE my_app_db;"
76
+
77
+ # Verify
78
+ psql my_app_db -c "SELECT 1;" # Should return 1
79
+ ```
80
+
81
+ ## VS Code Setup (Recommended)
82
+
83
+ ### Extensions
84
+
85
+ ```bash
86
+ # Essential
87
+ code --install-extension dbaeumer.vscode-eslint
88
+ code --install-extension esbenp.prettier-vscode
89
+
90
+ # Recommended
91
+ code --install-extension usernamehw.errorlens
92
+ code --install-extension humao.rest-client
93
+ code --install-extension prisma.prisma # Works with Drizzle too
94
+ ```
95
+
96
+ ### Settings
97
+
98
+ Create `.vscode/settings.json`:
99
+
100
+ ```json
101
+ {
102
+ "editor.formatOnSave": true,
103
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
104
+ "editor.codeActionsOnSave": {
105
+ "source.fixAll.eslint": "explicit"
106
+ }
107
+ }
108
+ ```
109
+
110
+ ## Verify Setup
111
+
112
+ ```bash
113
+ bun --version # >= 1.3 (or node --version >= 18)
114
+ psql --version # >= 14
115
+ ```
116
+
117
+ ## Troubleshooting
118
+
119
+ ### Bun not found after install
120
+
121
+ ```bash
122
+ # Add to ~/.bashrc or ~/.zshrc
123
+ export BUN_INSTALL="$HOME/.bun"
124
+ export PATH="$BUN_INSTALL/bin:$PATH"
125
+
126
+ # Then reload
127
+ source ~/.bashrc # or ~/.zshrc
128
+ ```
129
+
130
+ ### PostgreSQL permission denied
131
+
132
+ ```bash
133
+ # Linux: Use sudo -u postgres
134
+ sudo -u postgres psql -c "CREATE DATABASE my_app_db;"
135
+
136
+ # macOS: Check if PostgreSQL is running
137
+ brew services list | grep postgresql
138
+ ```
139
+
140
+ ### PostgreSQL connection refused
141
+
142
+ ```bash
143
+ # Check if running
144
+ pg_isready
145
+
146
+ # Start service
147
+ # macOS
148
+ brew services start postgresql@14
149
+
150
+ # Linux
151
+ sudo service postgresql start
152
+ ```
153
+
154
+ ## Next Steps
155
+
156
+ - [5-Minute Quickstart](./5-minute-quickstart.md) — Build your first API
157
+ - [Complete Installation](../tutorials/complete-installation.md) — Full project setup
@@ -0,0 +1,89 @@
1
+ # Getting Started with Ignis
2
+
3
+ Welcome to Ignis — a TypeScript framework that combines enterprise architecture patterns with Hono's blazing performance. Whether you're building a SaaS backend, REST API, or microservice, these guides will take you from installation to production-ready code with type-safe database operations, auto-generated OpenAPI docs, and clean dependency injection.
4
+
5
+ <div class="guide-cards">
6
+
7
+ <a href="./get-started/setup" class="guide-card">
8
+ <span class="guide-icon">🛠️</span>
9
+ <h3>Setup</h3>
10
+ <p>Install Bun, PostgreSQL, and configure your IDE</p>
11
+ </a>
12
+
13
+ <a href="./get-started/5-minute-quickstart" class="guide-card highlight">
14
+ <span class="guide-icon">⚡</span>
15
+ <h3>5-Min Quickstart</h3>
16
+ <p>Your first endpoint in 5 minutes</p>
17
+ </a>
18
+
19
+ <a href="./tutorials/complete-installation" class="guide-card">
20
+ <span class="guide-icon">📦</span>
21
+ <h3>Full Installation</h3>
22
+ <p>Production-ready project setup</p>
23
+ </a>
24
+
25
+ <a href="./tutorials/building-a-crud-api" class="guide-card">
26
+ <span class="guide-icon">🗄️</span>
27
+ <h3>Build a CRUD API</h3>
28
+ <p>Complete Todo API with database</p>
29
+ </a>
30
+
31
+ <a href="./tutorials/testing" class="guide-card">
32
+ <span class="guide-icon">🧪</span>
33
+ <h3>Testing</h3>
34
+ <p>Write tests for your application</p>
35
+ </a>
36
+
37
+ <a href="./get-started/philosophy" class="guide-card">
38
+ <span class="guide-icon">💡</span>
39
+ <h3>Philosophy</h3>
40
+ <p>Why Ignis? Design decisions explained</p>
41
+ </a>
42
+
43
+ </div>
44
+
45
+ ## Learning Roadmap
46
+
47
+ <div class="roadmap">
48
+
49
+ <div class="roadmap-stage">
50
+ <div class="stage-header">
51
+ <span class="stage-num">1</span>
52
+ <h4>First Steps</h4>
53
+ </div>
54
+ <p><a href="./get-started/setup">Setup</a> → <a href="./get-started/5-minute-quickstart">5-Min Quickstart</a></p>
55
+ <span class="stage-desc">Get your environment ready and build your first endpoint</span>
56
+ </div>
57
+
58
+ <div class="roadmap-stage">
59
+ <div class="stage-header">
60
+ <span class="stage-num">2</span>
61
+ <h4>Build Something Real</h4>
62
+ </div>
63
+ <p><a href="./tutorials/complete-installation">Full Installation</a> → <a href="./tutorials/building-a-crud-api">CRUD API</a> → <a href="./tutorials/testing">Testing</a></p>
64
+ <span class="stage-desc">Create a complete API with database, validation, and tests</span>
65
+ </div>
66
+
67
+ <div class="roadmap-stage">
68
+ <div class="stage-header">
69
+ <span class="stage-num">3</span>
70
+ <h4>Understand the Framework</h4>
71
+ </div>
72
+ <p><a href="./core-concepts/application">Application</a> → <a href="./core-concepts/controllers">Controllers</a> → <a href="./core-concepts/services">Services</a> → <a href="./core-concepts/dependency-injection">DI</a></p>
73
+ <span class="stage-desc">Deep dive into core concepts and architecture patterns</span>
74
+ </div>
75
+
76
+ <div class="roadmap-stage">
77
+ <div class="stage-header">
78
+ <span class="stage-num">4</span>
79
+ <h4>Go to Production</h4>
80
+ </div>
81
+ <p><a href="/best-practices/">Best Practices</a> → <a href="/references/">API Reference</a></p>
82
+ <span class="stage-desc">Learn patterns, security, performance, and deployment</span>
83
+ </div>
84
+
85
+ </div>
86
+
87
+ ::: tip New to backend development?
88
+ Check out our [Glossary](./reference/glossary) for explanations of key terms like Controllers, Repositories, and Dependency Injection.
89
+ :::
@@ -0,0 +1,243 @@
1
+ # Glossary for Beginners
2
+
3
+ Quick reference for key terms in Ignis documentation.
4
+
5
+
6
+ ## Core Framework Terms
7
+
8
+ | Term | Description |
9
+ |------|-------------|
10
+ | **Application** | Main entry point extending `BaseApplication`. Registers all components. |
11
+ | **Controller** | Handles HTTP requests, defines API endpoints (`@controller`, `@get`, `@post`) |
12
+ | **Service** | Contains business logic between controllers and repositories |
13
+ | **Repository** | Database operations for one entity (`find`, `create`, `updateById`, etc.) |
14
+ | **DataSource** | Database connection configuration (host, port, credentials) |
15
+ | **Model/Entity** | Defines data structure and relationships using Drizzle schema |
16
+ | **Component** | Reusable plugin that bundles related functionality |
17
+ | **DI Container** | Central registry that stores and resolves dependencies. The `Application` class acts as the container. |
18
+
19
+ ```typescript
20
+ // Application registers everything
21
+ export class Application extends BaseApplication {
22
+ preConfigure() {
23
+ this.dataSource(PostgresDataSource);
24
+ this.repository(TodoRepository);
25
+ this.controller(TodoController);
26
+ }
27
+ }
28
+
29
+ // Controller handles HTTP
30
+ const TodoRoutes = {
31
+ GET_ALL: {
32
+ method: HTTP.Methods.GET,
33
+ path: '/',
34
+ responses: jsonResponse({ schema: z.array(z.object({ id: z.string() })) }),
35
+ },
36
+ } as const;
37
+
38
+ @controller({ path: '/todos' })
39
+ export class TodoController extends BaseController {
40
+ @get({ configs: TodoRoutes.GET_ALL })
41
+ async getAll(c: TRouteContext<typeof TodoRoutes.GET_ALL>) {
42
+ const todos = await this.repository.find({});
43
+ return c.json(todos, HTTP.ResultCodes.RS_2.Ok);
44
+ }
45
+ }
46
+
47
+ // Repository handles database
48
+ @repository({ model: Todo, dataSource: PostgresDataSource })
49
+ export class TodoRepository extends DefaultCRUDRepository<typeof Todo.schema> {}
50
+ ```
51
+
52
+ **Related:** [Application](../core-concepts/application/) | [Controllers](../core-concepts/controllers) | [Services](../core-concepts/services) | [Repositories](../../references/base/repositories/)
53
+
54
+
55
+ ## TypeScript & Pattern Terms
56
+
57
+ ### Decorators
58
+ Annotations starting with `@` that add behavior to classes/methods.
59
+
60
+ | Decorator | Purpose |
61
+ |-----------|---------|
62
+ | `@controller` | Marks class as controller |
63
+ | `@model` | Marks class as model/entity |
64
+ | `@repository` | Marks class as repository |
65
+ | `@datasource` | Marks class as datasource |
66
+ | `@inject` | Requests dependency from container |
67
+ | `@get`, `@post`, `@patch`, `@delete` | HTTP route handlers |
68
+
69
+ ### Dependency Injection (DI)
70
+ Classes receive dependencies from an external container instead of creating them internally. Benefits: testable, flexible, maintainable.
71
+
72
+ ```typescript
73
+ // ❌ Without DI - creates own dependencies
74
+ class TodoController {
75
+ private repository = new TodoRepository(new PostgresDataSource());
76
+ }
77
+
78
+ // ✅ With DI - receives from container
79
+ class TodoController {
80
+ constructor(
81
+ @inject({ key: 'repositories.TodoRepository' })
82
+ private repository: TodoRepository
83
+ ) {}
84
+ }
85
+ ```
86
+
87
+ ### Container & Binding
88
+ Container stores all dependencies. Binding registers classes/values under keys.
89
+
90
+ ```typescript
91
+ // Register in Application
92
+ this.repository(TodoRepository); // Key: 'repositories.TodoRepository'
93
+ this.bind({ key: 'config.apiKey' }).toValue('sk_live_xxx');
94
+
95
+ // Resolve via @inject
96
+ @inject({ key: 'repositories.TodoRepository' }) private repository: TodoRepository;
97
+ ```
98
+
99
+ ### Generic Types
100
+ TypeScript feature for reusable components: `<T>` or `<SomeType>`.
101
+
102
+ ```typescript
103
+ class DefaultCRUDRepository<TSchema> { find(): TSchema[] { ... } }
104
+ class TodoRepository extends DefaultCRUDRepository<typeof Todo.schema> {}
105
+ ```
106
+
107
+ **Related:** [Dependency Injection Guide](../core-concepts/dependency-injection)
108
+
109
+
110
+ ## Database Terms
111
+
112
+ | Term | Description |
113
+ |------|-------------|
114
+ | **ORM** | Tool to work with databases using code instead of raw SQL. Ignis uses Drizzle ORM. |
115
+ | **Drizzle ORM** | Type-safe ORM library. [Docs](https://orm.drizzle.team/) |
116
+ | **Schema** | Table structure definition using Drizzle syntax |
117
+ | **Migration** | Script that creates/modifies tables. Version control for database structure. |
118
+ | **Connector** | Database driver that executes queries (via `dataSource.connector`) |
119
+ | **Relations** | Connections between tables (hasMany, belongsTo, hasOne) |
120
+
121
+ ```typescript
122
+ // Schema definition
123
+ export const todoTable = pgTable('Todo', {
124
+ id: text('id').primaryKey(),
125
+ title: text('title').notNull(),
126
+ completed: boolean('completed').default(false),
127
+ });
128
+
129
+ // Relations
130
+ export const userRelations = createRelations({
131
+ source: userTable,
132
+ relations: [{ type: 'hasMany', model: () => Post, foreignKey: 'authorId' }],
133
+ });
134
+
135
+ // Query with relations
136
+ await userRepo.find({ filter: { include: [{ relation: 'posts' }] } });
137
+ ```
138
+
139
+ ```bash
140
+ # Migrations
141
+ bun run drizzle-kit generate # Generate from schema changes
142
+ bun run migrate:dev # Apply to database
143
+ ```
144
+
145
+
146
+ ## Query & Filter Terms
147
+
148
+ ### Filter Object
149
+ Specifies what data to retrieve: `where`, `limit`, `order`, `include`.
150
+
151
+ ```typescript
152
+ await repository.find({
153
+ filter: {
154
+ where: { status: 'active', age: { gte: 18 } },
155
+ order: ['createdAt DESC'],
156
+ limit: 10,
157
+ include: [{ relation: 'author' }],
158
+ }
159
+ });
160
+ ```
161
+
162
+ ### Operators
163
+
164
+ | Operator | Meaning | Example |
165
+ |----------|---------|---------|
166
+ | `eq` | Equal | `{ status: { eq: 'active' } }` |
167
+ | `ne` | Not equal | `{ status: { ne: 'deleted' } }` |
168
+ | `gt`, `gte` | Greater than (or equal) | `{ age: { gte: 18 } }` |
169
+ | `lt`, `lte` | Less than (or equal) | `{ price: { lt: 100 } }` |
170
+ | `like`, `ilike` | Pattern match | `{ name: { like: '%john%' } }` |
171
+ | `in`, `nin` | In list / not in list | `{ id: { in: [1, 2, 3] } }` |
172
+ | `between` | Range | `{ age: { between: [18, 65] } }` |
173
+
174
+ **Related:** [Filter System](../../references/base/filter-system/) | [Repositories](../../references/base/repositories/)
175
+
176
+
177
+ ## HTTP & API Terms
178
+
179
+ ### REST API Methods
180
+
181
+ | Method | URL | Action |
182
+ |--------|-----|--------|
183
+ | GET | `/todos` | List all |
184
+ | GET | `/todos/:id` | Get one |
185
+ | POST | `/todos` | Create |
186
+ | PATCH | `/todos/:id` | Update |
187
+ | DELETE | `/todos/:id` | Delete |
188
+
189
+ ```typescript
190
+ const TodoRoutes = {
191
+ GET_ALL: { method: HTTP.Methods.GET, path: '/', responses: jsonResponse({ schema: z.array(z.any()) }) },
192
+ GET_BY_ID: { method: HTTP.Methods.GET, path: '/:id', request: { params: z.object({ id: z.string() }) }, responses: jsonResponse({ schema: z.any() }) },
193
+ CREATE: { method: HTTP.Methods.POST, path: '/', request: { body: jsonContent({ schema: z.any() }) }, responses: jsonResponse({ schema: z.any() }) },
194
+ } as const;
195
+
196
+ @controller({ path: '/todos' })
197
+ class TodoController {
198
+ @get({ configs: TodoRoutes.GET_ALL })
199
+ async getAll(c: TRouteContext<typeof TodoRoutes.GET_ALL>) { ... }
200
+
201
+ @get({ configs: TodoRoutes.GET_BY_ID })
202
+ async getById(c: TRouteContext<typeof TodoRoutes.GET_BY_ID>) {
203
+ const { id } = c.req.valid('param');
204
+ ...
205
+ }
206
+
207
+ @post({ configs: TodoRoutes.CREATE })
208
+ async create(c: TRouteContext<typeof TodoRoutes.CREATE>) {
209
+ const data = c.req.valid('json');
210
+ ...
211
+ }
212
+ }
213
+ ```
214
+
215
+ | Term | Description |
216
+ |------|-------------|
217
+ | **Endpoint** | URL path that API responds to (e.g., `GET /todos`) |
218
+ | **Route Parameter** | Variable in URL marked with `:` (e.g., `:id`) |
219
+ | **Request Body** | JSON data sent with POST/PATCH requests |
220
+ | **OpenAPI/Swagger** | Auto-generated API docs at `/docs` |
221
+
222
+
223
+ ## Environment & Configuration
224
+
225
+ Environment variables store configuration outside code (in `.env` files). Ignis uses `APP_ENV_` prefix to avoid system conflicts.
226
+
227
+ ```bash
228
+ # .env file
229
+ APP_ENV_POSTGRES_HOST=localhost
230
+ APP_ENV_POSTGRES_PASSWORD=secret123
231
+ APP_ENV_SERVER_PORT=3000
232
+ ```
233
+
234
+ ```typescript
235
+ const host = process.env.APP_ENV_POSTGRES_HOST;
236
+ ```
237
+
238
+ **Related:** [Environment Variables Reference](../../references/configuration/environment-variables)
239
+
240
+
241
+ ## See Also
242
+
243
+ [5-Minute Quickstart](../get-started/5-minute-quickstart) | [Building a CRUD API](../tutorials/building-a-crud-api) | [Repositories](../../references/base/repositories/)
@@ -594,7 +594,6 @@ AI: [Uses listCategories, then listDocs with category filter]
594
594
  AI: "The Helpers category contains: Redis, Logger, Queue..."
595
595
  ```
596
596
 
597
- ---
598
597
 
599
598
  ## Local Development Setup
600
599
 
@@ -649,7 +648,6 @@ Use absolute paths in your config:
649
648
  }
650
649
  ```
651
650
 
652
- ---
653
651
 
654
652
  ## Comprehensive Troubleshooting Guide
655
653
 
@@ -678,7 +676,6 @@ cat ~/.config/claude-code/config.json | python -m json.tool
678
676
  - Ask: `Can you search the Ignis docs for "controller"?`
679
677
  - Look for: `[Using tool: searchDocs]`
680
678
 
681
- ---
682
679
 
683
680
  ### Common Issues and Solutions
684
681
 
@@ -725,7 +722,6 @@ cat ~/.config/claude-code/config.json | python -m json.tool
725
722
  npm install -g @venizia/ignis-docs
726
723
  ```
727
724
 
728
- ---
729
725
 
730
726
  #### ❌ Issue #2: AI assistant doesn't use MCP tools
731
727
 
@@ -784,7 +780,6 @@ cat ~/.config/claude-code/config.json | python -m json.tool
784
780
  # Should NOT error. Press Ctrl+C to stop.
785
781
  ```
786
782
 
787
- ---
788
783
 
789
784
  #### ❌ Issue #3: "Module not found" errors
790
785
 
@@ -818,7 +813,6 @@ cat ~/.config/claude-code/config.json | python -m json.tool
818
813
  bun x -p @venizia/ignis-docs@latest ignis-docs-mcp
819
814
  ```
820
815
 
821
- ---
822
816
 
823
817
  #### ❌ Issue #4: First search takes 10+ seconds
824
818
 
@@ -831,7 +825,6 @@ cat ~/.config/claude-code/config.json | python -m json.tool
831
825
 
832
826
  **Not an error - just one-time startup cost.**
833
827
 
834
- ---
835
828
 
836
829
  #### ❌ Issue #5: Config file doesn't exist
837
830
 
@@ -854,7 +847,6 @@ cat > ~/.config/claude-code/config.json <<'EOF'
854
847
  EOF
855
848
  ```
856
849
 
857
- ---
858
850
 
859
851
  ### 🐛 Advanced Troubleshooting
860
852
 
@@ -894,7 +886,6 @@ If this works, the issue is specific to `@venizia/ignis-docs`.
894
886
  - Error messages
895
887
  - Your config file (remove secrets)
896
888
 
897
- ---
898
889
 
899
890
  ## What's Next?
900
891
 
@@ -902,7 +893,6 @@ If this works, the issue is specific to `@venizia/ignis-docs`.
902
893
  - **Advanced Usage:** Explore how to chain tools for complex documentation queries
903
894
  - **Contribute:** Help improve the docs or add new features
904
895
 
905
- ---
906
896
 
907
897
  ## FAQ
908
898