@venizia/ignis-docs 0.2.0 → 0.2.1-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 (142) 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 +22 -11
  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 +26 -2
  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 +6 -2
  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 +182 -93
  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 +107 -322
  26. package/content/extensions/components/authentication/api.md +454 -603
  27. package/content/extensions/components/authentication/errors.md +121 -498
  28. package/content/extensions/components/authentication/index.md +88 -801
  29. package/content/extensions/components/authentication/usage.md +207 -956
  30. package/content/extensions/components/authorization/api.md +736 -656
  31. package/content/extensions/components/authorization/errors.md +168 -206
  32. package/content/extensions/components/authorization/index.md +82 -797
  33. package/content/extensions/components/authorization/usage.md +194 -527
  34. package/content/extensions/components/health-check.md +71 -243
  35. package/content/extensions/components/mail/api.md +504 -287
  36. package/content/extensions/components/mail/errors.md +73 -61
  37. package/content/extensions/components/mail/index.md +96 -467
  38. package/content/extensions/components/mail/usage.md +130 -172
  39. package/content/extensions/components/request-tracker.md +66 -173
  40. package/content/extensions/components/socket-io/api.md +195 -13
  41. package/content/extensions/components/socket-io/errors.md +3 -3
  42. package/content/extensions/components/socket-io/index.md +50 -337
  43. package/content/extensions/components/socket-io/usage.md +143 -26
  44. package/content/extensions/components/static-asset/api.md +410 -142
  45. package/content/extensions/components/static-asset/errors.md +110 -53
  46. package/content/extensions/components/static-asset/index.md +79 -608
  47. package/content/extensions/components/static-asset/usage.md +180 -300
  48. package/content/extensions/components/websocket/api.md +275 -399
  49. package/content/extensions/components/websocket/errors.md +47 -56
  50. package/content/extensions/components/websocket/index.md +74 -407
  51. package/content/extensions/components/websocket/usage.md +110 -341
  52. package/content/extensions/helpers/cron/index.md +51 -160
  53. package/content/extensions/helpers/crypto/index.md +62 -483
  54. package/content/extensions/helpers/crypto/reference.md +456 -0
  55. package/content/extensions/helpers/env/index.md +60 -178
  56. package/content/extensions/helpers/error/index.md +221 -207
  57. package/content/extensions/helpers/inversion/index.md +65 -556
  58. package/content/extensions/helpers/inversion/reference.md +522 -0
  59. package/content/extensions/helpers/kafka/admin.md +20 -1
  60. package/content/extensions/helpers/kafka/compile-binary.md +41 -35
  61. package/content/extensions/helpers/kafka/consumer.md +54 -20
  62. package/content/extensions/helpers/kafka/examples.md +21 -16
  63. package/content/extensions/helpers/kafka/index.md +80 -610
  64. package/content/extensions/helpers/kafka/producer.md +134 -5
  65. package/content/extensions/helpers/kafka/schema-registry.md +45 -70
  66. package/content/extensions/helpers/logger/hf-logger.md +193 -0
  67. package/content/extensions/helpers/logger/index.md +64 -563
  68. package/content/extensions/helpers/logger/pino.md +85 -0
  69. package/content/extensions/helpers/logger/reference.md +746 -0
  70. package/content/extensions/helpers/network/api.md +241 -195
  71. package/content/extensions/helpers/network/index.md +72 -530
  72. package/content/extensions/helpers/queue/index.md +72 -900
  73. package/content/extensions/helpers/queue/reference.md +467 -0
  74. package/content/extensions/helpers/redis/index.md +73 -645
  75. package/content/extensions/helpers/redis/reference.md +727 -0
  76. package/content/extensions/helpers/secrets/index.md +66 -0
  77. package/content/extensions/helpers/socket-io/api.md +305 -203
  78. package/content/extensions/helpers/socket-io/index.md +66 -432
  79. package/content/extensions/helpers/storage/api.md +564 -462
  80. package/content/extensions/helpers/storage/index.md +77 -573
  81. package/content/extensions/helpers/types/index.md +66 -499
  82. package/content/extensions/helpers/types/reference.md +650 -0
  83. package/content/extensions/helpers/uid/index.md +58 -227
  84. package/content/extensions/helpers/websocket/api.md +329 -216
  85. package/content/extensions/helpers/websocket/index.md +65 -503
  86. package/content/extensions/helpers/worker-thread/index.md +58 -396
  87. package/content/extensions/helpers/worker-thread/reference.md +428 -0
  88. package/content/guides/core-concepts/persistent/models.md +1 -1
  89. package/content/guides/core-concepts/persistent/search-typesense.md +3 -3
  90. package/content/guides/core-concepts/persistent/transactions.md +1 -1
  91. package/content/guides/core-concepts/secrets-vault.md +177 -0
  92. package/content/guides/core-concepts/services.md +1 -1
  93. package/content/guides/migrations/redis-helpers-migration.md +1 -1
  94. package/content/guides/migrations/unified-connectors-migration.md +2 -2
  95. package/content/guides/tutorials/ecommerce-api.md +3 -8
  96. package/content/references/base/application.md +1 -1
  97. package/content/references/base/connectors.md +79 -136
  98. package/content/references/base/datasources-reference.md +599 -0
  99. package/content/references/base/datasources.md +84 -444
  100. package/content/references/base/dependency-injection.md +17 -39
  101. package/content/references/base/filter-system/application-usage.md +69 -121
  102. package/content/references/base/filter-system/array-operators.md +12 -0
  103. package/content/references/base/filter-system/comparison-operators.md +12 -0
  104. package/content/references/base/filter-system/default-filter.md +136 -348
  105. package/content/references/base/filter-system/fields-order-pagination.md +38 -16
  106. package/content/references/base/filter-system/index.md +106 -257
  107. package/content/references/base/filter-system/json-filtering.md +12 -2
  108. package/content/references/base/filter-system/list-operators.md +16 -2
  109. package/content/references/base/filter-system/logical-operators.md +13 -0
  110. package/content/references/base/filter-system/null-operators.md +13 -0
  111. package/content/references/base/filter-system/pattern-matching.md +12 -0
  112. package/content/references/base/filter-system/quick-reference.md +11 -2
  113. package/content/references/base/filter-system/range-operators.md +12 -0
  114. package/content/references/base/filter-system/tips.md +70 -133
  115. package/content/references/base/filter-system/use-cases.md +156 -233
  116. package/content/references/base/middlewares.md +35 -21
  117. package/content/references/base/models-reference.md +886 -0
  118. package/content/references/base/models.md +80 -1452
  119. package/content/references/base/repositories/advanced.md +156 -192
  120. package/content/references/base/repositories/index.md +77 -650
  121. package/content/references/base/repositories/mixins.md +22 -18
  122. package/content/references/base/repositories/relations.md +123 -171
  123. package/content/references/base/repositories/soft-deletable.md +58 -56
  124. package/content/references/base/secrets.md +263 -0
  125. package/content/references/base/services.md +2 -2
  126. package/content/references/configuration/environment-variables.md +48 -4
  127. package/content/references/configuration/index.md +49 -31
  128. package/content/references/quick-reference.md +3 -16
  129. package/content/references/utilities/crypto.md +35 -76
  130. package/content/references/utilities/date.md +33 -73
  131. package/content/references/utilities/index.md +1 -1
  132. package/content/references/utilities/jsx-reference.md +298 -0
  133. package/content/references/utilities/jsx.md +82 -525
  134. package/content/references/utilities/module.md +29 -62
  135. package/content/references/utilities/parse.md +34 -64
  136. package/content/references/utilities/performance.md +33 -58
  137. package/content/references/utilities/promise.md +28 -62
  138. package/content/references/utilities/request.md +57 -218
  139. package/content/references/utilities/schema.md +43 -137
  140. package/content/references/utilities/statuses-reference.md +361 -0
  141. package/content/references/utilities/statuses.md +63 -667
  142. package/package.json +8 -8
