{"_id":"@aimidy/render-rules","_rev":"6-8370b3c447d7ec5c10dada2533519d2c","name":"@aimidy/render-rules","dist-tags":{"latest":"1.1.3"},"versions":{"1.0.0":{"name":"@aimidy/render-rules","version":"1.0.0","keywords":["typescript","rules","render","render-rules","npm","aimidy","aimidy-render-rules"],"author":{"url":"https://github.com/aimidy","name":"Aimidy Lin","email":"zoe52888@gmail.com"},"license":"ISC","_id":"@aimidy/render-rules@1.0.0","maintainers":[{"name":"aimidy","email":"zoe52888@gmail.com"}],"homepage":"https://github.com/aimidy/render-rules#readme","bugs":{"url":"https://github.com/aimidy/render-rules/issues"},"dist":{"shasum":"6ab238edd64a1fb0ceec9e8cc7a2bab7ce848a74","tarball":"https://registry.npmjs.org/@aimidy/render-rules/-/render-rules-1.0.0.tgz","fileCount":8,"integrity":"sha512-cUt30UnQ3er9jLf2l17drbXwpsTN4vX0QfSsdjDSk9CkAS+yPUrlshzjK4kQEGLm/cdZaYZpBvvyU7XWaIhmaA==","signatures":[{"sig":"MEQCIFR+5fBpCED8d5wPgR0zWgqTNgZ5tefwlgmkSGGpHDLXAiABwPCBBPzSNE7KF/6+mB291fq8llVjdxJ5rLHrjSwxSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24890},"main":"index.js","type":"commonjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","gitHead":"1ea9caf95a6fbe2a93f013a0a49118537175ad48","scripts":{"push":"npm run build && npm publish --access=public","test":"jest","build":"tsup"},"_npmUser":{"name":"aimidy","email":"zoe52888@gmail.com"},"repository":{"url":"git+https://github.com/aimidy/render-rules.git","type":"git"},"_npmVersion":"11.4.1","description":"A library for rendering rules in TypeScript","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.5.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","prettier":"3.5.3","typescript":"^5.8.3","@types/jest":"^29.5.14"},"_npmOperationalInternal":{"tmp":"tmp/render-rules_1.0.0_1749620662480_0.4610684373783822","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aimidy/render-rules","version":"1.0.1","keywords":["typescript","rules","render","render-rules","npm","aimidy","aimidy-render-rules"],"author":{"url":"https://github.com/aimidy","name":"Aimidy Lin","email":"zoe52888@gmail.com"},"license":"ISC","_id":"@aimidy/render-rules@1.0.1","maintainers":[{"name":"aimidy","email":"zoe52888@gmail.com"}],"homepage":"https://github.com/aimidy/render-rules#readme","bugs":{"url":"https://github.com/aimidy/render-rules/issues"},"dist":{"shasum":"7459bda74eac483c32ce57c9431e1512b4109659","tarball":"https://registry.npmjs.org/@aimidy/render-rules/-/render-rules-1.0.1.tgz","fileCount":8,"integrity":"sha512-Pg5I6gcbLNBEwKiqI4IV1759BXI+gevfzUsK4btjoao6vzeg5Casu3U1efcJEfj0OYHk0x/tEKVfMR3RKRxuhw==","signatures":[{"sig":"MEUCIQCblQizfA1Fdc+O/mfIu06O6yFilW7x7Jo9ADn3XZR7hgIgKk/BfgbO22WPfQKMoEbA3+OkMWJpOke6LYb0A5D9by0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28729},"main":"index.js","type":"commonjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","gitHead":"2d7d0f8c9839019a00842132ca7cd45a573980be","scripts":{"push":"npm run build && npm publish --access=public","test":"jest","build":"tsup"},"_npmUser":{"name":"aimidy","email":"zoe52888@gmail.com"},"repository":{"url":"git+https://github.com/aimidy/render-rules.git","type":"git"},"_npmVersion":"11.4.1","description":"A library for rendering rules in TypeScript","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.5.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","prettier":"3.5.3","typescript":"^5.8.3","@types/jest":"^29.5.14"},"_npmOperationalInternal":{"tmp":"tmp/render-rules_1.0.1_1749623263472_0.5549356767428231","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aimidy/render-rules","version":"1.1.0","keywords":["typescript","rules","render","render-rules","npm","aimidy","aimidy-render-rules"],"author":{"url":"https://github.com/aimidy","name":"Aimidy Lin","email":"zoe52888@gmail.com"},"license":"ISC","_id":"@aimidy/render-rules@1.1.0","maintainers":[{"name":"aimidy","email":"zoe52888@gmail.com"}],"homepage":"https://github.com/aimidy/render-rules#readme","bugs":{"url":"https://github.com/aimidy/render-rules/issues"},"dist":{"shasum":"36df7cb60d5ac3ce2bb61e6cfd70c7a34270bfef","tarball":"https://registry.npmjs.org/@aimidy/render-rules/-/render-rules-1.1.0.tgz","fileCount":8,"integrity":"sha512-NZ4LgEw+jeTERYwSqEeHbznPNilhKkr/CtC/aZ1ufSDltNxvycp61ZManaiUZf1DFhL32EVW6Cj06gcnaMkXKg==","signatures":[{"sig":"MEQCIEBdaITn2Nuyj7FmlHZHfp+ngPAuBq+iw9KxP27XVGEsAiAbI35BezHd/xk3+B9dQdfK+CYDg3KE8uKltCS4t8UMow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43256},"main":"index.js","type":"commonjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","gitHead":"2d7d0f8c9839019a00842132ca7cd45a573980be","scripts":{"push":"npm run build && npm publish --access=public","test":"jest","build":"tsup"},"_npmUser":{"name":"aimidy","email":"zoe52888@gmail.com"},"repository":{"url":"git+https://github.com/aimidy/render-rules.git","type":"git"},"_npmVersion":"11.5.2","description":"A library for rendering rules in TypeScript","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.5.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","prettier":"3.5.3","typescript":"^5.8.3","@types/jest":"^29.5.14"},"_npmOperationalInternal":{"tmp":"tmp/render-rules_1.1.0_1755843812392_0.6050596566502298","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@aimidy/render-rules","version":"1.1.1","keywords":["typescript","rules","render","render-rules","npm","aimidy","aimidy-render-rules"],"author":{"url":"https://github.com/aimidy","name":"Aimidy Lin","email":"zoe52888@gmail.com"},"license":"ISC","_id":"@aimidy/render-rules@1.1.1","maintainers":[{"name":"aimidy","email":"zoe52888@gmail.com"}],"homepage":"https://github.com/aimidy/render-rules#readme","bugs":{"url":"https://github.com/aimidy/render-rules/issues"},"dist":{"shasum":"aa898ef7a387761729c592c89392755f5a8362f3","tarball":"https://registry.npmjs.org/@aimidy/render-rules/-/render-rules-1.1.1.tgz","fileCount":8,"integrity":"sha512-tyUswIqplMXzyRIffl5vWyyObtDxI1r074HUaesvCJ1UbKmEjUocoznYI8ffjqf1exn7sHXVEqgKnz3UsQTJ2w==","signatures":[{"sig":"MEQCIBxDyfYjxqrvByMHJ6lsyeF0uJKKnxl7ODCgFbE790ChAiB3EzTU0cFWC5hSF4qwbzSY4yEyLQjdAK58j1s/RRNrsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56505},"main":"index.js","type":"commonjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","gitHead":"8a30bedff45742a22ac25b0e8a119d89e564a8e1","scripts":{"push":"npm run build && npm publish --access=public","test":"jest","build":"tsup"},"_npmUser":{"name":"aimidy","email":"zoe52888@gmail.com"},"repository":{"url":"git+https://github.com/aimidy/render-rules.git","type":"git"},"_npmVersion":"11.5.2","description":"A library for rendering rules in TypeScript","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.5.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","prettier":"3.5.3","typescript":"^5.8.3","@types/jest":"^29.5.14"},"_npmOperationalInternal":{"tmp":"tmp/render-rules_1.1.1_1757052702161_0.5166826921788101","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@aimidy/render-rules","version":"1.1.2","keywords":["typescript","rules","render","render-rules","npm","aimidy","aimidy-render-rules"],"author":{"url":"https://github.com/aimidy","name":"Aimidy Lin","email":"zoe52888@gmail.com"},"license":"ISC","_id":"@aimidy/render-rules@1.1.2","maintainers":[{"name":"aimidy","email":"zoe52888@gmail.com"}],"homepage":"https://github.com/aimidy/render-rules#readme","bugs":{"url":"https://github.com/aimidy/render-rules/issues"},"dist":{"shasum":"225be26bfec1fd0a3f1ca389720c442cf69851ef","tarball":"https://registry.npmjs.org/@aimidy/render-rules/-/render-rules-1.1.2.tgz","fileCount":8,"integrity":"sha512-12qlU0Q+ATNLqY/26oPSp5V+yOU+mh0aDYwLg9HR+O57iPoOZGWvb7L9sz0QZjuO4nLvbIk9ThIPuIWXmWJWzA==","signatures":[{"sig":"MEUCIQDXauQzVLDEjTY42CJ5JQybHpUcwCYCs2rUShUn1p4pgwIgLZvayIKYufEcJCV0s29YAB9xdbEWWsS91gpKKOn4RNM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55555},"main":"index.js","type":"commonjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","gitHead":"86357573b6791c988f1a4a0865851792fef21627","scripts":{"push":"npm run build && npm publish --access=public","test":"jest","build":"tsup"},"_npmUser":{"name":"aimidy","email":"zoe52888@gmail.com"},"repository":{"url":"git+https://github.com/aimidy/render-rules.git","type":"git"},"_npmVersion":"11.6.0","description":"A library for rendering rules in TypeScript","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.5.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","prettier":"3.5.3","typescript":"^5.8.3","@types/jest":"^29.5.14"},"_npmOperationalInternal":{"tmp":"tmp/render-rules_1.1.2_1757056269923_0.5839643827074659","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@aimidy/render-rules","version":"1.1.3","description":"A library for rendering rules in TypeScript","license":"ISC","author":{"name":"Aimidy Lin","email":"zoe52888@gmail.com","url":"https://github.com/aimidy"},"type":"commonjs","main":"index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","scripts":{"build":"tsup","test":"jest","push":"npm run build && npm publish --access=public"},"repository":{"type":"git","url":"git+https://github.com/aimidy/render-rules.git"},"keywords":["typescript","rules","render","render-rules","npm","aimidy","aimidy-render-rules"],"devDependencies":{"@types/jest":"^29.5.14","jest":"^29.7.0","prettier":"3.5.3","ts-jest":"^29.3.4","ts-node":"^10.9.2","tsup":"^8.5.0","typescript":"^5.8.3"},"gitHead":"0db0e41aff1081c1f9eb14b3c5e44d1423d45a01","_id":"@aimidy/render-rules@1.1.3","bugs":{"url":"https://github.com/aimidy/render-rules/issues"},"homepage":"https://github.com/aimidy/render-rules#readme","_nodeVersion":"24.9.0","_npmVersion":"11.6.1","dist":{"integrity":"sha512-NV+ZTqik9glpENzNpvAtbH/Kn97OCvSz5wh1/6EGkXk/zIx8Oh0sRHUOitrzou+C6jwR2in9Mjst4CeH42ZfXg==","shasum":"46882533a5373f14d1481460c1cbc6c2ae8d6b44","tarball":"https://registry.npmjs.org/@aimidy/render-rules/-/render-rules-1.1.3.tgz","fileCount":8,"unpackedSize":63564,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICOJRq7pFicErsRbciM6BDXG+OIV/bkhdefQshIBjQ7kAiBc6c23MTQUZXI+n34EpYI4uyOJvCUinYdL9PdvDd0Q4Q=="}]},"_npmUser":{"name":"aimidy","email":"zoe52888@gmail.com"},"directories":{},"maintainers":[{"name":"aimidy","email":"zoe52888@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/render-rules_1.1.3_1760509463914_0.3842856041502787"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-11T05:44:22.383Z","modified":"2025-10-15T06:24:24.343Z","1.0.0":"2025-06-11T05:44:22.645Z","1.0.1":"2025-06-11T06:27:43.663Z","1.1.0":"2025-08-22T06:23:32.593Z","1.1.1":"2025-09-05T06:11:42.345Z","1.1.2":"2025-09-05T07:11:10.099Z","1.1.3":"2025-10-15T06:24:24.151Z"},"bugs":{"url":"https://github.com/aimidy/render-rules/issues"},"author":{"name":"Aimidy Lin","email":"zoe52888@gmail.com","url":"https://github.com/aimidy"},"license":"ISC","homepage":"https://github.com/aimidy/render-rules#readme","keywords":["typescript","rules","render","render-rules","npm","aimidy","aimidy-render-rules"],"repository":{"type":"git","url":"git+https://github.com/aimidy/render-rules.git"},"description":"A library for rendering rules in TypeScript","maintainers":[{"name":"aimidy","email":"zoe52888@gmail.com"}],"readme":"# render-rules\r\n\r\nLightweight, composable rule evaluation engine for objects (and arrays of objects). Define simple field conditions or nest logical groups (`all` / `any`) with optional negation. Includes rich date/time operators and relative-now comparisons.\r\n\r\n## Features\r\n\r\n- Simple field conditions (equality, comparison, membership, string ops)\r\n- Nested logical groups: `all` (AND) / `any` (OR)\r\n- `not` inversion available on any condition or group\r\n- Array row evaluation (rows array is treated with OR semantics)\r\n- Date & time operators (absolute & relative to `Date.now()`)\r\n- Robust handling of mixed input types: `Date`, ISO string, timestamp number\r\n- Graceful failure (invalid date inputs yield `false`, unknown operator throws)\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @aimidy/render-rules\r\n```\r\n\r\n## Basic Usage\r\n\r\n```ts\r\nimport { evaluateCondition } from '@aimidy/render-rules';\r\n\r\nconst rule = { field: 'age', operator: 'equals', value: 30 };\r\nconst row = { age: 30 };\r\n\r\nconsole.log(evaluateCondition(rule, row)); // true\r\n```\r\n\r\n## Configuration Options\r\n\r\nThe `evaluateCondition` function accepts an optional `options` parameter for customizing evaluation behavior:\r\n\r\n```ts\r\ninterface EvaluateOptions {\r\n    treatMissingRowAsFalse?: boolean; // default: true\r\n    onError?: (err: Error, info: { rule: Rule | Condition; row: any }) => void;\r\n}\r\n```\r\n\r\n### `treatMissingRowAsFalse`\r\n\r\nControls how `null` or `undefined` rows are handled:\r\n\r\n```ts\r\n// Default behavior (treatMissingRowAsFalse: true)\r\nevaluateCondition(rule, null); // false\r\nevaluateCondition(rule, undefined); // false\r\n\r\n// Alternative behavior (treatMissingRowAsFalse: false)\r\nevaluateCondition(rule, null, { treatMissingRowAsFalse: false }); // true\r\nevaluateCondition(rule, undefined, { treatMissingRowAsFalse: false }); // true\r\n```\r\n\r\n### `onError` Callback\r\n\r\nProvides custom error handling instead of throwing exceptions:\r\n\r\n```ts\r\nconst options = {\r\n    onError: (error, info) => {\r\n        console.log('Evaluation error:', error.message);\r\n        console.log('Rule:', info.rule);\r\n        console.log('Row:', info.row);\r\n    },\r\n};\r\n\r\n// Instead of throwing, calls onError and returns false\r\nevaluateCondition({ field: 'x', operator: 'unknown', value: 1 }, { x: 1 }, options); // false (calls onError callback)\r\n```\r\n\r\n## Supported Operators\r\n\r\n| Category          | Operators                                                                                                                                  |\r\n| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\r\n| Comparison        | `equals`, `notEquals`, `greaterThan`, `lessThan`                                                                                           |\r\n| Collection/String | `contains`, `startsWith`, `endsWith`, `in`, `notIn`                                                                                        |\r\n| Date / Time       | `dateEquals`, `dateNotEquals`, `dateAfter`, `dateBefore`, `dateOnOrAfter`, `dateOnOrBefore`, `nowAfterPlusMinutes`, `nowBeforePlusMinutes` |\r\n\r\n### Date / Time Operator Semantics\r\n\r\n| Operator               | Meaning (row.dt vs rule.value)      |\r\n| ---------------------- | ----------------------------------- |\r\n| `dateEquals`           | row time === value time             |\r\n| `dateNotEquals`        | row time !== value time             |\r\n| `dateAfter`            | row time > value time               |\r\n| `dateBefore`           | row time < value time               |\r\n| `dateOnOrAfter`        | row time >= value time              |\r\n| `dateOnOrBefore`       | row time <= value time              |\r\n| `nowAfterPlusMinutes`  | `Date.now()` > (row time + minutes) |\r\n| `nowBeforePlusMinutes` | `Date.now()` < (row time + minutes) |\r\n\r\nAccepted date inputs for both sides (where applicable): `Date` instance, ISO 8601 string, or numeric timestamp (milliseconds). If either side cannot be parsed into a valid date the result is `false` (for `dateNotEquals`, implementation also returns `false` when invalid).\r\n\r\n### Example: Date & Relative Time\r\n\r\n```ts\r\nconst row = {\r\n    startAt: '2024-01-01T10:00:00.000Z',\r\n    endAt: new Date('2024-01-01T12:00:00.000Z'),\r\n};\r\n\r\n// startAt after 09:00Z?\r\nevaluateCondition(\r\n    { field: 'startAt', operator: 'dateAfter', value: '2024-01-01T09:00:00.000Z' },\r\n    row,\r\n); // true\r\n\r\n// endAt on or after noon?\r\nevaluateCondition(\r\n    { field: 'endAt', operator: 'dateOnOrAfter', value: '2024-01-01T12:00:00.000Z' },\r\n    row,\r\n); // true\r\n\r\n// Has 30 minutes passed since startAt?\r\nevaluateCondition({ field: 'startAt', operator: 'nowAfterPlusMinutes', value: 30 }, row);\r\n\r\n// Are we still before startAt + 90 minutes?\r\nevaluateCondition({ field: 'startAt', operator: 'nowBeforePlusMinutes', value: 90 }, row);\r\n```\r\n\r\n## Nested Groups (`all` / `any`)\r\n\r\n```ts\r\nconst groupRule = {\r\n    all: [\r\n        { field: 'age', operator: 'greaterThan', value: 18 },\r\n        { field: 'status', operator: 'equals', value: 'active' },\r\n    ],\r\n};\r\n\r\nevaluateCondition(groupRule, { age: 25, status: 'active' }); // true\r\n\r\n// With error handling\r\nevaluateCondition(\r\n    groupRule,\r\n    { age: 25, status: 'active' },\r\n    {\r\n        onError: (error) => console.log('Error:', error.message),\r\n    },\r\n); // true\r\n```\r\n\r\nCombining `any` + `all`:\r\n\r\n```ts\r\nconst nested = {\r\n    any: [\r\n        { field: 'role', operator: 'equals', value: 'admin' },\r\n        {\r\n            all: [\r\n                { field: 'age', operator: 'greaterThan', value: 18 },\r\n                { field: 'status', operator: 'equals', value: 'active' },\r\n            ],\r\n        },\r\n    ],\r\n};\r\n\r\nevaluateCondition(nested, { age: 25, status: 'active', role: 'user' }); // true\r\n```\r\n\r\n## Array Row Evaluation (OR semantics)\r\n\r\nIf you pass an array of rows, the rule is considered satisfied if ANY row matches.\r\n\r\n```ts\r\nconst rows = [{ age: 20 }, { age: 30 }];\r\nevaluateCondition({ field: 'age', operator: 'equals', value: 30 }, rows); // true\r\n```\r\n\r\n## Negation (`not`)\r\n\r\n```ts\r\nevaluateCondition({ field: 'age', operator: 'equals', value: 30, not: true }, { age: 30 }); // false\r\n\r\nevaluateCondition(\r\n    {\r\n        all: [\r\n            { field: 'age', operator: 'greaterThan', value: 18 },\r\n            { field: 'status', operator: 'equals', value: 'active' },\r\n        ],\r\n        not: true,\r\n    },\r\n    { age: 25, status: 'active' },\r\n); // false\r\n```\r\n\r\n## Error Handling\r\n\r\nBy default, unknown operators and invalid inputs throw errors:\r\n\r\n```ts\r\ntry {\r\n    evaluateCondition({ field: 'x', operator: 'unknown', value: 1 }, { x: 1 });\r\n} catch (err) {\r\n    console.error(err); // Unknown operator: unknown\r\n}\r\n```\r\n\r\n### Custom Error Handling with `onError`\r\n\r\nInstead of throwing exceptions, you can provide an error callback:\r\n\r\n```ts\r\nconst options = {\r\n    onError: (error, info) => {\r\n        console.log('Evaluation failed:', error.message);\r\n        console.log('Rule:', info.rule);\r\n        console.log('Row data:', info.row);\r\n        // Log to monitoring service, etc.\r\n    },\r\n};\r\n\r\n// Returns false instead of throwing\r\nevaluateCondition({ field: 'x', operator: 'unknown', value: 1 }, { x: 1 }, options); // false (calls onError callback)\r\n\r\n// Also handles invalid row types\r\nevaluateCondition({ field: 'age', operator: 'equals', value: 30 }, 'not an object', options); // false (calls onError callback)\r\n```\r\n\r\n### Handling Missing Rows\r\n\r\nControl how `null` or `undefined` rows are treated:\r\n\r\n```ts\r\n// Default: treat missing rows as false\r\nevaluateCondition(rule, null); // false\r\nevaluateCondition(rule, undefined); // false\r\n\r\n// Alternative: treat missing rows as true\r\nevaluateCondition(rule, null, { treatMissingRowAsFalse: false }); // true\r\nevaluateCondition(rule, undefined, { treatMissingRowAsFalse: false }); // true\r\n```\r\n\r\n## Testing\r\n\r\nThis project uses Jest.\r\n\r\n```bash\r\nnpm test\r\n```\r\n\r\n## License\r\n\r\nISC\r\n","readmeFilename":"README.md"}