@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.
Files changed (174) hide show
  1. package/README.md +14 -14
  2. package/content/best-practices/api-usage-examples.md +39 -19
  3. package/content/best-practices/architectural-patterns.md +24 -13
  4. package/content/best-practices/architecture-decisions.md +29 -16
  5. package/content/best-practices/code-style-standards/advanced-patterns.md +43 -31
  6. package/content/best-practices/code-style-standards/constants-configuration.md +19 -4
  7. package/content/best-practices/code-style-standards/control-flow.md +33 -1
  8. package/content/best-practices/code-style-standards/documentation.md +28 -8
  9. package/content/best-practices/code-style-standards/function-patterns.md +15 -4
  10. package/content/best-practices/code-style-standards/index.md +7 -2
  11. package/content/best-practices/code-style-standards/naming-conventions.md +27 -3
  12. package/content/best-practices/code-style-standards/route-definitions.md +9 -5
  13. package/content/best-practices/code-style-standards/tooling.md +14 -1
  14. package/content/best-practices/code-style-standards/type-safety.md +39 -6
  15. package/content/best-practices/common-pitfalls.md +59 -35
  16. package/content/best-practices/contribution-workflow.md +8 -4
  17. package/content/best-practices/data-modeling.md +78 -62
  18. package/content/best-practices/deployment-strategies.md +56 -19
  19. package/content/best-practices/error-handling.md +247 -153
  20. package/content/best-practices/index.md +6 -0
  21. package/content/best-practices/performance-optimization.md +26 -13
  22. package/content/best-practices/security-guidelines.md +35 -9
  23. package/content/best-practices/testing-strategies.md +7 -2
  24. package/content/best-practices/troubleshooting-tips.md +27 -17
  25. package/content/extensions/components/api-reference.md +109 -323
  26. package/content/extensions/components/authentication/api.md +489 -602
  27. package/content/extensions/components/authentication/errors.md +135 -498
  28. package/content/extensions/components/authentication/index.md +89 -801
  29. package/content/extensions/components/authentication/usage.md +231 -955
  30. package/content/extensions/components/authorization/api.md +991 -644
  31. package/content/extensions/components/authorization/errors.md +204 -208
  32. package/content/extensions/components/authorization/getting-started.md +227 -0
  33. package/content/extensions/components/authorization/index.md +88 -795
  34. package/content/extensions/components/authorization/usage.md +219 -528
  35. package/content/extensions/components/health-check.md +77 -243
  36. package/content/extensions/components/index.md +24 -90
  37. package/content/extensions/components/mail/api.md +553 -285
  38. package/content/extensions/components/mail/errors.md +76 -62
  39. package/content/extensions/components/mail/index.md +111 -463
  40. package/content/extensions/components/mail/usage.md +139 -173
  41. package/content/extensions/components/request-tracker.md +70 -173
  42. package/content/extensions/components/socket-io/api.md +462 -785
  43. package/content/extensions/components/socket-io/errors.md +49 -51
  44. package/content/extensions/components/socket-io/index.md +69 -372
  45. package/content/extensions/components/socket-io/usage.md +212 -105
  46. package/content/extensions/components/static-asset/api.md +461 -141
  47. package/content/extensions/components/static-asset/errors.md +121 -53
  48. package/content/extensions/components/static-asset/index.md +84 -606
  49. package/content/extensions/components/static-asset/usage.md +184 -299
  50. package/content/extensions/components/template/index.md +3 -3
  51. package/content/extensions/components/websocket/api.md +311 -404
  52. package/content/extensions/components/websocket/errors.md +47 -56
  53. package/content/extensions/components/websocket/index.md +75 -407
  54. package/content/extensions/components/websocket/usage.md +120 -338
  55. package/content/extensions/helpers/cron/index.md +52 -160
  56. package/content/extensions/helpers/crypto/index.md +67 -480
  57. package/content/extensions/helpers/crypto/reference.md +528 -0
  58. package/content/extensions/helpers/env/index.md +64 -178
  59. package/content/extensions/helpers/error/index.md +286 -196
  60. package/content/extensions/helpers/index.md +61 -47
  61. package/content/extensions/helpers/inversion/index.md +76 -550
  62. package/content/extensions/helpers/inversion/reference.md +530 -0
  63. package/content/extensions/helpers/kafka/admin.md +23 -3
  64. package/content/extensions/helpers/kafka/compile-binary.md +83 -52
  65. package/content/extensions/helpers/kafka/consumer.md +65 -28
  66. package/content/extensions/helpers/kafka/examples.md +46 -253
  67. package/content/extensions/helpers/kafka/index.md +55 -617
  68. package/content/extensions/helpers/kafka/producer.md +156 -22
  69. package/content/extensions/helpers/kafka/schema-registry.md +59 -79
  70. package/content/extensions/helpers/logger/hf-logger.md +220 -0
  71. package/content/extensions/helpers/logger/index.md +78 -552
  72. package/content/extensions/helpers/logger/pino.md +105 -0
  73. package/content/extensions/helpers/logger/reference.md +937 -0
  74. package/content/extensions/helpers/network/api.md +276 -195
  75. package/content/extensions/helpers/network/index.md +87 -524
  76. package/content/extensions/helpers/queue/index.md +80 -897
  77. package/content/extensions/helpers/queue/reference.md +494 -0
  78. package/content/extensions/helpers/redis/index.md +86 -640
  79. package/content/extensions/helpers/redis/reference.md +784 -0
  80. package/content/extensions/helpers/secrets/index.md +136 -0
  81. package/content/extensions/helpers/socket-io/api.md +325 -204
  82. package/content/extensions/helpers/socket-io/index.md +79 -429
  83. package/content/extensions/helpers/storage/api.md +584 -464
  84. package/content/extensions/helpers/storage/index.md +80 -573
  85. package/content/extensions/helpers/types/index.md +75 -495
  86. package/content/extensions/helpers/types/reference.md +689 -0
  87. package/content/extensions/helpers/uid/index.md +176 -189
  88. package/content/extensions/helpers/websocket/api.md +366 -214
  89. package/content/extensions/helpers/websocket/index.md +68 -503
  90. package/content/extensions/helpers/worker-thread/index.md +62 -396
  91. package/content/extensions/helpers/worker-thread/reference.md +428 -0
  92. package/content/extensions/index.md +38 -39
  93. package/content/extensions/src-details/mcp-server.md +96 -548
  94. package/content/guides/core-concepts/persistent/datasources.md +2 -2
  95. package/content/guides/core-concepts/persistent/index.md +5 -1
  96. package/content/guides/core-concepts/persistent/models.md +1 -1
  97. package/content/guides/core-concepts/persistent/pglite.md +218 -0
  98. package/content/guides/core-concepts/persistent/postgres-drivers.md +21 -15
  99. package/content/guides/core-concepts/persistent/search-meilisearch.md +22 -12
  100. package/content/guides/core-concepts/persistent/search-typesense.md +28 -16
  101. package/content/guides/core-concepts/persistent/sqlite.md +296 -0
  102. package/content/guides/core-concepts/persistent/transactions.md +12 -11
  103. package/content/guides/core-concepts/secrets-vault.md +177 -0
  104. package/content/guides/core-concepts/services.md +1 -1
  105. package/content/guides/get-started/5-minute-quickstart.md +59 -206
  106. package/content/guides/get-started/philosophy.md +135 -670
  107. package/content/guides/get-started/setup.md +53 -74
  108. package/content/guides/migrations/redis-helpers-migration.md +5 -4
  109. package/content/guides/migrations/scoped-rbac-migration.md +5 -5
  110. package/content/guides/migrations/unified-connectors-migration.md +8 -7
  111. package/content/guides/tutorials/ecommerce-api.md +3 -8
  112. package/content/guides/tutorials/realtime-chat.md +1 -1
  113. package/content/references/base/application.md +64 -22
  114. package/content/references/base/components.md +3 -3
  115. package/content/references/base/connectors.md +79 -136
  116. package/content/references/base/controllers.md +12 -12
  117. package/content/references/base/datasources-reference.md +600 -0
  118. package/content/references/base/datasources.md +84 -444
  119. package/content/references/base/dependency-injection.md +25 -46
  120. package/content/references/base/filter-system/application-usage.md +95 -123
  121. package/content/references/base/filter-system/array-operators.md +33 -43
  122. package/content/references/base/filter-system/comparison-operators.md +55 -63
  123. package/content/references/base/filter-system/default-filter.md +144 -350
  124. package/content/references/base/filter-system/fields-order-pagination.md +116 -148
  125. package/content/references/base/filter-system/index.md +114 -253
  126. package/content/references/base/filter-system/json-filtering.md +52 -181
  127. package/content/references/base/filter-system/list-operators.md +28 -44
  128. package/content/references/base/filter-system/logical-operators.md +69 -114
  129. package/content/references/base/filter-system/null-operators.md +41 -98
  130. package/content/references/base/filter-system/pattern-matching.md +48 -51
  131. package/content/references/base/filter-system/quick-reference.md +93 -196
  132. package/content/references/base/filter-system/range-operators.md +22 -38
  133. package/content/references/base/filter-system/tips.md +70 -133
  134. package/content/references/base/filter-system/use-cases.md +173 -232
  135. package/content/references/base/grpc-controllers.md +53 -17
  136. package/content/references/base/index.md +5 -3
  137. package/content/references/base/middlewares.md +43 -28
  138. package/content/references/base/models-reference.md +886 -0
  139. package/content/references/base/models.md +81 -1452
  140. package/content/references/base/providers.md +8 -8
  141. package/content/references/base/repositories/advanced.md +281 -419
  142. package/content/references/base/repositories/index.md +84 -644
  143. package/content/references/base/repositories/mixins.md +25 -21
  144. package/content/references/base/repositories/relations.md +194 -375
  145. package/content/references/base/repositories/soft-deletable.md +67 -55
  146. package/content/references/base/secrets.md +267 -0
  147. package/content/references/base/services.md +8 -6
  148. package/content/references/configuration/environment-variables.md +73 -21
  149. package/content/references/configuration/index.md +51 -31
  150. package/content/references/index.md +1 -1
  151. package/content/references/quick-reference.md +3 -16
  152. package/content/references/utilities/crypto.md +35 -76
  153. package/content/references/utilities/date.md +33 -73
  154. package/content/references/utilities/duration.md +85 -0
  155. package/content/references/utilities/index.md +6 -2
  156. package/content/references/utilities/jsx-reference.md +298 -0
  157. package/content/references/utilities/jsx.md +82 -525
  158. package/content/references/utilities/module.md +81 -61
  159. package/content/references/utilities/parse.md +34 -64
  160. package/content/references/utilities/performance.md +33 -58
  161. package/content/references/utilities/promise.md +28 -62
  162. package/content/references/utilities/request.md +58 -218
  163. package/content/references/utilities/retry.md +139 -0
  164. package/content/references/utilities/schema.md +43 -137
  165. package/content/references/utilities/statuses-reference.md +361 -0
  166. package/content/references/utilities/statuses.md +63 -667
  167. package/dist/mcp-server/index.js +0 -0
  168. package/dist/mcp-server/tools/github/list-project-files.tool.d.ts +1 -1
  169. package/dist/mcp-server/tools/github/list-project-files.tool.d.ts.map +1 -1
  170. package/dist/mcp-server/tools/github/list-project-files.tool.js +3 -3
  171. package/dist/mcp-server/tools/github/search-code.tool.js +1 -1
  172. package/dist/mcp-server/tools/github/verify-dependencies.tool.js +1 -1
  173. package/dist/mcp-server/tools/github/view-source-file.tool.js +1 -1
  174. package/package.json +24 -23
