diff --git a/src/main.ts b/src/main.ts index 48a0570..46351bf 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,7 +10,7 @@ const xmlDeclaration = '${utils.objToString({ loc: new URL(path.join(this.options.pathPrefix || '', `sitemap-${category}.xml`), this.options.siteURL), lastmod: new Date() })}` } try { - fs.writeFileSync( + this.options.hooks.fileHandler( path.resolve(this.options?.outDir || './public', 'sitemap.xml'), xmlDeclaration + `${xmlContents}` ) diff --git a/src/types.ts b/src/types.ts index 501618f..4088fa8 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,9 +1,29 @@ import { URL } from 'url' +export type WarningHandler = (msg: string) => void + +export type FileHandler = (file: string, data: string) => void + +interface HookSet { + warningHandler?: WarningHandler, + fileHandler?: FileHandler +} + +export interface FullOptions { + outDir: string, + siteURL: string, + pathPrefix: string, + hooks: { + warningHandler: WarningHandler, + fileHandler: FileHandler + } +} + export interface Options { outDir?: string, siteURL: string, - pathPrefix?: string + pathPrefix?: string, + hooks?: HookSet } export interface UrlObj { diff --git a/src/utils.ts b/src/utils.ts index 035ccab..d32908a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,7 +1,19 @@ -import { UrlObj } from './types' +import { UrlObj, WarningHandler, FileHandler } from './types' +import * as fs from 'fs' const freqMap = ['', 'never', 'yearly', 'monthly', 'weekly', 'daily', 'hourly', 'always'] +const defaultWarningHandler: WarningHandler = (msg) => { + throw new Error(msg) +} + +const defaultFileHandler: FileHandler = fs.writeFileSync + +export const defaultHookSet = { + defaultWarningHandler, + defaultFileHandler +} + export function dateConverter (date: Date | string): string { return new Date(date).toISOString() }