forked from sheepzh/time-tracker-4-browser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmessage.d.ts
More file actions
158 lines (142 loc) · 7.63 KB
/
Copy pathmessage.d.ts
File metadata and controls
158 lines (142 loc) · 7.63 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
type _TransmitValue =
| undefined | string | number | boolean | void
| { readonly [key: string]: _TransmitValue }
| readonly _TransmitValue[]
type _HandlerIO<Input extends _TransmitValue = undefined, Output extends _TransmitValue = undefined> = [Input, Output]
type _MakeRegistry<Codes extends string, Param extends _TransmitValue = undefined, Result extends _TransmitValue = undefined> = Record<Codes, _HandlerIO<Param, Result>>
type _MqReqData<R, K extends keyof R> = R[K] extends [infer In, unknown] ? In : never
type _MqResData<R, K extends keyof R> = R[K] extends [unknown, infer Out] ? Out : never
type _MqRequest<R, K extends keyof R = keyof R> = { code: K; data: _MqReqData<R, K> }
type _MqSuccess<R, K extends keyof R> =
_MqResData<R, K> extends undefined ? { code: "success"; data?: undefined } : { code: "success"; data: _MqResData<R, K> }
type _MqResponse<R, K extends keyof R = keyof R> =
| { code: "fail"; msg: string }
| { code: "ignore" }
| (K extends keyof R ? _MqSuccess<R, K> : never)
type _MqHandler<R, C extends keyof R> = _MqResData<R, C> extends undefined
? (data: _MqReqData<R, C>, sender: chrome.runtime.MessageSender) => Awaitable<void | undefined>
: (data: _MqReqData<R, C>, sender: chrome.runtime.MessageSender) => Awaitable<_MqResData<R, C>>
declare namespace timer.mq {
type _HandlerRegistry =
// Track event
& _MakeRegistry<'track.time' | 'track.runTime', core.Event>
// Content script events
& _MakeRegistry<'cs.injected'>
& _MakeRegistry<'cs.idleChanged', boolean>
// Content script API
& _MakeRegistry<'cs.getAudible', undefined, boolean>
// Statistics
& _MakeRegistry<'stat.today', string, core.Result | undefined>
& _MakeRegistry<'stat.sites', stat.SiteQuery | undefined, stat.SiteRow[]>
& _MakeRegistry<'stat.sitePage', stat.SitePageQuery | undefined, common.PageResult<stat.SiteRow>>
& _MakeRegistry<'stat.deleteSite', stat.SiteDeleteQuery>
& _MakeRegistry<'stat.countSite', stat.SiteQuery | undefined, number>
& _MakeRegistry<'stat.cates', stat.CateQuery | undefined, stat.CateRow[]>
& _MakeRegistry<'stat.catePage', stat.CatePageQuery | undefined, common.PageResult<stat.CateRow>>
& _MakeRegistry<'stat.groups', stat.GroupQuery | undefined, stat.GroupRow[]>
& _MakeRegistry<'stat.groupPage', stat.GroupPageQuery | undefined, common.PageResult<stat.GroupRow>>
& _MakeRegistry<'stat.countGroup', stat.GroupQuery | undefined, number>
& _MakeRegistry<'stat.batchDelete', stat.StatKey[]>
// Items
& _MakeRegistry<'item.batch', core.RowKey[], core.Row[]>
// Category
& _MakeRegistry<'cate.all', undefined, site.Cate[]>
& _MakeRegistry<'cate.add', string, site.Cate>
& _MakeRegistry<'cate.change', site.Cate>
& _MakeRegistry<'cate.delete', number>
// Option
& _MakeRegistry<'option.get', undefined, option.DefaultOption>
& _MakeRegistry<'option.set', Partial<option.AllOption>>
& _MakeRegistry<'option.changeStorage', option.StorageType>
& _MakeRegistry<'option.testNotification', undefined, string | undefined>
& _MakeRegistry<'option.weekStartDay', undefined, number>
& _MakeRegistry<'option.weekStartTime', number, number>
// Meta
& _MakeRegistry<'meta.installTs', undefined, number>
& _MakeRegistry<'meta.usedStorage', undefined, common.StorageUsage>
// Site
& _MakeRegistry<'site.runEnabled', string, boolean>
& _MakeRegistry<'site.list', site.Query | undefined, site.SiteInfo[]>
& _MakeRegistry<'site.page', site.PageQuery | undefined, common.PageResult<site.SiteInfo>>
& _MakeRegistry<'site.add', site.SiteInfo, string | undefined>
& _MakeRegistry<'site.delete', site.SiteKey[]>
& _MakeRegistry<'site.changeCate', site.ChangeCateParam>
& _MakeRegistry<'site.deleteIcon', site.SiteKey>
& _MakeRegistry<'site.changeAlias', site.ChangeAliasParam>
& _MakeRegistry<'site.fillAlias', site.SiteKey[]>
& _MakeRegistry<'site.initialAlias', string, string | undefined>
& _MakeRegistry<'site.changeRun', { key: site.SiteKey; enabled: boolean }>
& _MakeRegistry<'site.search', string | undefined, site.SiteInfo[]>
// Time Limit
& _MakeRegistry<'limit.list', limit.Query | undefined, limit.Item[]>
& _MakeRegistry<'limit.delete', number[]>
& _MakeRegistry<'limit.update', limit.Rule[]>
& _MakeRegistry<'limit.add', Omit<limit.Rule, 'id'>, number>
& _MakeRegistry<'limit.hitVisit', limit.Item, boolean>
& _MakeRegistry<'limit.delay', string>
& _MakeRegistry<'limit.summary', undefined, limit.Summary | undefined>
// Merge
& _MakeRegistry<'merge.all', undefined, merge.Rule[]>
& _MakeRegistry<'merge.delete', string>
& _MakeRegistry<'merge.add', merge.Rule>
// Whitelist
& _MakeRegistry<'whitelist.all', undefined, string[]>
& _MakeRegistry<'whitelist.add' | 'whitelist.delete', string>
& _MakeRegistry<'whitelist.contain', { host: string; url: string }, boolean>
// Backup
& _MakeRegistry<'backup.sync' | 'backup.checkAuth', undefined, string | undefined>
& _MakeRegistry<'backup.clear', string, string | undefined>
& _MakeRegistry<'backup.query', backup.RemoteQuery, backup.Row[]>
& _MakeRegistry<'backup.lastTs', backup.Type, number | undefined>
& _MakeRegistry<'backup.clients', undefined, (backup.Client & { current: boolean })[]>
// Period
& _MakeRegistry<'period.list', period.Query, period.Row[]>
// Timeline
& _MakeRegistry<'timeline.list', timeline.Query, timeline.Activity[]>
& _MakeRegistry<'timeline.tick', timeline.Event>
& _MakeRegistry<'backup.preview', backup.RemoteQuery, imported.Row[]>
& _MakeRegistry<'immigration.importOther', imported.ProcessQuery>
& _MakeRegistry<'immigration.import', any>
& _MakeRegistry<'immigration.export', undefined, backup.ExportData>
type ReqCode = keyof _HandlerRegistry
type ReqData<T extends ReqCode> = _MqReqData<_HandlerRegistry, T>
/**
* @since 0.2.2
*/
type Request<T extends ReqCode = ReqCode> = _MqRequest<_HandlerRegistry, T>
type ResData<T extends ReqCode> = _MqResData<_HandlerRegistry, T>
/**
* When ResData is undefined, success may omit data.
* @since 0.8.4
*/
type Response<T extends ReqCode = ReqCode> = _MqResponse<_HandlerRegistry, T>
/**
* @since 1.3.0
*/
type Handler<C extends ReqCode> = _MqHandler<_HandlerRegistry, C>
/**
* @since 0.8.4
*/
type Callback<T extends ReqCode = ReqCode> = (result?: Response<T>) => void
}
/**
* Background → content script via chrome.tabs.sendMessage (see sendMsg2Tab).
*/
declare namespace timer.tab {
type _HandlerRegistry =
& _MakeRegistry<'siteRunChange'>
& _MakeRegistry<'syncAudible', boolean>
& _MakeRegistry<'limitTimeMeet', limit.Item[]>
& _MakeRegistry<'limitChanged'>
& _MakeRegistry<'limitReminder', limit.ReminderInfo>
& _MakeRegistry<'askVisitHit', number, boolean>
type ReqCode = keyof _HandlerRegistry
type ReqData<T extends ReqCode> = _MqReqData<_HandlerRegistry, T>
type ResData<T extends ReqCode> = _MqResData<_HandlerRegistry, T>
type Request<T extends ReqCode = ReqCode> = _MqRequest<_HandlerRegistry, T>
type Response<T extends ReqCode = ReqCode> = _MqResponse<_HandlerRegistry, T>
/**
* @since 0.8.4
*/
type Callback<T extends ReqCode = ReqCode> = (result?: Response<T>) => void
}