@@ -1,27 +1,14 @@
1
- # Cron
2
-
3
- Schedule and manage recurring tasks using cron expressions, with support for dynamic rescheduling and job duplication.
4
-
5
- ## Quick Reference
6
-
7
- | Item | Value |
8
- |------|-------|
9
- | **Package** | `@venizia/ignis-helpers` |
10
- | **Class** | `CronHelper` |
11
- | **Extends** | `BaseHelper` |
12
- | **Peer Dependency** | `cron` (^4.3.3, optional) |
13
- | **Runtimes** | Both |
1
+ ---
2
+ title: Cron
3
+ description: Schedule recurring tasks with cron expressions, plus runtime rescheduling and job duplication
4
+ difficulty: beginner
5
+ ---
14
6
 
15
- #### Import Paths
16
-
17
- ```typescript
18
- import { CronHelper } from '@venizia/ignis-helpers/cron';
19
- import type { ICronHelperOptions } from '@venizia/ignis-helpers/cron';
20
- ```
7
+ # Cron
21
8
 
22
- ## Creating an Instance
9
+ `CronHelper` wraps the `cron` package's `CronJob` with scoped logging and convenience methods for rescheduling and duplicating jobs.
23
10
 
24
- `CronHelper` wraps the `cron` package's `CronJob` class, adding scoped logging via `BaseHelper` and convenience methods for rescheduling and duplication.
11
+ ## In one example
25
12
 
