df-script 1.5.0 → 1.7.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.
Files changed (159) hide show
  1. package/README.md +125 -9
  2. package/dist/api.d.ts +3 -2
  3. package/dist/assets/index-DBhGK6Tp.css +1 -0
  4. package/dist/assets/index-DEJEV_tU.js +195 -0
  5. package/dist/columnExpressions/ColumnExpr.d.ts +14 -7
  6. package/dist/columnExpressions/ExprBase.d.ts +26 -12
  7. package/dist/columnExpressions/constants.d.ts +1 -0
  8. package/dist/columnExpressions/functions/all.d.ts +23 -0
  9. package/dist/columnExpressions/functions/coalesce.d.ts +31 -2
  10. package/dist/columnExpressions/functions/element.d.ts +26 -1
  11. package/dist/columnExpressions/functions/exclude.d.ts +24 -0
  12. package/dist/columnExpressions/functions/implode.d.ts +28 -0
  13. package/dist/columnExpressions/functions/lit.d.ts +27 -0
  14. package/dist/columnExpressions/functions/seq_range.d.ts +36 -0
  15. package/dist/columnExpressions/functions/struct.d.ts +31 -0
  16. package/dist/columnExpressions/functions/when.d.ts +38 -8
  17. package/dist/columnExpressions/index.d.ts +2 -1
  18. package/dist/columnExpressions/mixins/AggregationExpr.d.ts +336 -2
  19. package/dist/columnExpressions/mixins/ArithmeticExpr.d.ts +620 -10
  20. package/dist/columnExpressions/mixins/ArrayExpr.d.ts +567 -0
  21. package/dist/columnExpressions/mixins/ComparisonExpr.d.ts +353 -0
  22. package/dist/columnExpressions/mixins/LogicalExpr.d.ts +82 -0
  23. package/dist/columnExpressions/mixins/ManipulationExpr.d.ts +40 -0
  24. package/dist/columnExpressions/mixins/StringExpr.d.ts +658 -5
  25. package/dist/columnExpressions/mixins/StructExpr.d.ts +70 -0
  26. package/dist/columnExpressions/mixins/TemporalExpr.d.ts +530 -4
  27. package/dist/columnExpressions/mixins/WindowExpr.d.ts +313 -2
  28. package/dist/columnExpressions/types.d.ts +2 -0
  29. package/dist/constants.d.ts +11 -0
  30. package/dist/dataframe/dataframe.d.ts +933 -3
  31. package/dist/dataframe/grouped/grouped.d.ts +41 -6
  32. package/dist/dataframe/types.d.ts +1 -0
  33. package/dist/dataframe/utils.d.ts +1 -0
  34. package/dist/datatypes/index.d.ts +3 -2
  35. package/dist/datatypes/types.d.ts +52 -7
  36. package/dist/exceptions/index.d.ts +23 -0
  37. package/dist/functions/concat.d.ts +50 -0
  38. package/dist/functions/read_csv.d.ts +9 -0
  39. package/dist/functions/read_json.d.ts +7 -2
  40. package/dist/index.html +17 -0
  41. package/dist/index.js +6 -6
  42. package/dist/index.mjs +6 -0
  43. package/dist/types.d.ts +51 -16
  44. package/dist/utils/{list.d.ts → array.d.ts} +68 -15
  45. package/dist/utils/binary.d.ts +3 -0
  46. package/dist/utils/csv.d.ts +1 -0
  47. package/dist/utils/date.d.ts +23 -54
  48. package/dist/utils/index.d.ts +3 -2
  49. package/dist/utils/json.d.ts +1 -0
  50. package/dist/utils/number.d.ts +15 -29
  51. package/dist/utils/object.d.ts +27 -0
  52. package/dist/utils/string.d.ts +15 -5
  53. package/package.json +18 -4
  54. package/dist/api.js +0 -26
  55. package/dist/bundle.min.js +0 -1
  56. package/dist/columnExpressions/ColumnExpr.js +0 -219
  57. package/dist/columnExpressions/ExprBase.js +0 -92
  58. package/dist/columnExpressions/constants.js +0 -7
  59. package/dist/columnExpressions/functions/all.js +0 -11
  60. package/dist/columnExpressions/functions/coalesce.js +0 -44
  61. package/dist/columnExpressions/functions/element.js +0 -11
  62. package/dist/columnExpressions/functions/exclude.js +0 -13
  63. package/dist/columnExpressions/functions/implode.js +0 -7
  64. package/dist/columnExpressions/functions/lit.js +0 -17
  65. package/dist/columnExpressions/functions/repeat.d.ts +0 -47
  66. package/dist/columnExpressions/functions/repeat.js +0 -131
  67. package/dist/columnExpressions/functions/seq_range.js +0 -91
  68. package/dist/columnExpressions/functions/when.js +0 -85
  69. package/dist/columnExpressions/index.js +0 -38
  70. package/dist/columnExpressions/mixins/AggregationExpr.js +0 -76
  71. package/dist/columnExpressions/mixins/ArithmeticExpr.js +0 -131
  72. package/dist/columnExpressions/mixins/BooleanExpr.d.ts +0 -40
  73. package/dist/columnExpressions/mixins/BooleanExpr.js +0 -67
  74. package/dist/columnExpressions/mixins/ComparisonExpr.js +0 -250
  75. package/dist/columnExpressions/mixins/ListExpr.d.ts +0 -39
  76. package/dist/columnExpressions/mixins/ListExpr.js +0 -224
  77. package/dist/columnExpressions/mixins/LogicalExpr.js +0 -53
  78. package/dist/columnExpressions/mixins/ManipulationExpr.js +0 -71
  79. package/dist/columnExpressions/mixins/NumericExpr.d.ts +0 -92
  80. package/dist/columnExpressions/mixins/NumericExpr.js +0 -259
  81. package/dist/columnExpressions/mixins/StringExpr.js +0 -237
  82. package/dist/columnExpressions/mixins/StructExpr.js +0 -139
  83. package/dist/columnExpressions/mixins/TemporalExpr.js +0 -126
  84. package/dist/columnExpressions/mixins/WindowExpr.js +0 -151
  85. package/dist/columnExpressions/types.js +0 -2
  86. package/dist/columnExpressions/utils.js +0 -45
  87. package/dist/dataframe/constants.js +0 -7
  88. package/dist/dataframe/dataframe.js +0 -990
  89. package/dist/dataframe/grouped/grouped.js +0 -114
  90. package/dist/dataframe/index.js +0 -20
  91. package/dist/dataframe/types.js +0 -2
  92. package/dist/dataframe/utils.js +0 -307
  93. package/dist/datatypes/DataType.js +0 -76
  94. package/dist/datatypes/index.js +0 -46
  95. package/dist/datatypes/types/Binary.d.ts +0 -9
  96. package/dist/datatypes/types/Binary.js +0 -18
  97. package/dist/datatypes/types/Boolean.d.ts +0 -9
  98. package/dist/datatypes/types/Boolean.js +0 -19
  99. package/dist/datatypes/types/Date.d.ts +0 -8
  100. package/dist/datatypes/types/Date.js +0 -21
  101. package/dist/datatypes/types/Datetime.d.ts +0 -8
  102. package/dist/datatypes/types/Datetime.js +0 -17
  103. package/dist/datatypes/types/Decimal.d.ts +0 -10
  104. package/dist/datatypes/types/Decimal.js +0 -28
  105. package/dist/datatypes/types/Duration.d.ts +0 -8
  106. package/dist/datatypes/types/Duration.js +0 -17
  107. package/dist/datatypes/types/Float32.d.ts +0 -8
  108. package/dist/datatypes/types/Float32.js +0 -17
  109. package/dist/datatypes/types/Float64.d.ts +0 -8
  110. package/dist/datatypes/types/Float64.js +0 -17
  111. package/dist/datatypes/types/Int16.d.ts +0 -8
  112. package/dist/datatypes/types/Int16.js +0 -17
  113. package/dist/datatypes/types/Int32.d.ts +0 -8
  114. package/dist/datatypes/types/Int32.js +0 -17
  115. package/dist/datatypes/types/Int64.d.ts +0 -8
  116. package/dist/datatypes/types/Int64.js +0 -17
  117. package/dist/datatypes/types/Int8.d.ts +0 -8
  118. package/dist/datatypes/types/Int8.js +0 -17
  119. package/dist/datatypes/types/List.d.ts +0 -10
  120. package/dist/datatypes/types/List.js +0 -31
  121. package/dist/datatypes/types/Null.d.ts +0 -9
  122. package/dist/datatypes/types/Null.js +0 -17
  123. package/dist/datatypes/types/Object.d.ts +0 -9
  124. package/dist/datatypes/types/Object.js +0 -17
  125. package/dist/datatypes/types/Struct.d.ts +0 -14
  126. package/dist/datatypes/types/Struct.js +0 -39
  127. package/dist/datatypes/types/Time.d.ts +0 -8
  128. package/dist/datatypes/types/Time.js +0 -29
  129. package/dist/datatypes/types/UInt16.d.ts +0 -8
  130. package/dist/datatypes/types/UInt16.js +0 -17
  131. package/dist/datatypes/types/UInt32.d.ts +0 -8
  132. package/dist/datatypes/types/UInt32.js +0 -17
  133. package/dist/datatypes/types/UInt64.d.ts +0 -8
  134. package/dist/datatypes/types/UInt64.js +0 -17
  135. package/dist/datatypes/types/UInt8.d.ts +0 -8
  136. package/dist/datatypes/types/UInt8.js +0 -17
  137. package/dist/datatypes/types/Utf8.d.ts +0 -10
  138. package/dist/datatypes/types/Utf8.js +0 -20
  139. package/dist/datatypes/types.js +0 -290
  140. package/dist/exceptions/index.js +0 -46
  141. package/dist/exceptions/utils.js +0 -28
  142. package/dist/functions/concat.js +0 -260
  143. package/dist/functions/index.js +0 -9
  144. package/dist/functions/read_csv.js +0 -53
  145. package/dist/functions/read_json.js +0 -21
  146. package/dist/functions/transpose.d.ts +0 -7
  147. package/dist/functions/transpose.js +0 -84
  148. package/dist/types.js +0 -2
  149. package/dist/utils/boolean.d.ts +0 -1
  150. package/dist/utils/boolean.js +0 -18
  151. package/dist/utils/csv.js +0 -313
  152. package/dist/utils/date.js +0 -348
  153. package/dist/utils/guards.d.ts +0 -12
  154. package/dist/utils/guards.js +0 -112
  155. package/dist/utils/index.js +0 -23
  156. package/dist/utils/json.js +0 -217
  157. package/dist/utils/list.js +0 -361
  158. package/dist/utils/number.js +0 -401
  159. 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;