1 import chalk from
'chalk'
2 import { dirname
, join
, resolve
} from
'node:path'
3 import { fileURLToPath
} from
'node:url'
5 import { type ElementsPerWorkerType
, type FileType
, StorageType
} from
'../types/index.js'
6 import { WorkerProcessType
} from
'../worker/index.js'
7 import { Constants
} from
'./Constants.js'
8 import { isNotEmptyString
, logPrefix
as utilsLogPrefix
} from
'./Utils.js'
10 export const logPrefix
= (): string => {
11 return utilsLogPrefix(' Simulator configuration |')
14 export const buildPerformanceUriFilePath
= (file
: string): string => {
15 return `file://${join(resolve(dirname(fileURLToPath(import.meta.url)), '../'), file)}`
18 export const getDefaultPerformanceStorageUri
= (storageType
: StorageType
): string => {
19 switch (storageType
) {
20 case StorageType
.JSON_FILE
:
21 return buildPerformanceUriFilePath(
22 `${Constants.DEFAULT_PERFORMANCE_DIRECTORY}/${Constants.DEFAULT_PERFORMANCE_RECORDS_FILENAME}`
24 case StorageType
.SQLITE
:
25 return buildPerformanceUriFilePath(
26 `${Constants.DEFAULT_PERFORMANCE_DIRECTORY}/${Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME}.db`
29 throw new Error(`Unsupported storage type '${storageType}'`)
33 export const handleFileException
= (
36 error
: NodeJS
.ErrnoException
,
39 const prefix
= isNotEmptyString(logPfx
) ? `${logPfx} ` : ''
43 logMsg
= `${fileType} file ${file} not found: `
46 logMsg
= `${fileType} file ${file} already exists: `
49 logMsg
= `${fileType} file ${file} access denied: `
52 logMsg
= `${fileType} file ${file} permission denied: `
55 logMsg
= `${fileType} file ${file} error: `
57 console
.error(`${chalk.green(prefix)}${chalk.red(logMsg)}`, error
)
61 export const checkWorkerProcessType
= (workerProcessType
: WorkerProcessType
): void => {
62 if (!Object.values(WorkerProcessType
).includes(workerProcessType
)) {
63 throw new SyntaxError(
64 `Invalid worker process type '${workerProcessType}' defined in configuration`
69 export const checkWorkerElementsPerWorker
= (
70 elementsPerWorker
: ElementsPerWorkerType
| undefined
73 elementsPerWorker
!= null &&
74 elementsPerWorker
!== 'auto' &&
75 elementsPerWorker
!== 'all' &&
76 !Number.isSafeInteger(elementsPerWorker
)
78 throw new SyntaxError(
79 `Invalid number of elements per worker '${elementsPerWorker.toString()}' defined in configuration`
82 if (Number.isSafeInteger(elementsPerWorker
) && (elementsPerWorker
as number) <= 0) {
84 // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
85 `Invalid negative or zero number of elements per worker '${elementsPerWorker?.toString()}' defined in configuration`