@platforma-sdk/workflow-tengo 2.8.1 → 2.8.2

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 (59) hide show
  1. package/dist/tengo/lib/assets.lib.tengo +76 -82
  2. package/dist/tengo/lib/constants.lib.tengo +28 -31
  3. package/dist/tengo/lib/exec.R.internal.lib.tengo +14 -14
  4. package/dist/tengo/lib/exec.R.lib.tengo +158 -167
  5. package/dist/tengo/lib/exec.internal.lib.tengo +222 -234
  6. package/dist/tengo/lib/exec.lib.tengo +647 -714
  7. package/dist/tengo/lib/exec.package.lib.tengo +229 -238
  8. package/dist/tengo/lib/exec.python.internal.lib.tengo +5 -6
  9. package/dist/tengo/lib/exec.python.lib.tengo +138 -146
  10. package/dist/tengo/lib/exec.runcmd.lib.tengo +234 -253
  11. package/dist/tengo/lib/exec.runenv.lib.tengo +88 -92
  12. package/dist/tengo/lib/exec.stream.lib.tengo +36 -40
  13. package/dist/tengo/lib/file.internal.lib.tengo +70 -77
  14. package/dist/tengo/lib/file.lib.tengo +54 -57
  15. package/dist/tengo/lib/ll.lib.tengo +217 -241
  16. package/dist/tengo/lib/maps.lib.tengo +98 -106
  17. package/dist/tengo/lib/objects.lib.tengo +11 -13
  18. package/dist/tengo/lib/oop.lib.tengo +16 -19
  19. package/dist/tengo/lib/path.lib.tengo +116 -125
  20. package/dist/tengo/lib/pframes.constants.lib.tengo +25 -28
  21. package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +28 -33
  22. package/dist/tengo/lib/pframes.lib.tengo +38 -43
  23. package/dist/tengo/lib/pframes.ll.lib.tengo +70 -73
  24. package/dist/tengo/lib/pframes.pcolumn.lib.tengo +45 -51
  25. package/dist/tengo/lib/pframes.spec.lib.tengo +70 -96
  26. package/dist/tengo/lib/pframes.util.lib.tengo +154 -289
  27. package/dist/tengo/lib/pframes.xsv.lib.tengo +260 -273
  28. package/dist/tengo/lib/render.lib.tengo +65 -76
  29. package/dist/tengo/lib/sets.lib.tengo +61 -68
  30. package/dist/tengo/lib/slices.lib.tengo +169 -180
  31. package/dist/tengo/lib/smart.lib.tengo +956 -1069
  32. package/dist/tengo/lib/test.lib.tengo +129 -161
  33. package/dist/tengo/lib/tpl.lib.tengo +448 -516
  34. package/dist/tengo/lib/tpl.state-await.lib.tengo +226 -241
  35. package/dist/tengo/lib/tpl.util.lib.tengo +4 -9
  36. package/dist/tengo/lib/validation.lib.tengo +334 -379
  37. package/dist/tengo/lib/workdir.lib.tengo +309 -332
  38. package/dist/tengo/lib/workdir.proc.lib.tengo +126 -144
  39. package/dist/tengo/lib/workdir.save.lib.tengo +113 -130
  40. package/dist/tengo/lib/workflow.bobject.lib.tengo +21 -26
  41. package/dist/tengo/lib/workflow.bquery.lib.tengo +140 -166
  42. package/dist/tengo/lib/workflow.constants.lib.tengo +1 -2
  43. package/dist/tengo/lib/workflow.context.lib.tengo +27 -32
  44. package/dist/tengo/lib/workflow.lib.tengo +167 -207
  45. package/dist/tengo/tpl/exec.R.create-renv.plj.gz +0 -0
  46. package/dist/tengo/tpl/exec.exec.plj.gz +0 -0
  47. package/dist/tengo/tpl/exec.python.create-venv.plj.gz +0 -0
  48. package/dist/tengo/tpl/exec.python.install-deps.plj.gz +0 -0
  49. package/dist/tengo/tpl/pframes.aggregate.plj.gz +0 -0
  50. package/dist/tengo/tpl/pframes.export-multiple-pcolumns.plj.gz +0 -0
  51. package/dist/tengo/tpl/pframes.export-pframe.plj.gz +0 -0
  52. package/dist/tengo/tpl/pframes.export-single-pcolumn.plj.gz +0 -0
  53. package/dist/tengo/tpl/pframes.import-dir.plj.gz +0 -0
  54. package/dist/tengo/tpl/pframes.map-pframe.plj.gz +0 -0
  55. package/dist/tengo/tpl/pframes.xsv-export-pframe.plj.gz +0 -0
  56. package/dist/tengo/tpl/pframes.xsv-import-map.plj.gz +0 -0
  57. package/dist/tengo/tpl/workdir.save.plj.gz +0 -0
  58. package/dist/tengo/tpl/workflow.build-ctx.plj.gz +0 -0
  59. package/package.json +5 -5
