52 lines
1.6 KiB
TypeScript
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
|
|
}
|