Proyectos de Subversion Moodle

Rev

Rev 1 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1 Rev 1441
Línea 16... Línea 16...
16
        '3mf' => 'model/3mf',
16
        '3mf' => 'model/3mf',
17
        '7z' => 'application/x-7z-compressed',
17
        '7z' => 'application/x-7z-compressed',
18
        '7zip' => 'application/x-7z-compressed',
18
        '7zip' => 'application/x-7z-compressed',
19
        '123' => 'application/vnd.lotus-1-2-3',
19
        '123' => 'application/vnd.lotus-1-2-3',
20
        'aab' => 'application/x-authorware-bin',
20
        'aab' => 'application/x-authorware-bin',
21
        'aac' => 'audio/x-acc',
21
        'aac' => 'audio/aac',
22
        'aam' => 'application/x-authorware-map',
22
        'aam' => 'application/x-authorware-map',
23
        'aas' => 'application/x-authorware-seg',
23
        'aas' => 'application/x-authorware-seg',
24
        'abw' => 'application/x-abiword',
24
        'abw' => 'application/x-abiword',
25
        'ac' => 'application/vnd.nokia.n-gage.ac+xml',
25
        'ac' => 'application/vnd.nokia.n-gage.ac+xml',
26
        'ac3' => 'audio/ac3',
26
        'ac3' => 'audio/ac3',
27
        'acc' => 'application/vnd.americandynamics.acc',
27
        'acc' => 'application/vnd.americandynamics.acc',
28
        'ace' => 'application/x-ace-compressed',
28
        'ace' => 'application/x-ace-compressed',
29
        'acu' => 'application/vnd.acucobol',
29
        'acu' => 'application/vnd.acucobol',
30
        'acutc' => 'application/vnd.acucorp',
30
        'acutc' => 'application/vnd.acucorp',
31
        'adp' => 'audio/adpcm',
31
        'adp' => 'audio/adpcm',
-
 
32
        'adts' => 'audio/aac',
32
        'aep' => 'application/vnd.audiograph',
33
        'aep' => 'application/vnd.audiograph',
33
        'afm' => 'application/x-font-type1',
34
        'afm' => 'application/x-font-type1',
34
        'afp' => 'application/vnd.ibm.modcap',
35
        'afp' => 'application/vnd.ibm.modcap',
35
        'age' => 'application/vnd.age',
36
        'age' => 'application/vnd.age',
36
        'ahead' => 'application/vnd.ahead.space',
37
        'ahead' => 'application/vnd.ahead.space',
Línea 39... Línea 40...
39
        'aifc' => 'audio/x-aiff',
40
        'aifc' => 'audio/x-aiff',
40
        'aiff' => 'audio/x-aiff',
41
        'aiff' => 'audio/x-aiff',
41
        'air' => 'application/vnd.adobe.air-application-installer-package+zip',
42
        'air' => 'application/vnd.adobe.air-application-installer-package+zip',
42
        'ait' => 'application/vnd.dvb.ait',
43
        'ait' => 'application/vnd.dvb.ait',
43
        'ami' => 'application/vnd.amiga.ami',
44
        'ami' => 'application/vnd.amiga.ami',
-
 
45
        'aml' => 'application/automationml-aml+xml',
-
 
46
        'amlx' => 'application/automationml-amlx+zip',
44
        'amr' => 'audio/amr',
47
        'amr' => 'audio/amr',
45
        'apk' => 'application/vnd.android.package-archive',
48
        'apk' => 'application/vnd.android.package-archive',
46
        'apng' => 'image/apng',
49
        'apng' => 'image/apng',
47
        'appcache' => 'text/cache-manifest',
50
        'appcache' => 'text/cache-manifest',
-
 
51
        'appinstaller' => 'application/appinstaller',
48
        'application' => 'application/x-ms-application',
52
        'application' => 'application/x-ms-application',
-
 
53
        'appx' => 'application/appx',
-
 
54
        'appxbundle' => 'application/appxbundle',
49
        'apr' => 'application/vnd.lotus-approach',
55
        'apr' => 'application/vnd.lotus-approach',
50
        'arc' => 'application/x-freearc',
56
        'arc' => 'application/x-freearc',