@@ -1,9 +1,8 @@
1
- /**
2
- * Internal 'exec' module library.
3
- *
4
- * NOT INTENDEND FOR USE OUTSIDE 'exec' MODULE.
5
- * May completely change API from release to release.
6
- */
1
+
2
+
3
+
4
+
5
+
7
6
 
8
7
  ll := import("@platforma-sdk/workflow-tengo:ll")
9
8
  json := import("json")
@@ -17,318 +16,307 @@ runcmd := import("@platforma-sdk/workflow-tengo:exec.runcmd")
17
16
  python := import("@platforma-sdk/workflow-tengo:exec.python")
18
17
  R := import("@platforma-sdk/workflow-tengo:exec.R")
19
18
 
20
- // Variables, substituted in command arguments and environment variable values
21
19
  _ARG_VAR_PKG := "{pkg}" // abs path to software package
22
20
  _ARG_VAR_JAVA := "{java}" // abs path to 'java' run environment
23
21
  _ARG_VAR_PYTHON := "{python}" // abs path to 'python' run environment
24
22
  _ARG_VAR_R := "{R}" // abs path to 'R' run environment runtime
25
23
  _ARG_VAR_R_VENV := "{rVenv}" // abs path to 'R' portable virtual environment
26
24
 
27
- /**
28
- * Create new argument marking it as 'with' or 'without' variables inside.
29
- * The outcome of 'hasVariables' flag value is wether the value will be treated
30
- * by Platforma Backend on server side before being given to the actual command.
31
- */
25
+
26
+
27
+
28
+
32
29
  _newArg := func(hasVariables, value) {
33
- return ll.toStrict({
34
- hasVars: hasVariables,
35
- value: value
36
- })
30
+ return ll.toStrict({
31
+ hasVars: hasVariables,
32
+ value: value
33
+ })
37
34
  }
38
35
 
39
36
  _newRefVar := func(varName, refName, reference) {
40
- return ll.toStrict({
41
- varName: varName,
42
- refName: refName,
43
- reference: reference
44
- })
37
+ return ll.toStrict({
38
+ varName: varName,
39
+ refName: refName,
40
+ reference: reference
41
+ })
45
42
  }
46
43
 
47
44
  _installSoftware := func(registry, pkgName) {
48
- archive := pkg.get(registry, pkgName).archive()
49
- return pkg.install(archive).package()
45
+ archive := pkg.get(registry, pkgName).archive()
46
+ return pkg.install(archive).package()
50
47
  }
51
48
 
52
49
  _directCallOptions := func(runOptions) {
53
- cmd := _newArg(false, runOptions.cmd)
54
- args := []
55
- envs := {}
50
+ cmd := _newArg(false, runOptions.cmd)
51
+ args := []
52
+ envs := {}
56
53
 
57
- for name, arg in runOptions.args {
58
- args = append(args, _newArg(false, arg))
59
- }
54
+ for name, arg in runOptions.args {
55
+ args = append(args, _newArg(false, arg))
56
+ }
60
57
 
61
- for name, val in runOptions.envs {
62
- envs[name] = _newArg(false, val)
63
- }
58
+ for name, val in runOptions.envs {
59
+ envs[name] = _newArg(false, val)
60
+ }
64
61
 
65
- return oop.inherit(runOptions, {
66
- variables: [],
67
- customPaths: [],
68
- cmd: cmd,
69
- args: args,
70
- envs: envs
71
- })
62
+ return oop.inherit(runOptions, {
63
+ variables: [],
64
+ customPaths: [],
65
+ cmd: cmd,
66
+ args: args,
67
+ envs: envs
68
+ })
72
69
  }