@@ -6,132 +6,75 @@ difficulty: intermediate
6
6
 
7
7
  # Null Check Operators
8
8
 
9
- Operators for checking null and non-null values.
9
+ Checks whether a field is `NULL` or has a value, without comparing to a specific value.
10
10
 
11
+ | Operator | SQL | Meaning |
12
+ |----------|-----|---------|
13
+ | `is` | `IS NULL` / `=` | Null check or equality |
14
+ | `isn` | `IS NOT NULL` / `!=` | Not-null check or inequality |
15
+ | `exists` | `IS NOT NULL` / `IS NULL` | Presence check |
16
+ | `notExists` | `IS NULL` / `IS NOT NULL` | Inverse presence check |
11
17
 
12
- ## Direct Null Assignment
13
-
14
- The simplest way to check for NULL:
18
+ ## is
15
19
 
16
20
  ```typescript
17
- // IS NULL (implicit)
18
- { where: { deletedAt: null } }
21
+ { where: { deletedAt: { is: null } } }
19
22
  // SQL: WHERE "deleted_at" IS NULL
20
23
  ```
21
24
 
25
+ **Notice:** `is` behaves exactly like `eq` - `is: null` compiles to `IS NULL`, `is: <value>` compiles to `=`.
22
26
 
23
- ## eq with Null
27
+ **Edge cases:**
28
+ - The bare shorthand `{ deletedAt: null }` (no operator key) is identical to `{ deletedAt: { is: null } }`.
29
+ - `{ is: 'active' }` compiles to `"status" = 'active'`, the same as `eq`.
24
30
 
