@juzi/wechaty 1.0.23 → 1.0.26

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 (77) hide show
  1. package/dist/cjs/src/config.d.ts +2 -0
  2. package/dist/cjs/src/config.d.ts.map +1 -1
  3. package/dist/cjs/src/config.js +3 -1
  4. package/dist/cjs/src/config.js.map +1 -1
  5. package/dist/cjs/src/package-json.js +4 -4
  6. package/dist/cjs/src/pure-functions/update.d.ts +1 -0
  7. package/dist/cjs/src/pure-functions/update.d.ts.map +1 -1
  8. package/dist/cjs/src/pure-functions/update.js +12 -1
  9. package/dist/cjs/src/pure-functions/update.js.map +1 -1
  10. package/dist/cjs/src/schemas/wechaty-events.d.ts +8 -2
  11. package/dist/cjs/src/schemas/wechaty-events.d.ts.map +1 -1
  12. package/dist/cjs/src/schemas/wechaty-events.js.map +1 -1
  13. package/dist/cjs/src/user-modules/contact.d.ts.map +1 -1
  14. package/dist/cjs/src/user-modules/contact.js +7 -20
  15. package/dist/cjs/src/user-modules/contact.js.map +1 -1
  16. package/dist/cjs/src/user-modules/tag-group.d.ts +55 -20
  17. package/dist/cjs/src/user-modules/tag-group.d.ts.map +1 -1
  18. package/dist/cjs/src/user-modules/tag-group.js +113 -44
  19. package/dist/cjs/src/user-modules/tag-group.js.map +1 -1
  20. package/dist/cjs/src/user-modules/tag.d.ts +58 -24
  21. package/dist/cjs/src/user-modules/tag.d.ts.map +1 -1
  22. package/dist/cjs/src/user-modules/tag.js +142 -51
  23. package/dist/cjs/src/user-modules/tag.js.map +1 -1
  24. package/dist/cjs/src/wechaty/wechaty-base.d.ts +7 -7
  25. package/dist/cjs/src/wechaty-mixins/gerror-mixin.d.ts +1 -1
  26. package/dist/cjs/src/wechaty-mixins/io-mixin.d.ts +2 -2
  27. package/dist/cjs/src/wechaty-mixins/login-mixin.d.ts +5 -5
  28. package/dist/cjs/src/wechaty-mixins/misc-mixin.d.ts +5 -5
  29. package/dist/cjs/src/wechaty-mixins/plugin-mixin.d.ts +6 -6
  30. package/dist/cjs/src/wechaty-mixins/puppet-mixin.d.ts +32 -6
  31. package/dist/cjs/src/wechaty-mixins/puppet-mixin.d.ts.map +1 -1
  32. package/dist/cjs/src/wechaty-mixins/puppet-mixin.js +92 -10
  33. package/dist/cjs/src/wechaty-mixins/puppet-mixin.js.map +1 -1
  34. package/dist/cjs/src/wechaty-mixins/wechatify-user-module-mixin.d.ts +1 -1
  35. package/dist/esm/src/config.d.ts +2 -0
  36. package/dist/esm/src/config.d.ts.map +1 -1
  37. package/dist/esm/src/config.js +2 -0
  38. package/dist/esm/src/config.js.map +1 -1
  39. package/dist/esm/src/package-json.js +4 -4
  40. package/dist/esm/src/pure-functions/update.d.ts +1 -0
  41. package/dist/esm/src/pure-functions/update.d.ts.map +1 -1
  42. package/dist/esm/src/pure-functions/update.js +10 -0
  43. package/dist/esm/src/pure-functions/update.js.map +1 -1
  44. package/dist/esm/src/schemas/wechaty-events.d.ts +8 -2
  45. package/dist/esm/src/schemas/wechaty-events.d.ts.map +1 -1
  46. package/dist/esm/src/schemas/wechaty-events.js.map +1 -1
  47. package/dist/esm/src/user-modules/contact.d.ts.map +1 -1
  48. package/dist/esm/src/user-modules/contact.js +7 -20
  49. package/dist/esm/src/user-modules/contact.js.map +1 -1
  50. package/dist/esm/src/user-modules/tag-group.d.ts +55 -20
  51. package/dist/esm/src/user-modules/tag-group.d.ts.map +1 -1
  52. package/dist/esm/src/user-modules/tag-group.js +114 -45
  53. package/dist/esm/src/user-modules/tag-group.js.map +1 -1
  54. package/dist/esm/src/user-modules/tag.d.ts +58 -24
  55. package/dist/esm/src/user-modules/tag.d.ts.map +1 -1
  56. package/dist/esm/src/user-modules/tag.js +120 -52
  57. package/dist/esm/src/user-modules/tag.js.map +1 -1
  58. package/dist/esm/src/wechaty/wechaty-base.d.ts +7 -7
  59. package/dist/esm/src/wechaty-mixins/gerror-mixin.d.ts +1 -1
  60. package/dist/esm/src/wechaty-mixins/io-mixin.d.ts +2 -2
  61. package/dist/esm/src/wechaty-mixins/login-mixin.d.ts +5 -5
  62. package/dist/esm/src/wechaty-mixins/misc-mixin.d.ts +5 -5
  63. package/dist/esm/src/wechaty-mixins/plugin-mixin.d.ts +6 -6
  64. package/dist/esm/src/wechaty-mixins/puppet-mixin.d.ts +32 -6
  65. package/dist/esm/src/wechaty-mixins/puppet-mixin.d.ts.map +1 -1
  66. package/dist/esm/src/wechaty-mixins/puppet-mixin.js +94 -12
  67. package/dist/esm/src/wechaty-mixins/puppet-mixin.js.map +1 -1
  68. package/dist/esm/src/wechaty-mixins/wechatify-user-module-mixin.d.ts +1 -1
  69. package/package.json +3 -3
  70. package/src/config.ts +3 -0
  71. package/src/package-json.ts +4 -4
  72. package/src/pure-functions/update.ts +11 -0
  73. package/src/schemas/wechaty-events.ts +7 -0
  74. package/src/user-modules/contact.ts +7 -20
  75. package/src/user-modules/tag-group.ts +147 -53
  76. package/src/user-modules/tag.ts +126 -58
  77. package/src/wechaty-mixins/puppet-mixin.ts +106 -12
