Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(deps): update dependency nodemon to v3.1.9 #1221

Merged
merged 1 commit into from
Jan 15, 2025

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Jan 15, 2025

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
nodemon (source) 3.1.0 -> 3.1.9 age adoption passing confidence

Release Notes

remy/nodemon (nodemon)

v3.1.9

Compare Source

Bug Fixes
  • maintain backward support for exitcrash (9c9de6e)

v3.1.8

Compare Source

Bug Fixes

v3.1.7

Compare Source

v3.1.6

Compare Source

Bug Fixes

v3.1.5

Compare Source

v3.1.4

Compare Source

v3.1.3

Compare Source

Bug Fixes

v3.1.2

Compare Source

v3.1.1

Compare Source

Bug Fixes

Configuration

📅 Schedule: Branch creation - "* 0-4 * * 3" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

Copy link

[puLL-Merge] - remy/nodemon@v3.1.0..v3.1.9

Diff
diff --git .github/workflows/node.js.yml .github/workflows/node.js.yml
index 7629d907..5af7f9e1 100644
--- .github/workflows/node.js.yml
+++ .github/workflows/node.js.yml
@@ -15,7 +15,7 @@ jobs:
 
     strategy:
       matrix:
-        node-version: [10.x, 12.x, 18.x]
+        node-version: [18.x]
         # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
 
     steps:
diff --git .github/workflows/release.yml .github/workflows/release.yml
index 07706003..c2ac4d79 100644
--- .github/workflows/release.yml
+++ .github/workflows/release.yml
@@ -19,7 +19,7 @@ jobs:
         uses: actions/setup-node@v4
         with:
           cache: npm
-          node-version: 16
+          node-version: 18
       - name: Install dependencies
         run: npm ci
       - name: Release