25
- ```typescript
26
- { where: { deletedAt: { eq: null } } }
27
- // SQL: WHERE "deleted_at" IS NULL
28
-
29
- { where: { status: { eq: 'active' } } }
30
- // SQL: WHERE "status" = 'active'
31
- ```
32
-
33
-
34
- ## ne / neq with Null
31
+ ## isn
35
32
 
36
33
  ```typescript
37
- // IS NOT NULL
38
- { where: { deletedAt: { ne: null } } }
39
- { where: { deletedAt: { neq: null } } }
40
- // SQL: WHERE "deleted_at" IS NOT NULL
41
-
42
- // Not equal to value
43
- { where: { status: { ne: 'deleted' } } }
44
- // SQL: WHERE "status" != 'deleted'
34
+ { where: { verifiedAt: { isn: null } } }
35
+ // SQL: WHERE "verified_at" IS NOT NULL
45
36
  ```
46
37
 
38
+ **Notice:** `isn` behaves exactly like `ne`/`neq` - `isn: null` compiles to `IS NOT NULL`, `isn: <value>` compiles to `!=`.
47
39
 
48
- ## is - IS NULL / Equality
49
-
50
- ```typescript
51
- // NULL check
52
- { where: { deletedAt: { is: null } } }
53
- // SQL: WHERE "deleted_at" IS NULL
54
-
55
- // Value check (same as eq)
56
- { where: { status: { is: 'active' } } }
57
- // SQL: WHERE "status" = 'active'
58
- ```
59
-
40
+ **Edge cases:**
41
+ - Same three-valued-logic caveat as `ne`: `{ isn: value }` for a real `value` never matches a `NULL` row.
60
42
 