@@ -1,44 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TagGroupImpl = void 0;
4
+ const rx_queue_1 = require("rx-queue");
4
5
  const config_js_1 = require("../config.js");
6
+ const poolify_js_1 = require("../user-mixins/poolify.js");
5
7
  const validation_js_1 = require("../user-mixins/validation.js");
6
8
  const wechatify_js_1 = require("../user-mixins/wechatify.js");
7
- class TagGroupMixin extends (0, wechatify_js_1.wechatifyMixinBase)() {
8
- payload;
9
+ const MixinBase = (0, wechatify_js_1.wechatifyMixin)((0, poolify_js_1.poolifyMixin)(Object)());
10
+ class TagGroupMixin extends MixinBase {
11
+ id;
9
12
  /**
10
13
  *
11
- * Create
14
+ * Instance properties
15
+ * @ignore
12
16
  *
13
17
  */
14
- static create(payload) {
15
- config_js_1.log.verbose('TagGroup', 'create()');
16
- return new this(payload);
17
- }
18
+ payload;
18
19
  /**
19
20
  * @hideconstructor
20
21
  */
21
- constructor(payload) {
22
+ constructor(id) {
22
23
  super();
23
- this.payload = payload;
24
+ this.id = id;
24
25
  config_js_1.log.silly('TagGroup', 'constructor()');
25
26
  }
26
- id() {
27
- return this.payload.id;
28
- }
29
27
  name() {
30
- return this.payload.name;
28
+ return (this.payload && this.payload.name) || '';
31
29
  }
32
- static pool = [];
33
- static async list(forceSync = false) {
34
- config_js_1.log.verbose('TagGroup', 'list(%s)', forceSync);
35
- if (this.pool.length > 0 && !forceSync) {
36
- return this.pool;
37
- }
30
+ static async list() {
31
+ config_js_1.log.verbose('TagGroup', 'list()');
38
32
  try {
39
- const payloads = await this.wechaty.puppet.tagGroupList();
40
- this.pool = payloads.map(payload => new this(payload));
41
- return this.pool;
33
+ const tagGroupIds = await this.wechaty.puppet.tagGroupList();
34
+ const idToTagGroup = async (id) => this.find({ id }).catch(e => this.wechaty.emitError(e));
35
+ const CONCURRENCY = 17;
36
+ const tagGroupIterator = (0, rx_queue_1.concurrencyExecuter)(CONCURRENCY)(idToTagGroup)(tagGroupIds);
37
+ const tagGroupList = [];
38
+ for await (const tagGroup of tagGroupIterator) {
39
+ if (tagGroup) {
40
+ tagGroupList.push(tagGroup);
41
+ }
42
+ }
43
+ return tagGroupList;
42
44
  }
43
45
  catch (e) {
44
46
  this.wechaty.emitError(e);
@@ -46,26 +48,12 @@ class TagGroupMixin extends (0, wechatify_js_1.wechatifyMixinBase)() {
46
48
  return [];
47
49
  }
48
50
  }
49
- static async sync() {
50
- config_js_1.log.verbose('TagGroup', 'sync()');
51
- await this.list(true);
52
- }
53
- static load(tagGroupId) {
54
- config_js_1.log.verbose('TagGroup', 'load(%s)', tagGroupId);
55
- for (const item of this.pool) {
56
- if (item.id() === tagGroupId) {
57
- return item;
58
- }
59
- }
60
- return undefined;
61
- }
62
51
  static async createTagGroup(name) {
63
52
  config_js_1.log.verbose('TagGroup', 'createTagGroup(%s, %s)', name);
64
53
  try {
65
- const payload = await this.wechaty.puppet.tagGroupAdd(name);
66
- if (payload) {
67
- const newTagGroup = new this(payload);
68
- this.pool.push(newTagGroup);
54
+ const groupId = await this.wechaty.puppet.tagGroupAdd(name);
55
+ if (groupId) {
56
+ const newTagGroup = await this.find({ id: groupId });
69
57
  return newTagGroup;
70
58
  }
71
59
  }
@@ -77,8 +65,7 @@ class TagGroupMixin extends (0, wechatify_js_1.wechatifyMixinBase)() {
77
65
  static async deleteTagGroup(tagGroup) {
78
66
  config_js_1.log.verbose('TagGroup', 'deleteTagGroup(%s)', tagGroup);
79
67
  try {
80
- await this.wechaty.puppet.tagGroupDelete(tagGroup.id());
81
- this.pool.splice(this.pool.indexOf(tagGroup), 1);
68
+ await this.wechaty.puppet.tagGroupDelete(tagGroup.id);
82
69
  }
83
70
  catch (e) {
84
71
  this.wechaty.emitError(e);
@@ -86,13 +73,95 @@ class TagGroupMixin extends (0, wechatify_js_1.wechatifyMixinBase)() {
86
73
  }
87
74
  }
88
75
  async tags() {
89
- return (await this.wechaty.Tag.list()).filter(tag => tag.groupId() === this.id());
76
+ config_js_1.log.verbose('TagGroup', 'tags(%s)', this);
77
+ try {
78
+ const tagIdList = await this.wechaty.puppet.tagGroupTagList(this.id);
79
+ const idToTag = async (tagId) => this.wechaty.Tag.find({ id: tagId }).catch(e => this.wechaty.emitError(e));
80
+ const CONCURRENCY = 17;
81
+ const tagIterator = (0, rx_queue_1.concurrencyExecuter)(CONCURRENCY)(idToTag)(tagIdList);
82
+ const tagList = [];
83
+ for await (const tag of tagIterator) {
84
+ if (tag) {
85
+ tagList.push(tag);
86
+ }
87
+ }
88
+ return tagList;
89
+ }
90
+ catch (e) {
91
+ this.wechaty.emitError(e);
92
+ config_js_1.log.error('TagGroup', 'list() exception: %s', e.message);
93
+ return [];
94
+ }
95
+ }
96
+ static async find(filter) {
97
+ config_js_1.log.silly('TagGroup', 'find(%s)', JSON.stringify(filter));
98
+ if (filter.id) {
99
+ const tagGroup = this.wechaty.TagGroup.load(filter.id);
100
+ try {
101
+ await tagGroup.ready();
102
+ }
103
+ catch (e) {
104
+ this.wechaty.emitError(e);
105
+ return undefined;
106
+ }
107
+ return tagGroup;
108
+ }
109
+ if (filter.name) {
110
+ const tagGroups = (await this.wechaty.TagGroup.list()).filter(tagGroup => tagGroup.name() === filter.name);
111
+ if (tagGroups.length > 0) {
112
+ return tagGroups[0];
113
+ }
114
+ }
115
+ return undefined;
116
+ // TODO: use a puppet method to find tag, like how contact and room do it
117
+ }
118
+ /**
119
+ * Force reload data for TagGroup, Sync data from low-level API again.
120
+ *
121
+ * @returns {Promise<this>}
122
+ * @example
123
+ * await tagGroup.sync()
124
+ */
125
+ async sync() {
126
+ await this.wechaty.puppet.tagGroupPayloadDirty(this.id);
127
+ await this.ready(true);
128
+ }
129
+ /**
130
+ * @ignore
131
+ */
132
+ isReady() {
133
+ return !!(this.payload);
134
+ }
135
+ /**
136
+ * `ready()` is For FrameWork ONLY!
137
+ *
138
+ * Please not to use `ready()` at the user land.
139
+ * If you want to sync data, use `sync()` instead.
140
+ *
141
+ * @ignore
142
+ */
143
+ async ready(forceSync = false) {
144
+ config_js_1.log.silly('TagGroup', 'ready() @ %s with TagGroup="%s"', this.wechaty.puppet, this.id);
145
+ if (!forceSync && this.isReady()) { // already ready
146
+ config_js_1.log.silly('TagGroup', 'ready() isReady() true');
147
+ return;
148
+ }
149
+ try {
150
+ this.payload = await this.wechaty.puppet.tagGroupPayload(this.id);
151
+ }
152
+ catch (e) {
153
+ this.wechaty.emitError(e);
154
+ config_js_1.log.verbose('TagGroup', 'ready() this.wechaty.puppet.tagGroupPayload(%s) exception: %s', this.id, e.message);
155
+ throw e;
156
+ }
90
157
  }
91
158
  toString() {
92
- return `<TagGroup#${this.name() || this.id()}>`;
159
+ return `<TagGroup#${this.name() || this.id}>`;
93
160
  }
94
161
  }
95
- class TagGroupImpl extends (0, validation_js_1.validationMixin)(TagGroupMixin)() {
162
+ class TagGroupImplBase extends (0, validation_js_1.validationMixin)(TagGroupMixin)() {
163
+ }
164
+ class TagGroupImpl extends (0, validation_js_1.validationMixin)(TagGroupImplBase)() {
96
165
  }
97
166
  exports.TagGroupImpl = TagGroupImpl;
98
167
  //# sourceMappingURL=tag-group.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tag-group.js","sourceRoot":"","sources":["../../../../src/user-modules/tag-group.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tag-group.js","sourceRoot":"","sources":["../../../../src/user-modules/tag-group.ts"],"names":[],"mappings":"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"}
@@ -17,56 +17,90 @@
17
17
  * limitations under the License.
18
18
  *
19
19
  */
20
- import type * as PUPPET from '@juzi/wechaty-puppet';
21
- import type { TagIdentifier } from '@juzi/wechaty-puppet/filters';
20
+ import * as PUPPET from '@juzi/wechaty-puppet';
21
+ import type { TagQueryFilter } from '@juzi/wechaty-puppet/dist/esm/src/schemas/tag.js';
22
22
  import type { Constructor } from 'clone-class';
23
23
  import type { ContactInterface } from './contact.js';
24
24
  import type { TagGroupInterface } from './tag-group.js';
25
- declare const TagMixin_base: ((abstract new (...args: any[]) => {
25
+ declare const MixinBase: ((abstract new (...args: any[]) => {
26
26
  readonly wechaty: import("../wechaty/wechaty-impl.js").WechatyInterface;
27
27
  }) & {
28
28
  readonly wechaty: import("../wechaty/wechaty-impl.js").WechatyInterface;
29
- }) & {
30
- new (): {};
31
- };
32
- declare class TagMixin extends TagMixin_base {
33
- readonly payload: PUPPET.payloads.Tag;
29
+ }) & ((abstract new (...args: any[]) => {}) & {
30
+ _pool?: Map<string, TagImplInterface> | undefined;
31
+ readonly pool: Map<string, TagImplInterface>;
32
+ load<L extends import("clone-class/dist/esm/src/constructor.js").ClassInterface<{}> & {
33
+ new (...args: any[]): TagImplInterface;
34
+ prototype: TagImplInterface;
35
+ } & import("../user-mixins/poolify.js").PoolifyMixin<TagImplInterface>>(this: L, id: string): TagImplInterface;
36
+ }) & ObjectConstructor;
37
+ declare class TagMixin extends MixinBase {
38
+ readonly id: string;
34
39
  /**
35
40
  *
36
- * Create
41
+ * Instance properties
42
+ * @ignore
37
43
  *
38
44
  */
39
- static create(payload: PUPPET.payloads.Tag): TagInterface;
45
+ payload?: PUPPET.payloads.Tag;
40
46
  /**
41
47
  * @hideconstructor
42
48
  */
43
- constructor(payload: PUPPET.payloads.Tag);
44
- id(): string;
49
+ constructor(id: string);
45
50
  type(): PUPPET.types.Tag;
46
- groupId(): string;
47
51
  name(): string;
48
- group(): TagGroupInterface | undefined;
49
- private static pool;
50
- static list(forceSync?: boolean): Promise<TagInterface[]>;
51
- static sync(): Promise<void>;
52
- static load(tag: TagIdentifier): TagInterface | undefined;
52
+ groupId(): string;
53
+ group(): Promise<TagGroupInterface | undefined>;
54
+ static list(): Promise<TagInterface[]>;
55
+ static find(filter: TagQueryFilter): Promise<TagInterface | undefined>;
56
+ /**
57
+ * Force reload data for Tag, Sync data from low-level API again.
58
+ *
59
+ * @returns {Promise<this>}
60
+ * @example
61
+ * await tag.sync()
62
+ */
63
+ sync(): Promise<void>;
64
+ /**
65
+ * @ignore
66
+ */
67
+ isReady(): boolean;
68
+ /**
69
+ * `ready()` is For FrameWork ONLY!
70
+ *
71
+ * Please not to use `ready()` at the user land.
72
+ * If you want to sync data, use `sync()` instead.
73
+ *
74
+ * @ignore
75
+ */
76
+ ready(forceSync?: boolean): Promise<void>;
53
77
  contactList(): Promise<ContactInterface[]>;
54
78
  tag(contacts: ContactInterface | ContactInterface[]): Promise<void>;
55
79
  static createTag(name: string, tagGroup?: TagGroupInterface): Promise<TagInterface | void>;
56
80
  static deleteTag(tagInstance: TagInterface): Promise<void>;
57
81
  toString(): string;
58
82
  }
83
+ declare const TagImplBase_base: {
84
+ new (...args: any[]): {};
85
+ valid: (o: any) => o is TagImplInterface;
86
+ validInstance: (target: any) => target is TagMixin;
87
+ validInterface: (target: any) => target is TagImplInterface;
88
+ } & typeof TagMixin;
89
+ declare class TagImplBase extends TagImplBase_base {
90
+ }
91
+ interface TagImplInterface extends TagImplBase {
92
+ }
93
+ declare type TagProtectedProperty = 'ready';
94
+ declare type TagInterface = Omit<TagImplInterface, TagProtectedProperty>;
59
95
  declare const TagImpl_base: {
60
96
  new (...args: any[]): {};
61
97
  valid: (o: any) => o is TagInterface;
62
- validInstance: (target: any) => target is TagMixin;
98
+ validInstance: (target: any) => target is TagImplBase;
63
99
  validInterface: (target: any) => target is TagInterface;
64
- } & typeof TagMixin;
100
+ } & typeof TagImplBase;
65
101
  declare class TagImpl extends TagImpl_base {
66
102
  }
67
- interface TagInterface extends TagImpl {
68
- }
69
- declare type TagConstructor = Constructor<TagInterface, typeof TagImpl>;
70
- export type { TagConstructor, TagInterface, };
103
+ declare type TagConstructor = Constructor<TagImplInterface, Omit<typeof TagImpl, 'load'>>;
104
+ export type { TagConstructor, TagProtectedProperty, TagInterface, };
71
105
  export { TagImpl, };
72
106
  //# sourceMappingURL=tag.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../../../src/user-modules/tag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAO9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;;;;;;;;AAEvD,cAAM,QAAS,SAAQ,aAAoB;aAiBvB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;IAf9C;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY;IAM1D;;OAEG;gBAEe,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;IAM9C,EAAE,IAAK,MAAM;IAIb,IAAI,IAAK,MAAM,CAAC,KAAK,CAAC,GAAG;IAIzB,OAAO,IAAK,MAAM;IAIlB,IAAI,IAAK,MAAM;IAIf,KAAK,IAAK,iBAAiB,GAAG,SAAS;IAIvC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAqB;WAE3B,IAAI,CAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;WAkBjD,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAMnC,MAAM,CAAC,IAAI,CAAE,GAAG,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS;IAWpD,WAAW,IAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAS3C,GAAG,CAAE,QAAQ,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;WAa7D,SAAS,CAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;WAgBpF,SAAS,CAAE,WAAW,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxD,QAAQ;CAIlB;;;;;;;AAED,cAAM,OAAQ,SAAQ,YAAyC;CAAG;AAClE,UAAU,YAAa,SAAQ,OAAO;CAAG;AAEzC,aAAK,cAAc,GAAG,WAAW,CAC/B,YAAY,EACZ,OAAO,OAAO,CACf,CAAA;AAED,YAAY,EACV,cAAc,EACd,YAAY,GACb,CAAA;AACD,OAAO,EACL,OAAO,GACR,CAAA"}
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../../../src/user-modules/tag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAA;AAEtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAS9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,QAAA,MAAM,SAAS;;;;;;;;;;;sBAId,CAAA;AAED,cAAM,QAAS,SAAQ,SAAS;aAcZ,EAAE,EAAE,MAAM;IAZ5B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAA;IAE7B;;OAEG;gBAEe,EAAE,EAAE,MAAM;IAM5B,IAAI,IAAK,MAAM,CAAC,KAAK,CAAC,GAAG;IAIzB,IAAI,IAAK,MAAM;IAIf,OAAO,IAAK,MAAM;IAIZ,KAAK,IAAK,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;WAIzC,IAAI,IAAK,OAAO,CAAC,YAAY,EAAE,CAAC;WA2BhC,IAAI,CAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA0B7E;;;;;;OAMG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,OAAO,IAAK,OAAO;IAInB;;;;;;;OAOG;IACG,KAAK,CACT,SAAS,UAAQ,GAChB,OAAO,CAAC,IAAI,CAAC;IAqBV,WAAW,IAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQ3C,GAAG,CAAE,QAAQ,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;WAY7D,SAAS,CAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;WAepF,SAAS,CAAE,WAAW,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD,QAAQ;CAIlB;;;;;;;AAED,cAAM,WAAY,SAAQ,gBAA6C;CAAG;AAC1E,UAAU,gBAAiB,SAAQ,WAAW;CAAG;AAEjD,aAAK,oBAAoB,GACrB,OAAO,CAAA;AAEX,aAAK,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAA;;;;;;;AAChE,cAAM,OAAQ,SAAQ,YAA4C;CAAG;AAErE,aAAK,cAAc,GAAG,WAAW,CAC/B,gBAAgB,EAChB,IAAI,CAAC,OAAO,OAAO,EAAE,MAAM,CAAC,CAC7B,CAAA;AAED,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,YAAY,GACb,CAAA;AACD,OAAO,EACL,OAAO,GACR,CAAA"}
@@ -1,53 +1,98 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.TagImpl = void 0;
27
+ /**
28
+ * Wechaty Chatbot SDK - https://github.com/wechaty/wechaty
29
+ *
30
+ * @copyright 2016 Huan LI (李卓桓) <https://github.com/huan>, and
31
+ * Wechaty Contributors <https://github.com/wechaty>.
32
+ *
33
+ * Licensed under the Apache License, Version 2.0 (the "License");
34
+ * you may not use this file except in compliance with the License.
35
+ * You may obtain a copy of the License at
36
+ *
37
+ * http://www.apache.org/licenses/LICENSE-2.0
38
+ *
39
+ * Unless required by applicable law or agreed to in writing, software
40
+ * distributed under the License is distributed on an "AS IS" BASIS,
41
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
42
+ * See the License for the specific language governing permissions and
43
+ * limitations under the License.
44
+ *
45
+ */
46
+ const PUPPET = __importStar(require("@juzi/wechaty-puppet"));
47
+ const rx_queue_1 = require("rx-queue");
4
48
  const config_js_1 = require("../config.js");
49
+ const poolify_js_1 = require("../user-mixins/poolify.js");
5
50
  const validation_js_1 = require("../user-mixins/validation.js");
6
51
  const wechatify_js_1 = require("../user-mixins/wechatify.js");
7
- class TagMixin extends (0, wechatify_js_1.wechatifyMixinBase)() {
8
- payload;
52
+ const MixinBase = (0, wechatify_js_1.wechatifyMixin)((0, poolify_js_1.poolifyMixin)(Object)());
53
+ class TagMixin extends MixinBase {
54
+ id;
9
55
  /**
10
56
  *
11
- * Create
57
+ * Instance properties
58
+ * @ignore
12
59
  *
13
60
  */
14
- static create(payload) {
15
- config_js_1.log.verbose('Tag', 'create()');
16
- return new this(payload);
17
- }
61
+ payload;
18
62
  /**
19
63
  * @hideconstructor
20
64
  */
21
- constructor(payload) {
65
+ constructor(id) {
22
66
  super();
23
- this.payload = payload;
67
+ this.id = id;
24
68
  config_js_1.log.silly('Tag', 'constructor()');
25
69
  }
26
- id() {
27
- return this.payload.id;
28
- }
29
70
  type() {
30
- return this.payload.type;
31
- }
32
- groupId() {
33
- return this.payload.groupId || '';
71
+ return (this.payload && this.payload.type) || PUPPET.types.Tag.Unspecific;
34
72
  }
35
73
  name() {
36
- return this.payload.name;
74
+ return (this.payload && this.payload.name) || '';
37
75
  }
38
- group() {
39
- return this.wechaty.TagGroup.load(this.groupId());
76
+ groupId() {
77
+ return (this.payload && this.payload.groupId) || '';
40
78
  }
41
- static pool = [];
42
- static async list(forceSync = false) {
43
- config_js_1.log.verbose('Tag', 'list(%s)', forceSync);
44
- if (this.pool.length > 0 && !forceSync) {
45
- return this.pool;
46
- }
79
+ async group() {
80
+ return this.payload?.groupId ? this.wechaty.TagGroup.find({ id: this.payload.groupId }) : undefined;
81
+ }
82
+ static async list() {
83
+ config_js_1.log.verbose('Tag', 'list()');
47
84
  try {
48
- const payloads = await this.wechaty.puppet.tagTagList();
49
- this.pool = payloads.map(payload => new this(payload));
50
- return this.pool;
85
+ const tagIdList = await this.wechaty.puppet.tagTagList();
86
+ const idToTag = async (id) => this.find({ id }).catch(e => this.wechaty.emitError(e));
87
+ const CONCURRENCY = 17;
88
+ const tagIterator = (0, rx_queue_1.concurrencyExecuter)(CONCURRENCY)(idToTag)(tagIdList);
89
+ const tagList = [];
90
+ for await (const tag of tagIterator) {
91
+ if (tag) {
92
+ tagList.push(tag);
93
+ }
94
+ }
95
+ return tagList;
51
96
  }
52
97
  catch (e) {
53
98
  this.wechaty.emitError(e);
@@ -55,29 +100,76 @@ class TagMixin extends (0, wechatify_js_1.wechatifyMixinBase)() {
55
100
  return [];
56
101
  }
57
102
  }
58
- static async sync() {
59
- config_js_1.log.verbose('Tag', 'sync()');
60
- await this.list(true);
61
- }
62
- static load(tag) {
63
- config_js_1.log.verbose('TagGroup', 'load(%s)', tag);
64
- for (const item of this.pool) {
65
- if (item.id() === tag.id && (item.groupId() === tag.groupId || (!item.groupId() && !tag.groupId))) {
66
- return item;
103
+ static async find(filter) {
104
+ config_js_1.log.silly('Tag', 'find(%s)', JSON.stringify(filter));
105
+ if (filter.id) {
106
+ const tag = this.wechaty.Tag.load(filter.id);
107
+ try {
108
+ await tag.ready();
109
+ }
110
+ catch (e) {
111
+ this.wechaty.emitError(e);
112
+ return undefined;
113
+ }
114
+ return tag;
115
+ }
116
+ if (filter.name) {
117
+ const tags = (await this.wechaty.Tag.list()).filter(t => t.name() === filter.name);
118
+ if (tags.length > 0) {
119
+ return tags[0];
67
120
  }
68
121
  }
69
122
  return undefined;
123
+ // TODO: use a puppet method to find tag, like how contact and room do it
124
+ }
125
+ /**
126
+ * Force reload data for Tag, Sync data from low-level API again.
127
+ *
128
+ * @returns {Promise<this>}
129
+ * @example
130
+ * await tag.sync()
131
+ */
132
+ async sync() {
133
+ await this.wechaty.puppet.tagPayloadDirty(this.id);
134
+ await this.ready(true);
135
+ }
136
+ /**
137
+ * @ignore
138
+ */
139
+ isReady() {
140
+ return !!(this.payload && this.payload.name);
141
+ }
142
+ /**
143
+ * `ready()` is For FrameWork ONLY!
144
+ *
145
+ * Please not to use `ready()` at the user land.
146
+ * If you want to sync data, use `sync()` instead.
147
+ *
148
+ * @ignore
149
+ */
150
+ async ready(forceSync = false) {
151
+ config_js_1.log.silly('Tag', 'ready() @ %s with Tag key="%s"', this.wechaty.puppet, this.id);
152
+ if (!forceSync && this.isReady()) { // already ready
153
+ config_js_1.log.silly('Tag', 'ready() isReady() true');
154
+ return;
155
+ }
156
+ try {
157
+ this.payload = await this.wechaty.puppet.tagPayload(this.id);
158
+ }
159
+ catch (e) {
160
+ this.wechaty.emitError(e);
161
+ config_js_1.log.verbose('Tag', 'ready() this.wechaty.puppet.tagPayload(%s) exception: %s', this.id, e.message);
162
+ throw e;
163
+ }
70
164
  }
71
165
  async contactList() {
72
166
  config_js_1.log.verbose('Tag', 'contactList() for tag : %s', this);
73
- const tag = { id: this.id(), groupId: this.groupId() };
74
- const contactIds = await this.wechaty.puppet.tagTagContactList(tag);
167
+ const contactIds = await this.wechaty.puppet.tagTagContactList(this.id);
75
168
  const contactPromises = contactIds.map(id => this.wechaty.Contact.find({ id }));
76
169
  return Promise.all(contactPromises);
77
170
  }
78
171
  async tag(contacts) {
79
172
  config_js_1.log.verbose('Tag', 'tag(%s) for tag : %s', contacts, this);
80
- const tag = { id: this.id(), groupId: this.groupId() };
81
173
  let contactIds;
82
174
  if (Array.isArray(contacts)) {
83
175
  contactIds = contacts.map(c => c.id);
@@ -85,29 +177,26 @@ class TagMixin extends (0, wechatify_js_1.wechatifyMixinBase)() {
85
177
  else {
86
178
  contactIds = [contacts.id];
87
179
  }
88
- await this.wechaty.puppet.tagContactTagAdd([tag], contactIds);
180
+ await this.wechaty.puppet.tagContactTagAdd([this.id], contactIds);
89
181
  }
90
182
  static async createTag(name, tagGroup) {
91
183
  config_js_1.log.verbose('Tag', 'createTag(%s, %s)', tagGroup, name);
92
184
  try {
93
- const payload = await this.wechaty.puppet.tagTagAdd(name, tagGroup?.name());
94
- if (payload) {
95
- const newTag = new this(payload);
96
- this.pool.push(newTag);
185
+ const tagId = await this.wechaty.puppet.tagTagAdd(name, tagGroup?.name());
186
+ if (tagId) {
187
+ const newTag = await this.find({ id: tagId });
97
188
  return newTag;
98
189
  }
99
190
  }
100
191
  catch (e) {
101
192
  this.wechaty.emitError(e);
102
- config_js_1.log.error('Contact', 'createTag() exception: %s', e.message);
193
+ config_js_1.log.error('Tag', 'createTag() exception: %s', e.message);
103
194
  }
104
195
  }
105
196
  static async deleteTag(tagInstance) {
106
197
  config_js_1.log.verbose('Tag', 'deleteTag(%s, %s)', tagInstance);
107
- const tag = { id: tagInstance.id(), groupId: tagInstance.groupId() };
108
198
  try {
109
- await this.wechaty.puppet.tagTagDelete(tag);
110
- this.pool.splice(this.pool.indexOf(tagInstance), 1);
199
+ await this.wechaty.puppet.tagTagDelete(tagInstance.id);
111
200
  }
112
201
  catch (e) {
113
202
  this.wechaty.emitError(e);
@@ -115,10 +204,12 @@ class TagMixin extends (0, wechatify_js_1.wechatifyMixinBase)() {
115
204
  }
116
205
  }
117
206
  toString() {
118
- return `<Tag#${this.name() || this.id()}>`;
207
+ return `<Tag#${this.name() || this.id}>`;
119
208
  }
120
209
  }
121
- class TagImpl extends (0, validation_js_1.validationMixin)(TagMixin)() {
210
+ class TagImplBase extends (0, validation_js_1.validationMixin)(TagMixin)() {
211
+ }
212
+ class TagImpl extends (0, validation_js_1.validationMixin)(TagImplBase)() {
122
213
  }
123
214
  exports.TagImpl = TagImpl;
124
215
  //# sourceMappingURL=tag.js.map