mono/packages/tasks/src/contacts.ts
2026-01-29 15:31:09 +01:00

52 lines
1.6 KiB
TypeScript

import * as path from 'path'
import { JSONPath } from 'jsonpath-plus'
import { sync as read } from '@plastichub/fs/read'
import { sync as exists } from '@plastichub/fs/exists'
import { resolve } from '@plastichub/osr-commons'
import {
MAIL_CONTACTS_ROOT,
QUERY_TEMPLATES
} from './config'
import { logger } from '../src'
import { cleanArray } from './utils'
export const resolveContactsPath = (mailerOptions) => {
if (!mailerOptions.contacts) {
return false
}
let contactFiles = path.resolve(resolve(mailerOptions.contacts))
if (!exists(contactFiles)) {
contactFiles = path.join(MAIL_CONTACTS_ROOT(), mailerOptions.contacts)
}
return contactFiles
}
export const getContacts = (mailerOptions) => {
let contactFiles = resolveContactsPath(mailerOptions)
if (!contactFiles) {
return []
}
logger.debug(`Reading Contact File : ${contactFiles}`)
let contacts = read(contactFiles, 'json') as any[]
if (!contacts) {
logger.error(`Cannot read contacts file ${contactFiles}`)
return []
}
return contacts
}
export const filterContacts = (grunt, contacts, mailerOptions) => {
if (!mailerOptions.query) {
return contacts
}
if (QUERY_TEMPLATES[mailerOptions.query]) {
mailerOptions.query = QUERY_TEMPLATES[mailerOptions.query](grunt.option('queryExtra'))
}
let queryResult = JSONPath({ path: mailerOptions.query, json: contacts })
logger.debug(`Query Result : ${queryResult.length} contacts : \n\t ${mailerOptions.query}`)
queryResult = cleanArray(queryResult)
return queryResult
}