{"bin":{"batfish":"bin/batfish.js"},"bugs":{"url":"https://github.com/mapbox/batfish/issues"},"dist":{"shasum":"66c832f27f2df95e75f0a210a1154f8efa0d7d74","tarball":"https://registry.npmjs.org/@mapbox/batfish/-/batfish-1.1.0-rc.0.tgz","fileCount":79,"integrity":"sha512-7boOSCcUSG8CxwuQkA9tkideuRzfwMfF6SnWiuZrCQihDw/zj/xRtcAaV4MXT2YS6QXnp3KpIsP3brdvcG9NAA==","signatures":[{"sig":"MEUCIQDvQkhU0Jh+mFn24VFAsd7b0X+wp5rzgOoFt5euM/zPhQIgMUsiMXTT2tSQQyd+OqS6EGHUzluZw1cmcA/qFMEA3xE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":195682},"jest":{"roots":["./test"],"clearMocks":true,"setupFiles":["<rootDir>/test/test-util/jest-setup.js"],"testEnvironment":"node","coverageReporters":["text","html"]},"main":"dist/node/index.js","name":"@mapbox/batfish","babel":{"plugins":["transform-class-properties"],"presets":["env","react"]},"files":["bin","docs","modules","dist"],"author":{"name":"Mapbox"},"readme":"# Batfish\n\n[![Build Status](https://travis-ci.org/mapbox/batfish.svg?branch=master)](https://travis-ci.org/mapbox/batfish)\n\nA static-site generator powered by React and Webpack.\n\n![](./batfish-dark.png)\n\n## Table of contents\n\n- [Other documentation to check out](#other-documentation-to-check-out)\n- [Goals](#goals)\n- [Usage](#usage)\n- [Requirements](#requirements)\n- [API](#api)\n  - [Configuration](#configuration)\n  - [CLI](#cli)\n  - [Node API](#node-api)\n- [Pages](#pages)\n  - [JS pages](#js-pages)\n  - [Markdown pages](#markdown-pages)\n  - [Non-page files within the pages directory](#non-page-files-within-the-pages-directory)\n  - [Path not found: 404](#path-not-found-404)\n- [Routing](#routing)\n  - [Links](#links)\n  - [Prefixing URLs](#prefixing-urls)\n  - [Programmatically changing pages](#programmatically-changing-pages)\n- [CSS](#css)\n- [Document &lt;head>](#document-head)\n- [Development server](#development-server)\n- [Advanced usage](#advanced-usage)\n- [Comparison to other React-powered static-site generators](#comparison-to-other-react-powered-static-site-generators)\n\n## Other documentation to check out\n\n- [`docs/configuration.md`](docs/configuration.md)\n- [`docs/batfish-modules.md`](docs/batfish-modules.md)\n- [`docs/node-api.md`](docs/node-api.md)\n- [`docs/q-and-a.md`](docs/q-and-a.md)\n\n## Goals\n\nBatfish aims to provide *the essentials* for building excellent static websites with React and Webpack.\n\n- **(Universal) React.**\n  Use React components as your building blocks.\n  Your components are rendered into HTML pages at build time and then mounted in the browser for interactivity at run time.\n- **Super-powered Markdown pages.**\n  Batfish supports [jsxtreme-markdown] pages, which allow for interpolated JS expressions and JSX elements.\n- **Client-side routing with key features and minimal overhead.**\n  There is often no need for a big router library, but there *is* a need for often-overlooked features like automatic link hijacking (via [link-hijacker]) and scroll restoration (via [scroll-restorer]).\n- **Essential optimizations.**\n  JS bundles split by page and loaded on demand.\n  Hashed asset filenames for long-term caching.\n  Essential CSS injected into static HTML (via [postcss-html-filter]).\n  And so on.\n- **Minimal configuration.**\n  Though almost every user will want to set a couple of configuration properties, you might not need more than that — and none are required.\n- **Minimal.**\n  Batfish does not aim to be an ecosystem unto itself.\n  Instead, we've kept the codebase focused on a finite set of problems, while allowing extensibility by providing clear access to the underlying tools (React, Webpack, and Babel).\n  We've also tried to abstract generalizable functionality into independent npm packages, like [jsxtreme-markdown], [link-hijacker], and [scroll-restorer].\n  You can use these packages outside of Batfish — they are not coupled to Batfish conventions or configuration.\n\n## Usage\n\nHere are the basic steps:\n\n1. Create a [configuration] module.\n2. Create some [pages] as React components and/or Markdown documents.\n3. Start the development server with the Batfish CLI, then work on your pages.\n4. At some point, build your static site and deploy it.\n\nThe [\"Hello world guide\"] can help you get started.\n\nLook at [`examples/basic/`](examples/basic) for a simple example project.\nFor a more advanced example project, check out [`examples/miscellany/`](examples/miscellany).\n\n## Requirements\n\n- You'll need Node >=6.\n- The client-side code has been tested down to IE11.\n  To support IE11, **a Promise polyfill is included by default.**\n  If you would like to provide your own Promise polyfill, set the [`includePromisePolyfill`] option to `false`.\n\n## API\n\n### Configuration\n\nBy default, all Batfish CLI commands look for `batfish.config.js` at the root of your project.\nIt should export a function that returns your configuration object.\n\nFor example:\n\n```js\nmodule.exports = () => {\n  return {\n    siteBasePath: '/my/site/base/path',\n    siteOrigin: 'https://www.mydomain.com'\n    // Add more configuration options here ...\n  };\n}\n```\n\nSee [`docs/configuration.md`](docs/configuration.md) to learn about all the ways you can configure Batfish.\n\n### CLI\n\nThe CLI has the following commands:\n\n- `start`: Start a development server and watch files for changes, rebuilding and refreshing as needed.\n- `build`: Build the static site.\n- `serve-static`: Serve the static site.\n- `write-babelrc`: Write a `.babelrc` file that other processes, like your test runner, can use.\n\nAll commands will look for your configuration module in the current working directory or where you point with the `--config` option.\n\nFor more details, run `batfish --help` or see [`docs/cli.md`](docs/cli.md).\n\n**You should not install the Batfish CLI globally.**\nInstall Batfish as an npm dependency and use the CLI via npm `\"scripts\"`, npx, or `node_modules/.bin/batfish`.\n\n### Node API\n\nUsually you should use the Batfish CLI.\nBut for those special cases when you want absolute control within a Node process, all the CLI's functionality is available in a Node API.\n\nSee [`docs/node-api.md`](docs/node-api.md).\n\n## Pages\n\n**The structure of your [`pagesDirectory`] determines the URLs of your site.**\nJavaScript (`.js`) and Markdown (`.md`) files map directly to corresponding URLs.\n\nSo `src/pages/industries/real-estate.js` corresponds to the URL `/industries/real-estate/`,\nand `src/pages/about/index.md` corresponds to the URL `/about/`.\n\nWhen a page is rendered, its component is passed the following props:\n\n- `location`: The browser's current [Location](https://developer.mozilla.org/en-US/docs/Web/API/Location).\n  (During the static build, this will only include the `pathname` property.)\n- `frontMatter`: The page's parsed front matter (parsed by [gray-matter]).\n\n### JS pages\n\nJS pages must export a React component with either `export default` (ES2015 modules) or `module.exports` (Node.js modules).\n\nJS pages can include front matter within block comments, delimited by `/*---` and `---*/`.\n\nFor example:\n\n```js\n/*---\ntitle: Power tie catalog\n---*/\nimport React from 'react';\n\nexport default class PowerTiePage extends React.PureComponent {\n  render() {\n    return (\n      <div>\n        <h1>{this.props.frontMatter.title}</h1>\n        <p>Content forthcoming ...</p>\n      </div>\n    );\n  }\n}\n```\n\n### Markdown pages\n\nMarkdown pages can include front matter delimited by `---`.\n\n**These files are interpreted as [jsxtreme-markdown], so the Markdown text can include interpolated JS expressions and JSX elements!**\nThey are transformed into React components.\n\nAll the props for the page (e.g. `frontMatter`, `location`) are available on `props`, e.g. `props.frontMatter.title`.\n\nFor example:\n\n```md\n---\ntitle: Power tie catalog\n---\n\n# {{ props.frontMatter.title }}\n\nContent forthcoming ...\n```\n\nIf you haven't seen [jsxtreme-markdown] before, [try it out online](https://mapbox.github.io/jsxtreme-markdown/).\n\n#### Markdown page wrapper components\n\nYou need a wrapper component for each of your Markdown pages.\nYou can specify a site-wide default wrapper, and also wrappers for specific Markdown pages.\nThe wrapper component should be a React component (the default export of its module) which accepts the page's props and renders the Markdown content as `{this.props.children}`.\nBecause it will receive the page's front matter as `this.props.frontMatter`, you can use front matter to fill out different parts of the wrapper (just like a Jekyll layout).\n\nExample:\n\n```js\n// blog-post-wrapper.js\nimport React from 'react';\nimport { MyPageShell } from './my-page-shell';\n\nexport default class BlogPostWrapper extends React.PureComponent {\n  render() {\n    const { frontMatter } = this.props;\n    return (\n      <MyPageShell>\n        <h1>{frontMatter.title}</h1>\n        <p>\n          <strong>Summary:</strong> {frontMatter.summary}\n        </p>\n        <p>\n          Posted on {frontMatter.date}\n        </p>\n        {this.props.children}\n      </MyPageShell>\n    );\n  }\n}\n```\n\n```markdown\n---\nwrapper: '../path/to/blog-post-wrapper'\ntitle: Today I cleaned my refrigerator\nsummary: You can't put off your responsibilities forever, and refrigerators do not clean themselves. So I cleaned my refrigerator.\ndate: January 7, 2016\n---\n\n## Why did I do it\n\nThings had started to smell ...\n\n## How did I do it\n\nI love shopping for cleaning supplies ...\n```\n\nSee [`examples/miscellany/`](examples/miscellany) to learn more about what's possible with Markdown wrappers.\n\n#### Import JS modules into jsxtreme-markdown\n\nIn jsxtreme-markdown components, you can specify JS modules to import and use within the interpolated code using [`prependJs` front matter](https://github.com/mapbox/jsxtreme-markdown/tree/master/packages/jsxtreme-markdown#prependjs).\nList lines of `import` or `require` statements that define variables you can use in your interpolated JS and JSX.\n\nBy default, the following lines are always specified:\n\n- `import prefixUrl from '@mapbox/batfish/modules/prefix-url'`: See [Prefixing URLs].\n- `import routeTo from '@mapbox/batfish/modules/route-to')`: See docs for the [`route-to`] module.\n\nThis means that those functions can be used with no additional configuration.\nImport your own modules and do more things.\n\nExample:\n\n```markdown\n---\nprependJs:\n  - \"import { myDateFormatter } from './path/to/my-date-formatter';\"\n---\n\nLearn more about [security]({{prefixUrl('/about/security')}}).\n\nToday is {{myDateFormatter('2015-08-21')}}\n```\n\n### Non-page files within the pages directory\n\nSometimes you need to put an asset at a specific URL.\nYou may want a `favicon.ico` in the root directory, for example; or a special image for social media `<meta>` tags on a page.\nFor this reason, **any non-page files within the [`pagesDirectory`] are copied directly into the same location during the static build.**\n\n*When you access these files from pages, though, you need to use root-relative or absolute URLs.*\nThat is, within `src/pages/foo/bar.js` you cannot access `src/pages/foo/bar.jpg` as `bar.jpg`: you need to use `/foo/bar.jpg`.\nYou may want to [prefix the URLs](#prefixing-urls), also.\n\n### Path not found: 404\n\nCreate a custom 404 page by adding `404.js` (or `404.md`) to the root of your [`pagesDirectory`].\n\nIn development, you can expect to see your 404 page by entering an invalid path.\nWhen you build for [`production`], though, your 404 page will need to be handled and rendered by the server.\n(If you run your [`production`] build locally with `serve-static`, expect to see `Cannot GET /yourInvalidPathHere`.)\n\n## Routing\n\nBatfish builds you a minimal client-side router with Webpack bundle splitting by page.\n\n### Links\n\n**You can use regular `<a>` elements throughout your site.**\nWhen the user clicks a link, Batfish checks to see if the link's `href` refers to a page it knows about.\nIf so, client-side routing is used.\nIf not, the link behaves normally.\n\nIf you would like to use an `<a>` without this link-hijacking (e.g. for your own internal routing within a page), you can give it (or one of its ancestor elements) the attribute `data-batfish-no-hijack`.\n\nThis is all accomplished with [link-hijacker].\n\n### Prefixing URLs\n\nTo prefix URLs with your [`siteBasePath`] and [`siteOrigin`] configuration options, use the [`prefix-url`] module.\n\n### Programmatically changing pages\n\nTo change pages programmatically, with JavaScript, use the [`route-to`] module.\n\n## CSS\n\nAdd stylesheets to your site with the [`stylesheets`] configuration option.\nList all your stylesheets, URLs or filepaths, in the order you'd like, and Batfish will concatenate them together and add them to the build.\nYou can also pass them through whatever [PostCSS] plugins you'd like, with the [`postcssPlugins`] configuration option.\n\n**During the static build, each page has its relevant CSS injected inline, and the complete stylesheet is loaded lazily, after the rest of the page is rendered.**\nThis optimization ensures that the loading of an external stylesheet does not block rendering, and your page content is visible as quickly as possible.\n(This is accomplished with [postcss-html-filter].)\n\nAssets referenced by `url()`s in your stylesheets will be hashed and copied to Batfish's [`outputDirectory`].\n\nYou can also add page-specific CSS (processed through the same PostCSS pipeline), if you find yourself adding lots of CSS rules that are not used on multiple pages.\nRead more about [\"Page-specific CSS\"].\n\n**If you want to bypass this CSS system and use your own, just do it.**\nYou can use the [`webpackLoaders`] and [`webpackPlugins`] configuration options to do whatever you need.\n\n(Curious or concerned? Check out the [Q&A entries about CSS](docs/q-and-a.md).)\n\n## Document `<head>`\n\n**Use [react-helmet] to add things the document `<head>`**, (e.g. `<title>` and `<meta>` tags).\n\nBatfish has a [peer dependency](https://nodejs.org/en/blog/npm/peer-dependencies/) on [react-helmet].\nYou definitely want to use it.\nA good pattern is to create a `PageShell` React component that accepts props that it uses to populate that page's `<head>`.\n\n## Development server\n\nThe development server (for `start` and `serve-static` commands) is a [Browsersync] server, which provides a nice experience for cross-device testing.\n\nWhen you change a file, Webpack will recompile and the browser will automatically refresh.\n\n(Why not hot module reloading?\nSeemed like more trouble than it's worth.\nBut if you want to help add the feature, please open an issue.)\n\n## Advanced usage\n\nAdditional documentation can be found in [`docs/advanced-usage.md`](docs/advanced-usage.md).\n\n## Comparison to other React-powered static-site generators\n\nWe built Batfish by systematically addressing a set of problems we've had while building websites with React components.\nWe focused first on the problems themselves, trying to develop effective and focused, minimalistic solutions.\nSometimes this meant we used a popular tool, like Webpack.\nOther times we sidestepped a popular tool, like React Router, and opted to build something more fitted to our needs.\n\nAs a result, Batfish is smaller and less ambitious than projects like [Gatsby](https://www.gatsbyjs.org/) and [Next.js](https://github.com/zeit/next.js/).\nIt's a thinner wrapper over the underlying tools, not an ecosystem of its own — more of a gateway into existing ecosystems.\n\nBatfish also includes some features that we considered important but are overlooked by similar projects, like powerful Markdown integration and link hijacking.\n(Though we tried to build such features in such a way that they could be re-used in other contexts.\n  Try [jsxtreme-markdown] in your Gatsby site!)\n\nSince we use Batfish for vital projects, we prioritize the needs of end-users (website visitors) and the stability, simplicity, and clarity of the system.\n\nPlease let us know what you think!\n\n![The batfish](https://upload.wikimedia.org/wikipedia/commons/thumb/2/2d/Longnose_batfish.jpg/320px-Longnose_batfish.jpg)\n\n[configuration]: #configuration\n\n[pages]: #pages\n\n[prefixing urls]: #prefixing-urls\n\n[`pagesdirectory`]: docs/configuration.md#pagesdirectory\n\n[`outputdirectory`]: docs/configuration.md#outputdirectory\n\n[`dataselectors`]: docs/configuration.md#dataselectors\n\n[`sitebasepath`]: docs/configuration.md#sitebasepath\n\n[`siteorigin`]: docs/configuration.md#siteorigin\n\n[`production`]: docs/configuration.md#production\n\n[`stylesheets`]: docs/configuration.md#stylesheets\n\n[`includepromisepolyfill`]: docs/configuration.md#includepromisepolyfill\n\n[`webpackloaders`]: docs/configuration.md#webpackloaders\n\n[`webpackplugins`]: docs/configuration.md#webpackplugins\n\n[jsxtreme-markdown]: https://github.com/mapbox/jsxtreme-markdown\n\n[link-hijacker]: https://github.com/mapbox/link-hijacker\n\n[scroll-restorer]: https://github.com/mapbox/scroll-restorer\n\n[react-helmet]: https://github.com/nfl/react-helmet\n\n[browsersync]: https://www.browsersync.io/\n\n[postcss-html-filter]: https://github.com/mapbox/postcss-html-filter\n\n[postcss]: http://postcss.org/\n\n[\"injecting data\"]: docs/advanced-usage.md#injecting-data\n\n[`postcssplugins`]: docs/configuration.md#postcssplugins\n\n[gray-matter]: https://github.com/jonschlinkert/gray-matter\n\n[`route-to`]: docs/batfish-modules.md#route-to\n\n[`prefix-url`]: docs/batfish-modules.md#prefix-url\n\n[\"page-specific css\"]: docs/advanced-usage.md#page-specific-css\n\n[\"hello world guide\"]: docs/hello-world.md\n","engines":{"npm":">=5","node":">=6"},"gitHead":"68e7aa7cde6cb118ceab0966bc8d24c054294b57","license":"ISC","scripts":{"lint":"run-p --aggregate-output lint-js lint-md lint-flow","test":"jest --maxWorkers=4","build":"run-p build-webpack-modules build-dist","format":"prettier --single-quote --write '{,src*/**/,bin/**/,test/**/,flow-typed/}*.js'","lint-js":"eslint .","lint-md":"npm run lint-md-partial -- docs/*.md *.md","pretest":"npm run lint","lint-flow":"flow check","precommit":"lint-staged","test-jest":"jest","build-dist":"del dist && cd src && cpy '**/*.*' ../dist --parents && cd .. && flow-remove-types dist/ --out-dir dist/ --quiet && cpy src/node/index.js dist/node --rename index.js.flow","prepublishOnly":"npm run build","lint-md-partial":"remark -u remark-preset-davidtheclark --frail --quiet --no-stdout --output --","build-webpack-modules":"del modules && babel src/webpack/public --out-dir modules --quiet"},"_npmUser":{"name":"davidtheclark","email":"david.dave.clark@gmail.com"},"homepage":"https://github.com/mapbox/batfish#readme","prettier":{"singleQuote":true},"repository":{"url":"git+https://github.com/mapbox/batfish.git","type":"git"},"_npmVersion":"5.7.1","description":"The React-powered static-site generator you didn't know you wanted","directories":{},"lint-staged":{"**/*.js":["eslint","prettier --single-quote --write","git add"],"{docs/*.md,README.md,CHANGELOG.md}":["npm run lint-md-partial","git add"],"{bin/batfish.js,bin/write-cli-doc.js}":["bin/write-cli-doc.js","git add docs/cli.md"]},"maintainers":[{"name":"1ec5","email":"mxn@1ec5.org"},{"name":"aaaandrea","email":"andrea.delrio@mapbox.com"},{"name":"aarthykc","email":"aarthy@mapbox.com"},{"name":"ajashton","email":"aj@mapbox.com"},{"name":"akit","email":"angel.kittiyachavalit@gmail.com"},{"name":"alianthes","email":"ali@mapbox.com"},{"name":"aliceykuo","email":"alice@mapbox.com"},{"name":"alinapaz","email":"alinapaz@gmail.com"},{"name":"allierowan","email":"aileen.s.rowan@gmail.com"},{"name":"alulsh","email":"ulsh@mapbox.com"},{"name":"amishas157","email":"amisha@mapbox.com"},{"name":"ampetr89","email":"anna.petrone@mapbox.com"},{"name":"amyleew","email":"amyleewalton@gmail.com"},{"name":"anandthakker","email":"vestibule@anandthakker.net"},{"name":"andygol","email":"andrey@mapbox.com"},{"name":"angela.navarro","email":"angela.navarro@mapbox.com"},{"name":"ansis","email":"ansis.brammanis@gmail.com"},{"name":"aparlato","email":"alex.parlato@mapbox.com"},{"name":"apavani","email":"adarsh.pavani@mapbox.com"},{"name":"apendleton","email":"andrew@mapbox.com"},{"name":"arunasank","email":"aruna@mapbox.com"},{"name":"asheemmamoowala","email":"asheemm@gmail.com"},{"name":"atevans-mapbox","email":"andrew.evans@mapbox.com"},{"name":"benjamintd","email":"benjamin@mapbox.com"},{"name":"bhousel","email":"bryan@mapbox.com"},{"name":"bkowshik","email":"bhargav.kowshik@gmail.com"},{"name":"boblannon","email":"blannon@gmail.com"},{"name":"brendanmcfarland","email":"brendan@mapbox.com"},{"name":"brsbl","email":"bersabel.tadesse@mapbox.com"},{"name":"brunoabinader","email":"bruno@mapbox.com"},{"name":"bsrinivasa","email":"bharata+npm@mapbox.com"},{"name":"bsudekum","email":"bobby@mapbox.com"},{"name":"camillacaros","email":"camilla@mapbox.com"},{"name":"camilo.sanin","email":"camilo.sanin@mapbox.com"},{"name":"cammace","email":"cameron@mapbox.com"},{"name":"captainbarbosa-mbx","email":"nadia.barbosa@mapbox.com"},{"name":"caseymm","email":"caseymm@gmail.com"},{"name":"castledoor","email":"b.jazzy.w@gmail.com"},{"name":"charloyd","email":"charlie@mapbox.com"},{"name":"chaupow","email":"hello@chau-nguyen.de"},{"name":"chetangowda","email":"chethan@mapbox.com"},{"name":"chriscx","email":"christopher.cailleaux@gmail.com"},{"name":"chrisloer","email":"chris.loer@mapbox.com"},{"name":"cknouss","email":"christopher.knouss@mapbox.com"},{"name":"cmtoomey","email":"toomey.chris@gmail.com"},{"name":"colleenmcginnis","email":"colleen.mcginnis@mapbox.com"},{"name":"d-prukop","email":"dave.prukop@mapbox.com"},{"name":"danieljh","email":"daniel+npm@trvx.org"},{"name":"danmactough","email":"danmactough@gmail.com"},{"name":"danpat","email":"danpat@danpat.net"},{"name":"danpaz-mb","email":"daniel.paz-soldan@mapbox.com"},{"name":"danswick","email":"dan@mapbox.com"},{"name":"dasulit","email":"dana.sulit@mapbox.com"},{"name":"davidtheclark","email":"david.dave.clark@gmail.com"},{"name":"deniskoronchik","email":"denis.koronchik@gmail.com"},{"name":"dgearhart","email":"duane.gearhart@mapbox.com"},{"name":"dhcole","email":"dave@mapbox.com"},{"name":"dianeschulze","email":"diane.e.schulze@gmail.com"},{"name":"dnesbitt","email":"david.nesbitt@mapbox.com"},{"name":"dnomadb","email":"damon@mapbox.com"},{"name":"dputtick","email":"daniel.puttick@mapbox.com"},{"name":"drboyer","email":"devin.boyer@mapbox.com"},{"name":"dthompson","email":"dthompson@gmail.com"},{"name":"edgar-marca","email":"edgar.marca@mapbox.com"},{"name":"electrostat","email":"anthony.agby@mapbox.com"},{"name":"elifitch","email":"eli.fitch.prof+npm@gmail.com"},{"name":"emilymcafee","email":"emily@mapbox.com"},{"name":"emilymdubois","email":"dubois@mapbox.com"},{"name":"enf","email":"fischer@mapbox.com"},{"name":"ericdeveloper","email":"eric.alessandrini@mapbox.com"},{"name":"eschow","email":"emily.chow@mapbox.com"},{"name":"fa7c0n","email":"gokul.ganesan@mapbox.com"},{"name":"fabianguerra","email":"fabian.guerra@gmail.com"},{"name":"flippmoke","email":"flippmoke@gmail.com"},{"name":"franka","email":"hello@franka.tech"},{"name":"freenerd","email":"spam@freenerd.de"},{"name":"friedbunny","email":"friedbunny@users.noreply.github.com"},{"name":"geografa","email":"rafa@mapbox.com"},{"name":"ghoshkaj","email":"ghoshkaj@gmail.com"},{"name":"gknisely","email":"greg.knisely@mapbox.com"},{"name":"gretacb","email":"carol@mapbox.com"},{"name":"guardiola31337","email":"pablo.guardiola@mapbox.com"},{"name":"heyadam_mapbox","email":"adam.debreczeni@mapbox.com"},{"name":"hjudge","email":"hjudge@mapbox.com"},{"name":"ian29","email":"ian.villeda@gmail.com"},{"name":"ianshward","email":"ian@mapbox.com"},{"name":"ilyasaf","email":"safonov.ilya@gmail.com"},{"name":"ingalls","email":"ingalls@protonmail.com"},{"name":"isiyu","email":"siyu.song@gmail.com"},{"name":"ivovandongen","email":"info@ivovandongen.nl"},{"name":"jacquestardie","email":"hi@jacquestardie.org"},{"name":"jayana","email":"jayana.charles@mapbox.com"},{"name":"jc-clark","email":"joe.clark@mapbox.com"},{"name":"jcsg","email":"john.sylak-glassman@mapbox.com"},{"name":"jfirebaugh","email":"john.firebaugh@gmail.com"},{"name":"jim-martin","email":"jim.martin@mapbox.com"},{"name":"jinnycho503","email":"jinny.cho@mapbox.com"},{"name":"jjanczyszyn","email":"justyna.janczyszyn@mapbox.com"},{"name":"jmkiley","email":"jordan.kiley@mapbox.com"},{"name":"jordanwebb","email":"jordan.webb@mapbox.com"},{"name":"jothirnadh","email":"jothirnadh@mapbox.com"},{"name":"jrpruit1","email":"jake@jakepruitt.com"},{"name":"juliannebg","email":"julianne@mapbox.com"},{"name":"k-mahoney","email":"kara.e.mahoney@gmail.com"},{"name":"kaibot3000","email":"kai@mapbox.com"},{"name":"kalimar","email":"kalimar.maia@gmail.com"},{"name":"karenell","email":"karen.ellenberger@mapbox.com"},{"name":"karenzshea","email":"karen@mapbox.com"},{"name":"katydecorah","email":"decorah@mapbox.com"},{"name":"kdiluca","email":"kristen.diluca@mapbox.com"},{"name":"kellyoung","email":"kelly.young@mapbox.com"},{"name":"kepta","email":"0o3ko0@gmail.com"},{"name":"kevinkreiser","email":"kevinkreiser@gmail.com"},{"name":"kilatsat","email":"kilatsat@gmail.com"},{"name":"kkaefer","email":"mail@kkaefer.com"},{"name":"l-r","email":"laurier@mapbox.com"},{"name":"langstonsmith","email":"langston.smith@mapbox.com"},{"name":"lbud","email":"lauren@mapbox.com"},{"name":"lily-chai","email":"lily@mapbox.com"},{"name":"lingoded","email":"lauri.rustanius@mapbox.com"},{"name":"lizziegooding","email":"lizzie.gooding@mapbox.com"},{"name":"lobenichou","email":"lo_benichou@protonmail.com"},{"name":"lshig","email":"liz.shigetoshi@mapbox.com"},{"name":"lucaswoj","email":"lucas@lucaswoj.com"},{"name":"luiswalter","email":"luis@mapbox.com"},{"name":"lukasmartinelli","email":"me@lukasmartinelli.ch"},{"name":"lukaspaczos","email":"lukasz.paczos@mapbox.com"},{"name":"lxbarth","email":"alex@mapbox.com"},{"name":"lyzidiamond","email":"lyzi@mapbox.com"},{"name":"macro-shen","email":"macro.shen@mapbox.com"},{"name":"maikyon","email":"mai.nguyen@mapbox.com"},{"name":"mal-wood","email":"mallorywood413@gmail.com"},{"name":"maning","email":"emmanuel.sambale@gmail.com"},{"name":"manoharuss","email":"manohar@mapbox.com"},{"name":"mapbox-admin","email":"accounts@mapbox.com"},{"name":"mapsam","email":"sam@mapbox.com"},{"name":"markmisener","email":"mark.misener@mapbox.com"},{"name":"mateov","email":"matt@mapbox.com"},{"name":"matt.gosline","email":"matt.gosline@mapbox.com"},{"name":"mattficke","email":"matt@mattficke.com"},{"name":"mcwhittemore","email":"mcwhittemore@gmail.com"},{"name":"miccolis","email":"jeff@miccolis.net"},{"name":"mikelmaron","email":"mikel@groundtruth.in"},{"name":"millzpaugh","email":"ann.millspaugh@gmail.com"},{"name":"mollymerp","email":"mollylloyd@gmail.com"},{"name":"morgane","email":"morgane.santos@mapbox.com"},{"name":"morganherlocker","email":"morgan.herlocker@gmail.com"},{"name":"mourner","email":"agafonkin@gmail.com"},{"name":"msirenko","email":"max@mapbox.com"},{"name":"mtirwin","email":"irwin@mapbox.com"},{"name":"nammala","email":"krishna@mapbox.com"},{"name":"natslaughter","email":"nat@mapbox.com"},{"name":"nickcordella","email":"nick.cordella@mapbox.com"},{"name":"nickidlugash","email":"nicki@mapbox.com"},{"name":"nickitaliano","email":"nick.italiano@mapbox.com"},{"name":"nikhilprabhakar","email":"nikinfour@gmail.com"},{"name":"nmargolis","email":"nmargolis89@gmail.com"},{"name":"norchard","email":"norchard24@gmail.com"},{"name":"normanb","email":"norman.barker@mapbox.com"},{"name":"oini","email":"oindrila.gupta92@gmail.com"},{"name":"okoriep","email":"okorie.puryear@mapbox.com"},{"name":"oliikit","email":"olivia.brundage@mapbox.com"},{"name":"oormilavinod","email":"oormila@mapbox.com"},{"name":"otherwiseman","email":"laura.mooney@mapbox.com"},{"name":"oxidase","email":"michael.krasnyk@gmail.com"},{"name":"paigemoody","email":"paige.moody@mapbox.com"},{"name":"pdgoodman","email":"paul@mapbox.com"},{"name":"perrygeo","email":"perry@mapbox.com"},{"name":"peterqliu","email":"peterqliu@gmail.com"},{"name":"planemad","email":"arun.planemad@gmail.com"},{"name":"poornibadrinath","email":"poornima@mapbox.com"},{"name":"pratikyadav","email":"pratik@mapbox.com"},{"name":"pt-44","email":"patrick.taylor@mapbox.com"},{"name":"pveugen","email":"paul@pave4.com"},{"name":"rasagy","email":"rasagy@mapbox.com"},{"name":"rclark","email":"ryan.clark.j@gmail.com"},{"name":"rcleedev","email":"randall.lee@mapbox.com"},{"name":"recursivefunk","email":"johnny@johnnyray.me"},{"name":"rmrice","email":"rebecca.rice@mapbox.com"},{"name":"ryan-baumann","email":"ryan.baumann@mapbox.com"},{"name":"sabaelhilo","email":"saba.elhilo2@gmail.com"},{"name":"sabzo","email":"sabelo.mhlambi@mapbox.com"},{"name":"sadiew","email":"sewilhelm@gmail.com"},{"name":"saikia.abhishek","email":"abhishek@mapbox.com"},{"name":"samanbb","email":"saman@mapbox.com"},{"name":"samely","email":"eliane@mapbox.com"},{"name":"samfader","email":"sam.fader@mapbox.com"},{"name":"sbma44","email":"tlee@mapbox.com"},{"name":"scottschultz","email":"scott.schultz@mapbox.com"},{"name":"scottsfarley93","email":"scott.farley@mapbox.com"},{"name":"sgillies","email":"sean@mapbox.com"},{"name":"springmeyer","email":"dane@mapbox.com"},{"name":"srividyacb","email":"srividyabharadwaj26@gmail.com"},{"name":"tapasweni-pathak","email":"tapasweni@mapbox.com"},{"name":"taziam","email":"tara.adiseshan@gmail.com"},{"name":"tcql","email":"tim.channell@gmail.com"},{"name":"themarex","email":"patrick@mapbox.com"},{"name":"tmpsantos","email":"tmpsantos@gmail.com"},{"name":"tony-cj","email":"tony.chen@mapbox.com"},{"name":"tridip1931","email":"tridip@mapbox.com"},{"name":"tristen","email":"tristen.brown@gmail.com"},{"name":"upendrayadav","email":"upendra@mapbox.com"},{"name":"vakila","email":"anjana.vakil@mapbox.com"},{"name":"vincents","email":"vincent.sarago@mapbox.com"},{"name":"virginiayung","email":"virginia@mapbox.com"},{"name":"vladimir.kananovich","email":"vladimir.kananovich@mapbox.com"},{"name":"willwhite","email":"will@mapbox.com"},{"name":"xianny","email":"xianny@gmail.com"},{"name":"yhahn","email":"young@mapbox.com"},{"name":"yuffster","email":"msteigerwalt@gmail.com"},{"name":"yuletide","email":"alexy@codeforamerica.org"},{"name":"zmully","email":"mully@mapbox.com"},{"name":"zugaldia","email":"antonio@mapbox.com"},{"name":"zurihunter92","email":"zurihunter92@gmail.com"}],"_nodeVersion":"8.9.4","dependencies":{"cpy":"^6.0.0","del":"^3.0.0","got":"^8.2.0","meow":"^4.0.0","pify":"^3.0.0","chalk":"^2.3.1","hasha":"^3.0.0","p-try":"^1.0.0","slugg":"^1.2.1","tempy":"^0.2.1","globby":"^8.0.1","lodash":"^4.17.5","mkdirp":"^0.5.1","del-cli":"^1.1.0","is-glob":"^4.0.0","postcss":"^6.0.19","webpack":"^3.11.0","chokidar":"^2.0.2","get-port":"^3.2.0","prettier":"^1.11.1","fasterror":"^1.1.0","uglify-js":"^3.3.11","indefinite":"^2.1.1","micromatch":"^3.1.9","prop-types":"^15.6.0","remark-toc":"^5.0.0","time-stamp":"^2.0.0","es6-promise":"^4.2.4","file-loader":"^1.1.8","gray-matter":"^3.1.1","postcss-url":"^7.3.0","worker-farm":"^1.5.2","autoprefixer":"^8.0.0","babel-loader":"^7.1.2","browser-sync":"^2.23.6","loader-utils":"^1.1.0","postcss-csso":"^3.0.0","pretty-error":"^2.1.1","resolve-from":"^4.0.0","ignore-loader":"^0.1.2","webpack-merge":"^4.1.1","babel-register":"^6.26.0","sitemap-static":"^0.4.2","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","source-map-support":"^0.5.3","webpack-chunk-hash":"^0.5.0","html-webpack-plugin":"^2.30.1","@mapbox/link-hijacker":"^1.1.0","assets-webpack-plugin":"^3.5.1","postcss-values-parser":"^1.3.2","concat-with-sourcemaps":"^1.0.5","@mapbox/scroll-restorer":"^1.0.0","uglifyjs-webpack-plugin":"^1.2.0","webpack-format-messages":"^1.0.1","@mapbox/link-to-location":"^1.0.0","remark-lint-no-dead-urls":"^0.3.0","@mapbox/postcss-html-filter":"^1.0.0","connect-history-api-fallback":"^1.5.0","babel-plugin-transform-runtime":"^6.23.0","@mapbox/jsxtreme-markdown-loader":"^0.5.3","babel-plugin-syntax-dynamic-import":"^6.18.0","@mapbox/query-selector-contains-node":"^1.0.0","babel-plugin-transform-react-jsx-self":"^6.22.0","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-react-jsx-source":"^6.22.0","babel-plugin-transform-react-remove-prop-types":"^0.4.13","@mapbox/babel-plugin-transform-jsxtreme-markdown":"^0.4.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^22.4.2","husky":"^0.14.3","react":"^16.2.0","enzyme":"^3.3.0","eslint":"^4.18.1","cpy-cli":"^1.0.1","flow-bin":"^0.66.0","babel-cli":"^6.26.0","path-type":"^3.0.0","react-dom":"^16.2.0","remark-cli":"^5.0.0","strip-ansi":"^4.0.0","lint-staged":"^7.0.0","npm-run-all":"^4.1.2","babel-eslint":"^8.2.2","react-helmet":"^5.2.0","enzyme-to-json":"^3.3.1","flow-remove-types":"^1.2.3","eslint-plugin-node":"^6.0.0","eslint-plugin-react":"^7.7.0","react-test-renderer":"^16.2.0","flow-coverage-report":"^0.4.1","remark-validate-links":"^7.0.0","eslint-plugin-flowtype":"^2.45.0","enzyme-adapter-react-16":"^1.1.1","eslint-plugin-filenames":"^1.2.0","@mapbox/vnu-validate-html":"^0.1.0","remark-preset-davidtheclark":"^0.7.0"},"peerDependencies":{"react":"^15.5.0 || ^16.0.0","react-dom":"^15.5.0 || ^16.0.0","react-helmet":"^5.2.0"},"optionalDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/batfish_1.1.0-rc.0_1520461007974_0.4585566656304305","host":"s3://npm-registry-packages"},"_id":"@mapbox/batfish@1.1.0-rc.0","version":"1.1.0-rc.0"}