Skip to content

Commit

Permalink
chore: update selector implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
Gozala committed Mar 2, 2024
1 parent 7bd8f8e commit 5a82ba8
Show file tree
Hide file tree
Showing 4 changed files with 459 additions and 198 deletions.
30 changes: 22 additions & 8 deletions packages/core/src/policy/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,38 @@ export interface ParseError extends Error {
readonly name: 'ParseError'
}

export interface ResolutionError extends Error {
readonly name: 'ResolutionError'
}

/**
* Selector use [jq](https://devdocs.io/jq/) notation.
*/
export type Selector = `.${string}` & Phantom<{ Selector: SelectorPath }>
export type SelectorPath = [IdentitySegment, ...SelectorSegment[]]
export type SelectorPath = [{ Identity: {} }, ...SelectorSegment[]]

export type SelectionResult = Variant<{
one: Data
many: Data[]
error: ParseError | TypeError
error: ParseError | ResolutionError
}>

export type SelectorSegment =
| IdentitySegment
| IteratorSegment
| IndexSegment
| KeySegment
| SliceSegment
export type ResolutionResult = Variant<{
one: Data
many: Data[]
error: ResolutionError
}>

export type SelectorSegment = Variant<{
Identity: {}
Iterator: { optional: boolean }
Index: { optional: boolean; index: number }
Key: { optional: boolean; key: string }
Slice: {
optional?: boolean
range: [undefined, number] | [number, undefined] | [number, number]
}
}>

export type Data =
| number
Expand Down
Loading

0 comments on commit 5a82ba8

Please sign in to comment.