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 3057x 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 } |