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
						
					
					
				| '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 }
 |