@platforma-sdk/workflow-tengo 2.9.6 → 2.9.8
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 +2 -2
|
@@ -3,163 +3,163 @@ text := import("text")
|
|
|
3
3
|
slices := import("@platforma-sdk/workflow-tengo:slices")
|
|
4
4
|
validation := import("@platforma-sdk/workflow-tengo:validation")
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Joins path elements into a single path.
|
|
8
|
+
*
|
|
9
|
+
* @param elems: ...string - any number of elements.
|
|
10
|
+
*/
|
|
11
11
|
join := func(...elems) {
|
|
12
|
-
validation.assertJsonSchema(elems, ["string"])
|
|
13
|
-
return ll.filepathJoin(elems...)
|
|
12
|
+
validation.assertJsonSchema(elems, ["string"])
|
|
13
|
+
return ll.filepathJoin(elems...)
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Like join, joins elements to a single path,
|
|
18
|
+
* but can be used safely in regexps.
|
|
19
|
+
*
|
|
20
|
+
* @param elems: ...string - any number of elements.
|
|
21
|
+
*/
|
|
22
22
|
regexpJoin := func(...elems) {
|
|
23
|
-
validation.assertJsonSchema(elems, ["string"])
|
|
24
|
-
return ll.filepathRegexpJoin(elems...)
|
|
23
|
+
validation.assertJsonSchema(elems, ["string"])
|
|
24
|
+
return ll.filepathRegexpJoin(elems...)
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Joins elements of the filepath and canonizes it, i.e.
|
|
29
|
+
* semantically resolves ../ and ./ and changes slash
|
|
30
|
+
* to a pathSeparator.
|
|
31
|
+
*
|
|
32
|
+
* @param elems: ...string - any number of elements.
|
|
33
|
+
*/
|
|
34
34
|
canonize := func(...elems) {
|
|
35
|
-
validation.assertJsonSchema(elems, ["string"])
|
|
36
|
-
return ll.filepathCanonize(elems...)
|
|
35
|
+
validation.assertJsonSchema(elems, ["string"])
|
|
36
|
+
return ll.filepathCanonize(elems...)
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Returns a path separator. "/" on Unix-like systems, "\\" on Windows.
|
|
41
|
+
*
|
|
42
|
+
* @return separator: string
|
|
43
|
+
*/
|
|
44
44
|
separator := ll.pathSeparator
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Trims a beginning of the file path following by a path separator.
|
|
48
|
+
*
|
|
49
|
+
* @param path: string - a file path
|
|
50
|
+
* @param prefix: string - the beginning of the file path
|
|
51
|
+
* @return trimmed path: string - a path without the beginning and a path separator.
|
|
52
|
+
*/
|
|
53
53
|
trimPrefix := func(path, prefix) {
|
|
54
|
-
validation.assertJsonSchema([path, prefix], ["string"])
|
|
55
|
-
return text.trim_prefix(path, prefix+separator)
|
|
54
|
+
validation.assertJsonSchema([path, prefix], ["string"])
|
|
55
|
+
return text.trim_prefix(path, prefix+separator)
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
_sepOrDefault := func(...sep) {
|
|
59
|
-
validation.assertJsonSchema(sep, [["or", "string", "char", "null"]])
|
|
59
|
+
validation.assertJsonSchema(sep, [["or", "string", "char", "null"]])
|
|
60
60
|
|
|
61
|
-
if slices.length(sep) == 0 {
|
|
62
|
-
return separator
|
|
63
|
-
}
|
|
61
|
+
if slices.length(sep) == 0 {
|
|
62
|
+
return separator
|
|
63
|
+
}
|
|
64
64
|
|
|
65
|
-
return sep[0]
|
|
65
|
+
return sep[0]
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Splits a path to path components.
|
|
70
|
+
* If it was a file name, the last component will be this name.
|
|
71
|
+
*
|
|
72
|
+
* @param path: string - the path
|
|
73
|
+
* @param sep: string - an optional path separator.
|
|
74
|
+
* @return components: []string - all directories and a file name at the end.
|
|
75
|
+
*/
|
|
76
76
|
split := func(path, ...sep) {
|
|
77
|
-
sep = _sepOrDefault(sep...)
|
|
77
|
+
sep = _sepOrDefault(sep...)
|
|
78
78
|
|
|
79
|
-
return text.split(path, sep)
|
|
79
|
+
return text.split(path, sep)
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Gets all directories with their ancestors from the root.
|
|
84
|
+
* For example, for dir1/dir2/dir3/abc.txt it gives:
|
|
85
|
+
* ["dir1", "dir1/dir2", "dir1/dir2/dir3", "dir1/dir2/dir3/abc.txt"]
|
|
86
|
+
*
|
|
87
|
+
* @param path: string - the path
|
|
88
|
+
* @param separator: string - an optional separator.
|
|
89
|
+
* @return components: []string - all directories and a file name at the end from their root.
|
|
90
|
+
*/
|
|
91
91
|
getBasenameDirs := func(path, ...sep) {
|
|
92
|
-
validation.assertJsonSchema(path, "string")
|
|
93
|
-
sep = _sepOrDefault(sep...)
|
|
92
|
+
validation.assertJsonSchema(path, "string")
|
|
93
|
+
sep = _sepOrDefault(sep...)
|
|
94
94
|
|
|
95
|
-
dirs := split(path, sep)
|
|
95
|
+
dirs := split(path, sep)
|
|
96
96
|
|
|
97
|
-
dirTails := []
|
|
98
|
-
for i := 1; i <= len(dirs); i++ {
|
|
99
|
-
dirTails = append(dirTails, text.join(dirs[:i], sep))
|
|
100
|
-
}
|
|
97
|
+
dirTails := []
|
|
98
|
+
for i := 1; i <= len(dirs); i++ {
|
|
99
|
+
dirTails = append(dirTails, text.join(dirs[:i], sep))
|
|
100
|
+
}
|
|
101
101
|
|
|
102
|
-
return dirTails
|
|
102
|
+
return dirTails
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Gets an extension to the last "." symbol,
|
|
107
|
+
* or, if the name contains ".gz" or any other archive suffix,
|
|
108
|
+
* then till the next from the last "." symbol.
|
|
109
|
+
*
|
|
110
|
+
* @param path: string - a path
|
|
111
|
+
* @return extension: string - the extension without the leading "."
|
|
112
|
+
*/
|
|
113
113
|
getExtension := func(path, ...sep) {
|
|
114
|
-
validation.assertJsonSchema(path, "string")
|
|
115
|
-
ext := ""
|
|
116
|
-
sep = _sepOrDefault(sep...)
|
|
117
|
-
|
|
118
|
-
nPoints := 1
|
|
119
|
-
if text.re_match(`\.(gz|xz|bzip|zstd)$`, path) {
|
|
120
|
-
nPoints = 2
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
for i := len(path) - 1; i >= 0 && path[i] != sep; i-- {
|
|
124
|
-
if path[i] == '.' {
|
|
125
|
-
ext = path[i:]
|
|
126
|
-
nPoints--
|
|
127
|
-
if nPoints == 0 {
|
|
128
|
-
break
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
if len(ext) > 0 {
|
|
134
|
-
ext = ext[1:] // remove leading "."
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return ext
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
114
|
+
validation.assertJsonSchema(path, "string")
|
|
115
|
+
ext := ""
|
|
116
|
+
sep = _sepOrDefault(sep...)
|
|
117
|
+
|
|
118
|
+
nPoints := 1
|
|
119
|
+
if text.re_match(`\.(gz|xz|bzip|zstd)$`, path) {
|
|
120
|
+
nPoints = 2
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
for i := len(path) - 1; i >= 0 && path[i] != sep; i-- {
|
|
124
|
+
if path[i] == '.' {
|
|
125
|
+
ext = path[i:]
|
|
126
|
+
nPoints--
|
|
127
|
+
if nPoints == 0 {
|
|
128
|
+
break
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if len(ext) > 0 {
|
|
134
|
+
ext = ext[1:] // remove leading "."
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return ext
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Checks if the path is correct.
|
|
142
|
+
*
|
|
143
|
+
* @param path: string - a path
|
|
144
|
+
*/
|
|
145
145
|
assertIsValid := func(path) {
|
|
146
|
-
validation.assertJsonSchema(path, "string")
|
|
147
|
-
if text.contains(path, "/") {
|
|
148
|
-
ll.assert(
|
|
149
|
-
text.contains(path, separator),
|
|
150
|
-
"path to a file must be separated by OS's specific path separator. " +
|
|
151
|
-
"Did you forget to use 'path.join' or 'path.regexpJoin'?")
|
|
152
|
-
}
|
|
146
|
+
validation.assertJsonSchema(path, "string")
|
|
147
|
+
if text.contains(path, "/") {
|
|
148
|
+
ll.assert(
|
|
149
|
+
text.contains(path, separator),
|
|
150
|
+
"path to a file must be separated by OS's specific path separator. " +
|
|
151
|
+
"Did you forget to use 'path.join' or 'path.regexpJoin'?")
|
|
152
|
+
}
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
export ll.toStrict({
|
|
156
|
-
join: join,
|
|
157
|
-
regexpJoin: regexpJoin,
|
|
158
|
-
canonize: canonize,
|
|
159
|
-
separator: separator,
|
|
160
|
-
trimPrefix: trimPrefix,
|
|
161
|
-
split: split,
|
|
162
|
-
getBasenameDirs: getBasenameDirs,
|
|
163
|
-
getExtension: getExtension,
|
|
164
|
-
assertIsValid: assertIsValid
|
|
156
|
+
join: join,
|
|
157
|
+
regexpJoin: regexpJoin,
|
|
158
|
+
canonize: canonize,
|
|
159
|
+
separator: separator,
|
|
160
|
+
trimPrefix: trimPrefix,
|
|
161
|
+
split: split,
|
|
162
|
+
getBasenameDirs: getBasenameDirs,
|
|
163
|
+
getExtension: getExtension,
|
|
164
|
+
assertIsValid: assertIsValid
|
|
165
165
|
})
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Contain field names and other constant used in PFrames
|
|
3
|
+
* libraries and templates.
|
|
4
|
+
*/
|
|
5
5
|
|
|
6
6
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Name of the field under which the iteration value like in "map" and "aggregate" is passed
|
|
10
|
+
* to the iteration body template.
|
|
11
|
+
*/
|
|
12
12
|
VALUE_FIELD_NAME := "__value__"
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Name of the field under which the iteration key like in "map" and "aggregate" is passed
|
|
16
|
+
* to the iteration body template.
|
|
17
|
+
*/
|
|
18
18
|
KEY_FIELD_NAME := "__key__"
|
|
19
19
|
|
|
20
20
|
RTYPE_P_FRAME := { Name: "PFrame", Version: "1" }
|
|
@@ -34,20 +34,20 @@ RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED := { Name: P_COLUMN_SUPER_PARTITION
|
|
|
34
34
|
KIND_P_COLUMN := "PColumn"
|
|
35
35
|
|
|
36
36
|
export ll.toStrict({
|
|
37
|
-
KIND_P_COLUMN : KIND_P_COLUMN,
|
|
38
|
-
KEY_FIELD_NAME : KEY_FIELD_NAME,
|
|
39
|
-
VALUE_FIELD_NAME : VALUE_FIELD_NAME,
|
|
40
|
-
P_COLUMN_DATA_TYPE_PREFIX : P_COLUMN_DATA_TYPE_PREFIX,
|
|
41
|
-
P_COLUMN_SUPER_PARTITIONED_DATA_TYPE_PREFIX : P_COLUMN_SUPER_PARTITIONED_DATA_TYPE_PREFIX,
|
|
42
|
-
|
|
43
|
-
RTYPE_P_FRAME : RTYPE_P_FRAME,
|
|
44
|
-
|
|
45
|
-
RTYPE_P_COLUMN_DATA_JSON : RTYPE_P_COLUMN_DATA_JSON,
|
|
46
|
-
RTYPE_P_COLUMN_DATA_BINARY : RTYPE_P_COLUMN_DATA_BINARY,
|
|
47
|
-
RTYPE_P_COLUMN_DATA_RESOURCE_MAP : RTYPE_P_COLUMN_DATA_RESOURCE_MAP,
|
|
48
|
-
RTYPE_P_COLUMN_DATA_RESOURCE_MAP_PARTITIONED : RTYPE_P_COLUMN_DATA_RESOURCE_MAP_PARTITIONED,
|
|
49
|
-
RTYPE_P_COLUMN_DATA_JSON_PARTITIONED : RTYPE_P_COLUMN_DATA_JSON_PARTITIONED,
|
|
50
|
-
RTYPE_P_COLUMN_DATA_BINARY_PARTITIONED : RTYPE_P_COLUMN_DATA_BINARY_PARTITIONED,
|
|
51
|
-
RTYPE_P_COLUMN_DATA_JSON_SUPER_PARTITIONED : RTYPE_P_COLUMN_DATA_JSON_SUPER_PARTITIONED,
|
|
52
|
-
RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED : RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED
|
|
37
|
+
KIND_P_COLUMN : KIND_P_COLUMN,
|
|
38
|
+
KEY_FIELD_NAME : KEY_FIELD_NAME,
|
|
39
|
+
VALUE_FIELD_NAME : VALUE_FIELD_NAME,
|
|
40
|
+
P_COLUMN_DATA_TYPE_PREFIX : P_COLUMN_DATA_TYPE_PREFIX,
|
|
41
|
+
P_COLUMN_SUPER_PARTITIONED_DATA_TYPE_PREFIX : P_COLUMN_SUPER_PARTITIONED_DATA_TYPE_PREFIX,
|
|
42
|
+
|
|
43
|
+
RTYPE_P_FRAME : RTYPE_P_FRAME,
|
|
44
|
+
|
|
45
|
+
RTYPE_P_COLUMN_DATA_JSON : RTYPE_P_COLUMN_DATA_JSON,
|
|
46
|
+
RTYPE_P_COLUMN_DATA_BINARY : RTYPE_P_COLUMN_DATA_BINARY,
|
|
47
|
+
RTYPE_P_COLUMN_DATA_RESOURCE_MAP : RTYPE_P_COLUMN_DATA_RESOURCE_MAP,
|
|
48
|
+
RTYPE_P_COLUMN_DATA_RESOURCE_MAP_PARTITIONED : RTYPE_P_COLUMN_DATA_RESOURCE_MAP_PARTITIONED,
|
|
49
|
+
RTYPE_P_COLUMN_DATA_JSON_PARTITIONED : RTYPE_P_COLUMN_DATA_JSON_PARTITIONED,
|
|
50
|
+
RTYPE_P_COLUMN_DATA_BINARY_PARTITIONED : RTYPE_P_COLUMN_DATA_BINARY_PARTITIONED,
|
|
51
|
+
RTYPE_P_COLUMN_DATA_JSON_SUPER_PARTITIONED : RTYPE_P_COLUMN_DATA_JSON_SUPER_PARTITIONED,
|
|
52
|
+
RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED : RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED
|
|
53
53
|
})
|
|
@@ -5,43 +5,43 @@ file := import("@platforma-sdk/workflow-tengo:file")
|
|
|
5
5
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
6
6
|
assets := import("@platforma-sdk/workflow-tengo:assets")
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
// reference to the template doing nested super-partitioned export
|
|
9
9
|
nestedTpl := assets.importTemplate("@platforma-sdk/workflow-tengo:pframes.export-single-pcolumn")
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
/** Implements core export logic for export-single-pcolumn and export-multiple-pcolumns templates */
|
|
12
12
|
exportPColumnData := func(data) {
|
|
13
|
-
if data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_RESOURCE_MAP_PARTITIONED) ||
|
|
14
|
-
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_JSON_SUPER_PARTITIONED) ||
|
|
15
|
-
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
newData := smart.structBuilder(data.info().Type, data.info().Data)
|
|
19
|
-
for key, partData in data.inputs() {
|
|
20
|
-
newData.createInputField(key).set(render.createEphemeral(nestedTpl, { data: partData }).output("result"))
|
|
21
|
-
}
|
|
22
|
-
return newData.lockAndBuild()
|
|
23
|
-
|
|
24
|
-
} else if data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_RESOURCE_MAP) ||
|
|
25
|
-
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_JSON_PARTITIONED) ||
|
|
26
|
-
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_BINARY_PARTITIONED) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
newData := smart.structBuilder(data.info().Type, data.info().Data)
|
|
30
|
-
for key, partData in data.inputs() {
|
|
31
|
-
newData.createInputField(key).set(file.exportFile(partData))
|
|
32
|
-
}
|
|
33
|
-
return newData.lockAndBuild()
|
|
34
|
-
|
|
35
|
-
} else if data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_JSON) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return data
|
|
39
|
-
|
|
40
|
-
} else {
|
|
41
|
-
ll.panic("unknonw resource type: %v", data.info().Type)
|
|
42
|
-
}
|
|
13
|
+
if data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_RESOURCE_MAP_PARTITIONED) ||
|
|
14
|
+
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_JSON_SUPER_PARTITIONED) ||
|
|
15
|
+
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED) {
|
|
16
|
+
// super-partitioned data
|
|
17
|
+
|
|
18
|
+
newData := smart.structBuilder(data.info().Type, data.info().Data)
|
|
19
|
+
for key, partData in data.inputs() {
|
|
20
|
+
newData.createInputField(key).set(render.createEphemeral(nestedTpl, { data: partData }).output("result"))
|
|
21
|
+
}
|
|
22
|
+
return newData.lockAndBuild()
|
|
23
|
+
|
|
24
|
+
} else if data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_RESOURCE_MAP) ||
|
|
25
|
+
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_JSON_PARTITIONED) ||
|
|
26
|
+
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_BINARY_PARTITIONED) {
|
|
27
|
+
// data directly referencing blob objects
|
|
28
|
+
|
|
29
|
+
newData := smart.structBuilder(data.info().Type, data.info().Data)
|
|
30
|
+
for key, partData in data.inputs() {
|
|
31
|
+
newData.createInputField(key).set(file.exportFile(partData))
|
|
32
|
+
}
|
|
33
|
+
return newData.lockAndBuild()
|
|
34
|
+
|
|
35
|
+
} else if data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_JSON) {
|
|
36
|
+
// data embeds all information and needs no special exporting procedure
|
|
37
|
+
|
|
38
|
+
return data
|
|
39
|
+
|
|
40
|
+
} else {
|
|
41
|
+
ll.panic("unknonw resource type: %v", data.info().Type)
|
|
42
|
+
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
export ll.toStrict({
|
|
46
|
-
exportPColumnData: exportPColumnData
|
|
46
|
+
exportPColumnData: exportPColumnData
|
|
47
47
|
})
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Working with p-frames
|
|
3
|
+
*/
|
|
4
4
|
|
|
5
5
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
6
6
|
oop := import("@platforma-sdk/workflow-tengo:oop")
|
|
@@ -9,57 +9,57 @@ assets := import("@platforma-sdk/workflow-tengo:assets")
|
|
|
9
9
|
render := import("@platforma-sdk/workflow-tengo:render")
|
|
10
10
|
constants := import("@platforma-sdk/workflow-tengo:pframes.constants")
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Given a reference to the p-frame, converts all inner resource files into resources that can be
|
|
14
|
+
* downloaded from the UI side.
|
|
15
|
+
*/
|
|
16
16
|
exportFrame := func(pf) {
|
|
17
|
-
return render.createEphemeral(assets.importTemplate("@platforma-sdk/workflow-tengo:pframes.export-pframe"), { pf: pf }).output("result")
|
|
17
|
+
return render.createEphemeral(assets.importTemplate("@platforma-sdk/workflow-tengo:pframes.export-pframe"), { pf: pf }).output("result")
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Export single PColumn data
|
|
22
|
+
*/
|
|
23
23
|
exportColumnData := func(data) {
|
|
24
|
-
return render.createEphemeral(assets.importTemplate("@platforma-sdk/workflow-tengo:pframes.export-single-pcolumn"), { data: data }).output("result")
|
|
24
|
+
return render.createEphemeral(assets.importTemplate("@platforma-sdk/workflow-tengo:pframes.export-single-pcolumn"), { data: data }).output("result")
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Creates a builder for p-frame resource.
|
|
29
|
+
*/
|
|
30
30
|
pFrameBuilder := func() {
|
|
31
|
-
r := smart.structBuilder(constants.RTYPE_P_FRAME)
|
|
32
|
-
|
|
33
|
-
self := undefined
|
|
34
|
-
self = ll.toStrict(oop.inherit(r, {
|
|
35
|
-
|
|
36
|
-
add: func(column, spec, data) {
|
|
37
|
-
if (!is_undefined(spec)) {
|
|
38
|
-
r.createInputField(column + ".spec").setRefOrJson(spec)
|
|
39
|
-
}
|
|
40
|
-
if (!is_undefined(data)) {
|
|
41
|
-
r.createInputField(column + ".data").setRefOrJson(data)
|
|
31
|
+
r := smart.structBuilder(constants.RTYPE_P_FRAME)
|
|
32
|
+
|
|
33
|
+
self := undefined
|
|
34
|
+
self = ll.toStrict(oop.inherit(r, {
|
|
35
|
+
|
|
36
|
+
add: func(column, spec, data) {
|
|
37
|
+
if (!is_undefined(spec)) {
|
|
38
|
+
r.createInputField(column + ".spec").setRefOrJson(spec)
|
|
39
|
+
}
|
|
40
|
+
if (!is_undefined(data)) {
|
|
41
|
+
r.createInputField(column + ".data").setRefOrJson(data)
|
|
42
|
+
}
|
|
43
|
+
return self
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
build: func() {
|
|
47
|
+
return r.lockAndBuild()
|
|
48
|
+
}
|
|
49
|
+
}))
|
|
50
|
+
return self
|
|
42
51
|
}
|
|
43
|
-
return self
|
|
44
|
-
},
|
|
45
|
-
|
|
46
|
-
build: func() {
|
|
47
|
-
return r.lockAndBuild()
|
|
48
|
-
}
|
|
49
|
-
}))
|
|
50
|
-
return self
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Creates a builder for a resource map p-column's data.
|
|
55
|
+
*/
|
|
56
56
|
pColumnResourceMapDataBuilder := func(keyLength) {
|
|
57
|
-
ll.panic("pframes.pColumnResourceMapDataBuilder is not supported any more; use pcolumn.resourceMapBuilder")
|
|
57
|
+
ll.panic("pframes.pColumnResourceMapDataBuilder is not supported any more; use pcolumn.resourceMapBuilder")
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
export ll.toStrict({
|
|
61
|
-
exportFrame: exportFrame,
|
|
62
|
-
pFrameBuilder: pFrameBuilder,
|
|
63
|
-
exportColumnData: exportColumnData,
|
|
64
|
-
pColumnResourceMapDataBuilder: pColumnResourceMapDataBuilder
|
|
61
|
+
exportFrame: exportFrame,
|
|
62
|
+
pFrameBuilder: pFrameBuilder,
|
|
63
|
+
exportColumnData: exportColumnData,
|
|
64
|
+
pColumnResourceMapDataBuilder: pColumnResourceMapDataBuilder
|
|
65
65
|
})
|