@platforma-sdk/workflow-tengo 2.9.6 → 2.9.7
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/dist/tengo/lib/assets.lib.tengo +52 -52
- package/dist/tengo/lib/assets.swinfo.lib.tengo +45 -45
- package/dist/tengo/lib/constants.lib.tengo +32 -32
- package/dist/tengo/lib/exec.R.internal.lib.tengo +29 -29
- package/dist/tengo/lib/exec.R.lib.tengo +166 -166
- package/dist/tengo/lib/exec.constants.lib.tengo +4 -4
- package/dist/tengo/lib/exec.descriptor.lib.tengo +31 -31
- package/dist/tengo/lib/exec.internal.lib.tengo +297 -297
- package/dist/tengo/lib/exec.lib.tengo +815 -815
- package/dist/tengo/lib/exec.monetization.lib.tengo +130 -130
- package/dist/tengo/lib/exec.package.lib.tengo +212 -212
- package/dist/tengo/lib/exec.python.internal.lib.tengo +6 -6
- package/dist/tengo/lib/exec.python.lib.tengo +146 -146
- package/dist/tengo/lib/exec.runcmd.lib.tengo +371 -371
- package/dist/tengo/lib/exec.runenv.lib.tengo +92 -92
- package/dist/tengo/lib/exec.stream.lib.tengo +40 -40
- package/dist/tengo/lib/file.internal.lib.tengo +77 -77
- package/dist/tengo/lib/file.lib.tengo +57 -57
- package/dist/tengo/lib/ll.lib.tengo +244 -244
- package/dist/tengo/lib/maps.lib.tengo +152 -152
- package/dist/tengo/lib/objects.lib.tengo +13 -13
- package/dist/tengo/lib/oop.lib.tengo +19 -19
- package/dist/tengo/lib/path.lib.tengo +125 -125
- package/dist/tengo/lib/pframes.constants.lib.tengo +28 -28
- package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +33 -33
- package/dist/tengo/lib/pframes.lib.tengo +43 -43
- package/dist/tengo/lib/pframes.ll.lib.tengo +72 -72
- package/dist/tengo/lib/pframes.pcolumn.lib.tengo +49 -49
- package/dist/tengo/lib/pframes.spec.lib.tengo +96 -96
- package/dist/tengo/lib/pframes.util.lib.tengo +288 -288
- package/dist/tengo/lib/pframes.xsv.lib.tengo +272 -272
- package/dist/tengo/lib/render.lib.tengo +75 -75
- package/dist/tengo/lib/sets.lib.tengo +68 -68
- package/dist/tengo/lib/slices.lib.tengo +258 -155
- package/dist/tengo/lib/smart.lib.tengo +1069 -1069
- package/dist/tengo/lib/test.lib.tengo +161 -161
- package/dist/tengo/lib/tpl.lib.tengo +515 -515
- package/dist/tengo/lib/tpl.state-await.lib.tengo +240 -240
- package/dist/tengo/lib/tpl.util.lib.tengo +9 -9
- package/dist/tengo/lib/validation.lib.tengo +378 -378
- package/dist/tengo/lib/workdir.lib.tengo +331 -331
- package/dist/tengo/lib/workdir.proc.lib.tengo +144 -144
- package/dist/tengo/lib/workdir.save.lib.tengo +130 -130
- package/dist/tengo/lib/workflow.bobject.lib.tengo +26 -26
- package/dist/tengo/lib/workflow.bquery.lib.tengo +165 -165
- package/dist/tengo/lib/workflow.constants.lib.tengo +2 -2
- package/dist/tengo/lib/workflow.context.lib.tengo +32 -32
- package/dist/tengo/lib/workflow.lib.tengo +206 -206
- package/dist/tengo/tpl/exec.R.create-renv.plj.gz +0 -0
- package/dist/tengo/tpl/exec.exec.plj.gz +0 -0
- package/dist/tengo/tpl/exec.monetization_to_json.plj.gz +0 -0
- package/dist/tengo/tpl/exec.python.create-venv.plj.gz +0 -0
- package/dist/tengo/tpl/exec.python.install-deps.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.aggregate.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.export-multiple-pcolumns.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.export-pframe.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.export-single-pcolumn.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.import-dir.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.map-pframe.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.xsv-export-pframe.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.xsv-import-map.plj.gz +0 -0
- package/dist/tengo/tpl/workdir.save.plj.gz +0 -0
- package/dist/tengo/tpl/workflow.build-ctx.plj.gz +0 -0
- package/package.json +1 -1
|
@@ -1,202 +1,305 @@
|
|
|
1
1
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
2
2
|
enum := import("enum")
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Returns length of the collection even if it's nil.
|
|
6
|
+
* It's a one of rare differences of Tengo and Go.
|
|
7
|
+
*
|
|
8
|
+
* @param slice: []any | undefined - a slice
|
|
9
|
+
* @return: length: int
|
|
10
|
+
*/
|
|
11
11
|
length := func(slice) {
|
|
12
|
-
if is_undefined(slice) {
|
|
13
|
-
return 0
|
|
12
|
+
if is_undefined(slice) {
|
|
13
|
+
return 0
|
|
14
|
+
}
|
|
15
|
+
return len(slice)
|
|
14
16
|
}
|
|
15
|
-
return len(slice)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Returns a slice of the array, but you can give negative from and to,
|
|
20
|
+
* in which case it slices from the end like in Python.
|
|
21
|
+
* Example: slice([1, 2, 3], 0, -1) == [1, 2]
|
|
22
|
+
*
|
|
23
|
+
* @param array: []any - a slice
|
|
24
|
+
* @param from: number - an index we starts from
|
|
25
|
+
* @param to: number - an index the slice will end
|
|
26
|
+
* @return slice: []any - a sliced array.
|
|
27
|
+
*/
|
|
28
28
|
slice := func(array, from, to) {
|
|
29
|
-
len := length(array)
|
|
30
|
-
if from < 0 {
|
|
31
|
-
from = len + from
|
|
32
|
-
}
|
|
33
|
-
if to < 0 {
|
|
34
|
-
to = len + to
|
|
29
|
+
len := length(array)
|
|
30
|
+
if from < 0 {
|
|
31
|
+
from = len + from
|
|
32
|
+
}
|
|
33
|
+
if to < 0 {
|
|
34
|
+
to = len + to
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return array[from:to]
|
|
35
38
|
}
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Appends slices safely even some of them are nil.
|
|
42
|
+
* It's one of rare differences of Tengo and Go.
|
|
43
|
+
*
|
|
44
|
+
* @param slice: []any - a slice
|
|
45
|
+
* @param toAppend: ...any - elements we'll append to the slice
|
|
46
|
+
* @return new slice: []any - the same slice but with appended elements.
|
|
47
|
+
*/
|
|
48
48
|
safeAppend := func(slice, ...toAppend) {
|
|
49
|
-
if is_undefined(slice) {
|
|
50
|
-
slice = []
|
|
51
|
-
}
|
|
52
|
-
if length(toAppend) == 0 {
|
|
53
|
-
return slice // slice is of any length here.
|
|
49
|
+
if is_undefined(slice) {
|
|
50
|
+
slice = []
|
|
51
|
+
}
|
|
52
|
+
if length(toAppend) == 0 {
|
|
53
|
+
return slice // slice is of any length here.
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return append(slice, toAppend...)
|
|
54
57
|
}
|
|
55
58
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Returns an index of an element in the slice or -1 if it wasn't found.
|
|
61
|
+
*
|
|
62
|
+
* @param silce: []any
|
|
63
|
+
* @param element: any
|
|
64
|
+
* @return index: int - index of the element or -1
|
|
65
|
+
*/
|
|
66
66
|
findElement := func(slice, element) {
|
|
67
|
-
for i, elem in slice {
|
|
68
|
-
if elem == element {
|
|
69
|
-
return i
|
|
70
|
-
}
|
|
71
|
-
}
|
|
67
|
+
for i, elem in slice {
|
|
68
|
+
if elem == element {
|
|
69
|
+
return i
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
72
|
|
|
73
|
-
return -1
|
|
73
|
+
return -1
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
76
|
+
/**
|
|
77
|
+
* Returns a boolean of whether an element is in a slice.
|
|
78
|
+
*
|
|
79
|
+
* @param slice: []any
|
|
80
|
+
* @param element: any - an element the function searches for.
|
|
81
|
+
* @return found: bool
|
|
82
|
+
*/
|
|
83
83
|
hasElement := func(slice, element) {
|
|
84
|
-
return findElement(slice, element) != -1
|
|
84
|
+
return findElement(slice, element) != -1
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
87
|
+
/**
|
|
88
|
+
* Removes an element from the slice
|
|
89
|
+
*
|
|
90
|
+
* @param slice: []any
|
|
91
|
+
* @param i: int - an index of the element to remove.
|
|
92
|
+
* @return nothing
|
|
93
|
+
*/
|
|
94
94
|
removeElement := func(slice, i) {
|
|
95
|
-
return safeAppend(slice[:i], slice[i+1:]...)
|
|
95
|
+
return safeAppend(slice[:i], slice[i+1:]...)
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
98
|
+
/**
|
|
99
|
+
* Returns a new slice with elements for which a predicate returned true.
|
|
100
|
+
*
|
|
101
|
+
* @param slice: []any
|
|
102
|
+
* @param predicateFn: func(elem): bool - a function that gets an element and returns a truthy or falsy value.
|
|
103
|
+
* @return new slice: []any - a slice with matched elements.
|
|
104
|
+
*/
|
|
105
105
|
filter := func(slice, predicateFn) {
|
|
106
|
-
newS := []
|
|
107
|
-
for _, elem in slice {
|
|
108
|
-
if predicateFn(elem) {
|
|
109
|
-
newS = append(newS, elem)
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return newS
|
|
106
|
+
newS := []
|
|
107
|
+
for _, elem in slice {
|
|
108
|
+
if predicateFn(elem) {
|
|
109
|
+
newS = append(newS, elem)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return newS
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
116
|
+
/**
|
|
117
|
+
* Transforms each element of the slice to a new one and returns a new slice
|
|
118
|
+
*
|
|
119
|
+
* @param slice: []any
|
|
120
|
+
* @param fn: func(elem): new elem - a function that gets an element and returns a transformed element.
|
|
121
|
+
* @return new slice: []any - a new slice with transformed elements.
|
|
122
|
+
*/
|
|
123
123
|
map := func(slice, fn) {
|
|
124
|
-
newS := []
|
|
125
|
-
for _, elem in slice {
|
|
126
|
-
newS = append(newS, fn(elem))
|
|
127
|
-
}
|
|
124
|
+
newS := []
|
|
125
|
+
for _, elem in slice {
|
|
126
|
+
newS = append(newS, fn(elem))
|
|
127
|
+
}
|
|
128
128
|
|
|
129
|
-
return newS
|
|
129
|
+
return newS
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
132
|
+
/**
|
|
133
|
+
* Returns the result of applying fn to the first 2 items in the slice, then
|
|
134
|
+
* applying fn to that result and the 3rd item, etc.
|
|
135
|
+
* If coll has only 1 item, it is returned and fn is not called.
|
|
136
|
+
*
|
|
137
|
+
* @param slice: []any
|
|
138
|
+
* @param fn: func(any, element): new result.
|
|
139
|
+
* a function that gets a result got so far and an element and returns a new result.
|
|
140
|
+
* @return final result: any - the final result
|
|
141
|
+
*/
|
|
142
142
|
reduce := func(slice, fn) {
|
|
143
|
-
result := undefined
|
|
144
|
-
for i, elem in slice {
|
|
145
|
-
if i == 0 {
|
|
146
|
-
result = elem
|
|
147
|
-
} else {
|
|
148
|
-
result = fn(result, elem)
|
|
149
|
-
}
|
|
143
|
+
result := undefined
|
|
144
|
+
for i, elem in slice {
|
|
145
|
+
if i == 0 {
|
|
146
|
+
result = elem
|
|
147
|
+
} else {
|
|
148
|
+
result = fn(result, elem)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return result
|
|
150
153
|
}
|
|
151
154
|
|
|
152
|
-
|
|
155
|
+
//
|
|
156
|
+
// Simple quick-sort implementations:
|
|
157
|
+
// - with user-provided ordering
|
|
158
|
+
// - and with native sorting
|
|
159
|
+
//
|
|
160
|
+
|
|
161
|
+
_quickSortFn := func(arr, left, right, less) {
|
|
162
|
+
if is_undefined(arr) || len(arr) <= 1 || left < 0 || left >= len(arr) || right < 0 || right >= len(arr) || left >= right {
|
|
163
|
+
return arr
|
|
164
|
+
}
|
|
165
|
+
idx := left
|
|
166
|
+
for i := left; i < right; i++ {
|
|
167
|
+
if less(arr[i], arr[right]) {
|
|
168
|
+
temp := arr[i]
|
|
169
|
+
arr[i] = arr[idx]
|
|
170
|
+
arr[idx] = temp
|
|
171
|
+
idx++
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
temp := arr[right]
|
|
175
|
+
arr[right] = arr[idx]
|
|
176
|
+
arr[idx] = temp
|
|
177
|
+
_quickSortFn(arr, left, idx-1, less)
|
|
178
|
+
_quickSortFn(arr, idx+1, right, less)
|
|
179
|
+
return arr
|
|
153
180
|
}
|
|
154
181
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
182
|
+
_quickSort := func(arr, left, right) {
|
|
183
|
+
if is_undefined(arr) || len(arr) <= 1 || left < 0 || left >= len(arr) || right < 0 || right >= len(arr) || left >= right {
|
|
184
|
+
return arr
|
|
185
|
+
}
|
|
186
|
+
idx := left
|
|
187
|
+
for i := left; i < right; i++ {
|
|
188
|
+
if arr[i] < arr[right] {
|
|
189
|
+
temp := arr[i]
|
|
190
|
+
arr[i] = arr[idx]
|
|
191
|
+
arr[idx] = temp
|
|
192
|
+
idx++
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
temp := arr[right]
|
|
196
|
+
arr[right] = arr[idx]
|
|
197
|
+
arr[idx] = temp
|
|
198
|
+
_quickSort(arr, left, idx-1)
|
|
199
|
+
_quickSort(arr, idx+1, right)
|
|
200
|
+
return arr
|
|
174
201
|
}
|
|
175
202
|
|
|
176
|
-
|
|
203
|
+
/**
|
|
204
|
+
* Sorts slice in-place, using native ordering.
|
|
205
|
+
*
|
|
206
|
+
* @param s: []any - a slice of elements of any comparable type
|
|
207
|
+
* @return s: []any the same slice after sorting
|
|
208
|
+
*
|
|
209
|
+
*/
|
|
210
|
+
quickSortInPlace := func(s) {
|
|
211
|
+
_quickSort(s, 0, len(s)-1)
|
|
212
|
+
return s
|
|
177
213
|
}
|
|
178
214
|
|
|
215
|
+
/**
|
|
216
|
+
* Copy the slice and returtn sorted slice according to native ordering.
|
|
217
|
+
*
|
|
218
|
+
* @param s: []any - a slice of elements of any comparable type
|
|
219
|
+
* @return s: []any sorted slice
|
|
220
|
+
*
|
|
221
|
+
*/
|
|
222
|
+
quickSort := func(s) {
|
|
223
|
+
s = copy(s)
|
|
224
|
+
_quickSort(s, 0, len(s)-1)
|
|
225
|
+
return s
|
|
226
|
+
}
|
|
179
227
|
|
|
228
|
+
/**
|
|
229
|
+
* Sorts slice in-place, using provided ordering function.
|
|
230
|
+
*
|
|
231
|
+
* @param s: []any - a slice of elements of any comparable type
|
|
232
|
+
* @param less: func(a, b): boolean - define ordering, must return true, if a < b
|
|
233
|
+
* @return s: []any the same slice after sorting
|
|
234
|
+
*/
|
|
235
|
+
quickSortInPlaceFn := func(s, less) {
|
|
236
|
+
_quickSortFn(s, 0, len(s)-1, less)
|
|
237
|
+
return s
|
|
238
|
+
}
|
|
180
239
|
|
|
240
|
+
/**
|
|
241
|
+
* Copy the slice and returtn sorted slice according to using provided ordering function.
|
|
242
|
+
*
|
|
243
|
+
* @param s: []any - a slice of elements of any comparable type
|
|
244
|
+
* @param less: func(a, b): boolean - define ordering, must return true, if a < b
|
|
245
|
+
* @return s: []any sorted slice
|
|
246
|
+
*
|
|
247
|
+
*/
|
|
248
|
+
quickSortFn := func(s, less) {
|
|
249
|
+
s = copy(s)
|
|
250
|
+
_quickSortFn(s, 0, len(s)-1, less)
|
|
251
|
+
return s
|
|
252
|
+
}
|
|
181
253
|
|
|
254
|
+
/**
|
|
255
|
+
* Creates a copy of a slice and sorts it using a stable bubble sort.
|
|
256
|
+
*
|
|
257
|
+
* @param notSortedSlice: []any - a slice of elements of any type.
|
|
258
|
+
* @param fn: func(elem): int - a function that transforms an element to a key.
|
|
259
|
+
* @return sorted slice: []any
|
|
260
|
+
*
|
|
261
|
+
*/
|
|
262
|
+
sortByFn := func(notSortedSlice, fn) {
|
|
263
|
+
s := copy(notSortedSlice)
|
|
264
|
+
|
|
265
|
+
for i := 0; i < length(s) - 1; i++ {
|
|
266
|
+
for j := i+1; j < length(s); j++ {
|
|
267
|
+
if fn(s[i]) > fn(s[j]) {
|
|
268
|
+
tmp := s[i]
|
|
269
|
+
s[i] = s[j]
|
|
270
|
+
s[j] = tmp
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return s
|
|
276
|
+
}
|
|
182
277
|
|
|
183
|
-
|
|
184
|
-
|
|
278
|
+
/**
|
|
279
|
+
* Creates a slice from a set of elements
|
|
280
|
+
*
|
|
281
|
+
* @param set: map[element]any - a set
|
|
282
|
+
* @return slice: []element - a slice of elements from the set, sorted by an element.
|
|
283
|
+
*/
|
|
185
284
|
fromSet := func(set) {
|
|
186
|
-
slice := enum.map(set, func(k, _) { return k })
|
|
187
|
-
return sortByFn(slice, func(elem) { return elem })
|
|
285
|
+
slice := enum.map(set, func(k, _) { return k })
|
|
286
|
+
return sortByFn(slice, func(elem) { return elem })
|
|
188
287
|
}
|
|
189
288
|
|
|
190
289
|
export ll.toStrict({
|
|
191
|
-
length: length,
|
|
192
|
-
safeAppend: safeAppend,
|
|
193
|
-
findElement: findElement,
|
|
194
|
-
hasElement: hasElement,
|
|
195
|
-
removeElement: removeElement,
|
|
196
|
-
filter: filter,
|
|
197
|
-
map: map,
|
|
198
|
-
reduce: reduce,
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
290
|
+
length: length,
|
|
291
|
+
safeAppend: safeAppend,
|
|
292
|
+
findElement: findElement,
|
|
293
|
+
hasElement: hasElement,
|
|
294
|
+
removeElement: removeElement,
|
|
295
|
+
filter: filter,
|
|
296
|
+
map: map,
|
|
297
|
+
reduce: reduce,
|
|
298
|
+
quickSortInPlace: quickSortInPlace,
|
|
299
|
+
quickSort: quickSort,
|
|
300
|
+
quickSortFn: quickSortFn,
|
|
301
|
+
quickSortInPlaceFn: quickSortInPlaceFn,
|
|
302
|
+
sortByFn: sortByFn,
|
|
303
|
+
fromSet: fromSet,
|
|
304
|
+
slice: slice
|
|
202
305
|
})
|