26
13
  ```typescript
27
14
  import { CronHelper } from '@venizia/ignis-helpers/cron';
@@ -32,193 +19,97 @@ const job = new CronHelper({
32
19
  console.log('Running scheduled task');
33
20
  },
34
21
  autoStart: true,
35
- tz: 'America/New_York',
36
- errorHandler: (error) => {
37
- console.error('Cron job failed:', error);
38
- },
22
+ tz: 'Asia/Ho_Chi_Minh',
39
23
  });
40
24
  ```
41
25
 
42
- > [!TIP]
43
- > You can also use the static factory method `CronHelper.newInstance(opts)` which is equivalent to `new CronHelper(opts)`.
44
-
45
- #### ICronHelperOptions
46
-
47
- | Option | Type | Default | Description |
48
- |--------|------|---------|-------------|
49
- | `cronTime` | `string` | -- | Cron pattern defining when the job runs (e.g., `'0 */1 * * * *'`). Required, must be non-empty. |
50
- | `onTick` | `() => void \| Promise<void>` | -- | Function executed each time the cron job triggers. Required. |
51
- | `onCompleted` | `CronOnCompleteCommand \| null` | `undefined` | Callback executed when the job is stopped via `stop()`. |
52
- | `autoStart` | `boolean` | `false` | If `true`, the job starts running immediately after construction. |
53
- | `tz` | `string` | `undefined` | IANA timezone for the schedule (e.g., `'Asia/Ho_Chi_Minh'`). Uses server timezone if omitted. |
54
- | `errorHandler` | `(error: unknown) => void \| null` | `undefined` | Handler invoked if `onTick` throws during execution. |
55
-
56
- #### Common Cron Patterns
26
+ `autoStart: true` starts the job immediately. Leave it `false` (the default) and call `job.start()` when you are ready.
57
27
 
58
- | Pattern | Description |
59
- |---------|-------------|
60
- | `'0 */1 * * * *'` | Every minute |
61
- | `'0 */5 * * * *'` | Every 5 minutes |
62
- | `'0 0 * * * *'` | Every hour |
63
- | `'0 0 0 * * *'` | Every day at midnight |
64
- | `'0 0 9 * * 1-5'` | Weekdays at 9 AM |
65
- | `'0 0 0 * * 1'` | Every Monday at midnight |
28
+ ## How it works
66
29
 
