fork of hey-api/openapi-ts because I need some additional things
at feat/skip-token 192 lines 5.1 kB view raw
1import type { AnalysisContext, Node, NodeName } from '@hey-api/codegen-core'; 2 3import type { py } from '../../ts-python'; 4import type { MaybePyDsl } from '../base'; 5import { BinaryPyDsl } from '../expr/binary'; 6import type { BaseCtor, MixinCtor } from './types'; 7 8type Expr = NodeName | MaybePyDsl<py.Expression>; 9 10export interface OperatorMethods extends Node { 11 and(expr: Expr): BinaryPyDsl; 12 div(expr: Expr): BinaryPyDsl; 13 eq(expr: Expr): BinaryPyDsl; 14 floordiv(expr: Expr): BinaryPyDsl; 15 gt(expr: Expr): BinaryPyDsl; 16 gte(expr: Expr): BinaryPyDsl; 17 in_(expr: Expr): BinaryPyDsl; 18 is(expr: Expr): BinaryPyDsl; 19 isNot(expr: Expr): BinaryPyDsl; 20 lt(expr: Expr): BinaryPyDsl; 21 lte(expr: Expr): BinaryPyDsl; 22 minus(expr: Expr): BinaryPyDsl; 23 mod(expr: Expr): BinaryPyDsl; 24 neq(expr: Expr): BinaryPyDsl; 25 notIn(expr: Expr): BinaryPyDsl; 26 or(expr: Expr): BinaryPyDsl; 27 plus(expr: Expr): BinaryPyDsl; 28 pow(expr: Expr): BinaryPyDsl; 29 times(expr: Expr): BinaryPyDsl; 30} 31 32export function OperatorMixin<T extends py.Expression, TBase extends BaseCtor<T>>(Base: TBase) { 33 abstract class Operator extends Base { 34 override analyze(ctx: AnalysisContext): void { 35 super.analyze(ctx); 36 } 37 38 protected and(expr: Expr): BinaryPyDsl { 39 return new BinaryPyDsl( 40 this as unknown as MaybePyDsl<py.Expression>, 41 'and', 42 expr as MaybePyDsl<py.Expression>, 43 ); 44 } 45 46 protected div(expr: Expr): BinaryPyDsl { 47 return new BinaryPyDsl( 48 this as unknown as MaybePyDsl<py.Expression>, 49 '/', 50 expr as MaybePyDsl<py.Expression>, 51 ); 52 } 53 54 protected eq(expr: Expr): BinaryPyDsl { 55 return new BinaryPyDsl( 56 this as unknown as MaybePyDsl<py.Expression>, 57 '==', 58 expr as MaybePyDsl<py.Expression>, 59 ); 60 } 61 62 protected floordiv(expr: Expr): BinaryPyDsl { 63 return new BinaryPyDsl( 64 this as unknown as MaybePyDsl<py.Expression>, 65 '//', 66 expr as MaybePyDsl<py.Expression>, 67 ); 68 } 69 70 protected gt(expr: Expr): BinaryPyDsl { 71 return new BinaryPyDsl( 72 this as unknown as MaybePyDsl<py.Expression>, 73 '>', 74 expr as MaybePyDsl<py.Expression>, 75 ); 76 } 77 78 protected gte(expr: Expr): BinaryPyDsl { 79 return new BinaryPyDsl( 80 this as unknown as MaybePyDsl<py.Expression>, 81 '>=', 82 expr as MaybePyDsl<py.Expression>, 83 ); 84 } 85 86 protected in_(expr: Expr): BinaryPyDsl { 87 return new BinaryPyDsl( 88 this as unknown as MaybePyDsl<py.Expression>, 89 'in', 90 expr as MaybePyDsl<py.Expression>, 91 ); 92 } 93 94 protected is(expr: Expr): BinaryPyDsl { 95 return new BinaryPyDsl( 96 this as unknown as MaybePyDsl<py.Expression>, 97 'is', 98 expr as MaybePyDsl<py.Expression>, 99 ); 100 } 101 102 protected isNot(expr: Expr): BinaryPyDsl { 103 return new BinaryPyDsl( 104 this as unknown as MaybePyDsl<py.Expression>, 105 'is not', 106 expr as MaybePyDsl<py.Expression>, 107 ); 108 } 109 110 protected lt(expr: Expr): BinaryPyDsl { 111 return new BinaryPyDsl( 112 this as unknown as MaybePyDsl<py.Expression>, 113 '<', 114 expr as MaybePyDsl<py.Expression>, 115 ); 116 } 117 118 protected lte(expr: Expr): BinaryPyDsl { 119 return new BinaryPyDsl( 120 this as unknown as MaybePyDsl<py.Expression>, 121 '<=', 122 expr as MaybePyDsl<py.Expression>, 123 ); 124 } 125 126 protected minus(expr: Expr): BinaryPyDsl { 127 return new BinaryPyDsl( 128 this as unknown as MaybePyDsl<py.Expression>, 129 '-', 130 expr as MaybePyDsl<py.Expression>, 131 ); 132 } 133 134 protected mod(expr: Expr): BinaryPyDsl { 135 return new BinaryPyDsl( 136 this as unknown as MaybePyDsl<py.Expression>, 137 '%', 138 expr as MaybePyDsl<py.Expression>, 139 ); 140 } 141 142 protected neq(expr: Expr): BinaryPyDsl { 143 return new BinaryPyDsl( 144 this as unknown as MaybePyDsl<py.Expression>, 145 '!=', 146 expr as MaybePyDsl<py.Expression>, 147 ); 148 } 149 150 protected notIn(expr: Expr): BinaryPyDsl { 151 return new BinaryPyDsl( 152 this as unknown as MaybePyDsl<py.Expression>, 153 'not in', 154 expr as MaybePyDsl<py.Expression>, 155 ); 156 } 157 158 protected or(expr: Expr): BinaryPyDsl { 159 return new BinaryPyDsl( 160 this as unknown as MaybePyDsl<py.Expression>, 161 'or', 162 expr as MaybePyDsl<py.Expression>, 163 ); 164 } 165 166 protected plus(expr: Expr): BinaryPyDsl { 167 return new BinaryPyDsl( 168 this as unknown as MaybePyDsl<py.Expression>, 169 '+', 170 expr as MaybePyDsl<py.Expression>, 171 ); 172 } 173 174 protected pow(expr: Expr): BinaryPyDsl { 175 return new BinaryPyDsl( 176 this as unknown as MaybePyDsl<py.Expression>, 177 '**', 178 expr as MaybePyDsl<py.Expression>, 179 ); 180 } 181 182 protected times(expr: Expr): BinaryPyDsl { 183 return new BinaryPyDsl( 184 this as unknown as MaybePyDsl<py.Expression>, 185 '*', 186 expr as MaybePyDsl<py.Expression>, 187 ); 188 } 189 } 190 191 return Operator as unknown as MixinCtor<TBase, OperatorMethods>; 192}