SpecialDiff: Don't pass null to explode()
[mediawiki.git] / docs / extension.schema.v1.json
blob3d8aa2710a1d91fda8d5a8b32f32dfe3cb006687
2         "$schema": "http://json-schema.org/schema#",
3         "description": "MediaWiki extension.json schema",
4         "type": "object",
5         "properties": {
6                 "manifest_version": {
7                         "type": "integer",
8                         "description": "Version of the extension.json schema the extension.json file is in.",
9                         "required": true
10                 },
11                 "name": {
12                         "type": "string",
13                         "description": "The extension's canonical name.",
14                         "required": true
15                 },
16                 "namemsg": {
17                         "type": "string",
18                         "description": "i18n message key of the extension's name."
19                 },
20                 "type": {
21                         "type": "string",
22                         "description": "The extension's type, as an index to $wgExtensionCredits.",
23                         "default": "other"
24                 },
25                 "author": {
26                         "type": [
27                                 "string",
28                                 "array"
29                         ],
30                         "description": "Extension's authors.",
31                         "items": {
32                                 "type": "string"
33                         }
34                 },
35                 "version": {
36                         "type": "string",
37                         "description": "The version of this release of the extension."
38                 },
39                 "url": {
40                         "type": "string",
41                         "description": "URL to the homepage for the extension.",
42                         "format": "uri-reference"
43                 },
44                 "description": {
45                         "type": "string",
46                         "description": "Raw description of the extension."
47                 },
48                 "descriptionmsg": {
49                         "type": "string",
50                         "description": "Message key for a i18n message describing the extension."
51                 },
52                 "license-name": {
53                         "type": "string",
54                         "description": "SPDX identifier for the license under which the extension is released."
55                 },
56                 "requires": {
57                         "type": "object",
58                         "description": "Indicates what versions of PHP, MediaWiki core, extensions or skins are required. This syntax may be extended in the future, for example to check dependencies between other services.",
59                         "additionalProperties": false,
60                         "properties": {
61                                 "MediaWiki": {
62                                         "type": "string",
63                                         "description": "Version constraint string against MediaWiki core."
64                                 },
65                                 "platform": {
66                                         "type": "object",
67                                         "description": "Indicates version constraints against platform services.",
68                                         "additionalProperties": false,
69                                         "properties": {
70                                                 "php": {
71                                                         "type": "string",
72                                                         "description": "Version constraint string against PHP."
73                                                 },
74                                                 "ability-shell": {
75                                                         "type": "boolean",
76                                                         "default": false,
77                                                         "description": "Whether this extension requires shell access."
78                                                 }
79                                         },
80                                         "patternProperties": {
81                                                 "^ext-": {
82                                                         "type": "string",
83                                                         "description": "Required PHP extension.",
84                                                         "enum": ["*"]
85                                                 }
86                                         }
87                                 },
88                                 "extensions": {
89                                         "type": "object",
90                                         "description": "Set of version constraint strings against specific extensions."
91                                 },
92                                 "skins": {
93                                         "type": "object",
94                                         "description": "Set of version constraint strings against specific skins."
95                                 }
96                         }
97                 },
98                 "dev-requires": {
99                         "type": "object",
100                         "description": "Indicates what dependencies are required for development purposes such as running tests. This syntax may be extended in the future.",
101                         "additionalProperties": false,
102                         "properties": {
103                                 "MediaWiki": {
104                                         "type": "string",
105                                         "description": "Version constraint string against MediaWiki core."
106                                 },
107                                 "platform": {
108                                         "type": "object",
109                                         "description": "Indicates version constraints against platform services.",
110                                         "additionalProperties": false,
111                                         "properties": {
112                                                 "php": {
113                                                         "type": "string",
114                                                         "description": "Version constraint string against PHP."
115                                                 },
116                                                 "ability-shell": {
117                                                         "type": "boolean",
118                                                         "default": false,
119                                                         "description": "Whether this extension requires shell access."
120                                                 }
121                                         },
122                                         "patternProperties": {
123                                                 "^ext-": {
124                                                         "type": "string",
125                                                         "description": "Required PHP extension.",
126                                                         "enum": ["*"]
127                                                 }
128                                         }
129                                 },
130                                 "extensions": {
131                                         "type": "object",
132                                         "description": "Set of version constraint strings against specific extensions."
133                                 },
134                                 "skins": {
135                                         "type": "object",
136                                         "description": "Set of version constraint strings against specific skins."
137                                 }
138                         }
139                 },
140                 "ResourceFileModulePaths": {
141                         "type": "object",
142                         "description": "Default paths to use for all ResourceLoader file modules",
143                         "additionalProperties": false,
144                         "properties": {
145                                 "localBasePath": {
146                                         "type": "string",
147                                         "description": "Base path to prepend to all local paths, relative to current directory"
148                                 },
149                                 "remoteExtPath": {
150                                         "type": "string",
151                                         "description": "Base path to prepend to all remote paths, relative to $wgExtensionAssetsPath"
152                                 },
153                                 "remoteSkinPath": {
154                                         "type": "string",
155                                         "description": "Base path to prepend to all remote paths, relative to $wgStylePath"
156                                 }
157                         }
158                 },
159                 "ResourceModules": {
160                         "type": "object",
161                         "description": "ResourceLoader modules to register",
162                         "patternProperties": {
163                                 "^[a-zA-Z0-9-\\.]+$": {
164                                         "type": "object",
165                                         "anyOf": [
166                                                 {
167                                                         "description": "A FileModule definition",
168                                                         "additionalProperties": false,
169                                                         "properties": {
170                                                                 "localBasePath": {
171                                                                         "type": "string",
172                                                                         "description": "Base path to prepend to all local paths in $options. Defaults to $IP"
173                                                                 },
174                                                                 "remoteBasePath": {
175                                                                         "type": "string",
176                                                                         "description": "Base path to prepend to all remote paths in $options. Defaults to $wgScriptPath"
177                                                                 },
178                                                                 "remoteExtPath": {
179                                                                         "type": "string",
180                                                                         "description": "Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath"
181                                                                 },
182                                                                 "skipFunction": {
183                                                                         "type": "string",
184                                                                         "description": "Path to a file containing a JavaScript \"skip function\", if desired."
185                                                                 },
186                                                                 "scripts": {
187                                                                         "type": ["string", "array"],
188                                                                         "description": "Scripts to always include (array of file paths)",
189                                                                         "items": {
190                                                                                 "type": "string"
191                                                                         }
192                                                                 },
193                                                                 "languageScripts": {
194                                                                         "type": "object",
195                                                                         "description": "Scripts to include in specific language contexts (mapping of language code to file path(s))",
196                                                                         "patternProperties": {
197                                                                                 "^[a-zA-Z0-9-]{2,}$": {
198                                                                                         "type": [
199                                                                                                 "string",
200                                                                                                 "array"
201                                                                                         ],
202                                                                                         "items": {
203                                                                                                 "type": "string"
204                                                                                         }
205                                                                                 }
206                                                                         }
207                                                                 },
208                                                                 "skinScripts": {
209                                                                         "type": "object",
210                                                                         "description": "Scripts to include in specific skin contexts (mapping of skin name to script(s)",
211                                                                         "patternProperties": {
212                                                                                 ".+": {
213                                                                                         "type": [
214                                                                                                 "string",
215                                                                                                 "array"
216                                                                                         ],
217                                                                                         "items": {
218                                                                                                 "type": "string"
219                                                                                         }
220                                                                                 }
221                                                                         }
222                                                                 },
223                                                                 "debugScripts": {
224                                                                         "type": ["string", "array"],
225                                                                         "description": "Scripts to include in debug contexts",
226                                                                         "items": {
227                                                                                 "type": "string"
228                                                                         }
229                                                                 },
230                                                                 "dependencies": {
231                                                                         "type": ["string", "array"],
232                                                                         "description": "Modules which must be loaded before this module",
233                                                                         "items": {
234                                                                                 "type": "string"
235                                                                         }
236                                                                 },
237                                                                 "styles": {
238                                                                         "type": ["string", "array", "object"],
239                                                                         "description": "Styles to always load",
240                                                                         "items": {
241                                                                                 "type": "string"
242                                                                         }
243                                                                 },
244                                                                 "skinStyles": {
245                                                                         "type": "object",
246                                                                         "description": "Styles to include in specific skin contexts (mapping of skin name to style(s))",
247                                                                         "patternProperties": {
248                                                                                 ".+": {
249                                                                                         "type": [
250                                                                                                 "string",
251                                                                                                 "array"
252                                                                                         ],
253                                                                                         "items": {
254                                                                                                 "type": "string"
255                                                                                         }
256                                                                                 }
257                                                                         }
258                                                                 },
259                                                                 "messages": {
260                                                                         "type": ["string", "array"],
261                                                                         "description": "Messages to always load",
262                                                                         "items": {
263                                                                                 "type": "string"
264                                                                         }
265                                                                 },
266                                                                 "group": {
267                                                                         "type": "string",
268                                                                         "description": "Group with which this module should be loaded"
269                                                                 },
270                                                                 "deprecated": {
271                                                                         "type": ["object", "string", "boolean"],
272                                                                         "description": "Whether the module is deprecated and usage is discouraged. Either a boolean, or a string or an object with key message can be used to customise deprecation message."
273                                                                 },
274                                                                 "position": {
275                                                                         "type": "string",
276                                                                         "description": "Position on the page to load this module at (unused since MediaWiki 1.29)",
277                                                                         "enum": [
278                                                                                 "bottom",
279                                                                                 "top"
280                                                                         ]
281                                                                 },
282                                                                 "templates": {
283                                                                         "type": ["object", "array"],
284                                                                         "description": "Templates to be loaded for client-side usage"
285                                                                 },
286                                                                 "targets": {
287                                                                         "type": ["string", "array"],
288                                                                         "description": "ResourceLoader target the module can run on",
289                                                                         "items": {
290                                                                                 "type": "string"
291                                                                         }
292                                                                 },
293                                                                 "noflip": {
294                                                                         "type": "boolean",
295                                                                         "description": "Whether to skip CSSJanus LTR-to-RTL flipping for this module. Recommended for styles imported from libraries that already properly handle their RTL styles. Default is false, meaning CSSJanus will be applied on RTL-mode output."
296                                                                 },
297                                                                 "packageFiles": {
298                                                                         "type": ["string", "array"],
299                                                                         "description": "Package files that can be require()d",
300                                                                         "items": {
301                                                                                 "type": ["string", "object"]
302                                                                         }
303                                                                 },
304                                                                 "es6": {
305                                                                         "type": "boolean",
306                                                                         "description": "Whether this module requires an ES6-capable browser. If set to true, loading this module in a non-ES6 browser will cause an error. Using ES6 syntax in modules is not yet supported, but will be in the near future. Default is false."
307                                                                 }
308                                                         }
309                                                 },
310                                                 {
311                                                         "description": "A WikiModule definition",
312                                                         "additionalProperties": false,
313                                                         "properties": {
314                                                                 "class": {
315                                                                         "type": "string"
316                                                                 },
317                                                                 "group": {
318                                                                         "type": "string",
319                                                                         "description": "Group with which this module should be loaded"
320                                                                 },
321                                                                 "position": {
322                                                                         "type": "string",
323                                                                         "description": "Position on the page to load this module at (unused since MediaWiki 1.29)",
324                                                                         "enum": [
325                                                                                 "bottom",
326                                                                                 "top"
327                                                                         ]
328                                                                 },
329                                                                 "targets": {
330                                                                         "type": ["string", "array"],
331                                                                         "description": "ResourceLoader target the module can run on",
332                                                                         "items": {
333                                                                                 "type": "string"
334                                                                         }
335                                                                 },
336                                                                 "scripts": {
337                                                                         "type": "array",
338                                                                         "description": "A list of on-wiki pages containing JavaScript that should be loaded",
339                                                                         "items": {
340                                                                                 "type": "string"
341                                                                         }
342                                                                 },
343                                                                 "styles": {
344                                                                         "type": "array",
345                                                                         "description": "A list of on-wiki pages containing CSS that should be loaded",
346                                                                         "items": {
347                                                                                 "type": "string"
348                                                                         }
349                                                                 }
350                                                         }
351                                                 },
352                                                 {
353                                                         "description": "An ImageModule definition",
354                                                         "additionalProperties": false,
355                                                         "properties": {
356                                                                 "class": {
357                                                                         "type": "string"
358                                                                 },
359                                                                 "localBasePath": {
360                                                                         "type": "string",
361                                                                         "description": "Base path to prepend to all local paths. Defaults to $IP"
362                                                                 },
363                                                                 "defaultColor": {
364                                                                         "type": "string"
365                                                                 },
366                                                                 "data": {
367                                                                         "type": "string"
368                                                                 },
369                                                                 "prefix": {
370                                                                         "type": "string"
371                                                                 },
372                                                                 "selector": {
373                                                                         "type": "string"
374                                                                 },
375                                                                 "selectorWithoutVariant": {
376                                                                         "type": "string"
377                                                                 },
378                                                                 "selectorWithVariant": {
379                                                                         "type": "string"
380                                                                 },
381                                                                 "useDataURI": {
382                                                                         "type": "boolean"
383                                                                 },
384                                                                 "variants": {
385                                                                         "type": "object"
386                                                                 },
387                                                                 "images": {
388                                                                         "type": "object"
389                                                                 },
390                                                                 "position": {
391                                                                         "type": "string",
392                                                                         "description": "Position on the page to load this module at (unused since MediaWiki 1.29)",
393                                                                         "enum": [
394                                                                                 "top",
395                                                                                 "bottom"
396                                                                         ]
397                                                                 }
398                                                         }
399                                                 },
400                                                 {
401                                                         "description": "An arbitrary ResourceLoader Module definition by class",
402                                                         "properties": {
403                                                                 "class": {
404                                                                         "type": "string",
405                                                                         "pattern": "^(?!ResourceLoader(File|Image|Wiki)Module).*$"
406                                                                 }
407                                                         },
408                                                         "required": ["class"]
409                                                 }
410                                         ]
411                                 }
412                         }
413                 },
414                 "ResourceModuleSkinStyles": {
415                         "type": "object",
416                         "description": "ResourceLoader modules for custom skin styles"
417                 },
418                 "ResourceLoaderSources": {
419                         "type": "object",
420                         "description": "ResourceLoader sources to register"
421                 },
422                 "SkinLessImportPaths": {
423                         "type": "object",
424                         "description": "Path to the skin-specific LESS import directory, keyed by skin name. Can be used to define skin-specific LESS variables."
425                 },
426                 "QUnitTestModule": {
427                         "type": "object",
428                         "description": "A ResourceLoader FileModule definition registered only when wgEnableJavaScriptTest is true.",
429                         "additionalProperties": false,
430                         "properties": {
431                                 "localBasePath": {
432                                         "type": "string",
433                                         "description": "Prefix for local paths to files in $options, relative to extenion directory"
434                                 },
435                                 "remoteExtPath": {
436                                         "type": "string",
437                                         "description": "Prefix for URLs to files in $options, relative to $wgExtensionAssetsPath"
438                                 },
439                                 "remoteSkinPath": {
440                                         "type": "string",
441                                         "description": "Prefix for URLs to files in $options, relative to $wgStylePath"
442                                 },
443                                 "scripts": {
444                                         "type": ["string", "array"],
445                                         "description": "Scripts to include (array of file paths)",
446                                         "items": {
447                                                 "type": "string"
448                                         }
449                                 },
450                                 "packageFiles": {
451                                         "type": ["string", "array"],
452                                         "description": "Package files that can be require()d",
453                                         "items": {
454                                                 "type": ["string", "object"]
455                                         }
456                                 },
457                                 "dependencies": {
458                                         "type": ["string", "array"],
459                                         "description": "Modules which must be loaded before this module",
460                                         "items": {
461                                                 "type": "string"
462                                         }
463                                 },
464                                 "styles": {
465                                         "type": ["string", "array", "object"],
466                                         "description": "Styles to load",
467                                         "items": {
468                                                 "type": "string"
469                                         }
470                                 },
471                                 "templates": {
472                                         "type": ["object", "array"],
473                                         "description": "Templates to be loaded for client-side usage",
474                                         "items": {
475                                                 "type": "string"
476                                         }
477                                 },
478                                 "messages": {
479                                         "type": ["string", "array"],
480                                         "description": "Messages to load",
481                                         "items": {
482                                                 "type": "string"
483                                         }
484                                 }
485                         }
486                 },
487                 "MessagePosterModule": {
488                         "type": "object",
489                         "description": "Additional JavaScript files and modules that will register content models with mw.messagePoster.factory.",
490                         "additionalProperties": false,
491                         "properties": {
492                                 "localBasePath": {
493                                         "type": "string",
494                                         "description": "Prefix for local paths to files in $options, relative to extenion directory"
495                                 },
496                                 "scripts": {
497                                         "type": "array",
498                                         "description": "Scripts to include as array of file paths",
499                                         "items": {
500                                                 "type": "string"
501                                         }
502                                 },
503                                 "dependencies": {
504                                         "type": "array",
505                                         "description": "Modules which must load before these files",
506                                         "items": {
507                                                 "type": "string"
508                                         }
509                                 }
510                         }
511                 },
512                 "ConfigRegistry": {
513                         "type": "object",
514                         "description": "Registry of factory functions to create Config objects"
515                 },
516                 "SessionProviders": {
517                         "type": "object",
518                         "description": "Session providers"
519                 },
520                 "AuthManagerAutoConfig": {
521                         "type": "object",
522                         "description": "AuthManager auto-configuration",
523                         "additionalProperties": false,
524                         "properties": {
525                                 "preauth": {
526                                         "type": "object",
527                                         "description": "Pre-authentication providers"
528                                 },
529                                 "primaryauth": {
530                                         "type": "object",
531                                         "description": "Primary authentication providers"
532                                 },
533                                 "secondaryauth": {
534                                         "type": "object",
535                                         "description": "Secondary authentication providers"
536                                 }
537                         }
538                 },
539                 "CentralIdLookupProviders": {
540                         "type": "object",
541                         "description": "Central ID lookup providers"
542                 },
543                 "namespaces": {
544                         "type": "array",
545                         "description": "Method to add extra namespaces",
546                         "items": {
547                                 "type": "object",
548                                 "properties": {
549                                         "id": {
550                                                 "type": "integer"
551                                         },
552                                         "constant": {
553                                                 "type": "string"
554                                         },
555                                         "name": {
556                                                 "type": "string"
557                                         },
558                                         "gender": {
559                                                 "type": "object",
560                                                 "properties": {
561                                                         "male": {
562                                                                 "type": "string"
563                                                         },
564                                                         "female": {
565                                                                 "type": "string"
566                                                         }
567                                                 }
568                                         },
569                                         "subpages": {
570                                                 "type": "boolean",
571                                                 "default": false
572                                         },
573                                         "content": {
574                                                 "type": "boolean",
575                                                 "default": false
576                                         },
577                                         "defaultcontentmodel": {
578                                                 "type": "string"
579                                         },
580                                         "protection": {
581                                                 "type": ["string", "array"],
582                                                 "description": "Userright(s) required to edit in this namespace"
583                                         },
584                                         "capitallinkoverride": {
585                                                 "type": "boolean",
586                                                 "description": "Set $wgCapitalLinks on a per-namespace basis"
587                                         },
588                                         "conditional": {
589                                                 "type": "boolean",
590                                                 "description": "Whether the namespace is conditional upon configuration and should not be registered (requires separate registration via a hook)",
591                                                 "default": false
592                                         },
593                                         "movable": {
594                                                 "type": "boolean",
595                                                 "description": "Whether it is possible to move pages in this namespace",
596                                                 "default": true
597                                         },
598                                         "includable": {
599                                                 "type": "boolean",
600                                                 "description": "Whether it is possible to include/transclude pages in this namespace",
601                                                 "default": true
602                                         }
603                                 },
604                                 "required": ["id", "constant", "name"]
605                         }
606                 },
607                 "TrackingCategories": {
608                         "type": "array",
609                         "description": "Tracking category message keys",
610                         "items": {
611                                 "type": "string"
612                         }
613                 },
614                 "DefaultUserOptions": {
615                         "type": "object",
616                         "description": "Default values of user options"
617                 },
618                 "HiddenPrefs": {
619                         "type": "array",
620                         "description": "Preferences users cannot set",
621                         "items": {
622                                 "type": "string"
623                         }
624                 },
625                 "GroupPermissions": {
626                         "type": "object",
627                         "description": "Default permissions to give to user groups",
628                         "patternProperties": {
629                                 "^[a-z]+$": {
630                                         "type": "object",
631                                         "patternProperties": {
632                                                 "^[a-z]+$": {
633                                                         "type": "boolean"
634                                                 }
635                                         }
636                                 }
637                         }
638                 },
639                 "RevokePermissions": {
640                         "type": "object",
641                         "description": "Default permissions to revoke from user groups",
642                         "patternProperties": {
643                                 "^[a-z]+$": {
644                                         "type": "object",
645                                         "patternProperties": {
646                                                 "^[a-z]+$": {
647                                                         "type": "boolean"
648                                                 }
649                                         }
650                                 }
651                         }
652                 },
653                 "GrantPermissions": {
654                         "type": "object",
655                         "description": "Map of permissions granted to authorized consumers to their bundles, called 'grants'",
656                         "patternProperties": {
657                                 "^[a-z]+$": {
658                                         "type": "object",
659                                         "patternProperties": {
660                                                 "^[a-z]+$": {
661                                                         "type": "boolean"
662                                                 }
663                                         }
664                                 }
665                         }
666                 },
667                 "GrantPermissionGroups": {
668                         "type": "object",
669                         "description": "Map of grants to their UI grouping",
670                         "patternProperties": {
671                                 "^[a-z]+$": {
672                                         "type": "string"
673                                 }
674                         }
675                 },
676                 "ImplicitGroups": {
677                         "type": "array",
678                         "description": "Implicit groups"
679                 },
680                 "GroupsAddToSelf": {
681                         "type": "object",
682                         "description": "Groups a user can add to themselves"
683                 },
684                 "GroupsRemoveFromSelf": {
685                         "type": "object",
686                         "description": "Groups a user can remove from themselves"
687                 },
688                 "AddGroups": {
689                         "type": "object",
690                         "description": "Groups a user can add to users"
691                 },
692                 "RemoveGroups": {
693                         "type": "object",
694                         "description": "Groups a user can remove from users"
695                 },
696                 "AvailableRights": {
697                         "type": "array",
698                         "description": "User rights added by the extension",
699                         "items": {
700                                 "type": "string"
701                         }
702                 },
703                 "ContentHandlers": {
704                         "type": "object",
705                         "description": "Mapping of model ID to class name or an ObjectFactory specification.",
706                         "patternProperties": {
707                                 "^[A-Za-z]+$": {
708                                         "oneOf": [
709                                                 {
710                                                         "type": "string",
711                                                         "description": "Class name of the ContentHandler."
712                                                 },
713                                                 {
714                                                         "type": "object",
715                                                         "description": "ObjectFactory specification of the ContentHandler."
716                                                 }
717                                         ]
718                                 }
719                         }
720                 },
721                 "RateLimits": {
722                         "type": "object",
723                         "description": "Rate limits"
724                 },
725                 "RecentChangesFlags": {
726                         "type": "object",
727                         "description": "Flags (letter symbols) shown on RecentChanges pages"
728                 },
729                 "MediaHandlers": {
730                         "type": "object",
731                         "description": "Plugins for media file type handling. Each entry in the array maps a MIME type to a PHP class name."
732                 },
733                 "ExtensionFunctions": {
734                         "type": [
735                                 "array",
736                                 "string"
737                         ],
738                         "description": "Function to call after setup has finished",
739                         "items": {
740                                 "type": "string"
741                         }
742                 },
743                 "ExtensionMessagesFiles": {
744                         "type": "object",
745                         "description": "File paths containing PHP internationalization data"
746                 },
747                 "MessagesDirs": {
748                         "type": "object",
749                         "description": "Directory paths containing JSON internationalization data"
750                 },
751                 "ExtensionEntryPointListFiles": {
752                         "type": "object"
753                 },
754                 "SpecialPages": {
755                         "type": "object",
756                         "description": "SpecialPages implemented in this extension (mapping of page name to class name or to ObjectFactory spec)"
757                 },
758                 "AutoloadNamespaces": {
759                         "type": "object",
760                         "description": "Mapping of PSR-4 compliant namespace to directory for autoloading",
761                         "patternProperties": {
762                                 "^[A-Za-z0-9\\\\]+\\\\$": {
763                                         "type": "string"
764                                 }
765                         },
766                         "additionalProperties": false
767                 },
768                 "AutoloadClasses": {
769                         "type": "object"
770                 },
771                 "TestAutoloadNamespaces": {
772                         "type": "object",
773                         "description": "Mapping of PSR-4 compliant namespace to directory for autoloading to be used in tests",
774                         "patternProperties": {
775                                 "^[A-Za-z0-9\\\\]+\\\\$": {
776                                         "type": "string"
777                                 }
778                         },
779                         "additionalProperties": false
780                 },
781                 "TestAutoloadClasses": {
782                         "type": "object"
783                 },
784                 "Hooks": {
785                         "type": "object",
786                         "description": "Hooks this extension uses (mapping of hook name to callback)",
787                         "additionalProperties": {
788                                 "oneOf": [
789                                         {
790                                                 "type": "string",
791                                                 "description": "A global function name, static function name, or the name of a property in HookHandlers"
792                                         },
793                                         {
794                                                 "type": "object",
795                                                 "description": "A handler specification",
796                                                 "properties": {
797                                                         "handler": {
798                                                                 "type": "string",
799                                                                 "description": "The name of a property in HookHandlers"
800                                                         },
801                                                         "deprecated": {
802                                                                 "type": "boolean",
803                                                                 "description": "The deprecation acknowledgement flag for the handler. If this is true, calls will be filtered if the relevant hook is deprecated."
804                                                         }
805                                                 },
806                                                 "required": [
807                                                         "handler"
808                                                 ]
809                                         },
810                                         {
811                                                 "type": "array",
812                                                 "description": "An ordered array of handlers",
813                                                 "items": {
814                                                         "oneOf": [
815                                                                 {
816                                                                         "type": "string",
817                                                                         "description": "A global function name, static function name, or the name of a property in HookHandlers"
818                                                                 },
819                                                                 {
820                                                                         "type": "object",
821                                                                         "description": "A handler specification",
822                                                                         "properties": {
823                                                                                 "handler": {
824                                                                                         "type": "string",
825                                                                                         "description": "The name of a property in HookHandlers"
826                                                                                 },
827                                                                                 "deprecated": {
828                                                                                         "type": "boolean",
829                                                                                         "description": "The deprecation acknowledgement flag for the handler. If this is true, calls will be filtered if the relevant hook is deprecated."
830                                                                                 }
831                                                                         },
832                                                                         "required": [
833                                                                                 "handler"
834                                                                         ]
835                                                                 }
836                                                         ]
837                                                 }
838                                         }
839                                 ]
840                         }
841                 },
842                 "HookHandlers": {
843                         "type": "object",
844                         "description": "ObjectFactory specifications for new-style hook handlers",
845                         "additionalProperties": {
846                                 "type": "object",
847                                 "properties": {
848                                         "factory": {
849                                                 "type": ["string", "array"],
850                                                 "description": "A factory function to be called to create the handler for this hook"
851                                         },
852                                         "class": {
853                                                 "type": "string",
854                                                 "description": "The fully-qualified class name of the handler. This should be omitted if a factory is specified."
855                                         },
856                                         "args": {
857                                                 "type": "array",
858                                                 "description": "The arguments passed to the handler constructor or factory"
859                                         },
860                                         "services": {
861                                                 "type": "array",
862                                                 "description": "If supplied and non-empty, the named services are requested from the service container and prepended before 'args'."
863                                         },
864                                         "optional_services": {
865                                                 "type": "array",
866                                                 "description": "If supplied and non-empty, the named services are requested from the service container and appended after 'services' if the services are available; null is passed if the services are not available."
867                                         }
868                                 }
869                         }
870                 },
871                 "DeprecatedHooks": {
872                         "type": "object",
873                         "description": "Hooks which are defined and deprecated by the extension",
874                         "additionalProperties": {
875                                 "type": "object",
876                                 "properties": {
877                                         "deprecatedVersion": {
878                                                 "type": "string",
879                                                 "description": "The version in which the hook was deprecated"
880                                         },
881                                         "component": {
882                                                 "type": "string",
883                                                 "description" : "The component to which the deprecated version relates. If omitted, the extension name will be used."
884                                         },
885                                         "silent": {
886                                                 "type": "boolean",
887                                                 "description": "If true, no warning is raised when the hook is called or when a handler is declared. However, call filtering is still activated."
888                                         }
889                                 },
890                                 "required": [
891                                         "deprecatedVersion"
892                                 ]
893                         }
894                 },
895                 "JobClasses": {
896                         "type": "object",
897                         "description": "Job types this extension implements (mapping of job type to class name or factory function)"
898                 },
899                 "LogTypes": {
900                         "type": "array",
901                         "description": "List of new log types this extension uses"
902                 },
903                 "LogRestrictions": {
904                         "type": "object"
905                 },
906                 "FilterLogTypes": {
907                         "type": "object"
908                 },
909                 "ActionFilteredLogs": {
910                         "type": "object",
911                         "description": "List of log types which can be filtered by log actions",
912                         "patternProperties": {
913                                 "^[a-z-]+$": {
914                                         "type": "object",
915                                         "patternProperties": {
916                                                 "^[a-z-]+$": {
917                                                         "type": "array",
918                                                         "items": {
919                                                                 "type": "string"
920                                                         }
921                                                 }
922                                         }
923                                 }
924                         }
925                 },
926                 "LogNames": {
927                         "type": "object"
928                 },
929                 "LogHeaders": {
930                         "type": "object"
931                 },
932                 "LogActions": {
933                         "type": "object"
934                 },
935                 "LogActionsHandlers": {
936                         "type": "object"
937                 },
938                 "Actions": {
939                         "type": "object"
940                 },
941                 "APIModules": {
942                         "type": "object"
943                 },
944                 "APIFormatModules": {
945                         "type": "object"
946                 },
947                 "APIMetaModules": {
948                         "type": "object"
949                 },
950                 "APIPropModules": {
951                         "type": "object"
952                 },
953                 "APIListModules": {
954                         "type": "object"
955                 },
956                 "ValidSkinNames": {
957                         "type": "object",
958                         "description":  "Mapping of skin canonical names to PHP class name using the Object Factory specification. Or historically, the human readable name of the skin."
959                 },
960                 "FeedClasses": {
961                         "type": "object",
962                         "description": "Available feeds objects"
963                 },
964                 "SkinOOUIThemes": {
965                         "type": "object",
966                         "description": "Map of skin names to OOUI themes to use. Same format as MediaWiki\\ResourceLoader\\OOUIModule::$builtinSkinThemeMap."
967                 },
968                 "OOUIThemePaths": {
969                         "type": "object",
970                         "description": "Map of custom OOUI theme names to paths to load them from. Same format as MediaWiki\\ResourceLoader\\OOUIModule::$builtinThemePaths.",
971                         "patternProperties": {
972                                 "^[A-Za-z]+$": {
973                                         "type": "object",
974                                         "additionalProperties": false,
975                                         "properties": {
976                                                 "scripts": {
977                                                         "type": "string",
978                                                         "description": "Path to script file."
979                                                 },
980                                                 "styles": {
981                                                         "type": "string",
982                                                         "description": "Path to style files. '{module}' will be replaced with the module's name."
983                                                 },
984                                                 "images": {
985                                                         "type": [ "string", "null" ],
986                                                         "description": "Path to images (optional). '{module}' will be replaced with the module's name."
987                                                 }
988                                         }
989                                 }
990                         }
991                 },
992                 "PasswordPolicy": {
993                         "type": "object",
994                         "description": "Password policies"
995                 },
996                 "FileExtensions": {
997                         "type": "array",
998                         "description": "Preferred file extensions for uploading",
999                         "items": {
1000                                 "type": "string"
1001                         }
1002                 },
1003                 "RawHtmlMessages": {
1004                         "type": "array",
1005                         "description": "Messages which are rendered as raw HTML",
1006                         "items": {
1007                                 "type": "string"
1008                         }
1009                 },
1010                 "ReauthenticateTime": {
1011                         "type": "object",
1012                         "patternProperties": {
1013                                 ".*": {
1014                                         "type": "integer"
1015                                 }
1016                         }
1017                 },
1018                 "callback": {
1019                         "type": [
1020                                 "array",
1021                                 "string"
1022                         ],
1023                         "description": "A function to be called right after MediaWiki processes this file"
1024                 },
1025                 "config": {
1026                         "type": "object",
1027                         "description": "Configuration options for this extension",
1028                         "properties": {
1029                                 "_prefix": {
1030                                         "type": "string",
1031                                         "default": "wg",
1032                                         "description": "Prefix to put in front of configuration settings when exporting them to $GLOBALS"
1033                                 }
1034                         },
1035                         "patternProperties": {
1036                                 "^[a-zA-Z_\u007f-\u00ff][a-zA-Z0-9_\u007f-\u00ff]*$": {
1037                                         "properties": {
1038                                                 "_merge_strategy": {
1039                                                         "type": "string",
1040                                                         "enum": [
1041                                                                 "array_merge_recursive",
1042                                                                 "array_replace_recursive",
1043                                                                 "array_plus_2d",
1044                                                                 "array_plus",
1045                                                                 "array_merge",
1046                                                                 "provide_default"
1047                                                         ],
1048                                                         "default": "array_merge"
1049                                                 }
1050                                         }
1051                                 }
1052                         }
1053                 },
1054                 "ParserTestFiles": {
1055                         "type": "array",
1056                         "description": "DEPRECATED: Parser test suite files to be run by parserTests.php when no specific filename is passed to it"
1057                 },
1058                 "SearchMappings": {
1059                         "type": "object",
1060                         "description": "Mapping of search canonical names (used in $wgSearchType and $wgSearchTypeAlternatives) using the Object Factory specification"
1061                 },
1062                 "ServiceWiringFiles": {
1063                         "type": "array",
1064                         "description": "List of service wiring files to be loaded by the default instance of MediaWikiServices"
1065                 },
1066                 "RestRoutes": {
1067                         "type": "array",
1068                         "description": "List of route specifications to be added to the REST API",
1069                         "items": {
1070                                 "type": "object",
1071                                 "properties": {
1072                                         "method": {
1073                                                 "oneOf": [
1074                                                         {
1075                                                                 "type": "string",
1076                                                                 "description": "The HTTP method name"
1077                                                         },
1078                                                         {
1079                                                                 "type": "array",
1080                                                                 "items": {
1081                                                                         "type": "string",
1082                                                                         "description": "An acceptable HTTP method name"
1083                                                                 }
1084                                                         }
1085                                                 ]
1086                                         },
1087                                         "path": {
1088                                                 "type": "string",
1089                                                 "description": "The path template. This should start with an initial slash, designating the root of the REST API. Path parameters are enclosed in braces, for example /endpoint/{param}."
1090                                         },
1091                                         "factory": {
1092                                                 "type": ["string", "array"],
1093                                                 "description": "A factory function to be called to create the handler for this route"
1094                                         },
1095                                         "class": {
1096                                                 "type": "string",
1097                                                 "description": "The fully-qualified class name of the handler. This should be omitted if a factory is specified."
1098                                         },
1099                                         "args": {
1100                                                 "type": "array",
1101                                                 "description": "The arguments passed to the handler constructor or factory"
1102                                         },
1103                                         "services": {
1104                                                 "type": "array",
1105                                                 "description": "If supplied and non-empty, the named services are requested from the service container and prepended before 'args'."
1106                                         }
1107                                 }
1108                         }
1109                 },
1110                 "ParsoidModules": {
1111                         "type": "array",
1112                         "description": "List of extension modules to be registered with the Parsoid wikitext parser",
1113                         "items": {
1114                                 "oneOf": [
1115                                         {
1116                                                 "type": "string",
1117                                                 "description": "The fully-qualified name of a class implementing Wikimedia\\Parsoid\\Ext\\ExtensionModule"
1118                                         },
1119                                         {
1120                                                 "type": "object",
1121                                                 "description": "Object factory specification for a class implementing Wikimedia\\Parsoid\\Ext\\ExtensionModule",
1122                                                 "properties": {
1123                                                         "factory": {
1124                                                                 "type": ["string", "array"],
1125                                                                 "description": "A factory function to be called to create an ExtensionModule. This should be omitted if a class is specified."
1126                                                         }
1127                                                 },
1128                                                 "required": [ "factory" ]
1129                                         },
1130                                         {
1131                                                 "type": "object",
1132                                                 "description": "Object factory specification for a class implementing Wikimedia\\Parsoid\\Ext\\ExtensionModule",
1133                                                 "properties": {
1134                                                         "class": {
1135                                                                 "type": "string",
1136                                                                 "description": "The fully-qualified class name of a class implemeting Wikimedia\\Parsoid\\Ext\\ExtensionModule. This should be omitted if a factory is specified."
1137                                                         }
1138                                                 },
1139                                                 "required": [ "class" ]
1140                                         },
1141                                         {
1142                                                 "type": "object",
1143                                                 "description": "A Parsoid extension module configuration array",
1144                                                 "properties": {
1145                                                         "class": {
1146                                                                 "type": "null",
1147                                                                 "description": "This property must not be present in a configuration array"
1148                                                         },
1149                                                         "factory": {
1150                                                                 "type": "null",
1151                                                                 "description": "This property must not be present in a configuration array"
1152                                                         },
1153                                                         "domProcessors": {
1154                                                                 "type": "array",
1155                                                                 "items": {
1156                                                                         "description": "Object factory specification of a class implementing Wikimedia\\Parsoid\\Ext\\DOMProcessor"
1157                                                                 }
1158                                                         },
1159                                                         "styles": {
1160                                                                 "type": "array",
1161                                                                 "items": {
1162                                                                         "type": "string",
1163                                                                         "description": "Additional ResourceLoader styles to include"
1164                                                                 }
1165                                                         },
1166                                                         "annotations": {
1167                                                                 "type": "array",
1168                                                                 "items": {
1169                                                                         "type": "string",
1170                                                                         "description": "The name of an annotation tag"
1171                                                                 }
1172                                                         },
1173                                                         "tags": {
1174                                                                 "type": "array",
1175                                                                 "items": {
1176                                                                         "type": "object",
1177                                                                         "description": "An extension tag",
1178                                                                         "properties": {
1179                                                                                 "name": {
1180                                                                                         "type": "string",
1181                                                                                         "description": "The name of the extension tag"
1182                                                                                 },
1183                                                                                 "handler": {
1184                                                                                         "description": "An object factory specification of a class extending Wikimedia\\Parsoid\\Ext\\ExtensionTagHandler"
1185                                                                                 },
1186                                                                                 "options": {
1187                                                                                         "type": "object",
1188                                                                                         "description": "Additional Parsoid processing configuration for this extension tag"
1189                                                                                 }
1190                                                                         },
1191                                                                         "required": ["name"]
1192                                                                 }
1193                                                         }
1194                                                 }
1195                                         }
1196                                 ]
1197                         }
1198                 },
1199                 "TempUserSerialProviders": {
1200                         "type" : "object",
1201                         "description": "Map of temporary user serial provider type name to ObjectFactory spec",
1202                         "patternProperties": {
1203                                 ".*": {
1204                                         "type": "object",
1205                                         "properties": {
1206                                                 "factory": {
1207                                                         "type": ["string", "array"],
1208                                                         "description": "A factory function"
1209                                                 },
1210                                                 "class": {
1211                                                         "type": "string",
1212                                                         "description": "The fully-qualified class name of the handler. This should be omitted if a factory is specified."
1213                                                 },
1214                                                 "args": {
1215                                                         "type": "array",
1216                                                         "description": "The arguments passed to the constructor or factory"
1217                                                 },
1218                                                 "services": {
1219                                                         "type": "array",
1220                                                         "description": "If supplied and non-empty, the named services are requested from the service container and prepended before 'args'."
1221                                                 }
1222                                         }
1223                                 }
1224                         }
1225                 },
1226                 "TempUserSerialMappings": {
1227                         "type" : "object",
1228                         "description": "Map of temporary user serial map type name to ObjectFactory spec",
1229                         "patternProperties": {
1230                                 ".*": {
1231                                         "type": "object",
1232                                         "properties": {
1233                                                 "factory": {
1234                                                         "type": ["string", "array"],
1235                                                         "description": "A factory function"
1236                                                 },
1237                                                 "class": {
1238                                                         "type": "string",
1239                                                         "description": "The fully-qualified class name of the handler. This should be omitted if a factory is specified."
1240                                                 },
1241                                                 "args": {
1242                                                         "type": "array",
1243                                                         "description": "The arguments passed to the constructor or factory"
1244                                                 },
1245                                                 "services": {
1246                                                         "type": "array",
1247                                                         "description": "If supplied and non-empty, the named services are requested from the service container and prepended before 'args'."
1248                                                 }
1249                                         }
1250                                 }
1251                         }
1252                 },
1253                 "load_composer_autoloader": {
1254                         "type": "boolean",
1255                         "description": "Load the composer autoloader for this extension, if one is present"
1256                 }
1257         }