blob: 277ae4c25b3965ebadb48f0db593fee4dcb13bcf [file] [log] [blame]
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +02001import {
2 Option,
3 OptionContext,
4 KillSwitchType,
5 OptionConfig,
6} from './Option';
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +02007
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +02008const rawOptionConfigs = {
9 // Available options
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020010 list: {
11 defaultValue: true,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020012 context: OptionContext.Options,
13 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020014 },
15 thread: {
16 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020017 context: OptionContext.Options,
18 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020019 },
20 threadall: {
21 defaultValue: true,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020022 context: OptionContext.Options,
23 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020024 },
25 fixedtoolbar: {
26 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020027 context: OptionContext.Options,
28 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020029 },
30 redirect: {
31 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020032 context: OptionContext.Options,
33 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020034 },
35 history: {
36 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020037 context: OptionContext.Options,
38 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020039 },
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020040 increasecontrast: {
41 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020042 context: OptionContext.Options,
43 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020044 },
45 stickysidebarheaders: {
46 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020047 context: OptionContext.Options,
48 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020049 },
50 profileindicator: {
51 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020052 context: OptionContext.Options,
53 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020054 },
55 profileindicatoralt: {
56 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020057 context: OptionContext.Options,
58 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020059 },
60 profileindicatoralt_months: {
61 defaultValue: 12,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020062 context: OptionContext.Options,
63 killSwitchType: KillSwitchType.Ignore,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020064 },
65 ccdarktheme: {
66 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020067 context: OptionContext.Options,
68 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020069 },
70 ccdarktheme_mode: {
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020071 defaultValue: 'switch',
72 context: OptionContext.Options,
73 killSwitchType: KillSwitchType.Ignore,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020074 },
75 ccforcehidedrawer: {
76 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020077 context: OptionContext.Options,
78 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020079 },
80 // #!if ['chromium', 'chromium_mv3'].includes(browser_target)
81 ccdragndropfix: {
82 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020083 context: OptionContext.Options,
84 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020085 },
86 // #!endif
87 batchlock: {
88 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020089 context: OptionContext.Options,
90 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020091 },
92 enhancedannouncementsdot: {
93 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020094 context: OptionContext.Options,
95 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +020096 },
97 repositionexpandthread: {
98 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +020099 context: OptionContext.Options,
100 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200101 },
102 threadlistavatars: {
103 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200104 context: OptionContext.Options,
105 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200106 },
107 autorefreshlist: {
108 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200109 context: OptionContext.Options,
110 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200111 },
112 imagemaxheight: {
113 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200114 context: OptionContext.Options,
115 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200116 },
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200117 perforumstats: {
118 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200119 context: OptionContext.Options,
120 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200121 },
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200122 uispacing: {
123 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200124 context: OptionContext.Options,
125 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200126 },
127 flattenthreads: {
128 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200129 context: OptionContext.Options,
130 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200131 },
Adrià Vilanova Martínez66dba7c2024-05-15 22:38:20 +0200132 fixpekb269560789: {
133 defaultValue: true,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200134 context: OptionContext.Options,
135 killSwitchType: KillSwitchType.Option,
Adrià Vilanova Martínez66dba7c2024-05-15 22:38:20 +0200136 },
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200137
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200138 // Experiments
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200139 workflows: {
140 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200141 context: OptionContext.Experiments,
142 killSwitchType: KillSwitchType.Experiment,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200143 },
144 extrainfo: {
145 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200146 context: OptionContext.Experiments,
147 killSwitchType: KillSwitchType.Experiment,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200148 },
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200149
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200150 // Internal options
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200151 ccdarktheme_switch_enabled: {
152 defaultValue: true,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200153 context: OptionContext.Internal,
154 killSwitchType: KillSwitchType.Ignore,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200155 },
156 flattenthreads_switch_enabled: {
157 defaultValue: true,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200158 context: OptionContext.Internal,
159 killSwitchType: KillSwitchType.Ignore,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200160 },
161
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200162 // Internal kill switches
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200163 killswitch_xhrproxy: {
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200164 defaultValue: undefined as any,
165 context: OptionContext.Internal,
166 killSwitchType: KillSwitchType.InternalKillSwitch,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200167 },
168
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200169 // Deprecated options
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200170 escalatethreads: {
171 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200172 context: OptionContext.Deprecated,
173 killSwitchType: KillSwitchType.Deprecated,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200174 },
175 movethreads: {
176 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200177 context: OptionContext.Deprecated,
178 killSwitchType: KillSwitchType.Deprecated,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200179 },
180 batchduplicate: {
181 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200182 context: OptionContext.Deprecated,
183 killSwitchType: KillSwitchType.Deprecated,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200184 },
185 smei_sortdirection: {
186 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200187 context: OptionContext.Deprecated,
188 killSwitchType: KillSwitchType.Deprecated,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200189 },
190 forcemarkasread: {
191 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200192 context: OptionContext.Deprecated,
193 killSwitchType: KillSwitchType.Deprecated,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200194 },
195 disableunifiedprofiles: {
196 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200197 context: OptionContext.Deprecated,
198 killSwitchType: KillSwitchType.Deprecated,
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200199 },
Adrià Vilanova Martínez8423dfd2024-05-16 22:15:55 +0200200 nestedreplies: {
201 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200202 context: OptionContext.Deprecated,
203 killSwitchType: KillSwitchType.Deprecated,
Adrià Vilanova Martínez8423dfd2024-05-16 22:15:55 +0200204 },
Adrià Vilanova Martínez879d44a2024-05-17 15:30:03 +0200205 loaddrafts: {
206 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200207 context: OptionContext.Deprecated,
208 killSwitchType: KillSwitchType.Deprecated,
Adrià Vilanova Martínez879d44a2024-05-17 15:30:03 +0200209 },
210 // #!if ['chromium', 'chromium_mv3'].includes(browser_target)
211 blockdrafts: {
212 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200213 context: OptionContext.Deprecated,
214 killSwitchType: KillSwitchType.Deprecated,
Adrià Vilanova Martínez879d44a2024-05-17 15:30:03 +0200215 },
216 // #!endif
217 interopthreadpage: {
218 defaultValue: false,
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200219 context: OptionContext.Deprecated,
220 killSwitchType: KillSwitchType.Deprecated,
Adrià Vilanova Martínez879d44a2024-05-17 15:30:03 +0200221 },
222 interopthreadpage_mode: {
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200223 defaultValue: 'previous',
224 context: OptionContext.Deprecated,
225 killSwitchType: KillSwitchType.Ignore,
Adrià Vilanova Martínez879d44a2024-05-17 15:30:03 +0200226 },
Adrià Vilanova Martíneza2ede8c2024-04-21 16:43:01 +0200227};
Adrià Vilanova Martínez9344d612024-05-11 14:16:38 +0200228
229export type OptionPrototype<T> = Omit<
230 OptionConfig<T>,
231 'codename' | 'optionalPermissions'
232>;
233export const optionsPrototype: Record<
234 string,
235 OptionPrototype<any>
236> = rawOptionConfigs;
237
238export const options = Object.entries(optionsPrototype).map(
239 ([codename, rawOption]) =>
240 new Option({
241 codename,
242 ...rawOption,
243 }),
244);
245
246export const optionsMap = new Map(
247 options.map((option) => [option.codename, option]),
248);
249
250export type OptionCodename = keyof typeof rawOptionConfigs;
251export type OptionValues = {
252 [K in OptionCodename]: (typeof rawOptionConfigs)[K]['defaultValue'];
253};