54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright Google Inc. 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
 | |
|  */
 | |
| 
 | |
| import {Filesystem} from '@angular/service-worker/config';
 | |
| 
 | |
| import {sha1Binary} from './sha1';
 | |
| 
 | |
| const fs = require('fs');
 | |
| const path = require('path');
 | |
| 
 | |
| export class NodeFilesystem implements Filesystem {
 | |
|   constructor(private base: string) {}
 | |
| 
 | |
|   async list(_path: string): Promise<string[]> {
 | |
|     const dir = this.canonical(_path);
 | |
|     const entries = fs.readdirSync(dir).map(
 | |
|         (entry: string) => ({entry, stats: fs.statSync(path.join(dir, entry))}));
 | |
|     const files = entries.filter((entry: any) => !entry.stats.isDirectory())
 | |
|                       .map((entry: any) => path.posix.join(_path, entry.entry));
 | |
| 
 | |
|     return entries.filter((entry: any) => entry.stats.isDirectory())
 | |
|         .map((entry: any) => path.posix.join(_path, entry.entry))
 | |
|         .reduce(
 | |
|             async (list: Promise<string[]>, subdir: string) =>
 | |
|                 (await list).concat(await this.list(subdir)),
 | |
|             Promise.resolve(files));
 | |
|   }
 | |
| 
 | |
|   async read(_path: string): Promise<string> {
 | |
|     const file = this.canonical(_path);
 | |
|     return fs.readFileSync(file).toString();
 | |
|   }
 | |
| 
 | |
|   async hash(_path: string): Promise<string> {
 | |
|     const file = this.canonical(_path);
 | |
|     const contents: Buffer = fs.readFileSync(file);
 | |
|     return sha1Binary(contents as any as ArrayBuffer);
 | |
|   }
 | |
| 
 | |
|   async write(_path: string, contents: string): Promise<void> {
 | |
|     const file = this.canonical(_path);
 | |
|     fs.writeFileSync(file, contents);
 | |
|   }
 | |
| 
 | |
|   private canonical(_path: string): string {
 | |
|     return path.posix.join(this.base, _path);
 | |
|   }
 | |
| }
 |