@omujs/chat 0.9.10 → 0.9.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 (102) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/README.md +19 -1
  3. package/dist/dts/chat.d.ts +18 -19
  4. package/dist/dts/const.d.ts +2 -3
  5. package/dist/dts/event/event-types.d.ts +13 -8
  6. package/dist/dts/event/event.d.ts +24 -25
  7. package/dist/dts/event/index.d.ts +2 -3
  8. package/dist/dts/index.d.ts +6 -5
  9. package/dist/dts/models/author.d.ts +32 -35
  10. package/dist/dts/models/channel.d.ts +28 -31
  11. package/dist/dts/models/content.d.ts +26 -84
  12. package/dist/dts/models/gift.d.ts +20 -22
  13. package/dist/dts/models/index.d.ts +13 -12
  14. package/dist/dts/models/message.d.ts +37 -40
  15. package/dist/dts/models/paid.d.ts +8 -10
  16. package/dist/dts/models/provider.d.ts +31 -34
  17. package/dist/dts/models/reaction.d.ts +18 -20
  18. package/dist/dts/models/role.d.ts +23 -25
  19. package/dist/dts/models/room.d.ts +39 -42
  20. package/dist/dts/models/vote.d.ts +28 -31
  21. package/dist/dts/permissions.d.ts +7 -7
  22. package/dist/esm/chat.js +7652 -112
  23. package/dist/esm/const.js +4751 -3
  24. package/dist/esm/event/event-types.js +75 -9
  25. package/dist/esm/event/event.js +101 -75
  26. package/dist/esm/event/index.js +115 -3
  27. package/dist/esm/index.js +7698 -5
  28. package/dist/esm/models/author.js +4823 -38
  29. package/dist/esm/models/channel.js +4789 -41
  30. package/dist/esm/models/content.js +39 -168
  31. package/dist/esm/models/gift.js +39 -32
  32. package/dist/esm/models/index.js +5190 -12
  33. package/dist/esm/models/message.js +4886 -57
  34. package/dist/esm/models/paid.js +24 -17
  35. package/dist/esm/models/provider.js +4792 -44
  36. package/dist/esm/models/reaction.js +4763 -15
  37. package/dist/esm/models/role.js +43 -36
  38. package/dist/esm/models/room.js +4788 -40
  39. package/dist/esm/models/vote.js +4784 -36
  40. package/dist/esm/permissions.js +4764 -8
  41. package/package.json +26 -37
  42. package/src/chat.ts +49 -43
  43. package/src/const.ts +2 -2
  44. package/src/event/event-types.ts +13 -7
  45. package/src/event/event.ts +18 -18
  46. package/src/event/index.ts +2 -1
  47. package/src/index.ts +5 -4
  48. package/src/models/author.ts +15 -17
  49. package/src/models/channel.ts +11 -13
  50. package/src/models/content.ts +42 -206
  51. package/src/models/gift.ts +1 -3
  52. package/src/models/index.ts +14 -11
  53. package/src/models/message.ts +19 -22
  54. package/src/models/paid.ts +1 -3
  55. package/src/models/provider.ts +16 -18
  56. package/src/models/reaction.ts +5 -6
  57. package/src/models/role.ts +1 -3
  58. package/src/models/room.ts +11 -13
  59. package/src/models/vote.ts +9 -11
  60. package/src/permissions.ts +8 -7
  61. package/tsconfig.json +5 -2
  62. package/tsconfig.tsbuildinfo +1 -0
  63. package/LICENSE +0 -21
  64. package/dist/dts/chat.d.ts.map +0 -1
  65. package/dist/dts/const.d.ts.map +0 -1
  66. package/dist/dts/event/event-types.d.ts.map +0 -1
  67. package/dist/dts/event/event.d.ts.map +0 -1
  68. package/dist/dts/event/index.d.ts.map +0 -1
  69. package/dist/dts/index.d.ts.map +0 -1
  70. package/dist/dts/models/author.d.ts.map +0 -1
  71. package/dist/dts/models/channel.d.ts.map +0 -1
  72. package/dist/dts/models/content.d.ts.map +0 -1
  73. package/dist/dts/models/gift.d.ts.map +0 -1
  74. package/dist/dts/models/index.d.ts.map +0 -1
  75. package/dist/dts/models/message.d.ts.map +0 -1
  76. package/dist/dts/models/paid.d.ts.map +0 -1
  77. package/dist/dts/models/provider.d.ts.map +0 -1
  78. package/dist/dts/models/reaction.d.ts.map +0 -1
  79. package/dist/dts/models/role.d.ts.map +0 -1
  80. package/dist/dts/models/room.d.ts.map +0 -1
  81. package/dist/dts/models/vote.d.ts.map +0 -1
  82. package/dist/dts/permissions.d.ts.map +0 -1
  83. package/dist/esm/chat.js.map +0 -1
  84. package/dist/esm/const.js.map +0 -1
  85. package/dist/esm/event/event-types.js.map +0 -1
  86. package/dist/esm/event/event.js.map +0 -1
  87. package/dist/esm/event/index.js.map +0 -1
  88. package/dist/esm/index.js.map +0 -1
  89. package/dist/esm/models/author.js.map +0 -1
  90. package/dist/esm/models/channel.js.map +0 -1
  91. package/dist/esm/models/content.js.map +0 -1
  92. package/dist/esm/models/gift.js.map +0 -1
  93. package/dist/esm/models/index.js.map +0 -1
  94. package/dist/esm/models/message.js.map +0 -1
  95. package/dist/esm/models/paid.js.map +0 -1
  96. package/dist/esm/models/provider.js.map +0 -1
  97. package/dist/esm/models/reaction.js.map +0 -1
  98. package/dist/esm/models/role.js.map +0 -1
  99. package/dist/esm/models/room.js.map +0 -1
  100. package/dist/esm/models/vote.js.map +0 -1
  101. package/dist/esm/permissions.js.map +0 -1
  102. package/eslint.config.js +0 -6
