@platforma-sdk/workflow-tengo 2.9.10 → 2.10.0

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.
@@ -1,4 +1,6 @@
1
1
  ll := import("@platforma-sdk/workflow-tengo:ll")
2
+ feats := import("@platforma-sdk/workflow-tengo:feats")
3
+
2
4
  validation := import("@platforma-sdk/workflow-tengo:validation")
3
5
  runcmd := import("@platforma-sdk/workflow-tengo:exec.runcmd")
4
6
  path := import("@platforma-sdk/workflow-tengo:path")
@@ -16,8 +18,8 @@ rVenvInputSchema := {
16
18
  }
17
19
 
18
20
  runRBuilder := func(operationMode, wd, rPackage, rDescriptor) {
19
- t := desc.canBackendUseExpressions() ? constants.ARG_TYPE_EXPRESSION : constants.ARG_TYPE_VAR
20
- rule := desc.canBackendUseExpressions() ? "R" : "{R}"
21
+ t := feats.commandExpressions ? constants.ARG_TYPE_EXPRESSION : constants.ARG_TYPE_VAR
22
+ rule := feats.commandExpressions ? "R" : "{R}"
21
23
 
22
24
  builder := runcmd.builder(wd).
23
25
  ref("r-run-environment", rPackage).
@@ -2,7 +2,6 @@
2
2
  * The scheme is here:
3
3
  * https://github.com/milaboratory/platforma/blob/main/tools/package-builder/src/core/renderer.ts#L161 */
4
4
 
5
- ll := import("@platforma-sdk/workflow-tengo:ll")
6
5
 
7
6
  runEnvScheme := {
8
7
  registry: "string",
@@ -39,16 +38,10 @@ scheme := {
39
38
  "local,?": localScheme
40
39
  }
41
40
 
42
- /** True if Platforma Backend supports expression refs. */
43
- canBackendUseExpressions := func() {
44
- return ll.apiVersion() >= 2
45
- }
46
-
47
41
  export {
48
42
  runEnvScheme: runEnvScheme,
49
43
  binaryScheme: binaryScheme,
50
44
  assetScheme: assetScheme,
51
45
  localScheme: localScheme,
52
- scheme: scheme,
53
- canBackendUseExpressions: canBackendUseExpressions
46
+ scheme: scheme
54
47
  }
@@ -6,6 +6,8 @@
6
6
  */
7
7
 
8
8
  ll := import("@platforma-sdk/workflow-tengo:ll")
9
+ feats := import("@platforma-sdk/workflow-tengo:feats")
10
+
9
11
  json := import("json")
10
12
  times := import("times")
11
13
  text := import("text")
@@ -51,7 +53,7 @@ _newArg := func(isString, value) {
51
53
  if isString {
52
54
  return _newTypedArg(constants.ARG_TYPE_STRING, value)
53
55
  }
54
- if desc.canBackendUseExpressions() {
56
+ if feats.commandExpressions {
55
57
  return _newTypedArg(constants.ARG_TYPE_EXPRESSION, value)
56
58
  }
57
59
  return _newTypedArg(constants.ARG_TYPE_VAR, value)
@@ -59,7 +61,7 @@ _newArg := func(isString, value) {
59
61
 
60
62
  _newRefVar := func(varName, refName, reference) {
61
63
  // deprecated, remove on 15 Mar 2025
62
- if !desc.canBackendUseExpressions() {
64
+ if !feats.commandExpressions {
63
65
  return ll.toStrict({
64
66
  varName: "{" + varName + "}",
65
67
  refName: refName,
@@ -3,6 +3,8 @@
3
3
  */
4
4
 
5
5
  ll := import("@platforma-sdk/workflow-tengo:ll")
6
+ feats := import("@platforma-sdk/workflow-tengo:feats")
7
+
6
8
  assets := import("@platforma-sdk/workflow-tengo:assets")
7
9
  smart := import("@platforma-sdk/workflow-tengo:smart")
8
10
  times := import("times")
@@ -15,7 +17,6 @@ enum := import("enum")
15
17
  oop := import("@platforma-sdk/workflow-tengo:oop")
16
18
  validation := import("@platforma-sdk/workflow-tengo:validation")
17
19
  constants := import("@platforma-sdk/workflow-tengo:constants")
18
- desc := import("@platforma-sdk/workflow-tengo:exec.descriptor")
19
20
  monetization := import("@platforma-sdk/workflow-tengo:exec.monetization")
20
21
  execConstants := import("@platforma-sdk/workflow-tengo:exec.constants")
21
22
 
@@ -161,7 +162,7 @@ builder := func() {
161
162
  ll.assert(is_string(arg), "exec.argWithVar(): argument with var must be a string, got: %v", arg)
162
163
 
163
164
  // deprecated: remove ARG_TYPE_VAR and this check after 15 Mar 2025
164
- t := desc.canBackendUseExpressions() ? execConstants.ARG_TYPE_EXPRESSION : execConstants.ARG_TYPE_VAR
165
+ t := feats.commandExpressions ? execConstants.ARG_TYPE_EXPRESSION : execConstants.ARG_TYPE_VAR
165
166
  argsTyped = append(argsTyped, {
166
167
  type: t,
167
168
  value: arg
@@ -197,7 +198,7 @@ builder := func() {
197
198
  validation.assertJsonSchema([name, value], ["string"])
198
199
 
199
200
  // deprecated: remove ARG_TYPE_VAR and this check after 15 Mar 2025
200
- t := desc.canBackendUseExpressions() ? execConstants.ARG_TYPE_EXPRESSION : execConstants.ARG_TYPE_VAR
201
+ t := feats.commandExpressions ? execConstants.ARG_TYPE_EXPRESSION : execConstants.ARG_TYPE_VAR
201
202
  envsTyped[name] = {
202
203
  type: t,
203
204
  value: value
@@ -838,6 +839,5 @@ builder := func() {
838
839
  }
839
840
 
840
841
  export ll.toStrict({
841
- builder: builder,
842
- canBackendUseExpressions: desc.canBackendUseExpressions
842
+ builder: builder
843
843
  })
@@ -1,6 +1,8 @@
1
1
  /** The library provides all things to work with a monetization. */
2
2
 
3
3
  ll := import("@platforma-sdk/workflow-tengo:ll")
4
+ feats := import("@platforma-sdk/workflow-tengo:feats")
5
+
4
6
  validation := import("@platforma-sdk/workflow-tengo:validation")
5
7
  assets := import("@platforma-sdk/workflow-tengo:assets")
6
8
  internal := import("@platforma-sdk/workflow-tengo:exec.internal")
@@ -9,7 +11,6 @@ text := import("text")
9
11
  runcmd := import("@platforma-sdk/workflow-tengo:exec.runcmd")
10
12
  workdir := import("@platforma-sdk/workflow-tengo:workdir")
11
13
  render := import("@platforma-sdk/workflow-tengo:render")
12
- desc := import("@platforma-sdk/workflow-tengo:exec.descriptor")
13
14
  constants := import("@platforma-sdk/workflow-tengo:exec.constants")
14
15
 
15
16
  _JWT_TOKEN_RESULT_ENV := "PLATFORMA_MNZ_JWT"
@@ -117,7 +118,7 @@ run := func(mnz, wd, queue) {
117
118
 
118
119
  builder := runcmd.builder(wd)
119
120
 
120
- exprType := desc.canBackendUseExpressions() ? constants.ARG_TYPE_EXPRESSION : constants.ARG_TYPE_VAR
121
+ exprType := feats.commandExpressions ? constants.ARG_TYPE_EXPRESSION : constants.ARG_TYPE_VAR
121
122
 
122
123
  builder.envTyped("MI_LICENSE", exprType, "{secrets.MI_LICENSE}")
123
124
 
@@ -3,13 +3,14 @@
3
3
  */
4
4
 
5
5
  ll := import("@platforma-sdk/workflow-tengo:ll")
6
+ feats := import("@platforma-sdk/workflow-tengo:feats")
7
+
6
8
  maps := import("@platforma-sdk/workflow-tengo:maps")
7
9
  oop := import("@platforma-sdk/workflow-tengo:oop")
8
10
  smart := import("@platforma-sdk/workflow-tengo:smart")
9
11
  json := import("json")
10
12
  constants := import("@platforma-sdk/workflow-tengo:exec.constants")
11
13
  slices := import("@platforma-sdk/workflow-tengo:slices")
12
- desc := import("@platforma-sdk/workflow-tengo:exec.descriptor")
13
14
 
14
15
  _RTYPE_RUN_COMMAND := { Name: "RunCommand/executor", Version: "1" }
15
16
  _RTYPE_RUN_COMMAND_CMD := { Name: "RunCommandCmd", Version: "1" }
@@ -358,7 +359,7 @@ builder := func(workdir) {
358
359
  ll.assert(!hasPatternArgs || len(substRules) != 0,
359
360
  "found pattern argument, but no substitution rules were set: hasPatternArgs: %v, substRules: %v, cmd: %v, args: %v, envs: %v",
360
361
  hasPatternArgs, substRules, cmd, args, envs)
361
- ll.assert(!hasExpressionArgs || desc.canBackendUseExpressions(),
362
+ ll.assert(!hasExpressionArgs || feats.commandExpressions,
362
363
  "runcmd.builder().build: expression arguments must be enabled only if platforma backend supports expressions, found: %v",
363
364
  hasExpressionArgs)
364
365
 
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Catalogue of features available in current execution context.
3
+ */
4
+ plapi := import("plapi")
5
+ ll := import("@platforma-sdk/workflow-tengo:ll")
6
+
7
+ _api := plapi.apiVersion
8
+ if is_undefined(_api) {
9
+ _api = 0
10
+ }
11
+
12
+ export ll.toStrict({
13
+ pureFutureFields: _api >= 1,
14
+ commandExpressions: _api >= 2
15
+ })
@@ -287,6 +287,7 @@ purifySpec := func(spec) {
287
287
  * columnsSpec - map of full column specs by ids from the original cfg
288
288
  * }
289
289
  */
290
+ // @TODO: rename to decomposeXsvImport to align with the naming in the rest xsv libs
290
291
  decomposePfconvImportCfg := func(cfg, ...ops) {
291
292
  ll.assert(len(ops) <= 1, "too many options for decomposePfconvImportCfg: %v", len(ops))
292
293
 
@@ -164,6 +164,7 @@ importFile := func(xsvFile, xsvType, spec, ...ops) {
164
164
  // p-columns data
165
165
  pf := pfconv.getProcessorResult("pf")
166
166
  if ops.dataOnly {
167
+ // @TODO discuss, as it changes the type of the return from map to object
167
168
  return pf
168
169
  }
169
170
 
@@ -269,10 +270,16 @@ importFileMap := func(xsvMap, xsvType, spec, ...ops) {
269
270
  * @param pf: p-frame - a list of p-columns ({data, spec}) or a frame-like map of col.data col.spec entries
270
271
  * @param xsvType: string - "csv" or "tsv"
271
272
  * @param params: map - export params
273
+ * @param ops: object - additional options
274
+ * {
275
+ * partitions: {axisIdx: [keys]} - map of partitions to export; if not specified, all data is exported
276
+ * }
272
277
  */
273
- exportFrame := func(pf, xsvType, params) {
278
+ exportFrame := func(pf, xsvType, params, ...ops) {
274
279
  exportPfTpl := assets.importTemplate("@platforma-sdk/workflow-tengo:pframes.xsv-export-pframe")
275
280
 
281
+ ops := renderOps({}, ops...)
282
+
276
283
  if is_array(pf) {
277
284
  // transform into .data .spec map
278
285
 
@@ -291,7 +298,8 @@ exportFrame := func(pf, xsvType, params) {
291
298
  r := render.create(exportPfTpl, {
292
299
  pf: pf,
293
300
  xsvType: xsvType,
294
- params: params
301
+ params: params,
302
+ ops: ops
295
303
  })
296
304
 
297
305
  return r.output("result")
@@ -4,6 +4,8 @@
4
4
 
5
5
  tx := import("tx")
6
6
  ll := import("@platforma-sdk/workflow-tengo:ll")
7
+ feats := import("@platforma-sdk/workflow-tengo:feats")
8
+
7
9
  oop := import("@platforma-sdk/workflow-tengo:oop")
8
10
  maps := import("@platforma-sdk/workflow-tengo:maps")
9
11
  json := import("json")
@@ -495,7 +497,7 @@ resource = func(r) {
495
497
  isEph = eph[0]
496
498
  }
497
499
 
498
- if ll.apiVersion() < 1 && !isEph {
500
+ if !feats.pureFutureFields && !isEph {
499
501
  // Dirty hack that saves from issues with buggy pure getField before v1.16.1
500
502
  // We can safely drop it when we consider v1.16.0 old enough.
501
503
  return self.getFutureField(name, "output", true).expectNonEphemeral()
@@ -890,7 +892,7 @@ field = func(f) {
890
892
  isEph = eph[0]
891
893
  }
892
894
 
893
- if ll.apiVersion() < 1 && !isEph {
895
+ if !feats.pureFutureFields && !isEph {
894
896
  // Dirty hack that saves from issues with buggy pure getField before v1.16.1
895
897
  // We can safely drop it when we consider v1.16.0 old enough.
896
898
  return self.getFutureField(name, "output", true).expectNonEphemeral()
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/workflow-tengo",
3
- "version": "2.9.10",
3
+ "version": "2.10.0",
4
4
  "description": "Tengo SDK library",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.js",