Skip to content

Commit

Permalink
I believe functionality is complete
Browse files Browse the repository at this point in the history
  • Loading branch information
alxjrvs committed May 1, 2024
1 parent d44497c commit 8be0232
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 17 deletions.
9 changes: 2 additions & 7 deletions src/roll/index.ts
@@ -1,13 +1,8 @@
import { CustomSides, DicePoolOptions } from '../types/options'
import { DiceNotation } from '../types/primitives'
import { RollArgument } from '../types/argument'
import { RollResult } from '../types/results'
import generateResult from './generate-results'
import parseArguments from './parse-arguments'

function roll(
arg?: number | DicePoolOptions | DiceNotation | CustomSides
): RollResult {
export default function roll(arg?: RollArgument): RollResult {
return generateResult(parseArguments(arg))
}

export default roll
10 changes: 6 additions & 4 deletions src/roll/parse-arguments/index.ts
@@ -1,7 +1,7 @@
import { coreNotationPattern } from '../../constants/regexp'
import { dieFactory } from '../../Die'
import { isCustomSides } from '../../Die/guards'
import { RollArgument } from '../../types/argument'
import { CoreRollArgument, RollArgument } from '../../types/argument'
import { DicePoolOptions } from '../../types/options'
import { DicePoolParameters, RollParameters } from '../../types/parameters'
import { DiceNotation } from '../../types/primitives'
Expand All @@ -20,7 +20,7 @@ export const isDiceNotation = (
!!coreNotationPattern.test(String(argument))

function parseDiceOptions(
options: RollArgument
options: CoreRollArgument | undefined
): DicePoolOptions<string | number> {
if (isDicePoolOptions(options)) {
return options
Expand All @@ -36,7 +36,9 @@ function parseDiceOptions(
}
}

function parseArgument(argument: RollArgument): RollParameters['dicePools'] {
function parseArgument(
argument: CoreRollArgument | undefined
): RollParameters['dicePools'] {
const id = crypto.randomUUID()
const options = parseDiceOptions(argument)

Expand All @@ -49,7 +51,7 @@ function parseArgument(argument: RollArgument): RollParameters['dicePools'] {
}
}

function parseArguments(argument: RollArgument): RollParameters {
function parseArguments(argument: RollArgument | undefined): RollParameters {
const args = [argument].flat()
const dicePools = args.reduce(
(acc, arg) => ({ ...acc, ...parseArgument(arg) }),
Expand Down
11 changes: 7 additions & 4 deletions src/types/argument.ts
@@ -1,10 +1,13 @@
import { CustomSides, DicePoolOptions } from './options'
import { DiceNotation } from './primitives'

export type RollArgument =
| undefined
export type CoreRollArgument =
| string
| number
| DicePoolOptions<number | string>
| DiceNotation<number | string>
| DicePoolOptions<string>
| DicePoolOptions<number>
| DiceNotation<number>
| DiceNotation<string>
| CustomSides

export type RollArgument = CoreRollArgument | CoreRollArgument[]
2 changes: 1 addition & 1 deletion src/types/options.ts
Expand Up @@ -2,7 +2,7 @@ export type TypeOrArrayOfType<T> = T | T[]

export type CustomSides = (string | number)[]

export interface DicePoolOptions<D = string | number> {
export interface DicePoolOptions<D extends string | number> {
quantity?: number
sides: D extends number ? number : CustomSides
modifiers?: D extends number ? Modifiers : never
Expand Down
3 changes: 2 additions & 1 deletion src/types/primitives.ts
@@ -1,9 +1,10 @@
export type DiceNotationWithNumericSides = `${number}${
| 'd'
| 'D'}${number}${string}`

export type DiceNotationWithCustomSides = `${number}${'d' | 'D'}{${string}}`

export type DiceNotation<D = string | number> = D extends number
export type DiceNotation<D extends string | number> = D extends number
? DiceNotationWithNumericSides
: DiceNotationWithCustomSides

Expand Down

0 comments on commit 8be0232

Please sign in to comment.