73
70
 
74
71
  _loadJavaRunEnvironment := func(operationMode, descriptor) {
75
- javaPkg := _installSoftware(descriptor.runEnv.registry, descriptor.runEnv.package)
76
- javaRefVar := _newRefVar(_ARG_VAR_JAVA, descriptor.runEnv.name, javaPkg)
72
+ javaPkg := _installSoftware(descriptor.runEnv.registry, descriptor.runEnv.package)
73
+ javaRefVar := _newRefVar(_ARG_VAR_JAVA, descriptor.runEnv.name, javaPkg)
77
74
 
78
- return ll.toStrict({
79
- runEnvType: "java",
75
+ return ll.toStrict({
76
+ runEnvType: "java",
80
77
 
81
- variables: [ javaRefVar ],
82
- customPaths: [ _newArg(true, path.join(_ARG_VAR_JAVA, descriptor.runEnv.binDir)) ],
83
- envs: {}
84
- })
78
+ variables: [ javaRefVar ],
79
+ customPaths: [ _newArg(true, path.join(_ARG_VAR_JAVA, descriptor.runEnv.binDir)) ],
80
+ envs: {}
81
+ })
85
82
  }
86
83
 
87
84
  _loadPythonRunEnvironment := func(operationMode, descriptor, softName, softPkg) {
88
- venvBuilder := python.venvBuilder().
89
- software(softPkg).
90
- runEnvDescriptor(descriptor.runEnv).
91
- dependencies(descriptor.dependencies)
85
+ venvBuilder := python.venvBuilder().
86
+ software(softPkg).
87
+ runEnvDescriptor(descriptor.runEnv).
88
+ dependencies(descriptor.dependencies)
92
89
 
93
- if !is_undefined(descriptor.toolset) && descriptor.toolset != "" {
94
- venvBuilder.useToolset(descriptor.toolset)
95
- }
90
+ if !is_undefined(descriptor.toolset) && descriptor.toolset != "" {
91
+ venvBuilder.useToolset(descriptor.toolset)
92
+ }
96
93
 
97
- venv := venvBuilder.
98
- cacheDays(7).
99
- build().
100
- venv()
94
+ venv := venvBuilder.
95
+ cacheDays(7).
96
+ build().
97
+ venv()
101
98
 
102
- venvRoot := path.join(_ARG_VAR_PYTHON, "venv")
103
- venvRefKey := softName + "/venv"
99
+ venvRoot := path.join(_ARG_VAR_PYTHON, "venv")
100
+ venvRefKey := softName + "/venv"
104
101
 
105
- pythonRefVar := _newRefVar(_ARG_VAR_PYTHON, venvRefKey, venv)
102
+ pythonRefVar := _newRefVar(_ARG_VAR_PYTHON, venvRefKey, venv)
106
103
 
107
- return ll.toStrict({
108
- runEnvType: "python",
104
+ return ll.toStrict({
105
+ runEnvType: "python",
109
106
 
110
- variables: [ pythonRefVar ],
111
- customPaths: [ _newArg(true, path.join(venvRoot, "bin")) ],
112
- envs: {
113
- "VIRTUAL_ENV": _newArg(true, venvRoot)
114
- }
115
- })
107
+ variables: [ pythonRefVar ],
108
+ customPaths: [ _newArg(true, path.join(venvRoot, "bin")) ],
109
+ envs: {
110
+ "VIRTUAL_ENV": _newArg(true, venvRoot)
111
+ }
112
+ })
116
113
  }
117
114
 
