@milaboratories/pl-client 2.17.7 → 2.17.9
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/_virtual/_rolldown/runtime.cjs +43 -0
- package/dist/_virtual/_rolldown/runtime.js +18 -0
- package/dist/core/PromiseTracker.cjs +33 -33
- package/dist/core/PromiseTracker.cjs.map +1 -1
- package/dist/core/PromiseTracker.d.ts +10 -7
- package/dist/core/PromiseTracker.js +33 -31
- package/dist/core/PromiseTracker.js.map +1 -1
- package/dist/core/StatefulPromise.cjs +60 -61
- package/dist/core/StatefulPromise.cjs.map +1 -1
- package/dist/core/StatefulPromise.js +60 -60
- package/dist/core/StatefulPromise.js.map +1 -1
- package/dist/core/abstract_stream.d.ts +18 -15
- package/dist/core/advisory_locks.cjs +42 -49
- package/dist/core/advisory_locks.cjs.map +1 -1
- package/dist/core/advisory_locks.js +42 -48
- package/dist/core/advisory_locks.js.map +1 -1
- package/dist/core/auth.cjs +10 -15
- package/dist/core/auth.cjs.map +1 -1
- package/dist/core/auth.d.ts +7 -3
- package/dist/core/auth.js +10 -13
- package/dist/core/auth.js.map +1 -1
- package/dist/core/cache.d.ts +11 -7
- package/dist/core/client.cjs +255 -306
- package/dist/core/client.cjs.map +1 -1
- package/dist/core/client.d.ts +72 -68
- package/dist/core/client.js +253 -285
- package/dist/core/client.js.map +1 -1
- package/dist/core/config.cjs +81 -99
- package/dist/core/config.cjs.map +1 -1
- package/dist/core/config.d.ts +93 -90
- package/dist/core/config.js +81 -98
- package/dist/core/config.js.map +1 -1
- package/dist/core/default_client.cjs +84 -125
- package/dist/core/default_client.cjs.map +1 -1
- package/dist/core/default_client.d.ts +9 -6
- package/dist/core/default_client.js +78 -103
- package/dist/core/default_client.js.map +1 -1
- package/dist/core/driver.cjs +12 -16
- package/dist/core/driver.cjs.map +1 -1
- package/dist/core/driver.d.ts +18 -14
- package/dist/core/driver.js +12 -15
- package/dist/core/driver.js.map +1 -1
- package/dist/core/error_resource.cjs +5 -4
- package/dist/core/error_resource.cjs.map +1 -1
- package/dist/core/error_resource.js +5 -3
- package/dist/core/error_resource.js.map +1 -1
- package/dist/core/errors.cjs +104 -140
- package/dist/core/errors.cjs.map +1 -1
- package/dist/core/errors.d.ts +34 -30
- package/dist/core/errors.js +102 -137
- package/dist/core/errors.js.map +1 -1
- package/dist/core/final.cjs +63 -89
- package/dist/core/final.cjs.map +1 -1
- package/dist/core/final.d.ts +8 -4
- package/dist/core/final.js +63 -87
- package/dist/core/final.js.map +1 -1
- package/dist/core/ll_client.cjs +416 -521
- package/dist/core/ll_client.cjs.map +1 -1
- package/dist/core/ll_client.d.ts +100 -97
- package/dist/core/ll_client.js +415 -519
- package/dist/core/ll_client.js.map +1 -1
- package/dist/core/ll_transaction.cjs +206 -240
- package/dist/core/ll_transaction.cjs.map +1 -1
- package/dist/core/ll_transaction.d.ts +50 -52
- package/dist/core/ll_transaction.js +205 -238
- package/dist/core/ll_transaction.js.map +1 -1
- package/dist/core/stat.cjs +64 -63
- package/dist/core/stat.cjs.map +1 -1
- package/dist/core/stat.d.ts +35 -36
- package/dist/core/stat.js +64 -62
- package/dist/core/stat.js.map +1 -1
- package/dist/core/transaction.cjs +613 -650
- package/dist/core/transaction.cjs.map +1 -1
- package/dist/core/transaction.d.ts +165 -162
- package/dist/core/transaction.js +612 -648
- package/dist/core/transaction.js.map +1 -1
- package/dist/core/type_conversion.cjs +62 -83
- package/dist/core/type_conversion.cjs.map +1 -1
- package/dist/core/type_conversion.js +61 -81
- package/dist/core/type_conversion.js.map +1 -1
- package/dist/core/types.cjs +56 -86
- package/dist/core/types.cjs.map +1 -1
- package/dist/core/types.d.ts +63 -62
- package/dist/core/types.js +54 -83
- package/dist/core/types.js.map +1 -1
- package/dist/core/unauth_client.cjs +35 -41
- package/dist/core/unauth_client.cjs.map +1 -1
- package/dist/core/unauth_client.d.ts +18 -14
- package/dist/core/unauth_client.js +34 -39
- package/dist/core/unauth_client.js.map +1 -1
- package/dist/core/websocket_stream.cjs +280 -349
- package/dist/core/websocket_stream.cjs.map +1 -1
- package/dist/core/websocket_stream.js +278 -347
- package/dist/core/websocket_stream.js.map +1 -1
- package/dist/core/wire.d.ts +21 -17
- package/dist/helpers/pl.cjs +71 -73
- package/dist/helpers/pl.cjs.map +1 -1
- package/dist/helpers/pl.d.ts +40 -41
- package/dist/helpers/pl.js +66 -46
- package/dist/helpers/pl.js.map +1 -1
- package/dist/helpers/poll.cjs +99 -134
- package/dist/helpers/poll.cjs.map +1 -1
- package/dist/helpers/poll.d.ts +37 -34
- package/dist/helpers/poll.js +97 -113
- package/dist/helpers/poll.js.map +1 -1
- package/dist/helpers/retry_strategy.cjs +82 -87
- package/dist/helpers/retry_strategy.cjs.map +1 -1
- package/dist/helpers/retry_strategy.js +83 -86
- package/dist/helpers/retry_strategy.js.map +1 -1
- package/dist/helpers/tx_helpers.cjs +21 -20
- package/dist/helpers/tx_helpers.cjs.map +1 -1
- package/dist/helpers/tx_helpers.d.ts +11 -7
- package/dist/helpers/tx_helpers.js +20 -18
- package/dist/helpers/tx_helpers.js.map +1 -1
- package/dist/index.cjs +117 -106
- package/dist/index.d.ts +17 -17
- package/dist/index.js +17 -19
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs +72 -66
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs.map +1 -1
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.d.ts +35 -37
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js +71 -64
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs +12611 -12866
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs +226 -226
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts +281 -330
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js +225 -224
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts +2640 -4294
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js +12608 -12706
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs +1230 -1089
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts +393 -420
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js +1228 -1083
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs +142 -143
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts +62 -64
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js +140 -141
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs +572 -487
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts +125 -228
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js +572 -485
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js.map +1 -1
- package/dist/proto-grpc/google/protobuf/any.cjs +131 -146
- package/dist/proto-grpc/google/protobuf/any.cjs.map +1 -1
- package/dist/proto-grpc/google/protobuf/any.d.ts +78 -84
- package/dist/proto-grpc/google/protobuf/any.js +130 -144
- package/dist/proto-grpc/google/protobuf/any.js.map +1 -1
- package/dist/proto-grpc/google/protobuf/duration.cjs +92 -100
- package/dist/proto-grpc/google/protobuf/duration.cjs.map +1 -1
- package/dist/proto-grpc/google/protobuf/duration.d.ts +38 -43
- package/dist/proto-grpc/google/protobuf/duration.js +91 -98
- package/dist/proto-grpc/google/protobuf/duration.js.map +1 -1
- package/dist/proto-grpc/google/protobuf/timestamp.cjs +117 -128
- package/dist/proto-grpc/google/protobuf/timestamp.cjs.map +1 -1
- package/dist/proto-grpc/google/protobuf/timestamp.d.ts +50 -55
- package/dist/proto-grpc/google/protobuf/timestamp.js +116 -126
- package/dist/proto-grpc/google/protobuf/timestamp.js.map +1 -1
- package/dist/proto-grpc/google/rpc/code.cjs +223 -238
- package/dist/proto-grpc/google/rpc/code.cjs.map +1 -1
- package/dist/proto-grpc/google/rpc/code.d.ts +209 -206
- package/dist/proto-grpc/google/rpc/code.js +221 -237
- package/dist/proto-grpc/google/rpc/code.js.map +1 -1
- package/dist/proto-rest/index.cjs +67 -66
- package/dist/proto-rest/index.cjs.map +1 -1
- package/dist/proto-rest/index.d.ts +24 -18
- package/dist/proto-rest/index.js +61 -65
- package/dist/proto-rest/index.js.map +1 -1
- package/dist/proto-rest/plapi.d.ts +1400 -1477
- package/dist/test/tcp-proxy.cjs +100 -126
- package/dist/test/tcp-proxy.cjs.map +1 -1
- package/dist/test/tcp-proxy.d.ts +17 -13
- package/dist/test/tcp-proxy.js +97 -104
- package/dist/test/tcp-proxy.js.map +1 -1
- package/dist/test/test_config.cjs +145 -194
- package/dist/test/test_config.cjs.map +1 -1
- package/dist/test/test_config.d.ts +34 -30
- package/dist/test/test_config.js +138 -166
- package/dist/test/test_config.js.map +1 -1
- package/dist/util/pl.cjs +4 -3
- package/dist/util/pl.cjs.map +1 -1
- package/dist/util/pl.js +4 -2
- package/dist/util/pl.js.map +1 -1
- package/dist/util/util.cjs +7 -10
- package/dist/util/util.cjs.map +1 -1
- package/dist/util/util.js +7 -9
- package/dist/util/util.js.map +1 -1
- package/package.json +8 -8
- package/src/core/errors.ts +1 -1
- package/src/core/transaction.ts +123 -133
- package/src/core/websocket_stream.ts +10 -1
- package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs +0 -61
- package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs.map +0 -1
- package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js +0 -58
- package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js.map +0 -1
- package/dist/core/PromiseTracker.d.ts.map +0 -1
- package/dist/core/StatefulPromise.d.ts +0 -39
- package/dist/core/StatefulPromise.d.ts.map +0 -1
- package/dist/core/abstract_stream.d.ts.map +0 -1
- package/dist/core/advisory_locks.d.ts +0 -10
- package/dist/core/advisory_locks.d.ts.map +0 -1
- package/dist/core/auth.d.ts.map +0 -1
- package/dist/core/cache.d.ts.map +0 -1
- package/dist/core/client.d.ts.map +0 -1
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/default_client.d.ts.map +0 -1
- package/dist/core/driver.d.ts.map +0 -1
- package/dist/core/error_resource.d.ts +0 -6
- package/dist/core/error_resource.d.ts.map +0 -1
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/final.d.ts.map +0 -1
- package/dist/core/ll_client.d.ts.map +0 -1
- package/dist/core/ll_transaction.d.ts.map +0 -1
- package/dist/core/stat.d.ts.map +0 -1
- package/dist/core/transaction.d.ts.map +0 -1
- package/dist/core/type_conversion.d.ts +0 -8
- package/dist/core/type_conversion.d.ts.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/unauth_client.d.ts.map +0 -1
- package/dist/core/websocket_stream.d.ts +0 -67
- package/dist/core/websocket_stream.d.ts.map +0 -1
- package/dist/core/wire.d.ts.map +0 -1
- package/dist/helpers/pl.d.ts.map +0 -1
- package/dist/helpers/poll.d.ts.map +0 -1
- package/dist/helpers/retry_strategy.d.ts +0 -24
- package/dist/helpers/retry_strategy.d.ts.map +0 -1
- package/dist/helpers/state_helpers.d.ts +0 -3
- package/dist/helpers/state_helpers.d.ts.map +0 -1
- package/dist/helpers/tx_helpers.d.ts.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/import.d.ts +0 -106
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/import.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/ws-test.d.ts +0 -73
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/ws-test.d.ts.map +0 -1
- package/dist/proto-grpc/google/api/http.d.ts +0 -456
- package/dist/proto-grpc/google/api/http.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/any.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/descriptor.d.ts +0 -2340
- package/dist/proto-grpc/google/protobuf/descriptor.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/duration.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/empty.d.ts +0 -32
- package/dist/proto-grpc/google/protobuf/empty.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/struct.d.ts +0 -187
- package/dist/proto-grpc/google/protobuf/struct.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/timestamp.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/wrappers.d.ts +0 -308
- package/dist/proto-grpc/google/protobuf/wrappers.d.ts.map +0 -1
- package/dist/proto-grpc/google/rpc/code.d.ts.map +0 -1
- package/dist/proto-grpc/google/rpc/error_details.d.ts +0 -654
- package/dist/proto-grpc/google/rpc/error_details.d.ts.map +0 -1
- package/dist/proto-grpc/google/rpc/http.d.ts +0 -121
- package/dist/proto-grpc/google/rpc/http.d.ts.map +0 -1
- package/dist/proto-grpc/google/rpc/status.d.ts +0 -55
- package/dist/proto-grpc/google/rpc/status.d.ts.map +0 -1
- package/dist/proto-rest/index.d.ts.map +0 -1
- package/dist/proto-rest/plapi.d.ts.map +0 -1
- package/dist/test/tcp-proxy.d.ts.map +0 -1
- package/dist/test/test_config.d.ts.map +0 -1
- package/dist/util/branding.d.ts +0 -7
- package/dist/util/branding.d.ts.map +0 -1
- package/dist/util/pl.d.ts +0 -9
- package/dist/util/pl.d.ts.map +0 -1
- package/dist/util/util.d.ts +0 -2
- package/dist/util/util.d.ts.map +0 -1
package/dist/helpers/pl.js
CHANGED
|
@@ -1,15 +1,43 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { field } from "../core/transaction.js";
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
//#region src/helpers/pl.ts
|
|
5
|
+
var pl_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
+
ClientRoot: () => ClientRoot,
|
|
7
|
+
EphHolder: () => EphHolder,
|
|
8
|
+
EphStdMap: () => EphStdMap,
|
|
9
|
+
Holder: () => Holder,
|
|
10
|
+
HolderRefField: () => HolderRefField,
|
|
11
|
+
JsonArray: () => JsonArray,
|
|
12
|
+
JsonBool: () => JsonBool,
|
|
13
|
+
JsonGzObject: () => JsonGzObject,
|
|
14
|
+
JsonNull: () => JsonNull,
|
|
15
|
+
JsonNumber: () => JsonNumber,
|
|
16
|
+
JsonObject: () => JsonObject,
|
|
17
|
+
JsonString: () => JsonString,
|
|
18
|
+
RNull: () => RNull,
|
|
19
|
+
StdMap: () => StdMap,
|
|
20
|
+
StructTestResource: () => StructTestResource,
|
|
21
|
+
ValueTestResource: () => ValueTestResource,
|
|
22
|
+
createPlArray: () => createPlArray,
|
|
23
|
+
createPlBool: () => createPlBool,
|
|
24
|
+
createPlMap: () => createPlMap,
|
|
25
|
+
createPlNull: () => createPlNull,
|
|
26
|
+
createPlNumber: () => createPlNumber,
|
|
27
|
+
createPlObject: () => createPlObject,
|
|
28
|
+
createPlString: () => createPlString,
|
|
29
|
+
futureRecord: () => futureRecord,
|
|
30
|
+
plEntries: () => plEntries,
|
|
31
|
+
plEntry: () => plEntry,
|
|
32
|
+
unwrapHolder: () => unwrapHolder,
|
|
33
|
+
wrapInEphHolder: () => wrapInEphHolder,
|
|
34
|
+
wrapInHolder: () => wrapInHolder
|
|
35
|
+
});
|
|
11
36
|
function rt(name, version) {
|
|
12
|
-
|
|
37
|
+
return {
|
|
38
|
+
name,
|
|
39
|
+
version
|
|
40
|
+
};
|
|
13
41
|
}
|
|
14
42
|
const ClientRoot = rt("ClientRoot", "1");
|
|
15
43
|
const StructTestResource = rt("StructTest", "1");
|
|
@@ -24,71 +52,63 @@ const JsonNull = rt("json/null", "1");
|
|
|
24
52
|
const RNull = rt("Null", "1");
|
|
25
53
|
const EphStdMap = rt("EphStdMap", "1");
|
|
26
54
|
const StdMap = rt("StdMap", "1");
|
|
27
|
-
//
|
|
28
|
-
// Standard value resources
|
|
29
|
-
//
|
|
30
55
|
function createPlNull(tx) {
|
|
31
|
-
|
|
56
|
+
return tx.createValue(JsonNull, Buffer.from(JSON.stringify(null)));
|
|
32
57
|
}
|
|
33
58
|
function createPlBool(tx, val) {
|
|
34
|
-
|
|
59
|
+
return tx.createValue(JsonBool, Buffer.from(JSON.stringify(val)));
|
|
35
60
|
}
|
|
36
61
|
function createPlNumber(tx, val) {
|
|
37
|
-
|
|
62
|
+
return tx.createValue(JsonNumber, Buffer.from(JSON.stringify(val)));
|
|
38
63
|
}
|
|
39
64
|
function createPlString(tx, val) {
|
|
40
|
-
|
|
65
|
+
return tx.createValue(JsonString, Buffer.from(JSON.stringify(val)));
|
|
41
66
|
}
|
|
42
67
|
function createPlArray(tx, val) {
|
|
43
|
-
|
|
68
|
+
return tx.createValue(JsonArray, Buffer.from(JSON.stringify(val)));
|
|
44
69
|
}
|
|
45
70
|
function createPlObject(tx, val) {
|
|
46
|
-
|
|
71
|
+
return tx.createValue(JsonObject, Buffer.from(JSON.stringify(val)));
|
|
47
72
|
}
|
|
48
73
|
function plEntry(key, ref) {
|
|
49
|
-
|
|
74
|
+
return [key, ref];
|
|
50
75
|
}
|
|
51
76
|
function plEntries(record, fields) {
|
|
52
|
-
|
|
53
|
-
? Object.entries(record)
|
|
54
|
-
: fields.map((key) => plEntry(key, record[key]));
|
|
77
|
+
return fields === void 0 ? Object.entries(record) : fields.map((key) => plEntry(key, record[key]));
|
|
55
78
|
}
|
|
56
79
|
/** Helper method to build standard pl map from a set of entries */
|
|
57
80
|
function createPlMap(tx, entries, ephemeral, type) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return rId;
|
|
81
|
+
const actualType = type ?? (ephemeral ? EphStdMap : StdMap);
|
|
82
|
+
const rId = ephemeral ? tx.createEphemeral(actualType) : tx.createStruct(actualType);
|
|
83
|
+
for (const [name, value] of Array.isArray(entries) ? entries : plEntries(entries)) tx.createField(field(rId, name), "Input", value);
|
|
84
|
+
tx.lock(rId);
|
|
85
|
+
return rId;
|
|
64
86
|
}
|
|
65
87
|
function futureRecord(tx, rId, keys, fieldType, prefix = "") {
|
|
66
|
-
|
|
88
|
+
return Object.fromEntries(keys.map((k) => plEntry(k, tx.getFutureFieldValue(rId, `${prefix}${k}`, fieldType))));
|
|
67
89
|
}
|
|
68
|
-
//
|
|
69
|
-
// Holder
|
|
70
|
-
//
|
|
71
90
|
/** Name of the field in block holder, that references the actual block-pack. */
|
|
72
91
|
const Holder = StdMap;
|
|
73
92
|
const EphHolder = EphStdMap;
|
|
74
93
|
const HolderRefField = "ref";
|
|
75
94
|
function wrapInHolder(tx, ref) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
95
|
+
const holder = tx.createStruct(Holder);
|
|
96
|
+
const mainHolderField = field(holder, HolderRefField);
|
|
97
|
+
tx.createField(mainHolderField, "Input", ref);
|
|
98
|
+
tx.lock(holder);
|
|
99
|
+
return holder;
|
|
81
100
|
}
|
|
82
101
|
function wrapInEphHolder(tx, ref) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
102
|
+
const holder = tx.createEphemeral(EphHolder);
|
|
103
|
+
const mainHolderField = field(holder, HolderRefField);
|
|
104
|
+
tx.createField(mainHolderField, "Input", ref);
|
|
105
|
+
tx.lock(holder);
|
|
106
|
+
return holder;
|
|
88
107
|
}
|
|
89
108
|
function unwrapHolder(tx, ref) {
|
|
90
|
-
|
|
109
|
+
return tx.getFutureFieldValue(ref, HolderRefField, "Input");
|
|
91
110
|
}
|
|
92
111
|
|
|
93
|
-
|
|
94
|
-
|
|
112
|
+
//#endregion
|
|
113
|
+
export { ClientRoot, JsonGzObject, JsonObject, pl_exports };
|
|
114
|
+
//# sourceMappingURL=pl.js.map
|
package/dist/helpers/pl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pl.js","sources":["../../src/helpers/pl.ts"],"sourcesContent":["/**\n * @packageDocumentation\n *\n * This file is exported under Pl \"namespace\" to the client users.\n *\n * It defines well known pl types, and methods to manipulate them.\n *\n */\n\nimport type { FutureFieldType, ResourceType } from \"../core/types\";\nimport type { AnyRef, FieldRef, PlTransaction, ResourceRef } from \"../core/transaction\";\nimport { field } from \"../core/transaction\";\n\nfunction rt(name: string, version: string): ResourceType {\n return { name, version };\n}\n\nexport const ClientRoot = rt(\"ClientRoot\", \"1\");\n\nexport const StructTestResource = rt(\"StructTest\", \"1\");\nexport const ValueTestResource = rt(\"ValueTest\", \"1\");\n\nexport const JsonString = rt(\"json/string\", \"1\");\nexport const JsonBool = rt(\"json/bool\", \"1\");\nexport const JsonObject = rt(\"json/object\", \"1\");\nexport const JsonGzObject = rt(\"json-gz/object\", \"1\");\nexport const JsonArray = rt(\"json/array\", \"1\");\nexport const JsonNumber = rt(\"json/number\", \"1\");\nexport const JsonNull = rt(\"json/null\", \"1\");\n\nexport const RNull = rt(\"Null\", \"1\");\n\nexport const EphStdMap: ResourceType = rt(\"EphStdMap\", \"1\");\nexport const StdMap: ResourceType = rt(\"StdMap\", \"1\");\n\n//\n// Standard value resources\n//\n\nexport function createPlNull(tx: PlTransaction): ResourceRef {\n return tx.createValue(JsonNull, Buffer.from(JSON.stringify(null)));\n}\n\nexport function createPlBool(tx: PlTransaction, val: boolean): ResourceRef {\n return tx.createValue(JsonBool, Buffer.from(JSON.stringify(val)));\n}\n\nexport function createPlNumber(tx: PlTransaction, val: number): ResourceRef {\n return tx.createValue(JsonNumber, Buffer.from(JSON.stringify(val)));\n}\n\nexport function createPlString(tx: PlTransaction, val: string): ResourceRef {\n return tx.createValue(JsonString, Buffer.from(JSON.stringify(val)));\n}\n\nexport function createPlArray(tx: PlTransaction, val: any[]): ResourceRef {\n return tx.createValue(JsonArray, Buffer.from(JSON.stringify(val)));\n}\n\nexport function createPlObject(tx: PlTransaction, val: object): ResourceRef {\n return tx.createValue(JsonObject, Buffer.from(JSON.stringify(val)));\n}\n\n//\n// Pl Map\n//\n\nexport type PlRecordEntry<Key extends string = string, Ref extends AnyRef = AnyRef> = [Key, Ref];\n\nexport type PlRecord<Key extends string = string, Ref extends AnyRef = AnyRef> = Record<Key, Ref>;\n\nexport function plEntry<Key extends string = string, Ref extends AnyRef = AnyRef>(\n key: Key,\n ref: Ref,\n): PlRecordEntry<Key, Ref> {\n return [key, ref];\n}\n\nexport function plEntries<Key extends string = string, Ref extends AnyRef = AnyRef>(\n record: PlRecord<Key, Ref>,\n fields?: Key[],\n): PlRecordEntry<Key, Ref>[] {\n return fields === undefined\n ? (Object.entries(record) as PlRecordEntry<Key, Ref>[])\n : fields.map((key) => plEntry(key, record[key]));\n}\n\n/** Helper method to build standard pl map from a set of entries */\nexport function createPlMap(\n tx: PlTransaction,\n entries: PlRecordEntry[] | PlRecord,\n ephemeral: boolean,\n type?: ResourceType,\n): ResourceRef {\n const actualType = type ?? (ephemeral ? EphStdMap : StdMap);\n const rId = ephemeral ? tx.createEphemeral(actualType) : tx.createStruct(actualType);\n\n for (const [name, value] of Array.isArray(entries) ? entries : plEntries(entries))\n tx.createField(field(rId, name), \"Input\", value);\n\n tx.lock(rId);\n\n return rId;\n}\n\nexport function futureRecord<Key extends string>(\n tx: PlTransaction,\n rId: AnyRef,\n keys: Key[],\n fieldType: FutureFieldType,\n prefix: string = \"\",\n): PlRecord<Key, FieldRef> {\n return Object.fromEntries(\n keys.map((k) => plEntry(k, tx.getFutureFieldValue(rId, `${prefix}${k}`, fieldType))),\n ) as PlRecord<Key, FieldRef>;\n}\n\n//\n// Holder\n//\n\n/** Name of the field in block holder, that references the actual block-pack. */\nexport const Holder = StdMap;\nexport const EphHolder = EphStdMap;\nexport const HolderRefField = \"ref\";\n\nexport function wrapInHolder(tx: PlTransaction, ref: AnyRef): ResourceRef {\n const holder = tx.createStruct(Holder);\n const mainHolderField = field(holder, HolderRefField);\n tx.createField(mainHolderField, \"Input\", ref);\n tx.lock(holder);\n return holder;\n}\n\nexport function wrapInEphHolder(tx: PlTransaction, ref: AnyRef): ResourceRef {\n const holder = tx.createEphemeral(EphHolder);\n const mainHolderField = field(holder, HolderRefField);\n tx.createField(mainHolderField, \"Input\", ref);\n tx.lock(holder);\n return holder;\n}\n\nexport function unwrapHolder(tx: PlTransaction, ref: AnyRef): FieldRef {\n return tx.getFutureFieldValue(ref, HolderRefField, \"Input\");\n}\n"],"
|
|
1
|
+
{"version":3,"file":"pl.js","names":[],"sources":["../../src/helpers/pl.ts"],"sourcesContent":["/**\n * @packageDocumentation\n *\n * This file is exported under Pl \"namespace\" to the client users.\n *\n * It defines well known pl types, and methods to manipulate them.\n *\n */\n\nimport type { FutureFieldType, ResourceType } from \"../core/types\";\nimport type { AnyRef, FieldRef, PlTransaction, ResourceRef } from \"../core/transaction\";\nimport { field } from \"../core/transaction\";\n\nfunction rt(name: string, version: string): ResourceType {\n return { name, version };\n}\n\nexport const ClientRoot = rt(\"ClientRoot\", \"1\");\n\nexport const StructTestResource = rt(\"StructTest\", \"1\");\nexport const ValueTestResource = rt(\"ValueTest\", \"1\");\n\nexport const JsonString = rt(\"json/string\", \"1\");\nexport const JsonBool = rt(\"json/bool\", \"1\");\nexport const JsonObject = rt(\"json/object\", \"1\");\nexport const JsonGzObject = rt(\"json-gz/object\", \"1\");\nexport const JsonArray = rt(\"json/array\", \"1\");\nexport const JsonNumber = rt(\"json/number\", \"1\");\nexport const JsonNull = rt(\"json/null\", \"1\");\n\nexport const RNull = rt(\"Null\", \"1\");\n\nexport const EphStdMap: ResourceType = rt(\"EphStdMap\", \"1\");\nexport const StdMap: ResourceType = rt(\"StdMap\", \"1\");\n\n//\n// Standard value resources\n//\n\nexport function createPlNull(tx: PlTransaction): ResourceRef {\n return tx.createValue(JsonNull, Buffer.from(JSON.stringify(null)));\n}\n\nexport function createPlBool(tx: PlTransaction, val: boolean): ResourceRef {\n return tx.createValue(JsonBool, Buffer.from(JSON.stringify(val)));\n}\n\nexport function createPlNumber(tx: PlTransaction, val: number): ResourceRef {\n return tx.createValue(JsonNumber, Buffer.from(JSON.stringify(val)));\n}\n\nexport function createPlString(tx: PlTransaction, val: string): ResourceRef {\n return tx.createValue(JsonString, Buffer.from(JSON.stringify(val)));\n}\n\nexport function createPlArray(tx: PlTransaction, val: any[]): ResourceRef {\n return tx.createValue(JsonArray, Buffer.from(JSON.stringify(val)));\n}\n\nexport function createPlObject(tx: PlTransaction, val: object): ResourceRef {\n return tx.createValue(JsonObject, Buffer.from(JSON.stringify(val)));\n}\n\n//\n// Pl Map\n//\n\nexport type PlRecordEntry<Key extends string = string, Ref extends AnyRef = AnyRef> = [Key, Ref];\n\nexport type PlRecord<Key extends string = string, Ref extends AnyRef = AnyRef> = Record<Key, Ref>;\n\nexport function plEntry<Key extends string = string, Ref extends AnyRef = AnyRef>(\n key: Key,\n ref: Ref,\n): PlRecordEntry<Key, Ref> {\n return [key, ref];\n}\n\nexport function plEntries<Key extends string = string, Ref extends AnyRef = AnyRef>(\n record: PlRecord<Key, Ref>,\n fields?: Key[],\n): PlRecordEntry<Key, Ref>[] {\n return fields === undefined\n ? (Object.entries(record) as PlRecordEntry<Key, Ref>[])\n : fields.map((key) => plEntry(key, record[key]));\n}\n\n/** Helper method to build standard pl map from a set of entries */\nexport function createPlMap(\n tx: PlTransaction,\n entries: PlRecordEntry[] | PlRecord,\n ephemeral: boolean,\n type?: ResourceType,\n): ResourceRef {\n const actualType = type ?? (ephemeral ? EphStdMap : StdMap);\n const rId = ephemeral ? tx.createEphemeral(actualType) : tx.createStruct(actualType);\n\n for (const [name, value] of Array.isArray(entries) ? entries : plEntries(entries))\n tx.createField(field(rId, name), \"Input\", value);\n\n tx.lock(rId);\n\n return rId;\n}\n\nexport function futureRecord<Key extends string>(\n tx: PlTransaction,\n rId: AnyRef,\n keys: Key[],\n fieldType: FutureFieldType,\n prefix: string = \"\",\n): PlRecord<Key, FieldRef> {\n return Object.fromEntries(\n keys.map((k) => plEntry(k, tx.getFutureFieldValue(rId, `${prefix}${k}`, fieldType))),\n ) as PlRecord<Key, FieldRef>;\n}\n\n//\n// Holder\n//\n\n/** Name of the field in block holder, that references the actual block-pack. */\nexport const Holder = StdMap;\nexport const EphHolder = EphStdMap;\nexport const HolderRefField = \"ref\";\n\nexport function wrapInHolder(tx: PlTransaction, ref: AnyRef): ResourceRef {\n const holder = tx.createStruct(Holder);\n const mainHolderField = field(holder, HolderRefField);\n tx.createField(mainHolderField, \"Input\", ref);\n tx.lock(holder);\n return holder;\n}\n\nexport function wrapInEphHolder(tx: PlTransaction, ref: AnyRef): ResourceRef {\n const holder = tx.createEphemeral(EphHolder);\n const mainHolderField = field(holder, HolderRefField);\n tx.createField(mainHolderField, \"Input\", ref);\n tx.lock(holder);\n return holder;\n}\n\nexport function unwrapHolder(tx: PlTransaction, ref: AnyRef): FieldRef {\n return tx.getFutureFieldValue(ref, HolderRefField, \"Input\");\n}\n"],"mappings":"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"}
|
package/dist/helpers/poll.cjs
CHANGED
|
@@ -1,148 +1,113 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
function _interopNamespaceDefault(e) {
|
|
8
|
-
var n = Object.create(null);
|
|
9
|
-
if (e) {
|
|
10
|
-
Object.keys(e).forEach(function (k) {
|
|
11
|
-
if (k !== 'default') {
|
|
12
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
13
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
14
|
-
enumerable: true,
|
|
15
|
-
get: function () { return e[k]; }
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
n.default = e;
|
|
21
|
-
return Object.freeze(n);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
var tp__namespace = /*#__PURE__*/_interopNamespaceDefault(tp);
|
|
1
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_types = require('../core/types.cjs');
|
|
3
|
+
let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
|
|
4
|
+
let node_timers_promises = require("node:timers/promises");
|
|
5
|
+
node_timers_promises = require_runtime.__toESM(node_timers_promises);
|
|
25
6
|
|
|
7
|
+
//#region src/helpers/poll.ts
|
|
26
8
|
/** This error tells state assertion mechanism that required state is not yet ready */
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
9
|
+
var ContinuePolling = class extends Error {
|
|
10
|
+
name = "ContinuePolling";
|
|
11
|
+
};
|
|
30
12
|
const DefaultPollFieldTraverseOps = {
|
|
31
|
-
|
|
32
|
-
|
|
13
|
+
failOnError: true,
|
|
14
|
+
onlyFinal: false
|
|
15
|
+
};
|
|
16
|
+
var PollResourceAccessor = class {
|
|
17
|
+
constructor(tx, data, path) {
|
|
18
|
+
this.tx = tx;
|
|
19
|
+
this.data = data;
|
|
20
|
+
this.path = path;
|
|
21
|
+
}
|
|
22
|
+
final() {
|
|
23
|
+
if (!this.data.final) throw new ContinuePolling();
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
async requireNoError() {
|
|
27
|
+
if (require_types.isNullResourceId(this.data.error)) return this;
|
|
28
|
+
await this.tx.throwError(this.data.error, this.path);
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
getFieldData(name, expectedType) {
|
|
32
|
+
const fieldData = this.data.fields.find((f) => f.name === name);
|
|
33
|
+
if (fieldData !== void 0) {
|
|
34
|
+
if (expectedType !== void 0 && fieldData.type !== expectedType) throw new Error(`Unexpected field type. Expected ${expectedType}, found ${fieldData.type}`);
|
|
35
|
+
return fieldData;
|
|
36
|
+
}
|
|
37
|
+
if ((expectedType === "Input" || expectedType === "Service") && this.data.inputsLocked || expectedType === "Output" && this.data.outputsLocked) throw new Error(`Field "${name}" not found. Expected type: ${expectedType}, state: ${this.data}`);
|
|
38
|
+
throw new ContinuePolling();
|
|
39
|
+
}
|
|
40
|
+
async get(name, ops = {}) {
|
|
41
|
+
const { expectedType, failOnError } = {
|
|
42
|
+
...DefaultPollFieldTraverseOps,
|
|
43
|
+
...ops
|
|
44
|
+
};
|
|
45
|
+
const path = [...this.path, name];
|
|
46
|
+
const fieldData = this.getFieldData(name, expectedType);
|
|
47
|
+
if (require_types.isNotNullResourceId(fieldData.error) && (failOnError || require_types.isNullResourceId(fieldData.value))) await this.tx.throwError(fieldData.error, path);
|
|
48
|
+
if (require_types.isNullResourceId(fieldData.value)) throw new ContinuePolling();
|
|
49
|
+
return await this.tx.get(fieldData.value, failOnError, path);
|
|
50
|
+
}
|
|
51
|
+
async getMulti(ops, ...names) {
|
|
52
|
+
return await Promise.all(names.map((name) => this.get(name, ops)));
|
|
53
|
+
}
|
|
54
|
+
async getMultiObj(ops, ...names) {
|
|
55
|
+
return Object.fromEntries(await Promise.all(names.map(async (name) => [name, await this.get(name, ops)])));
|
|
56
|
+
}
|
|
57
|
+
async getAllFinal(ops = {}) {
|
|
58
|
+
return await this.getMultiObj(ops, ...this.data.fields.filter((f) => f.valueIsFinal || require_types.isNotNullResourceId(f.error)).map((f) => f.name));
|
|
59
|
+
}
|
|
60
|
+
async getKValue(key) {
|
|
61
|
+
const value = await this.tx.tx.getKValueStringIfExists(this.data.id, key);
|
|
62
|
+
if (value === void 0) throw new ContinuePolling();
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
async getKValueObj(key) {
|
|
66
|
+
return JSON.parse(await this.getKValue(key));
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
var PollTxAccessor = class {
|
|
70
|
+
constructor(tx) {
|
|
71
|
+
this.tx = tx;
|
|
72
|
+
}
|
|
73
|
+
async get(rid, failOnError = true, path = []) {
|
|
74
|
+
const data = await this.tx.getResourceData(rid, true);
|
|
75
|
+
const accessor = new PollResourceAccessor(this, data, [...path, require_types.resourceIdToString(rid)]);
|
|
76
|
+
if (failOnError) await accessor.requireNoError();
|
|
77
|
+
return accessor;
|
|
78
|
+
}
|
|
79
|
+
async throwError(error, path = []) {
|
|
80
|
+
const errorRes = await this.get(error);
|
|
81
|
+
const errorText = Buffer.from((0, _milaboratories_ts_helpers.notEmpty)(errorRes.data.data)).toString();
|
|
82
|
+
throw new Error(`${path.join(" -> ")} = ${errorText}`);
|
|
83
|
+
}
|
|
33
84
|
};
|
|
34
|
-
class PollResourceAccessor {
|
|
35
|
-
tx;
|
|
36
|
-
data;
|
|
37
|
-
path;
|
|
38
|
-
constructor(tx, data, path) {
|
|
39
|
-
this.tx = tx;
|
|
40
|
-
this.data = data;
|
|
41
|
-
this.path = path;
|
|
42
|
-
}
|
|
43
|
-
final() {
|
|
44
|
-
if (!this.data.final)
|
|
45
|
-
throw new ContinuePolling();
|
|
46
|
-
return this;
|
|
47
|
-
}
|
|
48
|
-
async requireNoError() {
|
|
49
|
-
if (types.isNullResourceId(this.data.error))
|
|
50
|
-
return this;
|
|
51
|
-
await this.tx.throwError(this.data.error, this.path);
|
|
52
|
-
// hmm... https://github.com/microsoft/TypeScript/issues/34955
|
|
53
|
-
return this;
|
|
54
|
-
}
|
|
55
|
-
getFieldData(name, expectedType) {
|
|
56
|
-
const fieldData = this.data.fields.find((f) => f.name === name);
|
|
57
|
-
if (fieldData !== undefined) {
|
|
58
|
-
if (expectedType !== undefined && fieldData.type !== expectedType)
|
|
59
|
-
throw new Error(`Unexpected field type. Expected ${expectedType}, found ${fieldData.type}`);
|
|
60
|
-
return fieldData;
|
|
61
|
-
}
|
|
62
|
-
if (((expectedType === "Input" || expectedType === "Service") && this.data.inputsLocked) ||
|
|
63
|
-
(expectedType === "Output" && this.data.outputsLocked))
|
|
64
|
-
throw new Error(
|
|
65
|
-
// eslint-disable-next-line @typescript-eslint/no-base-to-string, @typescript-eslint/restrict-template-expressions
|
|
66
|
-
`Field "${name}" not found. Expected type: ${expectedType}, state: ${this.data}`);
|
|
67
|
-
throw new ContinuePolling();
|
|
68
|
-
}
|
|
69
|
-
async get(name, ops = {}) {
|
|
70
|
-
const { expectedType, failOnError } = { ...DefaultPollFieldTraverseOps, ...ops };
|
|
71
|
-
const path = [...this.path, name];
|
|
72
|
-
const fieldData = this.getFieldData(name, expectedType);
|
|
73
|
-
if (types.isNotNullResourceId(fieldData.error) && (failOnError || types.isNullResourceId(fieldData.value)))
|
|
74
|
-
await this.tx.throwError(fieldData.error, path);
|
|
75
|
-
if (types.isNullResourceId(fieldData.value))
|
|
76
|
-
throw new ContinuePolling();
|
|
77
|
-
return await this.tx.get(fieldData.value, failOnError, path);
|
|
78
|
-
}
|
|
79
|
-
async getMulti(ops, ...names) {
|
|
80
|
-
return await Promise.all(names.map((name) => this.get(name, ops)));
|
|
81
|
-
}
|
|
82
|
-
async getMultiObj(ops, ...names) {
|
|
83
|
-
return Object.fromEntries(await Promise.all(names.map(async (name) => [name, await this.get(name, ops)])));
|
|
84
|
-
}
|
|
85
|
-
async getAllFinal(ops = {}) {
|
|
86
|
-
return await this.getMultiObj(ops, ...this.data.fields
|
|
87
|
-
.filter((f) => f.valueIsFinal || types.isNotNullResourceId(f.error))
|
|
88
|
-
.map((f) => f.name));
|
|
89
|
-
}
|
|
90
|
-
async getKValue(key) {
|
|
91
|
-
const value = await this.tx.tx.getKValueStringIfExists(this.data.id, key);
|
|
92
|
-
if (value === undefined)
|
|
93
|
-
throw new ContinuePolling();
|
|
94
|
-
return value;
|
|
95
|
-
}
|
|
96
|
-
async getKValueObj(key) {
|
|
97
|
-
return JSON.parse(await this.getKValue(key));
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
class PollTxAccessor {
|
|
101
|
-
tx;
|
|
102
|
-
constructor(tx) {
|
|
103
|
-
this.tx = tx;
|
|
104
|
-
}
|
|
105
|
-
async get(rid, failOnError = true, path = []) {
|
|
106
|
-
const data = await this.tx.getResourceData(rid, true);
|
|
107
|
-
const accessor = new PollResourceAccessor(this, data, [...path, types.resourceIdToString(rid)]);
|
|
108
|
-
if (failOnError)
|
|
109
|
-
await accessor.requireNoError();
|
|
110
|
-
return accessor;
|
|
111
|
-
}
|
|
112
|
-
async throwError(error, path = []) {
|
|
113
|
-
const errorRes = await this.get(error);
|
|
114
|
-
const errorText = Buffer.from(tsHelpers.notEmpty(errorRes.data.data)).toString();
|
|
115
|
-
throw new Error(`${path.join(" -> ")} = ${errorText}`);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
85
|
const DefaultPollingRetryOptions = {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
86
|
+
type: "linearBackoff",
|
|
87
|
+
jitter: 0,
|
|
88
|
+
maxAttempts: 100,
|
|
89
|
+
backoffStep: 10,
|
|
90
|
+
initialDelay: 10
|
|
124
91
|
};
|
|
125
92
|
async function poll(cl, cb, retryOptions = DefaultPollingRetryOptions, txName = "polling") {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
await tp__namespace.setTimeout(retryState.nextDelay);
|
|
139
|
-
retryState = tsHelpers.nextRetryStateOrError(retryState);
|
|
140
|
-
}
|
|
93
|
+
let retryState = (0, _milaboratories_ts_helpers.createRetryState)(retryOptions);
|
|
94
|
+
while (true) {
|
|
95
|
+
try {
|
|
96
|
+
return await cl.withReadTx(txName, async (tx) => {
|
|
97
|
+
return await cb(new PollTxAccessor(tx));
|
|
98
|
+
});
|
|
99
|
+
} catch (e) {
|
|
100
|
+
if (!(e instanceof ContinuePolling)) throw e;
|
|
101
|
+
}
|
|
102
|
+
await node_timers_promises.setTimeout(retryState.nextDelay);
|
|
103
|
+
retryState = (0, _milaboratories_ts_helpers.nextRetryStateOrError)(retryState);
|
|
104
|
+
}
|
|
141
105
|
}
|
|
142
106
|
|
|
107
|
+
//#endregion
|
|
143
108
|
exports.ContinuePolling = ContinuePolling;
|
|
144
109
|
exports.DefaultPollingRetryOptions = DefaultPollingRetryOptions;
|
|
145
110
|
exports.PollResourceAccessor = PollResourceAccessor;
|
|
146
111
|
exports.PollTxAccessor = PollTxAccessor;
|
|
147
112
|
exports.poll = poll;
|
|
148
|
-
//# sourceMappingURL=poll.cjs.map
|
|
113
|
+
//# sourceMappingURL=poll.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poll.cjs","sources":["../../src/helpers/poll.ts"],"sourcesContent":["import type { PlClient } from \"../core/client\";\nimport type { RetryOptions } from \"@milaboratories/ts-helpers\";\nimport { createRetryState, nextRetryStateOrError, notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { FieldData, FieldType, ResourceData, ResourceId } from \"../core/types\";\nimport { isNotNullResourceId, isNullResourceId, resourceIdToString } from \"../core/types\";\nimport type { PlTransaction } from \"../core/transaction\";\nimport * as tp from \"node:timers/promises\";\n\n/** This error tells state assertion mechanism that required state is not yet ready */\nexport class ContinuePolling extends Error {\n name = \"ContinuePolling\";\n}\n\nexport type PollFieldTraverseOps = {\n expectedType?: FieldType;\n /** Fail if error present along with the value, if value not present,\n * but error do, exception will be thrown anyway. */\n failOnError: boolean;\n /** Traverse only if field report its value as final. */\n onlyFinal: boolean;\n};\n\nconst DefaultPollFieldTraverseOps: PollFieldTraverseOps = {\n failOnError: true,\n onlyFinal: false,\n};\n\nexport class PollResourceAccessor {\n constructor(\n public readonly tx: PollTxAccessor,\n public readonly data: ResourceData,\n public readonly path: string[],\n ) {}\n\n public final(): PollResourceAccessor {\n if (!this.data.final) throw new ContinuePolling();\n return this;\n }\n\n public async requireNoError(): Promise<PollResourceAccessor> {\n if (isNullResourceId(this.data.error)) return this;\n await this.tx.throwError(this.data.error, this.path);\n // hmm... https://github.com/microsoft/TypeScript/issues/34955\n return this;\n }\n\n public getFieldData(name: string, expectedType?: FieldType): FieldData {\n const fieldData = this.data.fields.find((f) => f.name === name);\n\n if (fieldData !== undefined) {\n if (expectedType !== undefined && fieldData.type !== expectedType)\n throw new Error(`Unexpected field type. Expected ${expectedType}, found ${fieldData.type}`);\n return fieldData;\n }\n\n if (\n ((expectedType === \"Input\" || expectedType === \"Service\") && this.data.inputsLocked) ||\n (expectedType === \"Output\" && this.data.outputsLocked)\n )\n throw new Error(\n // eslint-disable-next-line @typescript-eslint/no-base-to-string, @typescript-eslint/restrict-template-expressions\n `Field \"${name}\" not found. Expected type: ${expectedType}, state: ${this.data}`,\n );\n\n throw new ContinuePolling();\n }\n\n public async get(\n name: string,\n ops: Partial<PollFieldTraverseOps> = {},\n ): Promise<PollResourceAccessor> {\n const { expectedType, failOnError } = { ...DefaultPollFieldTraverseOps, ...ops };\n const path = [...this.path, name];\n\n const fieldData = this.getFieldData(name, expectedType);\n if (isNotNullResourceId(fieldData.error) && (failOnError || isNullResourceId(fieldData.value)))\n await this.tx.throwError(fieldData.error, path);\n\n if (isNullResourceId(fieldData.value)) throw new ContinuePolling();\n\n return await this.tx.get(fieldData.value, failOnError, path);\n }\n\n public async getMulti(\n ops: Partial<PollFieldTraverseOps>,\n ...names: string[]\n ): Promise<PollResourceAccessor[]> {\n return await Promise.all(names.map((name) => this.get(name, ops)));\n }\n\n public async getMultiObj<Key extends string>(\n ops: Partial<PollFieldTraverseOps>,\n ...names: Key[]\n ): Promise<Record<Key, PollResourceAccessor>> {\n return Object.fromEntries(\n await Promise.all(names.map(async (name) => [name, await this.get(name, ops)])),\n );\n }\n\n public async getAllFinal(\n ops: Partial<PollFieldTraverseOps> = {},\n ): Promise<Record<string, PollResourceAccessor>> {\n return await this.getMultiObj(\n ops,\n ...this.data.fields\n .filter((f) => f.valueIsFinal || isNotNullResourceId(f.error))\n .map((f) => f.name),\n );\n }\n\n public async getKValue(key: string): Promise<string> {\n const value = await this.tx.tx.getKValueStringIfExists(this.data.id, key);\n if (value === undefined) throw new ContinuePolling();\n return value;\n }\n\n public async getKValueObj<T>(key: string): Promise<T> {\n return JSON.parse(await this.getKValue(key)) as T;\n }\n}\n\nexport class PollTxAccessor {\n constructor(public readonly tx: PlTransaction) {}\n\n public async get(\n rid: ResourceId,\n failOnError: boolean = true,\n path: string[] = [],\n ): Promise<PollResourceAccessor> {\n const data = await this.tx.getResourceData(rid, true);\n const accessor = new PollResourceAccessor(this, data, [...path, resourceIdToString(rid)]);\n if (failOnError) await accessor.requireNoError();\n return accessor;\n }\n\n async throwError(error: ResourceId, path: string[] = []): Promise<never> {\n const errorRes = await this.get(error);\n const errorText = Buffer.from(notEmpty(errorRes.data.data)).toString();\n throw new Error(`${path.join(\" -> \")} = ${errorText}`);\n }\n}\n\nexport const DefaultPollingRetryOptions: RetryOptions = {\n type: \"linearBackoff\",\n jitter: 0,\n maxAttempts: 100,\n backoffStep: 10,\n initialDelay: 10,\n};\n\nexport async function poll<T>(\n cl: PlClient,\n cb: (tx: PollTxAccessor) => Promise<T>,\n retryOptions: RetryOptions = DefaultPollingRetryOptions,\n txName: string = \"polling\",\n): Promise<T> {\n let retryState = createRetryState(retryOptions);\n while (true) {\n try {\n return await cl.withReadTx(txName, async (tx) => {\n return await cb(new PollTxAccessor(tx));\n });\n } catch (e: any) {\n // Rethrowing any error except the \"not ready yet\"\n if (!(e instanceof ContinuePolling)) throw e;\n }\n await tp.setTimeout(retryState.nextDelay);\n retryState = nextRetryStateOrError(retryState);\n }\n}\n"],"names":["isNullResourceId","isNotNullResourceId","resourceIdToString","notEmpty","createRetryState","tp","nextRetryStateOrError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"poll.cjs","names":["isNullResourceId","isNotNullResourceId","resourceIdToString","tp"],"sources":["../../src/helpers/poll.ts"],"sourcesContent":["import type { PlClient } from \"../core/client\";\nimport type { RetryOptions } from \"@milaboratories/ts-helpers\";\nimport { createRetryState, nextRetryStateOrError, notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { FieldData, FieldType, ResourceData, ResourceId } from \"../core/types\";\nimport { isNotNullResourceId, isNullResourceId, resourceIdToString } from \"../core/types\";\nimport type { PlTransaction } from \"../core/transaction\";\nimport * as tp from \"node:timers/promises\";\n\n/** This error tells state assertion mechanism that required state is not yet ready */\nexport class ContinuePolling extends Error {\n name = \"ContinuePolling\";\n}\n\nexport type PollFieldTraverseOps = {\n expectedType?: FieldType;\n /** Fail if error present along with the value, if value not present,\n * but error do, exception will be thrown anyway. */\n failOnError: boolean;\n /** Traverse only if field report its value as final. */\n onlyFinal: boolean;\n};\n\nconst DefaultPollFieldTraverseOps: PollFieldTraverseOps = {\n failOnError: true,\n onlyFinal: false,\n};\n\nexport class PollResourceAccessor {\n constructor(\n public readonly tx: PollTxAccessor,\n public readonly data: ResourceData,\n public readonly path: string[],\n ) {}\n\n public final(): PollResourceAccessor {\n if (!this.data.final) throw new ContinuePolling();\n return this;\n }\n\n public async requireNoError(): Promise<PollResourceAccessor> {\n if (isNullResourceId(this.data.error)) return this;\n await this.tx.throwError(this.data.error, this.path);\n // hmm... https://github.com/microsoft/TypeScript/issues/34955\n return this;\n }\n\n public getFieldData(name: string, expectedType?: FieldType): FieldData {\n const fieldData = this.data.fields.find((f) => f.name === name);\n\n if (fieldData !== undefined) {\n if (expectedType !== undefined && fieldData.type !== expectedType)\n throw new Error(`Unexpected field type. Expected ${expectedType}, found ${fieldData.type}`);\n return fieldData;\n }\n\n if (\n ((expectedType === \"Input\" || expectedType === \"Service\") && this.data.inputsLocked) ||\n (expectedType === \"Output\" && this.data.outputsLocked)\n )\n throw new Error(\n // eslint-disable-next-line @typescript-eslint/no-base-to-string, @typescript-eslint/restrict-template-expressions\n `Field \"${name}\" not found. Expected type: ${expectedType}, state: ${this.data}`,\n );\n\n throw new ContinuePolling();\n }\n\n public async get(\n name: string,\n ops: Partial<PollFieldTraverseOps> = {},\n ): Promise<PollResourceAccessor> {\n const { expectedType, failOnError } = { ...DefaultPollFieldTraverseOps, ...ops };\n const path = [...this.path, name];\n\n const fieldData = this.getFieldData(name, expectedType);\n if (isNotNullResourceId(fieldData.error) && (failOnError || isNullResourceId(fieldData.value)))\n await this.tx.throwError(fieldData.error, path);\n\n if (isNullResourceId(fieldData.value)) throw new ContinuePolling();\n\n return await this.tx.get(fieldData.value, failOnError, path);\n }\n\n public async getMulti(\n ops: Partial<PollFieldTraverseOps>,\n ...names: string[]\n ): Promise<PollResourceAccessor[]> {\n return await Promise.all(names.map((name) => this.get(name, ops)));\n }\n\n public async getMultiObj<Key extends string>(\n ops: Partial<PollFieldTraverseOps>,\n ...names: Key[]\n ): Promise<Record<Key, PollResourceAccessor>> {\n return Object.fromEntries(\n await Promise.all(names.map(async (name) => [name, await this.get(name, ops)])),\n );\n }\n\n public async getAllFinal(\n ops: Partial<PollFieldTraverseOps> = {},\n ): Promise<Record<string, PollResourceAccessor>> {\n return await this.getMultiObj(\n ops,\n ...this.data.fields\n .filter((f) => f.valueIsFinal || isNotNullResourceId(f.error))\n .map((f) => f.name),\n );\n }\n\n public async getKValue(key: string): Promise<string> {\n const value = await this.tx.tx.getKValueStringIfExists(this.data.id, key);\n if (value === undefined) throw new ContinuePolling();\n return value;\n }\n\n public async getKValueObj<T>(key: string): Promise<T> {\n return JSON.parse(await this.getKValue(key)) as T;\n }\n}\n\nexport class PollTxAccessor {\n constructor(public readonly tx: PlTransaction) {}\n\n public async get(\n rid: ResourceId,\n failOnError: boolean = true,\n path: string[] = [],\n ): Promise<PollResourceAccessor> {\n const data = await this.tx.getResourceData(rid, true);\n const accessor = new PollResourceAccessor(this, data, [...path, resourceIdToString(rid)]);\n if (failOnError) await accessor.requireNoError();\n return accessor;\n }\n\n async throwError(error: ResourceId, path: string[] = []): Promise<never> {\n const errorRes = await this.get(error);\n const errorText = Buffer.from(notEmpty(errorRes.data.data)).toString();\n throw new Error(`${path.join(\" -> \")} = ${errorText}`);\n }\n}\n\nexport const DefaultPollingRetryOptions: RetryOptions = {\n type: \"linearBackoff\",\n jitter: 0,\n maxAttempts: 100,\n backoffStep: 10,\n initialDelay: 10,\n};\n\nexport async function poll<T>(\n cl: PlClient,\n cb: (tx: PollTxAccessor) => Promise<T>,\n retryOptions: RetryOptions = DefaultPollingRetryOptions,\n txName: string = \"polling\",\n): Promise<T> {\n let retryState = createRetryState(retryOptions);\n while (true) {\n try {\n return await cl.withReadTx(txName, async (tx) => {\n return await cb(new PollTxAccessor(tx));\n });\n } catch (e: any) {\n // Rethrowing any error except the \"not ready yet\"\n if (!(e instanceof ContinuePolling)) throw e;\n }\n await tp.setTimeout(retryState.nextDelay);\n retryState = nextRetryStateOrError(retryState);\n }\n}\n"],"mappings":"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"}
|
package/dist/helpers/poll.d.ts
CHANGED
|
@@ -1,40 +1,43 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import { FieldData, FieldType, ResourceData, ResourceId } from "../core/types.js";
|
|
2
|
+
import { PlTransaction } from "../core/transaction.js";
|
|
3
|
+
import { PlClient } from "../core/client.js";
|
|
4
|
+
import { RetryOptions } from "@milaboratories/ts-helpers";
|
|
5
|
+
|
|
6
|
+
//#region src/helpers/poll.d.ts
|
|
5
7
|
/** This error tells state assertion mechanism that required state is not yet ready */
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
declare class ContinuePolling extends Error {
|
|
9
|
+
name: string;
|
|
8
10
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
onlyFinal: boolean;
|
|
11
|
+
type PollFieldTraverseOps = {
|
|
12
|
+
expectedType?: FieldType;
|
|
13
|
+
/** Fail if error present along with the value, if value not present,
|
|
14
|
+
* but error do, exception will be thrown anyway. */
|
|
15
|
+
failOnError: boolean; /** Traverse only if field report its value as final. */
|
|
16
|
+
onlyFinal: boolean;
|
|
16
17
|
};
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
18
|
+
declare class PollResourceAccessor {
|
|
19
|
+
readonly tx: PollTxAccessor;
|
|
20
|
+
readonly data: ResourceData;
|
|
21
|
+
readonly path: string[];
|
|
22
|
+
constructor(tx: PollTxAccessor, data: ResourceData, path: string[]);
|
|
23
|
+
final(): PollResourceAccessor;
|
|
24
|
+
requireNoError(): Promise<PollResourceAccessor>;
|
|
25
|
+
getFieldData(name: string, expectedType?: FieldType): FieldData;
|
|
26
|
+
get(name: string, ops?: Partial<PollFieldTraverseOps>): Promise<PollResourceAccessor>;
|
|
27
|
+
getMulti(ops: Partial<PollFieldTraverseOps>, ...names: string[]): Promise<PollResourceAccessor[]>;
|
|
28
|
+
getMultiObj<Key extends string>(ops: Partial<PollFieldTraverseOps>, ...names: Key[]): Promise<Record<Key, PollResourceAccessor>>;
|
|
29
|
+
getAllFinal(ops?: Partial<PollFieldTraverseOps>): Promise<Record<string, PollResourceAccessor>>;
|
|
30
|
+
getKValue(key: string): Promise<string>;
|
|
31
|
+
getKValueObj<T>(key: string): Promise<T>;
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
declare class PollTxAccessor {
|
|
34
|
+
readonly tx: PlTransaction;
|
|
35
|
+
constructor(tx: PlTransaction);
|
|
36
|
+
get(rid: ResourceId, failOnError?: boolean, path?: string[]): Promise<PollResourceAccessor>;
|
|
37
|
+
throwError(error: ResourceId, path?: string[]): Promise<never>;
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
declare const DefaultPollingRetryOptions: RetryOptions;
|
|
40
|
+
declare function poll<T>(cl: PlClient, cb: (tx: PollTxAccessor) => Promise<T>, retryOptions?: RetryOptions, txName?: string): Promise<T>;
|
|
41
|
+
//#endregion
|
|
42
|
+
export { ContinuePolling, DefaultPollingRetryOptions, PollFieldTraverseOps, PollResourceAccessor, PollTxAccessor, poll };
|
|
40
43
|
//# sourceMappingURL=poll.d.ts.map
|