@eui/components 14.0.28 → 14.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/js/search/search_index.js +2 -2
- package/docs/miscellaneous/typealiases.html +21 -0
- package/docs/miscellaneous/variables.html +242 -39
- package/esm2020/eui-file-upload/utils/eui-file-upload.validators.mjs +33 -10
- package/esm2020/eui-file-upload/utils/mime-types.mjs +317 -0
- package/eui-file-upload/utils/eui-file-upload.validators.d.ts +6 -5
- package/eui-file-upload/utils/eui-file-upload.validators.d.ts.map +1 -1
- package/eui-file-upload/utils/mime-types.d.ts +3 -0
- package/eui-file-upload/utils/mime-types.d.ts.map +1 -0
- package/fesm2015/eui-components-eui-file-upload.mjs +347 -10
- package/fesm2015/eui-components-eui-file-upload.mjs.map +1 -1
- package/fesm2020/eui-components-eui-file-upload.mjs +347 -10
- package/fesm2020/eui-components-eui-file-upload.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -169,6 +169,9 @@
|
|
|
169
169
|
<li>
|
|
170
170
|
<a href="#FromEntriesWithReadOnly" title="packages/eui/packages/components/layout/eui-breadcrumb/item/breadcrumb-item.model.ts" ><b>FromEntriesWithReadOnly</b> (packages/.../breadcrumb-item.model.ts)</a>
|
|
171
171
|
</li>
|
|
172
|
+
<li>
|
|
173
|
+
<a href="#MimeType" title="packages/eui/packages/components/eui-file-upload/utils/mime-types.ts" ><b>MimeType</b> (packages/.../mime-types.ts)</a>
|
|
174
|
+
</li>
|
|
172
175
|
<li>
|
|
173
176
|
<a href="#QuillFormat" title="packages/eui/packages/components/externals/quill/quill-editor.interfaces.ts" ><b>QuillFormat</b> (packages/.../quill-editor.interfaces.ts)</a>
|
|
174
177
|
</li>
|
|
@@ -893,6 +896,24 @@ See <a href="https://apexcharts.com/docs/options/series/">https://apexcharts.com
|
|
|
893
896
|
</tr>
|
|
894
897
|
</tbody>
|
|
895
898
|
</table>
|
|
899
|
+
</section> <h3>packages/eui/packages/components/eui-file-upload/utils/mime-types.ts</h3>
|
|
900
|
+
<section>
|
|
901
|
+
<table class="table table-sm table-bordered">
|
|
902
|
+
<tbody>
|
|
903
|
+
<tr>
|
|
904
|
+
<td class="col-md-4">
|
|
905
|
+
<a name="MimeType"></a>
|
|
906
|
+
<span class="name "><b>MimeType</b><a href="#MimeType"><span class="icon ion-ios-link"></span></a></span>
|
|
907
|
+
</td>
|
|
908
|
+
</tr>
|
|
909
|
+
<tr>
|
|
910
|
+
<td class="col-md-4">
|
|
911
|
+
<code> <code>"image/jpeg" | "image/png" | "image/gif" | "image/webp" | "image/flif" | "image/x-xcf" | "image/x-canon-cr2" | "image/x-canon-cr3" | "image/tiff" | "image/bmp" | "image/icns" | "image/vnd.ms-photo" | "image/vnd.adobe.photoshop" | "application/x-indesign" | "application/epub+zip" | "application/x-xpinstall" | "application/vnd.oasis.opendocument.text" | "application/vnd.oasis.opendocument.spreadsheet" | "application/vnd.oasis.opendocument.presentation" | "application/vnd.openxmlformats-officedocument.wordprocessingml.document" | "application/vnd.openxmlformats-officedocument.presentationml.presentation" | "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | "application/zip" | "application/json" | "application/x-tar" | "application/x-rar-compressed" | "application/gzip" | "application/x-bzip2" | "application/x-7z-compressed" | "application/x-apple-diskimage" | "video/mp4" | "audio/midi" | "video/x-matroska" | "video/webm" | "video/quicktime" | "video/vnd.avi" | "audio/vnd.wave" | "audio/qcelp" | "audio/x-ms-asf" | "video/x-ms-asf" | "application/vnd.ms-asf" | "video/mpeg" | "video/3gpp" | "audio/mpeg" | "audio/mp4" | "audio/opus" | "video/ogg" | "audio/ogg" | "application/ogg" | "audio/x-flac" | "audio/ape" | "audio/wavpack" | "audio/amr" | "application/pdf" | "application/x-elf" | "application/x-msdownload" | "application/x-shockwave-flash" | "application/rtf" | "application/wasm" | "font/woff" | "font/woff2" | "application/vnd.ms-fontobject" | "font/ttf" | "font/otf" | "image/x-icon" | "video/x-flv" | "application/postscript" | "application/eps" | "application/x-xz" | "application/x-sqlite3" | "application/x-nintendo-nes-rom" | "application/x-google-chrome-extension" | "application/vnd.ms-cab-compressed" | "application/x-deb" | "application/x-unix-archive" | "application/x-rpm" | "application/x-compress" | "application/x-lzip" | "application/x-cfb" | "application/x-mie" | "application/x-apache-arrow" | "application/mxf" | "video/mp2t" | "application/x-blender" | "image/bpg" | "image/j2c" | "image/jp2" | "image/jpx" | "image/jpm" | "image/mj2" | "audio/aiff" | "application/xml" | "application/x-mobipocket-ebook" | "image/heif" | "image/heif-sequence" | "image/heic" | "image/heic-sequence" | "image/ktx" | "application/dicom" | "audio/x-musepack" | "text/calendar" | "text/vcard" | "model/gltf-binary" | "application/vnd.tcpdump.pcap" | "audio/x-voc" | "audio/vnd.dolby.dd-raw" | "audio/x-m4a" | "image/apng" | "image/x-olympus-orf" | "image/x-sony-arw" | "image/x-adobe-dng" | "image/x-nikon-nef" | "image/x-panasonic-rw2" | "image/x-fujifilm-raf" | "video/x-m4v" | "video/3gpp2" | "application/x-esri-shape" | "audio/aac" | "audio/x-it" | "audio/x-s3m" | "audio/x-xm" | "video/MP1S" | "video/MP2P" | "application/vnd.sketchup.skp" | "image/avif" | "application/x-lzh-compressed" | "application/pgp-encrypted" | "application/x-asar" | "model/stl" | "application/vnd.ms-htmlhelp" | "model/3mf" | "image/jxl" | "application/zstd" | "image/jls" | "application/vnd.ms-outlook" | "image/vnd.dwg" | "application/x-parquet" | "application/java-vm" | "application/x-arj" | "application/x-cpio" | "application/x-ace-compressed" | "application/avro" | "application/vnd.iccprofile"</code>
|
|
912
|
+
</code>
|
|
913
|
+
</td>
|
|
914
|
+
</tr>
|
|
915
|
+
</tbody>
|
|
916
|
+
</table>
|
|
896
917
|
</section> <h3>packages/eui/packages/components/externals/quill/quill-editor.interfaces.ts</h3>
|
|
897
918
|
<section>
|
|
898
919
|
<table class="table table-sm table-bordered">
|
|
@@ -83,10 +83,10 @@
|
|
|
83
83
|
<a href="#COMPONENTS" title="packages/eui/packages/components/layout/eui-sidebar-menu/eui-sidebar-menu.module.ts" ><b>COMPONENTS</b> (packages/.../eui-sidebar-menu.module.ts)</a>
|
|
84
84
|
</li>
|
|
85
85
|
<li>
|
|
86
|
-
<a href="#COMPONENTS" title="packages/eui/packages/components/layout/eui-
|
|
86
|
+
<a href="#COMPONENTS" title="packages/eui/packages/components/layout/eui-toolbar/toolbar.module.ts" ><b>COMPONENTS</b> (packages/.../toolbar.module.ts)</a>
|
|
87
87
|
</li>
|
|
88
88
|
<li>
|
|
89
|
-
<a href="#COMPONENTS" title="packages/eui/packages/components/layout/eui-
|
|
89
|
+
<a href="#COMPONENTS" title="packages/eui/packages/components/layout/eui-user-profile/user-profile.module.ts" ><b>COMPONENTS</b> (packages/.../user-profile.module.ts)</a>
|
|
90
90
|
</li>
|
|
91
91
|
<li>
|
|
92
92
|
<a href="#COMPONENTS" title="packages/eui/packages/components/layout/eui-app/eui-app-sidebar/sidebar.module.ts" ><b>COMPONENTS</b> (packages/.../sidebar.module.ts)</a>
|
|
@@ -157,6 +157,9 @@
|
|
|
157
157
|
<li>
|
|
158
158
|
<a href="#getFormat" title="packages/eui/packages/components/legacy/ux-editor/ux-editor-view.component.ts" ><b>getFormat</b> (packages/.../ux-editor-view.component.ts)</a>
|
|
159
159
|
</li>
|
|
160
|
+
<li>
|
|
161
|
+
<a href="#getMimeType" title="packages/eui/packages/components/eui-file-upload/utils/mime-types.ts" ><b>getMimeType</b> (packages/.../mime-types.ts)</a>
|
|
162
|
+
</li>
|
|
160
163
|
<li>
|
|
161
164
|
<a href="#getViewElement" title="packages/eui/packages/components/externals/helpers/get-view-element.helper.ts" ><b>getViewElement</b> (packages/.../get-view-element.helper.ts)</a>
|
|
162
165
|
</li>
|
|
@@ -253,6 +256,9 @@
|
|
|
253
256
|
<li>
|
|
254
257
|
<a href="#TRANSLATED_STRING" title="packages/eui/packages/components/testing/mocks/translate.module.mock.ts" ><b>TRANSLATED_STRING</b> (packages/.../translate.module.mock.ts)</a>
|
|
255
258
|
</li>
|
|
259
|
+
<li>
|
|
260
|
+
<a href="#uint8ArrayToHexString" title="packages/eui/packages/components/eui-file-upload/utils/mime-types.ts" ><b>uint8ArrayToHexString</b> (packages/.../mime-types.ts)</a>
|
|
261
|
+
</li>
|
|
256
262
|
<li>
|
|
257
263
|
<a href="#urlValidator" title="packages/eui/packages/components/externals/eui-editor/image-url-dialog/image-url-dialog.component.ts" ><b>urlValidator</b> (packages/.../image-url-dialog.component.ts)</a>
|
|
258
264
|
</li>
|
|
@@ -280,6 +286,9 @@
|
|
|
280
286
|
<li>
|
|
281
287
|
<a href="#UX_SWITCH_VALUE_ACCESSOR" title="packages/eui/packages/components/legacy/ux-switch/ux-switch.component.ts" ><b>UX_SWITCH_VALUE_ACCESSOR</b> (packages/.../ux-switch.component.ts)</a>
|
|
282
288
|
</li>
|
|
289
|
+
<li>
|
|
290
|
+
<a href="#validateFileMimeType" title="packages/eui/packages/components/eui-file-upload/utils/eui-file-upload.validators.ts" ><b>validateFileMimeType</b> (packages/.../eui-file-upload.validators.ts)</a>
|
|
291
|
+
</li>
|
|
283
292
|
<li>
|
|
284
293
|
<a href="#YEAR_FORMAT" title="packages/eui/packages/components/eui-datepicker/eui-datepicker.component.ts" ><b>YEAR_FORMAT</b> (packages/.../eui-datepicker.component.ts)</a>
|
|
285
294
|
</li>
|
|
@@ -803,7 +812,7 @@
|
|
|
803
812
|
</tbody>
|
|
804
813
|
</table>
|
|
805
814
|
</section>
|
|
806
|
-
<h3>packages/eui/packages/components/layout/eui-
|
|
815
|
+
<h3>packages/eui/packages/components/layout/eui-toolbar/toolbar.module.ts</h3>
|
|
807
816
|
<section>
|
|
808
817
|
<h3></h3> <table class="table table-sm table-bordered">
|
|
809
818
|
<tbody>
|
|
@@ -825,9 +834,16 @@
|
|
|
825
834
|
<tr>
|
|
826
835
|
<td class="col-md-4">
|
|
827
836
|
<i>Default value : </i><code>[
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
837
|
+
EuiToolbarComponent,
|
|
838
|
+
EuiToolbarItemComponent,
|
|
839
|
+
EuiToolbarItemsComponent,
|
|
840
|
+
EuiToolbarItemUserProfileComponent,
|
|
841
|
+
EuiToolbarItemSearchComponent,
|
|
842
|
+
EuiToolbarItemNotificationsComponent,
|
|
843
|
+
EuiToolbarLogoComponent,
|
|
844
|
+
EuiToolbarAppComponent,
|
|
845
|
+
EuiToolbarEnvironmentComponent,
|
|
846
|
+
EuiToolbarMenuComponent,
|
|
831
847
|
]</code>
|
|
832
848
|
</td>
|
|
833
849
|
</tr>
|
|
@@ -836,7 +852,7 @@
|
|
|
836
852
|
</tbody>
|
|
837
853
|
</table>
|
|
838
854
|
</section>
|
|
839
|
-
<h3>packages/eui/packages/components/layout/eui-
|
|
855
|
+
<h3>packages/eui/packages/components/layout/eui-user-profile/user-profile.module.ts</h3>
|
|
840
856
|
<section>
|
|
841
857
|
<h3></h3> <table class="table table-sm table-bordered">
|
|
842
858
|
<tbody>
|
|
@@ -858,16 +874,9 @@
|
|
|
858
874
|
<tr>
|
|
859
875
|
<td class="col-md-4">
|
|
860
876
|
<i>Default value : </i><code>[
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
EuiToolbarItemUserProfileComponent,
|
|
865
|
-
EuiToolbarItemSearchComponent,
|
|
866
|
-
EuiToolbarItemNotificationsComponent,
|
|
867
|
-
EuiToolbarLogoComponent,
|
|
868
|
-
EuiToolbarAppComponent,
|
|
869
|
-
EuiToolbarEnvironmentComponent,
|
|
870
|
-
EuiToolbarMenuComponent,
|
|
877
|
+
EuiUserProfileComponent,
|
|
878
|
+
EuiUserProfileMenuComponent,
|
|
879
|
+
EuiUserProfileMenuItemComponent,
|
|
871
880
|
]</code>
|
|
872
881
|
</td>
|
|
873
882
|
</tr>
|
|
@@ -1532,6 +1541,159 @@
|
|
|
1532
1541
|
</tr>
|
|
1533
1542
|
|
|
1534
1543
|
|
|
1544
|
+
</tbody>
|
|
1545
|
+
</table>
|
|
1546
|
+
</section>
|
|
1547
|
+
<h3>packages/eui/packages/components/eui-file-upload/utils/mime-types.ts</h3>
|
|
1548
|
+
<section>
|
|
1549
|
+
<h3></h3> <table class="table table-sm table-bordered">
|
|
1550
|
+
<tbody>
|
|
1551
|
+
<tr>
|
|
1552
|
+
<td class="col-md-4">
|
|
1553
|
+
<a name="getMimeType"></a>
|
|
1554
|
+
<span class="name">
|
|
1555
|
+
<span ><b>getMimeType</b></span>
|
|
1556
|
+
<a href="#getMimeType"><span class="icon ion-ios-link"></span></a>
|
|
1557
|
+
</span>
|
|
1558
|
+
</td>
|
|
1559
|
+
</tr>
|
|
1560
|
+
<tr>
|
|
1561
|
+
<td class="col-md-4">
|
|
1562
|
+
<i>Default value : </i><code>(header: Uint8Array): MimeType => {
|
|
1563
|
+
// convert Uint8Array to hex string
|
|
1564
|
+
const hex = uint8ArrayToHexString(header);
|
|
1565
|
+
|
|
1566
|
+
// map hex string to mime type
|
|
1567
|
+
if (hex.startsWith('89504e47')) {return 'image/png';}
|
|
1568
|
+
if (hex.startsWith('464c4946')) {return 'image/flif';}
|
|
1569
|
+
if (hex.startsWith('67696d7020786366')) {return 'image/x-xcf';}
|
|
1570
|
+
if (hex.startsWith('49492a00')) {return 'image/x-canon-cr2';}
|
|
1571
|
+
if (hex.startsWith('49492a00')) {return 'image/x-canon-cr3';}
|
|
1572
|
+
if (hex.startsWith('49492a00')) {return 'image/tiff';}
|
|
1573
|
+
if (hex.startsWith('424d')) {return 'image/bmp';}
|
|
1574
|
+
if (hex.startsWith('69636e73')) {return 'image/icns';}
|
|
1575
|
+
if (hex.startsWith('49491a0000004845415050')) {return 'image/vnd.ms-photo';}
|
|
1576
|
+
if (hex.startsWith('38425053')) {return 'image/vnd.adobe.photoshop';}
|
|
1577
|
+
if (hex.startsWith('06054b50')) {return 'application/x-indesign';}
|
|
1578
|
+
if (hex.startsWith('504b0304')) {return 'application/epub+zip';}
|
|
1579
|
+
if (hex.startsWith('504b0304')) {return 'application/x-xpinstall';}
|
|
1580
|
+
if (hex.startsWith('504b0304')) {return 'application/vnd.oasis.opendocument.text';}
|
|
1581
|
+
if (hex.startsWith('504b0304')) {return 'application/vnd.oasis.opendocument.spreadsheet';}
|
|
1582
|
+
if (hex.startsWith('504b0304')) {return 'application/vnd.oasis.opendocument.presentation';}
|
|
1583
|
+
if (hex.startsWith('504b0304')) {return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';}
|
|
1584
|
+
if (hex.startsWith('504b0304')) {return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';}
|
|
1585
|
+
if (hex.startsWith('504b0304')) {return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';}
|
|
1586
|
+
if (hex.startsWith('504b0304')) {return 'application/zip';}
|
|
1587
|
+
if (hex.startsWith('7b2274797065223a226a736f6e227d')) {return 'application/json';}
|
|
1588
|
+
if (hex.startsWith('7573746172')) {return 'application/x-tar';}
|
|
1589
|
+
if (hex.startsWith('526172211a0700')) {return 'application/x-rar-compressed';}
|
|
1590
|
+
if (hex.startsWith('1f8b08')) {return 'application/gzip';}
|
|
1591
|
+
if (hex.startsWith('425a68')) {return 'application/x-bzip2';}
|
|
1592
|
+
if (hex.startsWith('377abcaf271c')) {return 'application/x-7z-compressed';}
|
|
1593
|
+
if (hex.startsWith('78da')) {return 'application/x-apple-diskimage';}
|
|
1594
|
+
if (hex.startsWith('00000020667479706d70')) {return 'video/mp4';}
|
|
1595
|
+
if (hex.startsWith('4d546864')) {return 'audio/midi';}
|
|
1596
|
+
if (hex.startsWith('1a45dfa393428288')) {return 'video/x-matroska';}
|
|
1597
|
+
if (hex.startsWith('1a45dfa3')) {return 'video/webm';}
|
|
1598
|
+
if (hex.startsWith('00000014667479707174')) {return 'video/quicktime';}
|
|
1599
|
+
if (hex.startsWith('52494646')) {return 'video/vnd.avi';}
|
|
1600
|
+
if (hex.startsWith('52494646')) {return 'audio/vnd.wave';}
|
|
1601
|
+
if (hex.startsWith('0a010301')) {return 'audio/qcelp';}
|
|
1602
|
+
if (hex.startsWith('3026b2758e66cf11')) {return 'audio/x-ms-asf';}
|
|
1603
|
+
if (hex.startsWith('3026b2758e66cf11')) {return 'video/x-ms-asf';}
|
|
1604
|
+
if (hex.startsWith('3026b2758e66cf11')) {return 'application/vnd.ms-asf';}
|
|
1605
|
+
if (hex.startsWith('000001ba')) {return 'video/mpeg';}
|
|
1606
|
+
if (hex.startsWith('00000020667479703367')) {return 'video/3gpp';}
|
|
1607
|
+
if (hex.startsWith('494433')) {return 'audio/mpeg';}
|
|
1608
|
+
if (hex.startsWith('00000020667479704d344120')) {return 'audio/mp4';}
|
|
1609
|
+
if (hex.startsWith('4f707573')) {return 'audio/opus';}
|
|
1610
|
+
if (hex.startsWith('4f676753')) {return 'video/ogg';}
|
|
1611
|
+
if (hex.startsWith('4f676753')) {return 'audio/ogg';}
|
|
1612
|
+
if (hex.startsWith('4f676753')) {return 'application/ogg';}
|
|
1613
|
+
if (hex.startsWith('664c6143')) {return 'audio/x-flac';}
|
|
1614
|
+
if (hex.startsWith('4d414320')) {return 'audio/ape';}
|
|
1615
|
+
if (hex.startsWith('7776706b')) {return 'audio/wavpack';}
|
|
1616
|
+
if (hex.startsWith('2321414d520a')) {return 'audio/amr';}
|
|
1617
|
+
if (hex.startsWith('255044462d312e')) {return 'application/pdf';}
|
|
1618
|
+
if (hex.startsWith('7f454c46')) {return 'application/x-elf';}
|
|
1619
|
+
if (hex.startsWith('4d5a')) {return 'application/x-msdownload';}
|
|
1620
|
+
if (hex.startsWith('435753')) {return 'application/x-shockwave-flash';}
|
|
1621
|
+
if (hex.startsWith('7b5c72746631')) {return 'application/rtf';}
|
|
1622
|
+
if (hex.startsWith('0061736d')) {return 'application/wasm';}
|
|
1623
|
+
if (hex.startsWith('774f4646')) {return 'font/woff';}
|
|
1624
|
+
if (hex.startsWith('774f4632')) {return 'font/woff2';}
|
|
1625
|
+
if (hex.startsWith('000100000008')) {return 'application/vnd.ms-fontobject';}
|
|
1626
|
+
if (hex.startsWith('0001000000')) {return 'font/ttf';}
|
|
1627
|
+
if (hex.startsWith('4f54544f00')) {return 'font/otf';}
|
|
1628
|
+
if (hex.startsWith('000001000100')) {return 'image/x-icon';}
|
|
1629
|
+
if (hex.startsWith('464c560105')) {return 'video/x-flv';}
|
|
1630
|
+
if (hex.startsWith('25215053')) {return 'application/postscript';}
|
|
1631
|
+
if (hex.startsWith('25215053')) {return 'application/eps';}
|
|
1632
|
+
if (hex.startsWith('fd377a585a00')) {return 'application/x-xz';}
|
|
1633
|
+
if (hex.startsWith('53514c69746520666f726d6174203300')) {return 'application/x-sqlite3';}
|
|
1634
|
+
if (hex.startsWith('4e45531a00000001')) {return 'application/x-nintendo-nes-rom';}
|
|
1635
|
+
if (hex.startsWith('504b0304')) {return 'application/x-google-chrome-extension';}
|
|
1636
|
+
if (hex.startsWith('4d534346')) {return 'application/vnd.ms-cab-compressed';}
|
|
1637
|
+
if (hex.startsWith('213c617263683e0a')) {return 'application/x-deb';}
|
|
1638
|
+
if (hex.startsWith('1f8b08')) {return 'application/x-unix-archive';}
|
|
1639
|
+
if (hex.startsWith('edabeedb')) {return 'application/x-rpm';}
|
|
1640
|
+
if (hex.startsWith('1f9d90')) {return 'application/x-compress';}
|
|
1641
|
+
if (hex.startsWith('4c5a4950')) {return 'application/x-lzip';}
|
|
1642
|
+
if (hex.startsWith('d0cf11e0a1b11ae1')) {return 'application/x-cfb';}
|
|
1643
|
+
if (hex.startsWith('4d49455f')) {return 'application/x-mie';}
|
|
1644
|
+
if (hex.startsWith('4141523146')) {return 'application/x-apache-arrow';}
|
|
1645
|
+
if (hex.startsWith('060e2b3402050101')) {return 'application/mxf';}
|
|
1646
|
+
if (hex.startsWith('47')) {return 'video/mp2t';}
|
|
1647
|
+
if (hex.startsWith('4250e4')) {return 'application/x-blender';}
|
|
1648
|
+
if (hex.startsWith('425047fb')) {return 'image/bpg';}
|
|
1649
|
+
if (hex.startsWith('ff4fff51')) {return 'image/j2c';}
|
|
1650
|
+
if (hex.startsWith('0000000c6a5020200d0a')) {return 'image/jp2';}
|
|
1651
|
+
if (hex.startsWith('6a5020200d0a870a')) {return 'image/jpx';}
|
|
1652
|
+
if (hex.startsWith('6a5020200d0a870a')) {return 'image/jpm';}
|
|
1653
|
+
if (hex.startsWith('0000000c6a5020200d0a')) {return 'image/mj2';}
|
|
1654
|
+
if (hex.startsWith('464f524d')) {return 'audio/aiff';}
|
|
1655
|
+
if (hex.startsWith('3c3f786d6c20')) {return 'application/xml';}
|
|
1656
|
+
if (hex.startsWith('424f4f4b4d4f4249')) {return 'application/x-mobipocket-ebook';}
|
|
1657
|
+
if (hex.startsWith('667479706174')) {return 'image/heif';}
|
|
1658
|
+
if (hex.startsWith('667479706174')) {return 'image/heif-sequence';}
|
|
1659
|
+
if (hex.startsWith('667479706174')) {return 'image/heic';}
|
|
1660
|
+
if (hex.startsWith('667479706174')) {return 'image/heic-sequence';}
|
|
1661
|
+
if (hex.startsWith('4b545820')) {return 'image/ktx';}
|
|
1662
|
+
if (hex.startsWith('4449434d')) {return 'application/dicom';}
|
|
1663
|
+
if (hex.startsWith('4d50434b')) {return 'audio/x-musepack';}
|
|
1664
|
+
if (hex.startsWith('56656e64')) {return 'text/calendar';}
|
|
1665
|
+
if (hex.startsWith('424547494e3a5643415244')) {return 'text/vcard';}
|
|
1666
|
+
if (hex.startsWith('676c5458')) {return 'model/gltf-binary';}
|
|
1667
|
+
if (hex.startsWith('d4c3b2a1')) {return 'application/vnd.tcpdump.pcap';}
|
|
1668
|
+
if (hex.startsWith('464f524d')) {return 'audio/x-voc';}
|
|
1669
|
+
if (hex.startsWith('64646f6c')) {return 'audio/vnd.dolby.dd-raw';}
|
|
1670
|
+
|
|
1671
|
+
return null;
|
|
1672
|
+
}</code>
|
|
1673
|
+
</td>
|
|
1674
|
+
</tr>
|
|
1675
|
+
|
|
1676
|
+
|
|
1677
|
+
</tbody>
|
|
1678
|
+
</table>
|
|
1679
|
+
<table class="table table-sm table-bordered">
|
|
1680
|
+
<tbody>
|
|
1681
|
+
<tr>
|
|
1682
|
+
<td class="col-md-4">
|
|
1683
|
+
<a name="uint8ArrayToHexString"></a>
|
|
1684
|
+
<span class="name">
|
|
1685
|
+
<span ><b>uint8ArrayToHexString</b></span>
|
|
1686
|
+
<a href="#uint8ArrayToHexString"><span class="icon ion-ios-link"></span></a>
|
|
1687
|
+
</span>
|
|
1688
|
+
</td>
|
|
1689
|
+
</tr>
|
|
1690
|
+
<tr>
|
|
1691
|
+
<td class="col-md-4">
|
|
1692
|
+
<i>Default value : </i><code>(uint8Array): string => Array.prototype.map.call(uint8Array, (byte) => ('00' + byte.toString(16)).slice(-2)).join('')</code>
|
|
1693
|
+
</td>
|
|
1694
|
+
</tr>
|
|
1695
|
+
|
|
1696
|
+
|
|
1535
1697
|
</tbody>
|
|
1536
1698
|
</table>
|
|
1537
1699
|
</section>
|
|
@@ -1860,8 +2022,9 @@
|
|
|
1860
2022
|
</tr>
|
|
1861
2023
|
<tr>
|
|
1862
2024
|
<td class="col-md-4">
|
|
1863
|
-
<i>Default value : </i><code>(maxFiles: number): ValidatorFn =>
|
|
1864
|
-
|
|
2025
|
+
<i>Default value : </i><code>(maxFiles: number): ValidatorFn =>
|
|
2026
|
+
(control: AbstractControl): { maxFiles: number } | null =>
|
|
2027
|
+
control.value && control.value.length > maxFiles ? { maxFiles } : null</code>
|
|
1865
2028
|
</td>
|
|
1866
2029
|
</tr>
|
|
1867
2030
|
|
|
@@ -1881,17 +2044,17 @@
|
|
|
1881
2044
|
</tr>
|
|
1882
2045
|
<tr>
|
|
1883
2046
|
<td class="col-md-4">
|
|
1884
|
-
<i>Default value : </i><code>(maxSize: number): ValidatorFn =>
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
2047
|
+
<i>Default value : </i><code>(maxSize: number): ValidatorFn =>
|
|
2048
|
+
(control: AbstractControl): { maxSize: number } | null => {
|
|
2049
|
+
let totalSize = 0;
|
|
2050
|
+
if (control.value) {
|
|
2051
|
+
control.value.forEach((file: File) => {
|
|
2052
|
+
totalSize += file.size;
|
|
2053
|
+
});
|
|
2054
|
+
}
|
|
1892
2055
|
|
|
1893
|
-
|
|
1894
|
-
}</code>
|
|
2056
|
+
return control.value && totalSize > maxSize * 1.024 ? { maxSize } : null;
|
|
2057
|
+
}</code>
|
|
1895
2058
|
</td>
|
|
1896
2059
|
</tr>
|
|
1897
2060
|
|
|
@@ -1911,18 +2074,58 @@
|
|
|
1911
2074
|
</tr>
|
|
1912
2075
|
<tr>
|
|
1913
2076
|
<td class="col-md-4">
|
|
1914
|
-
<i>Default value : </i><code>(mimeTypes:
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
2077
|
+
<i>Default value : </i><code>(mimeTypes: MimeType[]): AsyncValidatorFn =>
|
|
2078
|
+
(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> => {
|
|
2079
|
+
if (control.value) {
|
|
2080
|
+
const fileErrorObservables: Observable<ValidationErrors | null>[] = [];
|
|
2081
|
+
// iterate over files
|
|
2082
|
+
control.value.forEach((file: File) => {
|
|
2083
|
+
// push observable which will check the mime validation type
|
|
2084
|
+
fileErrorObservables.push(validateFileMimeType(file, mimeTypes));
|
|
2085
|
+
});
|
|
2086
|
+
return zip(...fileErrorObservables).pipe(
|
|
2087
|
+
map((fileErrors) => {
|
|
2088
|
+
const errors = fileErrors.filter((fileError) => fileError !== null);
|
|
2089
|
+
// Error should be { fileName: FileType }
|
|
2090
|
+
return { invalidMimeFileType: errors };
|
|
2091
|
+
})
|
|
2092
|
+
);
|
|
1921
2093
|
}
|
|
1922
|
-
|
|
1923
|
-
|
|
2094
|
+
return of(null);
|
|
2095
|
+
}</code>
|
|
2096
|
+
</td>
|
|
2097
|
+
</tr>
|
|
1924
2098
|
|
|
1925
|
-
|
|
2099
|
+
|
|
2100
|
+
</tbody>
|
|
2101
|
+
</table>
|
|
2102
|
+
<table class="table table-sm table-bordered">
|
|
2103
|
+
<tbody>
|
|
2104
|
+
<tr>
|
|
2105
|
+
<td class="col-md-4">
|
|
2106
|
+
<a name="validateFileMimeType"></a>
|
|
2107
|
+
<span class="name">
|
|
2108
|
+
<span ><b>validateFileMimeType</b></span>
|
|
2109
|
+
<a href="#validateFileMimeType"><span class="icon ion-ios-link"></span></a>
|
|
2110
|
+
</span>
|
|
2111
|
+
</td>
|
|
2112
|
+
</tr>
|
|
2113
|
+
<tr>
|
|
2114
|
+
<td class="col-md-4">
|
|
2115
|
+
<i>Default value : </i><code>(file: File, mimeTypes: MimeType[]): Observable<{ [key: string]: any }> => {
|
|
2116
|
+
return new Observable<{ [p: string]: any }>((subscriber) => {
|
|
2117
|
+
const reader = new FileReader();
|
|
2118
|
+
reader.onloadend = (): void => {
|
|
2119
|
+
const buffer = reader.result as ArrayBuffer;
|
|
2120
|
+
const headerBytes = new Uint8Array(buffer).slice(0, 8);
|
|
2121
|
+
const mime = getMimeType(headerBytes);
|
|
2122
|
+
if (mimeTypes.indexOf(mime) === -1) {
|
|
2123
|
+
subscriber.next({ [file.name]: mime });
|
|
2124
|
+
}
|
|
2125
|
+
subscriber.complete();
|
|
2126
|
+
};
|
|
2127
|
+
reader.readAsArrayBuffer(file);
|
|
2128
|
+
});
|
|
1926
2129
|
}</code>
|
|
1927
2130
|
</td>
|
|
1928
2131
|
</tr>
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { Observable, of, zip } from 'rxjs';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
import { getMimeType } from './mime-types';
|
|
1
4
|
/**
|
|
2
5
|
* @description
|
|
3
6
|
* Validator that requires the maximum length of files that can be uploaded.
|
|
@@ -36,7 +39,7 @@ export const maxSizeValidator = (maxSize) => (control) => {
|
|
|
36
39
|
totalSize += file.size;
|
|
37
40
|
});
|
|
38
41
|
}
|
|
39
|
-
return control.value && totalSize >
|
|
42
|
+
return control.value && totalSize > maxSize * 1.024 ? { maxSize } : null;
|
|
40
43
|
};
|
|
41
44
|
/**
|
|
42
45
|
* @description
|
|
@@ -47,21 +50,41 @@ export const maxSizeValidator = (maxSize) => (control) => {
|
|
|
47
50
|
*
|
|
48
51
|
* ```typescript
|
|
49
52
|
* const fileUpload = new FormControl(null, mimeTypeExtensionValidator(['image/jpeg'])),
|
|
50
|
-
* console.log(fileUpload.errors); // {
|
|
53
|
+
* console.log(fileUpload.errors); // { invalidMimeFileType: ['image/jpeg'] }
|
|
51
54
|
* ```
|
|
52
55
|
*
|
|
53
|
-
* @returns
|
|
54
|
-
* `
|
|
56
|
+
* @returns An Async validator function that returns an error map with the
|
|
57
|
+
* `invalidMimeFileType` if the validation check fails, otherwise `null`.
|
|
55
58
|
*/
|
|
56
59
|
export const mimeTypeExtensionValidator = (mimeTypes) => (control) => {
|
|
57
|
-
const invalidFileExtension = [];
|
|
58
60
|
if (control.value) {
|
|
61
|
+
const fileErrorObservables = [];
|
|
62
|
+
// iterate over files
|
|
59
63
|
control.value.forEach((file) => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
64
|
+
// push observable which will check the mime validation type
|
|
65
|
+
fileErrorObservables.push(validateFileMimeType(file, mimeTypes));
|
|
63
66
|
});
|
|
67
|
+
return zip(...fileErrorObservables).pipe(map((fileErrors) => {
|
|
68
|
+
const errors = fileErrors.filter((fileError) => fileError !== null);
|
|
69
|
+
// Error should be { fileName: FileType }
|
|
70
|
+
return { invalidMimeFileType: errors };
|
|
71
|
+
}));
|
|
64
72
|
}
|
|
65
|
-
return
|
|
73
|
+
return of(null);
|
|
74
|
+
};
|
|
75
|
+
const validateFileMimeType = (file, mimeTypes) => {
|
|
76
|
+
return new Observable((subscriber) => {
|
|
77
|
+
const reader = new FileReader();
|
|
78
|
+
reader.onloadend = () => {
|
|
79
|
+
const buffer = reader.result;
|
|
80
|
+
const headerBytes = new Uint8Array(buffer).slice(0, 8);
|
|
81
|
+
const mime = getMimeType(headerBytes);
|
|
82
|
+
if (mimeTypes.indexOf(mime) === -1) {
|
|
83
|
+
subscriber.next({ [file.name]: mime });
|
|
84
|
+
}
|
|
85
|
+
subscriber.complete();
|
|
86
|
+
};
|
|
87
|
+
reader.readAsArrayBuffer(file);
|
|
88
|
+
});
|
|
66
89
|
};
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWZpbGUtdXBsb2FkLnZhbGlkYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ldWktZmlsZS11cGxvYWQvdXRpbHMvZXVpLWZpbGUtdXBsb2FkLnZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sY0FBYyxDQUFDO0FBRXJEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQzFCLENBQUMsUUFBZ0IsRUFBZSxFQUFFLENBQzlCLENBQUMsT0FBd0IsRUFBK0IsRUFBRSxDQUN0RCxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBRW5GOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQ3pCLENBQUMsT0FBZSxFQUFlLEVBQUUsQ0FDN0IsQ0FBQyxPQUF3QixFQUE4QixFQUFFO0lBQ3JELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ2pDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0tBQ047SUFFRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLElBQUksU0FBUyxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM3RSxDQUFDLENBQUM7QUFFVjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUNuQyxDQUFDLFNBQXFCLEVBQW9CLEVBQUUsQ0FDeEMsQ0FBQyxPQUF3QixFQUEwRSxFQUFFO0lBQ2pHLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtRQUNmLE1BQU0sb0JBQW9CLEdBQTBDLEVBQUUsQ0FBQztRQUN2RSxxQkFBcUI7UUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUNqQyw0REFBNEQ7WUFDNUQsb0JBQW9CLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FDcEMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDZixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDcEUseUNBQXlDO1lBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0tBQ0w7SUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFVixNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBVSxFQUFFLFNBQXFCLEVBQXNDLEVBQUU7SUFDbkcsT0FBTyxJQUFJLFVBQVUsQ0FBdUIsQ0FBQyxVQUFVLEVBQUUsRUFBRTtRQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBUyxFQUFFO1lBQzFCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFxQixDQUFDO1lBQzVDLE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDaEMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDMUM7WUFDRCxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB6aXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGdldE1pbWVUeXBlLCBNaW1lVHlwZSB9IGZyb20gJy4vbWltZS10eXBlcyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBWYWxpZGF0b3IgdGhhdCByZXF1aXJlcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgZmlsZXMgdGhhdCBjYW4gYmUgdXBsb2FkZWQuXG4gKlxuICogQHVzYWdlTm90ZXNcbiAqIFZhbGlkYXRlIHRoYXQgdGhlIHVzZXIgc2VsZWN0ZWQgbWF4aW11bSAzIGZpbGVzOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbGVVcGxvYWQgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgbWF4RmlsZXNWYWxpZGF0b3IoMykpO1xuICogY29uc29sZS5sb2coZmlsZVVwbG9hZC5lcnJvcnMpOyAvLyB7IG1heEZpbGVzOiAzIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIEEgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlcnJvciBtYXAgd2l0aCB0aGVcbiAqIGBtYXhGaWxlc2AgaWYgdGhlIHZhbGlkYXRpb24gY2hlY2sgZmFpbHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXhGaWxlc1ZhbGlkYXRvciA9XG4gICAgKG1heEZpbGVzOiBudW1iZXIpOiBWYWxpZGF0b3JGbiA9PlxuICAgICAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBtYXhGaWxlczogbnVtYmVyIH0gfCBudWxsID0+XG4gICAgICAgICAgICBjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gbWF4RmlsZXMgPyB7IG1heEZpbGVzIH0gOiBudWxsO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogVmFsaWRhdG9yIHRoYXQgcmVxdWlyZXMgdGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGZpbGVzIHRoYXQgY2FuIGJlIHVwbG9hZGVkLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSB1c2VyIGRvZXNuJ3Qgc2VsZWN0IGEgZmlsZSBoYXZlIGEgc2l6ZSB1cCB0byAzMDBLYjpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWxlVXBsb2FkID0gbmV3IEZvcm1Db250cm9sKG51bGwsIG1heFNpemVWYWxpZGF0b3IoMzAwMDAwKSk7XG4gKiBjb25zb2xlLmxvZyhmaWxlVXBsb2FkLmVycm9ycyk7IC8vIHsgbWF4U2l6ZTogMzAwMDAwIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIEEgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlcnJvciBtYXAgd2l0aCB0aGVcbiAqIGBtYXhTaXplYCBpZiB0aGUgdmFsaWRhdGlvbiBjaGVjayBmYWlscywgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heFNpemVWYWxpZGF0b3IgPVxuICAgIChtYXhTaXplOiBudW1iZXIpOiBWYWxpZGF0b3JGbiA9PlxuICAgICAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBtYXhTaXplOiBudW1iZXIgfSB8IG51bGwgPT4ge1xuICAgICAgICAgICAgbGV0IHRvdGFsU2l6ZSA9IDA7XG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wudmFsdWUuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0b3RhbFNpemUgKz0gZmlsZS5zaXplO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udHJvbC52YWx1ZSAmJiB0b3RhbFNpemUgPiBtYXhTaXplICogMS4wMjQgPyB7IG1heFNpemUgfSA6IG51bGw7XG4gICAgICAgIH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBWYWxpZGF0b3IgdGhhdCByZXF1aXJlcyBhbiBhcnJheSBvZiBtaW1lIHR5cGUgdGhhdCBjYW4gYmUgdXBsb2FkZWQuXG4gKlxuICogQHVzYWdlTm90ZXNcbiAqIFZhbGlkYXRlIHRoYXQgdGhlIHVzZXIgZG9lc24ndCBzZWxlY3QgYSBmaWxlIGhhdmluZyBhbm90aGVyIGV4dGVuc2lvbiB0aGFuIC5qcGcgb3IgLmpwZWc6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsZVVwbG9hZCA9IG5ldyBGb3JtQ29udHJvbChudWxsLCBtaW1lVHlwZUV4dGVuc2lvblZhbGlkYXRvcihbJ2ltYWdlL2pwZWcnXSkpLFxuICogY29uc29sZS5sb2coZmlsZVVwbG9hZC5lcnJvcnMpOyAvLyB7IGludmFsaWRNaW1lRmlsZVR5cGU6IFsnaW1hZ2UvanBlZyddIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIEFuIEFzeW5jIHZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZXJyb3IgbWFwIHdpdGggdGhlXG4gKiBgaW52YWxpZE1pbWVGaWxlVHlwZWAgaWYgdGhlIHZhbGlkYXRpb24gY2hlY2sgZmFpbHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gKi9cbmV4cG9ydCBjb25zdCBtaW1lVHlwZUV4dGVuc2lvblZhbGlkYXRvciA9XG4gICAgKG1pbWVUeXBlczogTWltZVR5cGVbXSk6IEFzeW5jVmFsaWRhdG9yRm4gPT5cbiAgICAgICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRXJyb3JPYnNlcnZhYmxlczogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD5bXSA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciBmaWxlc1xuICAgICAgICAgICAgICAgIGNvbnRyb2wudmFsdWUuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBwdXNoIG9ic2VydmFibGUgd2hpY2ggd2lsbCBjaGVjayB0aGUgbWltZSB2YWxpZGF0aW9uIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgZmlsZUVycm9yT2JzZXJ2YWJsZXMucHVzaCh2YWxpZGF0ZUZpbGVNaW1lVHlwZShmaWxlLCBtaW1lVHlwZXMpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gemlwKC4uLmZpbGVFcnJvck9ic2VydmFibGVzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKGZpbGVFcnJvcnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IGZpbGVFcnJvcnMuZmlsdGVyKChmaWxlRXJyb3IpID0+IGZpbGVFcnJvciAhPT0gbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciBzaG91bGQgYmUgeyBmaWxlTmFtZTogRmlsZVR5cGUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaW52YWxpZE1pbWVGaWxlVHlwZTogZXJyb3JzIH07XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfTtcblxuY29uc3QgdmFsaWRhdGVGaWxlTWltZVR5cGUgPSAoZmlsZTogRmlsZSwgbWltZVR5cGVzOiBNaW1lVHlwZVtdKTogT2JzZXJ2YWJsZTx7IFtrZXk6IHN0cmluZ106IGFueSB9PiA9PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHsgW3A6IHN0cmluZ106IGFueSB9Pigoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gcmVhZGVyLnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKS5zbGljZSgwLCA4KTtcbiAgICAgICAgICAgIGNvbnN0IG1pbWUgPSBnZXRNaW1lVHlwZShoZWFkZXJCeXRlcyk7XG4gICAgICAgICAgICBpZiAobWltZVR5cGVzLmluZGV4T2YobWltZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHsgW2ZpbGUubmFtZV06IG1pbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgICB9KTtcbn07XG4iXX0=
|