@@ -16,9 +16,11 @@ const cyan = '\x1b[36m'
1616const blackBG = '\x1b[40m'
1717const defaultBG = '\x1b[49m'
1818const defaultFG = '\x1b[39m'
19+ const currentYear = new Date ( ) . getFullYear ( )
1920
2021let langs = { }
2122let lintMode = true
23+ let updateMode = false
2224let error = false
2325
2426// we don't want to pass node and copyright.js directories to the glob
@@ -52,7 +54,7 @@ const buildSupportedExtensions = () => {
5254 . forEach ( ( file ) => {
5355 const extension = file . match ( / \. [ 0 - 9 a - z ] + $ / i) [ 0 ]
5456 const textPath = path . join ( headerDir , file )
55- const content = fs . readFileSync ( textPath ) . toString ( ) . replace ( 'year' , new Date ( ) . getFullYear ( ) )
57+ const content = fs . readFileSync ( textPath ) . toString ( ) . replace ( 'year' , currentYear )
5658 langs [ extension ] = content
5759 } )
5860}
@@ -71,6 +73,7 @@ if (args.length === 0 || args.indexOf('--help') >= 0) {
7173 Options:
7274
7375 --fix run in fix mode
76+ --update update the year in existing headers
7477
7578 Visit ${ cyan } https://github.com/mobify/mobify-code-style${ defaultFG } to learn more.
7679` )
@@ -84,32 +87,41 @@ if (args.indexOf('--fix') >= 0) {
8487 lintMode = false
8588}
8689
90+ if ( args . indexOf ( '--update' ) >= 0 ) {
91+ args . splice ( args . indexOf ( '--update' ) , 1 )
92+ updateMode = true
93+ }
94+
8795buildSupportedExtensions ( )
8896
8997args
90- . map ( ( folder ) => glob . sync ( folder ) )
91- . reduce ( ( a , b ) => a . concat ( b ) ) // flatten array of arrays
98+ . map ( ( folder ) => glob . sync ( folder ) ) // build array of files matching glob pattern
99+ . reduce ( ( a , b ) => a . concat ( b ) ) // flatten array of arrays
92100 . forEach ( ( file ) => {
93- let content = fs . readFileSync ( file )
94-
101+ const content = fs . readFileSync ( file )
95102 const hasCopyrightHeader = content . includes ( 'Copyright (c)' )
96103 const ext = file . match ( / \. [ 0 - 9 a - z ] + $ / i) [ 0 ]
97104
105+ let newData = ''
106+
107+ if ( hasCopyrightHeader && updateMode ) {
108+ newData = content . toString ( ) . replace ( / ( \( c \) \s ) ( \d { 4 } ) / , '$1' + currentYear )
109+ fs . writeFileSync ( file , newData )
110+ console . log ( `${ green } Copyright header succesfully updated to ${ currentYear } in ${ magenta } ${ file } ` )
111+ }
112+
98113 if ( ! hasCopyrightHeader ) {
99114 if ( lintMode ) {
100115 console . log ( `${ yellow } ${ file } ${ red } missing copyright header` )
101116 error = true
102117 } else {
103- const contentStr = content . toString ( ) . split ( '\n' )
104- let shebang = ''
105- let newData = ''
118+ let contentStr = content . toString ( ) . split ( '\n' )
106119
107120 // accomodate for shebang and insert before header
108121 if ( contentStr [ 0 ] . indexOf ( '#!' ) >= 0 ) {
109- shebang = contentStr . shift ( )
110- content = contentStr . join ( '\n' )
111-
112- newData = shebang + '\n\n' + getHeaderText ( ext ) + '\n' + content
122+ const shebang = contentStr . shift ( )
123+ contentStr = contentStr . join ( '\n' )
124+ newData = shebang + '\n\n' + getHeaderText ( ext ) + '\n' + contentStr
113125 } else {
114126 newData = getHeaderText ( ext ) + '\n' + content
115127 }
0 commit comments