You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					76 lines
				
				1.8 KiB
			
		
		
			
		
	
	
					76 lines
				
				1.8 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const os = require('os') | ||
|  | const writer = require('flush-write-stream') | ||
|  | const split = require('split2') | ||
|  | const { existsSync, statSync } = require('fs') | ||
|  | const pid = process.pid | ||
|  | const hostname = os.hostname() | ||
|  | 
 | ||
|  | const isWin = process.platform === 'win32' | ||
|  | 
 | ||
|  | function getPathToNull () { | ||
|  |   return isWin ? '\\\\.\\NUL' : '/dev/null' | ||
|  | } | ||
|  | 
 | ||
|  | function once (emitter, name) { | ||
|  |   return new Promise((resolve, reject) => { | ||
|  |     if (name !== 'error') emitter.once('error', reject) | ||
|  |     emitter.once(name, (...args) => { | ||
|  |       emitter.removeListener('error', reject) | ||
|  |       resolve(...args) | ||
|  |     }) | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | function sink (func) { | ||
|  |   const result = split((data) => { | ||
|  |     try { | ||
|  |       return JSON.parse(data) | ||
|  |     } catch (err) { | ||
|  |       console.log(err) | ||
|  |       console.log(data) | ||
|  |     } | ||
|  |   }) | ||
|  |   if (func) result.pipe(writer.obj(func)) | ||
|  |   return result | ||
|  | } | ||
|  | 
 | ||
|  | function check (is, chunk, level, msg) { | ||
|  |   is(new Date(chunk.time) <= new Date(), true, 'time is greater than Date.now()') | ||
|  |   delete chunk.time | ||
|  |   is(chunk.pid, pid) | ||
|  |   is(chunk.hostname, hostname) | ||
|  |   is(chunk.level, level) | ||
|  |   is(chunk.msg, msg) | ||
|  | } | ||
|  | 
 | ||
|  | function sleep (ms) { | ||
|  |   return new Promise((resolve) => { | ||
|  |     setTimeout(resolve, ms) | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | function watchFileCreated (filename) { | ||
|  |   return new Promise((resolve, reject) => { | ||
|  |     const TIMEOUT = 800 | ||
|  |     const INTERVAL = 100 | ||
|  |     const threshold = TIMEOUT / INTERVAL | ||
|  |     let counter = 0 | ||
|  |     const interval = setInterval(() => { | ||
|  |       // On some CI runs file is created but not filled
 | ||
|  |       if (existsSync(filename) && statSync(filename).size !== 0) { | ||
|  |         clearInterval(interval) | ||
|  |         resolve() | ||
|  |       } else if (counter <= threshold) { | ||
|  |         counter++ | ||
|  |       } else { | ||
|  |         clearInterval(interval) | ||
|  |         reject(new Error(`${filename} was not created.`)) | ||
|  |       } | ||
|  |     }, INTERVAL) | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = { getPathToNull, sink, check, once, sleep, watchFileCreated } |