{"id":17902220,"url":"https://github.com/filipstefansson/query-fns","last_synced_at":"2026-05-01T14:33:23.233Z","repository":{"id":65478865,"uuid":"123777257","full_name":"filipstefansson/query-fns","owner":"filipstefansson","description":"🔍 Parse and stringify URL search params.","archived":false,"fork":false,"pushed_at":"2018-04-08T17:15:52.000Z","size":128,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-12T05:41:53.801Z","etag":null,"topics":["history","json-api","location","parse","query","query-builder","query-parser","query-string","querystring","stringify","url","url-parser"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/filipstefansson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-04T10:16:44.000Z","updated_at":"2023-09-08T17:37:29.000Z","dependencies_parsed_at":"2023-01-25T15:16:16.860Z","dependency_job_id":null,"html_url":"https://github.com/filipstefansson/query-fns","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/filipstefansson/query-fns","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipstefansson%2Fquery-fns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipstefansson%2Fquery-fns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipstefansson%2Fquery-fns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipstefansson%2Fquery-fns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/filipstefansson","download_url":"https://codeload.github.com/filipstefansson/query-fns/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipstefansson%2Fquery-fns/sbom","scorecard":{"id":399705,"data":{"date":"2025-08-11","repo":{"name":"github.com/filipstefansson/query-fns","commit":"c5e9e6279bb6d28365f620a03106bdfb74c2d799"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"105 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-6chw-6frg-f759","Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-8w4h-3cm3-2pm2","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-cwfw-4gq5-mrqx","Warn: Project is vulnerable to: GHSA-g95f-p29q-9xw4","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-c6rq-rjc2-86v2","Warn: Project is vulnerable to: GHSA-mh2h-6j8q-x246","Warn: Project is vulnerable to: GHSA-5q88-cjfq-g2mh","Warn: Project is vulnerable to: GHSA-xp63-6vf5-xf3v","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-rq8g-5pc5-wrhr","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-hr2v-3952-633q","Warn: Project is vulnerable to: GHSA-h6ch-v84p-w6p9","Warn: Project is vulnerable to: GHSA-phwq-j96m-2c2q","Warn: Project is vulnerable to: GHSA-ghr5-ch3p-vcr6","Warn: Project is vulnerable to: GHSA-vh7m-p724-62c2","Warn: Project is vulnerable to: GHSA-r9p9-mrjm-926w","Warn: Project is vulnerable to: GHSA-434g-2637-qmqr","Warn: Project is vulnerable to: GHSA-49q7-c7j4-3p7m","Warn: Project is vulnerable to: GHSA-977x-g7h5-7qgw","Warn: Project is vulnerable to: GHSA-f7q4-pwc6-w24p","Warn: Project is vulnerable to: GHSA-fc9h-whq2-v747","Warn: Project is vulnerable to: GHSA-vjh7-7g9h-fjfh","Warn: Project is vulnerable to: GHSA-qrmc-fj45-qfc2","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-8r6j-v8pm-fqw3","Warn: Project is vulnerable to: MAL-2023-462","Warn: Project is vulnerable to: GHSA-xf7w-r453-m56c","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-q42p-pg8m-cqh6","Warn: Project is vulnerable to: GHSA-w457-6q6x-cgp9","Warn: Project is vulnerable to: GHSA-62gr-4qp9-h98f","Warn: Project is vulnerable to: GHSA-f52g-6jhx-586p","Warn: Project is vulnerable to: GHSA-2cf5-4w76-r9qv","Warn: Project is vulnerable to: GHSA-3cqr-58rm-57f8","Warn: Project is vulnerable to: GHSA-g9r4-xpmj-mj65","Warn: Project is vulnerable to: GHSA-q2c6-c6pm-g3gh","Warn: Project is vulnerable to: GHSA-765h-qjxv-5f44","Warn: Project is vulnerable to: GHSA-f2jv-r9rf-7988","Warn: Project is vulnerable to: GHSA-44pw-h2cw-w3vq","Warn: Project is vulnerable to: GHSA-jp4x-w63m-7wgm","Warn: Project is vulnerable to: GHSA-c429-5p7v-vgjp","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-2pr6-76vf-7546","Warn: Project is vulnerable to: GHSA-8j8c-7jfh-h6hx","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-6c8f-qphg-qjgp","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-4xc9-xhrj-v574","Warn: Project is vulnerable to: GHSA-x5rq-j2xg-h7qm","Warn: Project is vulnerable to: GHSA-jf85-cpcp-j695","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-4xcv-9jjx-gfj3","Warn: Project is vulnerable to: GHSA-f9cm-qmx5-m98h","Warn: Project is vulnerable to: GHSA-7wpw-2hjm-89gp","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-fhjf-83wg-r2j9","Warn: Project is vulnerable to: GHSA-5fw9-fq32-wv5p","Warn: Project is vulnerable to: GHSA-6394-6h9h-cfjg","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-6g33-f262-xjp4","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-h9rv-jmmf-4pgx","Warn: Project is vulnerable to: GHSA-hxcc-f52p-wc94","Warn: Project is vulnerable to: GHSA-jv35-xqg7-f92r","Warn: Project is vulnerable to: GHSA-4g88-fppr-53pp","Warn: Project is vulnerable to: GHSA-4jqc-8m5r-9rpr","Warn: Project is vulnerable to: GHSA-4rq4-32rv-6wp6","Warn: Project is vulnerable to: GHSA-64g7-mvw6-v9qj","Warn: Project is vulnerable to: GHSA-2m39-62fm-q8r3","Warn: Project is vulnerable to: GHSA-vx3p-948g-6vhq","Warn: Project is vulnerable to: GHSA-mf6x-7mm4-x2g7","Warn: Project is vulnerable to: GHSA-j44m-qm6p-hp7m","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-jgrx-mgxx-jf9v","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-cf4h-3jhx-xvhq","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T19:49:26.419Z","repository_id":65478865,"created_at":"2025-08-18T19:49:26.419Z","updated_at":"2025-08-18T19:49:26.419Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32501402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["history","json-api","location","parse","query","query-builder","query-parser","query-string","querystring","stringify","url","url-parser"],"created_at":"2024-10-28T16:06:52.739Z","updated_at":"2026-05-01T14:33:23.150Z","avatar_url":"https://github.com/filipstefansson.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [query-fns](https://github.com/filipstefansson/query-fns) \u0026middot; [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/filipstefansson/query-fns/blob/master/LICENSE) [![Coverage Status](https://img.shields.io/coveralls/filipstefansson/query-fns/master.svg?style=flat)](https://coveralls.io/github/filipstefansson/query-fns?branch=master) [![CircleCI Status](https://circleci.com/gh/filipstefansson/query-fns.svg?style=shield\u0026circle-token=ab2228bfc68a2fe6184b96d9fb7436f29a6d1b10)](https://circleci.com/gh/filipstefansson/query-fns) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/filipstefansson/query-fns#contributing)\n\nParse and stringify URL search params.\n\n* **Modular** – only import the stuff you need.\n* **Extendable** - write your own [formatters](#formatters) to support any query string format.\n\n## Installation\n\n```\nyarn add query-fns\n```\n\nor\n\n```\nnpm install query-fns\n```\n\n## Usage\n\nImport the package using:\n\n```js\nimport { stringify, parse } from 'query-fns';\n```\n\nor specify what to import to save some bytes:\n\n```js\nimport stringify from 'query-fns/stringify';\nimport parse from 'query-fns/parse';\n```\n\n### Parse\n\nUse the `parse` method to convert a query string in to an object.\n\n```js\nparse('?foo=bar');\n// =\u003e { foo: 'bar' }\n\nparse('?foo=bar\u0026baz=qee');\n// =\u003e { foo: 'bar', baz: 'qee' }\n```\n\n### Stringify\n\nUse the `stringify` method to convert an object in to a query string.\n\n```js\nstringify({ foo: 'bar' });\n// =\u003e foo=bar\n\nstringify({ foo: 'bar', baz: 'qee' });\n// =\u003e foo=bar\u0026baz=qee\n```\n\n## API\n\n### parse(string, options) =\u003e Object\n\noption              | default          | description |\n--------------------|------------------|-------------|\ndecode              | `true`           | Use `decodeURIComponent` on the keys and values before adding them to the returned object. |\nformatter           | `default`        | See [formatters section](#formatters). |\n\n### stringify(object, options) =\u003e string\n\noption              | default          | description |\n--------------------|------------------|-------------|\nencode              | `true`           | Use `encodeURIComponent` on the keys and values before adding them to the returned string. |\nformatter           | `default`        | See [formatters section](#formatters). |\n\n## Formatters\n\nSince there is more than one way of formatting a query string, we need a way \nof telling the library how to stringify and parse the input. For this we have \n*formatters*. \n\nThere is a default formatter used that will work for most cases, but if you need \nsomething more advanced like arrays or nested objects you can use a \n*custom formatter*.\n\nTo use a custom formatter, simply import it and tell the `parse` or `stringify`\nmethod to use it.\n\n```js\nimport { JSONAPIFormatter } from 'query-fns/formatters';\n// import JSONAPIFormatter from 'query-fns/formatters/jsonapi';\n\nparse('?foo[bar]=qux', { formatter: JSONAPIFormatter });\n// =\u003e { foo: { bar: ['qux'] } }\n```\n\n### Built-in formatters\n\n#### defaultFormatter\n\nThe default formatter will be used if you don't specify a formatter in the \noptions object.\n\nstringify         | parse                        |\n------------------|------------------------------|\n`foo=bar`         | `{ foo: 'bar' }`             |\n`foo=bar\u0026bar=baz` | `{ foo: 'bar', bar: 'baz' }` |\n`foo=bar\u0026foo=baz` | `{ foo: ['bar', 'baz'] }`    |\n\n#### bracketFormatter\n\nThe brackets formatter adds support for creating arrays using brackets.\n\nstringify              | parse                          |\n-----------------------|--------------------------------|\n`?foo[]=bar`           | `{ foo: ['bar'] }`             |\n`?foo[]=bar\u0026foo[]=baz` | `{ foo: ['bar', 'baz'] }`      |\n`?foo[]=bar\u0026baz=qux`   | `{ foo: ['bar'], baz: 'qux' }` |\n\n#### JSONAPIFormatter\n\nThe JSONAPI formatter aims to support the format recommended on the \n[JSONAPI website](http://jsonapi.org/recommendations/#filtering).\n\nstringify                    | parse                                              |\n-----------------------------|----------------------------------------------------|\n`?foo[bar]=qux`              | `{ foo: { bar: ['qux'] } }`                        |\n`?foo[bar]=qux,baz`          | `{ foo: { bar: ['qux', 'baz'] } }`                 |\n`?foo[bar]=qux\u0026bar[foo]=baz` | `{ foo: { bar: ['qux'] }, bar: { foo: ['baz'] } }` |\n\n### Create your own formatter\n\nIf none of the built-in formatters supports your format, it's easy to build your\nown. A formatter is an object with two properties with functions \nas values; `parse` and `stringify`.\n\n```js\nconst myCustomFormatter = {\n  parse: (key, value, accumulator, options) =\u003e { key: '', value: {} },\n  stringify: (key, value, source, options) =\u003e '',\n};\n\nparse('?foo=bar', { formatter: myCustomFormatter });\nstringify({ foo: 'bar' }, { formatter: myCustomFormatter });\n```\n\n#### parse(key, value, accumulator, options) =\u003e { key: string, value: any }\n\nThe parse function will split the query string at every `\u0026` and run your\nformatter on every value in that array.\n\nThe expected return is an `Object` containing `{ key: string, value: any }`.\n\nparameter        | type          | description                                         |\n-----------------|---------------|-----------------------------------------------------|\nkey              | `string`      | Whatever is on the left side of the `=`.            |\nvalue            | `string`      | Whatever is on the right side of the `=`.           |\naccumulator      | `string`      | The current output value.                           |\noptions          | `Object`      | [The options object](#parsestring-options--object). |\n\n*Important:* If you build your own formatter, it's up to you to consider the \nuser options like `decode`. The library won't do any formatting for you.\n\n#### stringify(key, value, source, options) =\u003e string\n\nThe stringify function will run your formatter for every `key: value` of the\ninput value, and it's up to your formatter to reduce that in to an string.\n\nThe expected return is a `string`.\n\nparameter        | type          | description                                             |\n-----------------|---------------|---------------------------------------------------------|\nkey              | `string`      | The property key.                                       |\nvalue            | `any`         | The value for the current key.                          |\nsource           | `Object`      | The object the user put in.                             |\noptions          | `Object`      | [The options object](#stringifyobject-options--string). |\n\n*Important:* If you build your own formatter, it's up to you to consider the \nuser options like `encode`. The library won't do any formatting for you.\n\n## Develop\n\nIf you want to improve the library, the easiest way to get started is by cloning\nthe repo, and then running:\n\n```\nyarn install\nyarn start\n```\n\nThis will start [jest](https://facebook.github.io/jest/) in `watch mode`. In\nthis way you can develop new features and make sure that everything is working \nas it should.\n\nThe recommended way of creating new features or formatters is to first create \nthe tests in either `test/parse.test.js` or `test/stringify.test.js`, and then \nmake sure that they pass. \n\nIt's also recommended that you run `yarn start` with the `--coverage` flag \nbefore submitting any pull requests, to make sure that all your new code has\ntest coverage.\n\n## Contributing\n\nYou can contribute by \n[submitting an issue](https://github.com/filipstefansson/query-fns/issues)\nor by creating a new pull request. \n\n### Issues and bugs\n\nIf you've discoved a bug, please create a new issue including the steps to \nreproduce the problem.\n\n### Pull requests\n\nIf you want to help improve this library, feel free to create a pull request\nwith new features or bugfixes. \n\nThe aim is to have:\n  * 90%+ [flow](https://flow.org/) coverage\n  * 100% test coverage\n\nTo check this, refer to the [develop](#develop) section.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilipstefansson%2Fquery-fns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffilipstefansson%2Fquery-fns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilipstefansson%2Fquery-fns/lists"}