@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,27 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Schedule
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
9
|
+
`CronHelper` wraps the `cron` package's `CronJob`. It adds scoped logging, and convenience methods for rescheduling and duplicating jobs.
|
|
23
10
|
|
|
24
|
-
|
|
11
|
+
## In one example
|
|
25
12
|
|
|
26
13
|
```typescript
|
|
27
14
|
import { CronHelper } from '@venizia/ignis-helpers/cron';
|
|
@@ -32,193 +19,98 @@ const job = new CronHelper({
|
|
|
32
19
|
console.log('Running scheduled task');
|
|
33
20
|
},
|
|
34
21
|
autoStart: true,
|
|
35
|
-
tz: '
|
|
36
|
-
errorHandler: (error) => {
|
|
37
|
-
console.error('Cron job failed:', error);
|
|
38
|
-
},
|
|
22
|
+
tz: 'Asia/Ho_Chi_Minh',
|
|
39
23
|
});
|
|
40
24
|
```
|
|
41
25
|
|
|
42
|
-
|
|
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
|
-
|
|
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
|
-
|
|
30
|
+
- **The constructor builds the job right away.** `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 you hold a half-built job.
|
|
31
|
+
- **`start()` checks for a built job first.** If a prior `configure()` call failed, `buildInstance()` never produced a `CronJob`. `start()` then logs a warning and returns - it does not throw.
|
|
32
|
+
- **`stop()` is `async` on purpose.** The underlying `CronJob.stop()` resolves only once an in-flight tick finishes. Awaiting it stops a replacement job from starting while the old handler still runs.
|
|
33
|
+
- **`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.
|
|
34
|
+
- **`duplicate()` clones configuration, not state.** The new instance shares `onTick`, `onCompleted`, `autoStart`, `tz`, and `errorHandler`, with a different `cronTime`. Stopping or modifying one instance never touches the other.
|
|
35
|
+
- **`instance` is the raw `CronJob`.** Reach it for anything the wrapper skips - `isActive`, `lastDate()`, `fireOnTick()`. It comes from the [`cron`](https://github.com/kelektiv/node-cron) package, an optional peer dependency (`^4.3.3`).
|
|
68
36
|
|
|
69
|
-
|
|
37
|
+
**`ICronHelperOptions`**
|
|
70
38
|
|
|
71
|
-
|
|
39
|
+
| Option | Type | Default | Description |
|
|
40
|
+
|--------|------|---------|-------------|
|
|
41
|
+
| `cronTime` | `string` | -- (required) | Cron pattern defining when the job runs, e.g. `'0 */1 * * * *'` |
|
|
42
|
+
| `onTick` | `() => void \| Promise<void>` | -- (required) | Runs on every trigger |
|
|
43
|
+
| `onCompleted` | `CronOnCompleteCommand \| null` | `undefined` | Runs when the job is stopped via `stop()` |
|
|
44
|
+
| `autoStart` | `boolean` | `false` | Starts the job immediately after construction |
|
|
45
|
+
| `tz` | `string` | `undefined` | IANA timezone, e.g. `'Asia/Ho_Chi_Minh'`. Uses server timezone if omitted |
|
|
46
|
+
| `errorHandler` | `(error: unknown) => void \| null` | `undefined` | Runs if `onTick` throws |
|
|
72
47
|
|
|
73
|
-
|
|
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
|
-
```
|
|
48
|
+
## Common tasks
|
|
83
49
|
|
|
84
|
-
###
|
|
50
|
+
### Start a job manually
|
|
85
51
|
|
|
86
|
-
|
|
52
|
+
Leave `autoStart` unset (`false`) and call `start()` once dependencies are ready.
|
|
87
53
|
|
|
88
54
|
```typescript
|
|
89
55
|
const job = new CronHelper({
|
|
90
56
|
cronTime: '0 0 * * * *', // Every hour
|
|
91
|
-
onTick: () =>
|
|
92
|
-
console.log('Hourly task executed');
|
|
93
|
-
},
|
|
57
|
+
onTick: () => runHourlyTask(),
|
|
94
58
|
});
|
|
95
59
|
|
|
96
|
-
// Start later when conditions are met
|
|
97
60
|
job.start();
|
|
98
61
|
```
|
|
99
62
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
### Modifying the Schedule
|
|
63
|
+
### Reschedule at runtime
|
|
103
64
|
|
|
104
|
-
|
|
65
|
+
`modifyCronTime()` swaps the cron pattern without recreating the job. Set `shouldFireOnTick: true` to fire once immediately after the change. That fire is fire-and-forget - errors are logged, not thrown.
|
|
105
66
|
|
|
106
67
|
```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
68
|
job.modifyCronTime({ cronTime: '0 */10 * * * *', shouldFireOnTick: true });
|
|
121
69
|
```
|
|
122
70
|
|
|
123
|
-
###
|
|
71
|
+
### Duplicate a job onto a new schedule
|
|
124
72
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
```typescript
|
|
128
|
-
duplicate(opts: { cronTime: string }): CronHelper
|
|
129
|
-
```
|
|
73
|
+
Reuse the same `onTick` logic on a second cron pattern.
|
|
130
74
|
|
|
131
75
|
```typescript
|
|
132
76
|
const dailyJob = new CronHelper({
|
|
133
77
|
cronTime: '0 0 0 * * *', // Daily at midnight
|
|
134
|
-
onTick: async () =>
|
|
135
|
-
|
|
136
|
-
},
|
|
137
|
-
tz: 'America/New_York',
|
|
78
|
+
onTick: async () => generateReport(),
|
|
79
|
+
tz: 'Asia/Ho_Chi_Minh',
|
|
138
80
|
});
|
|
139
81
|
|
|
140
|
-
// Same logic, different schedule
|
|
141
82
|
const hourlyJob = dailyJob.duplicate({ cronTime: '0 0 * * * *' });
|
|
142
83
|
hourlyJob.start();
|
|
143
84
|
```
|
|
144
85
|
|
|
145
|
-
|
|
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
|
|
86
|
+
### Handle tick errors without crashing the process
|
|
149
87
|
|
|
150
|
-
|
|
88
|
+
Pass `errorHandler` so a throwing `onTick` does not take down the job silently.
|
|
151
89
|
|
|
152
90
|
```typescript
|
|
153
91
|
const job = new CronHelper({
|
|
154
92
|
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: () => { /* ... */ },
|
|
93
|
+
onTick: async () => riskyTask(),
|
|
94
|
+
errorHandler: error => logger.for('cron').error('Tick failed: %s', error),
|
|
177
95
|
});
|
|
178
96
|
```
|
|
179
97
|
|
|
180
|
-
###
|
|
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:
|
|
98
|
+
### Reach the underlying `CronJob`
|
|
185
99
|
|
|
186
100
|
```typescript
|
|
187
|
-
|
|
188
|
-
|
|
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
|
-
});
|
|
101
|
+
console.log(job.instance.isActive); // true
|
|
102
|
+
job.instance.stop();
|
|
210
103
|
```
|
|
211
104
|
|
|
212
|
-
## See
|
|
105
|
+
## See also
|
|
213
106
|
|
|
214
|
-
-
|
|
215
|
-
|
|
216
|
-
|
|
107
|
+
- [Services](/guides/core-concepts/services) - scheduling jobs inside services
|
|
108
|
+
- [Application](/guides/core-concepts/application/) - scheduling on application startup
|
|
109
|
+
- [Helpers Overview](/extensions/helpers/) - all available helpers
|
|
110
|
+
- [Queue Helper](/extensions/helpers/queue/) - message queue processing
|
|
111
|
+
- [Cron Expression Guide](https://crontab.guru/) - interactive cron syntax reference
|
|
217
112
|
|
|
218
|
-
|
|
219
|
-
- [Helpers Index](../index) -- All available helpers
|
|
220
|
-
- [Queue Helper](../queue/) -- Message queue processing
|
|
113
|
+
**Files:**
|
|
221
114
|
|
|
222
|
-
-
|
|
223
|
-
|
|
224
|
-
- [`cron` npm package](https://github.com/kelektiv/node-cron) -- Underlying cron library
|
|
115
|
+
- [`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
|
|
116
|
+
- [`packages/helpers/src/modules/cron/index.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/cron/index.ts) - module barrel
|