package/package.json CHANGED
@@ -1,39 +1,28 @@
1
1
  {
2
- "type": "module",
3
- "name": "@omujs/chat",
4
- "version": "0.9.10",
5
- "exports": {
6
- ".": {
7
- "import": "./dist/esm/index.js",
8
- "types": "./dist/dts/index.d.ts"
2
+ "type": "module",
3
+ "name": "@omujs/chat",
4
+ "version": "0.9.26",
5
+ "exports": {
6
+ ".": {
7
+ "import": "./dist/esm/index.js",
8
+ "types": "./dist/dts/index.d.ts"
9
+ },
10
+ "./*": {
11
+ "import": "./dist/esm/*/index.js",
12
+ "types": "./dist/dts/*/index.d.js"
13
+ }
9
14
  },
10
- "./*": {
11
- "import": "./dist/esm/*",
12
- "types": "./dist/dts/*"
13
- }
14
- },
15
- "repository": {
16
- "type": "git",
17
- "url": "https://github.com/OMUAPPS/omuapps"
18
- },
19
- "devDependencies": {
20
- "eslint": "^9.9.1",
21
- "nodemon": "^3.1.4",
22
- "@omujs/eslint-config": "1.0.0",
23
- "@omujs/omu": "0.9.10"
24
- },
25
- "dependencies": {
26
- "@omujs/omu": "0.9.10"
27
- },
28
- "gitHead": "04559d5aec52117d707e0d554ee429b858da522a",
29
- "scripts": {
30
- "build": "pnpm run ts",
31
- "dev": "pnpm run watch",
32
- "ts": "pnpm run ts-esm && pnpm run ts-dts",
33
- "ts-dts": "tsc --outDir dist/dts --declaration true --emitDeclarationOnly true --declarationMap true",
34
- "ts-esm": "tsc --outDir dist/esm",
35
- "watch": "nodemon -w src -e ts,json --exec \"pnpm --workspace-root build --only @omujs/chat\"",
36
- "lint": "eslint .",
37
- "fix": "eslint . --fix"
38
- }
39
- }
15
+ "scripts": {
16
+ "build": "bun ../../scripts/package-helper.ts --glob --entrypoint \"src/**/*.ts\" --outdir \"dist/esm\" --dtsdir \"../dts\" --root \"src/\"",
17
+ "dev": "bun run watch",
18
+ "watch": "bun ../../scripts/package-helper.ts --glob --entrypoint \"src/**/*.ts\" --outdir \"dist/esm\" --dtsdir \"../dts\" --root \"src/\" --watch"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/OMUAPPS/omuapps"
23
+ },
24
+ "dependencies": {
25
+ "@omujs/omu": "0.9.26"
26
+ },
27
+ "gitHead": "04559d5aec52117d707e0d554ee429b858da522a"
28
+ }
package/src/chat.ts CHANGED
@@ -1,86 +1,92 @@
1
- import type { Client } from '@omujs/omu/client.js';
2
- import { EndpointType } from '@omujs/omu/extension/endpoint/endpoint.js';
3
- import type { Signal } from '@omujs/omu/extension/signal/signal.js';
4
- import { SignalPermissions, SignalType } from '@omujs/omu/extension/signal/signal.js';
5
- import type { Table } from '@omujs/omu/extension/table/index.js';
6
- import { TableType } from '@omujs/omu/extension/table/index.js';
7
- import { Serializer } from '@omujs/omu/serializer.js';
1
+ import type { Omu } from '@omujs/omu';
2
+ import { Serializer } from '@omujs/omu';
3
+ import { EndpointType } from '@omujs/omu/api/endpoint';
4
+ import type { Signal } from '@omujs/omu/api/signal';
5
+ import { SignalType } from '@omujs/omu/api/signal';
6
+ import type { Table } from '@omujs/omu/api/table';
7
+ import { TableType } from '@omujs/omu/api/table';
8
8
 
