-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
66 lines (54 loc) · 1.83 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const fluentApicase = schema => {
const extended = schema.extend({
immutable: true,
methods: {
on: ({ service }) => (evt, cb) => {
if (process.env.NODE_ENV === "development" && !service) {
throw new ReferenceError(
"[@apicase/fluent.on] You have to pass service before adding events. If you have services to pass you can write .service(new ApiService)"
)
}
service.on(evt, cb)
return {}
},
hook: ({ hooks }) => (hookType, cb) => ({
hooks: {
...hooks,
[hookType]: hooks[hookType]
? hooks[hookType].concat([cb])
: Array.isArray(cb)
? cb
: [cb]
}
}),
meta: ({ meta }) => (...args) => ({
meta:
typeof args[0] === "object"
? { ...meta, ...args[0] }
: { ...meta, [args[0]]: args[1] }
}),
hooks: ({ hooks }) => newHooks =>
Object.entries(newHooks).reduce((res, [hookType, hooks]) => {
res[hookType] = (res[hookType] || []).concat(hooks)
return res
}, hooks),
adapter: () => adapter => ({ adapter }),
service: () => service => ({ service })
},
executors: {,
getPayload: payload => () => payload,
getService: ({ service, ...payload }) => service.extend(payload),
doRequest: ({ service, ...payload }) => service.doRequest(payload),
pushRequest: ({ service, ...payload }) => service.pushRequest(payload),
doSingleRequest: ({ service, ...payload }) =>
service.doSingleRequest(payload),
doUniqueRequest: ({ service, ...payload }) =>
service.doUniqueRequest(payload)
},
defaults: () => ({
hooks: {}
})
})
return typeof extended === "function" ? extended() : extended
}
module.exports = fluentApicase