# Fix the 'cb.apply is not a function' error in GitBook

> How to fix the cb.apply is not a function error from graceful-fs when running GitBook on a newer Node.js, by commenting out the statFix polyfill lines.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2020-08-10 | Topics: [JavaScript](https://flaviocopes.com/tags/js/) | Canonical: https://flaviocopes.com/cb-apply-not-a-function/

I regularly use [Gitbook](https://github.com/flaviocopes/gitbook), a little [Node.js](https://flaviocopes.com/nodejs/) software used to generate an ebook from a set of markdown files.

I use it for my ebooks. Today I was trying to generate a PDF, running `gitbook pdf .`, when I got a really weird error:

```sh
➜  ebook git:(master) ✗ gitbook pdf .
/usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:287
      if (cb) cb.apply(this, arguments)
                 ^

TypeError: cb.apply is not a function
    at /usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:287:18
```

`cb.apply is not a function`. What does this even mean? And most importantly, why do I have this error *now*? I didn't update the gitbook package recently, and I didn't... Oh I think I updated the Node.js version I run. But I have no idea why this should be the problem. Maybe it is. 

Anyway.. the error comes from the `/usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js` file. This is the [`graceful-js` npm package](https://www.npmjs.com/package/graceful-fs), a "drop-in replacement for the built-in Node.js `fs` module, making various improvements", installed over 33 million times a week.

One of those improvements seems to break my workflow, today!

I don't have a lot of time free to find out why my Node.js version gives problems with this application I didn't create and this library.

I opened the file `/usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js`, where the error comes from. 

Here's the function that gives the problem:

```js
function statFix (orig) {
  if (!orig) return orig
  // Older versions of Node erroneously returned signed integers for
  // uid + gid.
  return function (target, cb) {
    return orig.call(fs, target, function (er, stats) {
      if (!stats) return cb.apply(this, arguments)
      if (stats.uid < 0) stats.uid += 0x100000000
      if (stats.gid < 0) stats.gid += 0x100000000
      if (cb) cb.apply(this, arguments)
    })
  }
}
```

This seems to fix something in older version of Node.js.. it shouldn't be needed for me.

I see it's being used in lines 62-64 of the same file:

```js
fs.stat = statFix(fs.stat)
fs.fstat = statFix(fs.fstat)
fs.lstat = statFix(fs.lstat)
```

I commented out those lines:

```js
// fs.stat = statFix(fs.stat)
// fs.fstat = statFix(fs.fstat)
// fs.lstat = statFix(fs.lstat)
```

and everything worked fine, I was able to run the `gitbook` command again, and I got my nice PDF.