9
- import { IDENTIFIER } from './const.js';
10
- import type { EventHandler, EventSource } from './event/event.js';
11
- import { EventRegistry } from './event/event.js';
12
- import { Author, Channel, Message, Provider, Reaction, Room, Vote } from './models/index.js';
9
+ import { PLUGIN_ID } from './const';
10
+ import type { EventHandler, EventSource } from './event';
11
+ import { EventRegistry } from './event';
12
+ import { Author, Channel, Message, Provider, Reaction, Room, Vote } from './models';
13
13
  import {
14
14
  CHAT_CHANNEL_TREE_PERMISSION_ID,
15
15
  CHAT_PERMISSION_ID,
16
16
  CHAT_READ_PERMISSION_ID,
17
17
  CHAT_WRITE_PERMISSION_ID,
18
- } from './permissions.js';
18
+ } from './permissions';
19
19
 
20
- const MESSAGE_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
20
+ const MESSAGE_TABLE_TYPE = TableType.createJson(PLUGIN_ID, {
21
21
  name: 'messages',
22
- model: Message,
22
+ serializer: Message,
23
+ key: (item) => item.key(),
23
24
  permissions: {
24
25
  all: CHAT_PERMISSION_ID,
25
26
  read: CHAT_READ_PERMISSION_ID,
26
27
  write: CHAT_WRITE_PERMISSION_ID,
27
28
  },
28
29
  });
29
- const AUTHOR_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
30
+ const AUTHOR_TABLE_TYPE = TableType.createJson(PLUGIN_ID, {
30
31
  name: 'authors',
31
- model: Author,
32
+ serializer: Author,
33
+ key: (item) => item.key(),
32
34
  permissions: {
33
35
  all: CHAT_PERMISSION_ID,
34
36
  read: CHAT_READ_PERMISSION_ID,
35
37
  write: CHAT_WRITE_PERMISSION_ID,
36
38
  },
37
39
  });
38
- const CHANNEL_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
40
+ const CHANNEL_TABLE_TYPE = TableType.createJson(PLUGIN_ID, {
39
41
  name: 'channels',
40
- model: Channel,
42
+ serializer: Channel,
43
+ key: (item) => item.key(),
41
44
  permissions: {
42
45
  all: CHAT_PERMISSION_ID,
43
46
  read: CHAT_READ_PERMISSION_ID,
44
47
  write: CHAT_WRITE_PERMISSION_ID,
45
48
  },
46
49
  });