61
- ## isn - IS NOT NULL / Not Equality
43
+ ## exists
62
44
 
63
45
  ```typescript
64
- // NOT NULL check
65
- { where: { verifiedAt: { isn: null } } }
46
+ { where: { verifiedAt: { exists: true } } }
66
47
  // SQL: WHERE "verified_at" IS NOT NULL
67
-
68
- // Value check (same as ne)
69
- { where: { status: { isn: 'deleted' } } }
70
- // SQL: WHERE "status" != 'deleted'
71
48
  ```
72
49
 
50
+ **Notice:** `exists` takes a boolean, not a value - `exists: false` compiles to `IS NULL`, anything else compiles to `IS NOT NULL`.
73
51
 
74
- ## exists / notExists - Presence Check
52
+ **Edge cases:**
53
+ - Only the literal `false` selects the `IS NULL` branch.
54
+ - Any other operand, including `0` or a truthy string, selects `IS NOT NULL`.
55
+ - Also works over a JSON path key, for example `{ 'metadata.score': { exists: true } }`.
75
56
 
76
- `exists` and `notExists` are presence operators - they take a boolean rather than a value, and read more naturally than `is`/`isn` against `null`. They work on the PostgreSQL connector, and `exists` also works over JSON paths there.
57
+ ## notExists
77
58
 
