@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.
Files changed (64) hide show
  1. package/dist/tengo/lib/assets.lib.tengo +52 -52
  2. package/dist/tengo/lib/assets.swinfo.lib.tengo +45 -45
  3. package/dist/tengo/lib/constants.lib.tengo +32 -32
  4. package/dist/tengo/lib/exec.R.internal.lib.tengo +29 -29
  5. package/dist/tengo/lib/exec.R.lib.tengo +166 -166
  6. package/dist/tengo/lib/exec.constants.lib.tengo +4 -4
  7. package/dist/tengo/lib/exec.descriptor.lib.tengo +31 -31
  8. package/dist/tengo/lib/exec.internal.lib.tengo +297 -297
  9. package/dist/tengo/lib/exec.lib.tengo +815 -815
  10. package/dist/tengo/lib/exec.monetization.lib.tengo +130 -130
  11. package/dist/tengo/lib/exec.package.lib.tengo +212 -212
  12. package/dist/tengo/lib/exec.python.internal.lib.tengo +6 -6
  13. package/dist/tengo/lib/exec.python.lib.tengo +146 -146
  14. package/dist/tengo/lib/exec.runcmd.lib.tengo +371 -371
  15. package/dist/tengo/lib/exec.runenv.lib.tengo +92 -92
  16. package/dist/tengo/lib/exec.stream.lib.tengo +40 -40
  17. package/dist/tengo/lib/file.internal.lib.tengo +77 -77
  18. package/dist/tengo/lib/file.lib.tengo +57 -57
  19. package/dist/tengo/lib/ll.lib.tengo +244 -244
  20. package/dist/tengo/lib/maps.lib.tengo +152 -152
  21. package/dist/tengo/lib/objects.lib.tengo +13 -13
  22. package/dist/tengo/lib/oop.lib.tengo +19 -19
  23. package/dist/tengo/lib/path.lib.tengo +125 -125
  24. package/dist/tengo/lib/pframes.constants.lib.tengo +28 -28
  25. package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +33 -33
  26. package/dist/tengo/lib/pframes.lib.tengo +43 -43
  27. package/dist/tengo/lib/pframes.ll.lib.tengo +72 -72
  28. package/dist/tengo/lib/pframes.pcolumn.lib.tengo +49 -49
  29. package/dist/tengo/lib/pframes.spec.lib.tengo +96 -96
  30. package/dist/tengo/lib/pframes.util.lib.tengo +288 -288
  31. package/dist/tengo/lib/pframes.xsv.lib.tengo +272 -272
  32. package/dist/tengo/lib/render.lib.tengo +75 -75
  33. package/dist/tengo/lib/sets.lib.tengo +68 -68
  34. package/dist/tengo/lib/slices.lib.tengo +258 -155
  35. package/dist/tengo/lib/smart.lib.tengo +1069 -1069
  36. package/dist/tengo/lib/test.lib.tengo +161 -161
  37. package/dist/tengo/lib/tpl.lib.tengo +515 -515
  38. package/dist/tengo/lib/tpl.state-await.lib.tengo +240 -240
  39. package/dist/tengo/lib/tpl.util.lib.tengo +9 -9
  40. package/dist/tengo/lib/validation.lib.tengo +378 -378
  41. package/dist/tengo/lib/workdir.lib.tengo +331 -331
  42. package/dist/tengo/lib/workdir.proc.lib.tengo +144 -144
  43. package/dist/tengo/lib/workdir.save.lib.tengo +130 -130
  44. package/dist/tengo/lib/workflow.bobject.lib.tengo +26 -26
  45. package/dist/tengo/lib/workflow.bquery.lib.tengo +165 -165
  46. package/dist/tengo/lib/workflow.constants.lib.tengo +2 -2
  47. package/dist/tengo/lib/workflow.context.lib.tengo +32 -32
  48. package/dist/tengo/lib/workflow.lib.tengo +206 -206
  49. package/dist/tengo/tpl/exec.R.create-renv.plj.gz +0 -0
  50. package/dist/tengo/tpl/exec.exec.plj.gz +0 -0
  51. package/dist/tengo/tpl/exec.monetization_to_json.plj.gz +0 -0
  52. package/dist/tengo/tpl/exec.python.create-venv.plj.gz +0 -0
  53. package/dist/tengo/tpl/exec.python.install-deps.plj.gz +0 -0
  54. package/dist/tengo/tpl/pframes.aggregate.plj.gz +0 -0
  55. package/dist/tengo/tpl/pframes.export-multiple-pcolumns.plj.gz +0 -0
  56. package/dist/tengo/tpl/pframes.export-pframe.plj.gz +0 -0
  57. package/dist/tengo/tpl/pframes.export-single-pcolumn.plj.gz +0 -0
  58. package/dist/tengo/tpl/pframes.import-dir.plj.gz +0 -0
  59. package/dist/tengo/tpl/pframes.map-pframe.plj.gz +0 -0
  60. package/dist/tengo/tpl/pframes.xsv-export-pframe.plj.gz +0 -0
  61. package/dist/tengo/tpl/pframes.xsv-import-map.plj.gz +0 -0
  62. package/dist/tengo/tpl/workdir.save.plj.gz +0 -0
  63. package/dist/tengo/tpl/workflow.build-ctx.plj.gz +0 -0
  64. 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
- return array[from:to]
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
- return append(slice, toAppend...)
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
- return result
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
- sortByFn := func(notSortedSlice, fn) {
164
- s := copy(notSortedSlice)
165
-
166
- for i := 0; i < length(s) - 1; i++ {
167
- for j := i+1; j < length(s); j++ {
168
- if fn(s[i]) > fn(s[j]) {
169
- tmp := s[i]
170
- s[i] = s[j]
171
- s[j] = tmp
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
- return s
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
- sortByFn: sortByFn,
200
- fromSet: fromSet,
201
- slice: slice
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
  })