@upstash/redis 0.0.0-ci.efe72030 → 0.0.0-ci.f0c37f55-20231010
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/README.md +20 -18
- package/esm/deps/deno.land/x/base64@v0.2.1/base.js +100 -0
- package/esm/deps/deno.land/x/base64@v0.2.1/base64url.js +9 -0
- package/esm/deps/deno.land/x/sha1@v1.0.3/deps.js +1 -0
- package/esm/deps/deno.land/x/sha1@v1.0.3/mod.js +191 -0
- package/esm/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +50 -0
- package/esm/pkg/commands/command.js +12 -3
- package/esm/pkg/commands/getdel.js +9 -0
- package/esm/pkg/commands/hgetall.js +0 -4
- package/esm/pkg/commands/hrandfield.js +39 -0
- package/esm/pkg/commands/json_arrappend.js +9 -0
- package/esm/pkg/commands/json_arrindex.js +9 -0
- package/esm/pkg/commands/json_arrinsert.js +9 -0
- package/esm/pkg/commands/json_arrlen.js +9 -0
- package/esm/pkg/commands/json_arrpop.js +9 -0
- package/esm/pkg/commands/json_arrtrim.js +12 -0
- package/esm/pkg/commands/json_clear.js +9 -0
- package/esm/pkg/commands/json_del.js +9 -0
- package/esm/pkg/commands/json_forget.js +9 -0
- package/esm/pkg/commands/json_get.js +30 -0
- package/esm/pkg/commands/json_mget.js +9 -0
- package/esm/pkg/commands/json_numincrby.js +9 -0
- package/esm/pkg/commands/json_nummultby.js +9 -0
- package/esm/pkg/commands/json_objkeys.js +9 -0
- package/esm/pkg/commands/json_objlen.js +9 -0
- package/esm/pkg/commands/json_resp.js +9 -0
- package/esm/pkg/commands/json_set.js +18 -0
- package/esm/pkg/commands/json_strappend.js +9 -0
- package/esm/pkg/commands/json_strlen.js +9 -0
- package/esm/pkg/commands/json_toggle.js +9 -0
- package/esm/pkg/commands/json_type.js +9 -0
- package/esm/pkg/commands/lmove.js +9 -0
- package/esm/pkg/commands/mod.js +27 -0
- package/esm/pkg/commands/scan.js +3 -0
- package/esm/pkg/commands/set.js +16 -4
- package/esm/pkg/commands/smismember.js +9 -0
- package/esm/pkg/commands/xadd.js +26 -0
- package/esm/pkg/commands/xrange.js +36 -0
- package/esm/pkg/commands/zdiffstore.js +9 -0
- package/esm/pkg/commands/zmscore.js +10 -0
- package/esm/pkg/http.js +100 -3
- package/esm/pkg/pipeline.js +170 -12
- package/esm/pkg/redis.js +220 -2
- package/esm/pkg/script.js +77 -0
- package/esm/platforms/cloudflare.js +10 -2
- package/esm/platforms/fastly.js +6 -0
- package/esm/platforms/node_with_fetch.js +26 -1
- package/esm/platforms/nodejs.js +24 -1
- package/esm/version.js +1 -0
- package/package.json +53 -58
- package/script/deps/deno.land/x/base64@v0.2.1/base.js +104 -0
- package/script/deps/deno.land/x/base64@v0.2.1/base64url.js +13 -0
- package/script/deps/deno.land/x/sha1@v1.0.3/deps.js +6 -0
- package/script/deps/deno.land/x/sha1@v1.0.3/mod.js +196 -0
- package/script/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +55 -0
- package/script/pkg/commands/command.js +12 -3
- package/script/pkg/commands/getdel.js +13 -0
- package/script/pkg/commands/hgetall.js +0 -4
- package/script/pkg/commands/hrandfield.js +43 -0
- package/script/pkg/commands/json_arrappend.js +13 -0
- package/script/pkg/commands/json_arrindex.js +13 -0
- package/script/pkg/commands/json_arrinsert.js +13 -0
- package/script/pkg/commands/json_arrlen.js +13 -0
- package/script/pkg/commands/json_arrpop.js +13 -0
- package/script/pkg/commands/json_arrtrim.js +16 -0
- package/script/pkg/commands/json_clear.js +13 -0
- package/script/pkg/commands/json_del.js +13 -0
- package/script/pkg/commands/json_forget.js +13 -0
- package/script/pkg/commands/json_get.js +34 -0
- package/script/pkg/commands/json_mget.js +13 -0
- package/script/pkg/commands/json_numincrby.js +13 -0
- package/script/pkg/commands/json_nummultby.js +13 -0
- package/script/pkg/commands/json_objkeys.js +13 -0
- package/script/pkg/commands/json_objlen.js +13 -0
- package/script/pkg/commands/json_resp.js +13 -0
- package/script/pkg/commands/json_set.js +22 -0
- package/script/pkg/commands/json_strappend.js +13 -0
- package/script/pkg/commands/json_strlen.js +13 -0
- package/script/pkg/commands/json_toggle.js +13 -0
- package/script/pkg/commands/json_type.js +13 -0
- package/script/pkg/commands/lmove.js +13 -0
- package/script/pkg/commands/mod.js +27 -0
- package/script/pkg/commands/scan.js +3 -0
- package/script/pkg/commands/set.js +16 -4
- package/script/pkg/commands/smismember.js +13 -0
- package/script/pkg/commands/xadd.js +30 -0
- package/script/pkg/commands/xrange.js +40 -0
- package/script/pkg/commands/zdiffstore.js +13 -0
- package/script/pkg/commands/zmscore.js +14 -0
- package/script/pkg/http.js +100 -3
- package/script/pkg/pipeline.js +169 -11
- package/script/pkg/redis.js +219 -1
- package/script/pkg/script.js +81 -0
- package/script/platforms/cloudflare.js +10 -2
- package/script/platforms/fastly.js +6 -0
- package/script/platforms/node_with_fetch.js +26 -1
- package/script/platforms/nodejs.js +24 -1
- package/script/version.js +4 -0
- package/types/deps/deno.land/x/base64@v0.2.1/base.d.ts +5 -0
- package/types/deps/deno.land/x/base64@v0.2.1/base64url.d.ts +1 -0
- package/types/deps/deno.land/x/sha1@v1.0.3/deps.d.ts +1 -0
- package/types/deps/deno.land/x/sha1@v1.0.3/mod.d.ts +26 -0
- package/types/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.d.ts +3 -0
- package/types/pkg/commands/command.d.ts +5 -5
- package/types/pkg/commands/getdel.d.ts +7 -0
- package/types/pkg/commands/hdel.d.ts +1 -1
- package/types/pkg/commands/hrandfield.d.ts +9 -0
- package/types/pkg/commands/json_arrappend.d.ts +7 -0
- package/types/pkg/commands/json_arrindex.d.ts +13 -0
- package/types/pkg/commands/json_arrinsert.d.ts +7 -0
- package/types/pkg/commands/json_arrlen.d.ts +7 -0
- package/types/pkg/commands/json_arrpop.d.ts +7 -0
- package/types/pkg/commands/json_arrtrim.d.ts +7 -0
- package/types/pkg/commands/json_clear.d.ts +7 -0
- package/types/pkg/commands/json_del.d.ts +7 -0
- package/types/pkg/commands/json_forget.d.ts +7 -0
- package/types/pkg/commands/json_get.d.ts +15 -0
- package/types/pkg/commands/json_mget.d.ts +7 -0
- package/types/pkg/commands/json_numincrby.d.ts +7 -0
- package/types/pkg/commands/json_nummultby.d.ts +7 -0
- package/types/pkg/commands/json_objkeys.d.ts +7 -0
- package/types/pkg/commands/json_objlen.d.ts +7 -0
- package/types/pkg/commands/json_resp.d.ts +7 -0
- package/types/pkg/commands/json_set.d.ts +18 -0
- package/types/pkg/commands/json_strappend.d.ts +7 -0
- package/types/pkg/commands/json_strlen.d.ts +7 -0
- package/types/pkg/commands/json_toggle.d.ts +7 -0
- package/types/pkg/commands/json_type.d.ts +7 -0
- package/types/pkg/commands/lmove.d.ts +12 -0
- package/types/pkg/commands/mod.d.ts +27 -0
- package/types/pkg/commands/scan.d.ts +2 -1
- package/types/pkg/commands/script_flush.d.ts +1 -1
- package/types/pkg/commands/set.d.ts +31 -2
- package/types/pkg/commands/smembers.d.ts +2 -2
- package/types/pkg/commands/smismember.d.ts +7 -0
- package/types/pkg/commands/type.d.ts +1 -1
- package/types/pkg/commands/xadd.d.ts +31 -0
- package/types/pkg/commands/xrange.d.ts +9 -0
- package/types/pkg/commands/zadd.d.ts +3 -3
- package/types/pkg/commands/zdiffstore.d.ts +7 -0
- package/types/pkg/commands/zinterstore.d.ts +1 -1
- package/types/pkg/commands/zmscore.d.ts +7 -0
- package/types/pkg/commands/zrange.d.ts +1 -1
- package/types/pkg/commands/zunionstore.d.ts +1 -1
- package/types/pkg/http.d.ts +48 -7
- package/types/pkg/pipeline.d.ts +255 -125
- package/types/pkg/redis.d.ts +169 -13
- package/types/pkg/script.d.ts +42 -0
- package/types/pkg/types.d.ts +27 -1
- package/types/platforms/cloudflare.d.ts +9 -8
- package/types/platforms/fastly.d.ts +3 -7
- package/types/platforms/node_with_fetch.d.ts +3 -22
- package/types/platforms/nodejs.d.ts +4 -7
- package/types/version.d.ts +1 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/json.set
|
|
4
|
+
*/
|
|
5
|
+
export class JsonSetCommand extends Command {
|
|
6
|
+
constructor(cmd, opts) {
|
|
7
|
+
const command = ["JSON.SET", cmd[0], cmd[1], cmd[2]];
|
|
8
|
+
if (cmd[3]) {
|
|
9
|
+
if (cmd[3].nx) {
|
|
10
|
+
command.push("NX");
|
|
11
|
+
}
|
|
12
|
+
else if (cmd[3].xx) {
|
|
13
|
+
command.push("XX");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
super(command, opts);
|
|
17
|
+
}
|
|
18
|
+
}
|
package/esm/pkg/commands/mod.js
CHANGED
|
@@ -17,6 +17,7 @@ export * from "./flushall.js";
|
|
|
17
17
|
export * from "./flushdb.js";
|
|
18
18
|
export * from "./get.js";
|
|
19
19
|
export * from "./getbit.js";
|
|
20
|
+
export * from "./getdel.js";
|
|
20
21
|
export * from "./getrange.js";
|
|
21
22
|
export * from "./getset.js";
|
|
22
23
|
export * from "./hdel.js";
|
|
@@ -29,6 +30,7 @@ export * from "./hkeys.js";
|
|
|
29
30
|
export * from "./hlen.js";
|
|
30
31
|
export * from "./hmget.js";
|
|
31
32
|
export * from "./hmset.js";
|
|
33
|
+
export * from "./hrandfield.js";
|
|
32
34
|
export * from "./hscan.js";
|
|
33
35
|
export * from "./hset.js";
|
|
34
36
|
export * from "./hsetnx.js";
|
|
@@ -37,10 +39,32 @@ export * from "./hvals.js";
|
|
|
37
39
|
export * from "./incr.js";
|
|
38
40
|
export * from "./incrby.js";
|
|
39
41
|
export * from "./incrbyfloat.js";
|
|
42
|
+
export * from "./json_arrappend.js";
|
|
43
|
+
export * from "./json_arrindex.js";
|
|
44
|
+
export * from "./json_arrinsert.js";
|
|
45
|
+
export * from "./json_arrlen.js";
|
|
46
|
+
export * from "./json_arrpop.js";
|
|
47
|
+
export * from "./json_arrtrim.js";
|
|
48
|
+
export * from "./json_clear.js";
|
|
49
|
+
export * from "./json_del.js";
|
|
50
|
+
export * from "./json_forget.js";
|
|
51
|
+
export * from "./json_get.js";
|
|
52
|
+
export * from "./json_mget.js";
|
|
53
|
+
export * from "./json_numincrby.js";
|
|
54
|
+
export * from "./json_nummultby.js";
|
|
55
|
+
export * from "./json_objkeys.js";
|
|
56
|
+
export * from "./json_objlen.js";
|
|
57
|
+
export * from "./json_resp.js";
|
|
58
|
+
export * from "./json_set.js";
|
|
59
|
+
export * from "./json_strappend.js";
|
|
60
|
+
export * from "./json_strlen.js";
|
|
61
|
+
export * from "./json_toggle.js";
|
|
62
|
+
export * from "./json_type.js";
|
|
40
63
|
export * from "./keys.js";
|
|
41
64
|
export * from "./lindex.js";
|
|
42
65
|
export * from "./linsert.js";
|
|
43
66
|
export * from "./llen.js";
|
|
67
|
+
export * from "./lmove.js";
|
|
44
68
|
export * from "./lpop.js";
|
|
45
69
|
export * from "./lpos.js";
|
|
46
70
|
export * from "./lpush.js";
|
|
@@ -82,6 +106,7 @@ export * from "./sinter.js";
|
|
|
82
106
|
export * from "./sinterstore.js";
|
|
83
107
|
export * from "./sismember.js";
|
|
84
108
|
export * from "./smembers.js";
|
|
109
|
+
export * from "./smismember.js";
|
|
85
110
|
export * from "./smove.js";
|
|
86
111
|
export * from "./spop.js";
|
|
87
112
|
export * from "./srandmember.js";
|
|
@@ -113,3 +138,5 @@ export * from "./zrevrank.js";
|
|
|
113
138
|
export * from "./zscan.js";
|
|
114
139
|
export * from "./zscore.js";
|
|
115
140
|
export * from "./zunionstore.js";
|
|
141
|
+
export * from "./xadd.js";
|
|
142
|
+
export * from "./xrange.js";
|
package/esm/pkg/commands/scan.js
CHANGED
package/esm/pkg/commands/set.js
CHANGED
|
@@ -6,17 +6,29 @@ export class SetCommand extends Command {
|
|
|
6
6
|
constructor([key, value, opts], cmdOpts) {
|
|
7
7
|
const command = ["set", key, value];
|
|
8
8
|
if (opts) {
|
|
9
|
+
if ("nx" in opts && opts.nx) {
|
|
10
|
+
command.push("nx");
|
|
11
|
+
}
|
|
12
|
+
else if ("xx" in opts && opts.xx) {
|
|
13
|
+
command.push("xx");
|
|
14
|
+
}
|
|
15
|
+
if ("get" in opts && opts.get) {
|
|
16
|
+
command.push("get");
|
|
17
|
+
}
|
|
9
18
|
if ("ex" in opts && typeof opts.ex === "number") {
|
|
10
19
|
command.push("ex", opts.ex);
|
|
11
20
|
}
|
|
12
21
|
else if ("px" in opts && typeof opts.px === "number") {
|
|
13
22
|
command.push("px", opts.px);
|
|
14
23
|
}
|
|
15
|
-
if ("
|
|
16
|
-
command.push("
|
|
24
|
+
else if ("exat" in opts && typeof opts.exat === "number") {
|
|
25
|
+
command.push("exat", opts.exat);
|
|
17
26
|
}
|
|
18
|
-
else if ("
|
|
19
|
-
command.push("
|
|
27
|
+
else if ("pxat" in opts && typeof opts.pxat === "number") {
|
|
28
|
+
command.push("pxat", opts.pxat);
|
|
29
|
+
}
|
|
30
|
+
else if ("keepTtl" in opts && opts.keepTtl) {
|
|
31
|
+
command.push("keepTtl");
|
|
20
32
|
}
|
|
21
33
|
}
|
|
22
34
|
super(command, cmdOpts);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/xadd
|
|
4
|
+
*/
|
|
5
|
+
export class XAddCommand extends Command {
|
|
6
|
+
constructor([key, id, entries, opts], commandOptions) {
|
|
7
|
+
const command = ["XADD", key];
|
|
8
|
+
if (opts) {
|
|
9
|
+
if (opts.nomkStream) {
|
|
10
|
+
command.push("NOMKSTREAM");
|
|
11
|
+
}
|
|
12
|
+
if (opts.trim) {
|
|
13
|
+
command.push(opts.trim.type, opts.trim.comparison, opts.trim.threshold);
|
|
14
|
+
if (typeof opts.trim.limit !== "undefined") {
|
|
15
|
+
command.push("LIMIT", opts.trim.limit);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
command.push(id);
|
|
20
|
+
// entries
|
|
21
|
+
Object.entries(entries).forEach(([k, v]) => {
|
|
22
|
+
command.push(k, v);
|
|
23
|
+
});
|
|
24
|
+
super(command, commandOptions);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
function deserialize(result) {
|
|
3
|
+
const obj = {};
|
|
4
|
+
for (const e of result) {
|
|
5
|
+
while (e.length >= 2) {
|
|
6
|
+
const streamId = e.shift();
|
|
7
|
+
const entries = e.shift();
|
|
8
|
+
if (!(streamId in obj)) {
|
|
9
|
+
obj[streamId] = {};
|
|
10
|
+
}
|
|
11
|
+
while (entries.length >= 2) {
|
|
12
|
+
const field = entries.shift();
|
|
13
|
+
const value = entries.shift();
|
|
14
|
+
try {
|
|
15
|
+
obj[streamId][field] = JSON.parse(value);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
obj[streamId][field] = value;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return obj;
|
|
24
|
+
}
|
|
25
|
+
export class XRangeCommand extends Command {
|
|
26
|
+
constructor([key, start, end, count], opts) {
|
|
27
|
+
const command = ["XRANGE", key, start, end];
|
|
28
|
+
if (typeof count === "number") {
|
|
29
|
+
command.push("COUNT", count);
|
|
30
|
+
}
|
|
31
|
+
super(command, {
|
|
32
|
+
deserialize: (result) => deserialize(result),
|
|
33
|
+
...opts,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
package/esm/pkg/http.js
CHANGED
|
@@ -25,9 +25,20 @@ export class HttpClient {
|
|
|
25
25
|
writable: true,
|
|
26
26
|
value: void 0
|
|
27
27
|
});
|
|
28
|
+
this.options = {
|
|
29
|
+
backend: config.options?.backend,
|
|
30
|
+
agent: config.agent,
|
|
31
|
+
responseEncoding: config.responseEncoding ?? "base64",
|
|
32
|
+
cache: config.cache,
|
|
33
|
+
};
|
|
28
34
|
this.baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
29
|
-
this.headers = {
|
|
30
|
-
|
|
35
|
+
this.headers = {
|
|
36
|
+
"Content-Type": "application/json",
|
|
37
|
+
...config.headers,
|
|
38
|
+
};
|
|
39
|
+
if (this.options.responseEncoding === "base64") {
|
|
40
|
+
this.headers["Upstash-Encoding"] = "base64";
|
|
41
|
+
}
|
|
31
42
|
if (typeof config?.retry === "boolean" && config?.retry === false) {
|
|
32
43
|
this.retry = {
|
|
33
44
|
attempts: 1,
|
|
@@ -42,12 +53,31 @@ export class HttpClient {
|
|
|
42
53
|
};
|
|
43
54
|
}
|
|
44
55
|
}
|
|
56
|
+
mergeTelemetry(telemetry) {
|
|
57
|
+
function merge(obj, key, value) {
|
|
58
|
+
if (!value) {
|
|
59
|
+
return obj;
|
|
60
|
+
}
|
|
61
|
+
if (obj[key]) {
|
|
62
|
+
obj[key] = [obj[key], value].join(",");
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
obj[key] = value;
|
|
66
|
+
}
|
|
67
|
+
return obj;
|
|
68
|
+
}
|
|
69
|
+
this.headers = merge(this.headers, "Upstash-Telemetry-Runtime", telemetry.runtime);
|
|
70
|
+
this.headers = merge(this.headers, "Upstash-Telemetry-Platform", telemetry.platform);
|
|
71
|
+
this.headers = merge(this.headers, "Upstash-Telemetry-Sdk", telemetry.sdk);
|
|
72
|
+
}
|
|
45
73
|
async request(req) {
|
|
46
74
|
const requestOptions = {
|
|
75
|
+
cache: this.options.cache,
|
|
47
76
|
method: "POST",
|
|
48
77
|
headers: this.headers,
|
|
49
78
|
body: JSON.stringify(req.body),
|
|
50
79
|
keepalive: true,
|
|
80
|
+
agent: this.options?.agent,
|
|
51
81
|
/**
|
|
52
82
|
* Fastly specific
|
|
53
83
|
*/
|
|
@@ -70,8 +100,75 @@ export class HttpClient {
|
|
|
70
100
|
}
|
|
71
101
|
const body = (await res.json());
|
|
72
102
|
if (!res.ok) {
|
|
73
|
-
throw new UpstashError(body.error);
|
|
103
|
+
throw new UpstashError(`${body.error}, command was: ${JSON.stringify(req.body)}`);
|
|
104
|
+
}
|
|
105
|
+
if (this.options?.responseEncoding === "base64") {
|
|
106
|
+
if (Array.isArray(body)) {
|
|
107
|
+
return body.map(({ result, error }) => ({
|
|
108
|
+
result: decode(result),
|
|
109
|
+
error,
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
const result = decode(body.result);
|
|
113
|
+
return { result, error: body.error };
|
|
74
114
|
}
|
|
75
115
|
return body;
|
|
76
116
|
}
|
|
77
117
|
}
|
|
118
|
+
function base64decode(b64) {
|
|
119
|
+
let dec = "";
|
|
120
|
+
try {
|
|
121
|
+
/**
|
|
122
|
+
* Using only atob() is not enough because it doesn't work with unicode characters
|
|
123
|
+
*/
|
|
124
|
+
const binString = atob(b64);
|
|
125
|
+
const size = binString.length;
|
|
126
|
+
const bytes = new Uint8Array(size);
|
|
127
|
+
for (let i = 0; i < size; i++) {
|
|
128
|
+
bytes[i] = binString.charCodeAt(i);
|
|
129
|
+
}
|
|
130
|
+
dec = new TextDecoder().decode(bytes);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
dec = b64;
|
|
134
|
+
}
|
|
135
|
+
return dec;
|
|
136
|
+
// try {
|
|
137
|
+
// return decodeURIComponent(dec);
|
|
138
|
+
// } catch {
|
|
139
|
+
// return dec;
|
|
140
|
+
// }
|
|
141
|
+
}
|
|
142
|
+
function decode(raw) {
|
|
143
|
+
let result = undefined;
|
|
144
|
+
switch (typeof raw) {
|
|
145
|
+
case "undefined":
|
|
146
|
+
return raw;
|
|
147
|
+
case "number": {
|
|
148
|
+
result = raw;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
case "object": {
|
|
152
|
+
if (Array.isArray(raw)) {
|
|
153
|
+
result = raw.map((v) => typeof v === "string"
|
|
154
|
+
? base64decode(v)
|
|
155
|
+
: Array.isArray(v)
|
|
156
|
+
? v.map(decode)
|
|
157
|
+
: v);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// If it's not an array it must be null
|
|
161
|
+
// Apparently null is an object in javascript
|
|
162
|
+
result = null;
|
|
163
|
+
}
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
case "string": {
|
|
167
|
+
result = raw === "OK" ? "OK" : base64decode(raw);
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
default:
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
return result;
|
|
174
|
+
}
|