{"_id":"@destinlmincy/rcv-core-logic","_rev":"6-80067bb8cfd5ed721b0b0acca1b9a7a0","name":"@destinlmincy/rcv-core-logic","dist-tags":{"latest":"2.0.0"},"versions":{"0.0.0":{"name":"@destinlmincy/rcv-core-logic","version":"0.0.0","keywords":["rcv","ranked","choice","voting","elections"],"author":{"name":"Destin L. Mincy"},"license":"Apache-2.0","_id":"@destinlmincy/rcv-core-logic@0.0.0","maintainers":[{"name":"destinlmincy","email":"destin.mincy@gmail.com"}],"homepage":"https://github.com/DestinMincy/rcv-core-logic#readme","bugs":{"url":"https://github.com/DestinMincy/rcv-core-logic/issues"},"dist":{"shasum":"dfebc8ec8449a88c350dabce0672a85a06045a49","tarball":"https://registry.npmjs.org/@destinlmincy/rcv-core-logic/-/rcv-core-logic-0.0.0.tgz","fileCount":6,"integrity":"sha512-9CVs2Dy1bEdu3RRhvp8/NIMVw/NyOIzRoAL7cyH7zuY+0v1+bXp8WJVTW6bO+RvW+10jVRkcUdAjZje8ldrUdQ==","signatures":[{"sig":"MEQCIHw5dWoD37sOLrJovfK67WtwMhmct/DKIv4v8576YrPTAiBet6J1Cj47omIHZcNPB3TWW2aJXHTIhZNe9wE5i4x/Vg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34812},"main":"index.js","type":"commonjs","gitHead":"9895ad257b6b5b9379e8d9a3fe477fc8a7ec7685","scripts":{"test":"node test.js"},"_npmUser":{"name":"destinlmincy","email":"destin.mincy@gmail.com"},"repository":{"url":"git+https://github.com/DestinMincy/rcv-core-logic.git","type":"git"},"_npmVersion":"11.6.2","description":"A pure, lightweight, and dependency-free JavaScript library for calculating Ranked Choice Voting (RCV) elections.","directories":{},"_nodeVersion":"22.13.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/rcv-core-logic_0.0.0_1762093567583_0.5823779139657861","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@destinlmincy/rcv-core-logic","version":"1.0.0","keywords":["rcv","ranked","choice","voting","elections"],"author":{"name":"Destin L. Mincy"},"license":"Apache-2.0","_id":"@destinlmincy/rcv-core-logic@1.0.0","maintainers":[{"name":"destinlmincy","email":"destin.mincy@gmail.com"}],"homepage":"https://github.com/DestinMincy/rcv-core-logic#readme","bugs":{"url":"https://github.com/DestinMincy/rcv-core-logic/issues"},"dist":{"shasum":"b45565d43450ea4b5883afe0d4572e59f91c9510","tarball":"https://registry.npmjs.org/@destinlmincy/rcv-core-logic/-/rcv-core-logic-1.0.0.tgz","fileCount":6,"integrity":"sha512-GYHGPw42KZhih9Sm4Bb0lLR5ChH7Q5cbNUtr0zOqphOWlPTdf1HqACsu4JEfoxOGBamJhRprFEBq1e1ttt+BIA==","signatures":[{"sig":"MEYCIQDFzAUzMoM6256Uxo2EPXFM9FCIbsRBlan3mURJTLPO/AIhAPjn77GEMzg/9bTZhGxzAI9G7HtcCkuCELDV7Gris/To","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34812},"main":"index.js","type":"commonjs","gitHead":"2d2c821f6e0634780c762d46a87cd0098e64b6a6","scripts":{"test":"node test.js"},"_npmUser":{"name":"destinlmincy","email":"destin.mincy@gmail.com"},"repository":{"url":"git+https://github.com/DestinMincy/rcv-core-logic.git","type":"git"},"_npmVersion":"11.6.2","description":"A pure, lightweight, and dependency-free JavaScript library for calculating Ranked Choice Voting (RCV) elections.","directories":{},"_nodeVersion":"22.13.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/rcv-core-logic_1.0.0_1762093871962_0.8044577146840604","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@destinlmincy/rcv-core-logic","version":"1.0.1","keywords":["rcv","ranked","choice","voting","elections"],"author":{"name":"Destin L. Mincy"},"license":"Apache-2.0","_id":"@destinlmincy/rcv-core-logic@1.0.1","maintainers":[{"name":"destinlmincy","email":"destin.mincy@gmail.com"}],"homepage":"https://github.com/DestinMincy/rcv-core-logic#readme","bugs":{"url":"https://github.com/DestinMincy/rcv-core-logic/issues"},"dist":{"shasum":"e79ed35b41fb9fd3a94783d602c06cf756b8f7d8","tarball":"https://registry.npmjs.org/@destinlmincy/rcv-core-logic/-/rcv-core-logic-1.0.1.tgz","fileCount":6,"integrity":"sha512-uw/M9hiXtV5fZJyPyMCCc0kQOfF0tHtVYSv0g08ATDkeLlWp5RslKdy7vmYxZ3ImIA80hklyvjfpyEHdw8F9pg==","signatures":[{"sig":"MEUCIQC9lJyWzxMomAx0TmK1ckL0hYcdQX51gywO7P0Q3IcsMgIgVXhEfRh0WgHwyCuH5+VTcsT4/lRL6qiaSFcdLJl8s4I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34797},"main":"index.js","type":"commonjs","gitHead":"b1e5df0d6f8b8cea2d11dbf019aac5396a7272b0","scripts":{"test":"node test.js"},"_npmUser":{"name":"destinlmincy","email":"destin.mincy@gmail.com"},"repository":{"url":"git+https://github.com/DestinMincy/rcv-core-logic.git","type":"git"},"_npmVersion":"11.6.2","description":"A pure, lightweight, and dependency-free JavaScript library for calculating Ranked Choice Voting (RCV) elections.","directories":{},"_nodeVersion":"22.13.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/rcv-core-logic_1.0.1_1762100336856_0.8328778237479542","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@destinlmincy/rcv-core-logic","version":"1.0.2","keywords":["rcv","ranked","choice","voting","elections"],"author":{"name":"Destin L. Mincy"},"license":"Apache-2.0","_id":"@destinlmincy/rcv-core-logic@1.0.2","maintainers":[{"name":"destinlmincy","email":"destin.mincy@gmail.com"}],"homepage":"https://github.com/DestinMincy/rcv-core-logic#readme","bugs":{"url":"https://github.com/DestinMincy/rcv-core-logic/issues"},"dist":{"shasum":"e1a96bbd4fe07e1f653e3b4cad11f4f2301d4946","tarball":"https://registry.npmjs.org/@destinlmincy/rcv-core-logic/-/rcv-core-logic-1.0.2.tgz","fileCount":7,"integrity":"sha512-nYyXAPyewiPkboebV5xkn5Q2q+y+k1pwhglts6V9YhCqQM1Yrq6FY8eJQ8uFBQ7g1SMZX/A/xC3E9y18Qq96Dw==","signatures":[{"sig":"MEUCIE2HCOx6gPLMIDgzPsQoOAiZ8MnrdBECLDSW6ZzqM2ImAiEA/zN7utCts26MV2HkQXBPQPRouBldL1BLUovWn2bdnZ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35570},"main":"index.js","type":"commonjs","gitHead":"065b830e8951ae717ecb3c759c13c92c185c2860","scripts":{"test":"node test.js"},"_npmUser":{"name":"destinlmincy","email":"destin.mincy@gmail.com"},"repository":{"url":"git+https://github.com/DestinMincy/rcv-core-logic.git","type":"git"},"_npmVersion":"10.8.2","description":"A pure, lightweight, and dependency-free JavaScript library for calculating Ranked Choice Voting (RCV) elections.","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/rcv-core-logic_1.0.2_1762106292440_0.4129348383404847","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@destinlmincy/rcv-core-logic","version":"1.0.3","keywords":["rcv","ranked","choice","voting","elections"],"author":{"name":"Destin L. Mincy"},"license":"Apache-2.0","_id":"@destinlmincy/rcv-core-logic@1.0.3","maintainers":[{"name":"destinlmincy","email":"destin.mincy@gmail.com"}],"homepage":"https://github.com/DestinMincy/rcv-core-logic#readme","bugs":{"url":"https://github.com/DestinMincy/rcv-core-logic/issues"},"dist":{"shasum":"7e2312c3005ee69311ca60a61fca1c02063d07ee","tarball":"https://registry.npmjs.org/@destinlmincy/rcv-core-logic/-/rcv-core-logic-1.0.3.tgz","fileCount":7,"integrity":"sha512-T3U3LyIVEl1YIIrFG37Paz6WQ9yBY91MAm0Xx343Ih+jU+hocljkcouV1lDjxQbKg8kYyN4C1uI1TeIqjeifGg==","signatures":[{"sig":"MEUCIAj4LxCQzOOuuHfkhqTrTeHe7g9dUcHUl7u/nSVW+dKXAiEA4/kHMf+XaM7PgxAylCet77pLkL/+1L1S7fBt3CKlZss=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36995},"main":"index.js","type":"commonjs","gitHead":"7fa0fa1eb6fedbd3f94717b1eb03c1cb5cc28ad8","scripts":{"test":"node test.js"},"_npmUser":{"name":"destinlmincy","email":"destin.mincy@gmail.com"},"repository":{"url":"git+https://github.com/DestinMincy/rcv-core-logic.git","type":"git"},"_npmVersion":"10.8.2","description":"A pure, lightweight, and dependency-free JavaScript library for calculating Ranked Choice Voting (RCV) elections.","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/rcv-core-logic_1.0.3_1762172430424_0.2584278321549405","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"_id":"@destinlmincy/rcv-core-logic@2.0.0","bugs":{"url":"https://github.com/DestinMincy/rcv-core-logic/issues"},"dist":{"shasum":"c18d42ee1c9c8560a53a4ad8f2790e1564147d1c","tarball":"https://registry.npmjs.org/@destinlmincy/rcv-core-logic/-/rcv-core-logic-2.0.0.tgz","fileCount":8,"integrity":"sha512-wlODFbYJRPQFcqZ/KPH9+K8/jqZmUgtKVg6F0Ut+j2XlvLjf3NsBKE6BGjC4yI/eF8hX/T1TVYSehTvmRtKWSw==","signatures":[{"sig":"MEQCIFM67f4ZvMO8TXvM/+1XJuNhFK4YOT4YzzlMULbWHn2QAiBWykWKnszQRBYCEhBKIPcKY+aeCvnPtKuWAIBvdCbO1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHS8qZt3reoGLTj20H9OmupkEuBAV5gCykCk4yMpwJAPAiAq404q6vbO7+/BkmsXatXTUkn2ifJzz1UYAtEoiq6LRA=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@destinlmincy%2frcv-core-logic@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":56753},"main":"index.js","name":"@destinlmincy/rcv-core-logic","type":"commonjs","author":{"name":"Destin L. Mincy"},"gitHead":"a76a3e2c6a0fd7f6dccb9fb8095542521c0ab597","license":"SEE LICENSE IN LICENSE","scripts":{"test":"node test.js"},"version":"2.0.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fc3ed21f-5bc9-4711-80e3-325dead1c60f"}},"homepage":"https://github.com/DestinMincy/rcv-core-logic#readme","keywords":["rcv","ranked","choice","voting","elections"],"repository":{"url":"git+https://github.com/DestinMincy/rcv-core-logic.git","type":"git"},"_npmVersion":"11.20.0","description":"A pure, lightweight, and dependency-free JavaScript library for calculating Ranked Choice Voting (RCV) elections.","directories":{},"maintainers":[{"name":"destinlmincy","email":"destin.mincy@gmail.com"}],"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rcv-core-logic_2.0.0_1790403345533_0.29840509954018524"}}},"time":{"created":"2025-11-02T14:26:07.465Z","modified":"2026-09-26T06:15:45.971Z","0.0.0":"2025-11-02T14:26:07.815Z","1.0.0":"2025-11-02T14:31:12.163Z","1.0.1":"2025-11-02T16:18:57.045Z","1.0.2":"2025-11-02T17:58:12.629Z","1.0.3":"2025-11-03T12:20:30.624Z","2.0.0":"2026-09-26T06:15:45.637Z"},"bugs":{"url":"https://github.com/DestinMincy/rcv-core-logic/issues"},"author":{"name":"Destin L. Mincy"},"license":"SEE LICENSE IN LICENSE","homepage":"https://github.com/DestinMincy/rcv-core-logic#readme","keywords":["rcv","ranked","choice","voting","elections"],"repository":{"url":"git+https://github.com/DestinMincy/rcv-core-logic.git","type":"git"},"description":"A pure, lightweight, and dependency-free JavaScript library for calculating Ranked Choice Voting (RCV) elections.","maintainers":[{"name":"destinlmincy","email":"destin.mincy@gmail.com"}],"readme":"# rcv-core-logic\n\n[![NPM Version](https://img.shields.io/npm/v/@destinlmincy/rcv-core-logic)](https://www.npmjs.com/package/@destinlmincy/rcv-core-logic)\n[![License](https://img.shields.io/badge/License-Apache%202.0%20%2B%20Commons%20Clause-blue.svg)](https://github.com/DestinMincy/rcv-core-logic/blob/master/LICENSE)\n![Completed]( https://img.shields.io/badge/Progress-Complete-green)\n\nA pure, lightweight, and dependency-free JavaScript library for calculating Ranked Choice Voting (RCV) elections.\n\n---\n\n## ⚠️ License & Commercial Use\n\nThis is a proprietary, **source-available** library.\n\nIt is licensed under **Apache 2.0 with The Commons Clause** (v1.0). This means you are free to view, fork, and refer to this code for **personal, non-commercial, and evaluation purposes only.**\n\nYou **may not** use this code, in whole or in part, for any commercial purpose, include it in a commercial product, or offer it as a paid service without the express written permission of the copyright holder.\n\n- See the `LICENSE` file for the full Apache 2.0 terms.\n- See the `COMMONS_CLAUSE` file for the commercial restrictions.\n\n---\n\n## Core Philosophy\n\nThis library is designed to be the \"mathematical engine\" for a larger voting application. It follows a pure, functional approach:\n\n- **Pure:** Contains zero external dependencies.\n- **Testable:** Can be fully unit-tested without needing a database or network connection.\n- **Reusable:** This logic can be imported by any application without tying it to a specific framework. It just takes in data and returns data.\n\n---\n\n## Installation\n\n```bash\nnpm install @destinlmincy/rcv-core-logic\n\n```\n\n---\n\n## API Reference\n\nThe library exports four functions.\n\n`validateVote(ballot, candidates)`\nChecks if a single ballot is valid. A valid ballot must not contain any duplicate candidates or any candidates that are not on the official list.\n\n**Arguments:**\n\n- `ballot` (Array<string>): A voter's ranked choices, e.g., `['option_A', 'option_C']`.\n\n- `candidates` (Array<string>): The official list of all valid candidates, e.g., `['option_A', 'option_B', 'option_C']`.\n\n**Returns:** (object): An object with a `valid` boolean and an `error` message.\n\n- `{ valid: true, error: null }`\n\n- `{ valid: false, error: 'Reason for failure' }`\n\n**Example:**\n\n```JavaScript\n\nconst { validateVote } = require('@destinlmincy/rcv-core-logic');\n\nconst candidates = ['A', 'B', 'C'];\n\n// Valid vote\nconst vote1 = ['A', 'C', 'B'];\nconsole.log(validateVote(vote1, candidates));\n// Output: { valid: true, error: null }\n\n// Invalid: Contains a duplicate\nconst vote2 = ['B', 'A', 'B'];\nconsole.log(validateVote(vote2, candidates));\n// Output: { valid: false, error: 'Duplicate found: ballot contains repeated option rankings.' }\n\n// Invalid: Contains an unknown candidate\nconst vote3 = ['D', 'A'];\nconsole.log(validateVote(vote3, candidates));\n// Output: { valid: false, error: 'Invalid choice: \"D\" is not one of the options.' }\n\n```\n\n`formatBallots(rawVotes, candidates, onInvalid)`\nCleans and formats a \"messy\" array of vote objects (e.g., from a database) into a \"clean\" array of arrays for the tally function. It uses validateVote() internally to filter out any invalid ballots.\n\n**Arguments:**\n\n- `rawVotes` (Array<object>): An array of vote objects. Each object must have a rankings property that is an array of strings.\n\n- `candidates` (Array<string>): The official list of all valid candidates.\n\n- `onInvalid` (function, optional): Called as `onInvalid(vote, error)` for each vote that is skipped. The library never writes to the console, so pass this if you want to log or count rejected ballots.\n\n**Returns:** (Array<Array<string>>): A clean array of only the valid ballots.\n\n**Example:**\n\n```JavaScript\n\nconst { formatBallots } = require('@destinlmincy/rcv-core-logic');\n\nconst candidates = ['A', 'B', 'C'];\nconst rawVotes = [\n  { userId: 'u-123', rankings: ['A', 'B'] },\n  { userId: 'u-456', rankings: ['B', 'A', 'B'] }, // Invalid (duplicate)\n  { userId: 'u-789', rankings: ['C'] },\n  { userId: 'u-101', rankings: ['D'] }             // Invalid (bad candidate)\n];\n\nconst cleanBallots = formatBallots(rawVotes, candidates, (vote, error) => {\n  console.warn(`Skipped ${vote.userId}: ${error}`);\n});\n\nconsole.log(cleanBallots);\n// Output: [ ['A', 'B'], ['C'] ]\n\n```\n\n`drawTieBreakOrder(candidates, randomInt)`\nDraws a random lot order for breaking ties, using a cryptographically secure random source. Pass the result to `tally()` as `config.tieBreakOrder`.\n\n**Call it once, when the election is created, and store the result with the election.** Every count and recount then uses the same order, so the same ballots always produce the same winner. Do not draw a new order each time you tally.\n\nWithout a lot order, a tie that earlier rounds can't break stops the tally with no winner. In small elections that is common: in simulated elections with 3–20 voters, 17–36% hit one. With a stored lot order, none did.\n\n**Arguments:**\n\n- `candidates` (Array<string>): The official list of all valid candidates.\n\n- `randomInt` (function, optional): Returns a uniformly random integer in `[0, n)` when called as `randomInt(n)`. Defaults to a secure source; override it only for testing or a public, reproducible draw.\n\n**Returns:** (Array<string>): A shuffled copy of `candidates`. Earlier entries lose unresolved ties first.\n\n**Example:**\n\n```JavaScript\n\nconst { drawTieBreakOrder, tally } = require('@destinlmincy/rcv-core-logic');\n\n// When the election is created:\nconst candidates = ['A', 'B', 'C'];\nconst tieBreakOrder = drawTieBreakOrder(candidates); // e.g. ['C', 'A', 'B']\n// ...save tieBreakOrder alongside the election...\n\n// When counting, and on every recount:\nconst results = tally(ballots, candidates, { tieBreakOrder });\n\n```\n\n`tally(ballots, candidates, config)`\nThe main engine. This function takes a clean list of ballots and runs the full round-by-round RCV simulation.\n\n**Arguments:**\n\n- `ballots` (Array<Array<string>>): A clean array of ballots, as returned by `formatBallots()`.\n\n- `candidates` (Array<string>): The official list of all valid candidates.\n\n- `config` (object, optional): An object specifying the rules for the election.\n\n  - `tieBreakOrder` (Array<string>, optional): Every candidate, ordered from first to last to lose a tie that earlier rounds cannot break, such as the stored result of `drawTieBreakOrder()`. Must list every candidate or `tally()` throws. Strongly recommended.\n\n  - `maxRounds` (number): A safety limit to prevent infinite loops (e.g., `20`). Defaults to the number of candidates.\n\n**Returns:** (object): A detailed, round-by-round results object.\n\n- Ties for last place are resolved in this order, and each round's `tieBreak` field records which rule was used (`null` if there was no tie):\n  1. `\"batch\"`: every tied option has zero votes, so they are all eliminated at once. No ballots move, so this is identical to eliminating them one at a time.\n  2. `\"previous_round\"`: eliminate the tied option with the fewest votes in the most recent earlier round that separates them.\n  3. `\"tie_break_order\"`: eliminate whichever remaining tied option comes first in `config.tieBreakOrder`.\n\n  If none of these applies, the tally stops with `status: \"Unresolved tie\"`, `winner: null`, and an `error` naming the tied options. Pass a `tieBreakOrder` from `drawTieBreakOrder()` to avoid this. The tally also stops, with `status: \"No continuing ballots\"`, if every ballot is exhausted.\n- Each round, an option wins with a majority of the *continuing* ballots, i.e. those not yet exhausted (`floor(continuing / 2) + 1`). Each round reports its own `threshold` and `exhausted` count; the top-level `threshold` is the first round's.\n- `rounds[n].transfers` maps each eliminated option to where its ballots went, e.g. `{ \"C\": { \"B\": 1, \"exhausted\": 2 } }`.\n\n**Example:**\n\n```JavaScript\n\nconst { tally } = require('@destinlmincy/rcv-core-logic');\n\n// Note: This would come from formatBallots()\nconst ballots = [\n  ['A', 'B', 'C'],\n  ['B', 'A', 'C'],\n  ['A', 'C', 'B'],\n  ['C', 'B', 'A'],\n  ['B', 'A', 'C']\n];\n\nconst candidates = ['A', 'B', 'C'];\nconst config = {\n  maxRounds: 20\n};\n\nconst results = tally(ballots, candidates, config);\n\nconsole.log(JSON.stringify(results, null, 2));\n\n```\n\n**Example `results` Output:**\n\n```JSON\n\n{\n  \"winner\": \"B\",\n  \"totalVotes\": 5,\n  \"threshold\": 3,\n  \"options\": [\"A\", \"B\", \"C\"],\n  \"rounds\": [\n    {\n      \"round\": 1,\n      \"threshold\": 3,\n      \"exhausted\": 0,\n      \"tally\": {\n        \"A\": 2,\n        \"B\": 2,\n        \"C\": 1\n      },\n      \"status\": \"Elimination\",\n      \"eliminated\": [\"C\"],\n      \"tieBreak\": null,\n      \"transfers\": {\n        \"C\": {\n          \"B\": 1\n        }\n      }\n    },\n    {\n      \"round\": 2,\n      \"threshold\": 3,\n      \"exhausted\": 0,\n      \"tally\": {\n        \"A\": 2,\n        \"B\": 3\n      },\n      \"status\": \"Winner found\",\n      \"eliminated\": [],\n      \"tieBreak\": null,\n      \"transfers\": {}\n    }\n  ]\n}\n\n```\n\n---\n\n## Running Tests\n```Bash\n\nnpm test\n\n```\n\n---\n\n## Copyright\nCopyright (c) 2025 Destin L. Mincy. All Rights Reserved.\n","readmeFilename":"README.md"}