Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | 33x 3052x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x | import { Path } from './index'
interface INode {
type?: string
after?: Node
depth?: number
}
export type Node =
| IdentifierNode
| WildcardOperatorNode
| GroupExpressionNode
| RangeExpressionNode
| DestructorExpressionNode
| ObjectPatternNode
| ArrayPatternNode
| DotOperatorNode
| ExpandOperatorNode
| INode
export type IdentifierNode = {
type: 'Identifier'
value: string
arrayIndex?: boolean
} & INode
export type IgnoreExpressionNode = {
type: 'IgnoreExpression'
value: string
} & INode
export type DotOperatorNode = {
type: 'DotOperator'
} & INode
export type WildcardOperatorNode = {
type: 'WildcardOperator'
filter?: GroupExpressionNode | RangeExpressionNode
} & INode
export type ExpandOperatorNode = {
type: 'ExpandOperator'
} & INode
export type GroupExpressionNode = {
type: 'GroupExpression'
value: Node[]
isExclude?: boolean
} & INode
export type RangeExpressionNode = {
type: 'RangeExpression'
start?: IdentifierNode
end?: IdentifierNode
} & INode
export type DestructorExpressionNode = {
type: 'DestructorExpression'
value?: ObjectPatternNode | ArrayPatternNode
source?: string
} & INode
export type ObjectPatternNode = {
type: 'ObjectPattern'
properties: ObjectPatternPropertyNode[]
} & INode
export type ObjectPatternPropertyNode = {
type: 'ObjectPatternProperty'
key: IdentifierNode
value?: ObjectPatternNode[] | ArrayPatternNode[] | IdentifierNode
} & INode
export type ArrayPatternNode = {
type: 'ArrayPattern'
elements: ObjectPatternNode[] | ArrayPatternNode[] | IdentifierNode[]
} & INode
export type DestrcutorRule = {
key?: string | number
path?: Array<number | string>
}
export type MatcherFunction = ((path: Segments) => boolean) & {
path: Path
}
export type Pattern =
| string
| number
| Path
| Segments
| MatcherFunction
| RegExp
export type DestrcutorRules = DestrcutorRule[]
export type Segments = Array<string | number>
export const isType = <T>(type: string) => (obj: any): obj is T => {
return obj && obj.type === type
}
export const isIdentifier = isType<IdentifierNode>('Identifier')
export const isIgnoreExpression = isType<IgnoreExpressionNode>(
'IgnoreExpression'
)
export const isDotOperator = isType<DotOperatorNode>('DotOperator')
export const isWildcardOperator = isType<WildcardOperatorNode>(
'WildcardOperator'
)
export const isExpandOperator = isType<ExpandOperatorNode>('ExpandOperator')
export const isGroupExpression = isType<GroupExpressionNode>('GroupExpression')
export const isRangeExpression = isType<RangeExpressionNode>('RangeExpression')
export const isDestructorExpression = isType<DestructorExpressionNode>(
'DestructorExpression'
)
export const isObjectPattern = isType<ObjectPatternNode>('ObjectPattern')
export const isObjectPatternProperty = isType<ObjectPatternPropertyNode>(
'ObjectPatternProperty'
)
export const isArrayPattern = isType<ArrayPatternNode>('ArrayPattern')
export type KeyType = string | number | symbol
export type IAccessors = {
get?: (source: any, key: KeyType) => any
set?: (source: any, key: KeyType, value: any) => any
has?: (source: any, key: KeyType) => boolean
delete?: (source: any, key: KeyType) => any
}
export type IRegistry = {
accessors?: IAccessors
}
|