@buzzr/dfs-cli
Advanced tools
+2
-1
| declare function main(argv: readonly string[]): Promise<number>; | ||
| declare function isDirectInvocation(moduleUrl: string, argvPath: string | undefined): boolean; | ||
| export { main }; | ||
| export { isDirectInvocation, main }; |
+12
-5
| #!/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
@@ -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"]} |
+4
-3
| { | ||
| "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" | ||
| } |
+17
-5
@@ -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) |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
22519
6.69%130
7.44%143
9.16%3
50%Updated