@venizia/ignis-docs 0.2.0 → 0.2.1-1
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 +14 -14
- package/content/best-practices/api-usage-examples.md +39 -19
- package/content/best-practices/architectural-patterns.md +24 -13
- package/content/best-practices/architecture-decisions.md +29 -16
- package/content/best-practices/code-style-standards/advanced-patterns.md +43 -31
- package/content/best-practices/code-style-standards/constants-configuration.md +19 -4
- package/content/best-practices/code-style-standards/control-flow.md +33 -1
- package/content/best-practices/code-style-standards/documentation.md +28 -8
- package/content/best-practices/code-style-standards/function-patterns.md +15 -4
- package/content/best-practices/code-style-standards/index.md +7 -2
- package/content/best-practices/code-style-standards/naming-conventions.md +27 -3
- package/content/best-practices/code-style-standards/route-definitions.md +9 -5
- package/content/best-practices/code-style-standards/tooling.md +14 -1
- package/content/best-practices/code-style-standards/type-safety.md +39 -6
- package/content/best-practices/common-pitfalls.md +59 -35
- package/content/best-practices/contribution-workflow.md +8 -4
- package/content/best-practices/data-modeling.md +78 -62
- package/content/best-practices/deployment-strategies.md +56 -19
- package/content/best-practices/error-handling.md +247 -153
- package/content/best-practices/index.md +6 -0
- package/content/best-practices/performance-optimization.md +26 -13
- package/content/best-practices/security-guidelines.md +35 -9
- package/content/best-practices/testing-strategies.md +7 -2
- package/content/best-practices/troubleshooting-tips.md +27 -17
- package/content/extensions/components/api-reference.md +109 -323
- package/content/extensions/components/authentication/api.md +489 -602
- package/content/extensions/components/authentication/errors.md +135 -498
- package/content/extensions/components/authentication/index.md +89 -801
- package/content/extensions/components/authentication/usage.md +231 -955
- package/content/extensions/components/authorization/api.md +991 -644
- package/content/extensions/components/authorization/errors.md +204 -208
- package/content/extensions/components/authorization/getting-started.md +227 -0
- package/content/extensions/components/authorization/index.md +88 -795
- package/content/extensions/components/authorization/usage.md +219 -528
- package/content/extensions/components/health-check.md +77 -243
- package/content/extensions/components/index.md +24 -90
- package/content/extensions/components/mail/api.md +553 -285
- package/content/extensions/components/mail/errors.md +76 -62
- package/content/extensions/components/mail/index.md +111 -463
- package/content/extensions/components/mail/usage.md +139 -173
- package/content/extensions/components/request-tracker.md +70 -173
- package/content/extensions/components/socket-io/api.md +462 -785
- package/content/extensions/components/socket-io/errors.md +49 -51
- package/content/extensions/components/socket-io/index.md +69 -372
- package/content/extensions/components/socket-io/usage.md +212 -105
- package/content/extensions/components/static-asset/api.md +461 -141
- package/content/extensions/components/static-asset/errors.md +121 -53
- package/content/extensions/components/static-asset/index.md +84 -606
- package/content/extensions/components/static-asset/usage.md +184 -299
- package/content/extensions/components/template/index.md +3 -3
- package/content/extensions/components/websocket/api.md +311 -404
- package/content/extensions/components/websocket/errors.md +47 -56
- package/content/extensions/components/websocket/index.md +75 -407
- package/content/extensions/components/websocket/usage.md +120 -338
- package/content/extensions/helpers/cron/index.md +52 -160
- package/content/extensions/helpers/crypto/index.md +67 -480
- package/content/extensions/helpers/crypto/reference.md +528 -0
- package/content/extensions/helpers/env/index.md +64 -178
- package/content/extensions/helpers/error/index.md +286 -196
- package/content/extensions/helpers/index.md +61 -47
- package/content/extensions/helpers/inversion/index.md +76 -550
- package/content/extensions/helpers/inversion/reference.md +530 -0
- package/content/extensions/helpers/kafka/admin.md +23 -3
- package/content/extensions/helpers/kafka/compile-binary.md +83 -52
- package/content/extensions/helpers/kafka/consumer.md +65 -28
- package/content/extensions/helpers/kafka/examples.md +46 -253
- package/content/extensions/helpers/kafka/index.md +55 -617
- package/content/extensions/helpers/kafka/producer.md +156 -22
- package/content/extensions/helpers/kafka/schema-registry.md +59 -79
- package/content/extensions/helpers/logger/hf-logger.md +220 -0
- package/content/extensions/helpers/logger/index.md +78 -552
- package/content/extensions/helpers/logger/pino.md +105 -0
- package/content/extensions/helpers/logger/reference.md +937 -0
- package/content/extensions/helpers/network/api.md +276 -195
- package/content/extensions/helpers/network/index.md +87 -524
- package/content/extensions/helpers/queue/index.md +80 -897
- package/content/extensions/helpers/queue/reference.md +494 -0
- package/content/extensions/helpers/redis/index.md +86 -640
- package/content/extensions/helpers/redis/reference.md +784 -0
- package/content/extensions/helpers/secrets/index.md +136 -0
- package/content/extensions/helpers/socket-io/api.md +325 -204
- package/content/extensions/helpers/socket-io/index.md +79 -429
- package/content/extensions/helpers/storage/api.md +584 -464
- package/content/extensions/helpers/storage/index.md +80 -573
- package/content/extensions/helpers/types/index.md +75 -495
- package/content/extensions/helpers/types/reference.md +689 -0
- package/content/extensions/helpers/uid/index.md +176 -189
- package/content/extensions/helpers/websocket/api.md +366 -214
- package/content/extensions/helpers/websocket/index.md +68 -503
- package/content/extensions/helpers/worker-thread/index.md +62 -396
- package/content/extensions/helpers/worker-thread/reference.md +428 -0
- package/content/extensions/index.md +38 -39
- package/content/extensions/src-details/mcp-server.md +96 -548
- package/content/guides/core-concepts/persistent/datasources.md +2 -2
- package/content/guides/core-concepts/persistent/index.md +5 -1
- package/content/guides/core-concepts/persistent/models.md +1 -1
- package/content/guides/core-concepts/persistent/pglite.md +218 -0
- package/content/guides/core-concepts/persistent/postgres-drivers.md +21 -15
- package/content/guides/core-concepts/persistent/search-meilisearch.md +22 -12
- package/content/guides/core-concepts/persistent/search-typesense.md +28 -16
- package/content/guides/core-concepts/persistent/sqlite.md +296 -0
- package/content/guides/core-concepts/persistent/transactions.md +12 -11
- package/content/guides/core-concepts/secrets-vault.md +177 -0
- package/content/guides/core-concepts/services.md +1 -1
- package/content/guides/get-started/5-minute-quickstart.md +59 -206
- package/content/guides/get-started/philosophy.md +135 -670
- package/content/guides/get-started/setup.md +53 -74
- package/content/guides/migrations/redis-helpers-migration.md +5 -4
- package/content/guides/migrations/scoped-rbac-migration.md +5 -5
- package/content/guides/migrations/unified-connectors-migration.md +8 -7
- package/content/guides/tutorials/ecommerce-api.md +3 -8
- package/content/guides/tutorials/realtime-chat.md +1 -1
- package/content/references/base/application.md +64 -22
- package/content/references/base/components.md +3 -3
- package/content/references/base/connectors.md +79 -136
- package/content/references/base/controllers.md +12 -12
- package/content/references/base/datasources-reference.md +600 -0
- package/content/references/base/datasources.md +84 -444
- package/content/references/base/dependency-injection.md +25 -46
- package/content/references/base/filter-system/application-usage.md +95 -123
- package/content/references/base/filter-system/array-operators.md +33 -43
- package/content/references/base/filter-system/comparison-operators.md +55 -63
- package/content/references/base/filter-system/default-filter.md +144 -350
- package/content/references/base/filter-system/fields-order-pagination.md +116 -148
- package/content/references/base/filter-system/index.md +114 -253
- package/content/references/base/filter-system/json-filtering.md +52 -181
- package/content/references/base/filter-system/list-operators.md +28 -44
- package/content/references/base/filter-system/logical-operators.md +69 -114
- package/content/references/base/filter-system/null-operators.md +41 -98
- package/content/references/base/filter-system/pattern-matching.md +48 -51
- package/content/references/base/filter-system/quick-reference.md +93 -196
- package/content/references/base/filter-system/range-operators.md +22 -38
- package/content/references/base/filter-system/tips.md +70 -133
- package/content/references/base/filter-system/use-cases.md +173 -232
- package/content/references/base/grpc-controllers.md +53 -17
- package/content/references/base/index.md +5 -3
- package/content/references/base/middlewares.md +43 -28
- package/content/references/base/models-reference.md +886 -0
- package/content/references/base/models.md +81 -1452
- package/content/references/base/providers.md +8 -8
- package/content/references/base/repositories/advanced.md +281 -419
- package/content/references/base/repositories/index.md +84 -644
- package/content/references/base/repositories/mixins.md +25 -21
- package/content/references/base/repositories/relations.md +194 -375
- package/content/references/base/repositories/soft-deletable.md +67 -55
- package/content/references/base/secrets.md +267 -0
- package/content/references/base/services.md +8 -6
- package/content/references/configuration/environment-variables.md +73 -21
- package/content/references/configuration/index.md +51 -31
- package/content/references/index.md +1 -1
- package/content/references/quick-reference.md +3 -16
- package/content/references/utilities/crypto.md +35 -76
- package/content/references/utilities/date.md +33 -73
- package/content/references/utilities/duration.md +85 -0
- package/content/references/utilities/index.md +6 -2
- package/content/references/utilities/jsx-reference.md +298 -0
- package/content/references/utilities/jsx.md +82 -525
- package/content/references/utilities/module.md +81 -61
- package/content/references/utilities/parse.md +34 -64
- package/content/references/utilities/performance.md +33 -58
- package/content/references/utilities/promise.md +28 -62
- package/content/references/utilities/request.md +58 -218
- package/content/references/utilities/retry.md +139 -0
- package/content/references/utilities/schema.md +43 -137
- package/content/references/utilities/statuses-reference.md +361 -0
- package/content/references/utilities/statuses.md +63 -667
- package/dist/mcp-server/index.js +0 -0
- package/dist/mcp-server/tools/github/list-project-files.tool.d.ts +1 -1
- package/dist/mcp-server/tools/github/list-project-files.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/github/list-project-files.tool.js +3 -3
- package/dist/mcp-server/tools/github/search-code.tool.js +1 -1
- package/dist/mcp-server/tools/github/verify-dependencies.tool.js +1 -1
- package/dist/mcp-server/tools/github/view-source-file.tool.js +1 -1
- package/package.json +24 -23
|
@@ -1,178 +1,121 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: Connectors
|
|
3
|
-
description: How IGNIS
|
|
4
|
-
difficulty:
|
|
2
|
+
title: Connectors
|
|
3
|
+
description: How IGNIS supports multiple database and search engines behind one engine-neutral contract
|
|
4
|
+
difficulty: intermediate
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Connectors
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
A connector is how IGNIS adds a storage engine - PostgreSQL, Typesense, Meilisearch - behind one engine-neutral contract. `DataSource`, `Entity`, and `Repository` mean the same thing no matter which engine backs them.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
"A connector" (this page) means an engine-integration module. "The connector" means the Drizzle instance exposed as `this.connector` on a datasource or repository. The two senses are unrelated despite the shared word.
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## In one example
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
The fix moves everything engine-specific out of `src/base` and into `src/connectors/<engine>/`, leaving `src/base` with only what every engine can implement:
|
|
18
|
-
|
|
19
|
-
| Concept | Neutral (`src/base`) | PostgreSQL (`connectors/postgres`) | Typesense (`connectors/typesense`) |
|
|
20
|
-
|---|---|---|---|
|
|
21
|
-
| DataSource | `AbstractDataSource` | `AbstractPostgresDataSource` → `BasePostgresDataSource` | `AbstractSearchDataSource` → `BaseSearchDataSource` → `TypesenseDataSource` |
|
|
22
|
-
| Entity | `AbstractEntity` | `BasePostgresEntity` (alias `BaseEntity`) | `BaseSearchEntity` |
|
|
23
|
-
| Repository | `AbstractRepository` | `PostgresBaseRepository` → `ReadableRepository`/`PersistableRepository`/`DefaultCRUDRepository`/`SoftDeletableRepository` | `TypesenseBaseRepository` → `ReadableSearchRepository`/`PersistableSearchRepository`/`DefaultSearchRepository` |
|
|
24
|
-
| Transactions | throws `NotSupported` by default | real transactions, 3 isolation levels | throws `NotSupported` |
|
|
25
|
-
| Filtering | neutral `TWhere`/`TFilter` | SQL WHERE via Drizzle | typesense query DSL via `TypesenseQueryDialect` |
|
|
26
|
-
|
|
27
|
-
## The neutral contract
|
|
28
|
-
|
|
29
|
-
### `AbstractDataSource`
|
|
30
|
-
|
|
31
|
-
`packages/core/src/base/datasources/abstract.ts` declares:
|
|
15
|
+
The neutral `AbstractDataSource` has no SQL, no pool, no Drizzle. The postgres connector's `BasePostgresDataSource` adds all of that, and `@datasource({ driver })` names the concrete client class:
|
|
32
16
|
|
|
33
17
|
```typescript
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
async beginTransaction(_opts?: ITransactionOptions): Promise<ITransaction> {
|
|
46
|
-
return throwNotSupported({
|
|
47
|
-
scope: this.constructor.name,
|
|
48
|
-
feature: 'Transactions',
|
|
49
|
-
logger: this.logger,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
18
|
+
import { Pool } from 'pg';
|
|
19
|
+
import { datasource } from '@venizia/ignis';
|
|
20
|
+
import { BasePostgresDataSource } from '@venizia/ignis/postgres';
|
|
21
|
+
import { NodePostgresDriver } from '@venizia/ignis/postgres/node-postgres';
|
|
22
|
+
|
|
23
|
+
interface IDataSourceConfigs {
|
|
24
|
+
host: string;
|
|
25
|
+
port: number;
|
|
26
|
+
database: string;
|
|
27
|
+
user: string;
|
|
28
|
+
password: string;
|
|
52
29
|
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
No `pool`, no `connector`, no SQL types. Every engine either overrides `getCapabilities()`/`beginTransaction()` (PostgreSQL) or accepts the neutral default (typesense).
|
|
56
|
-
|
|
57
|
-
### `AbstractEntity`
|
|
58
30
|
|
|
59
|
-
|
|
31
|
+
@datasource({ driver: NodePostgresDriver })
|
|
32
|
+
export class PostgresDataSource extends BasePostgresDataSource<IDataSourceConfigs> {
|
|
33
|
+
override configure(): void {
|
|
34
|
+
this.client = new Pool(this.settings);
|
|
35
|
+
}
|
|
60
36
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return 'string';
|
|
37
|
+
override getConnectionString(): string {
|
|
38
|
+
const { host, port, user, password, database } = this.settings;
|
|
39
|
+
return `postgresql://${user}:${password}@${host}:${port}/${database}`;
|
|
65
40
|
}
|
|
66
41
|
}
|
|
67
42
|
```
|
|
68
43
|
|
|
69
|
-
|
|
44
|
+
A Typesense datasource follows the same shape but extends the search connector's `BaseSearchDataSource` instead - no pool, no `getConnectionString()`, no transactions.
|
|
70
45
|
|
|
71
|
-
|
|
46
|
+
## How it works
|
|
72
47
|
|
|
73
|
-
`packages/core/src/base
|
|
74
|
-
|
|
75
|
-
```typescript
|
|
76
|
-
abstract class AbstractRepository<
|
|
77
|
-
TDataObject extends object,
|
|
78
|
-
TPersistObject extends object = TDataObject,
|
|
79
|
-
TOptions extends IExtraOptions = IExtraOptions,
|
|
80
|
-
> extends BaseHelper implements IPersistableRepository<TDataObject, TPersistObject, TOptions>
|
|
81
|
-
```
|
|
48
|
+
- **Three engine-neutral roots.** `packages/core-server/src/base` declares three roots every connector implements:
|
|
82
49
|
|
|
83
|
-
|
|
50
|
+
| Root | Purpose | Neutral default |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| `AbstractDataSource` | Connection ownership | No `pool`, no Drizzle `connector`; `beginTransaction()` throws `NotSupported` |
|
|
53
|
+
| `AbstractEntity` | Model/schema contract | `name`, `getSchema()`, `getIdType()` |
|
|
54
|
+
| `AbstractRepository` | Data access contract | Generics named for role (data/persist/options), not any one engine's vocabulary |
|
|
84
55
|
|
|
85
|
-
|
|
56
|
+
- **Connectors narrow the roots into a real engine.** `packages/core-server/src/connectors/<engine>` adds engine-specific members:
|
|
86
57
|
|
|
87
|
-
|
|
58
|
+
| Connector | Adds | `getCapabilities()` |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| **postgres** (`connectors/postgres`) | `pool`, Drizzle `connector`, SQL-shaped `TWhere`/`TFilter`, real transactions with isolation levels | `{ transactions: true }` |
|
|
61
|
+
| **search** (`connectors/search`) | Engine-neutral search base - no SQL, no transactions. Both typesense and meilisearch extend it (not `AbstractDataSource` directly), sharing one query-dialect and capability shape | inherited neutral default |
|
|
88
62
|
|
|
89
|
-
|
|
63
|
+
- **`@datasource({ driver })` picks the concrete client, within an engine.** Postgres takes a driver **class** (`NodePostgresDriver` or `PostgresJsDriver`), never a driver-name string. A bundler packages values, not text, so a string would leave the peer dependency uninstalled.
|
|
64
|
+
- **All engine clients stay optional peer dependencies.** Importing `@venizia/ignis/postgres` alone loads zero client libraries.
|
|
65
|
+
- **Search connectors are subpath-only.** `@venizia/ignis/typesense` and `@venizia/ignis/meilisearch` are excluded from the root `@venizia/ignis` barrel. An app that never touches search never pulls a search client into its bundle.
|
|
90
66
|
|
|
91
|
-
|
|
67
|
+
**Canonical names and aliases**
|
|
92
68
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
"./postgres/node-postgres": "dist/connectors/postgres/drivers/node-postgres.js", // concrete driver (value-imports `pg`)
|
|
99
|
-
"./postgres/postgres-js": "dist/connectors/postgres/drivers/postgres-js.js", // concrete driver (value-imports `postgres`)
|
|
100
|
-
"./postgres/supabase": "dist/connectors/postgres/supabase/index.js", // Supabase pooler + RLS helpers
|
|
101
|
-
"./search": "dist/connectors/search/index.js", // engine-neutral search paradigm (no engine client)
|
|
102
|
-
"./typesense": "dist/connectors/typesense/index.js", // subpath-only, optional peer
|
|
103
|
-
"./meilisearch": "dist/connectors/meilisearch/index.js" // subpath-only, optional peer
|
|
104
|
-
}
|
|
105
|
-
```
|
|
69
|
+
| Layer | Canonical (`Relational` paradigm) | Compatibility alias (`Postgres`-prefixed) |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| DataSource | `BaseRelationalDataSource` | `BasePostgresDataSource` |
|
|
72
|
+
| Entity | `BaseRelationalEntity` | `BasePostgresEntity` |
|
|
73
|
+
| Repository | `RelationalBaseRepository` | `PostgresBaseRepository` |
|
|
106
74
|
|
|
107
|
-
|
|
108
|
-
> `pg` and `postgres` are **both optional peer dependencies** (`peerDependenciesMeta.pg.optional` / `.postgres.optional`). The root barrel, `@venizia/ignis/postgres`, and the drivers barrel (`connectors/postgres/drivers/index.ts`) load **zero** `pg`/`postgres` modules - the drivers barrel exports only the neutral `IRelationalDriver` contract. A concrete driver value-imports its own client, so reach it by its own sub-path only: `@venizia/ignis/postgres/node-postgres` or `@venizia/ignis/postgres/postgres-js`. There is no structural client sniffing: `@datasource({ driver })` names the driver **class** directly (`NodePostgresDriver`/`PostgresJsDriver`), and the base datasource's `wireDriverFromMetadata()` instantiates that named class over `this.client` lazily, on first `getConnector()`/`beginTransaction()`. Naming a class rather than a driver-name string is what carries `pg`/`postgres` into the app's bundle - a bundler only packages a real value reference, never text, and a bare side-effect import would not survive `sideEffects: false`. This is what keeps IGNIS from forcing a database client on a project that does not use one. See [Postgres Drivers & Supabase](/guides/core-concepts/persistent/postgres-drivers).
|
|
75
|
+
Both names resolve to the same class - existing imports keep working.
|
|
109
76
|
|
|
110
|
-
|
|
111
|
-
> The search connectors (`search`/`typesense`/`meilisearch`) no longer re-export their `internal/` barrels (`SearchConnectorInternal`, `TypesenseInternal`, `MeilisearchInternal`) from the connector barrel. There is no sub-path export for them either, and package `exports` blocks deep imports - so no specifier reaches them from outside the package. They are implementation detail; if you need what they do, ask for a supported API.
|
|
77
|
+
## Common tasks
|
|
112
78
|
|
|
113
|
-
|
|
114
|
-
// packages/core/src/index.ts - root barrel
|
|
115
|
-
export * from './base';
|
|
116
|
-
export * from './common';
|
|
117
|
-
export * from './components';
|
|
118
|
-
export * from './connectors'; // -> connectors/index.ts: export * from './postgres';
|
|
119
|
-
export * from './helpers';
|
|
120
|
-
export * from './utilities';
|
|
121
|
-
```
|
|
79
|
+
### Pick an engine
|
|
122
80
|
|
|
123
|
-
-
|
|
124
|
-
- **`@venizia/ignis/postgres`** re-exports the same connector in isolation, for code that wants to be explicit about which engine it depends on.
|
|
125
|
-
- **`@venizia/ignis/typesense`** is **subpath-only** - it is deliberately excluded from the root barrel because `typesense` is an optional peer dependency (`"peerDependenciesMeta": { "typesense": { "optional": true } }`). Importing from the root must never force-install the typesense client for apps that don't use search.
|
|
81
|
+
Import the connector for the engine you need - `@venizia/ignis/postgres` for a relational database with transactions, `@venizia/ignis/typesense` or `@venizia/ignis/meilisearch` for document search. The root `@venizia/ignis` barrel re-exports postgres for backward compatibility; search engines are always subpath-only:
|
|
126
82
|
|
|
127
83
|
```typescript
|
|
128
|
-
//
|
|
84
|
+
// Postgres: available at the root or the subpath - same class either way
|
|
129
85
|
import { BaseDataSource } from '@venizia/ignis';
|
|
130
86
|
import { BasePostgresDataSource } from '@venizia/ignis/postgres';
|
|
131
87
|
|
|
132
|
-
//
|
|
133
|
-
import { TypesenseDataSource
|
|
88
|
+
// Search engines: subpath only, never at the root
|
|
89
|
+
import { TypesenseDataSource } from '@venizia/ignis/typesense';
|
|
90
|
+
import { MeilisearchDataSource } from '@venizia/ignis/meilisearch';
|
|
134
91
|
```
|
|
135
92
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
Each connector's canonical class names carry the engine name (`BasePostgresDataSource`, `BasePostgresEntity`), matching the pattern typesense follows (`TypesenseDataSource`). PostgreSQL additionally re-exports the pre-restructure names as aliases, so existing imports do not break:
|
|
139
|
-
|
|
140
|
-
```typescript
|
|
141
|
-
// packages/core/src/connectors/postgres/datasources/index.ts
|
|
142
|
-
export { BasePostgresDataSource as BaseDataSource } from './base-datasource';
|
|
143
|
-
|
|
144
|
-
// packages/core/src/connectors/postgres/models/index.ts
|
|
145
|
-
export { BasePostgresEntity as BaseEntity } from './base';
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
| Canonical (new, engine-carrying) | Alias (compatibility) | Notes |
|
|
149
|
-
|---|---|---|
|
|
150
|
-
| `BasePostgresDataSource` | `BaseDataSource` | Same class, re-exported |
|
|
151
|
-
| `BasePostgresEntity` | `BaseEntity` | Same class, re-exported |
|
|
152
|
-
|
|
153
|
-
Write new code against the canonical names - they make it unambiguous which engine a class belongs to once you have more than one connector in play. Existing code using the aliases needs no changes.
|
|
93
|
+
### Know what lives in base vs a connector
|
|
154
94
|
|
|
155
|
-
|
|
95
|
+
- **Engine-specific -> connector.** A connection pool, query dialect, isolation level, or transaction lives in a connector, not `src/base`.
|
|
96
|
+
- **Engine-universal -> base.** `src/base` only ever grows members every engine can implement, such as `getSchema()` or `getIdType()`.
|
|
97
|
+
- **Litmus test.** Could typesense (no pool, no SQL, no transactions) implement it? If not, it belongs in the postgres connector, not the neutral root.
|
|
156
98
|
|
|
157
|
-
|
|
99
|
+
### Add a new engine connector
|
|
158
100
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
4. **`src/connectors/<engine>/index.ts`** - barrel export for the connector.
|
|
163
|
-
5. **`src/connectors/index.ts`** - add `export * from './<engine>'` **only if** the engine has no optional runtime peer dependency (mirroring `postgres`). If the engine driver is an optional peer (like `typesense`), leave it out of `connectors/index.ts` and register it as a subpath-only export in `package.json`.
|
|
164
|
-
6. **`package.json` `exports`** - add `"./<engine>": "dist/connectors/<engine>/index.js"`. If the driver is an optional peer, add it to `peerDependencies` + `peerDependenciesMeta.<driver>.optional: true`.
|
|
101
|
+
- **Mirror the shape.** Under `src/connectors/<engine>/`, add a `datasources/` extending `AbstractDataSource` and a `repositories/core/` extending `AbstractRepository` with a `Readable`/`Persistable`/`DefaultCRUD`-style tier ladder. Add a `models/` extending `AbstractEntity` too, if the engine needs entity definitions.
|
|
102
|
+
- **Override transactions only if supported.** Override `getCapabilities()` and `beginTransaction()` only if the engine truly supports transactions - otherwise inherit the neutral `NotSupported` default.
|
|
103
|
+
- **Export as a subpath.** Add the connector to `package.json` `exports` as `./<engine>`. If its driver is an optional peer dependency, keep it out of `connectors/index.ts` and register it as a subpath-only export instead, mirroring typesense and meilisearch.
|
|
165
104
|
|
|
166
|
-
## See
|
|
105
|
+
## See also
|
|
167
106
|
|
|
168
|
-
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
107
|
+
- [DataSources](./datasources) - the engine-neutral contract and the PostgreSQL connector in depth
|
|
108
|
+
- [Models & Enrichers](./models) - the engine-neutral entity contract and the PostgreSQL connector's entity
|
|
109
|
+
- [Repositories](/references/base/repositories/) - the CRUD layer built on top of a connector's datasource
|
|
110
|
+
- [Filter System](/references/base/filter-system/) - querying through a connector's repository
|
|
111
|
+
- [Persistent Layer](/guides/core-concepts/persistent/) - the guide these reference pages support
|
|
112
|
+
- [Search & Typesense](/guides/core-concepts/persistent/search-typesense) - the typesense connector in depth
|
|
113
|
+
- [Search & Meilisearch](/guides/core-concepts/persistent/search-meilisearch) - the meilisearch connector in depth
|
|
173
114
|
|
|
174
|
-
|
|
175
|
-
- [Search & Typesense](/guides/core-concepts/persistent/search-typesense) - The typesense connector in depth
|
|
115
|
+
**Files:**
|
|
176
116
|
|
|
177
|
-
-
|
|
178
|
-
|
|
117
|
+
- [`packages/core-server/src/base/datasources/abstract.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/base/datasources/abstract.ts) - neutral `AbstractDataSource`
|
|
118
|
+
- [`packages/core-server/src/base/models/base.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/base/models/base.ts) - neutral `AbstractEntity`
|
|
119
|
+
- [`packages/core-server/src/base/repositories/core/abstract.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/base/repositories/core/abstract.ts) - neutral `AbstractRepository`
|
|
120
|
+
- [`packages/core-server/src/connectors/postgres/datasources/base.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/connectors/postgres/datasources/base.ts) - `BaseRelationalDataSource` (alias `BasePostgresDataSource`)
|
|
121
|
+
- [`packages/core-server/src/connectors/search/datasources/base.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/connectors/search/datasources/base.ts) - `BaseSearchDataSource`, shared by typesense and meilisearch
|
|
@@ -12,14 +12,14 @@ Technical reference for REST controller classes - the foundation for creating HT
|
|
|
12
12
|
> This page covers **REST controllers** (HTTP/JSON). For gRPC controllers using ConnectRPC, see the [gRPC Controllers Reference](./grpc-controllers.md).
|
|
13
13
|
|
|
14
14
|
**Files:**
|
|
15
|
-
- `packages/core/src/base/controllers/rest/abstract.ts` - Abstract base class
|
|
16
|
-
- `packages/core/src/base/controllers/rest/base.ts` - Concrete base class
|
|
17
|
-
- `packages/core/src/base/controllers/common/types.ts` - Shared types and interfaces
|
|
18
|
-
- `packages/core/src/base/controllers/common/constants.ts` - Transport constants and headers
|
|
19
|
-
- `packages/core/src/base/metadata/routes/rest.ts` - Route decorators (`@api`, `@get`, `@post`, etc.)
|
|
20
|
-
- `packages/core/src/base/metadata/routes/controller.ts` - `@controller` decorator
|
|
21
|
-
- `packages/core/src/base/controllers/factory/controller.ts` - CRUD controller factory
|
|
22
|
-
- `packages/core/src/components/controller/rest/rest.component.ts` - RestComponent
|
|
15
|
+
- `packages/core-server/src/base/controllers/rest/abstract.ts` - Abstract base class
|
|
16
|
+
- `packages/core-server/src/base/controllers/rest/base.ts` - Concrete base class
|
|
17
|
+
- `packages/core-server/src/base/controllers/common/types.ts` - Shared types and interfaces
|
|
18
|
+
- `packages/core-server/src/base/controllers/common/constants.ts` - Transport constants and headers
|
|
19
|
+
- `packages/core-server/src/base/metadata/routes/rest.ts` - Route decorators (`@api`, `@get`, `@post`, etc.)
|
|
20
|
+
- `packages/core-server/src/base/metadata/routes/controller.ts` - `@controller` decorator
|
|
21
|
+
- `packages/core-server/src/base/controllers/factory/controller.ts` - CRUD controller factory
|
|
22
|
+
- `packages/core-server/src/components/controller/rest/rest.component.ts` - RestComponent
|
|
23
23
|
|
|
24
24
|
## Quick Reference
|
|
25
25
|
|
|
@@ -89,7 +89,7 @@ During `registerControllers()`, the application creates a `RestComponent` for RE
|
|
|
89
89
|
|
|
90
90
|
## `RestComponent`
|
|
91
91
|
|
|
92
|
-
**File:** `packages/core/src/components/controller/rest/rest.component.ts`
|
|
92
|
+
**File:** `packages/core-server/src/components/controller/rest/rest.component.ts`
|
|
93
93
|
|
|
94
94
|
The `RestComponent` is responsible for discovering, configuring, and mounting all REST controllers onto the application's root Hono router. It is automatically instantiated by `BaseApplication.registerControllers()` when the REST transport is enabled.
|
|
95
95
|
|
|
@@ -400,7 +400,7 @@ interface ICustomizableRoutes<
|
|
|
400
400
|
|
|
401
401
|
## Route Decorators
|
|
402
402
|
|
|
403
|
-
**File:** `packages/core/src/base/metadata/routes/rest.ts`
|
|
403
|
+
**File:** `packages/core-server/src/base/metadata/routes/rest.ts`
|
|
404
404
|
|
|
405
405
|
### `@controller` Decorator
|
|
406
406
|
|
|
@@ -618,7 +618,7 @@ request: {
|
|
|
618
618
|
|
|
619
619
|
## Standard Headers and Constants
|
|
620
620
|
|
|
621
|
-
**File:** `packages/core/src/base/controllers/common/constants.ts`
|
|
621
|
+
**File:** `packages/core-server/src/base/controllers/common/constants.ts`
|
|
622
622
|
|
|
623
623
|
### `RestPaths`
|
|
624
624
|
|
|
@@ -644,7 +644,7 @@ class RestPaths {
|
|
|
644
644
|
|
|
645
645
|
The `ControllerFactory` provides a static method `defineCrudController` to quickly generate a pre-configured CRUD controller for any given `AbstractEntity` subclass (e.g. `BaseEntity` for Postgres) and its corresponding repository.
|
|
646
646
|
|
|
647
|
-
**File:** `packages/core/src/base/controllers/factory/controller.ts`
|
|
647
|
+
**File:** `packages/core-server/src/base/controllers/factory/controller.ts`
|
|
648
648
|
|
|
649
649
|
### `static defineCrudController<TDataObject, TPersistObject = TDataObject, Routes extends ICustomizableRoutes = ICustomizableRoutes>(opts: ICrudControllerOptions<Routes>)`
|
|
650
650
|
|