@devvit/shared-types 0.10.21-next-2024-05-11-bfded257b.0 → 0.10.21-next-2024-05-13-e62a4282b.0

Sign up to get free protection for your applications and to get access to all the features.
package/Actor.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * All Bundle programs are Actor subclasses. Actor instances are expected to
3
+ * populate the passed in Config which is used by the builder to compile and
4
+ * link the programs. Bundle programs are expected to export their subclass
5
+ * constructor, either their own Actor subclass or Devvit.
6
+ *
7
+ * Devvit is an Actor subclass singleton with a non-class-based API.
8
+ *
9
+ * `instanceof` and `isPrototypeOf()` tests fail because Devvit and Actor
10
+ * are multiply defined.
11
+ *
12
+ * Developers will, for now, implement this class and
13
+ * utilize the the `cfg.use/provide` api for both:
14
+ *
15
+ * 1. specifying their `DependencySpec` (proto: devvit/runtime/bundle)
16
+ * Build packs will, for now, create an instance of the Actor and use the
17
+ * result of `config.export` for linking
18
+ *
19
+ * 2. When running within the overall system, `Bootstrap` actor will
20
+ * inject a config that is used to setup links within the runtime.
21
+ */
22
+ import type { Config } from './Config.js';
23
+ /**
24
+ * Subclasses are expected to call config.init(), provides(), and uses(). It
25
+ * is erroneous to not override the constructor. Override, invoke
26
+ * `super(config)`, and call the Config APIs.
27
+ */
28
+ export declare abstract class Actor {
29
+ constructor(config: Config);
30
+ }
31
+ //# sourceMappingURL=Actor.d.ts.map
package/Actor.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Actor.d.ts","sourceRoot":"","sources":["../src/Actor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;GAIG;AACH,8BAAsB,KAAK;gBAGvB,MAAM,EAAE,MAAM;CAEjB"}
package/Actor.js ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * All Bundle programs are Actor subclasses. Actor instances are expected to
3
+ * populate the passed in Config which is used by the builder to compile and
4
+ * link the programs. Bundle programs are expected to export their subclass
5
+ * constructor, either their own Actor subclass or Devvit.
6
+ *
7
+ * Devvit is an Actor subclass singleton with a non-class-based API.
8
+ *
9
+ * `instanceof` and `isPrototypeOf()` tests fail because Devvit and Actor
10
+ * are multiply defined.
11
+ *
12
+ * Developers will, for now, implement this class and
13
+ * utilize the the `cfg.use/provide` api for both:
14
+ *
15
+ * 1. specifying their `DependencySpec` (proto: devvit/runtime/bundle)
16
+ * Build packs will, for now, create an instance of the Actor and use the
17
+ * result of `config.export` for linking
18
+ *
19
+ * 2. When running within the overall system, `Bootstrap` actor will
20
+ * inject a config that is used to setup links within the runtime.
21
+ */
22
+ /**
23
+ * Subclasses are expected to call config.init(), provides(), and uses(). It
24
+ * is erroneous to not override the constructor. Override, invoke
25
+ * `super(config)`, and call the Config APIs.
26
+ */
27
+ export class Actor {
28
+ constructor(
29
+ // @ts-expect-error
30
+ config) { }
31
+ }
package/Config.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ import type { Definition, DependencySpec, PackageQuery } from '@devvit/protos';
2
+ import type { AssetMap } from './Assets.js';
3
+ import type { DeepPartial } from './BuiltinTypes.js';
4
+ import type { Namespace } from './Namespace.js';
5
+ /**
6
+ * Bundle configuration for code about to be built (eg, dependencies). All
7
+ * Bundle config state that impacts building should be recorded in the
8
+ * implementation. See Actor subclass constructors.
9
+ *
10
+ * This type is = kind of like a builder pattern where export() is the build
11
+ * method. Devvit almost implements this class.
12
+ */
13
+ export type Config = {
14
+ assets: Readonly<AssetMap>;
15
+ providedDefinitions: Readonly<Definition>[];
16
+ export(namespace: Readonly<Namespace>): DependencySpec;
17
+ provides(definition: Readonly<Definition>): void;
18
+ use<T>(definition: Readonly<Definition>, options?: Readonly<DeepPartial<PackageQuery>>): T;
19
+ /**
20
+ * Check if a previous call to `use` was made. This is useful for allowing polyfills
21
+ * to ensure that they can provide functionality in terms of a plugin, or fallback to
22
+ * default functionality if not
23
+ */
24
+ uses(definition: Readonly<Definition>): boolean;
25
+ };
26
+ //# sourceMappingURL=Config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE3B,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;IAE5C,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC;IAEvD,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IAEjD,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;IAE3F;;;;OAIG;IACH,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;CACjD,CAAC"}
package/Config.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/Namespace.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ export type Namespace = {
2
+ /**
3
+ * Nonnullish address when bound. Set when bound but may be set sooner. May
4
+ * not be unset when unbound.
5
+ *
6
+ * Hostnames are not necessarily unique. Clients always have the same hostname
7
+ * as their EnvelopeDispatcher. Stream IDs are used to distinguish duplicate
8
+ * hostnames.
9
+ */
10
+ hostname: string | undefined;
11
+ };
12
+ //# sourceMappingURL=Namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Namespace.d.ts","sourceRoot":"","sources":["../src/Namespace.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB;;;;;;;OAOG;IACH,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC"}
package/Namespace.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devvit/shared-types",
3
- "version": "0.10.21-next-2024-05-11-bfded257b.0",
3
+ "version": "0.10.21-next-2024-05-13-e62a4282b.0",
4
4
  "license": "BSD-3-Clause",
