Comparing version 1.1.19 to 1.1.20
83
index.js
@@ -66,2 +66,22 @@ const EventEmitter = require('events'); | ||
// | ||
// if `hasSeconds` is `true` then ensure that | ||
// `cronValidate` object has `override` object with `useSeconds` set to `true` | ||
// <https://github.com/breejs/bree/issues/7> | ||
// | ||
if (this.config.hasSeconds) | ||
this.config.cronValidate = { | ||
...this.config.cronValidate, | ||
preset: | ||
this.config.cronValidate && this.config.cronValidate.preset | ||
? this.config.cronValidate.preset | ||
: 'default', | ||
override: { | ||
...(this.config.cronValidate && this.config.cronValidate.override | ||
? this.config.cronValidate.override | ||
: {}), | ||
useSeconds: true | ||
} | ||
}; | ||
debug('config', this.config); | ||
@@ -286,2 +306,49 @@ | ||
// validate hasSeconds | ||
if ( | ||
typeof job.hasSeconds !== 'undefined' && | ||
typeof job.hasSeconds !== 'boolean' | ||
) | ||
errors.push( | ||
new Error( | ||
`${prefix} had hasSeconds value of ${job.hasSeconds} (it must be a Boolean)` | ||
) | ||
); | ||
// validate cronValidate | ||
if ( | ||
typeof job.cronValidate !== 'undefined' && | ||
typeof job.cronValidate !== 'object' | ||
) | ||
errors.push( | ||
new Error( | ||
`${prefix} had cronValidate value set, but it must be an Object` | ||
) | ||
); | ||
// if `hasSeconds` was `true` then set `cronValidate` and inherit any existing options | ||
if (job.hasSeconds) { | ||
const preset = | ||
job.cronValidate && job.cronValidate.preset | ||
? job.cronValidate.preset | ||
: this.config.cronValidate && this.config.cronValidate.preset | ||
? this.config.cronValidate.preset | ||
: 'default'; | ||
const override = { | ||
...(this.config.cronValidate && this.config.cronValidate.override | ||
? this.config.cronValidate.override | ||
: {}), | ||
...(job.cronValidate && job.cronValidate.override | ||
? job.cronValidate.override | ||
: {}), | ||
useSeconds: true | ||
}; | ||
this.config.jobs[i].cronValidate = { | ||
...this.config.cronValidate, | ||
...job.cronValidate, | ||
preset, | ||
override | ||
}; | ||
} | ||
// validate cron | ||
@@ -299,3 +366,8 @@ if (typeof job.cron !== 'undefined') { | ||
// | ||
const result = cron(job.cron, this.cronValidate); | ||
const result = cron( | ||
job.cron, | ||
typeof job.cronValidate === 'undefined' | ||
? this.config.cronValidate | ||
: job.cronValidate | ||
); | ||
if (result.isValid()) { | ||
@@ -312,6 +384,7 @@ const schedule = later.schedule( | ||
); | ||
if (schedule.isValid()) { | ||
this.config.jobs[i].interval = schedule; | ||
// delete this.config.jobs[i].cron; | ||
} // else { | ||
// NOTE: it is always valid | ||
this.config.jobs[i].interval = schedule; | ||
// if (schedule.isValid()) { | ||
// this.config.jobs[i].interval = schedule; | ||
// } // else { | ||
// errors.push( | ||
@@ -318,0 +391,0 @@ // new Error( |
{ | ||
"name": "bree", | ||
"description": "The best job scheduler for Node.js with support for cron, dates, ms, later, and human-friendly strings. Uses workers to spawn sandboxed processes, and supports async/await, retries, throttling, concurrency, and cancelable promises (graceful shutdown). Simple, fast, and the most lightweight tool for the job. Made for Forward Email and Lad.", | ||
"version": "1.1.19", | ||
"version": "1.1.20", | ||
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com/)", | ||
@@ -6,0 +6,0 @@ "ava": { |
@@ -440,15 +440,15 @@ <h1 align="center"> | ||
| Property | Type | Default Value | Description | | ||
| ---------------------- | ------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ||
| `logger` | Object | `console` | This is the default logger. **We recommend using [Cabin][cabin]** instead of using `console` as your default logger. | | ||
| `root` | String | `path.resolve('jobs')` | Set this value to `false` to prevent requiring a root directory of jobs (e.g. if your jobs are not all in one directory). | | ||
| `timeout` | Number | `0` | Default timeout for jobs (e.g. a value of `0` means that jobs will start on boot by default unless a job has a property of `timeout` defined. Set this to `false` if you do not wish for a default value to be set for jobs. **This value does not apply to jobs with a property of `date`.** | | ||
| `interval` | Number | `0` | Default interval for jobs (e.g. a value of `0` means that there is no interval, and a value greater than zero indicates a default interval will be set with this value). **This value does not apply to jobs with a property of `cron`**. | | ||
| `jobs` | Array | `[]` | Defaults to an empty Array, but if the `root` directory has a `index.js` file, then it will be used. This allows you to keep your jobs and job definition index in the same place. See [Job Options](#job-options) below, and [Usage and Examples](#usage-and-examples) above for more insight. | | ||
| `hasSeconds` | Boolean | `false` | This value is passed to `later` for parsing jobs, and can be overridden on a per job basis. See [later cron parsing](https://bunkat.github.io/later/parsers.html#cron) documentation for more insight. | | ||
| `cronValidate` | Object | `{}` | This value is passed to `cron-validate` for validation of cron expressions. See the [cron-validate](https://github.com/Airfooox/cron-validate) documentation for more insight. | | ||
| `closeWorkerAfterMs` | Number | `0` | If you set a value greater than `0` here, then it will terminate workers after this specified time (in milliseconds). By default there is no termination done, and jobs can run for infinite periods of time. | | ||
| `defaultExtension` | String | `js` | This value can either be `js` or `mjs`. The default is `js`, and is the default extension added to jobs that are simply defined with a name and without a path. For example, if you define a job `test`, then it will look for `/path/to/root/test.js` as the file used for workers. | | ||
| `worker` | Object | `{}` | These are default options to pass when creating a `new Worker` instance. See the [Worker class](https://nodejs.org/api/worker_threads.html#worker_threads_new_worker_filename_options) documentation for more insight. | | ||
| `outputWorkerMetadata` | Boolean | `false` | By default worker metadata is not passed to the second Object argument of `logger`. However if you set this to `true`, then `logger` will be invoked internally with two arguments (e.g. `logger.info('...', { worker: ... })`). This `worker` property contains `isMainThread` (Boolean), `resourceLimits` (Object), and `threadId` (String) properties; all of which correspond to [Workers][] metadata. This can be overridden on a per job basis. | | ||
| Property | Type | Default Value | Description | | | ||
| ---------------------- | ------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | | ||
| `logger` | Object | `console` | This is the default logger. **We recommend using [Cabin][cabin]** instead of using `console` as your default logger. | | | ||
| `root` | String | `path.resolve('jobs')` | Set this value to `false` to prevent requiring a root directory of jobs (e.g. if your jobs are not all in one directory). | | | ||
| `timeout` | Number | `0` | Default timeout for jobs (e.g. a value of `0` means that jobs will start on boot by default unless a job has a property of `timeout` defined. Set this to `false` if you do not wish for a default value to be set for jobs. **This value does not apply to jobs with a property of `date`.** | | | ||
| `interval` | Number | `0` | Default interval for jobs (e.g. a value of `0` means that there is no interval, and a value greater than zero indicates a default interval will be set with this value). **This value does not apply to jobs with a property of `cron`**. | | | ||
| `jobs` | Array | `[]` | Defaults to an empty Array, but if the `root` directory has a `index.js` file, then it will be used. This allows you to keep your jobs and job definition index in the same place. See [Job Options](#job-options) below, and [Usage and Examples](#usage-and-examples) above for more insight. | | | ||
| `hasSeconds` | Boolean | `false` | This value is passed to `later` for parsing jobs, and can be overridden on a per job basis. See [later cron parsing](https://bunkat.github.io/later/parsers.html#cron) documentation for more insight. Note that setting this to `true` will automatically set `cronValidate` defaults to have `{ preset: 'default', override: { useSeconds: true } }` | | | ||
| `cronValidate` | Object | `{}` | This value is passed to `cron-validate` for validation of cron expressions. See the [cron-validate](https://github.com/Airfooox/cron-validate) documentation for more insight. | | | ||
| `closeWorkerAfterMs` | Number | `0` | If you set a value greater than `0` here, then it will terminate workers after this specified time (in milliseconds). By default there is no termination done, and jobs can run for infinite periods of time. | | | ||
| `defaultExtension` | String | `js` | This value can either be `js` or `mjs`. The default is `js`, and is the default extension added to jobs that are simply defined with a name and without a path. For example, if you define a job `test`, then it will look for `/path/to/root/test.js` as the file used for workers. | | | ||
| `worker` | Object | `{}` | These are default options to pass when creating a `new Worker` instance. See the [Worker class](https://nodejs.org/api/worker_threads.html#worker_threads_new_worker_filename_options) documentation for more insight. | | | ||
| `outputWorkerMetadata` | Boolean | `false` | By default worker metadata is not passed to the second Object argument of `logger`. However if you set this to `true`, then `logger` will be invoked internally with two arguments (e.g. `logger.info('...', { worker: ... })`). This `worker` property contains `isMainThread` (Boolean), `resourceLimits` (Object), and `threadId` (String) properties; all of which correspond to [Workers][] metadata. This can be overridden on a per job basis. | | | ||
@@ -468,3 +468,4 @@ | ||
| `cron` | String | A cron expression to use as the job's interval, which is validated against [cron-validate][] and parsed by [later][]. | | ||
| `hasSeconds` | Boolean | Overrides the [Instance Options](#instance-options) `hasSeconds` property if set. | | ||
| `hasSeconds` | Boolean | Overrides the [Instance Options](#instance-options) `hasSeconds` property if set. Note that setting this to `true` will automatically set `cronValidate` defaults to have `{ preset: 'default', override: { useSeconds: true } }` | | ||
| `cronValidate` | Object | Overrides the [Instance Options](#instance-options) `cronValidate` property if set. | | ||
| `closeWorkerAfterMs` | Number | Overrides the [Instance Options](#instance-options) `closeWorkerAfterMs` property if set. | | ||
@@ -471,0 +472,0 @@ | `worker` | Object | Overrides the [Instance Options](#instance-options) `worker` property if set. | |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
70128
684
707