47
- const PROVIDER_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
50
+ const PROVIDER_TABLE_TYPE = TableType.createJson(PLUGIN_ID, {
48
51
  name: 'providers',
49
- model: Provider,
52
+ serializer: Provider,
53
+ key: (item) => item.key(),
50
54
  permissions: {
51
55
  all: CHAT_PERMISSION_ID,
52
56
  read: CHAT_READ_PERMISSION_ID,
53
57
  write: CHAT_WRITE_PERMISSION_ID,
54
58
  },
55
59
  });
56
- const ROOM_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
60
+ const ROOM_TABLE_TYPE = TableType.createJson(PLUGIN_ID, {
57
61
  name: 'rooms',
58
- model: Room,
62
+ serializer: Room,
63
+ key: (item) => item.key(),
59
64
  permissions: {
60
65
  all: CHAT_PERMISSION_ID,
61
66
  read: CHAT_READ_PERMISSION_ID,
62
67
  write: CHAT_WRITE_PERMISSION_ID,
63
68
  },
64
69
  });
65
- const VOTE_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
70
+ const VOTE_TABLE_TYPE = TableType.createJson(PLUGIN_ID, {
66
71
  name: 'votes',
67
- model: Vote,
72
+ serializer: Vote,
73
+ key: (item) => item.key(),
68
74
  permissions: {
69
75
  all: CHAT_PERMISSION_ID,
70
76
  read: CHAT_READ_PERMISSION_ID,
71
77
  write: CHAT_WRITE_PERMISSION_ID,
72
78
  },
73
79
  });
