@@ -2,7 +2,7 @@ import path from 'node:path';
22import bindings = require( 'node-gyp-build' ) ;
33import logger , { DEFAULT_LOG_LEVEL } from '../logger' ;
44import { LogLevel } from '../logger/types' ;
5- import { Ffi } from './types' ;
5+ import { Ffi , FfiLogLevelFilter } from './types' ;
66
77export const PACT_FFI_VERSION = '0.4.22' ;
88
@@ -85,18 +85,15 @@ const renderBinaryErrorMessage = (error: unknown) => {
8585} ;
8686
8787let ffi : typeof ffiLib ;
88- let ffiLogLevel : LogLevel ;
8988
90- const initialiseFfi = ( logLevel : LogLevel ) : typeof ffi => {
89+ const initialiseFfi = ( ) : typeof ffi => {
9190 // eslint-disable-next-line @typescript-eslint/ban-ts-comment
9291 // @ts -ignore
9392 if ( process . stdout . _handle ) {
9493 // eslint-disable-next-line @typescript-eslint/ban-ts-comment
9594 // @ts -ignore
9695 process . stdout . _handle . setBlocking ( true ) ;
9796 }
98- logger . debug ( `Initalising native core at log level '${ logLevel } '` ) ;
99- ffiLogLevel = logLevel ;
10097 try {
10198 bindingPaths . every ( ( bindingPath , i ) => {
10299 try {
@@ -114,7 +111,6 @@ const initialiseFfi = (logLevel: LogLevel): typeof ffi => {
114111 return true ;
115112 }
116113 } ) ;
117- ffiLib . pactffiInitWithLogLevel ( logLevel ) ;
118114 } catch ( error ) {
119115 renderBinaryErrorMessage ( error ) ;
120116 throw new Error (
@@ -125,18 +121,24 @@ const initialiseFfi = (logLevel: LogLevel): typeof ffi => {
125121} ;
126122
127123export const getFfiLib = (
128- logLevel : LogLevel = DEFAULT_LOG_LEVEL
124+ logLevel : LogLevel = DEFAULT_LOG_LEVEL ,
125+ logFile : string | undefined = undefined
129126) : typeof ffi => {
130127 if ( ! ffi ) {
131- logger . trace ( 'Initiliasing ffi for the first time' ) ;
132- ffi = initialiseFfi ( logLevel ) ;
133- } else {
134- logger . trace ( 'Ffi has already been initialised, no need to repeat it' ) ;
135- if ( logLevel !== ffiLogLevel ) {
136- logger . warn (
137- `The pact native core has already been initialised at log level '${ ffiLogLevel } '`
128+ logger . trace ( 'Initialising ffi for the first time' ) ;
129+ ffi = initialiseFfi ( ) ;
130+ logger . debug (
131+ `Initialising native core at log level '${ logLevel } '` ,
132+ logFile
133+ ) ;
134+ if ( logFile ) {
135+ logger . debug (
136+ `writing log file at level ${ FfiLogLevelFilter [ logLevel ] } to ${ logFile } `
138137 ) ;
139- logger . warn ( `The new requested log level '${ logLevel } ' will be ignored` ) ;
138+ const res = ffiLib . pactffiLogToFile ( logFile , FfiLogLevelFilter [ logLevel ] ) ;
139+ logger . debug ( `result of writing to file '${ res } '` ) ;
140+ } else {
141+ ffiLib . pactffiInitWithLogLevel ( logLevel ) ;
140142 }
141143 }
142144 return ffi ;
0 commit comments