{"_id":"@ericmorand/parse-function","_rev":"4-72f342121691ff59bba57ed97066de16","name":"@ericmorand/parse-function","dist-tags":{"latest":"5.2.1"},"versions":{"5.2.0":{"name":"@ericmorand/parse-function","version":"5.2.0","description":"Parse a function into an object using espree, acorn or babylon parsers. Extensible through Smart Plugins","repository":{"type":"git","url":"https://github.com/tunnckoCore/parse-function.git"},"homepage":"https://github.com/tunnckoCore/parse-function","author":{"name":"Charlike Mike Reagent","email":"@tunnckoCore","url":"https://i.am.charlike.online"},"nspId":"42a5e14a-70da-49ee-86e7-d1f39ed08603","src":"./src/**/*.js","main":"./dist/index.js","module":"./dist/index.es.js","scripts":{"start":"hela","test":"NODE_ENV=test yarn hela test","precommit":"yarn hela precommit","commit":"yarn hela commit"},"license":"MIT","licenseStart":2016,"engines":{"node":">=6","npm":">=5","yarn":">=1"},"files":["dist/"],"dependencies":{"arrify":"1.0.1","babylon":"7.0.0-beta.40","define-property":"2.0.2"},"devDependencies":{"acorn":"5.5.0","clone-deep":"2.0.2","eslint-config-standard-tunnckocore":"1.0.10","espree":"3.5.3","for-in":"1.0.2","hela":"1.1.3","hela-preset-tunnckocore":"0.5.19","husky":"0.14.3","mukla":"0.4.9"},"keywords":["args","arguments","arrow","arrowfn","async","asyncawait","await","body","fn","fns","func","function","gen","generators","name","object","param","paramerters","params","parse","parse-function","parser","prop","regular","string","tostring","util"],"verb":{"run":true,"toc":{"render":true,"method":"preWrite","maxdepth":3},"layout":"empty","tasks":["readme"],"related":{"list":["babylon","acorn","espree","parse-semver","charlike-cli","hela"],"highlight":"hela"},"lint":{"reflinks":true},"reflinks":["babylon","charlike","charlike-cli","define-property","execa","function-arguments","acorn","espree"]},"release":{"analyzeCommits":"simple-commit-message"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2016-present Charlike Mike Reagent <open.source.charlike@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"@ericmorand/parse-function@5.2.0","dist":{"shasum":"44fabd697e6389a45b1bbbe059eef9e851dd44fa","tarball":"https://registry.npmjs.org/@ericmorand/parse-function/-/parse-function-5.2.0.tgz","fileCount":6,"unpackedSize":99083,"integrity":"sha512-exXnQ06YnEEb+K0emGvLZoalRYyznec6TIpPis2K1ooA4m26Vej6IlM6PN6KMmQVpucbI2ur9mjEuwswIBE7BA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDd51cSdLwXMKKd29F20uvP2yeraZcd3mCvktY9D2DttwIgclwEIGHbohqss4SiDiUHZ/RVEtNUm5+TD1rMWlj5LFM="}]},"maintainers":[{"name":"ericmorand","email":"eric.morand+npm@gmail.com"}],"_npmUser":{"name":"ericmorand","email":"eric.morand+npm@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/parse-function_5.2.0_1520087840169_0.7092021631957324"},"_hasShrinkwrap":false},"5.2.1":{"name":"@ericmorand/parse-function","version":"5.2.1","description":"Parse a function into an object using espree, acorn or babylon parsers. Extensible through Smart Plugins","repository":{"type":"git","url":"https://github.com/tunnckoCore/parse-function.git"},"homepage":"https://github.com/tunnckoCore/parse-function","author":{"name":"Charlike Mike Reagent","email":"@tunnckoCore","url":"https://i.am.charlike.online"},"nspId":"42a5e14a-70da-49ee-86e7-d1f39ed08603","src":"./src/**/*.js","main":"./dist/index.js","module":"./dist/index.es.js","scripts":{"prepublish":"yarn hela build","start":"hela","test":"NODE_ENV=test yarn hela test","precommit":"yarn hela precommit","commit":"yarn hela commit"},"license":"MIT","licenseStart":2016,"engines":{"node":">=6","npm":">=5","yarn":">=1"},"files":["dist/"],"dependencies":{"arrify":"1.0.1","babylon":"7.0.0-beta.40","define-property":"2.0.2"},"devDependencies":{"acorn":"5.5.0","clone-deep":"2.0.2","eslint-config-standard-tunnckocore":"1.0.10","espree":"3.5.3","for-in":"1.0.2","hela":"1.1.3","hela-preset-tunnckocore":"0.5.19","husky":"0.14.3","mukla":"0.4.9"},"keywords":["args","arguments","arrow","arrowfn","async","asyncawait","await","body","fn","fns","func","function","gen","generators","name","object","param","paramerters","params","parse","parse-function","parser","prop","regular","string","tostring","util"],"verb":{"run":true,"toc":{"render":true,"method":"preWrite","maxdepth":3},"layout":"empty","tasks":["readme"],"related":{"list":["babylon","acorn","espree","parse-semver","charlike-cli","hela"],"highlight":"hela"},"lint":{"reflinks":true},"reflinks":["babylon","charlike","charlike-cli","define-property","execa","function-arguments","acorn","espree"]},"release":{"analyzeCommits":"simple-commit-message"},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2016-present Charlike Mike Reagent <open.source.charlike@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"@ericmorand/parse-function@5.2.1","dist":{"shasum":"3ce14840f8d344a55f23cf93e628eeb0b2e8e90c","tarball":"https://registry.npmjs.org/@ericmorand/parse-function/-/parse-function-5.2.1.tgz","fileCount":7,"unpackedSize":52415,"integrity":"sha512-3nwzTwoV0Yig2l8ajWilyEeHs4miihfywtHN9tQKVXYSDFtwkt/CInHwdVIl9SPOmEFy9oQh5wqyxxCewzO94w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZq/TGLlyNGXV6xuDVcpCLHqo0MXrJHdS3VoMR5n1p4QIhAN8n24tb2PnbsJkYlLrUh4dPsivpXUVoYf9AHA7CktTy"}]},"maintainers":[{"name":"ericmorand","email":"eric.morand+npm@gmail.com"}],"_npmUser":{"name":"ericmorand","email":"eric.morand+npm@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/parse-function_5.2.1_1520088531031_0.6342186036309845"},"_hasShrinkwrap":false}},"time":{"created":"2018-03-03T14:37:20.169Z","5.2.0":"2018-03-03T14:37:20.273Z","modified":"2022-06-12T17:38:28.314Z","5.2.1":"2018-03-03T14:48:51.089Z"},"maintainers":[{"name":"ericmorand","email":"eric.morand+npm@gmail.com"}],"description":"Parse a function into an object using espree, acorn or babylon parsers. Extensible through Smart Plugins","homepage":"https://github.com/tunnckoCore/parse-function","keywords":["args","arguments","arrow","arrowfn","async","asyncawait","await","body","fn","fns","func","function","gen","generators","name","object","param","paramerters","params","parse","parse-function","parser","prop","regular","string","tostring","util"],"repository":{"type":"git","url":"https://github.com/tunnckoCore/parse-function.git"},"author":{"name":"Charlike Mike Reagent","email":"@tunnckoCore","url":"https://i.am.charlike.online"},"license":"MIT","readme":"<p align=\"center\">\n  <img align=\"center\" src=\"https://cdn.jsdelivr.net/emojione/assets/svg/1f54e.svg\" width=\"256\" height=\"256\" alt=\"Parse a function\">\n</p>\n\n# parse-function [![npm version][npmv-img]][npmv-url] [![github release][github-release-img]][github-release-url] [![mit License][license-img]][license-url] [![NPM Downloads Weekly][downloads-weekly-img]][downloads-weekly-url] [![NPM Downloads Total][downloads-total-img]][downloads-total-url] \n\n> Parse a function into an object using espree, acorn or babylon parsers. Extensible through Smart Plugins\n\n<div id=\"thetop\"></div>\n\nYou might also be interested in [hela](https://github.com/tunnckoCore/hela#readme).\n\n## Quality Assurance :100:\n\n[![Code Style Standard][standard-img]][standard-url] \n[![Linux Build][travis-img]][travis-url] \n[![Code Coverage][codecov-img]][codecov-url] \n[![Dependencies Status][dependencies-img]][dependencies-url] \n[![Renovate App Status][renovate-img]][renovate-url] \n\nIf you have any _how-to_ kind of questions, please read [Code of Conduct](./CODE_OF_CONDUCT.md) and **join the chat** room or [open an issue][open-issue-url].  \nYou may also read the [Contributing Guide](./CONTRIBUTING.md). There, beside _\"How to contribute?\"_, we describe everything **_stated_** by  the badges.\n\n[![tunnckoCore support][gitterchat-img]][gitterchat-url] \n[![Code Format Prettier][prettier-img]][prettier-url] \n[![node security status][nodesecurity-img]][nodesecurity-url] \n[![conventional Commits][ccommits-img]][ccommits-url] \n[![semantic release][semantic-release-img]][semantic-release-url] \n[![Node Version Required][nodeversion-img]][nodeversion-url]\n\n## Features\n\n- **Always up-to-date:** auto-publish new version when new version of dependency is out, [Renovate](https://renovateapp.com)\n- **Standard:** using StandardJS, Prettier, SemVer, Semantic Release and conventional commits\n- **Smart Plugins:** for extending the core API or the end [Result](#result), see [.use](#use) method and [Plugins Architecture](#plugins-architecture)\n- **Extensible:** using plugins for working directly on AST nodes, see the [Plugins Architecture](#plugins-architecture)\n- **ES2017 Ready:** by using `.parseExpression` method of the [babylon][] `v7.x` parser\n- **Customization:** allows switching the parser, through `options.parse`\n- **Support for:** arrow functions, default parameters, generators and async/await functions\n- **Stable:** battle-tested in production and against all parsers - [espree][], [acorn][], [babylon][]\n- **Tested:** with [370+ tests](./test.js) for _200%_ coverage\n\n## Table of Contents\n- [Install](#install)\n- [Which version to use?](#which-version-to-use)\n- [Notes](#notes)\n  * [Throws in one specific case](#throws-in-one-specific-case)\n  * [Function named _\"anonymous\"_](#function-named-_anonymous_)\n  * [Real anonymous function](#real-anonymous-function)\n  * [Plugins Architecture](#plugins-architecture)\n- [API](#api)\n  * [parseFunction](#parsefunction)\n  * [.parse](#parse)\n  * [.use](#use)\n  * [.define](#define)\n  * [Result](#result)\n- [Related](#related)\n- [Contributing](#contributing)\n- [Author](#author)\n- [License](#license)\n\n_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_\n\n## Install\n\nThis project requires [**Node.js**][nodeversion-url] **v6** and above. Use [**yarn**](https://yarnpkg.com) **v1** / [**npm**](https://npmjs.com) **v5** or above to install it.\n\n```\n$ yarn add parse-function\n```\n\n## Which version to use?\n\nThere's no breaking changes between the `v2.x` version. The only breaking is `v2.1` which also is not\nworking properly, so no use it.\n\n**Use v2.0.x**\n\nWhen you don't need support for `arrow functions` and `es6 default params`. This version \nuses a RegExp expression to work.\n\n**Use v2.2.x**\n\nOnly when you need a _basic_ support for `es6 features` like arrow functions. This version \nuses a RegExp expression to work.\n\n**Use v2.3.x**\n\nWhen you want _full*_ support for `arrow functions` and `es6 default params`. Where this \"full\",\nmeans \"almost full\", because it has bugs. This version also uses (`acorn.parse`) real parser \nto do the parsing.\n\n**Use v3.x**\n\nWhen you want to use different parser instead of the default `babylon.parse`, by passing custom\nparse function to the `options.parse` option. **From this version we require `node >= 4`**.\n\n**Use v4.x**\n\nWhen you want full customization and most stable support for old and modern features. This version\nuses `babylon.parseExpression` for parsing and provides a [Plugins API](#plugins-architecture). \nSee the [Features](#features) section for more info.\n\n**Use v5.x**\n\nIt is basically the same as `v4`, but requires Node 6 & npm 5. Another is boilerplate stuff.\n\n**[back to top](#thetop)**\n\n## Notes\n\n### Throws in one specific case\n\n> _see: [issue #3](https://github.com/tunnckoCore/parse-function/issues/3) and [test/index.js#L229-L235](https://github.com/tunnckoCore/parse-function/blob/master/test/index.js#L229-L235)_\n\nIt may throw in one specific case, otherwise it won't throw, so you should \nrelay on the `result.isValid` for sure.\n\n### Function named _\"anonymous\"_\n\n> _see: [test/index.js#L319-L324](https://github.com/tunnckoCore/parse-function/blob/master/test/index.js#L319-L324) and [Result](#result) section_\n\nIf you pass a function which is named _\"anonymous\"_ the `result.name` will be `'anonymous'`, \nbut the `result.isAnonymous` will be `false` and `result.isNamed` will be `true`, because \nin fact it's a named function.\n\n### Real anonymous function\n\n> _see: [test/index.js#L326-L331](https://github.com/tunnckoCore/parse-function/blob/master/test/index.js#L326-L331) and [Result](#result) section_\n\nOnly if you pass really an anonymous function you will get `result.name` equal to `null`, \n`result.isAnonymous` equal to `true` and `result.isNamed` equal to `false`.\n\n**[back to top](#thetop)**\n\n### Plugins Architecture\n\n> _see: the [.use](#use) method, [test/index.js#L305-L317](https://github.com/tunnckoCore/parse-function/blob/master/test/index.js#L305-L317) and [test/index.js#L396-L414](https://github.com/tunnckoCore/parse-function/blob/master/test/index.js#L396-L414)_\n\nA more human description of the plugin mechanism. Plugins are **synchronous** - no support\nand no need for **async** plugins here, but notice that you can do that manually, because \nthat exact architecture.\n\nThe first function that is passed to the [.use](#use) method is used for extending the core API, \nfor example adding a new method to the `app` instance. That function is immediately invoked.\n\n```js\nconst parseFunction = require('parse-function')\nconst app = parseFunction()\n\napp.use((self) => {\n  // self is same as `app`\n  console.log(self.use)\n  console.log(self.parse)\n  console.log(self.define)\n\n  self.define(self, 'foo', (bar) => bar + 1)\n})\n\nconsole.log(app.foo(2)) // => 3\n```\n\nOn the other side, if you want to access the AST of the parser, you should return a function \nfrom that plugin, which function is passed with `(node, result)` signature.\n\nThis function is lazy plugin, it is called only when the [.parse](#parse) method is called.\n\n```js\nconst parseFunction = require('parse-function')\nconst app = parseFunction()\n\napp.use((self) => {\n  console.log('immediately called')\n\n  return (node, result) => {\n    console.log('called only when .parse is invoked')\n    console.log(node)\n    console.log(result)\n  } \n})\n```\n\nWhere **1)** the `node` argument is an object - actual and real AST Node coming from the parser \nand **2)** the `result` is an object too - the end [Result](#result), on which \nyou can add more properties if you want.\n\n**[back to top](#thetop)**\n\n## API\nReview carefully the provided examples and the working [tests](./test/index.js).\n\n### [parseFunction](src/index.js#L60)\n> Initializes with optional `opts` object which is passed directly to the desired parser and returns an object with `.use` and `.parse` methods. The default parse which is used is [babylon][]'s `.parseExpression` method from `v7`.\n\n**Params**\n\n* `opts` **{Object}**: optional, merged with options passed to `.parse` method    \n* `returns` **{Object}** `app`: object with `.use` and `.parse` methods  \n\n**Example**\n\n```js\nconst parseFunction = require('parse-function')\n\nconst app = parseFunction({\n  ecmaVersion: 2017\n})\n\nconst fixtureFn = (a, b, c) => {\n  a = b + c\n  return a + 2\n}\n\nconst result = app.parse(fixtureFn)\nconsole.log(result)\n\n// see more\nconsole.log(result.name) // => null\nconsole.log(result.isNamed) // => false\nconsole.log(result.isArrow) // => true\nconsole.log(result.isAnonymous) // => true\n\n// array of names of the arguments\nconsole.log(result.args) // => ['a', 'b', 'c']\n\n// comma-separated names of the arguments\nconsole.log(result.params) // => 'a, b, c'\n```\n\n### [.parse](src/index.js#L101)\n> Parse a given `code` and returns a `result` object with useful properties - such as `name`, `body` and `args`. By default it uses Babylon parser, but you can switch it by passing `options.parse` - for example `options.parse: acorn.parse`. In the below example will show how to use `acorn` parser, instead of the default one.\n\n**Params**\n\n* `code` **{Function|String}**: any kind of function or string to be parsed    \n* `options` **{Object}**: directly passed to the parser - babylon, acorn, espree    \n* `options.parse` **{Function}**: by default `babylon.parseExpression`, all `options` are passed as second argument to that provided function    \n* `returns` **{Object}** `result`: see [result section](#result) for more info  \n\n**Example**\n\n```js\nconst acorn = require('acorn')\nconst parseFn = require('parse-function')\nconst app = parseFn()\n\nconst fn = function foo (bar, baz) { return bar * baz }\nconst result = app.parse(fn, {\n  parse: acorn.parse,\n  ecmaVersion: 2017\n})\n\nconsole.log(result.name) // => 'foo'\nconsole.log(result.args) // => ['bar', 'baz']\nconsole.log(result.body) // => ' return bar * baz '\nconsole.log(result.isNamed) // => true\nconsole.log(result.isArrow) // => false\nconsole.log(result.isAnonymous) // => false\nconsole.log(result.isGenerator) // => false\n```\n\n### [.use](src/index.js#L173)\n> Add a plugin `fn` function for extending the API or working on the AST nodes. The `fn` is immediately invoked and passed with `app` argument which is instance of `parseFunction()` call. That `fn` may return another function that accepts `(node, result)` signature, where `node` is an AST node and `result` is an object which will be returned [result](#result) from the `.parse` method. This retuned function is called on each node only when `.parse` method is called.\n\n_See [Plugins Architecture](#plugins-architecture) section._\n\n**Params**\n\n* `fn` **{Function}**: plugin to be called    \n* `returns` **{Object}** `app`: instance for chaining  \n\n**Example**\n\n```js\n// plugin extending the `app`\napp.use((app) => {\n  app.define(app, 'hello', (place) => `Hello ${place}!`)\n})\n\nconst hi = app.hello('World')\nconsole.log(hi) // => 'Hello World!'\n\n// or plugin that works on AST nodes\napp.use((app) => (node, result) => {\n  if (node.type === 'ArrowFunctionExpression') {\n    result.thatIsArrow = true\n  }\n  return result\n})\n\nconst result = app.parse((a, b) => (a + b + 123))\nconsole.log(result.name) // => null\nconsole.log(result.isArrow) // => true\nconsole.log(result.thatIsArrow) // => true\n\nconst result = app.parse(function foo () { return 123 })\nconsole.log(result.name) // => 'foo'\nconsole.log(result.isArrow) // => false\nconsole.log(result.thatIsArrow) // => undefined\n```\n\n### [.define](src/index.js#L234)\n> Define a non-enumerable property on an object. Just a convenience mirror of the [define-property][] library, so check out its docs. Useful to be used in plugins.\n\n**Params**\n\n* `obj` **{Object}**: the object on which to define the property    \n* `prop` **{String}**: the name of the property to be defined or modified    \n* `val` **{Any}**: the descriptor for the property being defined or modified    \n* `returns` **{Object}** `obj`: the passed object, but modified  \n\n**Example**\n\n```js\nconst parseFunction = require('parse-function')\nconst app = parseFunction()\n\n// use it like `define-property` lib\nconst obj = {}\napp.define(obj, 'hi', 'world')\nconsole.log(obj) // => { hi: 'world' }\n\n// or define a custom plugin that adds `.foo` property\n// to the end result, returned from `app.parse`\napp.use((app) => {\n  return (node, result) => {\n    // this function is called\n    // only when `.parse` is called\n\n    app.define(result, 'foo', 123)\n\n    return result\n  }\n})\n\n// fixture function to be parsed\nconst asyncFn = async (qux) => {\n  const bar = await Promise.resolve(qux)\n  return bar\n}\n\nconst result = app.parse(asyncFn)\n\nconsole.log(result.name) // => null\nconsole.log(result.foo) // => 123\nconsole.log(result.args) // => ['qux']\n\nconsole.log(result.isAsync) // => true\nconsole.log(result.isArrow) // => true\nconsole.log(result.isNamed) // => false\nconsole.log(result.isAnonymous) // => true\n```\n\n**[back to top](#thetop)**\n\n### Result\n> In the result object you have `name`, `args`, `params`, `body` and few hidden properties\nthat can be useful to determine what the function is - arrow, regular, async/await or generator.\n\n* `name` **{String|null}**: name of the passed function or `null` if anonymous\n* `args` **{Array}**: arguments of the function\n* `params` **{String}**: comma-separated list representing the `args`\n* `defaults` **{Object}**: key/value pairs, useful when use ES2015 default arguments\n* `body` **{String}**: actual body of the function, respects trailing newlines and whitespaces\n* `isValid` **{Boolean}**: is the given value valid or not, that's because it never throws!\n* `isAsync` **{Boolean}**: `true` if function is ES2015 async/await function\n* `isArrow` **{Boolean}**: `true` if the function is arrow function\n* `isNamed` **{Boolean}**: `true` if function has name, or `false` if is anonymous\n* `isGenerator` **{Boolean}**: `true` if the function is ES2015 generator function\n* `isAnonymous` **{Boolean}**: `true` if the function don't have name\n\n**[back to top](#thetop)**\n\n## Related\n- [acorn](https://www.npmjs.com/package/acorn): ECMAScript parser | [homepage](https://github.com/acornjs/acorn \"ECMAScript parser\")\n- [babylon](https://www.npmjs.com/package/babylon): A JavaScript parser | [homepage](https://babeljs.io/ \"A JavaScript parser\")\n- [charlike-cli](https://www.npmjs.com/package/charlike-cli): Command line interface for the [charlike][] project scaffolder. | [homepage](https://github.com/tunnckoCore/charlike-cli#readme \"Command line interface for the [charlike][] project scaffolder.\")\n- [espree](https://www.npmjs.com/package/espree): An Esprima-compatible JavaScript parser built on Acorn | [homepage](https://github.com/eslint/espree \"An Esprima-compatible JavaScript parser built on Acorn\")\n- [hela](https://www.npmjs.com/package/hela): Powerful & flexible task runner framework in 80 lines, based on [execa… [more](https://github.com/tunnckoCore/hela#readme) | [homepage](https://github.com/tunnckoCore/hela#readme \"Powerful & flexible task runner framework in 80 lines, based on [execa][]. Supports shareable configs, a la ESLint\")\n- [parse-semver](https://www.npmjs.com/package/parse-semver): Parse, normalize and validate given semver shorthand (e.g. gulp@v3.8.10) to object. | [homepage](https://github.com/tunnckocore/parse-semver#readme \"Parse, normalize and validate given semver shorthand (e.g. gulp@v3.8.10) to object.\")\n\n## Contributing\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue][open-issue-url].  \nPlease read the [Contributing Guide](./CONTRIBUTING.md) and [Code of Conduct](./CODE_OF_CONDUCT.md) documents for advices.  \n\n## Author\n- [github/tunnckoCore](https://github.com/tunnckoCore)\n- [twitter/tunnckoCore](https://twitter.com/tunnckoCore)\n- [codementor/tunnckoCore](https://codementor.io/tunnckoCore)\n\n## License\nCopyright © 2016, 2018, [Charlike Mike Reagent](https://i.am.charlike.online). Released under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on February 14, 2018._  \nProject scaffolded and managed with [hela][].\n\n[acorn]: https://github.com/acornjs/acorn\n[babylon]: https://babeljs.io/\n[charlike-cli]: https://github.com/tunnckoCore/charlike-cli\n[charlike]: https://github.com/tunnckoCore/charlike\n[define-property]: https://github.com/jonschlinkert/define-property\n[espree]: https://github.com/eslint/espree\n[execa]: https://github.com/sindresorhus/execa\n[function-arguments]: https://github.com/tunnckocore/function-arguments\n\n<!-- Heading badges -->\n[npmv-url]: https://www.npmjs.com/package/parse-function\n[npmv-img]: https://img.shields.io/npm/v/parse-function.svg\n\n[open-issue-url]: https://github.com/tunnckoCore/parse-function/issues/new\n[github-release-url]: https://github.com/tunnckoCore/parse-function/releases/latest\n[github-release-img]: https://img.shields.io/github/release/tunnckoCore/parse-function.svg\n\n[license-url]: https://github.com/tunnckoCore/parse-function/blob/master/LICENSE\n[license-img]: https://img.shields.io/badge/license-MIT-blue.svg\n\n[downloads-weekly-url]: https://www.npmjs.com/package/parse-function\n[downloads-weekly-img]: https://img.shields.io/npm/dw/parse-function.svg\n\n[downloads-total-url]: https://www.npmjs.com/package/parse-function\n[downloads-total-img]: https://img.shields.io/npm/dt/parse-function.svg\n\n<!-- Front line badges -->\n[codeclimate-url]: https://codeclimate.com/github/tunnckoCore/parse-function\n[codeclimate-img]: https://img.shields.io/codeclimate/github/tunnckoCore/parse-function.svg\n\n[standard-url]: https://github.com/standard/standard\n[standard-img]: https://img.shields.io/badge/code_style-standard-brightgreen.svg\n\n[travis-url]: https://travis-ci.org/tunnckoCore/parse-function\n[travis-img]: https://img.shields.io/travis/tunnckoCore/parse-function/master.svg?label=linux\n\n[codecov-url]: https://codecov.io/gh/tunnckoCore/parse-function\n[codecov-img]: https://img.shields.io/codecov/c/github/tunnckoCore/parse-function/master.svg\n\n[dependencies-url]: https://david-dm.org/tunnckoCore/parse-function\n[dependencies-img]: https://img.shields.io/david/tunnckoCore/parse-function.svg\n\n[renovate-url]: https://renovateapp.com\n[renovate-img]: https://img.shields.io/badge/renovate-enabled-brightgreen.svg\n\n<!-- Second front of badges -->\n\n[gitterchat-url]: https://gitter.im/tunnckoCore/support\n[gitterchat-img]: https://img.shields.io/gitter/room/tunnckoCore/support.svg\n\n[prettier-url]: https://github.com/prettier/prettier\n[prettier-img]: https://img.shields.io/badge/styled_with-prettier-f952a5.svg\n\n[nodesecurity-url]: https://nodesecurity.io/orgs/tunnckocore/projects/42a5e14a-70da-49ee-86e7-d1f39ed08603\n[nodesecurity-img]: https://nodesecurity.io/orgs/tunnckocore/projects/42a5e14a-70da-49ee-86e7-d1f39ed08603/badge\n<!-- the original color of nsp: \n[nodesec-img]: https://img.shields.io/badge/nsp-no_known_vulns-35a9e0.svg -->\n\n[semantic-release-url]: https://github.com/apps/new-release\n[semantic-release-img]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-new--release-e10079.svg\n\n[ccommits-url]: https://conventionalcommits.org/\n[ccommits-img]: https://img.shields.io/badge/conventional_commits-1.0.0-yellow.svg\n\n[nodeversion-url]: https://nodejs.org/en/download\n[nodeversion-img]: https://img.shields.io/node/v/parse-function.svg\n\n[hela]: https://github.com/tunnckoCore/hela","readmeFilename":"README.md"}