78
59
  ```typescript
79
- // Field is present (IS NOT NULL)
80
- { where: { deletedAt: { exists: false } } } // no deletedAt -> IS NULL
81
- { where: { verifiedAt: { exists: true } } } // has verifiedAt -> IS NOT NULL
82
-
83
- // notExists is the inverse
84
- { where: { verifiedAt: { notExists: true } } } // IS NULL
85
-
86
- // exists over a JSON path (PostgreSQL)
87
- { where: { 'metadata.score': { exists: true } } }
60
+ { where: { verifiedAt: { notExists: true } } }
61
+ // SQL: WHERE "verified_at" IS NULL
88
62
  ```
89
63
 
90
- | Syntax | SQL | Description |
91
- |--------|-----|-------------|
92
- | `{ field: { exists: true } }` | `IS NOT NULL` | Field is present |
93
- | `{ field: { exists: false } }` | `IS NULL` | Field is missing/null |
94
- | `{ field: { notExists: true } }` | `IS NULL` | Inverse of exists |
95
- | `{ field: { notExists: false } }` | `IS NOT NULL` | Inverse of exists |
96
-
64
+ **Notice:** the inverse of `exists` - `notExists: false` compiles to `IS NOT NULL`, anything else compiles to `IS NULL`.
97
65
 
98
- ## Null Check Summary
66
+ **Edge cases:**
67
+ - Same `false`-only branch rule as `exists`.
99
68
 
100
- | Syntax | SQL | Description |
101
- |--------|-----|-------------|
102
- | `{ field: null }` | `IS NULL` | Direct null check |
103
- | `{ field: { eq: null } }` | `IS NULL` | Explicit null equality |
104
- | `{ field: { is: null } }` | `IS NULL` | IS operator with null |
105
- | `{ field: { exists: false } }` | `IS NULL` | Presence check (false = missing) |
106
- | `{ field: { ne: null } }` | `IS NOT NULL` | Not-equal null check |
107
- | `{ field: { neq: null } }` | `IS NOT NULL` | Alias for ne with null |
108
- | `{ field: { isn: null } }` | `IS NOT NULL` | IS NOT operator with null |
109
- | `{ field: { exists: true } }` | `IS NOT NULL` | Presence check (true = present) |
69
+ ## See also
110
70
 
111
- All the IS NULL / IS NOT NULL syntaxes above are equivalent -- use whichever reads best in context.
71
+ - [Filter System Overview](./) - the `filter` shape and the full `where` operator table
72
+ - [Logical Operators](./logical-operators) - `not`, the general-purpose negation operator
73
+ - [JSON Filtering](./json-filtering) - `exists` also works over a `'column.path'` key
74
+ - [Quick Reference](./quick-reference) - every operator, one line each
112
75
 
113
- > [!NOTE]
114
- > `ne`/`neq` follow SQL three-valued logic: a row whose field is `NULL` never matches `{ field: { neq: value } }`. This is intentional (`NULL <> value` is UNKNOWN, not TRUE). Reach for `exists`/`notExists` or an explicit `{ field: null }` branch when you want NULL rows included.
76
+ **Files:**
115
77
 