74
- const CREATE_CHANNEL_TREE_ENDPOINT = EndpointType.createJson(IDENTIFIER, {
80
+ const CREATE_CHANNEL_TREE_ENDPOINT = EndpointType.createJson(PLUGIN_ID, {
75
81
  name: 'create_channel_tree',
76
82
  requestSerializer: Serializer.noop<string>(),
77
- responseSerializer: Serializer.model(Channel).toArray(),
83
+ responseSerializer: Serializer.of(Channel).toArray(),
78
84
  permissionId: CHAT_CHANNEL_TREE_PERMISSION_ID,
79
85
  });
80
- const REACTION_SIGNAL = SignalType.createJson(IDENTIFIER, {
86
+ const REACTION_SIGNAL = SignalType.createJson(PLUGIN_ID, {
81
87
  name: 'reaction',
82
- serializer: Serializer.model(Reaction),
83
- permissions: new SignalPermissions(CHAT_PERMISSION_ID),
88
+ serializer: Reaction,
89
+ permissions: { all: CHAT_PERMISSION_ID },
84
90
  });
85
91
 
86
92
  export class Chat {
@@ -93,30 +99,30 @@ export class Chat {
93
99
  public readonly reactionSignal: Signal<Reaction>;
94
100
  private readonly eventRegistry: EventRegistry;
95
101
 
96
- private constructor(private readonly client: Client) {
97
- client.server.require(IDENTIFIER);
98
- client.permissions.require(CHAT_PERMISSION_ID);
102
+ private constructor(private readonly omu: Omu) {
103
+ omu.sessions.require(PLUGIN_ID);
104
+ omu.permissions.require(CHAT_PERMISSION_ID);
99
105
  this.eventRegistry = new EventRegistry(this);
100
- this.messages = client.tables.get(MESSAGE_TABLE_TYPE);
101
- this.authors = client.tables.get(AUTHOR_TABLE_TYPE);
102
- this.channels = client.tables.get(CHANNEL_TABLE_TYPE);
103
- this.providers = client.tables.get(PROVIDER_TABLE_TYPE);
104
- this.rooms = client.tables.get(ROOM_TABLE_TYPE);
105
- this.votes = client.tables.get(VOTE_TABLE_TYPE);
106
- this.reactionSignal = client.signals.get(REACTION_SIGNAL);
106
+ this.messages = omu.tables.get(MESSAGE_TABLE_TYPE);
107
+ this.authors = omu.tables.get(AUTHOR_TABLE_TYPE);
108
+ this.channels = omu.tables.get(CHANNEL_TABLE_TYPE);
109
+ this.providers = omu.tables.get(PROVIDER_TABLE_TYPE);
110
+ this.rooms = omu.tables.get(ROOM_TABLE_TYPE);
111
+ this.votes = omu.tables.get(VOTE_TABLE_TYPE);
112
+ this.reactionSignal = omu.signals.get(REACTION_SIGNAL);
107
113
  this.messages.setCacheSize(1000);
108
114
  this.authors.setCacheSize(500);
109
115
  }
110
116
 
111
- public static create(client: Client): Chat {
112
- if (client.ready) {
117
+ public static create(omu: Omu): Chat {
118
+ if (omu.ready) {
113
119
  throw new Error('OMU instance is already started');
114
120
  }
115
- return new Chat(client);
121
+ return new Chat(omu);
116
122
  }
117
123
 
118
124
  public async createChannelTree(url: string): Promise<Channel[]> {
119
- return await this.client.endpoints.call(CREATE_CHANNEL_TREE_ENDPOINT, url);
125
+ return await this.omu.endpoints.call(CREATE_CHANNEL_TREE_ENDPOINT, url);
120
126
  }
121
127
 
122
128
  public on<P extends Array<any>>(event: EventSource<P>, handler: EventHandler<P>): void {
package/src/const.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { Identifier } from '@omujs/omu/identifier.js';
1
+ import { Identifier } from '@omujs/omu';
2
2
 
3
- export const IDENTIFIER = new Identifier('com.omuapps', 'chat');
3
+ export const PLUGIN_ID: Identifier = new Identifier('com.omuapps', 'chat');
@@ -1,10 +1,16 @@
1
+ import { Author } from '../models/author.js';
2
+ import { Channel } from '../models/channel.js';
3
+ import { Message } from '../models/message.js';
4
+ import { Provider } from '../models/provider.js';
5
+ import { Room } from '../models/room.js';
6
+ import { Vote } from '../models/vote.js';
1
7
  import { TableEvent } from './event.js';
2
8
 
3
- export const events = {
4
- message: new TableEvent((chat) => chat.messages),
5
- author: new TableEvent((chat) => chat.authors),
6
- channel: new TableEvent((chat) => chat.channels),
7
- provider: new TableEvent((chat) => chat.providers),
8
- room: new TableEvent((chat) => chat.rooms),
9
- vote: new TableEvent((chat) => chat.votes),
9
+ export const events: { Message: TableEvent<Message>; Author: TableEvent<Author>; Channel: TableEvent<Channel>; Provider: TableEvent<Provider>; Room: TableEvent<Room>; Vote: TableEvent<Vote> } = {
10
+ Message: new TableEvent((chat) => chat.messages),
11
+ Author: new TableEvent((chat) => chat.authors),
12
+ Channel: new TableEvent((chat) => chat.channels),
13
+ Provider: new TableEvent((chat) => chat.providers),
14
+ Room: new TableEvent((chat) => chat.rooms),
15
+ Vote: new TableEvent((chat) => chat.votes),
10
16
  };
@@ -1,6 +1,6 @@
1
- import type { Unlisten } from '@omujs/omu/event-emitter.js';
2
- import { EventEmitter } from '@omujs/omu/event-emitter.js';
3
- import type { Table } from '@omujs/omu/extension/table/table.js';
1
+ import type { Table } from '@omujs/omu/api/table';
2
+ import type { Unlisten } from '@omujs/omu/event';
3
+ import { EventEmitter } from '@omujs/omu/event';
4
4
 
5
5
  import type { Chat } from '../chat.js';
6
6
 
@@ -20,24 +20,24 @@ export class ListenerEvent<P extends Array<any>> implements EventSource<P> {
20
20
  }
21
21
 
22
22
  export class TableEvent<T> extends ListenerEvent<[Map<string, T>]> {
23
- public readonly addBatch: ListenerEvent<[Map<string, T>]>;
24
- public readonly updateBatch: ListenerEvent<[Map<string, T>]>;
25
- public readonly removeBatch: ListenerEvent<[Map<string, T>]>;
26
- public readonly add: EventSource<[T]>;
27
- public readonly update: EventSource<[T]>;
28
- public readonly remove: EventSource<[T]>;
29
- public readonly clear: EventSource<[]>;
23
+ public readonly AddBatch: ListenerEvent<[Map<string, T>]>;
24
+ public readonly UpdateBatch: ListenerEvent<[Map<string, T>]>;
25
+ public readonly RemoveBatch: ListenerEvent<[Map<string, T>]>;
26
+ public readonly Add: EventSource<[T]>;
27
+ public readonly Update: EventSource<[T]>;
28
+ public readonly Remove: EventSource<[T]>;
29
+ public readonly Clear: EventSource<[]>;
30
30
  public readonly wrappers: Record<string, Unlisten>;
31
31
 
32
32
  constructor(private readonly getTable: (chat: Chat) => Table<T>) {
33
33
  super((chat) => getTable(chat).event.cacheUpdate);
34
- this.addBatch = new ListenerEvent((chat) => getTable(chat).event.add);
35
- this.updateBatch = new ListenerEvent((chat) => getTable(chat).event.update);
36
- this.removeBatch = new ListenerEvent((chat) => getTable(chat).event.remove);
37
- this.add = this.createBatchSubscriber((table) => table.event.add);
38
- this.update = this.createBatchSubscriber((table) => table.event.update);
39
- this.remove = this.createBatchSubscriber((table) => table.event.remove);
40
- this.clear = new ListenerEvent((client) => getTable(client).event.clear);
34
+ this.AddBatch = new ListenerEvent((chat) => getTable(chat).event.add);
35
+ this.UpdateBatch = new ListenerEvent((chat) => getTable(chat).event.update);
36
+ this.RemoveBatch = new ListenerEvent((chat) => getTable(chat).event.remove);
37
+ this.Add = this.createBatchSubscriber((table) => table.event.add);
38
+ this.Update = this.createBatchSubscriber((table) => table.event.update);
39
+ this.Remove = this.createBatchSubscriber((table) => table.event.remove);
40
+ this.Clear = new ListenerEvent((client) => getTable(client).event.clear);
41
41
  this.wrappers = {};
42
42
  }
43
43
 
@@ -63,7 +63,7 @@ export class TableEvent<T> extends ListenerEvent<[Map<string, T>]> {
63
63
  return () => {
64
64
  stopListen();
65
65
  clearEvent();
66
- }
66
+ };
67
67
  };
68
68
 
69
69
  return {
@@ -1,2 +1,3 @@
1
+ export { events as Events } from './event-types.js';
1
2
  export { EventHandler, EventRegistry, EventSource } from './event.js';
2
- export { events } from './event-types.js';
3
+
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { Chat } from './chat.js';
2
- export { events as ChatEvents, events } from './event/index.js';
3
- export * as models from './models/index.js';
4
- export * as permissions from './permissions.js';
5
-
2
+ export { Events as ChatEvents } from './event';
3
+ export * as Models from './models';
4
+ export { Content };
5
+ import { Content } from './models';
6
+ export * as ChatPermissions from './permissions.js';
@@ -1,6 +1,4 @@
1
- import { Identifier } from '@omujs/omu/identifier.js';
2
- import type { Keyable } from '@omujs/omu/interface.js';
3
- import type { Model } from '@omujs/omu/model.js';
1
+ import { Identifier } from '@omujs/omu';
4
2
 
5
3
  import type { RoleJson } from './role.js';
6
4
  import { Role } from './role.js';
@@ -16,37 +14,37 @@ export type AuthorMetadata = {
16
14
  export type AuthorJson = {
17
15
  provider_id: string;
18
16
  id: string;
17
+ metadata: AuthorMetadata;
19
18
  name?: string;
20
19
  avatar_url?: string;
21
20
  roles?: RoleJson[];
22
- metadata?: AuthorMetadata;
23
21
  };
24
22
 
25
- export class Author implements Keyable, Model<AuthorJson> {
23
+ export class Author {
26
24
  public providerId: Identifier;
27
25
  public id: Identifier;
26
+ public metadata: AuthorMetadata;
28
27
  public name?: string;
29
28
  public avatarUrl?: string;
30
29
  public roles?: Role[];
31
- public metadata?: AuthorMetadata;
32
30
 
33
31
  constructor(options: {
34
32
  providerId: Identifier;
35
33
  id: Identifier;
34
+ metadata?: AuthorMetadata;
36
35
  name?: string;
37
36
  avatarUrl?: string;
38
37
  roles?: Role[];
39
- metadata?: AuthorMetadata;
40
38
  }) {
41
39
  this.providerId = options.providerId;
42
40
  this.id = options.id;
41
+ this.metadata = options.metadata || {};
43
42
  this.name = options.name;
44
43
  this.avatarUrl = options.avatarUrl;
45
44
  this.roles = options.roles;
46
- this.metadata = options.metadata;
47
45
  }
48
46
 
49
- static fromJson(info: AuthorJson): Author {
47
+ public static deserialize(info: AuthorJson): Author {
50
48
  return new Author({
51
49
  providerId: Identifier.fromKey(info.provider_id),
52
50
  id: Identifier.fromKey(info.id),
@@ -58,17 +56,17 @@ export class Author implements Keyable, Model<AuthorJson> {
58
56
  }
59
57
 
60
58
  key(): string {
61
- return `${this.providerId}:${this.id}`;
59
+ return this.id.key();
62
60
  }
63
61
 
64
- toJson(): AuthorJson {
62
+ public static serialize(item: Author): AuthorJson {
65
63
  return {
66
- provider_id: this.providerId.key(),
67
- id: this.id.key(),
68
- name: this.name,
69
- avatar_url: this.avatarUrl,
70
- roles: this.roles?.map((role) => role.toJson()),
71
- metadata: this.metadata,
64
+ provider_id: item.providerId.key(),
65
+ id: item.id.key(),
66
+ name: item.name,
67
+ avatar_url: item.avatarUrl,
68
+ roles: item.roles?.map((role) => role.toJson()),
69
+ metadata: item.metadata,
72
70
  };
73
71
  }
74
72
  }
@@ -1,6 +1,4 @@
1
- import { Identifier } from '@omujs/omu/identifier.js';
2
- import type { Keyable } from '@omujs/omu/interface.js';
3
- import type { Model } from '@omujs/omu/model.js';
1
+ import { Identifier } from '@omujs/omu';
4
2
 
5
3
  export type ChannelJson = {
6
4
  provider_id: string;
@@ -12,7 +10,7 @@ export type ChannelJson = {
12
10
  icon_url: string;
13
11
  };
14
12
 
15
- export class Channel implements Model<ChannelJson>, Keyable {
13
+ export class Channel {
16
14
  providerId: Identifier;
17
15
  id: Identifier;
18
16
  url: string;
@@ -39,7 +37,7 @@ export class Channel implements Model<ChannelJson>, Keyable {
39
37
  this.iconUrl = option.iconUrl;
40
38
  }
41
39
 
42
- static fromJson(json: ChannelJson): Channel {
40
+ public static deserialize(json: ChannelJson): Channel {
43
41
  return new Channel({
44
42
  providerId: Identifier.fromKey(json.provider_id),
45
43
  id: Identifier.fromKey(json.id),
@@ -55,15 +53,15 @@ export class Channel implements Model<ChannelJson>, Keyable {
55
53
  return this.id.key();
56
54
  }
57
55
 
58
- toJson(): ChannelJson {
56
+ public static serialize(item: Channel): ChannelJson {
59
57
  return {
60
- provider_id: this.providerId.key(),
61
- id: this.id.key(),
62
- url: this.url,
63
- name: this.name,
64
- description: this.description,
65
- active: this.active,
66
- icon_url: this.iconUrl,
58
+ provider_id: item.providerId.key(),
59
+ id: item.id.key(),
60
+ url: item.url,
61
+ name: item.name,
62
+ description: item.description,
63
+ active: item.active,
64
+ icon_url: item.iconUrl,
67
65
  };
68
66
  }
69
67
  }