df-script 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +124 -8
- package/dist/api.d.ts +1 -1
- package/dist/columnExpressions/ColumnExpr.d.ts +2 -2
- package/dist/columnExpressions/functions/coalesce.d.ts +2 -2
- package/dist/columnExpressions/functions/element.d.ts +1 -1
- package/dist/columnExpressions/functions/when.d.ts +2 -2
- package/dist/columnExpressions/index.d.ts +1 -1
- package/dist/columnExpressions/mixins/AggregationExpr.d.ts +2 -2
- package/dist/columnExpressions/mixins/ArithmeticExpr.d.ts +11 -10
- package/dist/columnExpressions/mixins/ArrayExpr.d.ts +39 -0
- package/dist/columnExpressions/mixins/ListExpr.d.ts +2 -2
- package/dist/columnExpressions/mixins/StringExpr.d.ts +2 -2
- package/dist/columnExpressions/types.d.ts +1 -0
- package/dist/constants.d.ts +11 -0
- package/dist/dataframe/dataframe.d.ts +1 -1
- package/dist/datatypes/index.d.ts +3 -2
- package/dist/datatypes/types.d.ts +7 -7
- package/dist/index.js +6 -6
- package/dist/types.d.ts +4 -2
- package/dist/utils/array.d.ts +217 -0
- package/dist/utils/binary.d.ts +3 -0
- package/dist/utils/date.d.ts +21 -35
- package/dist/utils/guards.d.ts +11 -10
- package/dist/utils/index.d.ts +3 -2
- package/dist/utils/list.d.ts +23 -1
- package/dist/utils/number.d.ts +14 -29
- package/dist/utils/object.d.ts +26 -0
- package/dist/utils/string.d.ts +3 -5
- package/package.json +2 -2
- package/dist/api.js +0 -26
- package/dist/bundle.min.js +0 -1
- package/dist/columnExpressions/ColumnExpr.js +0 -219
- package/dist/columnExpressions/ExprBase.js +0 -92
- package/dist/columnExpressions/constants.js +0 -7
- package/dist/columnExpressions/functions/all.js +0 -11
- package/dist/columnExpressions/functions/coalesce.js +0 -44
- package/dist/columnExpressions/functions/element.js +0 -11
- package/dist/columnExpressions/functions/exclude.js +0 -13
- package/dist/columnExpressions/functions/implode.js +0 -7
- package/dist/columnExpressions/functions/lit.js +0 -17
- package/dist/columnExpressions/functions/repeat.d.ts +0 -47
- package/dist/columnExpressions/functions/repeat.js +0 -131
- package/dist/columnExpressions/functions/seq_range.js +0 -91
- package/dist/columnExpressions/functions/when.js +0 -85
- package/dist/columnExpressions/index.js +0 -38
- package/dist/columnExpressions/mixins/AggregationExpr.js +0 -76
- package/dist/columnExpressions/mixins/ArithmeticExpr.js +0 -131
- package/dist/columnExpressions/mixins/BooleanExpr.d.ts +0 -40
- package/dist/columnExpressions/mixins/BooleanExpr.js +0 -67
- package/dist/columnExpressions/mixins/ComparisonExpr.js +0 -250
- package/dist/columnExpressions/mixins/ListExpr.js +0 -224
- package/dist/columnExpressions/mixins/LogicalExpr.js +0 -53
- package/dist/columnExpressions/mixins/ManipulationExpr.js +0 -71
- package/dist/columnExpressions/mixins/NumericExpr.d.ts +0 -92
- package/dist/columnExpressions/mixins/NumericExpr.js +0 -259
- package/dist/columnExpressions/mixins/StringExpr.js +0 -237
- package/dist/columnExpressions/mixins/StructExpr.js +0 -139
- package/dist/columnExpressions/mixins/TemporalExpr.js +0 -126
- package/dist/columnExpressions/mixins/WindowExpr.js +0 -151
- package/dist/columnExpressions/types.js +0 -2
- package/dist/columnExpressions/utils.js +0 -45
- package/dist/dataframe/constants.js +0 -7
- package/dist/dataframe/dataframe.js +0 -990
- package/dist/dataframe/grouped/grouped.js +0 -114
- package/dist/dataframe/index.js +0 -20
- package/dist/dataframe/types.js +0 -2
- package/dist/dataframe/utils.js +0 -307
- package/dist/datatypes/DataType.js +0 -76
- package/dist/datatypes/index.js +0 -46
- package/dist/datatypes/types/Binary.d.ts +0 -9
- package/dist/datatypes/types/Binary.js +0 -18
- package/dist/datatypes/types/Boolean.d.ts +0 -9
- package/dist/datatypes/types/Boolean.js +0 -19
- package/dist/datatypes/types/Date.d.ts +0 -8
- package/dist/datatypes/types/Date.js +0 -21
- package/dist/datatypes/types/Datetime.d.ts +0 -8
- package/dist/datatypes/types/Datetime.js +0 -17
- package/dist/datatypes/types/Decimal.d.ts +0 -10
- package/dist/datatypes/types/Decimal.js +0 -28
- package/dist/datatypes/types/Duration.d.ts +0 -8
- package/dist/datatypes/types/Duration.js +0 -17
- package/dist/datatypes/types/Float32.d.ts +0 -8
- package/dist/datatypes/types/Float32.js +0 -17
- package/dist/datatypes/types/Float64.d.ts +0 -8
- package/dist/datatypes/types/Float64.js +0 -17
- package/dist/datatypes/types/Int16.d.ts +0 -8
- package/dist/datatypes/types/Int16.js +0 -17
- package/dist/datatypes/types/Int32.d.ts +0 -8
- package/dist/datatypes/types/Int32.js +0 -17
- package/dist/datatypes/types/Int64.d.ts +0 -8
- package/dist/datatypes/types/Int64.js +0 -17
- package/dist/datatypes/types/Int8.d.ts +0 -8
- package/dist/datatypes/types/Int8.js +0 -17
- package/dist/datatypes/types/List.d.ts +0 -10
- package/dist/datatypes/types/List.js +0 -31
- package/dist/datatypes/types/Null.d.ts +0 -9
- package/dist/datatypes/types/Null.js +0 -17
- package/dist/datatypes/types/Object.d.ts +0 -9
- package/dist/datatypes/types/Object.js +0 -17
- package/dist/datatypes/types/Struct.d.ts +0 -14
- package/dist/datatypes/types/Struct.js +0 -39
- package/dist/datatypes/types/Time.d.ts +0 -8
- package/dist/datatypes/types/Time.js +0 -29
- package/dist/datatypes/types/UInt16.d.ts +0 -8
- package/dist/datatypes/types/UInt16.js +0 -17
- package/dist/datatypes/types/UInt32.d.ts +0 -8
- package/dist/datatypes/types/UInt32.js +0 -17
- package/dist/datatypes/types/UInt64.d.ts +0 -8
- package/dist/datatypes/types/UInt64.js +0 -17
- package/dist/datatypes/types/UInt8.d.ts +0 -8
- package/dist/datatypes/types/UInt8.js +0 -17
- package/dist/datatypes/types/Utf8.d.ts +0 -10
- package/dist/datatypes/types/Utf8.js +0 -20
- package/dist/datatypes/types.js +0 -290
- package/dist/exceptions/index.js +0 -46
- package/dist/exceptions/utils.js +0 -28
- package/dist/functions/concat.js +0 -260
- package/dist/functions/index.js +0 -9
- package/dist/functions/read_csv.js +0 -53
- package/dist/functions/read_json.js +0 -21
- package/dist/functions/transpose.d.ts +0 -7
- package/dist/functions/transpose.js +0 -84
- package/dist/types.js +0 -2
- package/dist/utils/boolean.d.ts +0 -1
- package/dist/utils/boolean.js +0 -18
- package/dist/utils/csv.js +0 -313
- package/dist/utils/date.js +0 -348
- package/dist/utils/guards.js +0 -112
- package/dist/utils/index.js +0 -23
- package/dist/utils/json.js +0 -217
- package/dist/utils/list.js +0 -361
- package/dist/utils/number.js +0 -401
- package/dist/utils/string.js +0 -209
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NumericExpr = void 0;
|
|
4
|
-
const ExprBase_1 = require("../ExprBase");
|
|
5
|
-
const utils_1 = require("../../utils");
|
|
6
|
-
const exceptions_1 = require("../../exceptions");
|
|
7
|
-
const NumericExpr = (Base) => {
|
|
8
|
-
return class extends Base {
|
|
9
|
-
abs() {
|
|
10
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => Math.abs(v)));
|
|
11
|
-
}
|
|
12
|
-
acos() {
|
|
13
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => (v < -1 || v > 1) ? null : Math.acos(v)));
|
|
14
|
-
}
|
|
15
|
-
acosh() {
|
|
16
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => v < 1 ? null : Math.acosh(v)));
|
|
17
|
-
}
|
|
18
|
-
add(val) {
|
|
19
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => v + r));
|
|
20
|
-
}
|
|
21
|
-
asin() {
|
|
22
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => (v < -1 || v > 1) ? null : Math.asin(v)));
|
|
23
|
-
}
|
|
24
|
-
asinh() {
|
|
25
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.asinh));
|
|
26
|
-
}
|
|
27
|
-
atan() {
|
|
28
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.atan));
|
|
29
|
-
}
|
|
30
|
-
atanh() {
|
|
31
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => (v <= -1 || v >= 1) ? null : Math.atanh(v)));
|
|
32
|
-
}
|
|
33
|
-
cbrt() {
|
|
34
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.cbrt));
|
|
35
|
-
}
|
|
36
|
-
ceil() {
|
|
37
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.ceil));
|
|
38
|
-
}
|
|
39
|
-
clip(lower = null, upper = null) {
|
|
40
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => {
|
|
41
|
-
if (lower !== null && upper !== null) {
|
|
42
|
-
return (0, utils_1.clamp)(v, lower, upper);
|
|
43
|
-
}
|
|
44
|
-
else if (lower !== null) {
|
|
45
|
-
return Math.max(v, lower);
|
|
46
|
-
}
|
|
47
|
-
else if (upper !== null) {
|
|
48
|
-
return Math.min(v, upper);
|
|
49
|
-
}
|
|
50
|
-
return v;
|
|
51
|
-
}));
|
|
52
|
-
}
|
|
53
|
-
cos() {
|
|
54
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.cos));
|
|
55
|
-
}
|
|
56
|
-
cosh() {
|
|
57
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.cosh));
|
|
58
|
-
}
|
|
59
|
-
degrees() {
|
|
60
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => v * (180 / Math.PI)));
|
|
61
|
-
}
|
|
62
|
-
div(val) {
|
|
63
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => r === 0 ? null : v / r));
|
|
64
|
-
}
|
|
65
|
-
exp() {
|
|
66
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.exp));
|
|
67
|
-
}
|
|
68
|
-
expm1() {
|
|
69
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.expm1));
|
|
70
|
-
}
|
|
71
|
-
floor() {
|
|
72
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.floor));
|
|
73
|
-
}
|
|
74
|
-
floordiv(val) {
|
|
75
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => r === 0 ? null : Math.floor(v / r)));
|
|
76
|
-
}
|
|
77
|
-
hypot(val) {
|
|
78
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => Math.hypot(v, r)));
|
|
79
|
-
}
|
|
80
|
-
log(base = Math.E) {
|
|
81
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => v <= 0 ? null : (base === Math.E ? Math.log(v) : Math.log(v) / Math.log(base))));
|
|
82
|
-
}
|
|
83
|
-
log1p() {
|
|
84
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => v <= -1 ? null : Math.log1p(v)));
|
|
85
|
-
}
|
|
86
|
-
mod(val) {
|
|
87
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => r === 0 ? null : v % r));
|
|
88
|
-
}
|
|
89
|
-
mul(val) {
|
|
90
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => v * r));
|
|
91
|
-
}
|
|
92
|
-
negate() {
|
|
93
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => -v));
|
|
94
|
-
}
|
|
95
|
-
pow(val) {
|
|
96
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => Math.pow(v, r)));
|
|
97
|
-
}
|
|
98
|
-
radians() {
|
|
99
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => v * (Math.PI / 180)));
|
|
100
|
-
}
|
|
101
|
-
rand(seed, { min = 0, max = 1, integer = false } = {}) {
|
|
102
|
-
return (0, ExprBase_1.derive)(this, (vArray) => {
|
|
103
|
-
const len = vArray.length;
|
|
104
|
-
const out = new Float64Array(len);
|
|
105
|
-
const rnd = seed !== undefined ? (0, utils_1.mulberry32)(seed) : Math.random;
|
|
106
|
-
const range = max - min;
|
|
107
|
-
for (let i = 0; i < len; i++) {
|
|
108
|
-
const raw = rnd();
|
|
109
|
-
out[i] = integer ? Math.floor(raw * (range + 1)) + min : raw * range + min;
|
|
110
|
-
}
|
|
111
|
-
return out;
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
round(decimals = 0) {
|
|
115
|
-
const factor = Math.pow(10, decimals);
|
|
116
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => Math.round(v * factor) / factor));
|
|
117
|
-
}
|
|
118
|
-
sign() {
|
|
119
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.sign));
|
|
120
|
-
}
|
|
121
|
-
sin() {
|
|
122
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.sin));
|
|
123
|
-
}
|
|
124
|
-
sinh() {
|
|
125
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.sinh));
|
|
126
|
-
}
|
|
127
|
-
sqrt() {
|
|
128
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => v < 0 ? null : Math.sqrt(v)));
|
|
129
|
-
}
|
|
130
|
-
sub(val) {
|
|
131
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => v - r));
|
|
132
|
-
}
|
|
133
|
-
tan() {
|
|
134
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.tan));
|
|
135
|
-
}
|
|
136
|
-
tanh() {
|
|
137
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.tanh));
|
|
138
|
-
}
|
|
139
|
-
trunc() {
|
|
140
|
-
return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Math.trunc));
|
|
141
|
-
}
|
|
142
|
-
// Numeric Aggregations
|
|
143
|
-
avg() {
|
|
144
|
-
return this._deriveAgg((v) => (0, utils_1.getListStats)(v).mean);
|
|
145
|
-
}
|
|
146
|
-
mean() {
|
|
147
|
-
return this.avg();
|
|
148
|
-
}
|
|
149
|
-
sum() {
|
|
150
|
-
return this._deriveAgg((v) => (0, utils_1.getListStats)(v).sum);
|
|
151
|
-
}
|
|
152
|
-
std() {
|
|
153
|
-
return this._deriveAgg((v) => (0, utils_1.getListStats)(v).std);
|
|
154
|
-
}
|
|
155
|
-
min() {
|
|
156
|
-
return this._deriveAgg((v) => (0, utils_1.getListStats)(v).min);
|
|
157
|
-
}
|
|
158
|
-
max() {
|
|
159
|
-
return this._deriveAgg((v) => (0, utils_1.getListStats)(v).max);
|
|
160
|
-
}
|
|
161
|
-
median() {
|
|
162
|
-
return this._deriveAgg((v) => (0, utils_1.computeMedian)(v));
|
|
163
|
-
}
|
|
164
|
-
quantile(q) {
|
|
165
|
-
if (q < 0 || q > 1)
|
|
166
|
-
throw new exceptions_1.ComputeError("Quantile q must be between 0 and 1");
|
|
167
|
-
return this._deriveAgg((v) => (0, utils_1.computeQuantile)(v, q));
|
|
168
|
-
}
|
|
169
|
-
count(options = {}) {
|
|
170
|
-
if (options.includeNulls)
|
|
171
|
-
return this._deriveAgg((v) => v.length);
|
|
172
|
-
return this._deriveAgg((v) => (0, utils_1.getListStats)(v).count);
|
|
173
|
-
}
|
|
174
|
-
// Numeric Cumulative/Rolling Windows
|
|
175
|
-
cum_max(reverse = false) {
|
|
176
|
-
return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
|
|
177
|
-
let maxVal = null;
|
|
178
|
-
const start = reverse ? currentIndex : 0;
|
|
179
|
-
const end = reverse ? groupPreValues.length - 1 : currentIndex;
|
|
180
|
-
for (let i = start; i <= end; i++) {
|
|
181
|
-
const val = groupPreValues[i];
|
|
182
|
-
if (val != null) {
|
|
183
|
-
if (maxVal === null || val > maxVal) {
|
|
184
|
-
maxVal = val;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
return maxVal;
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
cum_min(reverse = false) {
|
|
192
|
-
return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
|
|
193
|
-
let minVal = null;
|
|
194
|
-
const start = reverse ? currentIndex : 0;
|
|
195
|
-
const end = reverse ? groupPreValues.length - 1 : currentIndex;
|
|
196
|
-
for (let i = start; i <= end; i++) {
|
|
197
|
-
const val = groupPreValues[i];
|
|
198
|
-
if (val != null) {
|
|
199
|
-
if (minVal === null || val < minVal) {
|
|
200
|
-
minVal = val;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
return minVal;
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
cum_prod(reverse = false) {
|
|
208
|
-
return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
|
|
209
|
-
let prod = 1;
|
|
210
|
-
let hasValid = false;
|
|
211
|
-
const start = reverse ? currentIndex : 0;
|
|
212
|
-
const end = reverse ? groupPreValues.length - 1 : currentIndex;
|
|
213
|
-
for (let i = start; i <= end; i++) {
|
|
214
|
-
const val = groupPreValues[i];
|
|
215
|
-
if (val != null) {
|
|
216
|
-
prod *= val;
|
|
217
|
-
hasValid = true;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
return hasValid ? prod : null;
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
cum_sum(reverse = false) {
|
|
224
|
-
return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
|
|
225
|
-
let sum = 0;
|
|
226
|
-
const start = reverse ? currentIndex : 0;
|
|
227
|
-
const end = reverse ? groupPreValues.length - 1 : currentIndex;
|
|
228
|
-
for (let i = start; i <= end; i++) {
|
|
229
|
-
const val = groupPreValues[i];
|
|
230
|
-
if (val != null)
|
|
231
|
-
sum += val;
|
|
232
|
-
}
|
|
233
|
-
return sum;
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
rolling_max(windowSize) {
|
|
237
|
-
return this._rolling(windowSize, (v) => (0, utils_1.getListStats)(v).max);
|
|
238
|
-
}
|
|
239
|
-
rolling_mean(windowSize) {
|
|
240
|
-
return this._rolling(windowSize, (v) => (0, utils_1.getListStats)(v).mean);
|
|
241
|
-
}
|
|
242
|
-
rolling_median(windowSize) {
|
|
243
|
-
return this._rolling(windowSize, (v) => (0, utils_1.computeMedian)(v));
|
|
244
|
-
}
|
|
245
|
-
rolling_min(windowSize) {
|
|
246
|
-
return this._rolling(windowSize, (v) => (0, utils_1.getListStats)(v).min);
|
|
247
|
-
}
|
|
248
|
-
rolling_quantile(quantile, windowSize) {
|
|
249
|
-
return this._rolling(windowSize, (v) => (0, utils_1.computeQuantile)(v, quantile));
|
|
250
|
-
}
|
|
251
|
-
rolling_std(windowSize) {
|
|
252
|
-
return this._rolling(windowSize, (v) => (0, utils_1.getListStats)(v).std);
|
|
253
|
-
}
|
|
254
|
-
rolling_sum(windowSize) {
|
|
255
|
-
return this._rolling(windowSize, (v) => (0, utils_1.getListStats)(v).sum);
|
|
256
|
-
}
|
|
257
|
-
};
|
|
258
|
-
};
|
|
259
|
-
exports.NumericExpr = NumericExpr;
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StringExpr = exports.StringExprNamespace = void 0;
|
|
4
|
-
const ExprBase_1 = require("../ExprBase");
|
|
5
|
-
const utils_1 = require("../utils");
|
|
6
|
-
const utils_2 = require("../../utils");
|
|
7
|
-
class StringExprNamespace {
|
|
8
|
-
expr;
|
|
9
|
-
constructor(expr) {
|
|
10
|
-
this.expr = expr;
|
|
11
|
-
}
|
|
12
|
-
_deriveString(fn) {
|
|
13
|
-
return (0, ExprBase_1.derive)(this.expr, (0, utils_1.kleeneUnary)((v) => fn(String(v))));
|
|
14
|
-
}
|
|
15
|
-
_patternGuard(pattern, fn) {
|
|
16
|
-
if (pattern == null) {
|
|
17
|
-
return (0, ExprBase_1.derive)(this.expr, (vArray) => new Array(vArray.length).fill(null));
|
|
18
|
-
}
|
|
19
|
-
return fn();
|
|
20
|
-
}
|
|
21
|
-
concat(other) {
|
|
22
|
-
return (0, ExprBase_1.derive)(this.expr, (0, utils_1.kleeneBinary)(this.expr, other, (v, o) => String(v) + String(o)));
|
|
23
|
-
}
|
|
24
|
-
contains(pattern) {
|
|
25
|
-
return this._patternGuard(pattern, () => this._deriveString((str) => pattern instanceof RegExp ? pattern.test(str) : str.includes(pattern)));
|
|
26
|
-
}
|
|
27
|
-
count_matches(pattern) {
|
|
28
|
-
return this._patternGuard(pattern, () => this._deriveString((str) => {
|
|
29
|
-
if (pattern instanceof RegExp) {
|
|
30
|
-
const regex = pattern.global
|
|
31
|
-
? pattern
|
|
32
|
-
: new RegExp(pattern.source, pattern.flags + "g");
|
|
33
|
-
const matches = str.match(regex);
|
|
34
|
-
return matches ? matches.length : 0;
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
let count = 0;
|
|
38
|
-
let pos = str.indexOf(pattern);
|
|
39
|
-
while (pos !== -1) {
|
|
40
|
-
count++;
|
|
41
|
-
pos = str.indexOf(pattern, pos + pattern.length);
|
|
42
|
-
}
|
|
43
|
-
return count;
|
|
44
|
-
}
|
|
45
|
-
}));
|
|
46
|
-
}
|
|
47
|
-
decode_uri_component() {
|
|
48
|
-
return this._deriveString((str) => {
|
|
49
|
-
try {
|
|
50
|
-
return decodeURIComponent(str);
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
return str;
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
encode_uri_component() {
|
|
58
|
-
return this._deriveString((str) => {
|
|
59
|
-
try {
|
|
60
|
-
return encodeURIComponent(str);
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
return str;
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
ends_with(suffix) {
|
|
68
|
-
return this._deriveString((str) => str.endsWith(suffix));
|
|
69
|
-
}
|
|
70
|
-
explode() {
|
|
71
|
-
return this._deriveString((str) => str.split(""));
|
|
72
|
-
}
|
|
73
|
-
extract(pattern, group = 0) {
|
|
74
|
-
return this._patternGuard(pattern, () => this._deriveString((str) => {
|
|
75
|
-
const match = str.match(pattern);
|
|
76
|
-
if (!match)
|
|
77
|
-
return null;
|
|
78
|
-
return match[group] !== undefined ? match[group] : null;
|
|
79
|
-
}));
|
|
80
|
-
}
|
|
81
|
-
len() {
|
|
82
|
-
return this.len_chars();
|
|
83
|
-
}
|
|
84
|
-
len_bytes() {
|
|
85
|
-
return this._deriveString((str) => new TextEncoder().encode(str).length);
|
|
86
|
-
}
|
|
87
|
-
len_chars() {
|
|
88
|
-
return this._deriveString((str) => str.length);
|
|
89
|
-
}
|
|
90
|
-
lower() {
|
|
91
|
-
return this._deriveString((str) => str.toLowerCase());
|
|
92
|
-
}
|
|
93
|
-
lpad(width, fill = " ") {
|
|
94
|
-
return this._deriveString((str) => str.padStart(width, fill));
|
|
95
|
-
}
|
|
96
|
-
pad_end(width, fill = " ") {
|
|
97
|
-
return this.rpad(width, fill);
|
|
98
|
-
}
|
|
99
|
-
pad_start(width, fill = " ") {
|
|
100
|
-
return this.lpad(width, fill);
|
|
101
|
-
}
|
|
102
|
-
replace(pattern, replacement) {
|
|
103
|
-
return this._patternGuard(pattern, () => this._deriveString((str) => str.replace(pattern, replacement)));
|
|
104
|
-
}
|
|
105
|
-
replace_all(pattern, replacement) {
|
|
106
|
-
return this._patternGuard(pattern, () => this._deriveString((str) => {
|
|
107
|
-
if (pattern instanceof RegExp) {
|
|
108
|
-
const regex = pattern.global
|
|
109
|
-
? pattern
|
|
110
|
-
: new RegExp(pattern.source, pattern.flags + "g");
|
|
111
|
-
return str.replace(regex, replacement);
|
|
112
|
-
}
|
|
113
|
-
return str.replaceAll(pattern, replacement);
|
|
114
|
-
}));
|
|
115
|
-
}
|
|
116
|
-
reverse() {
|
|
117
|
-
return this._deriveString((str) => str.split("").reverse().join(""));
|
|
118
|
-
}
|
|
119
|
-
rpad(width, fill = " ") {
|
|
120
|
-
return this._deriveString((str) => str.padEnd(width, fill));
|
|
121
|
-
}
|
|
122
|
-
slice(offset, length) {
|
|
123
|
-
return this._deriveString((str) => {
|
|
124
|
-
const start = offset < 0 ? str.length + offset : offset;
|
|
125
|
-
const end = length !== undefined ? start + length : undefined;
|
|
126
|
-
return str.slice(start, end);
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
slice_str(offset, length) {
|
|
130
|
-
return this.slice(offset, length);
|
|
131
|
-
}
|
|
132
|
-
split(delimiter) {
|
|
133
|
-
return this._deriveString((str) => str.split(delimiter));
|
|
134
|
-
}
|
|
135
|
-
starts_with(prefix) {
|
|
136
|
-
return this._deriveString((str) => str.startsWith(prefix));
|
|
137
|
-
}
|
|
138
|
-
strip_chars(characters, options) {
|
|
139
|
-
return this._deriveString((str) => (0, utils_2.stripChars)(str, characters, { mode: "both", ...options }));
|
|
140
|
-
}
|
|
141
|
-
strip_chars_end(characters, options) {
|
|
142
|
-
return this._deriveString((str) => (0, utils_2.stripChars)(str, characters, { mode: "end", ...options }));
|
|
143
|
-
}
|
|
144
|
-
strip_chars_start(characters, options) {
|
|
145
|
-
return this._deriveString((str) => (0, utils_2.stripChars)(str, characters, { mode: "start", ...options }));
|
|
146
|
-
}
|
|
147
|
-
strip_prefix(prefix) {
|
|
148
|
-
return this._deriveString((str) => {
|
|
149
|
-
return (0, utils_2.stripChars)(str, prefix, {
|
|
150
|
-
mode: "start",
|
|
151
|
-
maxScanStart: 1,
|
|
152
|
-
maxMatchesStart: 1,
|
|
153
|
-
returnStringOnNull: true,
|
|
154
|
-
stringOptions: { literal: true }
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
strip_suffix(suffix) {
|
|
159
|
-
return this._deriveString((str) => {
|
|
160
|
-
return (0, utils_2.stripChars)(str, suffix, {
|
|
161
|
-
mode: "end",
|
|
162
|
-
maxScanEnd: 1,
|
|
163
|
-
maxMatchesEnd: 1,
|
|
164
|
-
returnStringOnNull: true,
|
|
165
|
-
stringOptions: { literal: true }
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
strptime(format, strict = true) {
|
|
170
|
-
return this._deriveString((str) => (0, utils_2.strptime)(str, format, strict));
|
|
171
|
-
}
|
|
172
|
-
to_date() {
|
|
173
|
-
return this._deriveString((str) => {
|
|
174
|
-
const d = (0, utils_2.toValidDate)(str);
|
|
175
|
-
if (!d)
|
|
176
|
-
return null;
|
|
177
|
-
const copy = new Date(d);
|
|
178
|
-
copy.setUTCHours(0, 0, 0, 0);
|
|
179
|
-
return copy;
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
to_datetime() {
|
|
183
|
-
return this._deriveString(utils_2.toValidDate);
|
|
184
|
-
}
|
|
185
|
-
to_decimal(precision, scale) {
|
|
186
|
-
return this._deriveString((str) => (0, utils_2.toValidDecimal)(str, { precision, scale }));
|
|
187
|
-
}
|
|
188
|
-
to_integer() {
|
|
189
|
-
return this._deriveString((str) => (0, utils_2.toValidInt)(str));
|
|
190
|
-
}
|
|
191
|
-
to_lowercase() {
|
|
192
|
-
return this.lower();
|
|
193
|
-
}
|
|
194
|
-
to_time() {
|
|
195
|
-
return this._deriveString((str) => {
|
|
196
|
-
const d = (0, utils_2.toValidDate)(str);
|
|
197
|
-
if (d)
|
|
198
|
-
return d.toISOString().split("T")[1].slice(0, 12);
|
|
199
|
-
const trimmed = str.trim();
|
|
200
|
-
if (utils_2.TIME_PREFIX_REGEX.test(trimmed)) {
|
|
201
|
-
const td = new Date(`1970-01-01T${trimmed}${utils_2.ZONE_OFFSET_REGEX.test(trimmed) ? "" : "Z"}`);
|
|
202
|
-
if ((0, utils_2.isValidDateObj)(td)) {
|
|
203
|
-
return td.toISOString().split("T")[1].slice(0, 12);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
return null;
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
to_titlecase() {
|
|
210
|
-
return this._deriveString((str) => str.replace(/\b\w/g, c => c.toUpperCase()));
|
|
211
|
-
}
|
|
212
|
-
to_uppercase() {
|
|
213
|
-
return this.upper();
|
|
214
|
-
}
|
|
215
|
-
trim() {
|
|
216
|
-
return this.strip_chars();
|
|
217
|
-
}
|
|
218
|
-
trim_end() {
|
|
219
|
-
return this.strip_chars_end();
|
|
220
|
-
}
|
|
221
|
-
trim_start() {
|
|
222
|
-
return this.strip_chars_start();
|
|
223
|
-
}
|
|
224
|
-
upper() {
|
|
225
|
-
return this._deriveString((str) => str.toUpperCase());
|
|
226
|
-
}
|
|
227
|
-
zfill(width) {
|
|
228
|
-
return this._deriveString((str) => str.padStart(width, "0"));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
exports.StringExprNamespace = StringExprNamespace;
|
|
232
|
-
class StringExpr extends ExprBase_1.ExprBase {
|
|
233
|
-
get str() {
|
|
234
|
-
return new StringExprNamespace(this);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
exports.StringExpr = StringExpr;
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StructExpr = exports.StructExprNamespace = void 0;
|
|
4
|
-
const ExprBase_1 = require("../ExprBase");
|
|
5
|
-
let ColumnExprClass = null;
|
|
6
|
-
function toColExpr(col) {
|
|
7
|
-
if (col == null) {
|
|
8
|
-
throw new Error("Column reference cannot be null or undefined.");
|
|
9
|
-
}
|
|
10
|
-
if (!ColumnExprClass) {
|
|
11
|
-
ColumnExprClass = require("../ColumnExpr").ColumnExpr;
|
|
12
|
-
}
|
|
13
|
-
return ColumnExprClass.isColExpr(col) ? col : new ColumnExprClass(col);
|
|
14
|
-
}
|
|
15
|
-
class StructExprNamespace {
|
|
16
|
-
expr;
|
|
17
|
-
constructor(expr) {
|
|
18
|
-
this.expr = expr;
|
|
19
|
-
return new Proxy(this, {
|
|
20
|
-
get(target, prop, receiver) {
|
|
21
|
-
if (prop in target) {
|
|
22
|
-
return Reflect.get(target, prop, receiver);
|
|
23
|
-
}
|
|
24
|
-
if (typeof prop === "string") {
|
|
25
|
-
return target.field(prop);
|
|
26
|
-
}
|
|
27
|
-
return Reflect.get(target, prop, receiver);
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
field(name) {
|
|
32
|
-
return (0, ExprBase_1.derive)(this.expr, (vArray) => {
|
|
33
|
-
const height = vArray.length;
|
|
34
|
-
const result = new Array(height);
|
|
35
|
-
for (let i = 0; i < height; i++) {
|
|
36
|
-
const v = vArray[i];
|
|
37
|
-
result[i] = (v != null && typeof v === "object") ? v[name] : null;
|
|
38
|
-
}
|
|
39
|
-
return result;
|
|
40
|
-
}).alias(name);
|
|
41
|
-
}
|
|
42
|
-
rename_fields(mapping) {
|
|
43
|
-
return (0, ExprBase_1.derive)(this.expr, (vArray) => {
|
|
44
|
-
const height = vArray.length;
|
|
45
|
-
const result = new Array(height);
|
|
46
|
-
const keys = Object.keys(mapping);
|
|
47
|
-
const keysLen = keys.length;
|
|
48
|
-
for (let i = 0; i < height; i++) {
|
|
49
|
-
const v = vArray[i];
|
|
50
|
-
if (v == null || typeof v !== "object") {
|
|
51
|
-
result[i] = null;
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
const newObj = {};
|
|
55
|
-
const origKeys = Object.keys(v);
|
|
56
|
-
const origLen = origKeys.length;
|
|
57
|
-
for (let k = 0; k < origLen; k++) {
|
|
58
|
-
const key = origKeys[k];
|
|
59
|
-
newObj[key] = v[key];
|
|
60
|
-
}
|
|
61
|
-
for (let j = 0; j < keysLen; j++) {
|
|
62
|
-
const oldKey = keys[j];
|
|
63
|
-
if (oldKey in newObj) {
|
|
64
|
-
const newKey = mapping[oldKey];
|
|
65
|
-
newObj[newKey] = newObj[oldKey];
|
|
66
|
-
delete newObj[oldKey];
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
result[i] = newObj;
|
|
70
|
-
}
|
|
71
|
-
return result;
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
with_fields(fields) {
|
|
75
|
-
return (0, ExprBase_1.derive)(this.expr, (vArray, columns) => {
|
|
76
|
-
const height = vArray.length;
|
|
77
|
-
const result = new Array(height);
|
|
78
|
-
const resolved = [];
|
|
79
|
-
if (Array.isArray(fields)) {
|
|
80
|
-
const fieldsLen = fields.length;
|
|
81
|
-
for (let j = 0; j < fieldsLen; j++) {
|
|
82
|
-
const f = fields[j];
|
|
83
|
-
const expr = toColExpr(f);
|
|
84
|
-
const name = expr.outputName || expr.colName;
|
|
85
|
-
if (!name) {
|
|
86
|
-
throw new Error("Expressions passed to struct.with_fields must have a name/alias.");
|
|
87
|
-
}
|
|
88
|
-
resolved.push({ name, expr });
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
else if (fields && typeof fields === "object") {
|
|
92
|
-
const keys = Object.keys(fields);
|
|
93
|
-
const keysLen = keys.length;
|
|
94
|
-
for (let j = 0; j < keysLen; j++) {
|
|
95
|
-
const name = keys[j];
|
|
96
|
-
const expr = toColExpr(fields[name]);
|
|
97
|
-
resolved.push({ name, expr });
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
const resolvedLen = resolved.length;
|
|
101
|
-
const fieldValues = new Array(resolvedLen);
|
|
102
|
-
for (let j = 0; j < resolvedLen; j++) {
|
|
103
|
-
fieldValues[j] = resolved[j].expr.evaluate(columns, height);
|
|
104
|
-
}
|
|
105
|
-
for (let i = 0; i < height; i++) {
|
|
106
|
-
const v = vArray[i];
|
|
107
|
-
if (v == null || typeof v !== "object") {
|
|
108
|
-
result[i] = null;
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
const newObj = {};
|
|
112
|
-
const origKeys = Object.keys(v);
|
|
113
|
-
const origLen = origKeys.length;
|
|
114
|
-
for (let k = 0; k < origLen; k++) {
|
|
115
|
-
const key = origKeys[k];
|
|
116
|
-
newObj[key] = v[key];
|
|
117
|
-
}
|
|
118
|
-
for (let j = 0; j < resolvedLen; j++) {
|
|
119
|
-
newObj[resolved[j].name] = fieldValues[j][i];
|
|
120
|
-
}
|
|
121
|
-
result[i] = newObj;
|
|
122
|
-
}
|
|
123
|
-
return result;
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
unnest() {
|
|
127
|
-
const newInst = (0, ExprBase_1.derive)(this.expr);
|
|
128
|
-
newInst.isUnnest = true;
|
|
129
|
-
newInst.baseExpr = this.expr;
|
|
130
|
-
return newInst;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
exports.StructExprNamespace = StructExprNamespace;
|
|
134
|
-
class StructExpr extends ExprBase_1.ExprBase {
|
|
135
|
-
get struct() {
|
|
136
|
-
return new StructExprNamespace(this);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
exports.StructExpr = StructExpr;
|