@juzi/wechaty 1.0.156 → 1.0.158

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/cjs/src/package-json.js +4 -4
  2. package/dist/cjs/src/user-modules/contact.d.ts +24 -0
  3. package/dist/cjs/src/user-modules/contact.d.ts.map +1 -1
  4. package/dist/cjs/src/user-modules/contact.js +55 -0
  5. package/dist/cjs/src/user-modules/contact.js.map +1 -1
  6. package/dist/cjs/src/user-modules/contact.spec.js +156 -0
  7. package/dist/cjs/src/user-modules/contact.spec.js.map +1 -1
  8. package/dist/cjs/src/user-modules/room.d.ts +23 -0
  9. package/dist/cjs/src/user-modules/room.d.ts.map +1 -1
  10. package/dist/cjs/src/user-modules/room.js +52 -0
  11. package/dist/cjs/src/user-modules/room.js.map +1 -1
  12. package/dist/cjs/src/user-modules/room.spec.js +156 -0
  13. package/dist/cjs/src/user-modules/room.spec.js.map +1 -1
  14. package/dist/esm/src/package-json.js +4 -4
  15. package/dist/esm/src/user-modules/contact.d.ts +24 -0
  16. package/dist/esm/src/user-modules/contact.d.ts.map +1 -1
  17. package/dist/esm/src/user-modules/contact.js +55 -0
  18. package/dist/esm/src/user-modules/contact.js.map +1 -1
  19. package/dist/esm/src/user-modules/contact.spec.js +157 -1
  20. package/dist/esm/src/user-modules/contact.spec.js.map +1 -1
  21. package/dist/esm/src/user-modules/room.d.ts +23 -0
  22. package/dist/esm/src/user-modules/room.d.ts.map +1 -1
  23. package/dist/esm/src/user-modules/room.js +52 -0
  24. package/dist/esm/src/user-modules/room.js.map +1 -1
  25. package/dist/esm/src/user-modules/room.spec.js +156 -0
  26. package/dist/esm/src/user-modules/room.spec.js.map +1 -1
  27. package/package.json +3 -3
  28. package/src/package-json.ts +4 -4
  29. package/src/user-modules/contact.spec.ts +212 -0
  30. package/src/user-modules/contact.ts +67 -0
  31. package/src/user-modules/room.spec.ts +210 -0
  32. package/src/user-modules/room.ts +63 -0
@@ -268,6 +268,69 @@ class RoomMixin extends MixinBase implements SayableSayer {
268
268
  return undefined
269
269
  }
270
270
 
271
+ /**
272
+ * Async iterator variant of {@link findAll} that yields rooms in batches.
273
+ *
274
+ * Each batch is materialised with a single `puppet.batchRoomPayload` RPC,
275
+ * so iterating N rooms costs roughly `ceil(N / batch)` round trips instead
276
+ * of N. Uses `puppet.batchRoomPayload` directly (required on the puppet
277
+ * abstract), so callers do not need a per-id fallback path. Callers may
278
+ * `break` between batches to short-circuit.
279
+ *
280
+ * @static
281
+ * @param {PUPPET.filters.Room} [query]
282
+ * @param {{ batch?: number }} [opts] batch size, default 100
283
+ * @returns {AsyncIterable<RoomInterface[]>}
284
+ * @example
285
+ * for await (const chunk of bot.Room.findAllIter()) {
286
+ * for (const room of chunk) {
287
+ * console.log(await room.topic())
288
+ * }
289
+ * }
290
+ */
291
+ static async * findAllIter (
292
+ query? : PUPPET.filters.Room,
293
+ opts? : { batch?: number },
294
+ ): AsyncIterable<RoomInterface[]> {
295
+ const batch = opts?.batch ?? 100
296
+ log.verbose('Room', 'findAllIter(%s, batch=%d)', JSON.stringify(query, stringifyFilter) || '', batch)
297
+
298
+ if (batch <= 0) {
299
+ throw new Error(`Room.findAllIter() batch must be positive, got ${batch}`)
300
+ }
301
+
302
+ const roomIdList: string[] = await this.wechaty.puppet.roomSearch(query)
303
+
304
+ if (!this.wechaty.isLoggedIn) {
305
+ throw new Error('Room.findAllIter() requires logged in')
306
+ }
307
+
308
+ for (let i = 0; i < roomIdList.length; i += batch) {
309
+ const idChunk = roomIdList.slice(i, i + batch)
310
+
311
+ const payloadMap = await this.wechaty.puppet.batchRoomPayload(idChunk)
312
+
313
+ const roomChunk: RoomInterface[] = []
314
+ for (const id of idChunk) {
315
+ const payload = payloadMap.get(id)
316
+ if (!payload) {
317
+ log.silly('Room', 'findAllIter() payload missing for id=%s, skip', id)
318
+ continue
319
+ }
320
+
321
+ const room = (this.wechaty.Room as any as typeof RoomImpl).load(id)
322
+ room.payload = payload
323
+ roomChunk.push(room)
324
+ }
325
+
326
+ if (roomChunk.length > 0) {
327
+ yield roomChunk
328
+ } else {
329
+ log.warn('Room', 'findAllIter() batch all missing from payloadMap, idChunk=%j', idChunk)
330
+ }
331
+ }
332
+ }
333
+
271
334
  static async batchLoadRooms (roomIdList: string[]) {
272
335
  let continuousErrorCount = 0
273
336
  let totalErrorCount = 0