@platforma-sdk/workflow-tengo 2.8.4 → 2.8.6

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 (58) hide show
  1. package/dist/tengo/lib/assets.lib.tengo +6 -0
  2. package/dist/tengo/lib/constants.lib.tengo +3 -0
  3. package/dist/tengo/lib/exec.R.lib.tengo +8 -0
  4. package/dist/tengo/lib/exec.internal.lib.tengo +12 -0
  5. package/dist/tengo/lib/exec.lib.tengo +67 -0
  6. package/dist/tengo/lib/exec.package.lib.tengo +9 -0
  7. package/dist/tengo/lib/exec.python.internal.lib.tengo +1 -0
  8. package/dist/tengo/lib/exec.python.lib.tengo +8 -0
  9. package/dist/tengo/lib/exec.runcmd.lib.tengo +19 -0
  10. package/dist/tengo/lib/exec.runenv.lib.tengo +4 -0
  11. package/dist/tengo/lib/exec.stream.lib.tengo +4 -0
  12. package/dist/tengo/lib/file.internal.lib.tengo +7 -0
  13. package/dist/tengo/lib/file.lib.tengo +3 -0
  14. package/dist/tengo/lib/ll.lib.tengo +24 -0
  15. package/dist/tengo/lib/maps.lib.tengo +8 -0
  16. package/dist/tengo/lib/objects.lib.tengo +2 -0
  17. package/dist/tengo/lib/oop.lib.tengo +3 -0
  18. package/dist/tengo/lib/path.lib.tengo +9 -0
  19. package/dist/tengo/lib/pframes.constants.lib.tengo +3 -0
  20. package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +5 -0
  21. package/dist/tengo/lib/pframes.lib.tengo +5 -0
  22. package/dist/tengo/lib/pframes.ll.lib.tengo +2 -0
  23. package/dist/tengo/lib/pframes.pcolumn.lib.tengo +4 -0
  24. package/dist/tengo/lib/pframes.spec.lib.tengo +26 -0
  25. package/dist/tengo/lib/pframes.util.lib.tengo +134 -0
  26. package/dist/tengo/lib/pframes.xsv.lib.tengo +12 -0
  27. package/dist/tengo/lib/render.lib.tengo +10 -0
  28. package/dist/tengo/lib/sets.lib.tengo +7 -0
  29. package/dist/tengo/lib/slices.lib.tengo +11 -0
  30. package/dist/tengo/lib/smart.lib.tengo +114 -1
  31. package/dist/tengo/lib/test.lib.tengo +32 -0
  32. package/dist/tengo/lib/tpl.lib.tengo +68 -0
  33. package/dist/tengo/lib/tpl.state-await.lib.tengo +14 -0
  34. package/dist/tengo/lib/tpl.util.lib.tengo +5 -0
  35. package/dist/tengo/lib/validation.lib.tengo +44 -0
  36. package/dist/tengo/lib/workdir.lib.tengo +22 -0
  37. package/dist/tengo/lib/workdir.proc.lib.tengo +18 -0
  38. package/dist/tengo/lib/workdir.save.lib.tengo +17 -0
  39. package/dist/tengo/lib/workflow.bobject.lib.tengo +5 -0
  40. package/dist/tengo/lib/workflow.bquery.lib.tengo +25 -0
  41. package/dist/tengo/lib/workflow.constants.lib.tengo +1 -0
  42. package/dist/tengo/lib/workflow.context.lib.tengo +5 -0
  43. package/dist/tengo/lib/workflow.lib.tengo +39 -0
  44. package/dist/tengo/tpl/exec.R.create-renv.plj.gz +0 -0
  45. package/dist/tengo/tpl/exec.exec.plj.gz +0 -0
  46. package/dist/tengo/tpl/exec.python.create-venv.plj.gz +0 -0
  47. package/dist/tengo/tpl/exec.python.install-deps.plj.gz +0 -0
  48. package/dist/tengo/tpl/pframes.aggregate.plj.gz +0 -0
  49. package/dist/tengo/tpl/pframes.export-multiple-pcolumns.plj.gz +0 -0
  50. package/dist/tengo/tpl/pframes.export-pframe.plj.gz +0 -0
  51. package/dist/tengo/tpl/pframes.export-single-pcolumn.plj.gz +0 -0
  52. package/dist/tengo/tpl/pframes.import-dir.plj.gz +0 -0
  53. package/dist/tengo/tpl/pframes.map-pframe.plj.gz +0 -0
  54. package/dist/tengo/tpl/pframes.xsv-export-pframe.plj.gz +0 -0
  55. package/dist/tengo/tpl/pframes.xsv-import-map.plj.gz +0 -0
  56. package/dist/tengo/tpl/workdir.save.plj.gz +0 -0
  57. package/dist/tengo/tpl/workflow.build-ctx.plj.gz +0 -0
  58. package/package.json +3 -3
@@ -1,6 +1,7 @@
1
1
 
2
2
 
3
3
 
4
+
4
5
  tx := import("tx")
5
6
  ll := import("@platforma-sdk/workflow-tengo:ll")
6
7
  oop := import("@platforma-sdk/workflow-tengo:oop")
@@ -12,34 +13,42 @@ constants := import("@platforma-sdk/workflow-tengo:constants")
12
13
 
13
14
 
14
15
 
16
+
17
+
15
18
  resource := undefined
16
19
 
17
20
 
18
21
 
22
+
19
23
  field := undefined
20
24
 
21
25
 
22
26
 
27
+
23
28
  resourceBuilder := undefined
24
29
 
25
30
 
26
31
 
27
32
 
28
33
 
34
+
29
35
  structBuilder := undefined
30
36
 
31
37
 
32
38
 
39
+
33
40
  mapBuilder := undefined
34
41
 
35
42
 
36
43
 
44
+
37
45
  ephemeralMapBuilder := undefined
38
46
 
39
47
 
40
48
 
41
49
 
42
50
 
51
+
43
52
  ephemeralBuilder := undefined
44
53
 
45
54
 
@@ -47,12 +56,14 @@ ephemeralBuilder := undefined
47
56
 
48
57
 
49
58
 
59
+
50
60
  createValueResource := undefined
51
61
 
52
62
 
53
63
 
54
64
 
55
65
 
66
+
56
67
  createJsonResource := undefined
57
68
 
58
69
 
@@ -60,6 +71,7 @@ createJsonResource := undefined
60
71
 
61
72
 
62
73
 
74
+
63
75
  createMapResource := undefined
64
76
 
65
77
 
@@ -67,6 +79,7 @@ createMapResource := undefined
67
79
 
68
80
 
69
81
 
82
+
70
83
  createBinaryMapResource := undefined
71
84
 
72
85
 
@@ -74,23 +87,28 @@ createBinaryMapResource := undefined
74
87
 
75
88
 
76
89
 
90
+
77
91
  createBlobMapResource := undefined
78
92
 
79
93
 
80
94
 
81
95
 
96
+
97
+
82
98
  isResource := func(f) {
83
99
  return ll.isStrict(f) && ll.fromStrict(f)["_type"] == "resource"
84
100
  }
85
101
 
86
102
 
87
103
 
104
+
88
105
  isField := func(f) {
89
106
  return ll.isStrict(f) && ll.fromStrict(f)["_type"] == "field"
90
107
  }
91
108
 
92
109
 
93
110
 
111
+
94
112
  isReference := func(f) {
95
113
  return isField(f) || isResource(f)
96
114
  }
@@ -104,6 +122,7 @@ return isField(f) || isResource(f)
104
122
 
105
123
 
106
124
 
125
+
107
126
  _getFutureField := func(from, name, fieldType, isEph) {
108
127
  ll.assert(isReference(from), "'from' must be either a resource or a field, got: %#v", from)
109
128
 
@@ -115,6 +134,7 @@ return field(futureField.ResultFID)
115
134
  }
116
135
 
117
136
 
137
+
118
138
  isMapResource := func(r) {
119
139
  return isResource(r) && (
120
140
  r.info().Type.Name == constants.RTYPE_MAP.Name ||
@@ -124,30 +144,36 @@ r.info().Type.Name == constants.RTYPE_MAP_ALT.Name) // @TODO get rid of alt name
124
144
 
125
145
 
126
146
 
147
+
127
148
  isEphMapResource := func(r) {
128
149
  return isResource(r) && r.info().Type.Name == constants.RTYPE_MAP_EPH.Name
129
150
  }
130
151
 
131
152
 
132
153
 
154
+
133
155
  isLockedEphMapResource := func(r) {
134
156
  return isEphMapResource(r) && r.info().InputsLocked
135
157
  }
136
158
 
137
159
 
138
160
 
161
+
139
162
  isAnyMapResource := func(r) {
140
163
  return isMapResource(r) || isEphMapResource(r)
141
164
  }
142
165
 
143
166
 
144
167
 
168
+
145
169
  isJsonResource := func(r) {
146
170
  return isResource(r) && r.info().Type.Name == constants.RTYPE_JSON.Name
147
171
  }
148
172
 
173
+
149
174
  _hasReferenceValues := func(object) {
150
175
  if isReference(object) {
176
+
151
177
  return true
152
178
  } else if ll.isMap(object) {
153
179
  for _, v in object {
@@ -168,11 +194,14 @@ return false
168
194
 
169
195
 
170
196
 
197
+
171
198
  _toRefOrJson := func(object) {
172
199
  if isReference(object) {
200
+
173
201
  return object
174
202
  } else if ll.isMap(object) {
175
203
 
204
+
176
205
  if !_hasReferenceValues(object) {
177
206
  return createJsonResource(object)
178
207
  }
@@ -185,6 +214,7 @@ mb.add(k, _toRefOrJson(v))
185
214
  return mb.build()
186
215
  } else if is_array(object) {
187
216
 
217
+
188
218
  ll.assert(!_hasReferenceValues(object), "array can't contain references")
189
219
 
190
220
  return createJsonResource(object)
@@ -200,6 +230,8 @@ return rType1.Name == rType2.Name && rType1.Version == rType2.Version
200
230
 
201
231
 
202
232
 
233
+
234
+
203
235
  resource = func(r) {
204
236
  self := undefined
205
237
  strictSelf := undefined
@@ -223,6 +255,7 @@ _type: "resource",
223
255
 
224
256
 
225
257
 
258
+
226
259
  id: id,
227
260
 
228
261
 
@@ -243,6 +276,7 @@ id: id,
243
276
 
244
277
 
245
278
 
279
+
246
280
  info: func() {
247
281
  return tx.getResource(self.id)
248
282
  },
@@ -252,12 +286,14 @@ return tx.getResource(self.id)
252
286
 
253
287
 
254
288
 
289
+
255
290
  checkResourceType: func(expectedType) {
256
291
  return resourceTypesEqual(self.info().Type, expectedType)
257
292
  },
258
293
 
259
294
 
260
295
 
296
+
261
297
  isReady: func() {
262
298
  return self.info().ResourceReady
263
299
  },
@@ -266,6 +302,9 @@ isEphemeral: func() {
266
302
  resourceInfo := self.info()
267
303
 
268
304
  if !maps.containsKey(resourceInfo, "Features") {
305
+
306
+
307
+
269
308
  return true
270
309
  }
271
310
 
@@ -276,6 +315,7 @@ return resourceInfo.Features.ephemeral
276
315
 
277
316
 
278
317
 
318
+
279
319
  getData: func() {
280
320
  if self.hasError() {
281
321
  ll.panic("resource has errors: ", self.info())
@@ -285,12 +325,14 @@ return self.info().Data;
285
325
 
286
326
 
287
327
 
328
+
288
329
  getDataAsJson: func() {
289
330
  return json.decode(self.getData());
290
331
  },
291
332
 
292
333
 
293
334
 
335
+
294
336
  hasError: func() {
295
337
  return self._hasField("OneTimeWritables", "resourceError")
296
338
  },
@@ -298,17 +340,19 @@ return self._hasField("OneTimeWritables", "resourceError")
298
340
 
299
341
 
300
342
 
343
+
301
344
  hasInputErrors: func() {
302
345
  return self.info().HasErrors
303
346
  },
304
347
 
305
348
 
306
349
 
350
+
307
351
  getError: func() {
308
352
  if !self.info().HasErrors {
309
353
  ll.panic("no error set in resource")
310
354
  }
311
- return self.getField("resourceError").getValue()
355
+ return self.getField("resourceError").getError()
312
356
  },
313
357
 
314
358
  _hasField: func(fieldMapName, fieldName) {
@@ -319,6 +363,7 @@ return ll.fromStrict(self.info()[fieldMapName])[fieldName] != undefined
319
363
 
320
364
 
321
365
 
366
+
322
367
  hasInputField: func(name) {
323
368
  return self._hasField("Inputs", name)
324
369
  },
@@ -327,6 +372,7 @@ return self._hasField("Inputs", name)
327
372
 
328
373
 
329
374
 
375
+
330
376
  hasOutputField: func(name) {
331
377
  return self._hasField("Outputs", name)
332
378
  },
@@ -335,6 +381,7 @@ return self._hasField("Outputs", name)
335
381
 
336
382
 
337
383
 
384
+
338
385
  hasField: func(name) {
339
386
  return self._hasField("Inputs", name) ||
340
387
  self._hasField("Outputs", name) ||
@@ -342,9 +389,11 @@ self._hasField("DynamicFields", name) ||
342
389
  self._hasField("OneTimeWritables", name)
343
390
  },
344
391
 
392
+
345
393
  _inputs: undefined,
346
394
 
347
395
 
396
+
348
397
  inputs: func() {
349
398
  if self._inputs == undefined {
350
399
  info := self.info()
@@ -357,9 +406,11 @@ self._inputs = inputs
357
406
  return self._inputs
358
407
  },
359
408
 
409
+
360
410
  _outputs: undefined,
361
411
 
362
412
 
413
+
363
414
  outputs: func() {
364
415
  if(self._outputs == undefined) {
365
416
  info := self.info()
@@ -376,6 +427,7 @@ return self._outputs
376
427
 
377
428
 
378
429
 
430
+
379
431
  getField: func(name) {
380
432
  if(!self.hasField(name)) {
381
433
  ll.panic("field %v is not found", name)
@@ -393,6 +445,7 @@ return field(ll.fieldId(self.id, name))
393
445
 
394
446
 
395
447
 
448
+
396
449
  getFutureField: func(name, fieldType, ...eph) {
397
450
  isEph := strictSelf.isEphemeral()
398
451
  if len(eph) > 0 {
@@ -409,6 +462,7 @@ return _getFutureField(strictSelf, name, fieldType, isEph)
409
462
 
410
463
 
411
464
 
465
+
412
466
  getFutureInputField: func(nameOrPath, ...eph) {
413
467
  isEph := strictSelf.isEphemeral()
414
468
  if len(eph) > 0 {
@@ -434,6 +488,7 @@ return self.getFutureField(nameOrPath, "input", isEph)
434
488
 
435
489
 
436
490
 
491
+
437
492
  getFutureOutputField: func(name, ...eph) {
438
493
  isEph := strictSelf.isEphemeral()
439
494
  if len(eph) > 0 {
@@ -441,6 +496,8 @@ isEph = eph[0]
441
496
  }
442
497
 
443
498
  if ll.apiVersion() < 1 && !isEph {
499
+
500
+
444
501
  return self.getFutureField(name, "output", true).expectNonEphemeral()
445
502
  }
446
503
 
@@ -451,6 +508,7 @@ return self.getFutureField(name, "output", isEph)
451
508
 
452
509
 
453
510
 
511
+
454
512
  get: func(name) {
455
513
  return self.getField(name).getValue()
456
514
  },
@@ -461,6 +519,7 @@ return self.getField(name).getValue()
461
519
 
462
520
 
463
521
 
522
+
464
523
  kvGet: func(key) {
465
524
  return tx.resourceKeyValueGet(self.id, key)
466
525
  },
@@ -471,6 +530,7 @@ return tx.resourceKeyValueGet(self.id, key)
471
530
 
472
531
 
473
532
 
533
+
474
534
  kvSet: func(key, value) {
475
535
  tx.resourceKeyValueSet(self.id, key, value)
476
536
  },
@@ -481,6 +541,7 @@ tx.resourceKeyValueSet(self.id, key, value)
481
541
 
482
542
 
483
543
 
544
+
484
545
  kvGetAsString: func(key) {
485
546
  value := tx.resourceKeyValueGet(self.id, key)
486
547
  if is_undefined(value) {
@@ -496,6 +557,7 @@ return string(value)
496
557
 
497
558
 
498
559
 
560
+
499
561
  kvGetAsJson: func(key) {
500
562
  bytes := self.kvGet(key)
501
563
  if is_undefined(bytes){
@@ -510,6 +572,7 @@ return json.decode(bytes)
510
572
 
511
573
 
512
574
 
575
+
513
576
  kvSetJson: func(key, value) {
514
577
  self.kvSet(key, json.encode(value))
515
578
  }
@@ -539,16 +602,19 @@ _type: "field",
539
602
 
540
603
 
541
604
 
605
+
542
606
  id: id,
543
607
 
544
608
 
545
609
 
610
+
546
611
  name: func() {
547
612
  return self.id.Name
548
613
  },
549
614
 
550
615
 
551
616
 
617
+
552
618
  resource: func() {
553
619
  return resource(self.id.ResourceID)
554
620
  },
@@ -562,24 +628,28 @@ return resource(self.id.ResourceID)
562
628
 
563
629
 
564
630
 
631
+
565
632
  info: func() {
566
633
  return tx.getField(self.id)
567
634
  },
568
635
 
569
636
 
570
637
 
638
+
571
639
  isSet: func() {
572
640
  return self.info().IsSet
573
641
  },
574
642
 
575
643
 
576
644
 
645
+
577
646
  isValueSet: func() {
578
647
  return self.info().Value != 0
579
648
  },
580
649
 
581
650
 
582
651
 
652
+
583
653
  isErrorSet: func() {
584
654
  return self.info().Error != 0
585
655
  },
@@ -589,10 +659,14 @@ return self.info().Error != 0
589
659
 
590
660
 
591
661
 
662
+
592
663
  isEphemeral: func() {
593
664
  fieldInfo := self.info()
594
665
 
595
666
  if !maps.containsKey(fieldInfo, "Features") {
667
+
668
+
669
+
596
670
  return true
597
671
  }
598
672
 
@@ -616,6 +690,7 @@ return rr
616
690
 
617
691
 
618
692
 
693
+
619
694
  setCache: func(time) {
620
695
  ll.assert(is_int(time) && time >= times.millisecond,
621
696
  "smart.field.setCache: cache time must be an integer >= millisecond. Did you forget to import a standard tengo library 'times'?")
@@ -628,6 +703,7 @@ return self
628
703
 
629
704
 
630
705
 
706
+
631
707
  setCacheMillis: func(millis) {
632
708
  ll.assert(is_int(millis) && millis > 0,
633
709
  "smart.field.setCacheMillis: cache time must be a number of milliseconds (> 0)")
@@ -638,6 +714,7 @@ return self.setCache(millis * times.millisecond)
638
714
 
639
715
 
640
716
 
717
+
641
718
  setCacheSeconds: func(seconds) {
642
719
  ll.assert(is_int(seconds) && seconds > 0,
643
720
  "smart.field.setCacheSeconds: cache time must be a number of seconds (> 0)")
@@ -648,6 +725,7 @@ return self.setCache(seconds * times.second)
648
725
 
649
726
 
650
727
 
728
+
651
729
  setCacheMinutes: func(minutes) {
652
730
  ll.assert(is_int(minutes) && minutes > 0,
653
731
  "smart.field.setCacheMinutes: cache time must be a number of minutes (> 0)")
@@ -658,6 +736,7 @@ return self.setCache(minutes * times.minute)
658
736
 
659
737
 
660
738
 
739
+
661
740
  setCacheHours: func(hours) {
662
741
  ll.assert(is_int(hours) && hours > 0, "smart.field.setCacheHours: cache time must be a number of hours (> 0)")
663
742
  return self.setCache(hours * times.hour)
@@ -667,6 +746,7 @@ return self.setCache(hours * times.hour)
667
746
 
668
747
 
669
748
 
749
+
670
750
  setCacheDays: func(days) {
671
751
  ll.assert(is_int(days) && days > 0, "smart.field.setCacheDays: cache time must be a number of days (> 0)")
672
752
  return self.setCache(days * 24 * times.hour)
@@ -674,6 +754,7 @@ return self.setCache(days * 24 * times.hour)
674
754
 
675
755
 
676
756
 
757
+
677
758
  getValue: func() {
678
759
  if self.isErrorSet() {
679
760
  err := self.getError().getDataAsJson()
@@ -690,6 +771,7 @@ return resource(self.info().Value)
690
771
 
691
772
 
692
773
 
774
+
693
775
  getError: func() {
694
776
  return resource(self.info().Error)
695
777
  },
@@ -698,6 +780,7 @@ return resource(self.info().Error)
698
780
 
699
781
 
700
782
 
783
+
701
784
  setJson: func(value) {
702
785
  self.set(createJsonResource(value))
703
786
  },
@@ -706,6 +789,7 @@ self.set(createJsonResource(value))
706
789
 
707
790
 
708
791
 
792
+
709
793
  setMap: func(keyToValue) {
710
794
  self.set(createMapResource(keyToValue))
711
795
  },
@@ -714,6 +798,7 @@ self.set(createMapResource(keyToValue))
714
798
 
715
799
 
716
800
 
801
+
717
802
  set: func(reference) {
718
803
  ll.assert(!self.isSet(), "field ", self.name(), " is already set")
719
804
 
@@ -731,6 +816,7 @@ ll.panic("smart resource or smart field expected (target field %v), got %#v: ",
731
816
 
732
817
 
733
818
 
819
+
734
820
  setRefOrJson: func(refOrJson) {
735
821
  if is_undefined(refOrJson) {
736
822
  ll.panic("attempt to assign undefined value to field %v", self.name())
@@ -740,6 +826,7 @@ self.set(_toRefOrJson(refOrJson))
740
826
 
741
827
 
742
828
 
829
+
743
830
  getValueAsJson: func() {
744
831
  return self.getValue().getDataAsJson()
745
832
  },
@@ -753,6 +840,7 @@ return self.getValue().getDataAsJson()
753
840
 
754
841
 
755
842
 
843
+
756
844
  getFutureField: func(name, fieldType, ...eph) {
757
845
  isEph := strictSelf.isEphemeral()
758
846
  if len(eph) > 0 {
@@ -769,6 +857,7 @@ return _getFutureField(strictSelf, name, fieldType, isEph)
769
857
 
770
858
 
771
859
 
860
+
772
861
  getFutureInputField: func(nameOrPath, ...eph) {
773
862
  isEph := strictSelf.isEphemeral()
774
863
  if len(eph) > 0 {
@@ -794,6 +883,7 @@ return self.getFutureField(nameOrPath, "input", eph...)
794
883
 
795
884
 
796
885
 
886
+
797
887
  getFutureOutputField: func(name, ...eph) {
798
888
  isEph := strictSelf.isEphemeral()
799
889
  if len(eph) > 0 {
@@ -801,6 +891,8 @@ isEph = eph[0]
801
891
  }
802
892
 
803
893
  if ll.apiVersion() < 1 && !isEph {
894
+
895
+
804
896
  return self.getFutureField(name, "output", true).expectNonEphemeral()
805
897
  }
806
898
 
@@ -818,11 +910,13 @@ return strictSelf
818
910
 
819
911
 
820
912
 
913
+
821
914
  resourceBuilder = func(r) {
822
915
  super := resource(r)
823
916
 
824
917
  self := undefined
825
918
 
919
+
826
920
  built := false
827
921
  assertNotBuilt := func() {
828
922
  ll.assert(!built, "builder methods must not be used after a build() was called")
@@ -834,6 +928,7 @@ self = ll.toStrict(oop.inherit(super, {
834
928
 
835
929
 
836
930
 
931
+
837
932
  createField: func(name, fieldType) {
838
933
  assertNotBuilt()
839
934
  fid := ll.fieldId(super.id, name)
@@ -845,6 +940,7 @@ return field(fid)
845
940
 
846
941
 
847
942
 
943
+
848
944
  createInputField: func(name) {
849
945
  assertNotBuilt()
850
946
  return self.createField(name, "input")
@@ -854,6 +950,7 @@ return self.createField(name, "input")
854
950
 
855
951
 
856
952
 
953
+
857
954
  createOutputField: func(name) {
858
955
  assertNotBuilt()
859
956
  return self.createField(name, "output")
@@ -861,6 +958,7 @@ return self.createField(name, "output")
861
958
 
862
959
 
863
960
 
961
+
864
962
  lockOutputs: func() {
865
963
  assertNotBuilt()
866
964
  tx.lockOutputs(super.id)
@@ -868,6 +966,7 @@ tx.lockOutputs(super.id)
868
966
 
869
967
 
870
968
 
969
+
871
970
  lockInputs: func() {
872
971
  assertNotBuilt()
873
972
  tx.lockInputs(super.id)
@@ -875,6 +974,7 @@ tx.lockInputs(super.id)
875
974
 
876
975
 
877
976
 
977
+
878
978
  lock: func() {
879
979
  assertNotBuilt()
880
980
  self.lockInputs()
@@ -883,6 +983,7 @@ self.lockOutputs()
883
983
 
884
984
 
885
985
 
986
+
886
987
  lockAndBuild: func() {
887
988
  self.lock()
888
989
  built = true
@@ -891,6 +992,7 @@ return super
891
992
 
892
993
 
893
994
 
995
+
894
996
  lockOutputsAndBuild: func() {
895
997
  self.lockOutputs()
896
998
  built = true
@@ -899,6 +1001,7 @@ return super
899
1001
 
900
1002
 
901
1003
 
1004
+
902
1005
  lockInputsAndBuild: func() {
903
1006
  self.lockInputs()
904
1007
  built = true
@@ -907,6 +1010,7 @@ return super
907
1010
 
908
1011
 
909
1012
 
1013
+
910
1014
  buildUnlocked: func() {
911
1015
  built = true
912
1016
  return super
@@ -921,6 +1025,7 @@ return self
921
1025
 
922
1026
 
923
1027
 
1028
+
924
1029
  structBuilder = func(resourceType, ...data) {
925
1030
  id := undefined
926
1031
  if len(data) > 0 {
@@ -934,8 +1039,10 @@ return resourceBuilder(id)
934
1039
 
935
1040
 
936
1041
 
1042
+
937
1043
  _mapBuilder := func(isEph) {
938
1044
  builder := isEph ? ephemeralBuilder(constants.RTYPE_MAP_EPH) : structBuilder(constants.RTYPE_MAP)
1045
+
939
1046
  builder.lockOutputs()
940
1047
 
941
1048
  self := undefined
@@ -947,6 +1054,7 @@ self = ll.toStrict(oop.inherit(builder, {
947
1054
 
948
1055
 
949
1056
 
1057
+
950
1058
  addRef: func(key, value) {
951
1059
  builder.createInputField(key).set(value)
952
1060
  return self
@@ -958,6 +1066,7 @@ return self
958
1066
 
959
1067
 
960
1068
 
1069
+
961
1070
  addJson: func(key, value) {
962
1071
  builder.createInputField(key).set(createJsonResource(value))
963
1072
  return self
@@ -969,6 +1078,7 @@ return self
969
1078
 
970
1079
 
971
1080
 
1081
+
972
1082
  add: func(key, value) {
973
1083
  builder.createInputField(key).setRefOrJson(value)
974
1084
  return self
@@ -979,6 +1089,7 @@ return self
979
1089
 
980
1090
 
981
1091
 
1092
+
982
1093
  build: func() {
983
1094
  return builder.lockAndBuild()
984
1095
  }
@@ -1015,8 +1126,10 @@ createJsonResource = func(value) {
1015
1126
  ll.assert(value != undefined, "can't create Json value from undefined")
1016
1127
 
1017
1128
 
1129
+
1018
1130
  ll.assert(!ll.isStrict(value), "can't encode strict map: ", value)
1019
1131
 
1132
+
1020
1133
  encoded := json.encode(value)
1021
1134
  return createValueResource(constants.RTYPE_JSON, encoded)
1022
1135
  }