@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.
Files changed (51) hide show
  1. package/README.md +6 -0
  2. package/dist/tengo/lib/assets.lib.tengo +64 -0
  3. package/dist/tengo/lib/constants.lib.tengo +75 -0
  4. package/dist/tengo/lib/exec.internal.lib.tengo +211 -0
  5. package/dist/tengo/lib/exec.lib.tengo +516 -0
  6. package/dist/tengo/lib/exec.package.lib.tengo +296 -0
  7. package/dist/tengo/lib/exec.runcmd.lib.tengo +275 -0
  8. package/dist/tengo/lib/exec.runenv.lib.tengo +221 -0
  9. package/dist/tengo/lib/exec.stream.lib.tengo +64 -0
  10. package/dist/tengo/lib/file.lib.tengo +112 -0
  11. package/dist/tengo/lib/ll.lib.tengo +233 -0
  12. package/dist/tengo/lib/maps.lib.tengo +102 -0
  13. package/dist/tengo/lib/objects.lib.tengo +22 -0
  14. package/dist/tengo/lib/oop.lib.tengo +29 -0
  15. package/dist/tengo/lib/path.lib.tengo +165 -0
  16. package/dist/tengo/lib/pframes.constants.lib.tengo +53 -0
  17. package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +47 -0
  18. package/dist/tengo/lib/pframes.lib.tengo +84 -0
  19. package/dist/tengo/lib/pframes.ll.lib.tengo +86 -0
  20. package/dist/tengo/lib/pframes.util.lib.tengo +244 -0
  21. package/dist/tengo/lib/pframes.xsv.lib.tengo +178 -0
  22. package/dist/tengo/lib/render.lib.tengo +100 -0
  23. package/dist/tengo/lib/sets.lib.tengo +93 -0
  24. package/dist/tengo/lib/slices.lib.tengo +202 -0
  25. package/dist/tengo/lib/smart.lib.tengo +1005 -0
  26. package/dist/tengo/lib/tpl.lib.tengo +535 -0
  27. package/dist/tengo/lib/tpl.state-await.lib.tengo +255 -0
  28. package/dist/tengo/lib/tpl.util.lib.tengo +19 -0
  29. package/dist/tengo/lib/validation.lib.tengo +428 -0
  30. package/dist/tengo/lib/workdir.lib.tengo +300 -0
  31. package/dist/tengo/lib/workdir.proc.lib.tengo +158 -0
  32. package/dist/tengo/lib/workdir.save.lib.tengo +158 -0
  33. package/dist/tengo/lib/workflow.bobject.lib.tengo +51 -0
  34. package/dist/tengo/lib/workflow.bquery.lib.tengo +208 -0
  35. package/dist/tengo/lib/workflow.constants.lib.tengo +8 -0
  36. package/dist/tengo/lib/workflow.context.lib.tengo +56 -0
  37. package/dist/tengo/lib/workflow.lib.tengo +298 -0
  38. package/dist/tengo/tpl/exec.create-python-venv.plj.gz +0 -0
  39. package/dist/tengo/tpl/exec.exec.plj.gz +0 -0
  40. package/dist/tengo/tpl/pframes.aggregate.plj.gz +0 -0
  41. package/dist/tengo/tpl/pframes.export-multiple-pcolumns.plj.gz +0 -0
  42. package/dist/tengo/tpl/pframes.export-pframe.plj.gz +0 -0
  43. package/dist/tengo/tpl/pframes.export-single-pcolumn.plj.gz +0 -0
  44. package/dist/tengo/tpl/pframes.import-dir.plj.gz +0 -0
  45. package/dist/tengo/tpl/pframes.import-xsv-map.plj.gz +0 -0
  46. package/dist/tengo/tpl/pframes.map-pframe.plj.gz +0 -0
  47. package/dist/tengo/tpl/workdir.save.plj.gz +0 -0
  48. package/dist/tengo/tpl/workflow.build-ctx.plj.gz +0 -0
  49. package/index.d.ts +4 -0
  50. package/index.js +13 -0
  51. 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
+ })