@platforma-sdk/workflow-tengo 2.13.6 → 2.15.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.
Files changed (80) hide show
  1. package/README.md +17 -1
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +4 -1
  4. package/dist/index.mjs +4 -1
  5. package/dist/tengo/lib/assets.lib.tengo +28 -28
  6. package/dist/tengo/lib/assets.swinfo.lib.tengo +24 -24
  7. package/dist/tengo/lib/constants.lib.tengo +6 -3
  8. package/dist/tengo/lib/exec.R.internal.lib.tengo +2 -2
  9. package/dist/tengo/lib/exec.R.lib.tengo +41 -41
  10. package/dist/tengo/lib/exec.descriptor.lib.tengo +3 -3
  11. package/dist/tengo/lib/exec.internal.lib.tengo +41 -41
  12. package/dist/tengo/lib/exec.lib.tengo +289 -289
  13. package/dist/tengo/lib/exec.limits.lib.tengo +49 -49
  14. package/dist/tengo/lib/exec.monetization.lib.tengo +1 -1
  15. package/dist/tengo/lib/exec.monetization_internal.lib.tengo +38 -38
  16. package/dist/tengo/lib/exec.package.lib.tengo +53 -53
  17. package/dist/tengo/lib/exec.python.internal.lib.tengo +1 -1
  18. package/dist/tengo/lib/exec.python.lib.tengo +37 -37
  19. package/dist/tengo/lib/exec.runcmd.lib.tengo +138 -138
  20. package/dist/tengo/lib/exec.runenv.lib.tengo +18 -18
  21. package/dist/tengo/lib/exec.stream.lib.tengo +25 -25
  22. package/dist/tengo/lib/feats.lib.tengo +3 -3
  23. package/dist/tengo/lib/file.internal.lib.tengo +31 -31
  24. package/dist/tengo/lib/file.lib.tengo +29 -29
  25. package/dist/tengo/lib/ll.get-future-field-default.lib.tengo +137 -0
  26. package/dist/tengo/lib/ll.lib.tengo +129 -129
  27. package/dist/tengo/lib/maps.lib.tengo +38 -38
  28. package/dist/tengo/lib/objects.lib.tengo +6 -6
  29. package/dist/tengo/lib/oop.lib.tengo +11 -11
  30. package/dist/tengo/lib/path.lib.tengo +60 -60
  31. package/dist/tengo/lib/pframes.builder.lib.tengo +3 -3
  32. package/dist/tengo/lib/pframes.constants.lib.tengo +20 -20
  33. package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +5 -5
  34. package/dist/tengo/lib/pframes.lib.tengo +206 -198
  35. package/dist/tengo/lib/pframes.ll.lib.tengo +59 -59
  36. package/dist/tengo/lib/pframes.pcolumn.lib.tengo +18 -18
  37. package/dist/tengo/lib/pframes.remove-nulls.lib.tengo +36 -0
  38. package/dist/tengo/lib/pframes.spec.lib.tengo +83 -83
  39. package/dist/tengo/lib/pframes.util.lib.tengo +176 -176
  40. package/dist/tengo/lib/pframes.xsv-import-file.lib.tengo +160 -0
  41. package/dist/tengo/lib/pframes.xsv.lib.tengo +84 -167
  42. package/dist/tengo/lib/render.lib.tengo +100 -45
  43. package/dist/tengo/lib/sets.lib.tengo +44 -44
  44. package/dist/tengo/lib/slices.lib.tengo +126 -126
  45. package/dist/tengo/lib/smart.lib.tengo +654 -507
  46. package/dist/tengo/lib/test.lib.tengo +120 -120
  47. package/dist/tengo/lib/tpl.lib.tengo +206 -170
  48. package/dist/tengo/lib/tpl.state-await.lib.tengo +17 -17
  49. package/dist/tengo/lib/tpl.util.lib.tengo +5 -5
  50. package/dist/tengo/lib/units.lib.tengo +2 -2
  51. package/dist/tengo/lib/validation.lib.tengo +130 -130
  52. package/dist/tengo/lib/waiter.lib.tengo +59 -0
  53. package/dist/tengo/lib/workdir.lib.tengo +126 -126
  54. package/dist/tengo/lib/workdir.proc.lib.tengo +47 -47
  55. package/dist/tengo/lib/workdir.save.lib.tengo +53 -53
  56. package/dist/tengo/lib/workflow.bobject.lib.tengo +11 -11
  57. package/dist/tengo/lib/workflow.bquery.lib.tengo +40 -40
  58. package/dist/tengo/lib/workflow.constants.lib.tengo +1 -1
  59. package/dist/tengo/lib/workflow.context.lib.tengo +16 -16
  60. package/dist/tengo/lib/workflow.lib.tengo +76 -76
  61. package/dist/tengo/tpl/exec.R.create-renv.plj.gz +0 -0
  62. package/dist/tengo/tpl/exec.exec.plj.gz +0 -0
  63. package/dist/tengo/tpl/exec.monetization_to_json.plj.gz +0 -0
  64. package/dist/tengo/tpl/exec.python.create-venv.plj.gz +0 -0
  65. package/dist/tengo/tpl/exec.python.install-deps.plj.gz +0 -0
  66. package/dist/tengo/tpl/ll.get-field.plj.gz +0 -0
  67. package/dist/tengo/tpl/pframes.export-multiple-pcolumns.plj.gz +0 -0
  68. package/dist/tengo/tpl/pframes.export-pframe.plj.gz +0 -0
  69. package/dist/tengo/tpl/pframes.export-single-pcolumn.plj.gz +0 -0
  70. package/dist/tengo/tpl/pframes.import-dir.plj.gz +0 -0
  71. package/dist/tengo/tpl/pframes.process-pcolumn-data.plj.gz +0 -0
  72. package/dist/tengo/tpl/pframes.remove-nulls.plj.gz +0 -0
  73. package/dist/tengo/tpl/pframes.xsv-export-pframe.plj.gz +0 -0
  74. package/dist/tengo/tpl/pframes.xsv-import-if-not-null.plj.gz +0 -0
  75. package/dist/tengo/tpl/pframes.xsv-import-map.plj.gz +0 -0
  76. package/dist/tengo/tpl/waiter.waiter.plj.gz +0 -0
  77. package/dist/tengo/tpl/workdir.save.plj.gz +0 -0
  78. package/dist/tengo/tpl/workflow.build-ctx.plj.gz +0 -0
  79. package/package.json +2 -2
  80. package/dist/tengo/tpl/pframes.map-pframe.plj.gz +0 -0
@@ -1,6 +1,6 @@
1
- /**
2
- * Working with a single p-column
3
- */
1
+
2
+
3
+
4
4
 
5
5
  ll := import("@platforma-sdk/workflow-tengo:ll")
6
6
  oop := import("@platforma-sdk/workflow-tengo:oop")
@@ -8,18 +8,18 @@ json := import("json")
8
8
  smart := import("@platforma-sdk/workflow-tengo:smart")
9
9
  constants := import("@platforma-sdk/workflow-tengo:pframes.constants")
10
10
 
11
- /**
12
- * Returns true if given resource is a p-column resource map data
13
- */
11
+
12
+
13
+
14
14
  isResourceMap := func(r) {
15
15
  return smart.isResource(r) && r.info().Type.Name == constants.RTYPE_P_COLUMN_DATA_RESOURCE_MAP.Name
16
16
  }
17
17
 
18
- /**
19
- * Creates a builder for a resource map p-column's data.
20
- *
21
- * @param keyLength: int - key length
22
- */
18
+
19
+
20
+
21
+
22
+
23
23
  resourceMapBuilder := func(keyLength) {
24
24
  r := smart.structBuilder(
25
25
  constants.RTYPE_P_COLUMN_DATA_RESOURCE_MAP,
@@ -43,13 +43,13 @@ resourceMapBuilder := func(keyLength) {
43
43
  return self
44
44
  }
45
45
 
46
- /**
47
- * Convert map object to a p-column resource map.
48
- *
49
- * @param map - tengo map
50
- * @param keyLength: int - length of the partitioned key
51
- * @param keyParser: func - function to parse string map keys and return array of p-column keys
52
- */
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
53
  fromMap := func(map, keyLength, keyParser) {
54
54
  b := resourceMapBuilder(keyLength)
55
55
 
@@ -0,0 +1,36 @@
1
+ ll := import("@platforma-sdk/workflow-tengo:ll")
2
+ assets := import("@platforma-sdk/workflow-tengo:assets")
3
+ render := import("@platforma-sdk/workflow-tengo:render")
4
+ smart := import("@platforma-sdk/workflow-tengo:smart")
5
+
6
+
7
+ removeNullsTemplate := assets.importTemplate("@platforma-sdk/workflow-tengo:pframes.remove-nulls")
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+ removeNulls := func(dataMap, ...opts) {
16
+ ll.assert(smart.isReference(dataMap), "expected resource or field, got %v", dataMap)
17
+
18
+
19
+ isEph := false
20
+ if len(opts) > 0 {
21
+ isEph = opts[0]
22
+ }
23
+
24
+
25
+ result := render.createUniversal(removeNullsTemplate, isEph, {
26
+ map: dataMap
27
+ })
28
+
29
+
30
+ return result.output("result")
31
+ }
32
+
33
+
34
+ export ll.toStrict({
35
+ removeNulls: removeNulls
36
+ })
@@ -1,20 +1,20 @@
1
- /**
2
- * PFrames spec library:
3
- * - well known domains, annotations and column names.
4
- * - utility methods to manipulate column and axis spec
5
- */
1
+
2
+
3
+
4
+
5
+
6
6
 
7
7
  ll := import("@platforma-sdk/workflow-tengo:ll")
8
8
  maps := import("@platforma-sdk/workflow-tengo:maps")
9
9
  validation := import("@platforma-sdk/workflow-tengo:validation")
10
10
  json := import("json")
11
11
 
12
- //
13
- // Common schemas
14
- //
12
+
13
+
14
+
15
15
 
16
16
  P_AXIS_SPEC_SCHEMA := {
17
- // `__options__,closed`: ``, // commented out to keep the room for future schema modifications
17
+
18
18
  `type`: `string,regex=Int|Long|Float|Double|String`,
19
19
  `name`: `string`,
20
20
  `domain,?`: { any: `string` },
@@ -23,7 +23,7 @@ P_AXIS_SPEC_SCHEMA := {
23
23
  }
24
24
 
25
25
  P_COLUMN_SPEC_SCHEMA := {
26
- // `__options__,closed`: ``, // commented out to keep the room for future schema modifications
26
+
27
27
  `kind`: `string,regex=PColumn`,
28
28
  `valueType`: `string`,
29
29
  `name`: `string`,
@@ -35,42 +35,42 @@ P_COLUMN_SPEC_SCHEMA := {
35
35
 
36
36
  KIND_P_COLUMN := "PColumn"
37
37
 
38
- //
39
- // Column / axis names
40
- //
41
38
 
42
- /** Column containing labels for axis keys */
39
+
40
+
41
+
42
+
43
43
  N_LABEL := "pl7.app/label"
44
44
 
45
- //
46
- // Column / axis domains
47
- //
48
45
 
49
- /** Domain marking column or axis as block-specific, value must contain block id */
46
+
47
+
48
+
49
+
50
50
  D_BLOCK := "pl7.app/block"
51
51
 
52
- //
53
- // Column / axis annotations
54
- //
55
52
 
56
- /** Annotation with axis or column label */
53
+
54
+
55
+
56
+
57
57
  A_LABEL := "pl7.app/label"
58
- /**
59
- * Annotation containing trace of operations resulting in a corresponding column.
60
- *
61
- * Value must containe JSON encoded array of structures:
62
- * {
63
- * type: string - type of the step, often equals to block package name (i.e. milaboratories.mixcr-clonotyping)
64
- * label: string - string representation of the operation often a block title
65
- * importance: number - higher the number higher the change label from trace step will be used to derive column label
66
- * id: string - unique identifier of operation, often a block id
67
- * }
68
- */
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
69
  A_TRACE := "pl7.app/trace"
70
70
 
71
- //
72
- // Format methods
73
- //
71
+
72
+
73
+
74
74
 
75
75
  normalizeColumnSpec := func(spec) {
76
76
  if is_undefined(spec.axesSpec) {
@@ -80,9 +80,9 @@ normalizeColumnSpec := func(spec) {
80
80
  return spec
81
81
  }
82
82
 
83
- //
84
- // Matchers
85
- //
83
+
84
+
85
+
86
86
 
87
87
  _P_MATCHER_SCHEMA := {
88
88
  `__options__,closed`: ``,
@@ -118,11 +118,11 @@ _checkAxisMatch := func(axisSpec, matcher) {
118
118
  return true
119
119
  }
120
120
 
121
- /**
122
- * For a given array of axes specs returns the index of matching axis:
123
- * - if multiple matches are found - panics
124
- * - if axis not found and matcher is not optional - panics
125
- */
121
+
122
+
123
+
124
+
125
+
126
126
  matchAxis := func(axesSpec, matcher) {
127
127
  validation.assertType(axesSpec, [ P_AXIS_SPEC_SCHEMA ])
128
128
  matcher = _normalizeMatcher(matcher)
@@ -142,33 +142,33 @@ matchAxis := func(axesSpec, matcher) {
142
142
  return found
143
143
  }
144
144
 
145
- /**
146
- * Matches axes specs against matchers and returns array of matched indices.
147
- *
148
- * Example matchers:
149
- * - "pl7.app/sequencing/readIndex"
150
- * - { name: "pl7.app/sequencing/readIndex" }
151
- * - { type: "String", name: "pl7.app/sequencing/lane" }
152
- * - { type: "String", name: "pl7.app/sequencing/lane", optional: true }
153
- * - { type: "String", name: "pl7.app/rna-seq/geneId", domain: { "pl7.app/species": "homo-sapiens" } }
154
- *
155
- * @param axesSpec: AxisSpec[] Array of axis specifications to match against
156
- * @param matchers: (string|AxisMatcher)[] Array of matchers, each can be either:
157
- * - string: Simple name matcher e.g. "pl7.app/sequencing/readIndex"
158
- * - AxisMatcher: Object with matching criteria:
159
- * - name: string - Axis name to match
160
- * - type?: string - Optional axis type to match
161
- * - domain?: Record<string,string> - Optional domain criteria
162
- * - optional?: boolean - If true, won't panic when no match found
163
- * @param opts?: object Optional parameters:
164
- * - keepUnmatched?: boolean - Whether to include unmatched indices (-1) in result
165
- * @returns number[] Array of matched indices in same order as matchers. Contains -1 for
166
- * unmatched optional matchers if keepUnmatched is true.
167
- * @panics
168
- * - If multiple axes match a single matcher
169
- * - If no match found for non-optional matcher
170
- * - If multiple matchers match the same axis
171
- */
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
172
  matchAxes := func(axesSpec, matchers, ...opts) {
173
173
  keepUnmatched := false
174
174
  if len(opts) == 1 {
@@ -195,9 +195,9 @@ matchAxes := func(axesSpec, matchers, ...opts) {
195
195
  return result
196
196
  }
197
197
 
198
- //
199
- // Utility methods
200
- //
198
+
199
+
200
+
201
201
 
202
202
  _TRACE_STEP_SCHEMA := {
203
203
  `type`: `string`,
@@ -209,14 +209,14 @@ _TRACE_STEP_SCHEMA := {
209
209
 
210
210
  _TRACE_SCHEMA := [_TRACE_STEP_SCHEMA]
211
211
 
212
- /**
213
- * Calculates content of pl7.app/trace annotation, given input column spec, or annotations section
214
- * of specs, or directly content of pl7.app/trace from the input column spec.
215
- *
216
- * Basically validates and adds provided steps.
217
- */
212
+
213
+
214
+
215
+
216
+
217
+
218
218
  makeTrace := func(input, ...steps) {
219
- // validating input step structure
219
+
220
220
  validation.assertType(steps, _TRACE_SCHEMA)
221
221
 
222
222
  currentTraceContent := undefined
@@ -231,7 +231,7 @@ makeTrace := func(input, ...steps) {
231
231
  currentTrace := []
232
232
  if !is_undefined(currentTraceContent) {
233
233
  currentTrace = json.decode(currentTraceContent)
234
- // validating trace we just parsed
234
+
235
235
  validation.assertType(currentTrace, _TRACE_SCHEMA)
236
236
  }
237
237
 
@@ -241,7 +241,7 @@ makeTrace := func(input, ...steps) {
241
241
  return ll.toStrict({
242
242
  value: currentTrace,
243
243
  valueStr: currentTraceStr,
244
- /** Injects trace information into column spec */
244
+
245
245
  inject: func(spec) {
246
246
  validation.assertType(spec, P_COLUMN_SPEC_SCHEMA)
247
247
  return maps.deepMerge(spec, {annotations: {"pl7.app/trace": currentTraceStr}})