New:Socket for Asana Is Now Available.Learn more
Get Started

@buzzr/dfs-cli

Package Overview
Dependencies
Maintainers
2
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@buzzr/dfs-cli - npm Package Compare versions

Comparing version
5.0.0
to
5.0.1
+2
-1
dist/cli.d.ts
declare function main(argv: readonly string[]): Promise<number>;
declare function isDirectInvocation(moduleUrl: string, argvPath: string | undefined): boolean;
export { main };
export { isDirectInvocation, main };
#!/usr/bin/env node
import { readFile } from 'fs/promises';
import { createDfsEngine, defineStatProvider } from '@buzzr/dfs-engine';
import { realpathSync } from 'fs';
import { fileURLToPath } from 'url';

@@ -30,4 +32,2 @@ function createMockStatProviderFromMap(rowsByLegId, id = "dfs-cli-mock") {

}
// src/cli.ts
function parseArgs(argv) {

@@ -77,4 +77,11 @@ const out = { entryPath: null, gameLogsPath: null, showHelp: false };

}
var isDirectInvocation = typeof process !== "undefined" && Array.isArray(process.argv) && process.argv[1] !== void 0 && import.meta.url === `file://${process.argv[1]}`;
if (isDirectInvocation) {
function isDirectInvocation(moduleUrl, argvPath) {
if (!argvPath) return false;
try {
return realpathSync(fileURLToPath(moduleUrl)) === realpathSync(argvPath);
} catch {
return false;
}
}
if (isDirectInvocation(import.meta.url, process.argv[1])) {
const code = await main(process.argv.slice(2));

@@ -84,4 +91,4 @@ process.exit(code);

export { main };
export { isDirectInvocation, main };
//# sourceMappingURL=cli.js.map
//# sourceMappingURL=cli.js.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/engine-shim.ts","../src/index.ts","../src/cli.ts"],"names":[],"mappings":"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","file":"cli.js","sourcesContent":["import {\n createDfsEngine,\n defineStatProvider,\n type DfsEntryInput,\n type DfsSettlementResult,\n type PlayerGameLogEntryShape,\n type StatProvider,\n} from '@buzzr/dfs-engine';\n\nexport {\n createDfsEngine,\n type DfsEntryInput,\n type DfsSettlementResult,\n type PlayerGameLogEntryShape,\n type StatProvider,\n};\n\nexport function createMockStatProviderFromMap(\n rowsByLegId: Record<string, PlayerGameLogEntryShape[]>,\n id = 'dfs-cli-mock',\n): StatProvider {\n return defineStatProvider({\n id,\n getGameLog({ leg }) {\n return rowsByLegId[leg.legId] ?? [];\n },\n });\n}\n","import { readFile } from 'node:fs/promises';\nimport {\n createDfsEngine,\n createMockStatProviderFromMap,\n type DfsEntryInput,\n type DfsSettlementResult,\n type PlayerGameLogEntryShape,\n type StatProvider,\n} from './engine-shim';\n\nexport type GameLogsByLegId = Record<string, PlayerGameLogEntryShape[]>;\n\nexport type RunGradeInput = {\n entry: DfsEntryInput;\n gameLogsByLegId: GameLogsByLegId;\n};\n\nexport type RunGradeFileInput = {\n entryPath: string;\n gameLogsPath: string;\n};\n\nexport async function runGrade(input: RunGradeInput): Promise<DfsSettlementResult> {\n const provider: StatProvider = createMockStatProviderFromMap(input.gameLogsByLegId);\n const engine = createDfsEngine({ statProviders: [provider] });\n return engine.settleEntry(input.entry, { statProviderId: provider.id });\n}\n\nexport async function runGradeFromFiles(input: RunGradeFileInput): Promise<DfsSettlementResult> {\n const [entryRaw, gameLogsRaw] = await Promise.all([\n readFile(input.entryPath, 'utf8'),\n readFile(input.gameLogsPath, 'utf8'),\n ]);\n return runGrade({\n entry: JSON.parse(entryRaw) as DfsEntryInput,\n gameLogsByLegId: JSON.parse(gameLogsRaw) as GameLogsByLegId,\n });\n}\n","import { runGradeFromFiles } from './index';\n\ntype ParsedArgs = {\n entryPath: string | null;\n gameLogsPath: string | null;\n showHelp: boolean;\n};\n\nfunction parseArgs(argv: readonly string[]): ParsedArgs {\n const out: ParsedArgs = { entryPath: null, gameLogsPath: null, showHelp: false };\n for (let i = 0; i < argv.length; i += 1) {\n const arg = argv[i];\n if (arg === '-h' || arg === '--help') {\n out.showHelp = true;\n } else if (arg === '--gamelogs' || arg === '-g') {\n out.gameLogsPath = argv[i + 1] ?? null;\n i += 1;\n } else if (!arg.startsWith('-') && !out.entryPath) {\n out.entryPath = arg;\n }\n }\n return out;\n}\n\nconst HELP = `dfs-grade <entry.json> --gamelogs <gamelogs.json>\n\n Grades a DFS entry using @buzzr/dfs-engine and prints the settlement as JSON.\n\n <entry.json> Path to a DfsEntryInput JSON file.\n --gamelogs, -g <path> Path to a JSON map of legId -> PlayerGameLogEntryShape[].\n -h, --help Show this help.`;\n\nexport async function main(argv: readonly string[]): Promise<number> {\n const args = parseArgs(argv);\n if (args.showHelp || !args.entryPath || !args.gameLogsPath) {\n process.stdout.write(`${HELP}\\n`);\n return args.showHelp ? 0 : 1;\n }\n try {\n const result = await runGradeFromFiles({\n entryPath: args.entryPath,\n gameLogsPath: args.gameLogsPath,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return 0;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n process.stderr.write(`dfs-grade: ${message}\\n`);\n return 1;\n }\n}\n\nconst isDirectInvocation =\n typeof process !== 'undefined' &&\n Array.isArray(process.argv) &&\n process.argv[1] !== undefined &&\n import.meta.url === `file://${process.argv[1]}`;\n\nif (isDirectInvocation) {\n const code = await main(process.argv.slice(2));\n process.exit(code);\n}\n"]}
{"version":3,"sources":["../src/engine-shim.ts","../src/index.ts","../src/cli.ts"],"names":[],"mappings":"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","file":"cli.js","sourcesContent":["import {\n createDfsEngine,\n defineStatProvider,\n type DfsEntryInput,\n type DfsSettlementResult,\n type PlayerGameLogEntryShape,\n type StatProvider,\n} from '@buzzr/dfs-engine';\n\nexport {\n createDfsEngine,\n type DfsEntryInput,\n type DfsSettlementResult,\n type PlayerGameLogEntryShape,\n type StatProvider,\n};\n\nexport function createMockStatProviderFromMap(\n rowsByLegId: Record<string, PlayerGameLogEntryShape[]>,\n id = 'dfs-cli-mock',\n): StatProvider {\n return defineStatProvider({\n id,\n getGameLog({ leg }) {\n return rowsByLegId[leg.legId] ?? [];\n },\n });\n}\n","import { readFile } from 'node:fs/promises';\nimport {\n createDfsEngine,\n createMockStatProviderFromMap,\n type DfsEntryInput,\n type DfsSettlementResult,\n type PlayerGameLogEntryShape,\n type StatProvider,\n} from './engine-shim';\n\nexport type GameLogsByLegId = Record<string, PlayerGameLogEntryShape[]>;\n\nexport type RunGradeInput = {\n entry: DfsEntryInput;\n gameLogsByLegId: GameLogsByLegId;\n};\n\nexport type RunGradeFileInput = {\n entryPath: string;\n gameLogsPath: string;\n};\n\nexport async function runGrade(input: RunGradeInput): Promise<DfsSettlementResult> {\n const provider: StatProvider = createMockStatProviderFromMap(input.gameLogsByLegId);\n const engine = createDfsEngine({ statProviders: [provider] });\n return engine.settleEntry(input.entry, { statProviderId: provider.id });\n}\n\nexport async function runGradeFromFiles(input: RunGradeFileInput): Promise<DfsSettlementResult> {\n const [entryRaw, gameLogsRaw] = await Promise.all([\n readFile(input.entryPath, 'utf8'),\n readFile(input.gameLogsPath, 'utf8'),\n ]);\n return runGrade({\n entry: JSON.parse(entryRaw) as DfsEntryInput,\n gameLogsByLegId: JSON.parse(gameLogsRaw) as GameLogsByLegId,\n });\n}\n","import { runGradeFromFiles } from './index';\nimport { realpathSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\n\ntype ParsedArgs = {\n entryPath: string | null;\n gameLogsPath: string | null;\n showHelp: boolean;\n};\n\nfunction parseArgs(argv: readonly string[]): ParsedArgs {\n const out: ParsedArgs = { entryPath: null, gameLogsPath: null, showHelp: false };\n for (let i = 0; i < argv.length; i += 1) {\n const arg = argv[i];\n if (arg === '-h' || arg === '--help') {\n out.showHelp = true;\n } else if (arg === '--gamelogs' || arg === '-g') {\n out.gameLogsPath = argv[i + 1] ?? null;\n i += 1;\n } else if (!arg.startsWith('-') && !out.entryPath) {\n out.entryPath = arg;\n }\n }\n return out;\n}\n\nconst HELP = `dfs-grade <entry.json> --gamelogs <gamelogs.json>\n\n Grades a DFS entry using @buzzr/dfs-engine and prints the settlement as JSON.\n\n <entry.json> Path to a DfsEntryInput JSON file.\n --gamelogs, -g <path> Path to a JSON map of legId -> PlayerGameLogEntryShape[].\n -h, --help Show this help.`;\n\nexport async function main(argv: readonly string[]): Promise<number> {\n const args = parseArgs(argv);\n if (args.showHelp || !args.entryPath || !args.gameLogsPath) {\n process.stdout.write(`${HELP}\\n`);\n return args.showHelp ? 0 : 1;\n }\n try {\n const result = await runGradeFromFiles({\n entryPath: args.entryPath,\n gameLogsPath: args.gameLogsPath,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return 0;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n process.stderr.write(`dfs-grade: ${message}\\n`);\n return 1;\n }\n}\n\nexport function isDirectInvocation(moduleUrl: string, argvPath: string | undefined): boolean {\n if (!argvPath) return false;\n try {\n return realpathSync(fileURLToPath(moduleUrl)) === realpathSync(argvPath);\n } catch {\n return false;\n }\n}\n\nif (isDirectInvocation(import.meta.url, process.argv[1])) {\n const code = await main(process.argv.slice(2));\n process.exit(code);\n}\n"]}
{
"name": "@buzzr/dfs-cli",
"version": "5.0.0",
"version": "5.0.1",
"description": "Command-line wrapper around @buzzr/dfs-engine — grade a DFS entry from JSON fixtures without writing code.",

@@ -58,3 +58,3 @@ "license": "MIT",

"dependencies": {
"@buzzr/dfs-engine": "^5.0.0"
"@buzzr/dfs-engine": "^5.1.0"
},

@@ -66,3 +66,4 @@ "engines": {

"access": "public"
}
},
"gitHead": "c26ad054f999ea726eb29c93d75e5a0dd8a7ea7e"
}

@@ -9,4 +9,6 @@ # @buzzr/dfs-cli

**Grade a DFS pick'em entry from two JSON files — no code required.** A command-line wrapper around [`@buzzr/dfs-engine`](https://www.npmjs.com/package/@buzzr/dfs-engine), the settlement engine that grades PrizePicks/Underdog-style entries with book-accurate payout math and a full audit trail.
**Grade a DFS pick'em entry from two JSON files — no code required.** This is a command-line wrapper around [`@buzzr/dfs-engine`](https://www.npmjs.com/package/@buzzr/dfs-engine), with bounded inputs, effective-dated compatibility tables, policy metadata, and a full audit trail.
The operator-named built-ins are independent estimates: PrizePicks is experimental and partially verified; Underdog is experimental and unverified. Displayed entry terms are authoritative. Treat output as an audit aid, inspect `policyStatus`, `policyVerification`, `payoutTable`, `confidence`, `sourceRefs`, and `explanationCodes`, and confirm DNP, reboot, tie, rescue, void, and correction rulings with the operator.
## 30-second quick start

@@ -111,3 +113,2 @@

| `runGradeFromFiles()` | Same, reading both inputs from file paths |
| `createDfsEngine` et al | Re-exported engine primitives for convenience |

@@ -122,12 +123,23 @@ ## When to use this vs siblings

| Build fixtures for your own tests | [`@buzzr/dfs-testkit`](https://www.npmjs.com/package/@buzzr/dfs-testkit) |
| Verify your integration grades identically to Buzzr | [`@buzzr/dfs-engine-test-vectors`](https://www.npmjs.com/package/@buzzr/dfs-engine-test-vectors) |
| Replay versioned engine regression cases | [`@buzzr/dfs-engine-test-vectors`](https://www.npmjs.com/package/@buzzr/dfs-engine-test-vectors) |
## Links
- [Engine API docs](https://buzzr-app.github.io/dfs-engine/)
- [All-package API index](../../docs/api-reference.md)
- [Generated root-export reference](https://buzzr-app.github.io/dfs-engine/modules/_buzzr_dfs-cli.html)
- [Monorepo & full package family](https://github.com/Buzzr-app/dfs-engine)
- [Issues](https://github.com/Buzzr-app/dfs-engine/issues)
## Compatibility and support
Node.js >= 22 is supported. Use the `dfs-grade` executable for the command line.
Import the supported API from `@buzzr/dfs-cli`.
Deep `src/*` and `dist/*` imports are unsupported.
Report vulnerabilities privately through [SECURITY.md](../../SECURITY.md). The
[versioning and support policy](../../docs/versioning-and-support.md) defines the
supported runtime and SemVer contract.
## License
MIT
[MIT](../../LICENSE)