51
        'arj' => 'application/x-arj',
57
        'arj' => 'application/x-arj',
52
        'asc' => 'application/pgp-signature',
58
        'asc' => 'application/pgp-signature',
53
        'asf' => 'video/x-ms-asf',
59
        'asf' => 'video/x-ms-asf',
Línea 88... Línea 94...
88
        'box' => 'application/vnd.previewsystems.box',
94
        'box' => 'application/vnd.previewsystems.box',
89
        'boz' => 'application/x-bzip2',
95
        'boz' => 'application/x-bzip2',
90
        'bpk' => 'application/octet-stream',
96
        'bpk' => 'application/octet-stream',
91
        'bpmn' => 'application/octet-stream',
97
        'bpmn' => 'application/octet-stream',
92
        'bsp' => 'model/vnd.valve.source.compiled-map',
98
        'bsp' => 'model/vnd.valve.source.compiled-map',
-
 
99
        'btf' => 'image/prs.btif',
93
        'btif' => 'image/prs.btif',
100
        'btif' => 'image/prs.btif',
94
        'buffer' => 'application/octet-stream',
101
        'buffer' => 'application/octet-stream',
95
        'bz' => 'application/x-bzip',
102
        'bz' => 'application/x-bzip',
96
        'bz2' => 'application/x-bzip2',
103
        'bz2' => 'application/x-bzip2',
97
        'c' => 'text/x-c',
104
        'c' => 'text/x-c',
Línea 139... Línea 146...
139
        'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
146
        'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
140
        'cil' => 'application/vnd.ms-artgalry',
147
        'cil' => 'application/vnd.ms-artgalry',
141
        'cjs' => 'application/node',
148
        'cjs' => 'application/node',
142
        'cla' => 'application/vnd.claymore',
149
        'cla' => 'application/vnd.claymore',
143
        'class' => 'application/octet-stream',
150
        'class' => 'application/octet-stream',
-
 
151
        'cld' => 'model/vnd.cld',
144
        'clkk' => 'application/vnd.crick.clicker.keyboard',
152
        'clkk' => 'application/vnd.crick.clicker.keyboard',
145
        'clkp' => 'application/vnd.crick.clicker.palette',
153
        'clkp' => 'application/vnd.crick.clicker.palette',
146
        'clkt' => 'application/vnd.crick.clicker.template',
154
        'clkt' => 'application/vnd.crick.clicker.template',
147
        'clkw' => 'application/vnd.crick.clicker.wordbank',
155
        'clkw' => 'application/vnd.crick.clicker.wordbank',
148
        'clkx' => 'application/vnd.crick.clicker',
156
        'clkx' => 'application/vnd.crick.clicker',
Línea 173... Línea 181...
173
        'css' => 'text/css',
181
        'css' => 'text/css',
174
        'cst' => 'application/x-director',
182
        'cst' => 'application/x-director',
175
        'csv' => 'text/csv',
183
        'csv' => 'text/csv',
176
        'cu' => 'application/cu-seeme',
184
        'cu' => 'application/cu-seeme',
177
        'curl' => 'text/vnd.curl',
185
        'curl' => 'text/vnd.curl',
-
 
186
        'cwl' => 'application/cwl',
178
        'cww' => 'application/prs.cww',
187
        'cww' => 'application/prs.cww',
179
        'cxt' => 'application/x-director',
188
        'cxt' => 'application/x-director',
180
        'cxx' => 'text/x-c',
189
        'cxx' => 'text/x-c',
181
        'dae' => 'model/vnd.collada+xml',
190
        'dae' => 'model/vnd.collada+xml',
182
        'daf' => 'application/vnd.mobius.daf',
191
        'daf' => 'application/vnd.mobius.daf',
Línea 195... Línea 204...
195
        'def' => 'text/plain',
204
        'def' => 'text/plain',
196
        'deploy' => 'application/octet-stream',
205
        'deploy' => 'application/octet-stream',
197
        'der' => 'application/x-x509-ca-cert',
206
        'der' => 'application/x-x509-ca-cert',
198
        'dfac' => 'application/vnd.dreamfactory',
207
        'dfac' => 'application/vnd.dreamfactory',
199
        'dgc' => 'application/x-dgc-compressed',
208
        'dgc' => 'application/x-dgc-compressed',
-
 
209
        'dib' => 'image/bmp',
200
        'dic' => 'text/x-c',
210
        'dic' => 'text/x-c',
201
        'dir' => 'application/x-director',
211
        'dir' => 'application/x-director',
202
        'dis' => 'application/vnd.mobius.dis',
212
        'dis' => 'application/vnd.mobius.dis',
203
        'disposition-notification' => 'message/disposition-notification',
213
        'disposition-notification' => 'message/disposition-notification',
204
        'dist' => 'application/octet-stream',
214
        'dist' => 'application/octet-stream',
Línea 217... Línea 227...
217
        'dot' => 'application/msword',
227
        'dot' => 'application/msword',
218
        'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
228
        'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
219
        'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
229
        'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
220
        'dp' => 'application/vnd.osgi.dp',
230
        'dp' => 'application/vnd.osgi.dp',
221
        'dpg' => 'application/vnd.dpgraph',
231
        'dpg' => 'application/vnd.dpgraph',
-
 
232
        'dpx' => 'image/dpx',
222
        'dra' => 'audio/vnd.dra',
233
        'dra' => 'audio/vnd.dra',
223
        'drle' => 'image/dicom-rle',
234
        'drle' => 'image/dicom-rle',
224
        'dsc' => 'text/prs.lines.tag',
235
        'dsc' => 'text/prs.lines.tag',
225
        'dssc' => 'application/dssc+der',
236
        'dssc' => 'application/dssc+der',
226
        'dtb' => 'application/x-dtbook+xml',
237
        'dtb' => 'application/x-dtbook+xml',
Línea 253... Línea 264...
253
        'emz' => 'application/x-msmetafile',
264
        'emz' => 'application/x-msmetafile',
254
        'eol' => 'audio/vnd.digital-winds',
265
        'eol' => 'audio/vnd.digital-winds',
255
        'eot' => 'application/vnd.ms-fontobject',
266
        'eot' => 'application/vnd.ms-fontobject',
256
        'eps' => 'application/postscript',
267
        'eps' => 'application/postscript',
257
        'epub' => 'application/epub+zip',
268
        'epub' => 'application/epub+zip',
258
        'es' => 'application/ecmascript',
-
 
259
        'es3' => 'application/vnd.eszigno3+xml',
269
        'es3' => 'application/vnd.eszigno3+xml',
260
        'esa' => 'application/vnd.osgi.subsystem',
270
        'esa' => 'application/vnd.osgi.subsystem',
261
        'esf' => 'application/vnd.epson.esf',
271
        'esf' => 'application/vnd.epson.esf',
262
        'et3' => 'application/vnd.eszigno3+xml',
272
        'et3' => 'application/vnd.eszigno3+xml',
263
        'etx' => 'text/x-setext',
273
        'etx' => 'text/x-setext',
Línea 446... Línea 456...
446
        'json' => 'application/json',
456
        'json' => 'application/json',
447
        'json5' => 'application/json5',
457
        'json5' => 'application/json5',
448
        'jsonld' => 'application/ld+json',
458
        'jsonld' => 'application/ld+json',
449
        'jsonml' => 'application/jsonml+json',
459
        'jsonml' => 'application/jsonml+json',
450
        'jsx' => 'text/jsx',
460
        'jsx' => 'text/jsx',
-
 
461
        'jt' => 'model/jt',
451
        'jxr' => 'image/jxr',
462
        'jxr' => 'image/jxr',
452
        'jxra' => 'image/jxra',
463
        'jxra' => 'image/jxra',
453
        'jxrs' => 'image/jxrs',
464
        'jxrs' => 'image/jxrs',
454
        'jxs' => 'image/jxs',
465
        'jxs' => 'image/jxs',
455
        'jxsc' => 'image/jxsc',
466
        'jxsc' => 'image/jxsc',
Línea 550... Línea 561...
550
        'mie' => 'application/x-mie',
561
        'mie' => 'application/x-mie',
551
        'mif' => 'application/vnd.mif',
562
        'mif' => 'application/vnd.mif',
552
        'mime' => 'message/rfc822',
563
        'mime' => 'message/rfc822',
553
        'mj2' => 'video/mj2',
564
        'mj2' => 'video/mj2',
554
        'mjp2' => 'video/mj2',
565
        'mjp2' => 'video/mj2',
555
        'mjs' => 'application/javascript',
566
        'mjs' => 'text/javascript',
556
        'mk3d' => 'video/x-matroska',
567
        'mk3d' => 'video/x-matroska',
557
        'mka' => 'audio/x-matroska',
568
        'mka' => 'audio/x-matroska',
558
        'mkd' => 'text/x-markdown',
569
        'mkd' => 'text/x-markdown',
559
        'mks' => 'video/x-matroska',
570
        'mks' => 'video/x-matroska',
560
        'mkv' => 'video/x-matroska',
571
        'mkv' => 'video/x-matroska',
Línea 600... Línea 611...
600
        'mseq' => 'application/vnd.mseq',
611
        'mseq' => 'application/vnd.mseq',
601
        'msf' => 'application/vnd.epson.msf',
612
        'msf' => 'application/vnd.epson.msf',
602
        'msg' => 'application/vnd.ms-outlook',
613
        'msg' => 'application/vnd.ms-outlook',
603
        'msh' => 'model/mesh',
614
        'msh' => 'model/mesh',
604
        'msi' => 'application/x-msdownload',
615
        'msi' => 'application/x-msdownload',
-
 
616
        'msix' => 'application/msix',
-
 
617
        'msixbundle' => 'application/msixbundle',
605
        'msl' => 'application/vnd.mobius.msl',
618
        'msl' => 'application/vnd.mobius.msl',
606
        'msm' => 'application/octet-stream',
619
        'msm' => 'application/octet-stream',
607
        'msp' => 'application/octet-stream',
620
        'msp' => 'application/octet-stream',
608
        'msty' => 'application/vnd.muvee.style',
621
        'msty' => 'application/vnd.muvee.style',
609
        'mtl' => 'model/mtl',
622
        'mtl' => 'model/mtl',
Línea 773... Línea 786...
773
        'ptid' => 'application/vnd.pvi.ptid1',
786
        'ptid' => 'application/vnd.pvi.ptid1',
774
        'pub' => 'application/x-mspublisher',
787
        'pub' => 'application/x-mspublisher',
775
        'pvb' => 'application/vnd.3gpp.pic-bw-var',
788
        'pvb' => 'application/vnd.3gpp.pic-bw-var',
776
        'pwn' => 'application/vnd.3m.post-it-notes',
789
        'pwn' => 'application/vnd.3m.post-it-notes',
777
        'pya' => 'audio/vnd.ms-playready.media.pya',
790
        'pya' => 'audio/vnd.ms-playready.media.pya',
-
 
791
        'pyo' => 'model/vnd.pytha.pyox',
-
 
792
        'pyox' => 'model/vnd.pytha.pyox',
778
        'pyv' => 'video/vnd.ms-playready.media.pyv',
793
        'pyv' => 'video/vnd.ms-playready.media.pyv',
779
        'qam' => 'application/vnd.epson.quickanime',
794
        'qam' => 'application/vnd.epson.quickanime',
780
        'qbo' => 'application/vnd.intu.qbo',
795
        'qbo' => 'application/vnd.intu.qbo',
781
        'qfx' => 'application/vnd.intu.qfx',
796
        'qfx' => 'application/vnd.intu.qfx',
782
        'qps' => 'application/vnd.publishare-delta-tree',
797
        'qps' => 'application/vnd.publishare-delta-tree',
Línea 921... Línea 936...
921
        'ssml' => 'application/ssml+xml',
936
        'ssml' => 'application/ssml+xml',
922
        'sst' => 'application/octet-stream',
937
        'sst' => 'application/octet-stream',
923
        'st' => 'application/vnd.sailingtracker.track',
938
        'st' => 'application/vnd.sailingtracker.track',
924
        'stc' => 'application/vnd.sun.xml.calc.template',
939
        'stc' => 'application/vnd.sun.xml.calc.template',
925
        'std' => 'application/vnd.sun.xml.draw.template',
940
        'std' => 'application/vnd.sun.xml.draw.template',
-
 
941
        'step' => 'application/STEP',
926
        'stf' => 'application/vnd.wt.stf',
942
        'stf' => 'application/vnd.wt.stf',
927
        'sti' => 'application/vnd.sun.xml.impress.template',
943
        'sti' => 'application/vnd.sun.xml.impress.template',
928
        'stk' => 'application/hyperstudio',
944
        'stk' => 'application/hyperstudio',
929
        'stl' => 'model/stl',
945
        'stl' => 'model/stl',
-
 
946
        'stp' => 'application/STEP',
930
        'stpx' => 'model/step+xml',
947
        'stpx' => 'model/step+xml',
931
        'stpxz' => 'model/step-xml+zip',
948
        'stpxz' => 'model/step-xml+zip',
932
        'stpz' => 'model/step+zip',
949
        'stpz' => 'model/step+zip',
933
        'str' => 'application/vnd.pg.format',
950
        'str' => 'application/vnd.pg.format',
934
        'stw' => 'application/vnd.sun.xml.writer.template',
951
        'stw' => 'application/vnd.sun.xml.writer.template',
Línea 1011... Línea 1028...
1011
        'ufd' => 'application/vnd.ufdl',
1028
        'ufd' => 'application/vnd.ufdl',
1012
        'ufdl' => 'application/vnd.ufdl',
1029
        'ufdl' => 'application/vnd.ufdl',
1013
        'ulx' => 'application/x-glulx',
1030
        'ulx' => 'application/x-glulx',
1014
        'umj' => 'application/vnd.umajin',
1031
        'umj' => 'application/vnd.umajin',
1015
        'unityweb' => 'application/vnd.unity',
1032
        'unityweb' => 'application/vnd.unity',
-
 
1033
        'uo' => 'application/vnd.uoml+xml',
1016
        'uoml' => 'application/vnd.uoml+xml',
1034
        'uoml' => 'application/vnd.uoml+xml',
1017
        'uri' => 'text/uri-list',
1035
        'uri' => 'text/uri-list',
1018
        'uris' => 'text/uri-list',
1036
        'uris' => 'text/uri-list',
1019
        'urls' => 'text/uri-list',
1037
        'urls' => 'text/uri-list',
-
 
1038
        'usda' => 'model/vnd.usda',
1020
        'usdz' => 'model/vnd.usdz+zip',
1039
        'usdz' => 'model/vnd.usdz+zip',
1021
        'ustar' => 'application/x-ustar',
1040
        'ustar' => 'application/x-ustar',
1022
        'utz' => 'application/vnd.uiq.theme',
1041
        'utz' => 'application/vnd.uiq.theme',
1023
        'uu' => 'text/x-uuencode',
1042
        'uu' => 'text/x-uuencode',
1024
        'uva' => 'audio/vnd.dece.audio',
1043
        'uva' => 'audio/vnd.dece.audio',
Línea 1094... Línea 1113...
1094
        'webapp' => 'application/x-web-app-manifest+json',
1113
        'webapp' => 'application/x-web-app-manifest+json',
1095
        'webm' => 'video/webm',
1114
        'webm' => 'video/webm',
1096
        'webmanifest' => 'application/manifest+json',
1115
        'webmanifest' => 'application/manifest+json',
1097
        'webp' => 'image/webp',
1116
        'webp' => 'image/webp',
1098
        'wg' => 'application/vnd.pmi.widget',
1117
        'wg' => 'application/vnd.pmi.widget',
-
 
1118
        'wgsl' => 'text/wgsl',
1099
        'wgt' => 'application/widget',
1119
        'wgt' => 'application/widget',
1100
        'wif' => 'application/watcherinfo+xml',
1120
        'wif' => 'application/watcherinfo+xml',
1101
        'wks' => 'application/vnd.ms-works',
1121
        'wks' => 'application/vnd.ms-works',
1102
        'wm' => 'video/x-ms-wm',
1122
        'wm' => 'video/x-ms-wm',
1103
        'wma' => 'audio/x-ms-wma',
1123
        'wma' => 'audio/x-ms-wma',
Línea 1148... Línea 1168...
1148
        'xdssc' => 'application/dssc+xml',
1168
        'xdssc' => 'application/dssc+xml',
1149
        'xdw' => 'application/vnd.fujixerox.docuworks',
1169
        'xdw' => 'application/vnd.fujixerox.docuworks',
1150
        'xel' => 'application/xcap-el+xml',
1170
        'xel' => 'application/xcap-el+xml',
1151
        'xenc' => 'application/xenc+xml',
1171
        'xenc' => 'application/xenc+xml',
1152
        'xer' => 'application/patch-ops-error+xml',
1172
        'xer' => 'application/patch-ops-error+xml',
1153
        'xfdf' => 'application/vnd.adobe.xfdf',
1173
        'xfdf' => 'application/xfdf',
1154
        'xfdl' => 'application/vnd.xfdl',
1174
        'xfdl' => 'application/vnd.xfdl',
1155
        'xht' => 'application/xhtml+xml',
1175
        'xht' => 'application/xhtml+xml',
-
 
1176
        'xhtm' => 'application/vnd.pwg-xhtml-print+xml',
1156
        'xhtml' => 'application/xhtml+xml',
1177
        'xhtml' => 'application/xhtml+xml',
1157
        'xhvml' => 'application/xv+xml',
1178
        'xhvml' => 'application/xv+xml',
1158
        'xif' => 'image/vnd.xiff',
1179
        'xif' => 'image/vnd.xiff',
1159
        'xl' => 'application/excel',
1180
        'xl' => 'application/excel',
1160
        'xla' => 'application/vnd.ms-excel',
1181
        'xla' => 'application/vnd.ms-excel',
Línea 1181... Línea 1202...
1181
        'xpr' => 'application/vnd.is-xpr',
1202
        'xpr' => 'application/vnd.is-xpr',
1182
        'xps' => 'application/vnd.ms-xpsdocument',
1203
        'xps' => 'application/vnd.ms-xpsdocument',
1183
        'xpw' => 'application/vnd.intercon.formnet',
1204
        'xpw' => 'application/vnd.intercon.formnet',
1184
        'xpx' => 'application/vnd.intercon.formnet',
1205
        'xpx' => 'application/vnd.intercon.formnet',
1185
        'xsd' => 'application/xml',
1206
        'xsd' => 'application/xml',
-
 
1207
        'xsf' => 'application/prs.xsf+xml',
1186
        'xsl' => 'application/xml',
1208
        'xsl' => 'application/xml',
1187
        'xslt' => 'application/xslt+xml',
1209
        'xslt' => 'application/xslt+xml',
1188
        'xsm' => 'application/vnd.syncml+xml',
1210
        'xsm' => 'application/vnd.syncml+xml',
1189
        'xspf' => 'application/xspf+xml',
1211
        'xspf' => 'application/xspf+xml',
1190
        'xul' => 'application/vnd.mozilla.xul+xml',
1212
        'xul' => 'application/vnd.mozilla.xul+xml',
Línea 1216... Línea 1238...
1216
    ];
1238
    ];
Línea 1217... Línea 1239...
1217
 
1239
 
1218
    /**
1240
    /**
1219
     * Determines the mimetype of a file by looking at its extension.
1241
     * Determines the mimetype of a file by looking at its extension.
1220
     *
1242
     *
1221
     * @link https://raw.githubusercontent.com/jshttp/mime-db/master/db.json
1243
     * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json
1222
     */
1244
     */
1223
    public static function fromFilename(string $filename): ?string
1245
    public static function fromFilename(string $filename): ?string
1224
    {
1246
    {
1225
        return self::fromExtension(pathinfo($filename, PATHINFO_EXTENSION));
1247
        return self::fromExtension(pathinfo($filename, PATHINFO_EXTENSION));
Línea 1226... Línea 1248...
1226
    }
1248
    }
1227
 
1249
 
1228
    /**
1250
    /**
1229
     * Maps a file extensions to a mimetype.
1251
     * Maps a file extensions to a mimetype.
1230
     *
1252
     *
1231
     * @link https://raw.githubusercontent.com/jshttp/mime-db/master/db.json
1253
     * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json
1232
     */
1254
     */
1233
    public static function fromExtension(string $extension): ?string
1255
    public static function fromExtension(string $extension): ?string
1234
    {
1256
    {