118
115
  _loadRRunEnvironment := func(operationMode, descriptor, softName, softPkg) {
119
- renvBuilder := R.rVenvBuilder().
120
- operationMode(operationMode).
121
- software(softPkg).
122
- runEnvDescriptor(descriptor.runEnv).
123
- dependencies(descriptor.dependencies)
124
-
125
- if !is_undefined(descriptor.toolset) && descriptor.toolset != "" {
126
- renvBuilder.useToolset(descriptor.toolset)
127
- }
116
+ renvBuilder := R.rVenvBuilder().
117
+ operationMode(operationMode).
118
+ software(softPkg).
119
+ runEnvDescriptor(descriptor.runEnv).
120
+ dependencies(descriptor.dependencies)
121
+
122
+ if !is_undefined(descriptor.toolset) && descriptor.toolset != "" {
123
+ renvBuilder.useToolset(descriptor.toolset)
124
+ }
128
125
 
129
- rRuntime := renvBuilder.
130
- cacheDays(7).
131
- build()
126
+ rRuntime := renvBuilder.
127
+ cacheDays(7).
128
+ build()
132
129
 
133
- rEnv := rRuntime.venv()
134
- rPackage := rRuntime.R()
130
+ rEnv := rRuntime.venv()
131
+ rPackage := rRuntime.R()
135
132
 
136
- rBinDir := path.join(_ARG_VAR_R, descriptor.runEnv.binDir)
133
+ rBinDir := path.join(_ARG_VAR_R, descriptor.runEnv.binDir)
137
134
 
138
- rRefKey := softName + "/R-runtime"
139
- rRefVar := _newRefVar(_ARG_VAR_R, rRefKey, rPackage)
135
+ rRefKey := softName + "/R-runtime"
136
+ rRefVar := _newRefVar(_ARG_VAR_R, rRefKey, rPackage)
140
137
 
141
- rEnvRefKey := softName + "/R-virtual-env"
142
- rEnvRefVar := _newRefVar(_ARG_VAR_R_VENV, rEnvRefKey, rEnv)
138
+ rEnvRefKey := softName + "/R-virtual-env"
139
+ rEnvRefVar := _newRefVar(_ARG_VAR_R_VENV, rEnvRefKey, rEnv)
143
140
 
144
- return ll.toStrict({
145
- runEnvType: "R",
141
+ return ll.toStrict({
142
+ runEnvType: "R",
146
143
 
147
- variables: [ rRefVar, rEnvRefVar ],
148
- customPaths: [ _newArg(true, rBinDir) ],
149
- envs: {
150
- "R_HOME_DIR": _newArg(true, _ARG_VAR_R),
151
- "RENV_PATHS_ROOT": _newArg(true, path.join(_ARG_VAR_R, "renv-root")),
152
- "RENV_PATHS_RENV": _newArg(true, path.join(_ARG_VAR_R_VENV, "renv")),
153
- "RENV_PATHS_LOCKFILE": _newArg(true, path.join(_ARG_VAR_PKG, descriptor.dependencies.lockFile)),
154
- "RENV_CONFIG_AUTO_SNAPSHOT": _newArg(false, "FALSE"),
155
- "RENV_CONFIG_SYNCHRONIZED_CHECK": _newArg(false, "FALSE")
156
- }
157
- })
144
+ variables: [ rRefVar, rEnvRefVar ],
145
+ customPaths: [ _newArg(true, rBinDir) ],
146
+ envs: {
147
+ "R_HOME_DIR": _newArg(true, _ARG_VAR_R),
148
+ "RENV_PATHS_ROOT": _newArg(true, path.join(_ARG_VAR_R, "renv-root")),
149
+ "RENV_PATHS_RENV": _newArg(true, path.join(_ARG_VAR_R_VENV, "renv")),
150
+ "RENV_PATHS_LOCKFILE": _newArg(true, path.join(_ARG_VAR_PKG, descriptor.dependencies.lockFile)),
151
+ "RENV_CONFIG_AUTO_SNAPSHOT": _newArg(false, "FALSE"),
152
+ "RENV_CONFIG_SYNCHRONIZED_CHECK": _newArg(false, "FALSE")
153
+ }
154
+ })
158
155
  }
159
156
 
160
157
 