116
-
117
- ## Common Patterns
118
-
119
- ### Soft Delete Pattern
120
-
121
- ```typescript
122
- // Find active records (not deleted)
123
- { where: { deletedAt: { is: null } } }
124
-
125
- // Find deleted records only
126
- { where: { deletedAt: { isn: null } } }
127
- ```
128
-
129
- ### Verified Users
130
-
131
- ```typescript
132
- // Find verified users
133
- { where: { emailVerifiedAt: { isn: null } } }
134
-
135
- // Find unverified users
136
- { where: { emailVerifiedAt: { is: null } } }
137
- ```
78
+ - [`packages/core-server/src/connectors/postgres/repositories/dialect/query.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/connectors/postgres/repositories/dialect/query.ts) - `PostgresQueryOperators.FNS`, per-operator SQL builders
79
+ - [`packages/core-server/src/connectors/relational/repositories/dialect/filter.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/connectors/relational/repositories/dialect/filter.ts) - `FilterBuilder`, translates `TFilter` to Drizzle/SQL
80
+ - [`packages/filter/src/common/operators.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/filter/src/common/operators.ts) - `QueryOperators` constants
@@ -6,103 +6,100 @@ difficulty: intermediate
6
6
 
7
7
  # Pattern Matching Operators
8
8
 
9
- Operators for string pattern matching and regular expressions.
9
+ Matches string fields against SQL `LIKE` patterns or POSIX regular expressions.
10
10
 
11
+ | Operator | SQL | Meaning |
12
+ |----------|-----|---------|
13
+ | `like` | `LIKE` | Case-sensitive pattern match |
14
+ | `nlike` | `NOT LIKE` | Negated case-sensitive pattern match |
15
+ | `ilike` | `ILIKE` | Case-insensitive pattern match (PostgreSQL-only) |
16
+ | `nilike` | `NOT ILIKE` | Negated case-insensitive pattern match (PostgreSQL-only) |
17
+ | `regexp` | `~` | Case-sensitive POSIX regex match |
18
+ | `iregexp` | `~*` | Case-insensitive POSIX regex match |
11
19
 
12
- ## like - Pattern Matching (Case-Sensitive)
13
-
14
- Matches strings using SQL LIKE patterns.
20
+ ## like
15
21
 
16
22
  ```typescript
17
- // Starts with
18
23
  { where: { email: { like: '%@gmail.com' } } }
19
24
  // SQL: WHERE "email" LIKE '%@gmail.com'
20
-
21
- // Contains
22
- { where: { name: { like: '%john%' } } }
23
- // SQL: WHERE "name" LIKE '%john%'
24
-
25
- // Ends with
26
- { where: { filename: { like: '%.pdf' } } }
27
- // SQL: WHERE "filename" LIKE '%.pdf'
28
-
29
- // Single character wildcard
30
- { where: { code: { like: 'A_B' } } } // Matches 'A1B', 'AXB', etc.
31
- // SQL: WHERE "code" LIKE 'A_B'
32
25
  ```
33
26
 
34
- **Pattern Characters:**
35
- - `%` - Matches any sequence of characters (including empty)
36
- - `_` - Matches exactly one character
27
+ **Notice:** `%` matches any sequence of characters (including none); `_` matches exactly one character.
37
28
 
29
+ **Edge cases:**
30
+ - A `null` operand compiles to `LIKE NULL`, which is never true - no rows match.
31
+ - Case sensitivity follows the column's collation; the default is case-sensitive.
38
32
 
39
- ## nlike - Not Like
33
+ ## nlike
40
34
 
41
35
  ```typescript
42
36
  { where: { email: { nlike: '%@test.com' } } }
43
37
  // SQL: WHERE "email" NOT LIKE '%@test.com'
44
38
  ```
45
39
 
40
+ **Notice:** `NOT LIKE` excludes rows where the column is `NULL`, the same as `NOT IN`.
46
41
 
47
- ## ilike - Case-Insensitive Pattern Matching
42
+ **Edge cases:**
43
+ - Same pattern-character rules as `like`.
48
44
 
49
- PostgreSQL-specific case-insensitive LIKE.
45
+ ## ilike
50
46
 
51
47
  ```typescript
52
48
  { where: { name: { ilike: '%john%' } } }
53
49
  // SQL: WHERE "name" ILIKE '%john%'
54
- // Matches: 'John', 'JOHN', 'john', 'JoHn'
55
-
56
- { where: { email: { ilike: '%@GMAIL.COM' } } }
57
- // Matches: 'user@gmail.com', 'USER@Gmail.Com'
58
50
  ```
59
51
 
52
+ **Notice:** matches `'John'`, `'JOHN'`, and `'john'` alike.
53
+
54
+ **Edge cases:**
55
+ - `ILIKE` is a PostgreSQL extension, not standard SQL.
56
+ - Same pattern-character rules as `like`.
60
57
 
61
- ## nilike - Not ILike
58
+ ## nilike
62
59
 
63
60
  ```typescript
64
61
  { where: { email: { nilike: '%@example%' } } }
65
62
  // SQL: WHERE NOT ("email" ILIKE '%@example%')
66
63
  ```
67
64
 
65
+ **Notice:** built as a negated `ILIKE`, not a dedicated SQL operator.
68
66
 
69
- ## regexp - Regular Expression (Case-Sensitive)
67
+ **Edge cases:**
68
+ - Same `NULL`-excludes-nothing behavior as `nlike`.
70
69
 
71
- PostgreSQL POSIX regex matching.
70
+ ## regexp
72
71
 
73
72
  ```typescript
74
- // Starts with letter
75
73
  { where: { code: { regexp: '^[A-Z]' } } }
76
74
  // SQL: WHERE "code" ~ '^[A-Z]'
77
-
78
- // Email pattern
79
- { where: { email: { regexp: '^[a-z]+@[a-z]+\\.[a-z]+$' } } }
80
- // SQL: WHERE "email" ~ '^[a-z]+@[a-z]+\.[a-z]+$'
81
-
82
- // Phone number pattern
83
- { where: { phone: { regexp: '^\\+?[0-9]{10,15}$' } } }
84
75
  ```
85
76
 
86
- > [!NOTE]
87
- > Escape backslashes in TypeScript strings: `\\d` for regex `\d`.
77
+ **Notice:** `~` is PostgreSQL's case-sensitive POSIX regex operator.
88
78
 
79
+ **Edge cases:**
80
+ - Escape backslashes in TypeScript strings: `\\d` for regex `\d`.
81
+ - No shape validation - any string operand is passed through as the pattern.
89
82
 
90
- ## iregexp - Case-Insensitive Regular Expression
83
+ ## iregexp
91
84
 
92
85
  ```typescript
93
86
  { where: { name: { iregexp: '^john' } } }
94
87
  // SQL: WHERE "name" ~* '^john'
95
- // Matches: 'John Doe', 'JOHN SMITH', 'john'
96
88
  ```
97
89
 
90
+ **Notice:** same as `regexp`, but case-insensitive (`~*`).
91
+
92
+ **Edge cases:**
93
+ - Matches `'John Doe'`, `'JOHN SMITH'`, and `'john'` alike.
94
+
95
+ ## See also
96
+
97
+ - [Filter System Overview](./) - the `filter` shape and the full `where` operator table
98
+ - [JSON Filtering](./json-filtering) - pattern operators also work on a `'column.path'` key, with no numeric casting
99
+ - [Quick Reference](./quick-reference) - every operator, one line each
98
100
 
99
- ## Summary
101
+ **Files:**
100
102
 
101
- | Operator | SQL | Case | Description |
102
- |----------|-----|------|-------------|
103
- | `like` | `LIKE` | Sensitive | Pattern with wildcards |
104
- | `nlike` | `NOT LIKE` | Sensitive | Negative pattern |
105
- | `ilike` | `ILIKE` | Insensitive | PostgreSQL only |
106
- | `nilike` | `NOT ILIKE` | Insensitive | PostgreSQL only |
107
- | `regexp` | `~` | Sensitive | POSIX regex match |
108
- | `iregexp` | `~*` | Insensitive | POSIX regex match |
103
+ - [`packages/core-server/src/connectors/postgres/repositories/dialect/query.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/connectors/postgres/repositories/dialect/query.ts) - `PostgresQueryOperators.FNS`, per-operator SQL builders
104
+ - [`packages/core-server/src/connectors/relational/repositories/dialect/filter.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/connectors/relational/repositories/dialect/filter.ts) - `FilterBuilder`, translates `TFilter` to Drizzle/SQL
105
+ - [`packages/filter/src/common/operators.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/filter/src/common/operators.ts) - `QueryOperators` constants