5
5
  "repository": {
6
6
  "type": "git",
@@ -23,14 +23,17 @@
23
23
  },
24
24
  "types": "./index.d.ts",
25
25
  "dependencies": {
26
- "@devvit/protos": "0.10.21-next-2024-05-11-bfded257b.0"
26
+ "@devvit/protos": "0.10.21-next-2024-05-13-e62a4282b.0"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@devvit/eslint-config": "0.10.20",
30
30
  "@devvit/repo-tools": "0.10.20",
31
- "@devvit/tsconfig": "0.10.21-next-2024-05-11-bfded257b.0",
31
+ "@devvit/tsconfig": "0.10.21-next-2024-05-13-e62a4282b.0",
32
+ "@types/redis-mock": "0.17.1",
32
33
  "eslint": "8.9.0",
33
34
  "lit": "2.2.8",
35
+ "redis": "4.6.6",
36
+ "redis-mock": "0.56.3",
34
37
  "typescript": "5.3.2",
35
38
  "vitest": "0.31.0"
36
39
  },
@@ -38,5 +41,5 @@
38
41
  "directory": "dist"
39
42
  },
40
43
  "source": "./src/index.ts",
41
- "gitHead": "8d3e9e2b35030b7ef99c86acfe8a8093aed7db34"
44
+ "gitHead": "93cd2af8a1943e6b3416c82906891de040277b45"
42
45
  }