161
158
  _loadRunEnvironment := func(operationMode, descriptor, softName, softPackage) {
162
- if descriptor.runEnv.type == "java" {
163
- return _loadJavaRunEnvironment(operationMode, descriptor)
164
- }
165
- if descriptor.runEnv.type == "python" {
166
- return _loadPythonRunEnvironment(operationMode, descriptor, softName, softPackage)
167
- }
168
- if descriptor.runEnv.type == "R" {
169
- return _loadRRunEnvironment(operationMode, descriptor, softName, softPackage)
170
- }
171
-
172
- ll.panic("run environment type %q is not currently supported by workflow-sdk", descriptor.runEnv.type)
173
- }
174
-
175
- /**
176
- * @param operationMode: 'remote' | 'dev-local'
177
- */
159
+ if descriptor.runEnv.type == "java" {
160
+ return _loadJavaRunEnvironment(operationMode, descriptor)
161
+ }
162
+ if descriptor.runEnv.type == "python" {
163
+ return _loadPythonRunEnvironment(operationMode, descriptor, softName, softPackage)
164
+ }
165
+ if descriptor.runEnv.type == "R" {
166
+ return _loadRRunEnvironment(operationMode, descriptor, softName, softPackage)
167
+ }
168
+
169
+ ll.panic("run environment type %q is not currently supported by workflow-sdk", descriptor.runEnv.type)
170
+ }
171
+
172
+
173
+
178
174
  _binPackageCallOptions := func(operationMode, runOptions, variables, descriptor, softPackage) {
179
- customPaths := []
180
- envs := ll.toStrict({})
181
- args := []
182
- runEnvType := "binary"
183
-
184
- // Real command should be:
185
- // [<runEnv bin>] [<runEnv options>] [<entrypoint bin>] [<entrypoint options>] <cmd> <args>
186
- if (maps.containsKey(descriptor, "runEnv")) {
187
- runEnvInfo := _loadRunEnvironment(operationMode, descriptor, runOptions.software.name, softPackage)
188
-
189
- runEnvType = runEnvInfo.runEnvType
190
- if len(runEnvInfo.variables) > 0 {
191
- variables = append(variables, runEnvInfo.variables...)
192
- }
193
- if len(runEnvInfo.customPaths) > 0 {
194
- customPaths = append(customPaths, runEnvInfo.customPaths...)
195
- }
196
- if len(runEnvInfo.envs) > 0 {
197
- for n, v in runEnvInfo.envs {
198
- envs[n] = v
199
- }
200
- }
201
- }
202
-
203
- ll.assert(len(descriptor.cmd) != 0, "cannot render final command for software: empty 'cmd' in software descritor")
204
-
205
- cmd := _newArg(true, descriptor.cmd[0])
206
-
207
- for arg in splice(descriptor.cmd, 1) {
208
- args = append(args, _newArg(true, arg))
209
- }
210
- for arg in runOptions.args {
211
- args = append(args, _newArg(false, arg))
212
- }
213
-
214
- for name, val in runOptions.envs {
215
- envs[name] = _newArg(false, val)
216
- }
217
-
218
- return oop.inherit(runOptions, {
219
- runEnvType: runEnvType,
220
- variables: variables,
221
- customPaths: customPaths,
222
- cmd: cmd,
223
- args: args,
224
- envs: envs
225
- })
175
+ customPaths := []
176
+ envs := ll.toStrict({})
177
+ args := []
178
+ runEnvType := "binary"
179
+
180
+ if (maps.containsKey(descriptor, "runEnv")) {
181
+ runEnvInfo := _loadRunEnvironment(operationMode, descriptor, runOptions.software.name, softPackage)
182
+
183
+ runEnvType = runEnvInfo.runEnvType
184
+ if len(runEnvInfo.variables) > 0 {
185
+ variables = append(variables, runEnvInfo.variables...)
186
+ }
187
+ if len(runEnvInfo.customPaths) > 0 {
188
+ customPaths = append(customPaths, runEnvInfo.customPaths...)
189
+ }
190
+ if len(runEnvInfo.envs) > 0 {
191
+ for n, v in runEnvInfo.envs {
192
+ envs[n] = v
193
+ }
194
+ }
226
195
  }
227
196
 
228
- _devLocalPackageCallOptions := func(runOptions) {
229
- software := runOptions.software
230
- localDescriptor := software.descriptor.local
197
+ ll.assert(len(descriptor.cmd) != 0, "cannot render final command for software: empty 'cmd' in software descritor")
231
198
 
232
- softPackage := pkg.use({
233
- hash: localDescriptor.hash,
234
- path: localDescriptor.path,
235
- descriptor: json.encode(ll.fromStrict(software.descriptor)),
236
- origin: {
237
- registry: "dev-local",
238
- url: "file://" + localDescriptor.path,
239
- packageName: software.descriptor.name
240
- }
241
- }).package()
199
+ cmd := _newArg(true, descriptor.cmd[0])
242
200
 
243
- variables := [ _newRefVar(_ARG_VAR_PKG, software.name, softPackage) ]
201
+ for arg in splice(descriptor.cmd, 1) {
202
+ args = append(args, _newArg(true, arg))
203
+ }
204
+ for arg in runOptions.args {
205
+ args = append(args, _newArg(false, arg))
206
+ }
207
+
208
+ for name, val in runOptions.envs {
209
+ envs[name] = _newArg(false, val)
210
+ }
244
211
 
245
- return _binPackageCallOptions("dev-local", runOptions, variables, localDescriptor, softPackage)
212
+ return oop.inherit(runOptions, {
213
+ runEnvType: runEnvType,
214
+ variables: variables,
215
+ customPaths: customPaths,
216
+ cmd: cmd,
217
+ args: args,
218
+ envs: envs
219
+ })
220
+ }
221
+
222
+ _devLocalPackageCallOptions := func(runOptions) {
223
+ software := runOptions.software
224
+ localDescriptor := software.descriptor.local
225
+
226
+ softPackage := pkg.use({
227
+ hash: localDescriptor.hash,
228
+ path: localDescriptor.path,
229
+ descriptor: json.encode(ll.fromStrict(software.descriptor)),
230
+ origin: {
231
+ registry: "dev-local",
232
+ url: "file://" + localDescriptor.path,
233
+ packageName: software.descriptor.name
234
+ }
235
+ }).package()
236
+
237
+ variables := [ _newRefVar(_ARG_VAR_PKG, software.name, softPackage) ]
238
+
239
+ return _binPackageCallOptions("dev-local", runOptions, variables, localDescriptor, softPackage)
246
240
  }
247
241
 
248
242
  _remotePackageCallOptions := func(runOptions) {
249
- software := runOptions.software
250
- binaryDescriptor := software.descriptor.binary
251
- softPackage := _installSoftware(binaryDescriptor.registry, binaryDescriptor.package)
243
+ software := runOptions.software
244
+ binaryDescriptor := software.descriptor.binary
245
+ softPackage := _installSoftware(binaryDescriptor.registry, binaryDescriptor.package)
252
246
 
253
- variables := [ _newRefVar(_ARG_VAR_PKG, software.name, softPackage) ]
247
+ variables := [ _newRefVar(_ARG_VAR_PKG, software.name, softPackage) ]
254
248
 
255
- return _binPackageCallOptions("remote", runOptions, variables, binaryDescriptor, softPackage)
249
+ return _binPackageCallOptions("remote", runOptions, variables, binaryDescriptor, softPackage)
256
250
  }
257
251
 
258
252
  binaryRunOptions := func(runOptions) {
259
- if (is_undefined(ll.fromStrict(runOptions).software)) {
260
- //
261
- // Simple local command run, no software packages involved (backward compatibility)
262
- //
263
- return _directCallOptions(runOptions)
264
- }
253
+ if (is_undefined(ll.fromStrict(runOptions).software)) {
254
+ return _directCallOptions(runOptions)
255
+ }
265
256
 
266
- software := runOptions.software
267
- descriptor := software.descriptor
257
+ software := runOptions.software
258
+ descriptor := software.descriptor
268
259
 
269
- if (maps.containsKey(descriptor, "local")) {
270
- return _devLocalPackageCallOptions(runOptions)
271
- }
260
+ if (maps.containsKey(descriptor, "local")) {
261
+ return _devLocalPackageCallOptions(runOptions)
262
+ }
272
263
 
273
- if (maps.containsKey(descriptor, "binary")) {
274
- return _remotePackageCallOptions(runOptions)
275
- }
264
+ if (maps.containsKey(descriptor, "binary")) {
265
+ return _remotePackageCallOptions(runOptions)
266
+ }
276
267
 
277
- ll.panic("Unable to run software %s v%s: 'binary' execution mode is not enabled in software descriptor", software.name, software.version)
268
+ ll.panic("Unable to run software %s v%s: 'binary' execution mode is not enabled in software descriptor", software.name, software.version)
278
269
  }
279
270
 
280
271
  prepareCommandRun := func(wd, opts) {
281
- runBuilder := runcmd.builder(wd)
272
+ runBuilder := runcmd.builder(wd)
282
273
 
283
- // Make installed packages to be available for the command run
284
- for varInfo in opts.variables {
285
- runBuilder.ref(varInfo.refName, varInfo.reference)
286
- runBuilder.substitutionRule(varInfo.varName, varInfo.refName)
287
- }
274
+ for varInfo in opts.variables {
275
+ runBuilder.ref(varInfo.refName, varInfo.reference)
276
+ runBuilder.substitutionRule(varInfo.varName, varInfo.refName)
277
+ }
288
278
 
289
- // Patch command's PATH env variable
290
- for p in opts.customPaths {
291
- runBuilder.addToPath(p.value, p.hasVars)
292
- }
279
+ for p in opts.customPaths {
280
+ runBuilder.addToPath(p.value, p.hasVars)
281
+ }
293
282
 
294
- // Configure environment variables required for correct command run environment setup
295
- for name, value in opts.envs {
296
- if value.hasVars {
297
- runBuilder.envVar(name, value.value)
298
- } else {
299
- runBuilder.env(name, value.value)
300
- }
301
- }
283
+ for name, value in opts.envs {
284
+ if value.hasVars {
285
+ runBuilder.envVar(name, value.value)
286
+ } else {
287
+ runBuilder.env(name, value.value)
288
+ }
289
+ }
302
290
 
303
- return runBuilder
291
+ return runBuilder
304
292
  }
305
293
 
306
294
  _activateRenv := func(wd, opts) {
307
- activateRenv := prepareCommandRun(wd, opts)
308
- activateRenv.
309
- cmd("R").
310
- arg("-e").arg("renv::activate()")
295
+ activateRenv := prepareCommandRun(wd, opts)
296
+ activateRenv.
297
+ cmd("R").
298
+ arg("-e").arg("renv::activate()")
311
299
 
312
- activateRenvRun := activateRenv.build()
300
+ activateRenvRun := activateRenv.build()
313
301
 
314
- return activateRenvRun
302
+ return activateRenvRun
315
303
  }
316
304
 
317
305
  prepareWDForRunEnvironment := func(wd, opts) {
318
- if (!maps.containsKey(opts, "runEnvType")) {
319
- return wd
320
- }
306
+ if (!maps.containsKey(opts, "runEnvType")) {
307
+ return wd
308
+ }
321
309
 
322
- if (opts.runEnvType == "R") {
323
- return _activateRenv(wd, opts).workdir
324
- }
310
+ if (opts.runEnvType == "R") {
311
+ return _activateRenv(wd, opts).workdir
312
+ }
325
313
 
326
- return wd
314
+ return wd
327
315
  }
328
316
 
329
317
  export {
330
- binaryRunOptions : binaryRunOptions,
318
+ binaryRunOptions : binaryRunOptions,
331
319
 
332
- prepareWDForRunEnvironment : prepareWDForRunEnvironment,
333
- prepareCommandRun : prepareCommandRun
320
+ prepareWDForRunEnvironment : prepareWDForRunEnvironment,
321
+ prepareCommandRun : prepareCommandRun
334
322
  }