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 path from "path"
 | 
				
			||||||
import { Repository } from "@napi-rs/simple-git"
 | 
					import { Repository } from "@napi-rs/simple-git"
 | 
				
			||||||
import { QuartzTransformerPlugin } from "../types"
 | 
					import { QuartzTransformerPlugin } from "../types"
 | 
				
			||||||
 | 
					import chalk from "chalk"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface Options {
 | 
					export interface Options {
 | 
				
			||||||
  priority: ("frontmatter" | "git" | "filesystem")[]
 | 
					  priority: ("frontmatter" | "git" | "filesystem")[]
 | 
				
			||||||
| 
						 | 
					@ -11,9 +12,18 @@ const defaultOptions: Options = {
 | 
				
			||||||
  priority: ["frontmatter", "git", "filesystem"],
 | 
					  priority: ["frontmatter", "git", "filesystem"],
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function coerceDate(d: any): Date {
 | 
					function coerceDate(fp: string, d: any): Date {
 | 
				
			||||||
  const dt = new Date(d)
 | 
					  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
 | 
					type MaybeDate = undefined | string | number
 | 
				
			||||||
| 
						 | 
					@ -32,10 +42,11 @@ export const CreatedModifiedDate: QuartzTransformerPlugin<Partial<Options> | und
 | 
				
			||||||
            let modified: MaybeDate = undefined
 | 
					            let modified: MaybeDate = undefined
 | 
				
			||||||
            let published: 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) {
 | 
					            for (const source of opts.priority) {
 | 
				
			||||||
              if (source === "filesystem") {
 | 
					              if (source === "filesystem") {
 | 
				
			||||||
                const st = await fs.promises.stat(fp)
 | 
					                const st = await fs.promises.stat(fullFp)
 | 
				
			||||||
                created ||= st.birthtimeMs
 | 
					                created ||= st.birthtimeMs
 | 
				
			||||||
                modified ||= st.mtimeMs
 | 
					                modified ||= st.mtimeMs
 | 
				
			||||||
              } else if (source === "frontmatter" && file.data.frontmatter) {
 | 
					              } else if (source === "frontmatter" && file.data.frontmatter) {
 | 
				
			||||||
| 
						 | 
					@ -54,9 +65,9 @@ export const CreatedModifiedDate: QuartzTransformerPlugin<Partial<Options> | und
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            file.data.dates = {
 | 
					            file.data.dates = {
 | 
				
			||||||
              created: coerceDate(created),
 | 
					              created: coerceDate(fp, created),
 | 
				
			||||||
              modified: coerceDate(modified),
 | 
					              modified: coerceDate(fp, modified),
 | 
				
			||||||
              published: coerceDate(published),
 | 
					              published: coerceDate(fp, published),
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue