1- const pluginRss = require ( '@11ty/eleventy-plugin-rss' )
2- require ( 'dotenv' ) . config ( )
3- const fs = require ( "fs" ) ;
4- const path = require ( "path" ) ;
5-
6- module . exports = function ( eleventyConfig ) {
7- const { DateTime } = require ( 'luxon' )
8- const hljs = require ( 'highlight.js' )
9- const anchor = require ( 'markdown-it-anchor' )
10- const markdownIt = require ( 'markdown-it' ) ( {
1+ import dotenv from "dotenv"
2+ import fs from "fs"
3+ import path from "path"
4+ import { DateTime } from "luxon"
5+ import hljs from "highlight.js"
6+ import markdownIt from "markdown-it"
7+ import anchor from "markdown-it-anchor"
8+ import bracketedSpans from "markdown-it-bracketed-spans"
9+ import attrs from "markdown-it-attrs"
10+ import toc from "markdown-it-table-of-contents"
11+ import mark from "markdown-it-mark"
12+ import rssPlugin from "@11ty/eleventy-plugin-rss"
13+
14+ dotenv . config ( )
15+
16+ export default function ( eleventyConfig ) {
17+ const isDevelopment = process . env . NODE_ENV === "development"
18+ const markdownItConfig = markdownIt ( {
1119 html : true ,
1220 linkify : true ,
1321 typographer : true ,
1422 highlight : function ( str , lang ) {
15- if ( lang && hljs . getLanguage ( lang ) )
23+ if ( lang && hljs . getLanguage ( lang ) ) {
1624 try {
1725 return hljs . highlight ( str , { language : lang } ) . value
1826 } catch ( __ ) { }
19-
20- return ''
27+ }
28+ return ""
2129 } ,
2230 } )
2331 . use ( anchor , {
2432 permalink : anchor . permalink . linkAfterHeader ( {
25- style : ' visually-hidden' ,
26- assistiveText : title => `Permalink to “${ title } ”` ,
27- visuallyHiddenClass : ' sr-only' ,
28- wrapper : [ '<div class="header-wrapper">' , '</div>' ]
33+ style : " visually-hidden" ,
34+ assistiveText : ( title ) => `Permalink to “${ title } ”` ,
35+ visuallyHiddenClass : " sr-only" ,
36+ wrapper : [ '<div class="header-wrapper">' , '</div>' ] ,
2937 } ) ,
3038 } )
31- . use ( require ( 'markdown-it-bracketed-spans' ) )
32- . use ( require ( 'markdown-it- attrs' ) , {
33- leftDelimiter : '{' ,
34- rightDelimiter : '}' ,
39+ . use ( bracketedSpans )
40+ . use ( attrs , {
41+ leftDelimiter : "{" ,
42+ rightDelimiter : "}" ,
3543 allowedAttributes : [ ] ,
3644 } )
37- . use ( require ( 'markdown-it-table-of-contents' ) , {
45+ . use ( toc , {
3846 includeLevel : [ 1 , 2 , 3 ] ,
3947 containerHeaderHtml : `<div class="toc-container-header">Table of Contents</div>` ,
4048 } )
41- . use ( require ( 'markdown-it-mark' ) )
42-
43- eleventyConfig . setLibrary ( 'md' , markdownIt )
49+ . use ( mark )
4450
45- const isDevelopment = process . env . NODE_ENV === 'development' ;
46- eleventyConfig . addGlobalData ( "isDevelopment" , isDevelopment ) ;
51+ eleventyConfig . setLibrary ( "md" , markdownItConfig )
52+ eleventyConfig . addGlobalData ( "isDevelopment" , isDevelopment )
4753
48- eleventyConfig . addPlugin ( pluginRss , {
54+ eleventyConfig . addPlugin ( rssPlugin , {
4955 posthtmlRenderOptions : {
50- closingSingleTag : ' default' ,
56+ closingSingleTag : " default" ,
5157 } ,
5258 } )
5359
54- eleventyConfig . addPassthroughCopy ( 'src/assets/*.pdf' )
55- eleventyConfig . addPassthroughCopy ( { 'src/assets/js/*' : 'js' } )
56- eleventyConfig . addPassthroughCopy ( { 'src/assets/images' : 'images' } )
57-
58- eleventyConfig . addPassthroughCopy ( 'src/admin/*' )
59- eleventyConfig . addPassthroughCopy ( 'settings.json' )
60- eleventyConfig . addPassthroughCopy ( 'src/robots.txt' )
60+ eleventyConfig . addPassthroughCopy ( {
61+ "src/assets/*.pdf" : "assets" ,
62+ "src/assets/images" : "images" ,
63+ "src/assets/js/*" : "js" ,
64+ "src/admin/*" : "admin" ,
65+ "settings.json" : "settings.json" ,
66+ "src/robots.txt" : "robots.txt"
67+ } )
6168
62- eleventyConfig . addFilter ( ' postDate' , ( dateObj ) => {
63- if ( typeof ( dateObj ) !== ' object' ) dateObj = new Date ( dateObj )
69+ eleventyConfig . addFilter ( " postDate" , ( dateObj ) => {
70+ if ( typeof dateObj !== " object" ) dateObj = new Date ( dateObj )
6471 return DateTime . fromJSDate ( dateObj ) . toLocaleString ( DateTime . DATE_MED )
6572 } )
6673
67- eleventyConfig . addFilter ( ' reverseGroupedPosts' , ( object ) => {
68- return Object . entries ( object ) . sort ( ( a , b ) => b [ 0 ] - a [ 0 ] )
69- } )
74+ eleventyConfig . addFilter ( " reverseGroupedPosts" , ( object ) =>
75+ Object . entries ( object ) . sort ( ( a , b ) => b [ 0 ] - a [ 0 ] )
76+ )
7077
71- eleventyConfig . addFilter ( ' htmlDateString' , ( dateObj ) => {
78+ eleventyConfig . addFilter ( " htmlDateString" , ( dateObj ) => {
7279 let date = new Date ( dateObj )
7380 return date . toISOString ( )
7481 } )
7582
76- eleventyConfig . addFilter ( ' postYear' , ( dateObj ) => {
77- return DateTime . fromJSDate ( dateObj ) . toLocaleString ( { year : ' numeric' } )
83+ eleventyConfig . addFilter ( " postYear" , ( dateObj ) => {
84+ return DateTime . fromJSDate ( dateObj ) . toLocaleString ( { year : " numeric" } )
7885 } )
7986
80- eleventyConfig . addFilter ( ' sliceRecent' , ( array ) => {
87+ eleventyConfig . addFilter ( " sliceRecent" , ( array ) => {
8188 return array . slice ( 0 , 3 )
8289 } )
8390
84- eleventyConfig . addFilter ( ' trimText' , ( string ) => {
85- return string . split ( ' ' ) . splice ( 0 , 12 ) . join ( ' ' )
91+ eleventyConfig . addFilter ( " trimText" , ( string ) => {
92+ return string . split ( " " ) . splice ( 0 , 12 ) . join ( " " )
8693 } )
8794
88- eleventyConfig . addFilter ( ' cutText' , ( string , size ) => {
89- return string . split ( '-' ) . splice ( 0 , size ) . join ( '-' )
95+ eleventyConfig . addFilter ( " cutText" , ( string , size ) => {
96+ return string . split ( "-" ) . splice ( 0 , size ) . join ( "-" )
9097 } )
9198
92- eleventyConfig . addFilter ( ' serializeTitle' , ( string , yearSplice = 2 ) => {
93- const titleParts = string . split ( '-' )
99+ eleventyConfig . addFilter ( " serializeTitle" , ( string , yearSplice = 2 ) => {
100+ const titleParts = string . split ( "-" )
94101 const [ year , ...title ] = titleParts
95- const titleInitials = title . map ( title => title . split ( '' ) [ 0 ] ) . join ( '' )
102+ const titleInitials = title . map ( ( title ) => title . split ( "" ) [ 0 ] ) . join ( "" )
96103 const yearSuffix = year . slice ( - yearSplice )
97104
98105 return `${ yearSuffix } -${ titleInitials } `
99106 } )
100107
101108 eleventyConfig . addFilter ( "development" , ( link ) => {
102- return isDevelopment ? "/" : link ;
103- } ) ;
109+ return isDevelopment ? "/" : link
110+ } )
104111
105- eleventyConfig . addFilter ( ' breakLine' , ( string , cutAt = 3 , maxSize = 30 ) => {
106- const titleWords = string . split ( ' ' )
112+ eleventyConfig . addFilter ( " breakLine" , ( string , cutAt = 3 , maxSize = 30 ) => {
113+ const titleWords = string . split ( " " )
107114 const titleLength = string . length
108115 const titlePreview = titleWords . slice ( 0 , cutAt ) . join ( " " )
109116 const titleRemaining = titleWords . slice ( cutAt ) . join ( " " )
110117
111118 const hasTitleRemaining = ! ! titleRemaining
112- const formattedTitleWithBreak = hasTitleRemaining ? `${ titlePreview } <br/>${ titleRemaining } ` : titlePreview
119+ const formattedTitleWithBreak = hasTitleRemaining
120+ ? `${ titlePreview } <br/>${ titleRemaining } `
121+ : titlePreview
113122
114- const returnTitle = titleLength <= maxSize || ! hasTitleRemaining ? string : formattedTitleWithBreak
115- return returnTitle
123+ return titleLength <= maxSize || ! hasTitleRemaining
124+ ? string
125+ : formattedTitleWithBreak
116126 } )
117127
118- eleventyConfig . addFilter ( ' svg' , ( fileName , index ) => {
119- const filePath = path . join ( __dirname , "src/assets/svg" , fileName ) ;
128+ eleventyConfig . addFilter ( " svg" , ( fileName , index ) => {
129+ const filePath = path . join ( process . cwd ( ) , "src/assets/svg" , fileName )
120130 try {
121- let svgContent = fs . readFileSync ( filePath , "utf8" ) ;
131+ let svgContent = fs . readFileSync ( filePath , "utf8" )
122132 if ( index ) {
123- svgContent = svgContent . replace ( "<svg" , `<svg data-animation="fade-in" data-delay=${ index } ` ) ;
133+ svgContent = svgContent . replace (
134+ "<svg" ,
135+ `<svg data-animation="fade-in" data-delay=${ index } `
136+ )
124137 }
125- return svgContent ;
138+ return svgContent
126139 } catch ( error ) {
127- return `<!-- SVG ${ fileName } not found -->` ;
140+ return `<!-- SVG ${ fileName } not found -->`
128141 }
129- } ) ;
142+ } )
130143
131- eleventyConfig . addFilter ( ' renderMarkdown' , ( text ) => {
132- return markdownIt . render ( text )
144+ eleventyConfig . addFilter ( " renderMarkdown" , ( text ) => {
145+ return markdownItConfig . render ( text )
133146 } )
134147
135- eleventyConfig . addFilter ( ' renderMarkdownInline' , ( text ) => {
136- return markdownIt . renderInline ( text )
148+ eleventyConfig . addFilter ( " renderMarkdownInline" , ( text ) => {
149+ return markdownItConfig . renderInline ( text )
137150 } )
138151
139- eleventyConfig . addFilter ( ' featuredDate' , ( string ) => {
152+ eleventyConfig . addFilter ( " featuredDate" , ( string ) => {
140153 let date = new Date ( string )
141- return date . toLocaleDateString ( ' en-us' , {
142- year : ' numeric' ,
143- month : ' short' ,
144- day : ' numeric' ,
154+ return date . toLocaleDateString ( " en-us" , {
155+ year : " numeric" ,
156+ month : " short" ,
157+ day : " numeric" ,
145158 } )
146159 } )
147160
148161 return {
149- templateFormats : [ 'md' , 'njk' , 'html' , 'liquid' ] ,
150-
151- markdownTemplateEngine : 'liquid' ,
152- htmlTemplateEngine : 'njk' ,
153- dataTemplateEngine : 'njk' ,
162+ templateFormats : [ "md" , "njk" , "html" , "liquid" ] ,
163+ markdownTemplateEngine : "liquid" ,
164+ htmlTemplateEngine : "njk" ,
165+ dataTemplateEngine : "njk" ,
154166 dir : {
155- data : ' _data' ,
156- input : ' src' ,
157- output : ' public' ,
167+ data : " _data" ,
168+ input : " src" ,
169+ output : " public" ,
158170 } ,
159171 }
160- }
172+ }
0 commit comments