Skip to content

Commit 08c0754

Browse files
committed
Some updates
1 parent 545a34b commit 08c0754

File tree

3 files changed

+45
-16
lines changed

3 files changed

+45
-16
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "js-messages",
3-
"version": "0.1.16",
3+
"version": "0.1.17",
44
"license": "LGPL-3.0",
55
"homepage": "https://github.com/js-works/js-messages",
66
"main": "index.js",

src/main/api/defineMessages.ts

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,35 @@ import MessageInitializer from '../internal/types/MessageInitializer'
44
import MessageCreator from '../internal/types/MessageCreator'
55
import buildMessageCreator from '../internal/buildMessageCreator';
66

7+
// --- defineMessages -----------------------------------------------
8+
9+
function defineMessages<T extends MessagesConfig>(prefix: string, config: T):
10+
{ [K in keyof T]: MessageCreator<K, Arguments<any, T[K]>, Payload<T[K]>, Meta<T[K]>> }
11+
12+
function defineMessages<T extends MessagesConfig>(config: T):
13+
{ [K in keyof T]: MessageCreator<K, Arguments<any, T[K]>, Payload<T[K]>, Meta<T[K]>> }
14+
15+
16+
function defineMessages(arg1: any, arg2?: any): any {
17+
const
18+
ret: any = {},
19+
prefix: string = typeof arg1 === 'string' ? arg1 : '',
20+
config: any = typeof arg1 === 'string' ? arg2 : arg1,
21+
keys = Object.keys(config)
22+
23+
for (let i = 0; i < keys.length; ++i) {
24+
const
25+
key = keys[i],
26+
type = !prefix ? key : `${prefix}/${key}`
27+
28+
ret[key] = buildMessageCreator(type, config[key])
29+
}
30+
31+
return ret
32+
}
33+
34+
// --- locals -------------------------------------------------------
35+
736
type Func<A extends any[], R> = (...args: A) => R
837

938
type Arguments<A extends any[], I extends MessageInitializer<any>>
@@ -27,20 +56,6 @@ type Meta<I extends MessageInitializer<any>>
2756
? ReturnType<I['meta']>
2857
: any)
2958

30-
function defineMessages<T extends MessagesConfig>(config: T):
31-
{ [K in keyof T]: MessageCreator<K, Arguments<any, T[K]>, Payload<T[K]>, Meta<T[K]>> } {
32-
33-
const
34-
ret: any = {},
35-
keys = Object.keys(config)
36-
37-
for (let i = 0; i < keys.length; ++i) {
38-
const key = keys[i]
39-
40-
ret[key] = buildMessageCreator(key, config[key])
41-
}
42-
43-
return ret
44-
}
59+
// --- exports ------------------------------------------------------
4560

4661
export default defineMessages

src/test/api/defineMessages.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,19 @@ describe('defineMessages', () => {
4141

4242
expect(Actions.action4(2))
4343
.to.eql({ type: 'action4', payload: { value: 2 }, meta: { half: 1 } })
44+
}),
45+
46+
it('should handle prefixes properly', () => {
47+
const UserActions = defineMessages('users', {
48+
addUser: (firstName: string, lastName: string) =>
49+
({ firstName, lastName })
50+
})
51+
52+
expect(UserActions.addUser('Jane', 'Doe'))
53+
.to.eql({ type: 'users/addUser', payload: { firstName: 'Jane', lastName: 'Doe' } })
54+
55+
expect(UserActions.addUser.type)
56+
.to.eql('users/addUser')
4457
})
4558
})
59+

0 commit comments

Comments
 (0)