@@ -0,0 +1,49 @@
1
+ import type { ExpireRequest, HIncrByRequest, IncrByRequest, KeyValuesRequest, KeysRequest, Metadata, RedisAPI, SetRangeRequest, TransactionId, TransactionResponses, WatchRequest, ZIncrByRequest, ZRankRequest, ZScanRequest, ZScanResponse } from '@devvit/protos';
2
+ import { DoubleValue, Empty, Int64Value, RedisFieldValues, RedisValues, StringValue } from '@devvit/protos';
3
+ import type { RedisClientType, RedisDefaultModules } from 'redis';
4
+ import type { HDelRequest, HGetRequest, HScanRequest, HScanResponse, HSetRequest, KeyRangeRequest, KeyRequest, KeysResponse, SetRequest, ZAddRequest, ZRangeRequest, ZRemRangeByLexRequest, ZRemRangeByRankRequest, ZRemRangeByScoreRequest, ZRemRequest, ZScoreRequest } from '@devvit/protos';
5
+ import { ZMembers } from '@devvit/protos';
6
+ type RedisClient = RedisClientType<RedisDefaultModules>;
7
+ export declare class LocalRedis implements RedisAPI {
8
+ #private;
9
+ static create(url?: string): Promise<LocalRedis>;
10
+ constructor(redis: RedisClient);
11
+ Del(request: KeysRequest, metadata: Metadata | undefined): Promise<Int64Value>;
12
+ Type(request: KeyRequest, metadata: Metadata | undefined): Promise<StringValue>;
13
+ Multi(request: TransactionId, _metadata: Metadata | undefined): Promise<Empty>;
14
+ Exec(request: TransactionId, _metadata: Metadata | undefined): Promise<TransactionResponses>;
15
+ Discard(request: TransactionId, _metadata: Metadata | undefined): Promise<Empty>;
16
+ Unwatch(request: TransactionId, _metadata: Metadata | undefined): Promise<Empty>;
17
+ Watch(request: WatchRequest, metadata: Metadata | undefined): Promise<TransactionId>;
18
+ GetRange(request: KeyRangeRequest, metadata: Metadata | undefined): Promise<StringValue>;
19
+ IncrBy(request: IncrByRequest, metadata: Metadata | undefined): Promise<Int64Value>;
20
+ SetRange(request: SetRangeRequest, metadata: Metadata | undefined): Promise<Int64Value>;
21
+ Strlen(request: KeyRequest, metadata: Metadata | undefined): Promise<Int64Value>;
22
+ MGet(request: KeysRequest, metadata: Metadata | undefined): Promise<RedisValues>;
23
+ MSet(request: KeyValuesRequest, metadata: Metadata | undefined): Promise<Empty>;
24
+ Get(request: KeyRequest, metadata: Metadata | undefined): Promise<StringValue>;
25
+ Set(request: SetRequest, metadata: Metadata | undefined): Promise<StringValue>;
26
+ Expire(request: ExpireRequest, metadata: Metadata | undefined): Promise<Empty>;
27
+ ExpireTime(request: KeyRequest, metadata: Metadata | undefined): Promise<Int64Value>;
28
+ ZCard(request: KeyRequest, metadata: Metadata | undefined): Promise<Int64Value>;
29
+ ZAdd(request: ZAddRequest, metadata: Metadata | undefined): Promise<Int64Value>;
30
+ ZRem(request: ZRemRequest, metadata: Metadata | undefined): Promise<Int64Value>;
31
+ ZRange(request: ZRangeRequest, metadata: Metadata | undefined): Promise<ZMembers>;
32
+ ZRemRangeByLex(request: ZRemRangeByLexRequest, metadata: Metadata | undefined): Promise<Int64Value>;
33
+ ZRemRangeByRank(request: ZRemRangeByRankRequest, metadata: Metadata | undefined): Promise<Int64Value>;
34
+ ZRemRangeByScore(request: ZRemRangeByScoreRequest, metadata: Metadata | undefined): Promise<Int64Value>;
35
+ HGet(_request: HGetRequest, _metadata: Metadata | undefined): Promise<StringValue>;
36
+ HSet(_request: HSetRequest, _metadata: Metadata | undefined): Promise<Int64Value>;
37
+ HGetAll(_request: KeyRequest, _metadata: Metadata | undefined): Promise<RedisFieldValues>;
38
+ HDel(_request: HDelRequest, _metadata: Metadata | undefined): Promise<Int64Value>;
39
+ ZScore(_request: ZScoreRequest, _metadata: Metadata | undefined): Promise<DoubleValue>;
40
+ ZRank(_request: ZRankRequest, _metadata: Metadata | undefined): Promise<Int64Value>;
41
+ ZScan(_request: ZScanRequest, _metadata: Metadata | undefined): Promise<ZScanResponse>;
42
+ ZIncrBy(_request: ZIncrByRequest, _metadata: Metadata | undefined): Promise<DoubleValue>;
43
+ HKeys(_request: KeyRequest, _metadata?: Metadata): Promise<KeysResponse>;
44
+ HScan(_request: HScanRequest, _metadata?: Metadata): Promise<HScanResponse>;
45
+ HIncrBy(_request: HIncrByRequest, _metadata?: Metadata): Promise<Int64Value>;
46
+ HLen(_request: KeyRequest, _metadata?: Metadata): Promise<Int64Value>;
47
+ }
48
+ export {};
49
+ //# sourceMappingURL=LocalRedis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalRedis.d.ts","sourceRoot":"","sources":["../../src/test/LocalRedis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,443 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _LocalRedis_instances, _LocalRedis_redis, _LocalRedis_transactions, _LocalRedis_tx, _LocalRedis_newtx;
13
+ import { DoubleValue, Empty, Int64Value, RedisFieldValues, RedisValues, StringValue, } from '@devvit/protos';
14
+ import { createClient } from 'redis';
15
+ import { ZMembers } from '@devvit/protos';
16
+ import { Header } from '../Header.js';
17
+ const MaxResults = 1000;
18
+ const localRuntimeError = 'Please use devvit playtest to verify your app in a test subreddit.';
19
+ function namespacedKey(metadata, key) {
20
+ const installation = metadata?.[Header.Installation]?.values[0] || '';
21
+ const app = metadata?.[Header.App]?.values[0] || '';
22
+ return `${installation}:${app}:${key}`;
23
+ }
24
+ export class LocalRedis {
25
+ static async create(url) {
26
+ if (!url) {
27
+ if (process.env.CI === 'true') {
28
+ url = 'redis://redis:6379';
29
+ }
30
+ else {
31
+ url = 'redis://localhost:6379';
32
+ }
33
+ }
34
+ const redis = createClient({ url });
35
+ console.log(`connecting to ${url} ...`);
36
+ await redis.connect();
37
+ await redis.flushAll();
38
+ return new LocalRedis(redis);
39
+ }
40
+ constructor(redis) {
41
+ _LocalRedis_instances.add(this);
42
+ _LocalRedis_redis.set(this, void 0);
43
+ _LocalRedis_transactions.set(this, {});
44
+ __classPrivateFieldSet(this, _LocalRedis_redis, redis, "f");
45
+ }
46
+ async Del(request, metadata) {
47
+ const keys = request.keys.map((key) => namespacedKey(metadata, key));
48
+ if (request.transactionId) {
49
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).del(keys);
50
+ return { value: 0 };
51
+ }
52
+ else {
53
+ const count = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").del(keys);
54
+ return { value: count };
55
+ }
56
+ }
57
+ async Type(request, metadata) {
58
+ const type = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").type(namespacedKey(metadata, request.key));
59
+ return { value: type };
60
+ }
61
+ async Multi(request, _metadata) {
62
+ const transaction = __classPrivateFieldGet(this, _LocalRedis_transactions, "f")[request.id];
63
+ if (!transaction) {
64
+ throw new Error('Transaction not found');
65
+ }
66
+ if (transaction.multi) {
67
+ throw new Error('Transaction already multi');
68
+ }
69
+ transaction.multi = transaction.isoClient.multi();
70
+ return {};
71
+ }
72
+ async Exec(request, _metadata) {
73
+ const transaction = __classPrivateFieldGet(this, _LocalRedis_transactions, "f")[request.id];
74
+ if (!transaction) {
75
+ throw new Error('Transaction not found');
76
+ }
77
+ if (!transaction.multi) {
78
+ await transaction.close();
79
+ throw new Error('Transaction not multi');
80
+ }
81
+ const responses = await transaction.multi.exec();
82
+ console.log(responses);
83
+ delete __classPrivateFieldGet(this, _LocalRedis_transactions, "f")[request.id];
84
+ const values = (responses || []).map((value) => {
85
+ if (typeof value === 'string') {
86
+ return { str: value };
87
+ }
88
+ else if (value === null) {
89
+ return { nil: {} };
90
+ }
91
+ else if (typeof value === 'number') {
92
+ return { num: value };
93
+ }
94
+ else if (Array.isArray(value)) {
95
+ const strings = value.map((v) => v + '');
96
+ return { values: { values: strings } };
97
+ }
98
+ else {
99
+ throw new Error('Unsupported value type');
100
+ }
101
+ });
102
+ await transaction.close();
103
+ return { response: values };
104
+ }
105
+ async Discard(request, _metadata) {
106
+ const transaction = __classPrivateFieldGet(this, _LocalRedis_transactions, "f")[request.id];
107
+ if (!transaction) {
108
+ throw new Error('Transaction not found');
109
+ }
110
+ if (!transaction.multi) {
111
+ await transaction.close();
112
+ throw new Error('Multi not found');
113
+ }
114
+ transaction.multi.discard();
115
+ await transaction.close();
116
+ delete __classPrivateFieldGet(this, _LocalRedis_transactions, "f")[request.id];
117
+ return Empty.fromPartial({});
118
+ }
119
+ async Unwatch(request, _metadata) {
120
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request).unwatch();
121
+ return Empty.fromPartial({});
122
+ }
123
+ async Watch(request, metadata) {
124
+ let id = request.transactionId;
125
+ if (!id) {
126
+ const tx = await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_newtx).call(this);
127
+ id = { id: tx.id };
128
+ }
129
+ if (request.keys.length > 0) {
130
+ const keys = request.keys.map((key) => namespacedKey(metadata, key));
131
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, id).watch(keys);
132
+ }
133
+ return id;
134
+ }
135
+ async GetRange(request, metadata) {
136
+ const key = namespacedKey(metadata, request.key);
137
+ if (request.transactionId) {
138
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).getRange(key, request.start, request.end);
139
+ return StringValue.fromPartial({});
140
+ }
141
+ else {
142
+ const value = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").getRange(key, request.start, request.end);
143
+ return value ? { value: value } : StringValue.fromPartial({});
144
+ }
145
+ }
146
+ async IncrBy(request, metadata) {
147
+ const key = namespacedKey(metadata, request.key);
148
+ if (request.transactionId) {
149
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).incrBy(key, request.value);
150
+ return Int64Value.fromPartial({});
151
+ }
152
+ else {
153
+ const value = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").incrBy(key, request.value);
154
+ return { value };
155
+ }
156
+ }
157
+ async SetRange(request, metadata) {
158
+ const key = namespacedKey(metadata, request.key);
159
+ if (request.transactionId) {
160
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).setRange(key, request.offset, request.value);
161
+ return Int64Value.fromPartial({});
162
+ }
163
+ else {
164
+ const length = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").setRange(key, request.offset, request.value);
165
+ return { value: length };
166
+ }
167
+ }
168
+ async Strlen(request, metadata) {
169
+ const key = namespacedKey(metadata, request.key);
170
+ if (request.transactionId) {
171
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).strLen(key);
172
+ return Int64Value.fromPartial({});
173
+ }
174
+ else {
175
+ const length = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").strLen(key);
176
+ return { value: length };
177
+ }
178
+ }
179
+ async MGet(request, metadata) {
180
+ const keys = request.keys.map((key) => namespacedKey(metadata, key));
181
+ if (request.transactionId) {
182
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).mGet(keys);
183
+ return RedisValues.fromPartial({});
184
+ }
185
+ else {
186
+ const values = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").mGet(keys);
187
+ return RedisValues.fromPartial({ values: values.map((value) => (value ? value : '')) });
188
+ }
189
+ }
190
+ async MSet(request, metadata) {
191
+ const keyValues = request.kv.reduce((obj, item) => {
192
+ obj[namespacedKey(metadata, item.key)] = item.value;
193
+ return obj;
194
+ }, {});
195
+ if (request.transactionId) {
196
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).mSet(keyValues);
197
+ }
198
+ else {
199
+ await __classPrivateFieldGet(this, _LocalRedis_redis, "f").mSet(keyValues);
200
+ }
201
+ return Empty.fromPartial({});
202
+ }
203
+ async Get(request, metadata) {
204
+ const key = namespacedKey(metadata, request.key);
205
+ if (request.transactionId) {
206
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).get(key);
207
+ return StringValue.fromPartial({});
208
+ }
209
+ else {
210
+ const value = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").get(key);
211
+ return { value: value ?? '' };
212
+ }
213
+ }
214
+ async Set(request, metadata) {
215
+ const key = namespacedKey(metadata, request.key);
216
+ if (request.transactionId) {
217
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).set(key, request.value);
218
+ return StringValue.fromPartial({});
219
+ }
220
+ else {
221
+ if (request.nx) {
222
+ const value = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").setNX(key, request.value);
223
+ return { value: value ? 'OK' : '' };
224
+ }
225
+ else {
226
+ const value = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").set(key, request.value);
227
+ return { value: value ?? '' };
228
+ }
229
+ }
230
+ }
231
+ async Expire(request, metadata) {
232
+ const key = namespacedKey(metadata, request.key);
233
+ if (request.transactionId) {
234
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).expire(key, request.seconds);
235
+ }
236
+ else {
237
+ await __classPrivateFieldGet(this, _LocalRedis_redis, "f").expire(key, request.seconds);
238
+ }
239
+ return Empty.fromPartial({});
240
+ }
241
+ async ExpireTime(request, metadata) {
242
+ const key = namespacedKey(metadata, request.key);
243
+ if (request.transactionId) {
244
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).ttl(key);
245
+ return Int64Value.fromPartial({});
246
+ }
247
+ else {
248
+ const ttl = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").ttl(key);
249
+ return { value: ttl };
250
+ }
251
+ }
252
+ async ZCard(request, metadata) {
253
+ const key = namespacedKey(metadata, request.key);
254
+ if (request.transactionId) {
255
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).zCard(key);
256
+ return Int64Value.fromPartial({});
257
+ }
258
+ else {
259
+ const length = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").zCard(key);
260
+ return { value: length };
261
+ }
262
+ }
263
+ async ZAdd(request, metadata) {
264
+ const key = namespacedKey(metadata, request.key);
265
+ const zaddArgs = request.members.flatMap((member) => ({
266
+ score: member.score,
267
+ value: member.member,
268
+ }));
269
+ if (request.transactionId) {
270
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.transactionId).zAdd(key, zaddArgs);
271
+ return Int64Value.fromPartial({});
272
+ }
273
+ else {
274
+ const changed = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").zAdd(key, zaddArgs);
275
+ return { value: changed };
276
+ }
277
+ }
278
+ async ZRem(request, metadata) {
279
+ const key = namespacedKey(metadata, request.key.key);
280
+ if (request.key?.transactionId) {
281
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.key?.transactionId).zRem(key, request.members);
282
+ return Int64Value.fromPartial({});
283
+ }
284
+ else {
285
+ const count = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").zRem(key, request.members);
286
+ return { value: count };
287
+ }
288
+ }
289
+ async ZRange(request, metadata) {
290
+ const key = namespacedKey(metadata, request.key.key);
291
+ const count = Math.min(request.count, MaxResults); // Define MaxResults constant somewhere in your code
292
+ // eslint-disable-next-line
293
+ let opts = {};
294
+ if (!request.byLex && !request.byScore) {
295
+ let stop = parseInt(request.stop);
296
+ const start = parseInt(request.start);
297
+ stop = Math.min(stop, start + MaxResults);
298
+ if (stop < 0)
299
+ stop = start + MaxResults;
300
+ request.stop = stop.toString();
301
+ }
302
+ else {
303
+ opts.LIMIT = {
304
+ offset: request.offset,
305
+ count: count,
306
+ };
307
+ }
308
+ if (request.rev) {
309
+ throw new Error('unsupported');
310
+ }
311
+ if (request.byLex)
312
+ opts.BY = 'LEX';
313
+ if (request.byScore)
314
+ opts.BY = 'SCORE';
315
+ if (request.rev)
316
+ opts.REV = true;
317
+ if (request.key?.transactionId) {
318
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.key?.transactionId).zRangeWithScores(key, request.start, request.stop, opts);
319
+ return ZMembers.fromPartial({});
320
+ }
321
+ else {
322
+ const rsp = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").zRangeWithScores(key, request.start, request.stop, opts);
323
+ return { members: rsp.map(({ score, value }) => ({ score, member: value })) };
324
+ }
325
+ }
326
+ async ZRemRangeByLex(request, metadata) {
327
+ const key = namespacedKey(metadata, request.key.key);
328
+ if (request.key?.transactionId) {
329
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.key?.transactionId).zRemRangeByLex(key, request.min, request.max);
330
+ return Int64Value.fromPartial({});
331
+ }
332
+ else {
333
+ const count = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").zRemRangeByLex(key, request.min, request.max);
334
+ return { value: count };
335
+ }
336
+ }
337
+ async ZRemRangeByRank(request, metadata) {
338
+ const key = namespacedKey(metadata, request.key.key);
339
+ if (request.key?.transactionId) {
340
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.key?.transactionId).zRemRangeByRank(key, request.start, request.stop);
341
+ return Int64Value.fromPartial({});
342
+ }
343
+ else {
344
+ const count = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").zRemRangeByRank(key, request.start, request.stop);
345
+ return { value: count };
346
+ }
347
+ }
348
+ async ZRemRangeByScore(request, metadata) {
349
+ const key = namespacedKey(metadata, request.key.key);
350
+ if (request.key?.transactionId) {
351
+ await __classPrivateFieldGet(this, _LocalRedis_instances, "m", _LocalRedis_tx).call(this, request.key?.transactionId).zRemRangeByScore(key, request.min.toString(), request.max.toString());
352
+ return Int64Value.fromPartial({});
353
+ }
354
+ else {
355
+ const count = await __classPrivateFieldGet(this, _LocalRedis_redis, "f").zRemRangeByScore(key, request.min.toString(), request.max.toString());
356
+ return { value: count };
357
+ }
358
+ }
359
+ async HGet(_request, _metadata) {
360
+ console.error('HGET is not supported in Node Runtime. ' + localRuntimeError);
361
+ return StringValue.fromPartial({});
362
+ }
363
+ async HSet(_request, _metadata) {
364
+ console.error('HSET is not supported in Node Runtime. ' + localRuntimeError);
365
+ return Int64Value.fromPartial({});
366
+ }
367
+ async HGetAll(_request, _metadata) {
368
+ console.error('HGETAll is not supported in Node Runtime. ' + localRuntimeError);
369
+ return RedisFieldValues.fromPartial({});
370
+ }
371
+ async HDel(_request, _metadata) {
372
+ console.error('HDel is not supported in Node Runtime. ' + localRuntimeError);
373
+ return Int64Value.fromPartial({});
374
+ }
375
+ async ZScore(_request, _metadata) {
376
+ console.error('ZScore is not supported in Node Runtime. ' + localRuntimeError);
377
+ return DoubleValue.fromPartial({});
378
+ }
379
+ async ZRank(_request, _metadata) {
380
+ console.error('ZRank is not supported in Node Runtime. ' + localRuntimeError);
381
+ return Int64Value.fromPartial({});
382
+ }
383
+ async ZScan(_request, _metadata) {
384
+ console.error('ZScan is not supported in Node Runtime. ' + localRuntimeError);
385
+ return { cursor: 0, members: [] };
386
+ }
387
+ async ZIncrBy(_request, _metadata) {
388
+ console.error('ZIncrBy is not supported in Node Runtime. ' + localRuntimeError);
389
+ return DoubleValue.fromPartial({});
390
+ }
391
+ async HKeys(_request, _metadata) {
392
+ console.error('HKeys is not supported in Node Runtime. ' + localRuntimeError);
393
+ return { keys: [] };
394
+ }
395
+ async HScan(_request, _metadata) {
396
+ console.error('HScan is not supported in Node Runtime. ' + localRuntimeError);
397
+ return { cursor: 0, fieldValues: [] };
398
+ }
399
+ async HIncrBy(_request, _metadata) {
400
+ console.error('HIncrBy is not supported in Node Runtime. ' + localRuntimeError);
401
+ return Int64Value.fromPartial({});
402
+ }
403
+ async HLen(_request, _metadata) {
404
+ console.error('HLen is not supported in Node Runtime. ' + localRuntimeError);
405
+ return Int64Value.fromPartial({});
406
+ }
407
+ }
408
+ _LocalRedis_redis = new WeakMap(), _LocalRedis_transactions = new WeakMap(), _LocalRedis_instances = new WeakSet(), _LocalRedis_tx = function _LocalRedis_tx(txId) {
409
+ const tx = __classPrivateFieldGet(this, _LocalRedis_transactions, "f")[txId.id];
410
+ if (!tx) {
411
+ throw new Error('Transaction not found');
412
+ }
413
+ if (tx.multi) {
414
+ return tx.multi;
415
+ }
416
+ return tx.isoClient;
417
+ }, _LocalRedis_newtx = async function _LocalRedis_newtx() {
418
+ const id = Math.random().toString(36).substring(7);
419
+ let close;
420
+ let ready;
421
+ const closePromise = new Promise((resolve) => {
422
+ close = resolve;
423
+ });
424
+ const readyPromise = new Promise((resolve) => {
425
+ ready = resolve;
426
+ });
427
+ __classPrivateFieldGet(this, _LocalRedis_redis, "f")
428
+ .executeIsolated(async (isoClient) => {
429
+ __classPrivateFieldGet(this, _LocalRedis_transactions, "f")[id] = {
430
+ isoClient,
431
+ close,
432
+ multi: undefined,
433
+ id,
434
+ };
435
+ ready();
436
+ await closePromise;
437
+ })
438
+ .catch((err) => {
439
+ console.error(err);
440
+ });
441
+ await readyPromise;
442
+ return __classPrivateFieldGet(this, _LocalRedis_transactions, "f")[id];
443
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalRedis.test.d.ts","sourceRoot":"","sources":["../../src/test/LocalRedis.test.ts"],"names":[],"mappings":""}