feat: add warning for invalid date format
This commit is contained in:
		
							parent
							
								
									a897cc1f53
								
							
						
					
					
						commit
						13c8673226
					
				
					 1 changed files with 18 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -2,6 +2,7 @@ import fs from "fs"
 | 
			
		|||
import path from "path"
 | 
			
		||||
import { Repository } from "@napi-rs/simple-git"
 | 
			
		||||
import { QuartzTransformerPlugin } from "../types"
 | 
			
		||||
import chalk from "chalk"
 | 
			
		||||
 | 
			
		||||
export interface Options {
 | 
			
		||||
  priority: ("frontmatter" | "git" | "filesystem")[]
 | 
			
		||||
| 
						 | 
				
			
			@ -11,9 +12,18 @@ const defaultOptions: Options = {
 | 
			
		|||
  priority: ["frontmatter", "git", "filesystem"],
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function coerceDate(d: any): Date {
 | 
			
		||||
function coerceDate(fp: string, d: any): Date {
 | 
			
		||||
  const dt = new Date(d)
 | 
			
		||||
  return isNaN(dt.getTime()) ? new Date() : dt
 | 
			
		||||
  const invalidDate = isNaN(dt.getTime())
 | 
			
		||||
  if (invalidDate && d !== undefined) {
 | 
			
		||||
    console.log(
 | 
			
		||||
      chalk.yellow(
 | 
			
		||||
        `\nWarning: found invalid date "${d}" in \`${fp}\`. Supported formats: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format`,
 | 
			
		||||
      ),
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return invalidDate ? new Date() : dt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type MaybeDate = undefined | string | number
 | 
			
		||||
| 
						 | 
				
			
			@ -32,10 +42,11 @@ export const CreatedModifiedDate: QuartzTransformerPlugin<Partial<Options> | und
 | 
			
		|||
            let modified: MaybeDate = undefined
 | 
			
		||||
            let published: MaybeDate = undefined
 | 
			
		||||
 | 
			
		||||
            const fp = path.posix.join(file.cwd, file.data.filePath as string)
 | 
			
		||||
            const fp = file.data.filePath!
 | 
			
		||||
            const fullFp = path.posix.join(file.cwd, fp)
 | 
			
		||||
            for (const source of opts.priority) {
 | 
			
		||||
              if (source === "filesystem") {
 | 
			
		||||
                const st = await fs.promises.stat(fp)
 | 
			
		||||
                const st = await fs.promises.stat(fullFp)
 | 
			
		||||
                created ||= st.birthtimeMs
 | 
			
		||||
                modified ||= st.mtimeMs
 | 
			
		||||
              } else if (source === "frontmatter" && file.data.frontmatter) {
 | 
			
		||||
| 
						 | 
				
			
			@ -54,9 +65,9 @@ export const CreatedModifiedDate: QuartzTransformerPlugin<Partial<Options> | und
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            file.data.dates = {
 | 
			
		||||
              created: coerceDate(created),
 | 
			
		||||
              modified: coerceDate(modified),
 | 
			
		||||
              published: coerceDate(published),
 | 
			
		||||
              created: coerceDate(fp, created),
 | 
			
		||||
              modified: coerceDate(fp, modified),
 | 
			
		||||
              published: coerceDate(fp, published),
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue