@platforma-sdk/workflow-tengo 2.8.1 → 2.8.3
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 +76 -82
- package/dist/tengo/lib/constants.lib.tengo +28 -31
- package/dist/tengo/lib/exec.R.internal.lib.tengo +14 -14
- package/dist/tengo/lib/exec.R.lib.tengo +158 -167
- package/dist/tengo/lib/exec.internal.lib.tengo +222 -234
- package/dist/tengo/lib/exec.lib.tengo +647 -714
- package/dist/tengo/lib/exec.package.lib.tengo +229 -238
- package/dist/tengo/lib/exec.python.internal.lib.tengo +5 -6
- package/dist/tengo/lib/exec.python.lib.tengo +138 -146
- package/dist/tengo/lib/exec.runcmd.lib.tengo +234 -253
- package/dist/tengo/lib/exec.runenv.lib.tengo +88 -92
- package/dist/tengo/lib/exec.stream.lib.tengo +36 -40
- package/dist/tengo/lib/file.internal.lib.tengo +70 -77
- package/dist/tengo/lib/file.lib.tengo +54 -57
- package/dist/tengo/lib/ll.lib.tengo +217 -241
- package/dist/tengo/lib/maps.lib.tengo +98 -106
- package/dist/tengo/lib/objects.lib.tengo +11 -13
- package/dist/tengo/lib/oop.lib.tengo +16 -19
- package/dist/tengo/lib/path.lib.tengo +116 -125
- package/dist/tengo/lib/pframes.constants.lib.tengo +25 -28
- package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +28 -33
- package/dist/tengo/lib/pframes.lib.tengo +38 -43
- package/dist/tengo/lib/pframes.ll.lib.tengo +70 -73
- package/dist/tengo/lib/pframes.pcolumn.lib.tengo +45 -51
- package/dist/tengo/lib/pframes.spec.lib.tengo +70 -96
- package/dist/tengo/lib/pframes.util.lib.tengo +154 -289
- package/dist/tengo/lib/pframes.xsv.lib.tengo +260 -273
- package/dist/tengo/lib/render.lib.tengo +65 -76
- package/dist/tengo/lib/sets.lib.tengo +61 -68
- package/dist/tengo/lib/slices.lib.tengo +169 -180
- package/dist/tengo/lib/smart.lib.tengo +956 -1069
- package/dist/tengo/lib/test.lib.tengo +129 -161
- package/dist/tengo/lib/tpl.lib.tengo +448 -516
- package/dist/tengo/lib/tpl.state-await.lib.tengo +226 -241
- package/dist/tengo/lib/tpl.util.lib.tengo +4 -9
- package/dist/tengo/lib/validation.lib.tengo +334 -379
- package/dist/tengo/lib/workdir.lib.tengo +309 -332
- package/dist/tengo/lib/workdir.proc.lib.tengo +126 -144
- package/dist/tengo/lib/workdir.save.lib.tengo +113 -130
- package/dist/tengo/lib/workflow.bobject.lib.tengo +21 -26
- package/dist/tengo/lib/workflow.bquery.lib.tengo +140 -166
- package/dist/tengo/lib/workflow.constants.lib.tengo +1 -2
- package/dist/tengo/lib/workflow.context.lib.tengo +27 -32
- package/dist/tengo/lib/workflow.lib.tengo +167 -207
- 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.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 +8 -8
|
@@ -5,43 +5,38 @@ 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
|
-
// reference to the template doing nested super-partitioned export
|
|
9
8
|
nestedTpl := assets.importTemplate("@platforma-sdk/workflow-tengo:pframes.export-single-pcolumn")
|
|
10
9
|
|
|
11
|
-
/** Implements core export logic for export-single-pcolumn and export-multiple-pcolumns templates */
|
|
12
10
|
exportPColumnData := func(data) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
} else {
|
|
41
|
-
ll.panic("unknonw resource type: %v", data.info().Type)
|
|
42
|
-
}
|
|
11
|
+
if data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_RESOURCE_MAP_PARTITIONED) ||
|
|
12
|
+
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_JSON_SUPER_PARTITIONED) ||
|
|
13
|
+
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED) {
|
|
14
|
+
|
|
15
|
+
newData := smart.structBuilder(data.info().Type, data.info().Data)
|
|
16
|
+
for key, partData in data.inputs() {
|
|
17
|
+
newData.createInputField(key).set(render.createEphemeral(nestedTpl, { data: partData }).output("result"))
|
|
18
|
+
}
|
|
19
|
+
return newData.lockAndBuild()
|
|
20
|
+
|
|
21
|
+
} else if data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_RESOURCE_MAP) ||
|
|
22
|
+
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_JSON_PARTITIONED) ||
|
|
23
|
+
data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_BINARY_PARTITIONED) {
|
|
24
|
+
|
|
25
|
+
newData := smart.structBuilder(data.info().Type, data.info().Data)
|
|
26
|
+
for key, partData in data.inputs() {
|
|
27
|
+
newData.createInputField(key).set(file.exportFile(partData))
|
|
28
|
+
}
|
|
29
|
+
return newData.lockAndBuild()
|
|
30
|
+
|
|
31
|
+
} else if data.checkResourceType(pConstants.RTYPE_P_COLUMN_DATA_JSON) {
|
|
32
|
+
|
|
33
|
+
return data
|
|
34
|
+
|
|
35
|
+
} else {
|
|
36
|
+
ll.panic("unknonw resource type: %v", data.info().Type)
|
|
37
|
+
}
|
|
43
38
|
}
|
|
44
39
|
|
|
45
40
|
export ll.toStrict({
|
|
46
|
-
|
|
41
|
+
exportPColumnData: exportPColumnData
|
|
47
42
|
})
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
1
|
+
|
|
2
|
+
|
|
4
3
|
|
|
5
4
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
6
5
|
oop := import("@platforma-sdk/workflow-tengo:oop")
|
|
@@ -9,57 +8,53 @@ assets := import("@platforma-sdk/workflow-tengo:assets")
|
|
|
9
8
|
render := import("@platforma-sdk/workflow-tengo:render")
|
|
10
9
|
constants := import("@platforma-sdk/workflow-tengo:pframes.constants")
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*/
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
16
14
|
exportFrame := func(pf) {
|
|
17
|
-
|
|
15
|
+
return render.createEphemeral(assets.importTemplate("@platforma-sdk/workflow-tengo:pframes.export-pframe"), { pf: pf }).output("result")
|
|
18
16
|
}
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
*/
|
|
18
|
+
|
|
19
|
+
|
|
23
20
|
exportColumnData := func(data) {
|
|
24
|
-
|
|
21
|
+
return render.createEphemeral(assets.importTemplate("@platforma-sdk/workflow-tengo:pframes.export-single-pcolumn"), { data: data }).output("result")
|
|
25
22
|
}
|
|
26
23
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
*/
|
|
24
|
+
|
|
25
|
+
|
|
30
26
|
pFrameBuilder := func() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
27
|
+
r := smart.structBuilder(constants.RTYPE_P_FRAME)
|
|
28
|
+
|
|
29
|
+
self := undefined
|
|
30
|
+
self = ll.toStrict(oop.inherit(r, {
|
|
31
|
+
|
|
32
|
+
add: func(column, spec, data) {
|
|
33
|
+
if (!is_undefined(spec)) {
|
|
34
|
+
r.createInputField(column + ".spec").setRefOrJson(spec)
|
|
35
|
+
}
|
|
36
|
+
if (!is_undefined(data)) {
|
|
37
|
+
r.createInputField(column + ".data").setRefOrJson(data)
|
|
38
|
+
}
|
|
39
|
+
return self
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
build: func() {
|
|
43
|
+
return r.lockAndBuild()
|
|
44
|
+
}
|
|
45
|
+
}))
|
|
46
|
+
return self
|
|
51
47
|
}
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
*/
|
|
49
|
+
|
|
50
|
+
|
|
56
51
|
pColumnResourceMapDataBuilder := func(keyLength) {
|
|
57
|
-
|
|
52
|
+
ll.panic("pframes.pColumnResourceMapDataBuilder is not supported any more; use pcolumn.resourceMapBuilder")
|
|
58
53
|
}
|
|
59
54
|
|
|
60
55
|
export ll.toStrict({
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
exportFrame: exportFrame,
|
|
57
|
+
pFrameBuilder: pFrameBuilder,
|
|
58
|
+
exportColumnData: exportColumnData,
|
|
59
|
+
pColumnResourceMapDataBuilder: pColumnResourceMapDataBuilder
|
|
65
60
|
})
|
|
@@ -1,86 +1,83 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
1
|
+
|
|
2
|
+
|
|
4
3
|
|
|
5
4
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
6
5
|
assets := import("@platforma-sdk/workflow-tengo:assets")
|
|
7
6
|
smart := import("@platforma-sdk/workflow-tengo:smart")
|
|
8
7
|
render := import("@platforma-sdk/workflow-tengo:render")
|
|
9
|
-
pConstants := import("@platforma-sdk/workflow-tengo:pframes.constants")
|
|
10
8
|
|
|
11
9
|
llAggTpl := assets.importTemplate("@platforma-sdk/workflow-tengo:pframes.aggregate")
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
*/
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
61
58
|
aggregate := func(data, indices, bodyTpl, outputs, isEph, ...extra) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
59
|
+
renderInputs := {
|
|
60
|
+
params: smart.createJsonResource({
|
|
61
|
+
indices: indices,
|
|
62
|
+
eph: isEph,
|
|
63
|
+
outputs: outputs
|
|
64
|
+
}),
|
|
65
|
+
body: bodyTpl,
|
|
66
|
+
data: data
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if len(extra) == 1 {
|
|
70
|
+
for k, v in extra[0] {
|
|
71
|
+
renderInputs["__extra_" + k] = v
|
|
72
|
+
}
|
|
73
|
+
} else if len(extra) != 0 {
|
|
74
|
+
ll.panic("Wrong number of parameters for aggregate method.")
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
renderResult := render.createEphemeral(llAggTpl, renderInputs)
|
|
78
|
+
return renderResult;
|
|
82
79
|
}
|
|
83
80
|
|
|
84
81
|
export ll.toStrict({
|
|
85
|
-
|
|
82
|
+
aggregate: aggregate
|
|
86
83
|
})
|
|
@@ -1,71 +1,65 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
1
|
+
|
|
2
|
+
|
|
4
3
|
|
|
5
4
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
6
5
|
oop := import("@platforma-sdk/workflow-tengo:oop")
|
|
7
6
|
json := import("json")
|
|
8
7
|
smart := import("@platforma-sdk/workflow-tengo:smart")
|
|
9
|
-
assets := import("@platforma-sdk/workflow-tengo:assets")
|
|
10
|
-
render := import("@platforma-sdk/workflow-tengo:render")
|
|
11
8
|
constants := import("@platforma-sdk/workflow-tengo:pframes.constants")
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*/
|
|
10
|
+
|
|
11
|
+
|
|
16
12
|
isResourceMap := func(r) {
|
|
17
|
-
|
|
13
|
+
return smart.isResource(r) && r.info().Type.Name == constants.RTYPE_P_COLUMN_DATA_RESOURCE_MAP.Name
|
|
18
14
|
}
|
|
19
15
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
*/
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
25
20
|
resourceMapBuilder := func(keyLength) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
21
|
+
r := smart.structBuilder(
|
|
22
|
+
constants.RTYPE_P_COLUMN_DATA_RESOURCE_MAP,
|
|
23
|
+
json.encode({ keyLength: keyLength })
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
self := undefined
|
|
27
|
+
self = ll.toStrict(oop.inherit(r, {
|
|
28
|
+
|
|
29
|
+
add: func(key, data) {
|
|
30
|
+
ll.assert(is_array(key), "key must be an array, got ", key)
|
|
31
|
+
ll.assert(len(key) == keyLength, "array length does not match specified keyLength", key, keyLength)
|
|
32
|
+
r.createInputField(json.encode(key)).setRefOrJson(data)
|
|
33
|
+
return self
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
build: func() {
|
|
37
|
+
return r.lockAndBuild()
|
|
38
|
+
}
|
|
39
|
+
}))
|
|
40
|
+
return self
|
|
46
41
|
}
|
|
47
42
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
*/
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
55
49
|
fromMap := func(map, keyLength, keyParser) {
|
|
56
|
-
|
|
50
|
+
b := resourceMapBuilder(keyLength)
|
|
57
51
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
52
|
+
for k, v in map {
|
|
53
|
+
arr := keyParser(k)
|
|
54
|
+
ll.assert(is_array(arr), "keyParser should return array")
|
|
55
|
+
b.add(arr, v)
|
|
56
|
+
}
|
|
63
57
|
|
|
64
|
-
|
|
58
|
+
return b.build()
|
|
65
59
|
}
|
|
66
60
|
|
|
67
61
|
export ll.toStrict({
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
62
|
+
fromMap: fromMap,
|
|
63
|
+
isResourceMap: isResourceMap,
|
|
64
|
+
resourceMapBuilder: resourceMapBuilder
|
|
71
65
|
})
|
|
@@ -1,136 +1,110 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*/
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
6
5
|
|
|
7
6
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
8
7
|
maps := import("@platforma-sdk/workflow-tengo:maps")
|
|
9
8
|
validation := import("@platforma-sdk/workflow-tengo:validation")
|
|
10
9
|
json := import("json")
|
|
11
10
|
|
|
12
|
-
//
|
|
13
|
-
// Common schemas
|
|
14
|
-
//
|
|
15
11
|
|
|
16
12
|
P_AXIS_SPEC_SCHEMA := {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
`parentAxes,?`: `any` // [ `number` ]
|
|
13
|
+
`type`: `string,regex=Int|Long|Float|Double|String`,
|
|
14
|
+
`name`: `string`,
|
|
15
|
+
`domain,?`: { any: `string` },
|
|
16
|
+
`annotations,?`: { any: `string` },
|
|
17
|
+
`parentAxes,?`: `any` // [ `number` ]
|
|
23
18
|
}
|
|
24
19
|
|
|
25
20
|
P_COLUMN_SPEC_SCHEMA := {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
`axesSpec,?`: [ P_AXIS_SPEC_SCHEMA ]
|
|
21
|
+
`kind`: `string,regex=PColumn`,
|
|
22
|
+
`valueType`: `string`,
|
|
23
|
+
`name`: `string`,
|
|
24
|
+
`domain,?`: { any: `string` },
|
|
25
|
+
`annotations,?`: { any: `string` },
|
|
26
|
+
`parentAxes,?`: `any`, // [ `number` ]
|
|
27
|
+
`axesSpec,?`: [ P_AXIS_SPEC_SCHEMA ]
|
|
34
28
|
}
|
|
35
29
|
|
|
36
30
|
KIND_P_COLUMN := "PColumn"
|
|
37
31
|
|
|
38
|
-
//
|
|
39
|
-
// Column / axis names
|
|
40
|
-
//
|
|
41
32
|
|
|
42
|
-
/** Column containing labels for axis keys */
|
|
43
33
|
N_LABEL := "pl7.app/label"
|
|
44
34
|
|
|
45
|
-
//
|
|
46
|
-
// Column / axis domains
|
|
47
|
-
//
|
|
48
35
|
|
|
49
|
-
/** Domain marking column or axis as block-specific, value must contain block id */
|
|
50
36
|
D_BLOCK := "pl7.app/block"
|
|
51
37
|
|
|
52
|
-
//
|
|
53
|
-
// Column / axis annotations
|
|
54
|
-
//
|
|
55
38
|
|
|
56
|
-
/** Annotation with axis or column label */
|
|
57
39
|
A_LABEL := "pl7.app/label"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
*/
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
69
50
|
A_TRACE := "pl7.app/trace"
|
|
70
51
|
|
|
71
|
-
//
|
|
72
|
-
// Utility methods
|
|
73
|
-
//
|
|
74
52
|
|
|
75
53
|
_TRACE_STEP_SCHEMA := {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
54
|
+
`type`: `string`,
|
|
55
|
+
`label`: `string`,
|
|
56
|
+
`importance,?`: `number`,
|
|
57
|
+
`id,?`: `string`,
|
|
58
|
+
`__options__,closed`: ``
|
|
81
59
|
}
|
|
82
60
|
|
|
83
61
|
_TRACE_SCHEMA := [_TRACE_STEP_SCHEMA]
|
|
84
62
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
*/
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
91
68
|
makeTrace := func(input, ...steps) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return maps.deepMerge(spec, {annotations: {"pl7.app/trace": currentTraceStr}})
|
|
121
|
-
}
|
|
122
|
-
})
|
|
69
|
+
validation.assertJsonSchema(steps, _TRACE_SCHEMA)
|
|
70
|
+
|
|
71
|
+
currentTraceContent := undefined
|
|
72
|
+
if is_string(input) {
|
|
73
|
+
currentTraceContent = input
|
|
74
|
+
} else if is_string(input[A_TRACE]) {
|
|
75
|
+
currentTraceContent = input[A_TRACE]
|
|
76
|
+
} else if is_string(input["annotations"][A_TRACE]) {
|
|
77
|
+
currentTraceContent = input["annotations"][A_TRACE]
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
currentTrace := []
|
|
81
|
+
if !is_undefined(currentTraceContent) {
|
|
82
|
+
currentTrace = json.decode(currentTraceContent)
|
|
83
|
+
validation.assertJsonSchema(currentTrace, _TRACE_SCHEMA)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
currentTrace = append(currentTrace, steps...)
|
|
87
|
+
currentTraceStr := string(json.encode(currentTrace))
|
|
88
|
+
|
|
89
|
+
return ll.toStrict({
|
|
90
|
+
value: currentTrace,
|
|
91
|
+
valueStr: currentTraceStr,
|
|
92
|
+
inject: func(spec) {
|
|
93
|
+
validation.assertJsonSchema(spec, P_COLUMN_SPEC_SCHEMA)
|
|
94
|
+
return maps.deepMerge(spec, {annotations: {"pl7.app/trace": currentTraceStr}})
|
|
95
|
+
}
|
|
96
|
+
})
|
|
123
97
|
}
|
|
124
98
|
|
|
125
99
|
export ll.toStrict({
|
|
126
|
-
|
|
100
|
+
KIND_P_COLUMN: KIND_P_COLUMN,
|
|
127
101
|
|
|
128
|
-
|
|
102
|
+
N_LABEL: N_LABEL,
|
|
129
103
|
|
|
130
|
-
|
|
104
|
+
D_BLOCK: D_BLOCK,
|
|
131
105
|
|
|
132
|
-
|
|
133
|
-
|
|
106
|
+
A_LABEL: A_LABEL,
|
|
107
|
+
A_TRACE: A_TRACE,
|
|
134
108
|
|
|
135
|
-
|
|
109
|
+
makeTrace: makeTrace
|
|
136
110
|
})
|