11#!/usr/bin/env node
22'use strict'
33
4- const fs = require ( 'fs' )
5- const glob = require ( 'glob' )
4+ const fs = require ( 'fs' ) . promises
5+ // const glob = require('glob')
66const path = require ( 'path' )
77const mkdirp = require ( 'mkdirp' )
88const pug = require ( 'pug' )
9- const { basename, dirname, resolve, extname, sep } = path
10-
11- const argv = require ( 'minimist' ) ( process . argv . slice ( 2 ) , {
12- // boolean: ['enablePrettier', 'injectVendors', 'injectSvg']
13- } )
14- console . dir ( argv )
15- const { src } = argv
16- const { dest } = argv
17-
18- // Get all pug files
19- const getAllFiles = src => {
20- // const cwd = 'pug/'
21- const pattern = `${ src } /**/*.pug`
22- const options = {
23- ignore : `${ src } /_*/**`
24- }
25- return new glob . sync ( pattern , options )
26- }
9+ const { basename, dirname, resolve, sep } = path
10+
11+ const globby = require ( 'globby' )
2712
28- const isPug = filename => extname ( filename ) === '.pug'
13+ // These are the filetypes we only care about replacing the version
14+ const GLOB = [
15+ '**/*.pug'
16+ ]
17+
18+ const SRC = 'src/pug/views/'
19+
20+ const GLOBBY_OPTIONS = {
21+ cwd : path . join ( __dirname , '..' , SRC )
22+ }
2923
3024const compile = ( filename , basedir ) => {
31- const levels = basedir . split ( `${ sep } ` ) . filter ( el => el !== '' ) . length
25+ const levels = basedir . split ( `${ sep } ` ) . filter ( el => el !== '' ) . length
3226 const base = levels => {
3327 let path = './'
3428 while ( levels > 0 ) {
@@ -49,38 +43,43 @@ const compile = (filename, basedir) => {
4943 return html
5044}
5145
52- const checkPath = ( src , dest ) => {
53- // Check if path is file or directory
54- if ( fs . statSync ( src ) . isDirectory ( ) ) {
55- const files = getAllFiles ( src )
56- files . forEach ( file => {
57- if ( isPug ( file ) ) {
58- compilePugToHtml ( resolve ( file ) , dest )
46+ // Build html files
47+ const compilePugToHtml = ( file , dest ) => {
48+ const dir = dirname ( file )
49+ const filename = basename ( file ) . replace ( '.pug' , '.html' )
50+ const relative = path . relative ( path . join ( __dirname , '..' ) , dir . replace ( SRC , '' ) )
51+ const html = compile ( path . join ( __dirname , '..' , SRC , file ) , `${ relative } ` )
52+
53+ mkdirp ( path . join ( __dirname , '..' , dest , relative ) ) . then ( ( ) => {
54+ fs . writeFile ( resolve ( __dirname , '..' , dest , relative , filename ) , html , err => {
55+ if ( err ) {
56+ throw err
5957 }
60- // TODO: handle errors
58+
59+ console . log ( `${ resolve ( __dirname , '..' , dest , relative , filename ) } file saved!` )
6160 } )
62- } else if ( isPug ( src ) ) {
63- compilePugToHtml ( resolve ( src ) , dest )
64- }
65- // TODO: handle errors
61+ } )
6662}
6763
68- // Build html files
69- const compilePugToHtml = ( src , dest ) => {
70- const dir = dirname ( src )
71- const file = basename ( src ) . replace ( '.pug' , '.html' )
72- const relative = path . relative ( resolve ( __dirname , '..' ) , dir . replace ( `src${ sep } pug${ sep } views` , '' ) )
73- const html = compile ( src , `${ relative } ` )
74- mkdirp . sync ( resolve ( __dirname , '..' , dest , relative ) )
64+ const args = require ( 'minimist' ) ( process . argv . slice ( 2 ) )
7565
66+ async function main ( args ) {
67+ const { dest } = args
7668
77- fs . writeFile ( resolve ( __dirname , '..' , dest , relative , file ) , html , err => {
78- if ( err ) {
79- throw err
80- }
69+ if ( ! dest ) {
70+ console . error ( 'USAGE: change-version old_version new_version [--verbose] [--dry[-run]]' )
71+ console . error ( 'Got arguments:' , args )
72+ process . exit ( 1 )
73+ }
8174
82- console . log ( `${ resolve ( __dirname , '..' , dest , relative , file ) } file saved!` )
83- } )
75+ try {
76+ const files = await globby ( GLOB , GLOBBY_OPTIONS )
77+
78+ await Promise . all ( files . map ( file => compilePugToHtml ( file , dest ) ) )
79+ } catch ( error ) {
80+ console . error ( error )
81+ process . exit ( 1 )
82+ }
8483}
8584
86- checkPath ( src , dest )
85+ main ( args )
0 commit comments