{"id":17949726,"url":"https://github.com/slurmulon/hazy","last_synced_at":"2026-04-17T13:31:52.479Z","repository":{"id":32882927,"uuid":"36477289","full_name":"slurmulon/hazy","owner":"slurmulon","description":":partly_sunny: Lazy JSON fixtures in Node","archived":false,"fork":false,"pushed_at":"2017-09-28T17:12:28.000Z","size":992,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-01T09:43:59.027Z","etag":null,"topics":["dry","fixture","json","query","random","test"],"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/slurmulon.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":"2015-05-29T02:04:47.000Z","updated_at":"2018-11-28T21:40:42.000Z","dependencies_parsed_at":"2022-08-25T06:11:01.373Z","dependency_job_id":null,"html_url":"https://github.com/slurmulon/hazy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/slurmulon/hazy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slurmulon%2Fhazy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slurmulon%2Fhazy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slurmulon%2Fhazy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slurmulon%2Fhazy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/slurmulon","download_url":"https://codeload.github.com/slurmulon/hazy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slurmulon%2Fhazy/sbom","scorecard":{"id":832134,"data":{"date":"2025-08-11","repo":{"name":"github.com/slurmulon/hazy","commit":"f37214aa68d279203bdd041912a094d78cc9d47a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"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":"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":"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":"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":"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":"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":"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":"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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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"}}]},"last_synced_at":"2025-08-23T18:00:58.880Z","repository_id":32882927,"created_at":"2025-08-23T18:00:58.880Z","updated_at":"2025-08-23T18:00:58.880Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31931275,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T12:37:54.787Z","status":"ssl_error","status_checked_at":"2026-04-17T12:37:25.095Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["dry","fixture","json","query","random","test"],"created_at":"2024-10-29T09:32:24.107Z","updated_at":"2026-04-17T13:31:52.462Z","avatar_url":"https://github.com/slurmulon.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hazy\n\n\u003e :partly_sunny:  Lazy JSON fixtures in Node\n\n-----\n\nHazy aims to ease the hassle of generating, maintaining and working with fixtures by making them DRY and more expressive.\nHazy lets developers describe and generate test data in a normailzed fasion and allows for fixtures to be processed further\nat run-time for increased flexibility.\n\n### Features\n\n* Simple syntax for supporting both normalized and random data in fixtures\n* DRY, embeddable, and queryable fixtures / sub-fixtures\n* Random `String`, `Number` and `Date` data via `ChanceJS`\n* Lazy processing via run-time queries ([JsonPath](http://goessner.net/articles/JsonPath/))\n\n### Design Goals\n\n* Non-invasive (retain all involved standards, especially JSON)\n* Unique and identifiable syntax\n* Convention based, interpreter agnostic\n* Pre-processed, but optionally evaluated at run-time\n* Cleanly integrate with __all__ Node testing frameworks\n\n### Example\n\nHere we register a couple of JSON fixtures into what's refered to as the fixture pool:\n\n```javascript\nimport hazy from 'hazy'\n\nhazy.fixture.register('someDude', {\n  id    : '|~misc.guid|',\n  name  : '|~person.prefix| |~person.name|',\n  email : '|~web.email|',\n  bday  : '|~person.birthday|',\n  ssn   : '|~person.ssn| (not really)',\n})\n\n/* loads someDog.json (assumes .json extension when none is provided), containing:\n{\n  id    : '|~misc.guid|',\n  owner : '|*someDude|'\n  name  : 'Dawg',\n}*/\nhazy.fixture.src('someDog')\n\nconst hazyDude = hazy.fixture.get('someDude')\nconst hazyDog  = hazy.fixture.get('someDog')\n```\n\nThe processed fixtures result as follows:\n\n```javascript\n// hazyDude\n{\n  id: 'e76de72e-6010-5140-a270-da7b6b6ad2d7',\n  name: 'Mr. Agnes Hammond',\n  bday: Wed Apr 27 1994 04:05:27 GMT-0700 (Pacific Daylight Time),\n  ssn: '264-66-4154 (not really)'\n}\n\n// hazyDog\n{\n  id: '427b2fa6-02f8-5be5-b3d1-cdf96f432e28',\n  name: 'Dawg',\n  owner: {\n    id: 'e76de72e-6010-5140-a270-da7b6b6ad2d7',\n    name: 'Mr. Agnes Hammond',\n    bday: Wed Apr 27 1994 04:05:27 GMT-0700 (Pacific Daylight Time),\n    ssn: '264-66-4154 (not really)'\n  }\n}\n```\n\n### Installation\n\n```\n\u003e npm install hazy\n```\n\nif you wish to develop:\n\n```\n\u003e git clone http://github.com/slurmulon/hazy.git\n\u003e cd hazy\n\u003e npm link hazy\n```\n\n### Test\n\n```\n\u003e cd hazy\n```\n\nthen\n\n```\n\u003e npm test\n```\n\n# Documentation\n\nThe following provides a high-level summary of all of Hazy's features as well as some examples and gotchas.\n\nA notable observation is that Hazy's syntax can be expressed quite simply:\n\n`|\u003coperator\u003e \u003cexpression|statement\u003e|`\n\nSupported operators are:\n\n * `~` generate random data\n * `*` embed fixture data from pool\n * `$` query by `JsonPath` pattern and embed fixture from pool\n * `@` find and embed fixture from filesystem\n * `?` find and embed fixture from pool or filesystem\n * `\u003e` evaluate content as literal JavaScript\n * `=` interpolate expression result\n\n(more thorough documentation on the way)\n\n## Randomness\n\nHazy sits on top of ChanceJS, a great library for generating all sorts of useful random data.\nHazy categorizes ChanceJS's generation methods for a more symantic syntax, but otherwise integration\nis completely transparent.\n\nThe token for generating random data is `~`:\n\n`|~ \u003cclass\u003e.\u003ctype\u003e|`\n\n### Random Data Tokens\n\n* `|~basic.\u003ctype\u003e|`\n\n  supports `'bool', 'character', 'integer', 'natural', 'string'`\n\n* `|~text.\u003ctype\u003e|`\n\n  supports `'paragraph', 'sentence', 'syllable', 'word'`\n\n* `|~person.\u003ctype\u003e|`\n\n  supports `'age', 'birthday', 'cpf', 'first', 'gender', 'last', 'name', 'prefix', 'ssn', 'suffix'`\n\n* `|~mobile.\u003ctype\u003e|`\n\n  supports `'android_id', 'apple_token', 'bb_pin', 'wp7_anid', 'wp8_anid2'`\n\n* `|~web.\u003ctype\u003e|`\n\n  supports `'color', 'domain', 'email', 'fbid', 'google_analytics', 'hashtag', 'ip', 'ipv6', 'klout', 'tld', 'twitter', 'url'`\n\n* `|~geo.\u003ctype\u003e|`\n\n  supports `'address', 'altitude', 'areacode', 'city', 'coordinates', 'country', 'depth', 'geohash', 'latitude', 'longitude', 'phone', 'postal', 'province', 'state', 'street', 'zip'`\n\n* `|~time.\u003ctype\u003e|`\n\n  supports `'ampm', 'date', 'hammertime', 'hour', 'millisecond', 'minute', 'month', 'second', 'timestamp', 'year'`\n\n* `|~misc.\u003ctype\u003e|`\n\n  supports `'guid', 'hash', 'hidden', 'n', 'normal', 'radio', 'rpg', 'tv', 'unique', 'weighted'`\n\n## Embedding\n\nHazy supports referencing and embedding other JSON fixtures (or really any value) present in the fixture pool using the `*` operator.\n\n`|* \u003cfixture-pool-key\u003e|`\n\nThe `someDog` example above already shows how this is used:\n\n```javascript\nhazy.fixture.register('someDog', {\n  id    : '|~misc.guid|',\n  owner : '|*someDude|'\n  name  : 'Dawg',\n})\n```\n\nthe above will resolve to the following provided that `someDude` is in the fixture pool:\n\n```javascript\n{\n  id: '427b2fa6-02f8-5be5-b3d1-cdf96f432e28',\n  name: 'Dawg',\n  owner: {\n    id: 'e76de72e-6010-5140-a270-da7b6b6ad2d7',\n    name: 'Mr. Agnes Hammond',\n    bday: Wed Apr 27 1994 04:05:27 GMT-0700 (Pacific Daylight Time),\n    ssn: '264-66-4154 (not really)'\n  }\n}\n```\n\nHazy also supports more advanced ways of embedding fixtures using queries, but more on that will follow\nin the next section.\n\n## Queries\n\nHazy utilizes `JsonPath` for defining functionality to pre-processed fixtures in a query-like fasion.\nDetails on `JsonPath` can be found at http://goessner.net/articles/JsonPath/. There are many ways in which\nJSON objects can be queried using this flexible technique.\n\nA primary goal of Hazy is to give developers both fine grained and generalized control over the data and\nfunctionality relevant to their fixtures.\n\nTake our `someDog` fixture, for example:\n\n```javascript\n{\n  id: '427b2fa6-02f8-5be5-b3d1-cdf96f432e28',\n  name: 'Dawg',\n  owner: {\n    id: 'e76de72e-6010-5140-a270-da7b6b6ad2d7',\n    name: 'Mr. Agnes Hammond',\n    bday: Wed Apr 27 1994 04:05:27 GMT-0700 (Pacific Daylight Time),\n    ssn: '264-66-4154 (not really)'\n  }\n}\n```\n\nWe can obtain the `id` of the dog's owner with the following query:\n\n`$.owner.id`\n\nAfter the fixture has been queried, this will result with:\n\n`e76de72e-6010-5140-a270-da7b6b6ad2d7`\n\n### Embedded Queries\n\n`JsonPath` expressions that match against the fixture pool can be specified with the query operator `$`.\nThe results of the expression and will be embedded into the fixture upon processing. The syntax for embedded queries is:\n\n`|$ \u003cjsonpath-expression\u003e|`\n\nwhere `\u003cjsonpath-expression\u003e` is a valid [JsonPath](http://goessner.net/articles/JsonPath/) expression (minus the leading '$')\n\n\u003e **Note:** Embedded queries (i.e. those defined outside of the lazy matcher pool `hazy.matcher`, particularly in source *.json files/data) are **not** and cannot be lazily evaluated because:\n\u003e\n\u003e 1. Very high risk of cyclic dependencies and infinite recursion (e.g., some fixtures may need to be lazily evaluated if they have not already been, potentially triggering an endless cycle)\n\u003e 2. Applying queries to pre-processed fixtures allows for cleaner queries (since you can query against Hazy tags) and provides consistent results.\n\u003e    If queries were applied to post-processed fixtures, they would be bottlenecked to only working with properties since the processed random values \n\u003e    are obviously inconsistent.\n\u003e\n\u003e See the section on [Lazy Query Matchers](#lazy-query-matchers) for a pragmatic and idiomatic solution to the issue.\n\nUse of the operator is straight forward:\n\n```javascript\nhazy.fixture.register('someShark', {\n  id   : '|~misc.guid|',\n  name : 'Tiger Shark',\n  ate  : '|$.id|', // queries pool for any fixture with an \"id\" property at the highest level\n})\n```\nthis will result with something like:\n\n```javascript\n{ \n  id: '64af61f8-daa8-5959-8be4-bdd536ecc5bd',\n  name: 'Tiger Shark',\n  ate: \n    [ { \n        id: 'e76de72e-6010-5140-a270-da7b6b6ad2d7',\n        name: 'Mr. Agnes Hammond',\n        bday: Wed Apr 27 1994 04:05:27 GMT-0700 (Pacific Daylight Time),\n        ssn: '264-66-4154 (not really)'\n      },\n      { \n        id: '427b2fa6-02f8-5be5-b3d1-cdf96f432e28',\n        name: 'Dawg',\n        owner: {\n          id: 'e76de72e-6010-5140-a270-da7b6b6ad2d7',\n          name: 'Mr. Agnes Hammond',\n          bday: Wed Apr 27 1994 04:05:27 GMT-0700 (Pacific Daylight Time),\n          ssn: '264-66-4154 (not really)'\n        }\n      } \n    ] \n}\n```\n\n\u003e **Note:** The query operator currently always returns an `Array`. I consider this a limitation because it makes it difficult to integrate queries with other expressions. I hope to address this issue soon.\n\nThe only known limitation on the nesting depth of embedded fixtures is the stack size of the process.  I have not pushed this limitation very far at all, but if any\nissues are encountered then please open an issue on Github.\n\n### Lazy Query Matchers\n\nWith Hazy we can leverage this powerful query mechanism in any Node environment to provide test-specific functionality to your fixtures.\nThis is achieved by monkey-patching fixtures in the pool that match a specific `JsonPath` pattern.\n\nFor example, if we wanted to query our fixture pool for any fixture with an `owner` object containing an `id` property\nand then update those fixtures with new `bark()` functionality, then we would use the following:\n\n```javascript\nhazy.matcher.config({\n  path   : '$.owner.id',\n  handle : (fixture, matches, pattern) =\u003e {\n    // return the fixture after mutating it (if you so desire)\n    return Object.assign({\n      hasOwner : true,\n      bark : () =\u003e {\n        console.log('woof woof, my owner is ', matches[0])\n      }\n    }, fixture)\n  }\n})\n\nhazy.fixture.register('someDogWithOwner', {\n  id    : '|~misc.guid|',\n  owner : '|*someDude|'\n  name  : 'Happy Dog',\n})\n\nhazy.fixture.register('someDogWithoutOwner', {\n  id   : '|~misc.guid|',\n  name : 'Lonely Dog'\n})\n\nconst happyDog  = hazy.fixture.get('someDogWithOwner')\nconst lonelyDog = hazy.fixture.get('someDogWithoutOwner')\n```\nSince the `matcher` only applies to fixtures with an owner id, only `happyDog` will contain the `hasOwner` property and\na `bark` method:\n\n```javascript\nhappyDog.bark()\n```\n\n\u003e `woof woof, my owner is e76de72e-6010-5140-a270-da7b6b6ad2d7`\n\n```javascript\nlonelyDog.bark()\n```\n\n\u003e `Error: undefined is not a method`\n\n-----\n\nThis feature can also be combined with `hazy.fork()` so that query matchers can be scoped to a particular state of the fixture pool.\nAny query matcher defined at a higher scope can be easily and safely overwritten in a Hazy fork:\n\n```javascript\nhazy.matcher.config({\n  path   : '$.owner.id',\n  handle : (fixture, matches, pattern) =\u003e {\n    // return the fixture after mutating it (if you so desire)\n    return Object.assign({\n      hasOwner : true,\n      bark : () =\u003e {\n        console.log('woof woof, my owner is ', matches[0])\n      }\n    }, fixture)  \n  }\n})\n\nhazy.fixture.register('someDogWithOwner', {\n  id    : '|~misc.guid|',\n  owner : '|*someDude|'\n  name  : 'Happy Dog',\n})\n\nconst happyDog  = hazy.fixture.get('someDogWithOwner')\nlet   sleepyDog = null\n\nfunction forkTest() {\n  const newHazy = hazy.fork()\n\n  newHazy.matcher.config({\n    path   : '$.owner.id',\n    handle : (fixture) =\u003e {\n      fixture.bark = () =\u003e {\n        console.log('zzzz, too tired')\n      }\n      \n      return fixture\n    }\n  })\n\n  sleepyDog = newHazy.fixture.get('someDogWithOwner')\n}\n\nforkTest()\n```\n\nand now...\n\n```javascript\nhappyDog.bark()\n```\n\u003e still prints `woof woof, my owner is e76de72e-6010-5140-a270-da7b6b6ad2d7`, while\n\n```javascript\nsleepyDog.bark()\n```\n\u003e now prints `zzzz, too tired`, overriding the matcher defined at a higher context level (AKA `happyDog`'s) safely\n\nLastly, you have some control over when evaluation occurs:\n\n * `hazy.fixture.get` will apply any pattern-matched functionality to the relevant fixture **each time** it is called.\n * `hazy.fixture.lazyGet` applies any pattern-matched functionality to the relevant fixture, but only does so **once (memoized)**.\n\nBoth implementations are technically lazy since their evaluation is deferred until the last minute, but `lazyGet` is even more so since it only runs once.\n\n## Scripting\n\nHazy also evaluates text through a `lodash` interpolation template. This enables you\nto include JavaScript expressions in your fixtures.\n\nThis is an experimental feature, so use it with caution.\n\n### Interpolate\nInsert the result of an expression. The fixture pool and random data factories are all available as variables.\n\nSpecified with the `=` operator.\n\n```javascript\nhazy.lang.process('{\"random_point\": \"|= random.basic.integer({min: 0, max: 100})|\"}')\n```\n\nAs a convenience, ES6's interpolation syntax can also be used:\n\n```javascript\nhazy.lang.process('{\"random_point\": \"${random.basic.integer({min: 0, max: 100})}\"}')\n```\n\n### Evaluate\nEvaluates content as JavaScript, allowing you to perform `if` statements, loops, etc.\n\nSpecified with the `\u003e` operator.\n\n```javascript\nhazy.lang.process('{\"random_point\": |\u003e if (foo) {| |=random.basic.integer({min: 0, max: 100})| |\u003e }|}', {foo: true})\n```\n\n## TODO\n\n- [ ] Silent/collapsed whitespace override (useful for loading fixtures into pool without having to print the contents)\n- [ ] Retain indentation of parent line\n- [ ] Cache last randomly generated result and allow user to easily re-use the latest value (allows fixtures to be consistent with each other when needed)\n- [ ] Array literal operator\n- [ ] Seeds for random data\n- [ ] Memoized/scoped random data\n- [ ] Support JSON Pointer\n- [ ] Support `json-rel`\n- [ ] Remote fixtures via `http`\n- [ ] CLI\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslurmulon%2Fhazy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fslurmulon%2Fhazy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslurmulon%2Fhazy/lists"}