@platforma-sdk/workflow-tengo 1.2.6
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 +6 -0
- package/dist/tengo/lib/assets.lib.tengo +64 -0
- package/dist/tengo/lib/constants.lib.tengo +75 -0
- package/dist/tengo/lib/exec.internal.lib.tengo +211 -0
- package/dist/tengo/lib/exec.lib.tengo +516 -0
- package/dist/tengo/lib/exec.package.lib.tengo +296 -0
- package/dist/tengo/lib/exec.runcmd.lib.tengo +275 -0
- package/dist/tengo/lib/exec.runenv.lib.tengo +221 -0
- package/dist/tengo/lib/exec.stream.lib.tengo +64 -0
- package/dist/tengo/lib/file.lib.tengo +112 -0
- package/dist/tengo/lib/ll.lib.tengo +233 -0
- package/dist/tengo/lib/maps.lib.tengo +102 -0
- package/dist/tengo/lib/objects.lib.tengo +22 -0
- package/dist/tengo/lib/oop.lib.tengo +29 -0
- package/dist/tengo/lib/path.lib.tengo +165 -0
- package/dist/tengo/lib/pframes.constants.lib.tengo +53 -0
- package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +47 -0
- package/dist/tengo/lib/pframes.lib.tengo +84 -0
- package/dist/tengo/lib/pframes.ll.lib.tengo +86 -0
- package/dist/tengo/lib/pframes.util.lib.tengo +244 -0
- package/dist/tengo/lib/pframes.xsv.lib.tengo +178 -0
- package/dist/tengo/lib/render.lib.tengo +100 -0
- package/dist/tengo/lib/sets.lib.tengo +93 -0
- package/dist/tengo/lib/slices.lib.tengo +202 -0
- package/dist/tengo/lib/smart.lib.tengo +1005 -0
- package/dist/tengo/lib/tpl.lib.tengo +535 -0
- package/dist/tengo/lib/tpl.state-await.lib.tengo +255 -0
- package/dist/tengo/lib/tpl.util.lib.tengo +19 -0
- package/dist/tengo/lib/validation.lib.tengo +428 -0
- package/dist/tengo/lib/workdir.lib.tengo +300 -0
- package/dist/tengo/lib/workdir.proc.lib.tengo +158 -0
- package/dist/tengo/lib/workdir.save.lib.tengo +158 -0
- package/dist/tengo/lib/workflow.bobject.lib.tengo +51 -0
- package/dist/tengo/lib/workflow.bquery.lib.tengo +208 -0
- package/dist/tengo/lib/workflow.constants.lib.tengo +8 -0
- package/dist/tengo/lib/workflow.context.lib.tengo +56 -0
- package/dist/tengo/lib/workflow.lib.tengo +298 -0
- package/dist/tengo/tpl/exec.create-python-venv.plj.gz +0 -0
- package/dist/tengo/tpl/exec.exec.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.import-xsv-map.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.map-pframe.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/index.d.ts +4 -0
- package/index.js +13 -0
- package/package.json +25 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
2
|
+
enum := import("enum")
|
|
3
|
+
|
|
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
|
+
length := func(slice) {
|
|
12
|
+
if is_undefined(slice) {
|
|
13
|
+
return 0
|
|
14
|
+
}
|
|
15
|
+
return len(slice)
|
|
16
|
+
}
|
|
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
|
+
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
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return array[from:to]
|
|
38
|
+
}
|
|
39
|
+
|
|
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
|
+
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.
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return append(slice, toAppend...)
|
|
57
|
+
}
|
|
58
|
+
|
|
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
|
+
findElement := func(slice, element) {
|
|
67
|
+
for i, elem in slice {
|
|
68
|
+
if elem == element {
|
|
69
|
+
return i
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return -1
|
|
74
|
+
}
|
|
75
|
+
|
|
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
|
+
hasElement := func(slice, element) {
|
|
84
|
+
return findElement(slice, element) != -1
|
|
85
|
+
}
|
|
86
|
+
|
|
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
|
+
removeElement := func(slice, i) {
|
|
95
|
+
return safeAppend(slice[:i], slice[i+1:]...)
|
|
96
|
+
}
|
|
97
|
+
|
|
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
|
+
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
|
|
114
|
+
}
|
|
115
|
+
|
|
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
|
+
map := func(slice, fn) {
|
|
124
|
+
newS := []
|
|
125
|
+
for _, elem in slice {
|
|
126
|
+
newS = append(newS, fn(elem))
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return newS
|
|
130
|
+
}
|
|
131
|
+
|
|
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
|
+
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
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return result
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Creates a copy of a slice and sorts it using a stable bubble sort.
|
|
157
|
+
*
|
|
158
|
+
* @param notSortedSlice: []any - a slice of elements of any type.
|
|
159
|
+
* @param fn: func(elem): int - a function that transforms an element to a key.
|
|
160
|
+
* @return sorted slice: []any
|
|
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
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return s
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Creates a slice from a set of elements
|
|
181
|
+
*
|
|
182
|
+
* @param set: map[element]any - a set
|
|
183
|
+
* @return slice: []element - a slice of elements from the set, sorted by an element.
|
|
184
|
+
*/
|
|
185
|
+
fromSet := func(set) {
|
|
186
|
+
slice := enum.map(set, func(k, _) { return k })
|
|
187
|
+
return sortByFn(slice, func(elem) { return elem })
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
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
|
|
202
|
+
})
|