storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/browser/app/js/utils.js (about) 1 /* 2 * MinIO Cloud Storage (C) 2016 MinIO, Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 import { minioBrowserPrefix, SORT_ORDER_DESC } from "./constants.js" 18 19 export const sortObjectsByName = (objects, order) => { 20 let folders = objects.filter(object => object.name.endsWith("/")) 21 let files = objects.filter(object => !object.name.endsWith("/")) 22 folders = folders.sort((a, b) => { 23 if (a.name.toLowerCase() < b.name.toLowerCase()) return -1 24 if (a.name.toLowerCase() > b.name.toLowerCase()) return 1 25 return 0 26 }) 27 files = files.sort((a, b) => { 28 if (a.name.toLowerCase() < b.name.toLowerCase()) return -1 29 if (a.name.toLowerCase() > b.name.toLowerCase()) return 1 30 return 0 31 }) 32 if (order === SORT_ORDER_DESC) { 33 folders = folders.reverse() 34 files = files.reverse() 35 } 36 return [...folders, ...files] 37 } 38 39 export const sortObjectsBySize = (objects, order) => { 40 let folders = objects.filter(object => object.name.endsWith("/")) 41 let files = objects.filter(object => !object.name.endsWith("/")) 42 files = files.sort((a, b) => a.size - b.size) 43 if (order === SORT_ORDER_DESC) files = files.reverse() 44 return [...folders, ...files] 45 } 46 47 export const sortObjectsByDate = (objects, order) => { 48 let folders = objects.filter(object => object.name.endsWith("/")) 49 let files = objects.filter(object => !object.name.endsWith("/")) 50 files = files.sort( 51 (a, b) => 52 new Date(a.lastModified).getTime() - new Date(b.lastModified).getTime() 53 ) 54 if (order === SORT_ORDER_DESC) files = files.reverse() 55 return [...folders, ...files] 56 } 57 58 export const pathSlice = path => { 59 path = path.replace(minioBrowserPrefix, "") 60 let prefix = "" 61 let bucket = "" 62 if (!path) 63 return { 64 bucket, 65 prefix 66 } 67 let objectIndex = path.indexOf("/", 1) 68 if (objectIndex == -1) { 69 bucket = path.slice(1) 70 return { 71 bucket, 72 prefix 73 } 74 } 75 bucket = path.slice(1, objectIndex) 76 prefix = path.slice(objectIndex + 1) 77 return { 78 bucket, 79 prefix 80 } 81 } 82 83 export const pathJoin = (bucket, prefix) => { 84 if (!prefix) prefix = "" 85 return minioBrowserPrefix + "/" + bucket + "/" + prefix 86 } 87 88 export const getRandomAccessKey = () => { 89 const alphaNumericTable = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" 90 let arr = new Uint8Array(20) 91 window.crypto.getRandomValues(arr) 92 const random = Array.prototype.map.call(arr, v => { 93 const i = v % alphaNumericTable.length 94 return alphaNumericTable.charAt(i) 95 }) 96 return random.join("") 97 } 98 99 export const getRandomSecretKey = () => { 100 let arr = new Uint8Array(40) 101 window.crypto.getRandomValues(arr) 102 const binStr = Array.prototype.map 103 .call(arr, v => { 104 return String.fromCharCode(v) 105 }) 106 .join("") 107 const base64Str = btoa(binStr) 108 return base64Str.replace(/\//g, "+").substr(0, 40) 109 } 110 111 export const getRandomString = length => { 112 var text = "" 113 var possible = 114 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" 115 for (var i = 0; i < length; i++) { 116 text += possible.charAt(Math.floor(Math.random() * possible.length)) 117 } 118 return text 119 }