Update the license headers throughout the repository to reference Google LLC rather than Google Inc, for the required license headers. PR Close #37205
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright Google LLC All Rights Reserved.
 | |
|  *
 | |
|  * Use of this source code is governed by an MIT-style license that can be
 | |
|  * found in the LICENSE file at https://angular.io/license
 | |
|  */
 | |
| 
 | |
| export interface DirectorySizeEntry {
 | |
|   size: number;
 | |
|   [filePath: string]: DirectorySizeEntry|number;
 | |
| }
 | |
| 
 | |
| export interface FileSizeData {
 | |
|   unmapped: number;
 | |
|   files: DirectorySizeEntry;
 | |
| }
 | |
| 
 | |
| /** Returns a new file size data sorted by keys in ascending alphabetical order. */
 | |
| export function sortFileSizeData({unmapped, files}: FileSizeData): FileSizeData {
 | |
|   return {unmapped, files: _sortDirectorySizeEntryObject(files)};
 | |
| }
 | |
| 
 | |
| /** Gets the name of all child size entries of the specified one. */
 | |
| export function getChildEntryNames(entry: DirectorySizeEntry): string[] {
 | |
|   // The "size" property is reserved for the stored size value.
 | |
|   return Object.keys(entry).filter(key => key !== 'size');
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Returns the first size-entry that has multiple children. This is also known as
 | |
|  * the omitting of the common path prefix.
 | |
|  * */
 | |
| export function omitCommonPathPrefix(entry: DirectorySizeEntry): DirectorySizeEntry {
 | |
|   let current: DirectorySizeEntry = entry;
 | |
|   while (getChildEntryNames(current).length === 1) {
 | |
|     const newChild = current[getChildEntryNames(current)[0]];
 | |
|     // Only omit the current node if it is a size entry. In case the new
 | |
|     // child is a holding a number, then this is a file and we don'twant
 | |
|     // to incorrectly omit the leaf file entries.
 | |
|     if (typeof newChild === 'number') {
 | |
|       break;
 | |
|     }
 | |
|     current = newChild;
 | |
|   }
 | |
|   return current;
 | |
| }
 | |
| 
 | |
| function _sortDirectorySizeEntryObject(oldObject: DirectorySizeEntry): DirectorySizeEntry {
 | |
|   return Object.keys(oldObject).sort(_sortSizeEntryKeys).reduce((result, key) => {
 | |
|     if (typeof oldObject[key] === 'number') {
 | |
|       result[key] = oldObject[key];
 | |
|     } else {
 | |
|       result[key] = _sortDirectorySizeEntryObject(oldObject[key] as DirectorySizeEntry);
 | |
|     }
 | |
|     return result;
 | |
|   }, {} as DirectorySizeEntry);
 | |
| }
 | |
| 
 | |
| function _sortSizeEntryKeys(a: string, b: string) {
 | |
|   // The "size" property should always be the first item in the size entry.
 | |
|   // This makes it easier to inspect the size of an entry in the golden.
 | |
|   if (a === 'size') {
 | |
|     return -1;
 | |
|   } else if (a < b) {
 | |
|     return -1;
 | |
|   } else if (a > b) {
 | |
|     return 1;
 | |
|   }
 | |
|   return 0;
 | |
| }
 |