67
- ## Usage
30
+ - **The constructor builds the job synchronously.** `buildInstance()` runs inside the constructor and creates a `CronJob` via `CronJob.from(...)`. An empty `cronTime` or a malformed cron expression throws immediately - `getError` never lets the object come back into your hands half-built.
31
+ - **`start()` and `stop()` guard against a missing instance.** If `buildInstance()` never produced a `CronJob` (a prior `configure()` failure), `start()` logs `'Invalid cron instance to start cronjob!'` and returns without throwing. `stop()` is `async` because the underlying `CronJob.stop()` resolves only once an in-flight tick finishes - awaiting it prevents a replacement job from starting while the old handler is still running.
32
+ - **`modifyCronTime()` reschedules in place.** It builds a new `CronTime`, calls `instance.setTime(...)`, and updates the stored `cronTime` - the same `CronJob` keeps running, it just fires on the new schedule.
33
+ - **`duplicate()` clones configuration, not state.** The new instance shares `onTick`, `onCompleted`, `autoStart`, `tz`, and `errorHandler` with a different `cronTime`. It is fully independent - stopping or modifying one does not touch the other.
34
+ - **The `instance` property is the raw `CronJob`.** Use it for anything the wrapper does not expose - `isActive`, `lastDate()`, `fireOnTick()` - from the [`cron`](https://github.com/kelektiv/node-cron) package (an optional peer dependency, `^4.3.3`).
68
35
 
69
- ### Scheduling Jobs
36
+ **`ICronHelperOptions`**
70
37
 
71
- Create a job with `autoStart: true` to begin execution immediately, or leave it as `false` (default) and call `start()` when ready.
38
+ | Option | Type | Default | Description |
39
+ |--------|------|---------|-------------|
40
+ | `cronTime` | `string` | -- (required) | Cron pattern defining when the job runs, e.g. `'0 */1 * * * *'` |
41
+ | `onTick` | `() => void \| Promise<void>` | -- (required) | Runs on every trigger |
42
+ | `onCompleted` | `CronOnCompleteCommand \| null` | `undefined` | Runs when the job is stopped via `stop()` |
43
+ | `autoStart` | `boolean` | `false` | Starts the job immediately after construction |
44
+ | `tz` | `string` | `undefined` | IANA timezone, e.g. `'Asia/Ho_Chi_Minh'`. Uses server timezone if omitted |
45
+ | `errorHandler` | `(error: unknown) => void \| null` | `undefined` | Runs if `onTick` throws |
72
46
 
73
- ```typescript
74
- // Auto-start: begins running on schedule immediately
75
- const autoJob = new CronHelper({
76
- cronTime: '0 */1 * * * *',
77
- onTick: () => {
78
- console.log('Runs every minute');
79
- },
80
- autoStart: true,
81
- });
82
- ```
47
+ ## Common tasks
83
48
 
84
- ### Starting Jobs Manually
49
+ ### Start a job manually
85
50
 
86
- When `autoStart` is `false`, the job is created but does not run until `start()` is called. This is useful when you need to set up dependencies before the job begins firing.
51
+ Leave `autoStart` unset (`false`) and call `start()` once dependencies are ready.
87
52
 
88
53
  ```typescript
89
54
  const job = new CronHelper({
90
55
  cronTime: '0 0 * * * *', // Every hour
91
- onTick: () => {
92
- console.log('Hourly task executed');
93
- },
56
+ onTick: () => runHourlyTask(),
94
57
  });
95
58
 
96
- // Start later when conditions are met
97
59
  job.start();
98
60
  ```
99
61
 
100
- If the internal `CronJob` instance does not exist (e.g., `configure()` failed), `start()` logs an error and returns without throwing.
101
-
102
- ### Modifying the Schedule
62
+ ### Reschedule at runtime
103
63
 
104
- Change a job's cron schedule at runtime with `modifyCronTime()`. The job continues running with the new schedule.
64
+ `modifyCronTime()` swaps the cron pattern without recreating the job. Set `shouldFireOnTick: true` to fire once immediately after the change (fire-and-forget - errors are logged, not thrown).
105
65
 
106
66
  ```typescript
107
- modifyCronTime(opts: { cronTime: string; shouldFireOnTick?: boolean }): void
108
- ```
109
-
110
- | Parameter | Type | Default | Description |
111
- |-----------|------|---------|-------------|
112
- | `cronTime` | `string` | -- | The new cron pattern to apply. |
113
- | `shouldFireOnTick` | `boolean` | `false` | If `true`, immediately fires the `onTick` function after changing the schedule. |
114
-
115
- ```typescript
116
- // Change the job to run every 5 minutes instead
117
- job.modifyCronTime({ cronTime: '0 */5 * * * *' });
118
-
119
- // Change schedule and immediately fire onTick
120
67
  job.modifyCronTime({ cronTime: '0 */10 * * * *', shouldFireOnTick: true });
121
68
  ```
122
69
 
123
- ### Duplicating Jobs
70
+ ### Duplicate a job onto a new schedule
124
71
 
125
- Create a new `CronHelper` instance that copies the current job's configuration (`onTick`, `onCompleted`, `autoStart`, `tz`, `errorHandler`) but uses a different `cronTime`.
126
-
127
- ```typescript
128
- duplicate(opts: { cronTime: string }): CronHelper
129
- ```
72
+ Reuse the same `onTick` logic on a second cron pattern.
130
73
 
131
74
  ```typescript
132
75
  const dailyJob = new CronHelper({
133
76
  cronTime: '0 0 0 * * *', // Daily at midnight
134
- onTick: async () => {
135
- await generateReport();
136
- },
137
- tz: 'America/New_York',
77
+ onTick: async () => generateReport(),
78
+ tz: 'Asia/Ho_Chi_Minh',
138
79
  });
139
80
 
140
- // Same logic, different schedule
141
81
  const hourlyJob = dailyJob.duplicate({ cronTime: '0 0 * * * *' });
142
82
  hourlyJob.start();
143
83
  ```
144
84
 
145
- > [!NOTE]
146
- > `duplicate()` copies all configuration except `cronTime`. The new instance is independent -- stopping or modifying one does not affect the other.
147
-
148
- ### Accessing the Underlying CronJob
85
+ ### Handle tick errors without crashing the process
149
86
 
150
- The `instance` property exposes the underlying `CronJob` from the `cron` package, giving access to the full API (e.g., `stop()`, `isActive`, `lastDate()`).
87
+ Pass `errorHandler` so a throwing `onTick` does not take down the job silently.
151
88
 
152
89
  ```typescript
153
90
  const job = new CronHelper({
154
91
  cronTime: '0 */1 * * * *',
155
- onTick: () => { /* ... */ },
156
- });
157
-
158
- job.start();
159
-
160
- // Access the underlying CronJob directly
161
- console.log(job.instance.isActive); // true
162
- job.instance.stop();
163
- ```
164
-
165
- ## Troubleshooting
166
-
167
- ### "[CronHelper][configure] Invalid cronTime to configure application cron!"
168
-
169
- **Cause:** The `cronTime` option is empty, undefined, or not provided.
170
-
171
- **Fix:** Provide a valid, non-empty cron pattern string:
172
-
173
- ```typescript
174
- const job = new CronHelper({
175
- cronTime: '0 */1 * * * *', // Must be a non-empty cron pattern
176
- onTick: () => { /* ... */ },
92
+ onTick: async () => riskyTask(),
93
+ errorHandler: error => logger.for('cron').error('Tick failed: %s', error),
177
94
  });
178
95
  ```
179
96
 
180
- ### "Invalid cron instance to start cronjob!"
181
-
182
- **Cause:** `start()` was called but the internal `CronJob` instance was not created. This typically means `configure()` threw an error during construction.
183
-
184
- **Fix:** Ensure the constructor completed without errors before calling `start()`. Wrap creation in a try/catch to detect configuration failures:
97
+ ### Reach the underlying `CronJob`
185
98
 
186
99
  ```typescript
187
- try {
188
- const job = new CronHelper({
189
- cronTime: '0 */1 * * * *',
190
- onTick: () => { /* ... */ },
191
- });
192
- job.start();
193
- } catch (error) {
194
- console.error('Failed to create cron job:', error);
195
- }
196
- ```
197
-
198
- ### Job does not fire at expected times
199
-
200
- **Cause:** The `tz` option is not set or uses an incorrect timezone identifier, causing the job to fire based on the server's local timezone.
201
-
202
- **Fix:** Set `tz` to the correct [IANA timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones):
203
-
204
- ```typescript
205
- const job = new CronHelper({
206
- cronTime: '0 0 9 * * *', // 9 AM
207
- onTick: () => { /* ... */ },
208
- tz: 'America/New_York', // Explicit timezone
209
- });
100
+ console.log(job.instance.isActive); // true
101
+ job.instance.stop();
210
102
  ```
211
103
 
212
- ## See Also
104
+ ## See also
213
105
 
214
- - **Related Concepts:**
215
- - [Services](/guides/core-concepts/services) -- Scheduling jobs within services
216
- - [Application](/guides/core-concepts/application/) -- Scheduling on application startup
106
+ - [Services](/guides/core-concepts/services) - scheduling jobs inside services
107
+ - [Application](/guides/core-concepts/application/) - scheduling on application startup
108
+ - [Helpers Overview](/extensions/helpers/) - all available helpers
109
+ - [Queue Helper](/extensions/helpers/queue/) - message queue processing
110
+ - [Cron Expression Guide](https://crontab.guru/) - interactive cron syntax reference
217
111
 
218
- - **Other Helpers:**
219
- - [Helpers Index](../index) -- All available helpers
220
- - [Queue Helper](../queue/) -- Message queue processing
112
+ **Files:**
221
113
 
222
- - **External Resources:**
223
- - [Cron Expression Guide](https://crontab.guru/) -- Interactive cron syntax reference
224
- - [`cron` npm package](https://github.com/kelektiv/node-cron) -- Underlying cron library
114
+ - [`packages/helpers/src/modules/cron/cron.helper.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/cron/cron.helper.ts) - `CronHelper` class
115
+ - [`packages/helpers/src/modules/cron/index.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/cron/index.ts) - module barrel