diff --git README.md README.md
index e1ad049a..fb645962 100644
--- README.md
+++ README.md
@@ -264,8 +264,9 @@ nodemon --signal SIGHUP server.js
 Your application can handle the signal as follows.
 
 \`\`\`js
-process.once("SIGHUP", function () {
+process.on("SIGHUP", function () {
   reloadSomeConfiguration();
+  process.kill(process.pid, "SIGTERM");
 })

@@ -292,9 +293,10 @@ nodemon sends a kill signal to your application when it sees a file update. If y
The following example will listen once for the SIGUSR2 signal (used by nodemon to restart), run the clean up process and then kill itself for nodemon to continue control:

-process.once('SIGUSR2', function () {
+// important to use `on` and not `once` as nodemon can re-send the kill signal
+process.on('SIGUSR2', function () {
  gracefulShutdown(function () {
-    process.kill(process.pid, 'SIGUSR2');
+    process.kill(process.pid, 'SIGTERM');
  });
});

@@ -372,87 +374,71 @@ Support this project by becoming a sponsor. Your logo will show up here with a l

buy instagram followers on skweezer.net today Netpositive -KasynoHEX +KasynoHEX Casinoonlineaams.com -Best Aussie casinos at aussielowdepositcasino.com Best online casinos not on GamStop in the UK -freebets.ltd.uk TheCasinoDB -Marketing -Rating of best betting sites in Australia inkedin -AU Internet Pokies -CasinoAus -AU Online Casinos -Top Australian Gambling -casino online stranieri Goread.io -We are the most advanced casino guide! Best Australian online casinos. Reviewed by Correct Casinos. -Casino utan svensk licens Do My Online Class - NoNeedToStudy.com Slotmachineweb.com Website dedicated to finding the best and safest licensed online casinos in India -CasinoWizard -Scommesseseriea.eu -Gambe Online AU -Gamble Online -Italianonlinecasino.net -nongamstopcasinos.net +nongamstopcasinos.net Scommesse777 -Twicsy -At Casinoaustraliaonline.com, we review, compare and list all the best gambling sites for Aussies.
- -Casinon utan svensk licens erbjuder generösa bonusar och kampanjer. Besök coolspins.net för att utforska säkra och pålitliga alternativ. -BestUSCasinos -TightPoker Buy Instagram Likes -Find the best casinos online. Casinot.biz lists and reviews online casinos. -btcgaming Norway's biggest and most reliable online casino portal OnlineCasinosSpelen Beoordelen van nieuwe online casino's 2023 CasinoZonderRegistratie.net - Nederlandse Top Casino's -OSLabs is a nonprofit tech accelerator devoted to furthering high-impact open source software within a collaborative community of dedicated engineers and mentors -Ilmaiset Pitkävetovihjeet -NyeCasino.me is a website that lists the newest and best online casinos in Norway +OnlineCasinoProfy is your guide to the world of gambling. Famoid is a digital marketing agency that specializes in social media services and tools. -LookSlots -Gives a fun for our users +ігрові автомати беткінг We are the leading Nearshore Technology Solutions company. We architect and engineer scalable and high-performing software solutions. -Buy real Instagram followers from Twicsy starting at only $2.97. Twicsy has been voted the best site to buy followers from the likes of US Magazine. +Buy real Instagram followers from Twicsy starting at only $2.97. Twicsy has been voted the best site to buy followers from the likes of US Magazine. SocialWick offers the best Instagram Followers in the market. If you are looking to boost your organic growth, buy Instagram followers from SocialWick Online United States Casinos -https://bestnongamstopcasinos.net Aviators Online iGaming platform with reliable and trusted reviews. -$1 deposit casino -Online Casinos Australia Looking to boost your YouTube channel? Buy YouTube subscribers with Views4You and watch your audience grow! -casinosonlineaus -Verified reviews of the most reputable Canadian online casinos at leafletcasino.com Buy Telegram Members -Najděte nejlepší online casino v České republice We review the entire iGaming industry from A to Z -Helping Swedes finding safe unlicensed casinos -free spins no deposit -I migliori casinò online dagli esperti di SitiCasinoNonAAMS -Best Australian Online Casinos in 2024 +aussiecasinoreviewer.com MEGAFAMOUS.com PopularityBazaar helps you quickly grow your social media accounts. Buy 100% real likes, followers, views, comments, and more to kickstart your online presence. Non-GamStop NonStop Casino philippinescasinos.ph -Incognito +Incognito NonGamStopBets Casinos not on GamStop -Buy real Instagram followers from Stormlikes starting at only $2.97. Stormlikes has been voted the best site to buy followers from the likes of US Magazine. UpGrow is the Best Instagram Growth Service in 2024. Get more real Instagram followers with our AI-powered growth engine to get 10x faster results. -Reviewing companies in high-risk industries like online casinos, forex brokers and crypto exchanges - Analysis of payment methods for use in the iGaming -30 Best Casinos Not on Gamstop in 2024 -Twitter Video Downloader HD Tool allows you to store tweets on your device (mobile or PC) for free. +CryptoCasinos.online +No deposit casino promo Codes 2024 - The best online Casinos websites. No deposit bonus codes, Free Spins and Promo Codes. Stake, Roobet, Jackpotcity and more. +Online casino. +Listing no deposit bonus offers from various internet sites . +Fortune Tiger +SidesMedia +Find the social proof you need to reach your audience! Boost conversions. Quickly buy Twitter Followers & more with no sign-up. Taking you to the next +Boost your social media presence effortlessly with top-quality Instagram and TikTok followers and likes. +Social Media Management and all kinds of followers +Trusted last mile route planning and route optimization +Betwinner is an online bookmaker offering sports betting, casino games, and more. +Help users to find best and cheapest site to buy Instagram Followers +At Buzzoid, you can buy Instagram followers quickly, safely, and easily with just a few clicks. Rated world's #1 IG service since 2012. +BonusBezDepozytu +Tutti i siti di scommesse non AAMS +Zamsino.com +Graming offer top-notch Instagram followers at the best prices! +kasyno online blik +Feedthebot is an informative resource with free seo tools designed to help webmasters, SEO specialists, marketers, and entrepreneurs navigate and bett +Social media service +Find the social proof you need to reach your audience! Boost conversions. Quickly buy Twitter Followers & more with no sign-up. Taking you to the next +Playfortuneforfun.com +Reviewing and comparing online casinos available to Finnish players. In addition, we publish relevant news and blog posts about the world of iGaming. +Jabka Skin +Онлайн казино та БК (ставки на спорт) в Україні +

Please note that links to the sponsors above are not direct endorsements nor affiliated with any of contributors of the nodemon project.
diff --git faq.md faq.md
index 6209ccc7..f0425825 100644
--- faq.md
+++ faq.md
@@ -353,8 +353,10 @@ Your application will likely be running the old version code if you see that mes
A common cause for this is when graceful shutdowns are doing async tasks, i.e:

-process.once('SIGUSR2', async () => {
+// ensure this is `on` and not `once`
+process.on('SIGUSR2', async () => {
  await db.disconnect()
+  process.kill(process.pid, 'SIGTERM');
})

diff --git a/index.d.ts b/index.d.ts
new file mode 100644
index 00000000..c8e4ec24
--- /dev/null
+++ index.d.ts
@@ -0,0 +1,125 @@
+import type { WatchOptions } from 'chokidar'
+
+export type NodemonEventHandler =

  • | 'start'
  • | 'crash'
  • | 'exit'
  • | 'quit'
  • | 'restart'
  • | 'config:update'
  • | 'log'
  • | 'readable'
  • | 'stdout'
  • | 'stderr';

+export type NodemonEventListener = {

  • on(event: 'start' | 'crash' | 'readable', listener: () => void): Nodemon;
  • on(event: 'log', listener: (e: NodemonEventLog) => void): Nodemon;
  • on(event: 'stdout' | 'stderr', listener: (e: string) => void): Nodemon;
  • on(event: 'restart', listener: (e?: NodemonEventRestart) => void): Nodemon;
  • on(event: 'quit', listener: (e?: NodemonEventQuit) => void): Nodemon;
  • on(event: 'exit', listener: (e?: number) => void): Nodemon;
  • on(event: 'config:update', listener: (e?: NodemonEventConfig) => void): Nodemon;
    +};

+export type Nodemon = {

  • removeAllListeners(event: NodemonEventHandler): Nodemon;
  • emit(type: NodemonEventHandler, event?: any): Nodemon;
  • reset(callback: Function): Nodemon;
  • restart(): Nodemon;
  • config: NodemonSettings;
    +} & NodemonEventListener & {
  • +} & {
  • +};

+export type NodemonEventLog = {

  • /**
    • detail: what you get with nodemon --verbose.
    • status: subprocess starting, restarting.
    • fail: is the subprocess crashing.
    • error: is a nodemon system error.
  • */
  • type: 'detail' | 'log' | 'status' | 'error' | 'fail';
  • /** the plain text message */
  • message: string;
  • /** contains the terminal escape codes to add colour, plus the "[nodemon]" prefix */
  • colour: string;
    +};

+export interface NodemonEventRestart {

  • matched?: {
  • result: string[];
  • total: number;
  • };
    +}

+export type NodemonEventQuit = 143 | 130;
+
+export type NodemonEventConfig = {

  • run: boolean;
  • system: {
  • cwd: string;
  • };
  • required: boolean;
  • dirs: string[];
  • timeout: number;
  • options: NodemonConfig;
  • lastStarted: number
  • loaded: string[]
  • load: (settings: NodemonSettings, ready: (config: NodemonEventConfig) => void) => void
  • reset: () => void
    +};

+export interface NodemonExecOptions {

  • script: string;
  • scriptPosition?: number;
  • args?: string[]
  • ext?: string; // "js,mjs" etc (should really support an array of strings, but I don't think it does right now)
  • exec?: string; // node, python, etc
  • execArgs?: string[]; // args passed to node, etc,
  • nodeArgs?: string[]; // args passed to node, etc,
    +}

+export interface NodemonConfig {

  • /** restartable defaults to "rs" as a string the user enters */
  • restartable?: false | string;
  • colours?: boolean;
  • execMap?: { [key: string]: string };
  • ignoreRoot?: string[];
  • watch?: string[];
  • ignore?: string[];
  • stdin?: boolean;
  • runOnChangeOnly?: boolean;
  • verbose?: boolean;
  • signal?: string;
  • stdout?: boolean;
  • watchOptions?: WatchOptions;
  • help?: string
  • version?: boolean
  • cwd?: string
  • dump?: boolean
  • ignore?: string[]
  • watch?: string[]
  • monitor?: string[]
  • spawn?: boolean
  • noUpdateNotifier?: boolean
  • legacyWatch?: boolean
  • pollingInterval?: number
  • /** @deprecated as this is "on" by default */
  • js?: boolean
  • quiet?: boolean
  • configFile?: string
  • exitCrash?: boolean
  • execOptions?: NodemonExecOptions
    +}

+export interface NodemonSettings extends NodemonConfig, NodemonExecOptions {

  • events?: { [key: string]: string };
  • env?: { [key: string]: string };
    +}

+const nodemon: Nodemon = (settings: NodemonSettings): Nodemon => {};
+
+export = nodemon;
diff --git a/jsconfig.json b/jsconfig.json
new file mode 100644
index 00000000..d77141cb
--- /dev/null
+++ jsconfig.json
@@ -0,0 +1,7 @@
+{

  • "compilerOptions": {
  • "typeRoots": ["./index.d.ts", "./node_modules/@types"],
  • "checkJs": true
  • },
  • "exclude": ["node_modules"]
    +}
    diff --git lib/cli/parse.js lib/cli/parse.js
    index ad740038..560cc715 100644
    --- lib/cli/parse.js
    +++ lib/cli/parse.js
    @@ -25,7 +25,7 @@ module.exports = parse;
  • Parses the command line arguments process.argv and returns the
  • nodemon options, the user script and the executable script.
    • @param {Array} full process arguments, including node leading arg
    • @param {Array | string} argv full process arguments, including node leading arg
    • @return {Object} { options, script, args }
      */
      function parse(argv) {
      @@ -97,9 +97,9 @@ function parse(argv) {
    • Given an argument (ie. from process.argv), sets nodemon
    • options and can eat up the argument value
    • @param {Object} options object that will be updated
    • @param {Sting} current argument from argv
    • @param {Function} the callback to eat up the next argument in argv
    • @param {import('../..').NodemonSettings} options object that will be updated
    • @param {String} arg current argument from argv
    • @param {Function} eatNext the callback to eat up the next argument in argv
    • @return {Boolean} false if argument was not a nodemon arg
      */
      function nodemonOption(options, arg, eatNext) {
      @@ -161,7 +161,7 @@ function nodemonOption(options, arg, eatNext) {
      } else

    if (arg === '--exitcrash') {

  • options.exitcrash = true;
  • options.exitCrash = true;
    } else

if (arg === '--delay' || arg === '-d') {
@@ -210,7 +210,7 @@ function nodemonOption(options, arg, eatNext) {

  • Given an argument (ie. from nodemonOption()), will parse and return the
  • equivalent millisecond value or 0 if the argument cannot be parsed
    • @param {String} argument value given to the --delay option
    • @param {String} value argument value given to the --delay option
    • @return {Number} millisecond equivalent of the argument
      */
      function parseDelay(value) {
      diff --git lib/config/load.js lib/config/load.js
      index 75d8443f..7c57d323 100644
      --- lib/config/load.js
      +++ lib/config/load.js
      @@ -30,8 +30,10 @@ function findAppScript() {
    • the local nodemon.json to the exec and then overwriting using any user
    • specified settings (i.e. from the cli)
    • @param {Object} settings user defined settings
    • @param {Function} ready callback that receives complete config
    • @param {Object} settings user defined settings
    • @param {Object} options global options
    • @param {Object} config the config object to be updated
    • @param {Function} callback that receives complete config
      */
      function load(settings, options, config, callback) {
      config.loaded = [];
      diff --git lib/monitor/match.js lib/monitor/match.js
      index 2ac3b291..11691d7d 100644
      --- lib/monitor/match.js
      +++ lib/monitor/match.js
      @@ -31,9 +31,12 @@ function rulesToMonitor(watch, ignore, config) {
      }

    if (ignore) {

  • [].push.apply(monitor, (ignore || []).map(function (rule) {
  •  return '!' + rule;
    
  • }));
  • [].push.apply(
  •  monitor,
    
  •  (ignore || []).map(function (rule) {
    
  •    return '!' + rule;
    
  •  })
    
  • );
    }

var cwd = process.cwd();
@@ -87,16 +90,16 @@ function rulesToMonitor(watch, ignore, config) {

 // if the url ends with * but not **/* and not *.*
 // then convert to **/* - somehow it was missed :-\
  • if (rule.slice(-4) !== '**/*' &&
  • if (
  •  rule.slice(-4) !== '**/*' &&
     rule.slice(-1) === '*' &&
    
  •  rule.indexOf('*.') === -1) {
    
  •  rule.indexOf('*.') === -1
    
  • ) {
    if (rule.slice(-2) !== '**') {
    rule += '/';
    }
    }
  • return (not ? '!' : '') + rule;
    });

@@ -105,7 +108,8 @@ function rulesToMonitor(watch, ignore, config) {

function tryBaseDir(dir) {
var stat;

  • if (/[?*{[]+/.test(dir)) { // if this is pattern, then try to find the base
  • if (/[?*{[]+/.test(dir)) {
  • // if this is pattern, then try to find the base
    try {
    var base = path.dirname(dir.replace(/([?{[]+.$)/, 'foo'));
    stat = fs.statSync(base);
    @@ -123,7 +127,7 @@ function tryBaseDir(dir) {
    if (stat.isFile() || stat.isDirectory()) {
    return dir;
    }
  • } catch (e) { }
  • } catch (e) {}
    }

return false;
@@ -133,50 +137,52 @@ function match(files, monitor, ext) {
// sort the rules by highest specificity (based on number of slashes)
// ignore rules (!) get sorted highest as they take precedent
const cwd = process.cwd();

  • var rules = monitor.sort(function (a, b) {
  • var r = b.split(path.sep).length - a.split(path.sep).length;
  • var aIsIgnore = a.slice(0, 1) === '!';
  • var bIsIgnore = b.slice(0, 1) === '!';
  • if (aIsIgnore || bIsIgnore) {
  •  if (aIsIgnore) {
    
  •    return -1;
    
  • var rules = monitor
  • .sort(function (a, b) {
  •  var r = b.split(path.sep).length - a.split(path.sep).length;
    
  •  var aIsIgnore = a.slice(0, 1) === '!';
    
  •  var bIsIgnore = b.slice(0, 1) === '!';
    
  •  if (aIsIgnore || bIsIgnore) {
    
  •    if (aIsIgnore) {
    
  •      return -1;
    
  •    }
    
  •    return 1;
     }
    
  •  return 1;
    
  • }
  •  if (r === 0) {
    
  •    return b.length - a.length;
    
  •  }
    
  •  return r;
    
  • })
  • .map(function (s) {
  •  var prefix = s.slice(0, 1);
    
  •  if (prefix === '!') {
    
  •    if (s.indexOf('!' + cwd) === 0) {
    
  •      return s;
    
  •    }
    
  • if (r === 0) {
  •  return b.length - a.length;
    
  • }
  • return r;
  • }).map(function (s) {
  • var prefix = s.slice(0, 1);
  •    // if it starts with a period, then let's get the relative path
    
  •    if (s.indexOf('!.') === 0) {
    
  •      return '!' + path.resolve(cwd, s.substring(1));
    
  •    }
    
  • if (prefix === '!') {
  •  if (s.indexOf('!' + cwd) === 0) {
    
  •    return s;
    
  •    return '!**' + (prefix !== path.sep ? path.sep : '') + s.slice(1);
     }
    
     // if it starts with a period, then let's get the relative path
    
  •  if (s.indexOf('!.') === 0) {
    
  •    return '!' + path.resolve(cwd, s.substring(1));
    
  •  if (s.indexOf('.') === 0) {
    
  •    return path.resolve(cwd, s);
     }
    
  •  return '!**' + (prefix !== path.sep ? path.sep : '') + s.slice(1);
    
  • }
  • // if it starts with a period, then let's get the relative path
  • if (s.indexOf('.') === 0) {
  •  return path.resolve(cwd, s);
    
  • }
  • if (s.indexOf(cwd) === 0) {
  •  return s;
    
  • }
  •  if (s.indexOf(cwd) === 0) {
    
  •    return s;
    
  •  }
    
  • return '**' + (prefix !== path.sep ? path.sep : '') + s;
  • });
  •  return '**' + (prefix !== path.sep ? path.sep : '') + s;
    
  • });

debug('rules', rules);

@@ -221,8 +227,10 @@ function match(files, monitor, ext) {
// but does match a rule that ends with ., then
// white list it - in that we don't run it through
// the extension check too.

  •      if (rules[i] !== '**' + path.sep + '*.*' &&
    
  •        rules[i].slice(-3) === '*.*') {
    
  •      if (
    
  •        rules[i] !== '**' + path.sep + '*.*' &&
    
  •        rules[i].slice(-3) === '*.*'
    
  •      ) {
           whitelist.push(file);
         } else if (path.basename(file) === path.basename(rules[i])) {
           // if the file matches the actual rule, then it's put on whitelist
    

@@ -231,7 +239,6 @@ function match(files, monitor, ext) {
good.push(file);
}
matched = true;

  •      break;
       } else {
         // utils.log.detail('no match: ' + rules[i], file);
       }
    

@@ -242,8 +249,6 @@ function match(files, monitor, ext) {
}
});

  • debug('good', good)
  • // finally check the good files against the extensions that we're monitoring
    if (ext) {
    if (ext.indexOf(',') === -1) {
    @@ -256,7 +261,13 @@ function match(files, monitor, ext) {
    // only compare the filename to the extension test
    return minimatch(path.basename(file), ext, minimatchOpts);
    });
  • } // else assume .
  • debug('good (filtered by ext)', good);

  • } else {

  • // else assume .

  • debug('good', good);

  • }

  • if (whitelist.length) debug('whitelist', whitelist);

    var result = good.concat(whitelist);

diff --git lib/monitor/run.js lib/monitor/run.js
index e05041e4..5fa7f45a 100644
--- lib/monitor/run.js
+++ lib/monitor/run.js
@@ -64,7 +64,7 @@ function run(options) {
const binPath = process.cwd() + '/node_modules/.bin';

const spawnOptions = {

  • env: Object.assign({}, process.env, options.execOptions.env, {
  • env: Object.assign({}, options.execOptions.env, process.env, {
    PATH:
    binPath +
    path.delimiter +
    @@ -249,7 +249,14 @@ function run(options) {
    }
    } else {
    bus.emit('crash');
  •  // support the old syntax of `exitcrash` - 2024-12-13
     if (options.exitcrash) {
    
  •    options.exitCrash = true;
    
  •    delete options.exitcrash;
    
  •  }
    
  •  if (options.exitCrash) {
       utils.log.fail('app crashed');
       if (!config.required) {
         process.exit(1);
    

diff --git lib/nodemon.js lib/nodemon.js
index ce649cb6..75619ba4 100644
--- lib/nodemon.js
+++ lib/nodemon.js
@@ -7,6 +7,7 @@ var util = require('util');
var utils = require('./utils');
var bus = utils.bus;
var help = require('./help');
+/** @type {import('..').NodemonEventConfig} */
var config = require('./config');
var spawn = require('./spawn');
const defaults = require('./config/defaults')
@@ -16,9 +17,16 @@ var eventHandlers = {};
// stable module API
config.required = utils.isRequired;

+/**

    • @param {import('..').NodemonSettings | string} settings
  • */
    function nodemon(settings) {
    bus.emit('boot');
    nodemon.reset();

  • /** @type {import('..').NodemonSettings} */

  • let options

    // allow the cli string as the argument to nodemon, and allow for
    // node nodemon -V app.js or just -V app.js
    @@ -30,25 +38,25 @@ function nodemon(settings) {
    }
    settings = 'node ' + settings;
    }

  • settings = cli.parse(settings);
  • }
  • options = cli.parse(settings);

  • } else options = settings;

    // set the debug flag as early as possible to get all the detailed logging

  • if (settings.verbose) {
  • if (options.verbose) {
    utils.debug = true;
    }
  • if (settings.help) {
  • console.log(help(settings.help));
  • console.log(help(options.help));
    if (!config.required) {
    process.exit(0);
    }
    }
  • if (settings.version) {
  • if (options.version) {
    version().then(function (v) {
    console.log(v);
    if (!config.required) {
    @@ -61,17 +69,15 @@ function nodemon(settings) {
    // nodemon tools like grunt-nodemon. This affects where
    // the script is being run from, and will affect where
    // nodemon looks for the nodemon.json files
  • if (settings.cwd) {
  • if (options.cwd) {
    // this is protection to make sure we haven't dont the chdir already...
    // say like in cli/parse.js (which is where we do this once already!)
  • if (process.cwd() !== path.resolve(config.system.cwd, settings.cwd)) {
  •  process.chdir(settings.cwd);
    
  • if (process.cwd() !== path.resolve(config.system.cwd, options.cwd)) {
  •  process.chdir(options.cwd);
    
    }
    }
  • const cwd = process.cwd();
  • config.load(settings, function (config) {
  • config.load(options, function (config) {
    if (!config.options.dump && !config.options.execOptions.script &&
    config.options.execOptions.exec === 'node') {
    if (!config.required) {
    @@ -171,7 +177,7 @@ function nodemon(settings) {
    // don't notify of default ignores
    if (defaults.ignoreRoot.indexOf(rule) !== -1) {
    return false;
  •    return rule.slice(3).slice(0, -3);
    
  •    // return rule.slice(3).slice(0, -3);
     }
    
     if (rule.startsWith(cwd)) {
    

diff --git lib/rules/add.js lib/rules/add.js
index de85bb7f..11f1fd71 100644
--- lib/rules/add.js
+++ lib/rules/add.js
@@ -28,7 +28,7 @@ module.exports = add;

  • @param {Object} rules containing watch and ignore. Also updated during
  •                   execution
    
  • @param {String} which must be either "watch" or "ignore"
    • @param {String|RegExp} the actual rule.
    • @param {String|RegExp} rule the actual rule.
      */
      function add(rules, which, rule) {
      if (!{ ignore: 1, watch: 1}[which]) {
      diff --git package.json package.json
      index e887374b..63a03822 100644
      --- package.json
      +++ package.json
      @@ -27,6 +27,7 @@
      "terminal"
      ],
      "license": "MIT",
  • "types": "./index.d.ts",
    "main": "./lib/nodemon",
    "scripts": {
    "commitmsg": "commitlint -e",
    diff --git test/cli/parse.test.js test/cli/parse.test.js
    index b2b63131..2b79971f 100644
    --- test/cli/parse.test.js
    +++ test/cli/parse.test.js
    @@ -251,7 +251,7 @@ describe('nodemon argument parser', function () {
    assert(settings.exec === 'java', 'exec');
    assert(settings.quiet, 'quiet');
    assert(settings.stdin === false, 'read stdin');
  • assert(settings.exitcrash, 'exit if crash');
  • assert(settings.exitCrash, 'exit if crash');
    assert(settings.watch[0] === 'fixtures', 'watch');
    assert(settings.ignore[0] === 'fixtures', 'ignore');
    assert(settings.delay === 5000, 'delay 5 seconds');
    diff --git test/config/env.test.js test/config/env.test.js
    index d279187d..48c0b599 100644
    --- test/config/env.test.js
    +++ test/config/env.test.js
    @@ -1,24 +1,34 @@
    'use strict';
    /*global describe:true, it: true, after: true */
    var nodemon = require('../../lib/'),
  • path = require('path'),
  • assert = require('assert');
  • path = require('path'),
  • assert = require('assert');

describe('when nodemon runs (1)', function () {
var tmp = path,.resolve('test/fixtures/env.js');
after(function (done) {
// clean up just in case.

  • nodemon.once('exit', function () {
  •  nodemon.reset(done);
    
  • }).emit('quit');
  • nodemon

  •  .once('exit', function () {
    
  •    nodemon.reset(done);
    
  •  })
    
  •  .emit('quit');
    

    });

    it('should pass through environment values', function (done) {

  • nodemon({ script: tmp, stdout: false, env: { USER: 'nodemon' } }).on('stdout', function (data) {
  •  assert(data.toString().trim() === 'nodemon', 'USER env value correctly set to "nodemon": ' + data.toString());
    
  •  nodemon.once('exit', function () {
    
  •    nodemon.reset(done);
    
  •  }).emit('quit');
    
  • });
  • nodemon({ script: tmp, stdout: false, env: { NODEMON_ENV: 'nodemon' } }).on(
  •  'stdout',
    
  •  function (data) {
    
  •    assert(
    
  •      data.toString().trim() === 'nodemon',
    
  •      'NODEMON_ENV env value correctly set to "nodemon": ' + data.toString()
    
  •    );
    
  •    nodemon
    
  •      .once('exit', function () {
    
  •        nodemon.reset(done);
    
  •      })
    
  •      .emit('quit');
    
  •  }
    
  • );
    });
    });
    diff --git test/events/complete.test.js test/events/complete.test.js
    index 46aba41b..413fe3e8 100644
    --- test/events/complete.test.js
    +++ test/events/complete.test.js
    @@ -11,68 +11,72 @@ var appjs = path.resolve(dir, 'env.js');
    var asCLI = utils.asCLI;
    var fork = require('child_process').fork;

-describe('events should follow normal flow on user triggered change',

  • function () {
  • function conf() {
  •  utils.port++;
    
  •  return {
    
  •    script: appjs,
    
  •    verbose: true,
    
  •    stdout: false,
    
  •    noReset: true,
    
  •    ext: 'js',
    
  •    env: {
    
  •      PORT: utils.port,
    
  •      USER: 'nodemon',
    
  •    },
    
  •  };
    
  • }
    +describe('events should follow normal flow on user triggered change', function () {
  • function conf() {
  • utils.port++;
  • return {
  •  script: appjs,
    
  •  verbose: true,
    
  •  stdout: false,
    
  •  noReset: true,
    
  •  ext: 'js',
    
  •  env: {
    
  •    PORT: utils.port,
    
  •    NODEMON_ENV: 'nodemon',
    
  •  },
    
  • };
  • }
  • var cwd = process.cwd();
  • var cwd = process.cwd();
  • beforeEach(function (done) {
  •  debug('beforeEach');
    
  •  nodemon.once('exit', function () {
    
  • beforeEach(function (done) {
  • debug('beforeEach');
  • nodemon
  •  .once('exit', function () {
       nodemon.reset(done);
    
  •  }).emit('quit');
    
  • });
  •  })
    
  •  .emit('quit');
    
  • });
  • before(function () {
  •  process.chdir(dir);
    
  • });
  • before(function () {
  • process.chdir(dir);
  • });
  • after(function (done) {
  •  debug('after');
    
  •  process.chdir(cwd);
    
  •  nodemon.once('exit', function () {
    
  • after(function (done) {
  • debug('after');
  • process.chdir(cwd);
  • nodemon
  •  .once('exit', function () {
       nodemon.reset(function () {
         setTimeout(done, 1000);
       });
    
  •  }).emit('quit');
    
  • });
  •  })
    
  •  .emit('quit');
    
  • });
  • it('start', function (done) {
  •  debug('start');
    
  •  nodemon(conf()).once('start', function () {
    
  •    assert(true, '"start" event');
    
  •    done();
    
  •  });
    
  • it('start', function (done) {
  • debug('start');
  • nodemon(conf()).once('start', function () {
  •  assert(true, '"start" event');
    
  •  done();
    
    });
  • });
  • it('config:update', function (done) {
  •  nodemon(conf()).on('config:update', function () {
    
  •    assert(true, '"config:update" event');
    
  •    done();
    
  •  });
    
  • it('config:update', function (done) {
  • nodemon(conf()).on('config:update', function () {
  •  assert(true, '"config:update" event');
    
  •  done();
    
    });
  • });
  • it('exit', function (done) {
  •  var plan = new utils.Plan(4, function () {
    
  •    nodemon.reset(done);
    
  •  });
    
  •  var run = 0;
    
  • it('exit', function (done) {
  • var plan = new utils.Plan(4, function () {
  •  nodemon.reset(done);
    
  • });
  • var run = 0;
  •  nodemon(conf()).on('exit', function () {
    
  • nodemon(conf())
  •  .on('exit', function () {
       plan.assert(true, '"exit" event');
       if (run === 1) {
         setTimeout(function () {
    

@@ -84,33 +88,38 @@ describe('events should follow normal flow on user triggered change',
} else {
plan.assert(false, 'quit too many times: ' + run);
}

  •  }).on('start', function () {
    
  •  })
    
  •  .on('start', function () {
       run++;
     });
    
  • });
  • });
  • it('stdout', function (done) {
  •  nodemon(conf()).once('stdout', function (data) {
    
  •    assert(true, '"stdout" event with: ' + data);
    
  •    done();
    
  •  });
    
  • it('stdout', function (done) {
  • nodemon(conf()).once('stdout', function (data) {
  •  assert(true, '"stdout" event with: ' + data);
    
  •  done();
    
    });
  • });
  • it('restart', function (done) {
  •  var plan = new utils.Plan(4, function () {
    
  •    nodemon.reset(done);
    
  •  });
    
  • it('restart', function (done) {
  • var plan = new utils.Plan(4, function () {
  •  nodemon.reset(done);
    
  • });
  •  nodemon(conf()).on('restart', function (files) {
    
  • nodemon(conf())
  •  .on('restart', function (files) {
       plan.assert(true, '"restart" event with ' + files);
    
  •    plan.assert(files[0] === appjs, 'restart due to ' + files.join(' ') +
    
  •      ' changing');
    
  •  }).once('exit', function () {
    
  •    plan.assert(
    
  •      files[0] === appjs,
    
  •      'restart due to ' + files.join(' ') + ' changing'
    
  •    );
    
  •  })
    
  •  .once('exit', function () {
       plan.assert(true, '"exit" event');
       setTimeout(function () {
         plan.assert(true, 'restarting');
         touch.sync(appjs);
       }, 1500);
     });
    
  • });
    });
    +});
    diff --git test/events/scripts.test.js test/events/scripts.test.js
    index f334c12e..e2ff9e38 100644
    --- test/events/scripts.test.js
    +++ test/events/scripts.test.js
    @@ -1,17 +1,17 @@
    'use strict';
    /*global describe:true, it: true, afterEach: true, beforeEach: true, after:true */
    var cli = require('../../lib/cli/'),
  • path = require('path'),
  • testUtils = require('../utils'),
  • utils = require('../../lib/utils'),
  • exec = require('../../lib/config/exec'),
  • nodemon = require('../../lib/nodemon'),
  • command = require('../../lib/config/command'),
  • appjs = path.resolve(__dirname, '..', 'fixtures', 'env.js'),
  • assert = require('assert');
  • path = require('path'),
  • testUtils = require('../utils'),
  • utils = require('../../lib/utils'),
  • exec = require('../../lib/config/exec'),
  • nodemon = require('../../lib/nodemon'),
  • command = require('../../lib/config/command'),
  • appjs = path.resolve(__dirname, '..', 'fixtures', 'env.js'),
  • assert = require('assert');

function asCLI(cmd) {

  • return ('node nodemon ' + (cmd|| '')).trim();
  • return ('node nodemon ' + (cmd || '')).trim();
    }

function parse(cmd) {
@@ -26,7 +26,7 @@ function commandToString(command) {

describe('nodemon API events', function () {
var pwd = process.cwd(),

  •  oldhome = utils.home;
    
  • oldhome = utils.home;

afterEach(function () {
process.chdir(pwd);
@@ -41,7 +41,10 @@ describe('nodemon API events', function () {
beforeEach(function (done) {
// move to the fixtures directory to allow for config loading
process.chdir(path.resolve(pwd, 'test/fixtures'));

  • utils.home = path.resolve(pwd, ['test', 'fixtures', 'events'].join(path.sep));
  • utils.home = path.resolve(

  •  pwd,
    
  •  ['test', 'fixtures', 'events'].join(path.sep)
    
  • );

    nodemon.reset(done);
    });
    @@ -52,23 +55,25 @@ describe('nodemon API events', function () {
    script: appjs,
    verbose: true,
    stdout: false,

  •  env: { USER: 'nodemon' },
    
  • }).on('start', function () {
  •  plan.assert(true, 'started');
    
  • }).on('exit', function () {
  •  plan.assert(true, 'exit');
    
  • }).on('stdout', function (data) {
  •  data = data.toString().trim();
    
  •  if (data === 'OK') {
    
  •    plan.assert(true, 'OK found');
    
  •  } else if (data === 'STOPPED') {
    
  •    plan.assert(true, 'STOPPED found');
    
  •  } else if (data === 'nodemon') {
    
  •    // expected output
    
  •  } else {
    
  •    plan.assert(false, data + ' found');
    
  •  }
    
  • });
  •  env: { NODEMON_ENV: 'nodemon' },
    
  • })
  •  .on('start', function () {
    
  •    plan.assert(true, 'started');
    
  •  })
    
  •  .on('exit', function () {
    
  •    plan.assert(true, 'exit');
    
  •  })
    
  •  .on('stdout', function (data) {
    
  •    data = data.toString().trim();
    
  •    if (data === 'OK') {
    
  •      plan.assert(true, 'OK found');
    
  •    } else if (data === 'STOPPED') {
    
  •      plan.assert(true, 'STOPPED found');
    
  •    } else if (data === 'nodemon') {
    
  •      // expected output
    
  •    } else {
    
  •      plan.assert(false, data + ' found');
    
  •    }
    
  •  });
    
    });
    -});
    \ No newline at end of file
    +});
    diff --git test/fixtures/env.js test/fixtures/env.js
    index f4d5a7bf..aa07556f 100644
    --- test/fixtures/env.js
    +++ test/fixtures/env.js
    @@ -1 +1 @@
    -console.log(process.env.USER);
    \ No newline at end of file
    +console.log(process.env.NODEMON_ENV);
    diff --git test/lib/require.test.js test/lib/require.test.js
    index 21883260..7c775d6d 100644
    --- test/lib/require.test.js
    +++ test/lib/require.test.js
    @@ -1,16 +1,16 @@
    'use strict';
    /*global describe:true, it: true, afterEach: true */
    var nodemon = require('../../lib/'),
  • assert = require('assert'),
  • path = require('path'),
  • touch = require('touch'),
  • utils = require('../utils'),
  • appjs = path.resolve(__dirname, '..', 'fixtures', 'app.js'),
  • envjs = path.resolve(__dirname, '..', 'fixtures', 'env.js');
  • assert = require('assert'),
  • path = require('path'),
  • touch = require('touch'),
  • utils = require('../utils'),
  • appjs = path.resolve(__dirname, '..', 'fixtures', 'app.js'),
  • envjs = path.resolve(__dirname, '..', 'fixtures', 'env.js');

describe('require-able', function () {
var pwd = process.cwd(),

  •  oldhome = utils.home;
    
  • oldhome = utils.home;

afterEach(function () {
process.chdir(pwd);
@@ -30,16 +30,18 @@ describe('require-able', function () {

 nodemon({
   script: envjs,
  •  env: { USER: 'nodemon' },
    
  •  env: { NODEMON_ENV: 'nodemon' },
     stdout: false,
    
  • }).on('stdout', function (data) {
  •  var out = data.toString().trim();
    
  •  assert(out === 'nodemon', 'expected output: ' + out);
    
  •  done();
    
  • }).on('error', function (e) {
  •  assert(false, 'script did not run: ' + e);
    
  •  done();
    
  • });
  • })

  •  .on('stdout', function (data) {
    
  •    var out = data.toString().trim();
    
  •    assert(out === 'nodemon', 'expected output: ' + out);
    
  •    done();
    
  •  })
    
  •  .on('error', function (e) {
    
  •    assert(false, 'script did not run: ' + e);
    
  •    done();
    
  •  });
    

    });

    it('should know nodemon has been required', function () {
    @@ -50,71 +52,53 @@ describe('require-able', function () {
    var restarted = false;

    utils.port++;

  • nodemon({ script: appjs, verbose: true, env: { PORT: utils.port }, signal: 'SIGINT' }).on('start', function () {
  •  setTimeout(function () {
    
  •    touch.sync(appjs);
    
  •  }, 1000);
    
  • }).on('start', function() {
  •  if (restarted) {
    
  •    setTimeout(function() { nodemon.emit('quit') });
    
  •  }
    
  • }).on('restart', function () {
  •  restarted = true;
    
  • }).on('quit', function () {
  •  assert(restarted, 'nodemon restarted and quit properly');
    
  •  nodemon.reset(done);
    
  • }).on('log', function (event) {
  •  // console.log(event.message);
    
  • });
  • nodemon({

  •  script: appjs,
    
  •  verbose: true,
    
  •  env: { PORT: utils.port },
    
  •  signal: 'SIGINT',
    
  • })

  •  .on('start', function () {
    
  •    setTimeout(function () {
    
  •      touch.sync(appjs);
    
  •    }, 1000);
    
  •  })
    
  •  .on('start', function () {
    
  •    if (restarted) {
    
  •      setTimeout(function () {
    
  •        nodemon.emit('quit');
    
  •      });
    
  •    }
    
  •  })
    
  •  .on('restart', function () {
    
  •    restarted = true;
    
  •  })
    
  •  .on('quit', function () {
    
  •    assert(restarted, 'nodemon restarted and quit properly');
    
  •    nodemon.reset(done);
    
  •  })
    
  •  .on('log', function (event) {
    
  •    // console.log(event.message);
    
  •  });
    

    });

    it('should be restartable', function (done) {
    var restarted = false;

  • nodemon(appjs).on('start', function () {
  •  setTimeout(function () {
    
  •    nodemon.restart();
    
  •  }, 1000);
    
  • }).on('restart', function () {
  •  restarted = true;
    
  •  nodemon.emit('quit');
    
  • }).on('quit', function () {
  •  assert(restarted);
    
  •  nodemon.reset(done);
    
  •  // unbind events for testing again
    
  • });
  • });
  • /*
  • it('should restart a file with spaces', function (done) {
  • var restarted = false;
  • var found = false;
  • utils.port++;
  • setTimeout(function () {
  •  nodemon({
    
  •    exec: [path.resolve('fixtures', 'app\\ with\\ spaces.js'), 'foo'],
    
  •    verbose: true,
    
  •    stdout: false,
    
  •  }).on('log', function (e) {
    
  •    console.log(e.colour);
    
  •  }).on('start', function () {
    
  • nodemon(appjs)
  •  .on('start', function () {
       setTimeout(function () {
    
  •      console.log('touching ' + appjs);
    
  •      touch.sync(appjs);
    
  •    }, 5000);
    
  •  }).on('restart', function () {
    
  •      nodemon.restart();
    
  •    }, 1000);
    
  •  })
    
  •  .on('restart', function () {
       restarted = true;
       nodemon.emit('quit');
    
  •  }).on('quit', function () {
    
  •    assert(found, 'test for "foo" string in output');
    
  •  })
    
  •  .on('quit', function () {
    
  •    assert(restarted);
       nodemon.reset(done);
    
  •  }).on('stdout', function (data) {
    
  •    console.log(data.toString().trim());
    
  •    found = data.toString().trim() === 'foo';
    
  •    // unbind events for testing again
     });
    
  • }, 2000);
    });
    -*/
    });
    diff --git test/misc/listeners.test.js test/misc/listeners.test.js
    index 7be9d7a7..d0d45508 100644
    --- test/misc/listeners.test.js
    +++ test/misc/listeners.test.js
    @@ -17,7 +17,7 @@ describe('listeners clean up', function () {
    ext: 'js',
    env: {
    PORT: 0,
  •    USER: 'nodemon',
    
  •    NODEMON_ENV: 'nodemon',
     },
    
    };
    }
    @@ -26,9 +26,10 @@ describe('listeners clean up', function () {
    nodemon.reset(done);
    });
  • it('should be able to re-run in required mode, many times, and not leak' +
  • 'listeners', function (done) {
  • it(

  • 'should be able to re-run in required mode, many times, and not leak' +

  •  'listeners',
    
  • function (done) {
    function run(n) {
    return function (done) {
    nodemon(conf());
    @@ -46,6 +47,6 @@ describe('listeners clean up', function () {
    });

    async.series(toRun);

  • });
  • }

  • );
    });
    diff --git website/index.html website/index.html
    index a22a11ac..ca6da345 100644
    --- website/index.html
    +++ website/index.html
    @@ -27,7 +27,7 @@

    nodemon reload, automatically.

  •  <p>Nodemon is a utility <strong>depended on about 3 million projects</strong>, that will monitor for any
    
  •  <p>Nodemon is a utility <strong>depended on by over 3 million projects</strong>, that will monitor for any
       changes in your source and automatically restart your server.
       Perfect for development.</p>
    

@@ -65,87 +65,71 @@

Features

       <!--oc--><a data-id='532050' data-tier='0' title='buy instagram followers on skweezer.net today' href='https://skweezer.net/buy-instagram-followers'><img alt='buy instagram followers on skweezer.net today' src='https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/b0ddcb1b-9054-4220-8d72-05131b28a2bb/logo-skweezer-icon.png' style='object-fit: contain; float: left; margin:12px' height='120' width='120'></a>

Netpositive
-KasynoHEX
+KasynoHEX
Casinoonlineaams.com
-Best Aussie casinos at aussielowdepositcasino.com
Best online casinos not on GamStop in the UK
-freebets.ltd.uk
TheCasinoDB
-Marketing
-Rating of best betting sites in Australia
inkedin
-AU Internet Pokies
-CasinoAus
-AU Online Casinos
-Top Australian Gambling
-casino online stranieri
Goread.io
-We are the most advanced casino guide!
Best Australian online casinos. Reviewed by Correct Casinos.
-Casino utan svensk licens

Do My Online Class - NoNeedToStudy.com
Slotmachineweb.com
Website dedicated to finding the best and safest licensed online casinos in India
-CasinoWizard
-Scommesseseriea.eu
-Gambe Online AU
-Gamble Online
-Italianonlinecasino.net
-nongamstopcasinos.net
+nongamstopcasinos.net
Scommesse777
-Twicsy
-At Casinoaustraliaonline.com, we review, compare and list all the best gambling sites for Aussies.
-
-Casinon utan svensk licens erbjuder generösa bonusar och kampanjer. Besök coolspins.net för att utforska säkra och pålitliga alternativ.
-BestUSCasinos
-TightPoker
Buy Instagram Likes
-Find the best casinos online. Casinot.biz lists and reviews online casinos.
-btcgaming
Norway's biggest and most reliable online casino portal
OnlineCasinosSpelen
Beoordelen van nieuwe online casino's 2023
CasinoZonderRegistratie.net - Nederlandse Top Casino's
-OSLabs is a nonprofit tech accelerator devoted to furthering high-impact open source software within a collaborative community of dedicated engineers and mentors
-Ilmaiset Pitkävetovihjeet
-NyeCasino.me is a website that lists the newest and best online casinos in Norway
+OnlineCasinoProfy is your guide to the world of gambling.
Famoid is a digital marketing agency that specializes in social media services and tools.
-LookSlots
-Gives a fun for our users
+ігрові автомати беткінг
We are the leading Nearshore Technology Solutions company. We architect and engineer scalable and high-performing software solutions.
-Buy real Instagram followers from Twicsy starting at only $2.97. Twicsy has been voted the best site to buy followers from the likes of US Magazine.
+Buy real Instagram followers from Twicsy starting at only $2.97. Twicsy has been voted the best site to buy followers from the likes of US Magazine.
SocialWick offers the best Instagram Followers in the market. If you are looking to boost your organic growth, buy Instagram followers from SocialWick
Online United States Casinos
-https://bestnongamstopcasinos.net
Aviators
Online iGaming platform with reliable and trusted reviews.
-$1 deposit casino
-Online Casinos Australia
Looking to boost your YouTube channel? Buy YouTube subscribers with Views4You and watch your audience grow!
-casinosonlineaus
-Verified reviews of the most reputable Canadian online casinos at leafletcasino.com
Buy Telegram Members
-Najděte nejlepší online casino v České republice
We review the entire iGaming industry from A to Z
-Helping Swedes finding safe unlicensed casinos
-free spins no deposit
-I migliori casinò online dagli esperti di SitiCasinoNonAAMS
-Best Australian Online Casinos in 2024
+aussiecasinoreviewer.com
MEGAFAMOUS.com
PopularityBazaar helps you quickly grow your social media accounts. Buy 100% real likes, followers, views, comments, and more to kickstart your online presence.
Non-GamStop NonStop Casino
philippinescasinos.ph
-Incognito
+Incognito
NonGamStopBets Casinos not on GamStop
-Buy real Instagram followers from Stormlikes starting at only $2.97. Stormlikes has been voted the best site to buy followers from the likes of US Magazine.
UpGrow is the Best Instagram Growth Service in 2024. Get more real Instagram followers with our AI-powered growth engine to get 10x faster results.
-Reviewing companies in high-risk industries like online casinos, forex brokers and crypto exchanges
-
Analysis of payment methods for use in the iGaming
-30 Best Casinos Not on Gamstop in 2024
-Twitter Video Downloader HD Tool allows you to store tweets on your device (mobile or PC) for free.
+CryptoCasinos.online
+No deposit casino promo Codes 2024 - The best online Casinos websites. No deposit bonus codes, Free Spins and Promo Codes. Stake, Roobet, Jackpotcity and more.
+Online casino.
+Listing no deposit bonus offers from various internet sites .
+Fortune Tiger
+SidesMedia
+Find the social proof you need to reach your audience! Boost conversions. Quickly buy Twitter Followers & more with no sign-up. Taking you to the next
+Boost your social media presence effortlessly with top-quality Instagram and TikTok followers and likes.
+Social Media Management and all kinds of followers
+Trusted last mile route planning and route optimization
+Betwinner is an online bookmaker offering sports betting, casino games, and more.
+Help users to find best and cheapest site to buy Instagram Followers
+At Buzzoid, you can buy Instagram followers quickly, safely, and easily with just a few clicks. Rated world's #1 IG service since 2012.
+BonusBezDepozytu
+Tutti i siti di scommesse non AAMS
+Zamsino.com
+Graming offer top-notch Instagram followers at the best prices!
+kasyno online blik
+Feedthebot is an informative resource with free seo tools designed to help webmasters, SEO specialists, marketers, and entrepreneurs navigate and bett
+Social media service
+Find the social proof you need to reach your audience! Boost conversions. Quickly buy Twitter Followers & more with no sign-up. Taking you to the next
+Playfortuneforfun.com
+Reviewing and comparing online casinos available to Finnish players. In addition, we publish relevant news and blog posts about the world of iGaming.
+Jabka Skin
+Онлайн казино та БК (ставки на спорт) в Україні
+

Please note that links to the sponsors above are not direct endorsements nor affiliated with any of
contributors of the nodemon project.


diff --git website/oc.jq website/oc.jq
index 2c0d2fdb..76d9bea4 100644
--- website/oc.jq
+++ website/oc.jq
@@ -8,7 +8,8 @@ def getImage:
"368126": "https://user-images.githubusercontent.com/13700/207157616-8b6d3dd2-e7de-4bbf-86b2-d6ad9fb714fb.png",
"471843": "https://github-production-user-asset-6210df.s3.amazonaws.com,/13700/277616726-33b554c8-24e0-4570-b8ed-293fb2ab2448.jpg",
"501897": "https://github-production-user-asset-6210df.s3.amazonaws.com/13700/286696172-747dca05-a1e8-4d93-a9e9-95054d1566df.png",

  •  "525119": "https://github.com/remy/nodemon/assets/13700/820935c0-7844-4ba9-9563-b1c559895c38"
    
  •  # "525119": "https://github.com/remy/nodemon/assets/13700/820935c0-7844-4ba9-9563-b1c559895c38",
    
  •  # "": "https://github.com/user-attachments/assets/e25d9ccd-1203-449b-9404-fe7336ac180a"
    
    } | (.["($.MemberId)"] // $.image)
    ;

@@ -19,8 +20,9 @@ def getUrl:
"368126": "https://casinofrog.com/ca/online-casino/new/",
"468969": "https://bestnongamstopcasinos.net/",
"501897": "https://buycheapestfollowers.com/buy-telegram-channel-members",

  •  "525119": "https://finance.yahoo.com/news/30-best-casinos-not-gamstop-091943696.html",
    
  •  "532050": "https://skweezer.net/buy-instagram-followers"
    
  •  # "525119": "https://finance.yahoo.com/news/30-best-casinos-not-gamstop-091943696.html",
    
  •  "532050": "https://skweezer.net/buy-instagram-followers",
    
  •  "596376": "https://buzzoid.com/buy-instagram-followers/"
    
    } | (.["($.MemberId)"] // $.website)
    ;

@@ -33,7 +35,7 @@ def getAlt:
"368126": { description: "New casinos 2023" },
"471843": { description: "Aviators" },
"501897": { description: "Buy Telegram Members" },

  •  "525119": { description: "30 Best Casinos Not on Gamstop in 2024" },
    
  •  # "525119": { description: "30 Best Casinos Not on Gamstop in 2024" },
     "532050": { description: "buy instagram followers on skweezer.net today"}
    
    } | (.["($.MemberId)"] // $) |
    if .description then
    @@ -54,7 +56,7 @@ def tomarkdown:

. + [{

manually added

  • isActive: true,
  • manually added

  • isActive: true,

def markdown: $markdown;
diff --git website/oc.js website/oc.js
index 7d33825b..714c43d3 100644
--- website/oc.js
+++ website/oc.js
@@ -22,7 +22,7 @@ const files = {
async function curl(out) {
const res = [];
for (const [i, tier] of tiers.entries()) {

  • const url = https://opencollective.com/nodemon/members/all.json?TierId=${tier}&offset=;
  • const url = https://opencollective.com/nodemon/members/all.json?TierId=${tier}&limit=100&offset=;
    let offset = 0;
    do {
    let next = await get(url + offset);

</details>

### Description
This PR introduces several significant changes to the nodemon project, including updates to configuration files, type definitions, documentation, and core functionality. The changes aim to improve TypeScript support, update Node.js version requirements, enhance error handling, and refine the project's overall structure.

### Possible Issues
- The removal of support for older Node.js versions (10.x and 12.x) may impact users still using these versions.
- Changes to signal handling and process termination could potentially cause issues in applications that rely on the previous behavior.

### Security Hotspots
No significant security vulnerabilities were introduced in this PR.

<details>
<summary><i>Changes</i></summary>

### Changes

1. `.github/workflows/node.js.yml`:
   - Updated Node.js version matrix to only include 18.x

2. `.github/workflows/release.yml`:
   - Updated Node.js version from 16 to 18

3. `README.md`:
   - Updated example code for signal handling
   - Modified sponsor links and descriptions

4. `faq.md`:
   - Updated example for graceful shutdowns

5. `index.d.ts` (new file):
   - Added TypeScript type definitions for nodemon

6. `jsconfig.json` (new file):
   - Added JavaScript configuration file

7. `lib/cli/parse.js`:
   - Updated JSDoc comments
   - Changed `exitcrash` to `exitCrash`

8. `lib/config/load.js`:
   - Updated JSDoc comments

9. `lib/monitor/match.js`:
   - Code formatting improvements

10. `lib/monitor/run.js`:
    - Updated error handling for application crashes

11. `lib/nodemon.js`:
    - Refactored code for better TypeScript compatibility

12. Various test files:
    - Updated test cases to use `NODEMON_ENV` instead of `USER`

13. `website/index.html` and `website/oc.jq`:
    - Updated sponsor information and links

```mermaid
sequenceDiagram
    participant User
    participant Nodemon
    participant App

    User->>Nodemon: Start nodemon
    Nodemon->>App: Launch application
    App->>Nodemon: Running
    User->>Nodemon: File change detected
    Nodemon->>App: Send SIGINT
    App->>App: Handle SIGINT
    App->>App: Cleanup
    App->>Nodemon: Send SIGTERM
    Nodemon->>App: Restart application
    App->>Nodemon: Running (restarted)

@renovate renovate bot force-pushed the renovate/nodemon-3.x branch from 1eb4193 to 8f34a3c Compare January 15, 2025 06:30
@jlbyrne jlbyrne merged commit 2153fb0 into master Jan 15, 2025
8 checks passed
@jlbyrne jlbyrne deleted the renovate/nodemon-3.x branch January 15, 2025 06:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant