@platforma-sdk/workflow-tengo 2.8.3 → 2.8.5
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 +6 -0
- package/dist/tengo/lib/constants.lib.tengo +3 -0
- package/dist/tengo/lib/exec.R.internal.lib.tengo +1 -0
- package/dist/tengo/lib/exec.R.lib.tengo +8 -0
- package/dist/tengo/lib/exec.internal.lib.tengo +13 -0
- package/dist/tengo/lib/exec.lib.tengo +67 -0
- package/dist/tengo/lib/exec.package.lib.tengo +9 -0
- package/dist/tengo/lib/exec.python.internal.lib.tengo +1 -0
- package/dist/tengo/lib/exec.python.lib.tengo +8 -0
- package/dist/tengo/lib/exec.runcmd.lib.tengo +19 -0
- package/dist/tengo/lib/exec.runenv.lib.tengo +4 -0
- package/dist/tengo/lib/exec.stream.lib.tengo +4 -0
- package/dist/tengo/lib/file.internal.lib.tengo +7 -0
- package/dist/tengo/lib/file.lib.tengo +3 -0
- package/dist/tengo/lib/ll.lib.tengo +24 -0
- package/dist/tengo/lib/maps.lib.tengo +8 -0
- package/dist/tengo/lib/objects.lib.tengo +2 -0
- package/dist/tengo/lib/oop.lib.tengo +3 -0
- package/dist/tengo/lib/path.lib.tengo +9 -0
- package/dist/tengo/lib/pframes.constants.lib.tengo +3 -0
- package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +5 -0
- package/dist/tengo/lib/pframes.lib.tengo +5 -0
- package/dist/tengo/lib/pframes.ll.lib.tengo +2 -0
- package/dist/tengo/lib/pframes.pcolumn.lib.tengo +4 -0
- package/dist/tengo/lib/pframes.spec.lib.tengo +26 -0
- package/dist/tengo/lib/pframes.util.lib.tengo +134 -0
- package/dist/tengo/lib/pframes.xsv.lib.tengo +12 -0
- package/dist/tengo/lib/render.lib.tengo +10 -0
- package/dist/tengo/lib/sets.lib.tengo +7 -0
- package/dist/tengo/lib/slices.lib.tengo +11 -0
- package/dist/tengo/lib/smart.lib.tengo +113 -0
- package/dist/tengo/lib/test.lib.tengo +32 -0
- package/dist/tengo/lib/tpl.lib.tengo +68 -0
- package/dist/tengo/lib/tpl.state-await.lib.tengo +14 -0
- package/dist/tengo/lib/tpl.util.lib.tengo +5 -0
- package/dist/tengo/lib/validation.lib.tengo +44 -0
- package/dist/tengo/lib/workdir.lib.tengo +22 -0
- package/dist/tengo/lib/workdir.proc.lib.tengo +18 -0
- package/dist/tengo/lib/workdir.save.lib.tengo +17 -0
- package/dist/tengo/lib/workflow.bobject.lib.tengo +5 -0
- package/dist/tengo/lib/workflow.bquery.lib.tengo +25 -0
- package/dist/tengo/lib/workflow.constants.lib.tengo +1 -0
- package/dist/tengo/lib/workflow.context.lib.tengo +5 -0
- package/dist/tengo/lib/workflow.lib.tengo +39 -0
- 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 +1 -1
|
@@ -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,12 +340,14 @@ 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")
|
|
@@ -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
|
}
|