{"_id":"@deboxsoft/cron-jobs","_rev":"13-78e593607cfbaa78758add72ad7c72ec","name":"@deboxsoft/cron-jobs","dist-tags":{"latest":"0.5.3"},"versions":{"0.0.1-0":{"name":"@deboxsoft/cron-jobs","version":"0.0.1-0","repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"scripts":{"build":"bic","clean":"yarn workspaces foreach --no-private run clean","gql-gen":"run-s gql-gen:server gql-gen:client","gql-gen:server":"gql-gen","gql-gen:client":"gql-gen -c codegen.client.yml","lint":"yarn workspaces foreach --no-private run lint","r:cpx":"cd $INIT_CWD && cpx","r:doctor":"cd $INIT_CWD && yarn dlx @yarnpkg/doctor","r:eslint":"cd $INIT_CWD && eslint","r:jest":"cd $INIT_CWD && jest","r:rimraf":"cd $INIT_CWD && rimraf","r:rollup":"cd $INIT_CWD && rollup","r:run-p":"cd $INIT_CWD && run-p","r:run-s":"cd $INIT_CWD && run-s","r:tsc":"cd $INIT_CWD && tsc","release":"run-s test lint build && lerna publish","release:dev":"run-s build version:dev publish:dev","version:dev":"yarn version prerelease","publish:dev":"npm publish --access public","test":"jest","test:coverage":"yarn test --coverage"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.{ts,tsx}":["eslint --fix"]},"dependencies":{"@breejs/later":"^4.0.2","@deboxsoft/module-core":"^1.6.1","bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","human-interval":"^2.0.1","is-valid-path":"^0.1.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^7.1.1","@nurdiansyah/rollup":"^1.3.4","@rollup/plugin-babel":"^5.2.0","@rollup/plugin-commonjs":"^17.0.0","@rollup/plugin-node-resolve":"^11.0.0","@rollup/plugin-typescript":"^8.0.0","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.11.9","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^4.11.0","@typescript-eslint/parser":"^4.11.0","@yarnpkg/pnpify":"^2.4.0","ava":"^3.15.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","esbuild":"^0.8.17","eslint":"^7.4.0","eslint-plugin-prettier":"^3.3.0","husky":"^4.3.0","hygen":"^6.0.4","lerna":"3.22.1","lint-staged":"^10.5.1","npm-run-all":"^4.1.5","prettier":"^2.2.1","rimraf":"^3.0.2","rollup":"2.35.1","rollup-plugin-dts":"^2.0.0","rollup-plugin-esbuild":"2.6.0","rollup-plugin-terser":"^7.0.2","sucrase":"^3.0.0","ts-node":"^9.1.1","tslib":"^2.1.0","typescript":"^4.1.3"},"ava":{"extensions":["ts","js"],"require":["ts-node/register"]},"gitHead":"06fc30c8b41fbfd745e96634a95c49ac4f49dfa8","description":"<h3 align=\"center\">   Module #{module-name} System </h3>","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"},"homepage":"https://github.com/deboxsoft/cron-jobs#readme","_id":"@deboxsoft/cron-jobs@0.0.1-0","_nodeVersion":"14.15.4","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Jd6JdI7qLZ9nklzYMCdpFqmWsko+/nY19VIEERzRF+y6BOExpiXH/4k0wQZuOB6nrmh9wBs7Z4Ppj/0E7v0MTw==","shasum":"f9a815b11259241a91f3c17df4f543ad3c5fb877","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.0.1-0.tgz","fileCount":48,"unpackedSize":2607284,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNIH3CRA9TVsSAnZWagAACS4QAJzhwChMGARU7AFbYks6\nk5bWlilK9eUsNYRUDyRH2KDo3XYxPKlL+5J7Di13pZ5ycFp2OK93AZZs6iaq\noV/BdIe54fvNKx4kU4VIH7uvlTzeS9nezX70ACCAfT5oa+euFpInMFUAQ7AM\n/xbSYXnX30kyUc5kMV/xHQHbN3Nhc0+M9FMo/3TN/0IXQdMaVK3V2S/JJDj5\n2NQQbs0e4NJfXd/vrP6eWUKpeXNSWQogHwEY26uSbD/ZhY1jvXxDDw/yX7uj\n5ZhD3qBFTyy/7hS5kbRfckFt/8T2NwC3vXxaSOGleNP5qzkmQRkiJsckm9Rt\nMryyi8ZIqsjITt1QHTxFoZcMXTG5qRMylEeZ7l7WP8j46hXTKxUAE7BGKRJb\n4L4n07WzZ1Pxe44PByuv6HQwdmGG5KWI8ve7+2mXcmfbBu2kZlVccxsI1ZHr\n6dyOF4dXswIhfi7uU4xGqkKBxoxtwvhFfVPPbKfr5m+VBA33eYyPaBIQkAHS\n+zR8Nxx6AttEZDydgH227ld3F2vE5pAGQVkoy3vrx2uOyfFfJBQ83xniCS9k\nLBqp9OlTPAK38L2kAraGvBIpdIjbSwxjqqS/SvMoPSOGxGqUA6SRSGRqBURQ\n4JgqxFW4321JFoHjs9pVRPiLOwROymz2gRCogvOhGmij8kXnMExdnqg3ucwL\ngtFy\r\n=aPy1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKBZLL5ZPFNHmcHjxalttmzOgdstb9tgUeNnhIStHGfwIhAPFmelmA/4t9rfmz0HHXWvw7NbDBDg8rfcr61LdSILuK"}]},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.0.1-0_1614053879440_0.823149290002037"},"_hasShrinkwrap":false},"0.0.1-1":{"name":"@deboxsoft/cron-jobs","version":"0.0.1-1","repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"scripts":{"dev":"yarn build:rollup --watch","build":"yarn run-p build:rollup build:tsc","build:rollup":"yarn rollup -c .//scripts/rollup/config.js","build:tsc":"yarn clean && yarn tsc","clean":"rimraf types","doctor":"yarn dlx @yarnpkg/doctor","lint":"yarn run-p lint:eslint","lint:eslint":"yarn eslint --fix 'src/**/*.ts'","release":"run-s test lint build && lerna publish","release:dev":"run-s build version:dev publish:dev","version:dev":"yarn version prerelease","publish:dev":"npm publish --access public","test":"yarn ava tests/**/*.test.ts"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.{ts,tsx}":["eslint --fix"]},"dependencies":{"@breejs/later":"^4.0.2","@deboxsoft/module-core":"^1.6.1","bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","human-interval":"^2.0.1","is-valid-path":"^0.1.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^7.1.1","@nurdiansyah/rollup":"^1.3.4","@rollup/plugin-babel":"^5.2.0","@rollup/plugin-commonjs":"^17.0.0","@rollup/plugin-node-resolve":"^11.0.0","@rollup/plugin-typescript":"^8.0.0","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.11.9","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^4.11.0","@typescript-eslint/parser":"^4.11.0","@yarnpkg/pnpify":"^2.4.0","ava":"^3.15.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","esbuild":"^0.8.17","eslint":"^7.4.0","eslint-plugin-prettier":"^3.3.0","husky":"^4.3.0","hygen":"^6.0.4","lerna":"3.22.1","lint-staged":"^10.5.1","npm-run-all":"^4.1.5","prettier":"^2.2.1","rimraf":"^3.0.2","rollup":"2.35.1","rollup-plugin-dts":"^2.0.0","rollup-plugin-esbuild":"2.6.0","rollup-plugin-terser":"^7.0.2","sucrase":"^3.0.0","ts-node":"^9.1.1","tslib":"^2.1.0","typescript":"^4.1.3"},"ava":{"extensions":["ts","js"],"require":["ts-node/register"]},"gitHead":"06fc30c8b41fbfd745e96634a95c49ac4f49dfa8","description":"<h3 align=\"center\">   Module #{module-name} System </h3>","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"},"homepage":"https://github.com/deboxsoft/cron-jobs#readme","_id":"@deboxsoft/cron-jobs@0.0.1-1","_nodeVersion":"14.15.4","_npmVersion":"6.14.10","dist":{"integrity":"sha512-1kSwk3Cke4iTIJ8b52QtKf6+vvfEAabX13uM6OcvxHxwGLx/IHl4K8Qescatirtn3tDEE4yUFUzdA58fMlLsKA==","shasum":"fe8dcc0ca9dbf78087b5203361628945e03d52d6","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.0.1-1.tgz","fileCount":57,"unpackedSize":2655926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNIVBCRA9TVsSAnZWagAAevcP/iqOh9F9cnW1U+LbyhqE\n92W3U1hqLgbCP3Ks9Ths6BDgRb6IKrraX23ePcPgEqVQqiMaWM6s8PSV6K2W\nww05hH0djnvoHF18DOaEkl5jqiv3r4UVCGg1Q50+QekQlxCPjHqG/6Emle9y\niVLEhGuHMVAHXlz3el0hmTtjjiih6WR7uVcbuc/6NtEYPy+giIPHpxFn06NU\ntwTamVllQrMcFtz9QlGkxMuKIqsO6qSugbT1eif6IgDIn3ET1n2Xm2ltazUL\nJC1E/mnhlriyHOoS1KnonRbdv0YPASOEOZoBgEeML+v9GGSE2OE4DYLfjOAC\nf7pb9KM7ml5Up/VNzX/NlWIZIyGWzLpPlaGBt6TcP0LtrM6PeEVIXae13vSZ\n/viLwO3BUi4jqPK5POiZy+I3EZJDJ8LqGmBWqb8i8slPkxmfpfGo03W2ohTZ\nkvJ0cWzHyNqNCuZ5nq8jgRwWYWX5F7S6Sqt4LomteR+2PYZ5TrkyqthS9WLh\nFHQ9h/dRk9aXgzf13LoqmQt5z02rxJ1sUDYR40OHyFDuI8eTHUaJErE/xk6S\n4glrjEf4flzFPzCMuQS6iudFsV1YBA12cZS1oJkNBIFqz/N/E70Vk/9KWw0D\nSy/ylUzJKO6WaqemXomlc/mlDRbNhaTYqCKttrQ/5/lbA1d16rhWrZpvEIT+\nMIsQ\r\n=Ll1T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICVGFPKevsM0bchkotpfU6xpUvr6SlJ+pJCNyr+P/pSWAiEA0Itb9SBOy5uXFLkS7NfBbsMWMwHffN7AtmrQnbyGam4="}]},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.0.1-1_1614054720692_0.7712552869681961"},"_hasShrinkwrap":false},"0.0.1-2":{"name":"@deboxsoft/cron-jobs","version":"0.0.1-2","repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"main":"index.cjs.js","types":"types","module":"index.js","scripts":{"dev":"yarn build:rollup --watch","build":"yarn run-p build:rollup build:tsc","build:rollup":"yarn rollup -c .//scripts/rollup/config.js","build:tsc":"yarn clean && yarn tsc","clean":"rimraf types","doctor":"yarn dlx @yarnpkg/doctor","lint":"yarn run-p lint:eslint","lint:eslint":"yarn eslint --fix 'src/**/*.ts'","release":"run-s test lint build && lerna publish","release:dev":"run-s build version:dev publish:dev","version:dev":"yarn version prerelease","publish:dev":"npm publish --access public","test":"yarn ava tests/**/*.test.ts"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.{ts,tsx}":["eslint --fix"]},"dependencies":{"@breejs/later":"^4.0.2","@deboxsoft/module-core":"^1.6.1","bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","human-interval":"^2.0.1","is-valid-path":"^0.1.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^7.1.1","@nurdiansyah/rollup":"^1.3.4","@rollup/plugin-babel":"^5.2.0","@rollup/plugin-commonjs":"^17.0.0","@rollup/plugin-node-resolve":"^11.0.0","@rollup/plugin-typescript":"^8.0.0","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.11.9","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^4.11.0","@typescript-eslint/parser":"^4.11.0","@yarnpkg/pnpify":"^2.4.0","ava":"^3.15.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","esbuild":"^0.8.17","eslint":"^7.4.0","eslint-plugin-prettier":"^3.3.0","husky":"^4.3.0","hygen":"^6.0.4","lerna":"3.22.1","lint-staged":"^10.5.1","npm-run-all":"^4.1.5","prettier":"^2.2.1","rimraf":"^3.0.2","rollup":"2.35.1","rollup-plugin-dts":"^2.0.0","rollup-plugin-esbuild":"2.6.0","rollup-plugin-terser":"^7.0.2","sucrase":"^3.0.0","ts-node":"^9.1.1","tslib":"^2.1.0","typescript":"^4.1.3"},"ava":{"extensions":["ts","js"],"require":["ts-node/register"]},"gitHead":"51f979f96c8d77ee83b1c15b50f7d12c0b1f531d","description":"<h3 align=\"center\">   Module #{module-name} System </h3>","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"},"homepage":"https://github.com/deboxsoft/cron-jobs#readme","_id":"@deboxsoft/cron-jobs@0.0.1-2","_nodeVersion":"14.15.4","_npmVersion":"6.14.10","dist":{"integrity":"sha512-t4T4V3l/XSI4Qvn1onYYMzG1mwhy5J1uNaiAkdaw/XbMsdek9CxUedSPriEE38d5EpoekWJOIpg58b6FSNoNkw==","shasum":"e9aef72606b43729faf81d676ecb814b05583903","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.0.1-2.tgz","fileCount":11,"unpackedSize":52119,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNIa/CRA9TVsSAnZWagAAaAkP/3zrvFM79K74hGP2H2UJ\nyPbW2xv2R0G2FPAJ4mD9H6E3/b0O4p6v0bA9dhTrtVBpVFD3hRKP0pSYLugJ\noE7E8ja56mvBm4WGcXg0PWCMkMZo2rwpQW+2JHW4AEaDLWiUHPLngum/Zz/X\nZRcIH3QraH1pRWEKSueWY25A8vln9+UKQED6MRB3yti7xTL7k2Sa7aw0X3uf\nonH2hD0WwsVCVPg36lGX7MtV9aCwSkMFq47+v1F5gpK5YF9U9E0zad+wsDMu\nYmTkJOctc1Wgz45/aatRk+eNrjT2OP5TGCvkUzA1vcxGb9A4O5nlippUvP7o\nWCCOZ7aSjjOZGLmz9DXriyBUAVeRBLoX0f3xR0DzpcTMbrs6Sj/HKxKxsTyq\nb4COmEQl8Gc6RRaDRhHLzTeduxLiTapxI5tA2EnvA7LUQ1kf+L3a4o3qX476\n+xsXRiu2krH5zYjqJvzrGtMwCCj4aX3xCmqENo1GPc7sfCQ+RTiSx6sXYgFj\nt2hRgRvwU+No6SkhIIKi8dNzI0TiAmrhuC1XbkDHd4kkZqNiEEp+BCQsFz1F\n63ajpsPkfD1NWsqa5MvWe2ZrMpyE1URt2xbgF+IizoatzKgnwCJ5p2oXmErE\n+AD/3wSY2pIXb+VxkHgYbP6WP26U93uGjIPldUV6AjjtXpPB2X4rnT+A5uT8\n4pJN\r\n=UNXp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA+Fk3FBWPMArNTkOA/StOMEWE/n2zemIiNqbeyConWFAiAkfnmSjwxhSd/0VvMrO4m+vAF7GE8X2exXmHKMvT+Yxg=="}]},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.0.1-2_1614055102679_0.9004779246407066"},"_hasShrinkwrap":false},"0.1.0":{"name":"@deboxsoft/cron-jobs","version":"0.1.0","repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"main":"index.cjs.js","types":"types","module":"index.js","scripts":{"dev":"yarn build:rollup --watch","build":"yarn run-p build:rollup build:tsc","build:rollup":"yarn rollup -c .//scripts/rollup/config.js","build:tsc":"yarn clean && yarn tsc","clean":"rimraf types","doctor":"yarn dlx @yarnpkg/doctor","lint":"yarn run-p lint:eslint","lint:eslint":"yarn eslint --fix 'src/**/*.ts'","release":"run-s test lint build && npm publish --access public","release:dev":"run-s build version:dev publish:dev","version:dev":"yarn version prerelease","publish:dev":"npm publish --access public --tag canary","test":"yarn ava"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.{ts,tsx}":["eslint --fix"]},"dependencies":{"@breejs/later":"^4.0.2","@deboxsoft/module-core":"^1.6.1","bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","human-interval":"^2.0.1","is-valid-path":"^0.1.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^7.1.1","@nurdiansyah/rollup":"^1.3.4","@rollup/plugin-babel":"^5.2.0","@rollup/plugin-commonjs":"^17.0.0","@rollup/plugin-node-resolve":"^11.0.0","@rollup/plugin-typescript":"^8.0.0","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.11.9","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^4.11.0","@typescript-eslint/parser":"^4.11.0","@yarnpkg/pnpify":"^2.4.0","ava":"^3.15.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","esbuild":"^0.8.17","eslint":"^7.4.0","eslint-plugin-prettier":"^3.3.0","husky":"^4.3.0","hygen":"^6.0.4","lerna":"3.22.1","lint-staged":"^10.5.1","npm-run-all":"^4.1.5","prettier":"^2.2.1","rimraf":"^3.0.2","rollup":"2.35.1","rollup-plugin-dts":"^2.0.0","rollup-plugin-esbuild":"2.6.0","rollup-plugin-terser":"^7.0.2","sucrase":"^3.0.0","ts-node":"^9.1.1","tslib":"^2.1.0","typescript":"^4.1.3"},"ava":{"files":["tests/**/*.test.+(ts|js)"],"extensions":["ts","js"],"require":["ts-node/register"]},"gitHead":"b901f86ea18d13fcc3821591a28cd44c68523e82","description":"<br /> <div align=\"center\">   Cron job scheduler for <a href=\"https://nodejs.org\">Node.js</a> and JavaScript with <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a>, <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obje","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"},"homepage":"https://github.com/deboxsoft/cron-jobs#readme","_id":"@deboxsoft/cron-jobs@0.1.0","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-63LgexyckpaC9rH4bRB2yei0Ti2xGvMLUeut5mZC9luXgwqPD+DUQF65uZHde7ToS1xXzxz/JhimNQYSek24DA==","shasum":"d20ba27e35a07f76ad2be2973811e0a26b7752b6","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.1.0.tgz","fileCount":11,"unpackedSize":96243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTp+ICRA9TVsSAnZWagAADtQP/2t1ZQwzt2ReJRTLWpD9\nCeEkZHJQDUU0p+ZS65DbFS+tXjLQIcNPbcqhs07QCJ6qUoLPpIXSYiTkumr/\nwHBXK8i9uT/uvYUYtCEmZgPfbj9O6GTcs9VOZ/iYfrN4TUrKzcTZZFYqncDi\nWxKKdCAmVGVb43odfK5FVCamSF88LkGoDNtoRf3/lpo7458SaiF13EDQzaWS\ngB9cbU1vO8ix8tUHd8GesX6iK8MuvEFzWYuzT1MulmL7QBxfg7GyTOBV1YF7\nhctFoDD1q8P+UerV31gmOsI2B96e2yqK0UxQQc4iQ+2koXxc3VcnL4QQsvR3\nn6MO0nTfMHaZ6cwtSLsOyrZVQHSoPLGZ/+r7Xx6p9XUVcsNh5A35CBZ151mg\n50hZ/mcOA+6uDo7ltMsXku/IVUqYDKjxFitAnr6Xfa+44u4A8Lq9rzCVUJS+\nmABpoyk29BVWwzkSQ/0TpHvcIAaPwvppuAfArBlQkQQwTzb9ZxBMoNEG3948\nnvYrJwixylqu6wLTyTWez3ZhGwTP2QY9NRRkSBmEhA1dVjMEJqheqoSghKPx\nbSxOOJJsl5l2TgjG/PqQRge/O5PY7XH2rUuJK0NXQYovFAxnoHQp1dj65tD2\nvVuC8uq81+PfHZO/3K10YspMJoMro+zQDR5Wh9hRB+S+DWi4Shda4Nc0vToF\n6v/s\r\n=h0P6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDC5/gKQxFCQ+1zgZ+GPTuMK/Al5dny0FdlqBUyPgT3gIgdb4TTpvacIbwiA9tvyABoz44yAoH+ltfN8rBotxaFJQ="}]},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.1.0_1615765384239_0.18331176949683603"},"_hasShrinkwrap":false},"0.2.0":{"name":"@deboxsoft/cron-jobs","version":"0.2.0","repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"main":"index.cjs.js","types":"types","module":"index.js","scripts":{"dev":"yarn build:rollup --watch","build":"yarn run-p build:rollup build:tsc","build:rollup":"yarn rollup -c .//scripts/rollup/config.js","build:tsc":"yarn clean && yarn tsc","clean":"rimraf types","doctor":"yarn dlx @yarnpkg/doctor","lint":"yarn run-p lint:eslint","lint:eslint":"yarn eslint --fix 'src/**/*.ts'","release":"run-s test lint build && npm publish --access public","release:dev":"run-s build version:dev publish:dev","version:dev":"yarn version prerelease","publish:dev":"npm publish --access public --tag canary","test":"yarn ava"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.{ts,tsx}":["eslint --fix"]},"dependencies":{"@breejs/later":"^4.0.2","bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","fastq":"^1.11.0","human-interval":"^2.0.1","is-valid-path":"^0.1.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@deboxsoft/module-core":"^1.8.0-0","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^7.1.1","@nurdiansyah/rollup":"^1.3.4","@rollup/plugin-babel":"^5.2.0","@rollup/plugin-commonjs":"^17.0.0","@rollup/plugin-node-resolve":"^11.0.0","@rollup/plugin-typescript":"^8.0.0","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.11.9","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^4.11.0","@typescript-eslint/parser":"^4.11.0","@yarnpkg/pnpify":"^2.4.0","ava":"^3.15.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","esbuild":"^0.8.17","eslint":"^7.4.0","eslint-plugin-prettier":"^3.3.0","husky":"^4.3.0","hygen":"^6.0.4","lerna":"3.22.1","lint-staged":"^10.5.1","npm-run-all":"^4.1.5","prettier":"^2.2.1","rimraf":"^3.0.2","rollup":"2.35.1","rollup-plugin-dts":"^2.0.0","rollup-plugin-esbuild":"2.6.0","rollup-plugin-terser":"^7.0.2","sucrase":"^3.0.0","ts-node":"^9.1.1","tslib":"^2.1.0","typescript":"^4.1.3"},"peerDependencies":{"@deboxsoft/module-core":"^1.8.0-0"},"ava":{"files":["tests/**/*.test.+(ts|js)"],"extensions":["ts","js"],"require":["ts-node/register"]},"gitHead":"49a71d33c9c9bc63af0e97118ac107b8d1c9e3fa","description":"<br /> <div align=\"center\">   Cron job scheduler for <a href=\"https://nodejs.org\">Node.js</a> and JavaScript with <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a>, <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obje","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"},"homepage":"https://github.com/deboxsoft/cron-jobs#readme","_id":"@deboxsoft/cron-jobs@0.2.0","_nodeVersion":"14.16.0","_npmVersion":"7.7.6","dist":{"integrity":"sha512-+4a+uxV9D2z4N5pDs1qfJnBPOGCRRtlyLg0Zt4BdipN8dgcXPK2YIKNVgds5QLYnnJnWNDEB8EtgHB0jSrUhjw==","shasum":"77ccd50d2c29922a4d9d6c682764abeb9e13e0ca","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.2.0.tgz","fileCount":12,"unpackedSize":99653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaZL3CRA9TVsSAnZWagAA5c4P/1ushuUyiHR9Rj5OiWN3\nmI//ZIhYL7O3ED8MBAdIcUpPecCn7r8GZ7YQHHQhxHHQIEyae8DCUsfqO8Al\nxFeZ0VIu63l6kSXjE7Z0tPKpUjY7j47brNPIxDczlECx+bzfy7IkSWdDEnjk\nx7uDTHjz1o2ywU7QNd2kgxPSDxXX8/bwGG6JFUg03qI6iN7Nw7Ez4Belbrag\nqoFSExH2wiRw0Qhff/i9zg88XXGMamA2bkArFdCyWHOYPKBOn/vvFupct4E3\nojsTvYnCgctFxJ8poCl0DiLSYMcst2k7AxHGCcTi/8SxJmqlAxqXU1hxXNmw\naLvQkxlU44YqQS/gjoFJ4r14oJ45UAGofnpmaHwtzr6dDutwY6D83sVo39tT\nQKLSvStXkxYGGfMPTvZjb0PuRUNF8oSiA3jtzdAYZ8eVy3/tpEA+Ny9V3FyW\nXEFQuMPjzhiSfhOnQ2Q4kucOQVs0SwkJ3IrfB2RS0C0KjV7dQsM5rPOmnRC5\nTQSV3mD41afMore58g/X7nEqPN2LZtiblu9l4SxvoyzSmMh2+iPKpjjLtXW7\nveWTOLHozFDPtd4Ahnr0RQYDtZVlCBeG3LS+TwfQOe46LojDdHallmcg3cN9\nmycHT+L/Qm2Sgcfa+uI+LzsG+nAnR8xGCF/5t6tY6F0lJuFhXAdipsoPcMQn\n9xdE\r\n=DFzA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvZTYS8sRFiAfwEHYROq6SywG1cVvziGGInbntghwSHgIgXBrmurbS82c8FuN94sLv7k1VelL2xlpIjrXNV3WReaA="}]},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.2.0_1617531638797_0.3251987649161119"},"_hasShrinkwrap":false},"0.3.0":{"name":"@deboxsoft/cron-jobs","version":"0.3.0","repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"main":"index.cjs.js","types":"types","module":"index.js","scripts":{"dev":"yarn build:rollup --watch","build":"yarn run-p build:rollup build:tsc","build:rollup":"yarn rollup -c .//scripts/rollup/config.js","build:tsc":"yarn clean && yarn tsc","clean":"rimraf types","doctor":"yarn dlx @yarnpkg/doctor","lint":"yarn run-p lint:eslint","lint:eslint":"yarn eslint --fix 'src/**/*.ts'","release":"run-s test lint build && npm publish --access public","release:dev":"run-s build version:dev publish:dev","version:dev":"yarn version prerelease","publish:dev":"npm publish --access public --tag canary","test":"yarn ava"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.{ts,tsx}":["eslint --fix"]},"dependencies":{"@breejs/later":"^4.0.2","@deboxsoft/module-core":"^2.0.0","bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","fastq":"^1.11.0","human-interval":"^2.0.1","is-valid-path":"^0.1.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@deboxsoft/module-core":"^1.8.0-0","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^7.1.1","@nurdiansyah/rollup":"^1.3.4","@rollup/plugin-babel":"^5.2.0","@rollup/plugin-commonjs":"^17.0.0","@rollup/plugin-node-resolve":"^11.0.0","@rollup/plugin-typescript":"^8.0.0","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.11.9","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^4.11.0","@typescript-eslint/parser":"^4.11.0","@yarnpkg/pnpify":"^2.4.0","ava":"^3.15.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","esbuild":"^0.8.17","eslint":"^7.4.0","eslint-plugin-prettier":"^3.3.0","husky":"^4.3.0","hygen":"^6.0.4","lerna":"3.22.1","lint-staged":"^10.5.1","npm-run-all":"^4.1.5","prettier":"^2.2.1","rimraf":"^3.0.2","rollup":"2.35.1","rollup-plugin-dts":"^2.0.0","rollup-plugin-esbuild":"2.6.0","rollup-plugin-terser":"^7.0.2","sucrase":"^3.0.0","ts-node":"^9.1.1","tslib":"^2.1.0","typescript":"^4.1.3"},"ava":{"files":["tests/**/*.test.+(ts|js)"],"extensions":["ts","js"],"require":["ts-node/register"]},"gitHead":"bfe0f4c9efbd7c3920d97f9b01f8c348dfa99f7b","description":"<br /> <div align=\"center\">   Cron job scheduler for <a href=\"https://nodejs.org\">Node.js</a> and JavaScript with <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a>, <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obje","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"},"homepage":"https://github.com/deboxsoft/cron-jobs#readme","_id":"@deboxsoft/cron-jobs@0.3.0","_nodeVersion":"14.17.1","_npmVersion":"7.19.1","dist":{"integrity":"sha512-mVYQcM0zw7ox2o0kSqECrctm8jLwlnRZGwGOKT3hLAMACec4HkJ/k6QSlzdFM1K2Sn+OpFXOYujKOn8LEDS+OQ==","shasum":"43cee10b375a0c06f1f538fdbe69e8886e926ce0","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.3.0.tgz","fileCount":12,"unpackedSize":99623,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAaxJCRA9TVsSAnZWagAAQdIP/joiN1xZODFjH3b67wTO\nGm68JZGC2I+jlVORsNXSzh78sRVHTMTsp+tBNFz8zTUhf8++gxW0klBSaI8p\nK2XHAKfHg7Iv+ra0a0Zb/9ttxcxWQaR1zfmspH0b+Ausjz4zR7mPtKVgG6bX\npVINZH87iaI6emvAU7MWKK30A390YmlJoXAhh/Erfc+y0i+goemJNv5cm+3r\nmQoWx+jD5f0NlG7GkFo+GAinS+xl0HI+3COHsLpeebtk0mgEVh0zBxYwXXiD\nSYr6nhASzmh50gRowEX4IP+VWgT2HQJV933qKMNHuPeF4PcSl3wLLuTnR+Sn\nvtDvlZTSP/xorsZ3rJdiXAMYjaeshcPMJePCGq39cgGEIbj5BgD1EY9lennk\n8YeVISn4IcNbTANDfw7AaETomDGGPY7tNa0QMFz5VqFOGQg/rm3Zqo0RZN4b\nQ5MNG8aIGC2jRlkYKocSJbdlclLvdqcU2jYdWf2s+Q8G5TPAOMW6JWstjO9R\nB5MzRBVa0KWV1IdihLA6iz7ijfDw6a1csIwX0nl5DMksj7SM2piWADb/scjv\noS9jMo0FcGVNeEiL61xsZyXfH7MI5/nLFINaO0KtMMpus1ISrXc/g6sA9Eki\nQSy8u2bXjJib9DOzS564HSRHLIe+27eXTpGdYvcv+NRbY/vHNddJEqZZYf65\naHlk\r\n=B0xy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFgxwbAxI43cjdN7S7BjBjf1Do8vJxD5AsxwWlcLzPq+AiAqdFfawqLynOTP6Qaurm1U0alHRj/DeL9zz8DI4mG81w=="}]},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.3.0_1627499593678_0.5114740333745698"},"_hasShrinkwrap":false},"0.3.1":{"name":"@deboxsoft/cron-jobs","version":"0.3.1","repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"main":"index.cjs.js","types":"types","module":"index.js","scripts":{"dev":"yarn build:rollup --watch","build":"yarn run-p build:rollup build:tsc","build:rollup":"yarn rollup -c .//scripts/rollup/config.js","build:tsc":"yarn clean && yarn tsc","clean":"rimraf types","doctor":"yarn dlx @yarnpkg/doctor","lint":"yarn run-p lint:eslint","lint:eslint":"yarn eslint --fix 'src/**/*.ts'","release":"run-s test lint build && npm publish --access public","release:dev":"run-s build version:dev publish:dev","version:dev":"yarn version prerelease","publish:dev":"npm publish --access public --tag canary","test":"yarn ava"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.{ts,tsx}":["eslint --fix"]},"dependencies":{"@breejs/later":"^4.0.2","@deboxsoft/module-core":"^2.2.2","bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","fastq":"^1.11.0","human-interval":"^2.0.1","is-valid-path":"^0.1.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@deboxsoft/module-core":"^2.2.2","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^7.1.1","@nurdiansyah/rollup":"^1.3.4","@rollup/plugin-babel":"^5.2.0","@rollup/plugin-commonjs":"^17.0.0","@rollup/plugin-node-resolve":"^11.0.0","@rollup/plugin-typescript":"^8.0.0","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.11.9","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^4.11.0","@typescript-eslint/parser":"^4.11.0","@yarnpkg/pnpify":"^2.4.0","ava":"^3.15.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","esbuild":"^0.8.17","eslint":"^7.4.0","eslint-plugin-prettier":"^3.3.0","husky":"^4.3.0","hygen":"^6.0.4","lerna":"3.22.1","lint-staged":"^10.5.1","npm-run-all":"^4.1.5","prettier":"^2.2.1","rimraf":"^3.0.2","rollup":"2.35.1","rollup-plugin-dts":"^2.0.0","rollup-plugin-esbuild":"2.6.0","rollup-plugin-terser":"^7.0.2","sucrase":"^3.0.0","ts-node":"^9.1.1","tslib":"^2.1.0","typescript":"^4.1.3"},"ava":{"files":["tests/**/*.test.+(ts|js)"],"extensions":["ts","js"],"require":["ts-node/register"]},"gitHead":"bfe0f4c9efbd7c3920d97f9b01f8c348dfa99f7b","description":"<br /> <div align=\"center\">   Cron job scheduler for <a href=\"https://nodejs.org\">Node.js</a> and JavaScript with <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a>, <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obje","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"},"homepage":"https://github.com/deboxsoft/cron-jobs#readme","_id":"@deboxsoft/cron-jobs@0.3.1","_nodeVersion":"14.17.1","_npmVersion":"7.19.1","dist":{"integrity":"sha512-ussYVEN5esT7AtqN+ho4IK9DKtkVOMJ/XfT72R2W4TH0pvHLLE3xx+8dRElAo7nUbLL6C3hmurI3zbtT4tFj/A==","shasum":"ca38b87a0495ea310da928fa3037d7d099510aad","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.3.1.tgz","fileCount":12,"unpackedSize":99528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAbPsCRA9TVsSAnZWagAAzH8QAJBMm23tdoE1yuA5Syhb\nneerkKw/bZkKy7e2AMaE7pG072JPiBK2caaZP4q/iqWeuh8pn00NPyyFu31u\nTogn2TQctYH0wvHWm4/pDhAmT1hGWHApKdvB4ZJ+KPGcfxzFIHYBvNlkuRpf\noCDef9/huHcbUr8QXdlCBmbvy8FK26Hzg6Upyp1GKeFike6o3a1UCgQUVytb\nICt0ZiM0ejuqR1PEhhvGVKX7XiXhSq9vOMPS7bnDKncOJ63YtYQ4Y7e5ulno\n4lDCvAp5a+WDzO9H6Y7KbxtxAiI1SHJa5q29WUDQzHbputn7F4IC91AjYMrr\nVenLJIXp35PSTc6rZOlTTPPFjJHtSfc78MFgd/UWA8Z8UGYAViqHWkYukMIc\nedSS7xQvXhwSxHbE7pmkAEL/t0jpLje6k7yMGB0Pzqeo8D9MUW8zZYkZ9NO/\n2R1kQL1N0R8E/TVPY4KGJiCKdeNSLfmyC5aC7rhZ+SED1+Fsj3kjSS3yboU1\nPWpzSTdztfQQRAgBaNBw2FVV13TAKhDjMEoMP0FcJQPCaBbBUjw1M+ookrQ5\nP55UwJn5qPwaeLODDGFBdUHFV/JHIpKkIpzABwQ8nx13cGtUV9YvYPBckHPd\nswkOnyWAsk3vcvjdlf8q9B+9MSv5+tSfV39XZylHec2bUn/RMwILRPOiwLpP\nLmXV\r\n=Vs1a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID6VGdGvQZwPEIsjzW/ic/m4ZlFyPnpbdWUTx/t7ocARAiArVfxM/lScuLo6XCJaYfMzVhbmkbSTcFTmJs9gU87rdQ=="}]},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.3.1_1627501548713_0.44311267052713066"},"_hasShrinkwrap":false},"0.4.0":{"name":"@deboxsoft/cron-jobs","version":"0.4.0","repository":{"type":"git","url":"https://github.com/deboxsoft/cron-jobs"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"types":"types","type":"module","exports":{".":{"import":"./index.js","require":"./index.cjs"}},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.{ts,tsx}":["eslint --fix"]},"publishConfig":{"access":"public"},"dependencies":{"bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","fastq":"^1.11.0","human-interval":"^2.0.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@deboxsoft/module-core":"^2.4.7","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^8.0.3","@nurdiansyah/rollup":"^1.8.0","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.16.2","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^5.15.0","@typescript-eslint/parser":"^5.15.0","ava":"^3.15.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","eslint":"^8.11.0","eslint-plugin-prettier":"^4.0.0","husky":"^4.3.0","hygen":"^6.0.4","lint-staged":"^10.5.1","npm-run-all":"^4.1.5","prettier":"^2.6.0","rimraf":"^3.0.2","rollup":"2.70.1","ts-node":"^9.1.1","tslib":"^2.1.0","typescript":"^4.1.3"},"ava":{"files":["tests/**/*.test.+(ts|js)"],"extensions":["ts","js"],"require":["ts-node/register"]},"peerDependencies":{"@deboxsoft/module-core":"2.x || 3.x || 4.x"},"scripts":{"dev":"pnpm build:rollup --watch","build":"pnpm run-p build:rollup build:tsc","build:rollup":"pnpm rollup -c","build:tsc":"pnpm clean && pnpm tsc","clean":"rimraf types","lint":"pnpm run-p lint:eslint","lint:eslint":"pnpm eslint --fix 'src/**/*.ts'","release":"run-s lint build test && pnpm publish","release:dev":"run-s build version:dev publish:dev","version:dev":"pnpm version prerelease","publish:dev":"pnpm publish --tag canary","test":"pnpm ava"},"_id":"@deboxsoft/cron-jobs@0.4.0","_integrity":"sha512-T8+SP/tdYPRyACzfFCzi962ma0Mrmz1rJh5W+uPjCLg7+XPOeHHqvaaFggih5i6snjJby0o41A+djqfzagyRQg==","_resolved":"/Users/nurdiansyah/workspace/git-repo/debox-libs/cron-jobs/deboxsoft-cron-jobs-0.4.0.tgz","_from":"file:deboxsoft-cron-jobs-0.4.0.tgz","_nodeVersion":"14.17.1","_npmVersion":"7.19.1","dist":{"integrity":"sha512-T8+SP/tdYPRyACzfFCzi962ma0Mrmz1rJh5W+uPjCLg7+XPOeHHqvaaFggih5i6snjJby0o41A+djqfzagyRQg==","shasum":"b0f65dc3dd43f7792ec166c2385a71bd4e6f4c74","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.4.0.tgz","fileCount":14,"unpackedSize":1376660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiNyidACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmreuQ//cLnmsEvzpx/7FlyIUOGBuduYRIWpYOoqIBdLb8jWn6R4soU4\r\ngGVE1CR+Bqv8QEW9lKz3HU3xIUFSZ+vvsvoTRwHbBoWKyU3R6iHz993VRExw\r\nNdBbPOUbcgyYF9kISkW0YycrXIuDUMZpo6xd6bCXAkkbBeAPsli2WeAzFHU3\r\niHFKfB4vlVJVlRBM6F1x+CUcEVvRgUEDGSGOj64tWJzraQTNPmvOfnIT5Zfd\r\nCfiFIJATJ4THumxjL9+TR0PA9Ex6Yq14VxRe0RXLygkTVJtqBHYTMQq2Pn3A\r\nOS5yzoHL0rY8WRj0THgv/1D3+vifNYGX/nheKEfOChQTpsRH9ZsQyzBDHb3P\r\nPaTTI1CTJCUSNJy7zKJ/q+GxaXUaZGcgtCbgkHC6ZcaDsqUClp7P3aDWnrQd\r\nUUNsgyQwSfWUa+a9cJVZKcpleePV3L54Cqd3vX1UsK3AnLszFPwcJfJsJ09o\r\n4AfaU07cuW8jGch0HPiSlge2jh5c35f8g4ym9oE5LumOM4IWlYgQcTGofmuf\r\nKyvenGYiDnLxRlDY5Cy+IHoTc/GRlaJIBTFgPfXLgUPP5Bs98C5sQ23YUe/D\r\nXmG9H3oaVrp6B18hU3Q3HS/paMsZV5+lEWAhGZcFjSeftsaO5dYFf6+bdH1v\r\nphlGY27SIXaRUvRHYLhw80LjCrqDoE8+Duo=\r\n=oaH7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEaLHHtuyKsvoidg1AeCo6hulappa7XWZEbwTxkoigHfAiBSjsOsLFa8ANCuBOw4lp6prT2ZSenYL0V6sFy9Q2/Fzg=="}]},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.4.0_1647782044892_0.4513573556140513"},"_hasShrinkwrap":false},"0.4.1":{"name":"@deboxsoft/cron-jobs","version":"0.4.1","repository":{"type":"git","url":"https://github.com/deboxsoft/cron-jobs"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"types":"types","type":"module","exports":{".":{"import":"./index.js","require":"./index.cjs"}},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.{ts,tsx}":["eslint --fix"]},"publishConfig":{"access":"public"},"dependencies":{"bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","fastq":"^1.11.0","human-interval":"^2.0.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@deboxsoft/module-core":"^2.4.7","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^8.0.3","@nurdiansyah/rollup":"^1.8.0","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.16.2","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^5.15.0","@typescript-eslint/parser":"^5.15.0","ava":"^4.1.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","eslint":"^8.11.0","eslint-plugin-prettier":"^4.0.0","husky":"^4.3.0","hygen":"^6.0.4","lint-staged":"^10.5.1","npm-run-all":"^4.1.5","prettier":"^2.6.0","rimraf":"^3.0.2","rollup":"2.70.1","ts-node":"^9.1.1","tslib":"^2.1.0","typescript":"^4.1.3"},"ava":{"files":["tests/**/*.test.+(ts|js)"],"extensions":["ts","js"],"require":["ts-node/register"]},"peerDependencies":{"@deboxsoft/module-core":"2.x || 3.x || 4.x"},"scripts":{"dev":"pnpm build:rollup --watch","build":"pnpm run-p build:rollup build:tsc","build:rollup":"pnpm rollup -c","build:tsc":"pnpm clean && pnpm tsc","clean":"rimraf types","lint":"pnpm run-p lint:eslint","lint:eslint":"pnpm eslint --fix 'src/**/*.ts'","release":"run-s lint build test && pnpm publish","release:dev":"run-s build version:dev publish:dev","version:dev":"pnpm version prerelease","publish:dev":"pnpm publish --tag canary","test":"pnpm ava"},"_id":"@deboxsoft/cron-jobs@0.4.1","_integrity":"sha512-FnR+kjaMAI4VivkBaggEYu3AR0tYCJsGVcX9EItpiSYB3sbW0dXK2x4rpff2wM+9IFWLKxjm7wtvrPLUh0stuQ==","_resolved":"/Users/nurdiansyah/workspace/git-repo/debox-libs/cron-jobs/deboxsoft-cron-jobs-0.4.1.tgz","_from":"file:deboxsoft-cron-jobs-0.4.1.tgz","_nodeVersion":"14.17.1","_npmVersion":"7.19.1","dist":{"integrity":"sha512-FnR+kjaMAI4VivkBaggEYu3AR0tYCJsGVcX9EItpiSYB3sbW0dXK2x4rpff2wM+9IFWLKxjm7wtvrPLUh0stuQ==","shasum":"950483c6cd21d9ab7f66a0e42153eff92fad60ae","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.4.1.tgz","fileCount":15,"unpackedSize":1377504,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICc3Q4goHP/5lglmPboDAxU0qgDeK5Fbby6UPufD4hInAiEApWh/rwf/l1Jf/m97ESshp6clUR2Rip5rfKl5dwX3Wbc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiRW/eACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrI6BAAjtNiHjy+emVtEAsA+i1FPJFKXhEcHkS96BeayChmoeAnZlFr\r\nU/3rSREHLmatoXUwfoNYmQuFZErSAXSbRMLWYDjzvX13z7ZvJpWBGGWpC2uA\r\nxC96q1Hsz+HELKFv0pYf4DanAciF3hOUrFnj2jEhvDcuHoJ6sv4UTBvyhfhR\r\nfy3df5IKT9XWzr6k9SEkzP/lryGMqbZ03qCm9L/2T1Ork4jUpvFcdIksN+T1\r\ndVvH45V3ajTZhDYbfQophRhARhG/dWAy+BG3H4optHYm9dOr5uR5rKk7Hljk\r\n+pZ94p9mqU+cdRI55yFYrdR2UlUMOsirxd7/zMC7SRaMrdmNdXJUpv5YjKNe\r\nYpvXsXY+paK5+irJ49AfhoaIvbgWjOIzdTuGELZQUKpCwtPbXZyP0iRDYb7m\r\nJ/OV2sQZqRL+M3IOvMkIVVK+SRMhN17+nPWPZ+7tdvdJAIvrBHvvVnxUUcFI\r\nQXQScF1vYdOI8DIHMxy/TkvGToL2w6qWQAU56+6MB8SXvhCK4PfbafiCF2Rp\r\nD8BuimKFVHYHg+VPPNZ8YD9ZKczRkYrUsheRQu8fc/4gkM1Y9F0o2NzapPbe\r\nFNkC/L35rI2yHfYqasaPWRvErEDpAmEVBuo9hVdr7tGzzP33LEKNSryaL2lJ\r\nsccTKmeEKsGli8rFfQ0axzQIyzwzomWq7mc=\r\n=dNJu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.4.1_1648717790418_0.16398619940984838"},"_hasShrinkwrap":false},"0.5.0":{"name":"@deboxsoft/cron-jobs","version":"0.5.0","repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"types":"libs/index.d.ts","type":"module","exports":{".":{"import":"./libs/index.js","types":"./libs/index.d.ts"}},"publishConfig":{"access":"public"},"dependencies":{"bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","fastq":"^1.11.0","human-interval":"^2.0.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@deboxsoft/module-core":"^2.4.7","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^8.0.3","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.16.2","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^5.15.0","@typescript-eslint/parser":"^5.15.0","ava":"^4.1.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","eslint":"^8.11.0","eslint-plugin-prettier":"^4.0.0","hygen":"^6.0.4","npm-run-all":"^4.1.5","prettier":"^2.6.0","rimraf":"^3.0.2","ts-node":"^9.1.1","tslib":"^2.1.0","tsup":"^6.1.3","typescript":"^4.1.3"},"peerDependencies":{"@deboxsoft/module-core":"2.x || 3.x || 4.x"},"scripts":{"build":"tsup","format":"eslint --fix 'src/**/*.ts'","test":"ava","test:watch":"ava -w","bump":"pnpm run build && bump","publish:dev":"pnpm publish --tag dev --no-git-checks","release":"pnpm bump -c \"server-v\" -t \"server-v\" && pnpm publish","release:dev":"pnpm bump prerelease && pnpm publish:dev"},"description":"<br /> <div align=\"center\">   Cron job scheduler for <a href=\"https://nodejs.org\">Node.js</a> and JavaScript with <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a>, <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obje","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"},"homepage":"https://github.com/deboxsoft/cron-jobs#readme","_id":"@deboxsoft/cron-jobs@0.5.0","_integrity":"sha512-G50giiUo6HBYi+8za+6QrtIKWv6HjH9XybzwBQKzxtklQjQVpww5pDzJSof8mBaUWZrMrIiO2WR+JVF7kErZ9Q==","_resolved":"/private/var/folders/m8/k71kqw2j5qdcqfc64t_7dn180000gn/T/94cd421045a69a19902c0e6728e964fd/deboxsoft-cron-jobs-0.5.0.tgz","_from":"file:deboxsoft-cron-jobs-0.5.0.tgz","_nodeVersion":"16.16.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-G50giiUo6HBYi+8za+6QrtIKWv6HjH9XybzwBQKzxtklQjQVpww5pDzJSof8mBaUWZrMrIiO2WR+JVF7kErZ9Q==","shasum":"97f3a658eb8cf1c6b24a66fa7cc95f6feefce258","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.5.0.tgz","fileCount":13,"unpackedSize":50156,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtx/cFhPg4VT7BVrNGcaHt8aeC6DJHG8YeylsBbqAVtQIhAK5fRgGDfq3oOIQMgoM0JmH/j6mwgIILlpURkMMwPUto"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjDuXjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpXnw//RnSYPfnLHUelqfyJyg6tnNWcmyh+QLWjW8FvnxonugQNXhPM\r\nhzn1xXuvU/mAmb3GlLSVTqPG5unV4wHw/4CtAXT6ffPOYf96jMGPmc8200Ha\r\nApk79ccds2H4PpPH4faZ5A9RJjLgf3MEWSFxuaYs4AVgT2+msCqHJ0exsd2h\r\n4MlKhUYw8gSWaU+4bzPtoVti9nGyMm+bfle1fQxVsTOh7tuWe/vplwfOhKZG\r\nEhquDo1pvQUMvJBg2E0QIqHmuZYNBuDLi7jj/yvZ6qPCF0SusjTlvQSdtzxw\r\nVWrhPruvAzC6asTVLpu+CDdTahra1+PlLNKtdcR328kvxUg+Daf5A3RUqJIt\r\nSMaCO6oG17R2eW3sb/CQCOx2zAIgzWjxQQmvJRyB7sps+qIO+agAuBQnaCPJ\r\nODT7iscY14iTSju6kIEscHJNilUkOLxdf1dNUI6n+7WRBT3dX7oy2f4CO5uN\r\nANlMJS7+dAGq1v5GmC+gxCSaffxH+2nRjLWiSqzgWXNkqmCwbVknVO+bT5pW\r\nDFhsGTyOhJ5cABt1cPJ4h1FyeP2JdQGEWnCxBn3YJxYnRof+pi5WsjdurGHj\r\nDFlmbQfC9lpgYPVF9Yd2oLpeNkQelGxhLxJEzqfyuF+yQitsfi9DcvcYDzRW\r\nZMO8Jke4qUNw2EL/bt6D6KAYkwYrKnvt3vA=\r\n=etQ/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.5.0_1661920739371_0.16443329181755262"},"_hasShrinkwrap":false},"0.5.1":{"name":"@deboxsoft/cron-jobs","version":"0.5.1","repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"types":"libs/index.d.ts","type":"module","exports":{".":{"import":"./libs/index.js","types":"./libs/index.d.ts"}},"publishConfig":{"access":"public"},"dependencies":{"bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","fastq":"^1.11.0","human-interval":"^2.0.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@deboxsoft/module-core":"^2.4.7","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^8.0.3","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.16.2","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^5.15.0","@typescript-eslint/parser":"^5.15.0","ava":"^4.1.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","eslint":"^8.11.0","eslint-plugin-prettier":"^4.0.0","hygen":"^6.0.4","npm-run-all":"^4.1.5","prettier":"^2.6.0","rimraf":"^3.0.2","ts-node":"^9.1.1","tslib":"^2.1.0","tsup":"^6.1.3","typescript":"^4.1.3"},"peerDependencies":{"@deboxsoft/module-core":"2.x || 3.x || 4.x"},"scripts":{"build":"tsup","format":"eslint --fix 'src/**/*.ts'","test":"ava","test:watch":"ava -w","bump":"pnpm run build && bump","publish:dev":"pnpm publish --tag dev --no-git-checks","release":"pnpm bump -c \"server-v\" -t \"server-v\" && pnpm publish","release:dev":"pnpm bump prerelease && pnpm publish:dev"},"description":"<br /> <div align=\"center\">   Cron job scheduler for <a href=\"https://nodejs.org\">Node.js</a> and JavaScript with <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a>, <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obje","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"},"homepage":"https://github.com/deboxsoft/cron-jobs#readme","_id":"@deboxsoft/cron-jobs@0.5.1","_integrity":"sha512-FoNyHiJBHIuGlOhD/cdKjKCrPO+EatEAS+vtHZIYSrbeMg2Daa0muu+gwY6La6F43PeOlkggJGC2+z0QDvHHGQ==","_resolved":"/private/var/folders/m8/k71kqw2j5qdcqfc64t_7dn180000gn/T/b6d74c0458cd97da19c47907b5b5a8d6/deboxsoft-cron-jobs-0.5.1.tgz","_from":"file:deboxsoft-cron-jobs-0.5.1.tgz","_nodeVersion":"16.16.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-FoNyHiJBHIuGlOhD/cdKjKCrPO+EatEAS+vtHZIYSrbeMg2Daa0muu+gwY6La6F43PeOlkggJGC2+z0QDvHHGQ==","shasum":"d62bb9439dec3fde5134cc99d4329097d93651f5","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.5.1.tgz","fileCount":5,"unpackedSize":125015,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6WcQU7X38xa8ntoOgTL6/WwhgnQEMyVYVGPUN+IAFkQIhAOH7iDggAq/fj/Eqw2Km7ELdz6jIVCzBl2VKkXsvdf9+"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjDuqdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr/QxAAnsa4wZEBDd0rO6pmSFPu4vFoCrUMdUWog+lHMiUogMDCp8Qj\r\n93zSjPpi4bN3XkiUj8+BpOPx1u6JV1anWsUMq89qXB8JwhMc/h4vHSEvdI1u\r\nW3oF5l0nxLlnBA2KWPddZwuUBrN4HkatdPtzd63mcqYhFpvvTw/o7Ka6WwYe\r\nACO8K5M4nfHWc0XmjtYclmFT9GWUXBiq9kuHv+ZVgmc2OnSeJ3XzyFCCpUyG\r\ns1ZsaXlvXJp3lyY/xiH37kFr/PsKQe/LRTlbp8sRMDLDjP5AGVB6RAIzexel\r\nHqRuhPxXKVyi0gWJZ8YegT8v9BuXpRwU+qLR5w8Dyg+TXx82spwiV4AGunDh\r\nJf0z5crYPlel1BY7W5D6pEQFsCdg02inYi7hytAPpzJnx07yRZuMuTHDhY6d\r\nsuA5K6O+YIVshr0pS8sTLm9GX0Zi2/a/XmXlhMj3h8gifbe05j58beZ1h3HK\r\nZ5+j7NeKPNZD2eOPrjNYtzNxRDlhHiPx4+OcoPCycBjxyFjnLVoXpsqXoO4b\r\neyXX66W+9w//tY9PvIPFZziTdRZwRhWZmpXsuJTsJUuvrH50S/FyOtuRJhBA\r\nGJzHTJAvD5AyW/fKMjQejFrABcD2aeEL/8sEackBRWXPUqHQB8kuCMkBr//D\r\nCLGoqnbchNe127e4BhUUYo6CT3sGpbFjG5U=\r\n=ACKb\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.5.1_1661921948926_0.9850399761606565"},"_hasShrinkwrap":false},"0.5.2":{"name":"@deboxsoft/cron-jobs","version":"0.5.2","repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"types":"libs/index.d.ts","type":"module","exports":{".":{"import":"./libs/index.js","types":"./libs/index.d.ts"}},"publishConfig":{"access":"public"},"dependencies":{"bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","fastq":"^1.11.0","human-interval":"^2.0.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@deboxsoft/module-core":"^2.6.24","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^8.0.3","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.16.2","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^5.15.0","@typescript-eslint/parser":"^5.15.0","ava":"^4.1.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","eslint":"^8.11.0","eslint-plugin-prettier":"^4.0.0","hygen":"^6.0.4","npm-run-all":"^4.1.5","prettier":"^2.6.0","rimraf":"^3.0.2","ts-node":"^9.1.1","tslib":"^2.1.0","tsup":"^6.1.3","typescript":"^4.1.3"},"peerDependencies":{"@deboxsoft/module-core":"2.x || 3.x || 4.x"},"scripts":{"build":"tsup","format":"eslint --fix 'src/**/*.ts'","test":"ava","test:watch":"ava -w","bump":"pnpm run build && bump","publish:dev":"pnpm publish --tag dev --no-git-checks","release":"pnpm bump -c \"server-v\" -t \"server-v\" && pnpm publish","release:dev":"pnpm bump prerelease && pnpm publish:dev"},"description":"<br /> <div align=\"center\">   Cron job scheduler for <a href=\"https://nodejs.org\">Node.js</a> and JavaScript with <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a>, <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obje","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"},"homepage":"https://github.com/deboxsoft/cron-jobs#readme","_id":"@deboxsoft/cron-jobs@0.5.2","_integrity":"sha512-6YlS91GoQU4eVtxUlIUVB3YPioWVnw1iLDL9im7zgKOR0Llz6v989ht+XNvHNNkAX3k0OGI/TWAtXyKm1U2N5A==","_resolved":"/private/var/folders/m8/k71kqw2j5qdcqfc64t_7dn180000gn/T/4d23da62b8b6008f593849bc0e2b3265/deboxsoft-cron-jobs-0.5.2.tgz","_from":"file:deboxsoft-cron-jobs-0.5.2.tgz","_nodeVersion":"16.16.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-6YlS91GoQU4eVtxUlIUVB3YPioWVnw1iLDL9im7zgKOR0Llz6v989ht+XNvHNNkAX3k0OGI/TWAtXyKm1U2N5A==","shasum":"12b4d3c78c0bb82182e153a7d8d6975f7a59f21a","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.5.2.tgz","fileCount":5,"unpackedSize":125012,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/mGK0b9LVFGmk/mrAoo5tKRXH0lLqi7ENH9jgceoRVAIgKZt7NKMLb53D+e8Vwvk0vj+b7K9YoL5NxTCsg8EpoAQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjDuvBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrAVQ//cmlALGg3ujjz4V2NHdjNKhCytrAfTIwKNryXHQDcAcGWBWfe\r\ni8eRrFYVdJmiw43/KVl54UBX7jPhkPyQOlNy2K/L2+V2fhWZYyJRXGL3w/Ji\r\nkaI1pU9fLreRpz8byJBtrlFm6YLNNgUsrjmdaDW0iFZ+izWUOjzYtEc6PxHq\r\n/1yCns6AFnuo/DWKL+hj46oDwGGngK3XoSq1f1oxkyOyXLwSyIYMeRMLNep7\r\ni0PvG6BK8uptrsvvJ7P+Le1kPpVvrdex44ot9yjEuFS8NT3fPyTuYuZxP9Hm\r\nl2qgBxbEv0PTqmIOeIQdMxaxDXg9clpjHc/b25ibnOP8rwFKaLs2M7VBT1a8\r\nnd2pKNuERNZk+3SyQxFD2dihf01+68Mv6CJ1csbiPridnyaVOqTlTb64H00L\r\nk7wOiE51c3+KxLXxoeHXTXCQwewEtsTVmULfvQHP3jO/12pynzbnh8R+Y67E\r\nRWH6+E7oJgNVqfOolifJ6y7pDTUqxcIO3XN/QXSr7CHwxGiG1vssSRkzRwz3\r\n1T0ePdpEv/5XTF5QqxlkfQb6M7b1x2osvpwuh7MJQSlZygwR/2hxB5Q7fSDS\r\nxwemjmJA6Wf+mfk6GgVjJCUpLxY6CkV/jBbWC0jB3591Vm8BF9ScoRgnYk7M\r\nqfEkhBDMs5Kk5bLF/IUjHj6Ua/rfc2mnuag=\r\n=Bsjr\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.5.2_1661922241426_0.07143371541577781"},"_hasShrinkwrap":false},"0.5.3":{"name":"@deboxsoft/cron-jobs","version":"0.5.3","repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"types":"libs/index.d.ts","type":"module","exports":{".":{"import":"./libs/index.js","types":"./libs/index.d.ts"}},"publishConfig":{"access":"public"},"dependencies":{"bthreads":"^0.5.1","combine-errors":"^3.0.3","cron-validate":"^1.4.2","fastq":"^1.11.0","human-interval":"^2.0.1","ms":"^2.1.3","p-wait-for":"^3.2.0"},"devDependencies":{"@babel/core":"^7.12.0","@babel/preset-env":"^7.12.0","@deboxsoft/module-core":"^2.6.24","@nurdiansyah/cpx":"1.5.0","@nurdiansyah/eslint-config-devel":"^8.0.3","@sinonjs/fake-timers":"^7.0.2","@testing-library/jest-dom":"^5.16.2","@types/nanoid":"^2.1.0","@types/nconf":"^0.10.0","@types/node":"~14.14.19","@typescript-eslint/eslint-plugin":"^5.15.0","@typescript-eslint/parser":"^5.15.0","ava":"^4.1.0","chalk":"4.1.0","cross-env":"^5.2.1","delay":"^5.0.0","eslint":"^8.11.0","eslint-plugin-prettier":"^4.0.0","hygen":"^6.0.4","npm-run-all":"^4.1.5","prettier":"^2.6.0","rimraf":"^3.0.2","ts-node":"^9.1.1","tslib":"^2.1.0","tsup":"^6.1.3","typescript":"^4.1.3"},"peerDependencies":{"@deboxsoft/module-core":"2.x || 3.x || 4.x"},"scripts":{"build":"tsup","format":"eslint --fix 'src/**/*.ts'","test":"ava","test:watch":"ava -w","bump":"pnpm run build && bump","publish:dev":"pnpm publish --tag dev --no-git-checks","release":"pnpm bump -c \"server-v\" -t \"server-v\" && pnpm publish","release:dev":"pnpm bump prerelease && pnpm publish:dev"},"description":"<br /> <div align=\"center\">   Cron job scheduler for <a href=\"https://nodejs.org\">Node.js</a> and JavaScript with <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a>, <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obje","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"},"homepage":"https://github.com/deboxsoft/cron-jobs#readme","_id":"@deboxsoft/cron-jobs@0.5.3","_integrity":"sha512-t/xMfzCGstosYCr9Nw15EP++KQ2SfVRk/g6ew5Y+HGhWWBYTeYaRr+J28wzH16BZWxxHUgyOv5chWHOyvQSrxg==","_resolved":"/private/var/folders/m8/k71kqw2j5qdcqfc64t_7dn180000gn/T/6a49366d82f467b5e8a50fdaa216079b/deboxsoft-cron-jobs-0.5.3.tgz","_from":"file:deboxsoft-cron-jobs-0.5.3.tgz","_nodeVersion":"16.16.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-t/xMfzCGstosYCr9Nw15EP++KQ2SfVRk/g6ew5Y+HGhWWBYTeYaRr+J28wzH16BZWxxHUgyOv5chWHOyvQSrxg==","shasum":"b8099566bdb95c3f52da9db588d7a84fe49e2bf0","tarball":"https://registry.npmjs.org/@deboxsoft/cron-jobs/-/cron-jobs-0.5.3.tgz","fileCount":5,"unpackedSize":125012,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE2uUCgM5mmCXR7dszzXIqA/reXsBozfc5NJ9WlccPWvAiB6DQkP/CsgcCMuwQSnj5X2rDMWN9u+KfRLFoz6lVMFZg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjDuvPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpezA/+POJPZMex+KbdjXWH/31nKF/dy1sY6MiGxgs3ebQJX03M3Qhj\r\nJbt1e+6YRVVlQcnCN9kCN6+poEg1S0fGlb/Wr12pC1hl5qzn+AXswbSXdI5J\r\n8N6s2QL14a39A4X+Q4U/oKaYbtWU8k/SR2e1iXVwrIXOWtKcxqa5sfIjkzxE\r\n/ufOoJxp5TBU+L934aQUNh0YOSovi7LTsL2P+qMlJ6g+JwNjoMOGglqVyk/9\r\nvkvKI0yYobwkqOVq8UhXSIistrqzW6pVK2UH5hvCbE7omg0b1tpry6R/wQaP\r\nk9EBDoGepfVHButBwmFz7eMR3PE4/qcN5TKxx0jbGhk44G7j3vYbkIYFUxkH\r\nSvgY/UMYRZPt05S3umJHFSJ3LfKQ+F2DrBQABeD059k9SB9kPvlaK1giGRy6\r\nJMVORNCQlvGrP8LhJl5Sy9d3YGFinUVmeuCNWRcGE9xZq7Ne5gWfFMrHH0ZK\r\nPKXElgoe4pzWr9U90FZ1q1A/iC2LpsVPnRcftXoX71hSzxMqe1fMCWNOxkR2\r\nVQLA+qioiYEzAgLWCF7MyWtWVGxU3YLCMMUYh/G07KHHZEOvj0VUgmxxNrP8\r\nqOZ4UI08tbdsrGcS0s8WkjioVg9FHh6DcebylPAwVKDRYMmSmcv8MvYnjp0D\r\nyEvffyX2MSDltrp7JiVmrSehKiC3BOhbdn4=\r\n=aXzM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"nurdiansyah","email":"deboxserver@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cron-jobs_0.5.3_1661922255389_0.6788730261115097"},"_hasShrinkwrap":false}},"time":{"created":"2021-02-23T04:17:59.275Z","0.0.1-0":"2021-02-23T04:17:59.655Z","modified":"2022-08-31T05:04:15.666Z","0.0.1-1":"2021-02-23T04:32:00.908Z","0.0.1-2":"2021-02-23T04:38:22.799Z","0.1.0":"2021-03-14T23:43:04.406Z","0.2.0":"2021-04-04T10:20:38.950Z","0.3.0":"2021-07-28T19:13:13.839Z","0.3.1":"2021-07-28T19:45:48.878Z","0.4.0":"2022-03-20T13:14:05.069Z","0.4.1":"2022-03-31T09:09:50.610Z","0.5.0":"2022-08-31T04:38:59.631Z","0.5.1":"2022-08-31T04:59:09.180Z","0.5.2":"2022-08-31T05:04:01.615Z","0.5.3":"2022-08-31T05:04:15.591Z"},"maintainers":[{"name":"nurdiansyah","email":"deboxserver@gmail.com"}],"repository":{"type":"git","url":"git+https://github.com/deboxsoft/cron-jobs.git"},"license":"./LICENSE","readme":"<br />\n<div align=\"center\">\n  Cron job scheduler for <a href=\"https://nodejs.org\">Node.js</a> and JavaScript with <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a>, <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date\">dates</a>, <a href=\"https://github.com/vercel/ms\">ms</a>, <a href=\"https://github.com/cronJobsjs/later\">later</a>, and <a href=\"https://github.com/agenda/human-interval\">human-friendly</a> support.\n</div>\n<hr />\n<div align=\"center\">\n  Works in Node v10+ and browsers (thanks to <a href=\"https://github.com/chjj/bthreads\">bthreads</a> polyfill), uses <a href=\"https://nodejs.org/api/worker_threads.html\">worker threads</a> (Node.js) and <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers\">web workers</a> (browsers) to spawn sandboxed processes, and supports <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function\">async/await</a>, <a href=\"https://github.com/sindresorhus/p-retry\">retries</a>, <a href=\"https://github.com/sindresorhus/p-throttle\">throttling</a>, <a href=\"#concurrency\">concurrency</a>, and <a href=\"#cancellation-retries-stalled-jobs-and-graceful-reloading\">cancelable jobs with graceful shutdown</a>.  Simple, fast, and lightweight.\n</div>\n<hr />\n\n\n## Table of Contents\n\n* [Foreword](#foreword)\n* [Install](#install)\n* [Usage and Examples](#usage-and-examples)\n  * [Node](#node)\n  * [Browser](#browser)\n* [Node.js Email Queue Job Scheduling Example](#nodejs-email-queue-job-scheduling-example)\n* [Instance Options](#instance-options)\n* [Job Options](#job-options)\n* [Job Interval and Timeout Values](#job-interval-and-timeout-values)\n* [Listening for events](#listening-for-events)\n* [Custom error handling](#custom-error-handling)\n* [Cancellation, Retries, Stalled Jobs, and Graceful Reloading](#cancellation-retries-stalled-jobs-and-graceful-reloading)\n* [Interval, Timeout, Date, and Cron Validation](#interval-timeout-date-and-cron-validation)\n* [Writing jobs with Promises and async-await](#writing-jobs-with-promises-and-async-await)\n* [Callbacks, Done, and Completion States](#callbacks-done-and-completion-states)\n* [Long-running jobs](#long-running-jobs)\n* [Complex timeouts and intervals](#complex-timeouts-and-intervals)\n* [Custom Worker Options](#custom-worker-options)\n* [Using functions for jobs](#using-functions-for-jobs)\n* [Concurrency](#concurrency)\n\n\n## Foreword\n\n\nPrevious to creating this, I was relying heavily on [bull][]; having created [@ladjs/bull][] – but due to core issues (and being Redis-backed) it was not the best tool for the job.  [Bull][] might have been okay if the core issues were fixed, however since it uses [Redis][] it should not be used for a job queue.  From my experience, [Redis][] should only be used for caching and session storage purposes (e.g. CDN or managing user log in state in your application).  As of the time of this writing, it has been months and the core bugs with Bull are still unresolved; as more people are continuing to reproduce and comment on the known issues.\n\nSince [workers][] are now readily available in LTS versions of Node, I thought it would be a great time to implement them in a job scheduler environment.  Additionally, my research and development of a better anti-spam and anti-phishing classifier with [Spam Scanner][spam-scanner] gave me some necessary insight to using [workers][].\n\nCronJobs was created to give you fine-grained control with simplicity, and has built-in support for workers, sandboxed processes, graceful reloading, cron jobs, dates, human-friendly time representations, and much more.  We recommend you to query a persistent database in your jobs, to prevent specific operations from running more than once.  CronJobs does not force you to use an additional database layer of [Redis][] or [MongoDB][] to manage job state.  In doing so, you should manage boolean job states yourself using queries.  For instance, if you have to send a welcome email to users, only send a welcome email to users that do not have a Date value set yet for `welcome_email_sent_at`.\n\n\n## Install\n\n[npm][]:\n\n```sh\nnpm install @deboxsoft/cron-jobs\n```\n\n[yarn][]:\n\n```sh\nyarn add @deboxsoft/cron-jobs\n```\n\n\n## Usage and Examples\n\nThe example below assumes that you have a directory `jobs` in the root of the directory from which you run this example.  For example, if the example below is at `/path/to/script.js`, then `/path/to/jobs/` must also exist as a directory.  If you wish to disable this feature, then pass `root: false` as an option.\n\nInside this `jobs` directory are individual scripts which are run using [Workers][] per optional timeouts, and additionally, an optional interval or cron expression.  The example below contains comments, which help to clarify how this works.\n\nThe option `jobs` passed to a new instance of `CronJobs` (as shown below) is an Array.  It contains values which can either be a String (name of a job in the `jobs` directory, which is run on boot) OR it can be an Object with `name`, `path`, `timeout`, and `interval` properties.  If you do not supply a `path`, then the path is created using the root directory (defaults to `jobs`) in combination with the `name`.  If you do not supply values for `timeout` and/nor `interval`, then these values are defaulted to `0` (which is the default for both, see [index.js](src/index.ts) for more insight into configurable default options).\n\nWe have also documented all [Instance Options](#instance-options) and [Job Options](#job-options) in this README below.  Be sure to read those sections so you have a complete understanding of how CronJobs works.\n\n### Node\n\nSince we use [bthreads][], Node v10+ is supported. For versions prior to Node v11.7.0, a ponyfill is provided for [workers][] that uses `child_process`.  For versions greater than or equal to Node v11.7.0, it uses [workers][] directly.  You can also pass `--experimental-worker` flag for older versions to use `worker_threads` (instead of the `child_process` polyfill).  See the official Node.js documentation for more information.\n\n> **NOTE:** If you are using Node versions prior to Node v11.7.0, then in your worker files – you will need to use [bthreads][] instead of [workers][].  For example, you will `const thread = require('bthreads');` at the top of your file, instead of requiring `worker_threads`.  This will also require you to install `bthreads` in your project with `npm install bthreads` or `yarn add bthreads`.\n\n```js\nconst path = require('path');\n\n// optional\nconst ms = require('ms');\nconst dayjs = require('dayjs');\nconst Graceful = require('@ladjs/graceful');\nconst Cabin = require('cabin');\n\n// required\nconst CronJobs = require('@deboxsoft/cron-jobs');\n\n//\n// NOTE: see the \"Instance Options\" section below in this README\n// for the complete list of options and their defaults\n//\nconst cronJobs = new CronJobs({\n  //\n  // NOTE: by default the `logger` is set to `console`\n  // however we recommend you to use CabinJS as it\n  // will automatically add application and worker metadata\n  // to your log output, and also masks sensitive data for you\n  // <https://cabinjs.com>\n  //\n  logger: new Cabin(),\n\n  //\n  // NOTE: instead of passing this Array as an option\n  // you can create a `./jobs/index.js` file, exporting\n  // this exact same array as `module.exports = [ ... ]`\n  // doing so will allow you to keep your job configuration and the jobs\n  // themselves all in the same folder and very organized\n  //\n  // See the \"Job Options\" section below in this README\n  // for the complete list of job options and configurations\n  //\n  jobs: [\n    // runs `./jobs/foo.js` on start\n    'foo',\n\n    // runs `./jobs/foo-bar.js` on start\n    {\n      name: 'foo-bar'\n    },\n\n    // runs `./jobs/some-other-path.js` on start\n    {\n      name: 'beep',\n      path: path.join(__dirname, 'jobs', 'some-other-path')\n    },\n\n    // runs `./jobs/worker-1.js` on the last day of the month\n    {\n      name: 'worker-1',\n      interval: 'on the last day of the month'\n    },\n\n    // runs `./jobs/worker-2.js` every other day\n    {\n      name: 'worker-2',\n      interval: 'every 2 days'\n    },\n\n    // runs `./jobs/worker-3.js` at 10:15am and 5:15pm every day except on Tuesday\n    {\n      name: 'worker-3',\n      interval: 'at 10:15 am also at 5:15pm except on Tuesday'\n    },\n\n    // runs `./jobs/worker-4.js` at 10:15am every weekday\n    {\n      name: 'worker-4',\n      cron: '15 10 ? * *'\n    },\n\n    // runs `./jobs/worker-5.js` on after 10 minutes have elapsed\n    {\n      name: 'worker-5',\n      timeout: '10m'\n    },\n\n    // runs `./jobs/worker-6.js` after 1 minute and every 5 minutes thereafter\n    {\n      name: 'worker-6',\n      timeout: '1m',\n      interval: '5m'\n      // this is unnecessary but shows you can pass a Number (ms)\n      // interval: ms('5m')\n    },\n\n    // runs `./jobs/worker-7.js` after 3 days and 4 hours\n    {\n      name: 'worker-7',\n      // this example uses `human-interval` parsing\n      timeout: '3 days and 4 hours'\n    },\n\n    // runs `./jobs/worker-8.js` at midnight (once)\n    {\n      name: 'worker-8',\n      timeout: 'at 12:00 am'\n    },\n\n    // runs `./jobs/worker-9.js` every day at midnight\n    {\n      name: 'worker-9',\n      interval: 'at 12:00 am'\n    },\n\n    // runs `./jobs/worker-10.js` at midnight on the 1st of every month\n    {\n      name: 'worker-10',\n      cron: '0 0 1 * *'\n    },\n\n    // runs `./jobs/worker-11.js` at midnight on the last day of month\n    {\n      name: 'worker-11',\n      cron: '0 0 L * *'\n    },\n\n    // runs `./jobs/worker-12.js` at a specific Date (e.g. in 3 days)\n    {\n      name: 'worker-12',\n      // <https://github.com/iamkun/dayjs>\n      date: dayjs().add(3, 'days').toDate()\n      // you can also use momentjs\n      // <https://momentjs.com/>\n      // date: moment('1/1/20', 'M/D/YY').toDate()\n      // you can pass Date instances (if it's in the past it will not get run)\n      // date: new Date()\n    },\n\n    // runs `./jobs/worker-13.js` on start and every 2 minutes\n    {\n      name: 'worker-13',\n      interval: '2m'\n    },\n\n    // runs `./jobs/worker-14.js` on start with custom `new Worker` options (see below)\n    {\n      name: 'worker-14',\n      // <https://nodejs.org/api/worker_threads.html#worker_threads_new_worker_filename_options>\n      worker: {\n        workerData: {\n          foo: 'bar',\n          beep: 'boop'\n        }\n      }\n    },\n\n    // runs `./jobs/worker-15.js` **NOT** on start, but every 2 minutes\n    {\n      name: 'worker-15',\n      timeout: false, // <-- specify `false` here to prevent default timeout (e.g. on start)\n      interval: '2m'\n    },\n\n    // runs `./jobs/worker-16.js` on January 1st, 2022\n    // and at midnight on the 1st of every month thereafter\n    {\n      name: 'worker-16',\n      date: dayjs('1-1-2022', 'M-D-YYYY').toDate(),\n      cron: '0 0 1 * *'\n    }\n  ]\n});\n\n// handle graceful reloads, pm2 support, and events like SIGHUP, SIGINT, etc.\nconst graceful = new Graceful({ cronJobss: [cronJobs] });\ngraceful.listen();\n\n// start all jobs (this is the equivalent of reloading a crontab):\ncronJobs.start();\n\n/*\n// start only a specific job:\ncronJobs.start('foo');\n\n// stop all jobs\ncronJobs.stop();\n\n// stop only a specific job:\ncronJobs.stop('beep');\n\n// run all jobs (this does not abide by timeout/interval/cron and spawns workers immediately)\ncronJobs.run();\n\n// run a specific job (...)\ncronJobs.run('beep');\n\n// add a job array after initialization:\ncronJobs.add(['boop']);\n// this must then be started using one of the above methods\n\n// add a job after initialization:\ncronJobs.add('boop');\n// this must then be started using one of the above methods\n\n// remove a job after initialization:\ncronJobs.remove('boop');\n*/\n```\n\n### Browser\n\n> **NOTE:** Browser support is currently unstable [until this GitHub issue](https://github.com/cronJobsjs/cronJobs/issues/27) is resolved. Contributions are welcome!\n\nIf you are using CronJobs in the browser, then please reference the [Web Workers API][web-workers-api] (since it does not use Node.js [worker threads][workers]).  If the Web Workers API [is not yet available](https://caniuse.com/#feat=webworkers), then it will be [polyfilled][polyfill] accordingly.\n\n#### VanillaJS\n\nThis is the solution for you if you're just using `<script>` tags everywhere!\n\n```html\n\n<script src=\"https://unpkg.com/cronJobs\"></script>\n<script>\n  (function () {\n    function hello() {\n      console.log('hello');\n      postMessage('done');\n    }\n\n    const cronJobs = new JobWorkerManager({\n      jobs: [\n        {\n          name: 'hello',\n          path: hello,\n          interval: '5s',\n        }\n      ]\n    });\n\n    cronJobs.start();\n  })();\n</script>\n```\n\n#### Bundler\n\nAssuming you are using [browserify][], [webpack][], [rollup][], or another bundler, you can simply follow [Node](#node) usage above.\n\n\n## Node.js Email Queue Job Scheduling Example\n\nA very common use case for a Node.js job scheduler is the sending of emails.\n\nWe highly recommend you to use CronJobs in combination with the [email-templates](https://email-templates.js.org/) package (made by the same author).  Not only does it let you easily manage email templates, but it also automatically opens email previews in your browser for you during local development (using [preview-email](https://github.com/forwardemail/preview-email)).\n\nYou will then create in your application a MongoDB \"email\" collection (or SQL table) with the following properties (or SQL columns):\n\n* `template` (String) - the name of the email template\n* `message` (Object) - a Nodemailer message object\n* `locals` (Object) - an Object of locals that are passed to the template for rendering\n\nHere are optional properties/columns that you may want to also add (you'll need to implement the logic yourself as the example provided below does not include it):\n\n* `send_at` (Date) - the Date you want to send an email (should default to current `Date.now()` when record is created, and can be overridden on a per job basis)\n* `sent_at` (Date) - the Date that the email actually got sent (set by your job in CronJobs - you would use this when querying for emails to send, and specifically exclude any emails that have a `sent_at` value sent in your query)\n* `response` (Object) - the mixed Object that is returned from Nodemailer sending the message (you should store this for historical data and so you can detect bounces)\n\nIn your application, you will then need to save a new record into the collection or table (where you want to trigger an email to be queued) with values for these properties.\n\nLastly, you will need to set up CronJobs to fetch from the email collection every minute (you can configure how frequent you wish, however you may want to implement locking, by setting a `is_locked` Boolean property, and subsequently unlocking any jobs locked more than X minutes ago – but **typically this is not needed** unless you are sending thousands of emails and have a slow SMTP transport).\n\n```js\nconst CronJobs = require('cronJobs');\nconst Graceful = require('@ladjs/graceful');\nconst Cabin = require('cabin');\n\n//\n// we recommend using Cabin as it is security-focused\n// and you can easily hook in Slack webhooks and more\n// <https://cabinjs.com>\n//\nconst logger = new Cabin();\n\nconst cronJobs = new CronJobs({\n  logger,\n  jobs: [\n    {\n      // runs `./jobs/email.js` on start and every minute\n      name: 'email',\n      interval: '1m'\n    }\n  ]\n});\n```\n\n> Example contents of a file named `./jobs/email.js`:\n\n```js\nconst os = require('os');\nconst { parentPort } = require('worker_threads');\n\nconst Cabin = require('cabin');\nconst Email = require('email-templates');\nconst pMap = require('p-map');\n\n//\n// we recommend using Cabin as it is security-focused\n// and you can easily hook in Slack webhooks and more\n// <https://cabinjs.com>\n//\nconst logger = new Cabin();\n\n//\n// we recommend using email-templates to\n// create, send, and manage your emails\n// <https://email-templates.js.org>\n//\nconst email = new Email({\n  message: {\n    // set a default from that will be set on all messages\n    // (unless you specifically override it on an individual basis)\n    from: 'elon@tesla.com'\n  }\n});\n\n// store boolean if the job is cancelled\nlet isCancelled = false;\n\n// how many emails to send at once\nconst concurrency = os.cpus().length;\n\n// example database results\nconst results = [\n  {\n    template: 'welcome',\n    message: {\n      to: 'elon@spacex.com'\n    },\n    locals: {\n      foo: 'bar',\n      beep: 'boop'\n    }\n  }\n  // ...\n];\n\nasync function mapper(result) {\n  // return early if the job was already cancelled\n  if (isCancelled) return;\n  try {\n    const response = await email.send(result);\n    logger.info('sent email', { response });\n    // here is where you would write to the database that it was sent\n    return response;\n  } catch (err) {\n    // catch the error so if one email fails they all don't fail\n    logger.error(err);\n  }\n}\n\n// handle cancellation (this is a very simple example)\nif (parentPort)\n  parentPort.once('message', message => {\n    //\n    // TODO: once we can manipulate concurrency option to p-map\n    // we could make it `Number.MAX_VALUE` here to speed cancellation up\n    // <https://github.com/sindresorhus/p-map/issues/28>\n    //\n    if (message === 'cancel') isCancelled = true;\n  });\n\n(async () => {\n  // query database results for emails not sent\n  // and iterate over them with concurrency\n  await pMap(results, mapper, { concurrency });\n\n  // signal to parent that the job is done\n  if (parentPort) parentPort.postMessage('done');\n  else process.exit(0);\n})();\n```\n\n> Example contents of a file named `./emails/welcome/html.pug`:\n\n```pug\np Welcome to Tesla\nul\n  li\n    strong Foo value:\n    = ' '\n    = foo\n  li\n    strong Beep value:\n    = ' '\n    = beep\n```\n\n> Example contents of a file named `./emails/welcome/subject.pug`:\n\n```pug\n= 'Welcome to Tesla'\n```\n\n**NOTE:** We have provided a complete demo example using Express at <https://github.com/cronJobsjs/express-example>.\n\n\n## Instance Options\n\nHere is the full list of options and their defaults.  See [index.js](index.js) for more insight if necessary.\n\n| Property               | Type     | Default Value          | Description                                                                                                                                                                                                                                                                                                                                                                                                                                              |   |\n| ---------------------- | -------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - |\n| `logger`               | Object   | `console`              | This is the default logger.  **We recommend using [Cabin][cabin]** instead of using `console` as your default logger.                                                                                                                                                                                                                                                                                                                                    |   |\n| `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).                                                                                                                                                                                                                                                                                                                                |   |\n| `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` or `interval` 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`.**                                                                                                                                             |   |\n| `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`**.                                                                                                                                                                                                               |   |\n| `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.                                                                                                                                                        |   |\n| `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://breejs.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 } }`                                                                                                  |   |\n| `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.                                                                                                                                                                                                                                                                          |   |\n| `closeWorkerAfterMs`   | Number   | `0`                    | If you set a value greater than `0` here, then it will terminate workers after this specified time (in milliseconds).  **As of v6.0.0, workers now terminate after they have been signaled as \"online\" (as opposed to previous versions which did not take this into account and started the timer when jobs were initially \"run\").**  By default there is no termination done, and jobs can run for infinite periods of time.                           |   |\n| `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.                                                                                                                                                                   |   |\n| `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.                                                                                                                                                                                                                                  |   |\n| `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. |   |\n| `errorHandler`         | Function | `null`                 | Set this function to receive a callback when an error is encountered during worker execution (e.g. throws an exception) or when it exits with non-zero code (e.g. `process.exit(1)`). The callback receives two parameters `error` and `workerMetadata`. Important note, when this callback is present default error logging will not be executed.                                                                                                       |   |\n| `workerMessageHandler` | Function | `null`                 | Set this function to receive a callback when a worker sends a message through [parentPort.postMessage](https://nodejs.org/docs/latest-v14.x/api/worker_threads.html#worker_threads_port_postmessage_value_transferlist). The callback receives at least two parameters `name` (of the worker) and `message` (coming from `postMessage`), if `outputWorkerMetadata` is enabled additional metadata will be sent to this handler.                          |   |\n\n\n## Job Options\n\nSee [Interval, Timeout, Date, and Cron Validate](#interval-timeout-date-and-cron-validation) below for more insight besides this table:\n\n| Property               | Type                               | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| ---------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `name`                 | String                             | The name of the job.  This should match the base file path (e.g. `foo` if `foo.js` is located at `/path/to/jobs/foo.js`) unless `path` option is specified.  A value of `index`, `index.js`, and `index.mjs` are reserved values and cannot be used here.                                                                                                                                                                                                                                                       |\n| `path`                 | String                             | The path of the job or function used for spawning a new [Worker][workers] with.  If not specified, then it defaults to the value for `name` plus the default file extension specified under [Instance Options](#instance-options).                                                                                                                                                                                                                                                                              |\n| `timeout`              | Number, Object, String, or Boolean | Sets the duration in milliseconds before the job starts (it overrides the default inherited `timeout` as set in [Instance Options](#instance-options).  A value of `0` indicates it will start immediately.  This value can be a Number, String, or a Boolean of `false` (which indicates it will NOT inherit the default `timeout` from [Instance Options](#instance-options)).  See [Job Interval and Timeout Values](#job-interval-and-timeout-values) below for more insight into how this value is parsed. |\n| `interval`             | Number, Object, or String          | Sets the duration in milliseconds for the job to repeat itself, otherwise known as its interval (it overrides the default inherited `interval` as set in [Instance Options](#instance-options)).  A value of `0` indicates it will not repeat and there will be no interval.  If the value is greater than `0` then this value will be used as the interval.  See [Job Interval and Timeout Values](#job-interval-and-timeout-values) below for more insight into how this value is parsed.                     |\n| `date`                 | Date                               | This must be a valid JavaScript Date (we use `instance of Date` for comparison).  If this value is in the past, then it is not run when jobs are started (or run manually).  We recommend using [dayjs][] for creating this date, and then formatting it using the `toDate()` method (e.g. `dayjs().add('3, 'days').toDate()`).  You could also use [moment][] or any other JavaScript date library, as long as you convert the value to a Date instance here.                                                  |\n| `cron`                 | String                             | A cron expression to use as the job's interval, which is validated against [cron-validate][] and parsed by [later][].                                                                                                                                                                                                                                                                                                                                                                                           |\n| `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 } }`                                                                                                                                                                                                                                                                              |\n| `cronValidate`         | Object                             | Overrides the [Instance Options](#instance-options) `cronValidate` property if set.                                                                                                                                                                                                                                                                                                                                                                                                                             |\n| `closeWorkerAfterMs`   | Number                             | Overrides the [Instance Options](#instance-options) `closeWorkerAfterMs` property if set.                                                                                                                                                                                                                                                                                                                                                                                                                       |\n| `worker`               | Object                             | Overrides the [Instance Options](#instance-options) `worker` property if set.                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| `outputWorkerMetadata` | Boolean                            | Overrides the [Instance Options](#instance-options) `outputWorkerMetadata` property if set.                                                                                                                                                                                                                                                                                                                                                                                                                     |\n\n\n## Job Interval and Timeout Values\n\nThese values can include Number, Object, and String variable types:\n\n* Number values indicates the number of milliseconds for the timeout or interval\n* Object values must be a [later][] schedule object value (e.g. `later.parse.cron('15 10 * * ? *'))`)\n* String values can be either a [later][], [human-interval][], or [ms][] String values (e.g. [later][] supports Strings such as `every 5 mins`, [human-interval][] supports Strings such as `3 days and 4 hours`, and [ms][] supports Strings such as `4h` for four hours)\n\n\n## Listening for events\n\nCronJobs extends from [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter) and emits two events:\n\n* `worker created` with an argument of `name`\n* `worker deleted` with an argument of `name`\n\nIf you'd like to know when your workers are created (or deleted), you can do so through this example:\n\n```js\ncronJobs.on('worker created', (name) => {\n  console.log('worker created', name);\n  console.log(cronJobs.workers[name]);\n});\n\ncronJobs.on('worker deleted', (name) => {\n  console.log('worker deleted', name);\n  console.log(typeof cronJobs.workers[name] === 'undefined');\n});\n```\n\n\n## Custom error handling\n\nIf you'd like to override default behavior for worker error handling, provide a callback function as `errorHandler` parameter when creating a CronJobs instance.\n\nAn example use-case. If you want to call an external service to record an error (like Honeybadger, Sentry, etc.) along with logging the error internally. You can do so with:\n\n```js\nconst logger = ('../path/to/logger');\nconst errorService = ('../path/to/error-service');\n\nnew JobWorkerManager({\n  jobs: [\n    {\n      name: 'job that sometimes throws errors',\n      path: jobFunction\n    }\n  ],\n  errorHandler: (error, workerMetadata) => {\n    // workerMetadata will be populated with extended worker information only if\n    // CronJobs instance is initialized with parameter `workerMetadata: true`\n    if (workerMetadata.threadId) {\n      logger.info(`There was an error while running a worker ${workerMetadata.name} with thread ID: ${workerMetadata.threadId}`)\n    } else {\n      logger.info(`There was an error while running a worker ${workerMetadata.name}`)\n    }\n\n    logger.error(error);\n    errorService.captureException(error);\n  }\n});\n```\n\n\n## Cancellation, Retries, Stalled Jobs, and Graceful Reloading\n\nWe recommend that you listen for \"cancel\" event in your worker paths.  Doing so will allow you to handle graceful cancellation of jobs.  For example, you could use [p-cancelable][]\n\nHere's a quick example of how to do that (e.g. `./jobs/some-worker.js`):\n\n```js\n// <https://nodejs.org/api/worker_threads.html>\nconst { parentPort } = require('worker_threads');\n\n// ...\n\nfunction cancel() {\n  // do cleanup here\n  // (if you're using @ladjs/graceful, the max time this can run by default is 5s)\n\n  // send a message to the parent that we're ready to terminate\n  // (you could do `process.exit(0)` or `process.exit(1)` instead if desired\n  // but this is a bit of a cleaner approach for worker termination\n  if (parentPort) parentPort.postMessage('cancelled');\n  else process.exit(0);\n}\n\nif (parentPort)\n  parentPort.once('message', message => {\n    if (message === 'cancel') return cancel();\n  });\n```\n\nIf you'd like jobs to retry, simply wrap your usage of promises with [p-retry][].\n\nWe leave it up to you to have as much fine-grained control as you wish.\n\nSee [@ladjs/graceful][lad-graceful] for more insight into how this package works.\n\n\n## Interval, Timeout, Date, and Cron Validation\n\nIf you need help writing cron expressions, you can reference [crontab.guru](https://crontab.guru/).\n\nWe support [later][], [human-interval][], or [ms][] String values for both `timeout` and `interval`.\n\nIf you pass a `cron` property, then it is validated against [cron-validate][].\n\nYou can pass a Date as the `date` property, but you cannot combine both `date` and `timeout`.\n\nIf you do pass a Date, then it is only run if it is in the future.\n\nSee [Job Interval and Timeout Values](#job-interval-and-timeout-values) above for more insight.\n\n\n## Writing jobs with Promises and async-await\n\nIf jobs are running with Node pre-[v14.8.0](https://nodejs.org/en/blog/release/v14.8.0/), which [enables top-level async-await](https://github.com/nodejs/node/commit/62bb2e757f) support, here is the working alternative:\n\n```js\nconst { parentPort } = require('worker_threads');\n\nconst delay = require('delay');\nconst ms = require('ms');\n\n(async () => {\n  // wait for a promise to finish\n  await delay(ms('10s'));\n\n  // signal to parent that the job is done\n  if (parentPort) parentPort.postMessage('done');\n  else process.exit(0);\n})();\n```\n\n\n## Callbacks, Done, and Completion States\n\nTo close out the worker and signal that it is done, you can simply `parentPort.postMessage('done');` and/or `process.exit(0)`.\n\nWhile writing your jobs (which will run in [worker][workers] threads), you should do one of the following:\n\n* Signal to the main thread that the process has completed by sending a \"done\" message (per the example above in [Writing jobs with Promises and async-await](#writing-jobs-with-promises-and-async-await))\n* Exit the process if there is NOT an error with code `0` (e.g. `process.exit(0);`)\n* Throw an error if an error occurs (this will bubble up to the worker event error listener and terminate it)\n* Exit the process if there IS an error with code `1` (e.g. `process.exit(1)`)\n\n\n## Long-running jobs\n\nIf a job is already running, a new worker thread will not be spawned, instead `logger.error` will be invoked with an error message (no error will be thrown, don't worry).  This is to prevent bad practices from being used.  If you need something to be run more than one time, then make the job itself run the task multiple times.  This approach gives you more fine-grained control.\n\nBy default, workers run indefinitely and are not closed until they exit (e.g. via `process.exit(0)` or `process.exit(1)`, OR send to the parent port a \"close\" message, which will subsequently call `worker.close()` to close the worker thread.\n\nIf you wish to specify a maximum time (in milliseconds) that a worker can run, then pass `closeWorkerAfterMs` (Number) either as a default option when creating a `new CronJobs()` instance (e.g. `new CronJobs({ closeWorkerAfterMs: ms('10s') })`) or on a per-job configuration, e.g. `{ name: 'beep', closeWorkerAfterMs: ms('5m') }`.\n\nAs of v6.0.0 when you pass `closeWorkerAfterMs`, the timer will start once the worker is signaled as \"online\" (as opposed to previous versions which did not take this into account).\n\n\n## Complex timeouts and intervals\n\nSince we use [later][], you can pass an instance of `later.parse.recur`, `later.parse.cron`, or `later.parse.text` as the `timeout` or `interval` property values (e.g. if you need to construct something manually).\n\nYou can also use [dayjs][] to construct dates (e.g. from now or a certain date) to millisecond differences using `dayjs().diff(new Date(), 'milliseconds')`.  You would then pass that returned Number value as `timeout` or `interval` as needed.\n\n\n## Custom Worker Options\n\nYou can pass a default worker configuration object as `new CronJobs({ worker: { ... } });`.\n\nThese options are passed to the `options` argument when we internally invoke `new Worker(path, options)`.\n\nAdditionally, you can pass custom worker options on a per-job basis through a `worker` property Object on the job definition.\n\nSee [complete documentation](https://nodejs.org/api/worker_threads.html#worker_threads_new_worker_filename_options) for options (but you usually don't have to modify these).\n\n\n## Using functions for jobs\n\nIt is highly recommended to use files instead of functions. However, sometimes it is necessary to use functions.\n\nYou can pass a function to be run as a job:\n\n```js\nnew JobWorkerManager({jobs: [someFunction]});\n```\n\n(or)\n\n```js\nnew JobWorkerManager({\n  jobs: [\n    {\n      name: 'job with function',\n      path: someFunction\n    }\n  ]\n});\n```\n\nThe function will be run as if it's in its own file, therefore no variables or dependencies will be shared from the local context by default.\n\nYou should be able to pass data via `worker.workerData` (see [Custom Worker Options](#custom-worker-options)).\n\nNote that you cannot pass a built-in nor bound function.\n\n\n## Concurrency\n\nWe recommend using the following packages in your workers for handling concurrency:\n\n* <https://github.com/sindresorhus/p-all>\n* <https://github.com/sindresorhus/p-limit>\n* <https://github.com/sindresorhus/p-queue>\n* <https://github.com/sindresorhus/p-map>\n\n\n\n[ms]: https://github.com/vercel/ms\n\n[human-interval]: https://github.com/agenda/human-interval\n\n[npm]: https://www.npmjs.com/\n\n[yarn]: https://yarnpkg.com/\n\n[workers]: https://nodejs.org/api/worker_threads.html\n\n[lad]: https://lad.js.org\n\n[p-retry]: https://github.com/sindresorhus/p-retry\n\n[p-cancelable]: https://github.com/sindresorhus/p-cancelable\n\n[later]: https://breejs.github.io/later/parsers.html\n\n[cron-validate]: https://github.com/Airfooox/cron-validate\n\n[forward-email]: https://github.com/forwardemail/forwardemail.net\n\n[dayjs]: https://github.com/iamkun/dayjs\n\n[sfn-scheduler]: https://github.com/hyurl/sfn-scheduler\n\n[spam-scanner]: https://spamscanner.net\n\n[agenda]: https://github.com/agenda/agenda\n\n[node-cron]: https://github.com/node-cron/node-cron\n\n[kue]: https://github.com/Automattic/kue\n\n[@ladjs/bull]: https://github.com/ladjs/bull\n\n[bull]: https://github.com/OptimalBits/bull\n\n[redis]: https://redis.io/\n\n[mongodb]: https://www.mongodb.com/\n\n[lad-graceful]: https://github.com/ladjs/graceful\n\n[cabin]: https://cabinjs.com\n\n[moment]: https://momentjs.com\n\n[bthreads]: https://github.com/chjj/bthreads\n\n[web-workers-api]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers\n\n[polyfill]: https://github.com/chjj/bthreads/blob/master/lib/browser/polyfill.js\n\n[browserify]: https://github.com/browserify/browserify\n\n[webpack]: https://github.com/webpack/webpack\n\n[rollup]: https://github.com/rollup/rollup\n","readmeFilename":"README.md","description":"<br /> <div align=\"center\">   Cron job scheduler for <a href=\"https://nodejs.org\">Node.js</a> and JavaScript with <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a>, <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obje","homepage":"https://github.com/deboxsoft/cron-jobs#readme","bugs":{"url":"https://github.com/deboxsoft/cron-jobs/issues"}}