1- var fse = require ( "fs-extra" ) ;
2- var path = require ( 'path' ) ;
3- var glob = require ( "glob" ) ;
4-
5- function moveFile ( sourceFilePath , targetFilePath ) {
6- let targetFileDirectory = path . dirname ( targetFilePath ) ;
7- if ( ! fse . existsSync ( targetFileDirectory ) ) {
8- console . info ( `📁 Creating ${ targetFileDirectory } ` ) ;
9- fse . mkdirSync ( targetFileDirectory , { recursive : true } )
10- }
11-
12- console . info ( `👍 Moving ${ sourceFilePath } -> ${ targetFilePath } ` ) ;
13- fse . renameSync ( sourceFilePath , targetFilePath ) ;
14- }
1+ const fse = require ( "fs-extra" ) ;
2+ const path = require ( 'path' ) ;
3+ const glob = require ( "glob" ) ;
4+ const { getLayoutNameTemplates, getPartialTemplates } = require ( './utils/templates' )
5+ const { moveFile, removeDirs } = require ( './utils/file' )
156
167module . exports = class Migrator {
178 constructor ( options ) {
@@ -20,15 +11,48 @@ module.exports = class Migrator {
2011
2112 async execute ( ) {
2213 let sourceComponentTemplatesPath = path . join ( this . options . projectRoot , 'app/templates/components' ) ;
23- var sourceTemplateFilePaths = glob . sync ( `${ sourceComponentTemplatesPath } /**/*.hbs` ) ;
14+ var sourceComponentTemplateFilePaths = glob . sync ( `${ sourceComponentTemplatesPath } /**/*.hbs` ) ;
15+
16+ let sourceComponentPath = path . join ( this . options . projectRoot , 'app/components' ) ;
17+ let sourceComponentFilePaths = glob . sync ( `${ sourceComponentPath } /**/*.js` ) ;
18+ let templatesWithLayoutName = getLayoutNameTemplates ( sourceComponentFilePaths ) ;
19+ if ( templatesWithLayoutName . length ) {
20+ sourceComponentTemplateFilePaths = sourceComponentTemplateFilePaths . filter ( sourceTemplateFilePath => {
21+ let sourceTemplatePathInApp = sourceTemplateFilePath . slice ( this . options . projectRoot . length ) ; // '/app/templates/components/nested1/nested-component.hbs'
22+ let templatePath = sourceTemplatePathInApp . slice ( 'app/templates/' . length ) ; // '/nested1/nested-component.hbs'
23+ return ! templatesWithLayoutName . includes ( templatePath . slice ( 1 ) . replace ( '.hbs' , '' ) ) ;
24+ } ) ;
25+ }
2426
25- sourceTemplateFilePaths . forEach ( sourceTemplateFilePath => {
27+ let sourceTemplatesPath = path . join ( this . options . projectRoot , 'app/templates' ) ;
28+ var sourceTemplateFilePaths = glob . sync ( `${ sourceTemplatesPath } /**/*.hbs` ) ;
29+ let templatesInPartials = getPartialTemplates ( sourceTemplateFilePaths ) ;
30+ if ( templatesInPartials . length ) {
31+ sourceComponentTemplateFilePaths = sourceComponentTemplateFilePaths . filter ( sourceTemplateFilePath => {
32+ let sourceTemplatePathInApp = sourceTemplateFilePath . slice ( this . options . projectRoot . length ) ; // '/app/templates/components/nested1/nested-component.hbs'
33+ if ( / \/ \- [ \w \- ] + \. h b s / . test ( sourceTemplatePathInApp ) ) {
34+ sourceTemplatePathInApp = sourceTemplatePathInApp . replace ( '/-' , '/' ) ;
35+ }
36+ let templatePath = sourceTemplatePathInApp . slice ( 'app/templates/' . length ) ; // '/nested1/nested-component.hbs'
37+ return ! templatesInPartials . includes ( templatePath . slice ( 1 ) . replace ( '.hbs' , '' ) ) ;
38+ } ) ;
39+ }
40+
41+ sourceComponentTemplateFilePaths . forEach ( sourceTemplateFilePath => {
2642 let sourceTemplatePathInApp = sourceTemplateFilePath . slice ( this . options . projectRoot . length ) ; // '/app/templates/components/nested1/nested-component.hbs'
2743 let templatePath = sourceTemplatePathInApp . slice ( 'app/templates/components/' . length ) ; // '/nested1/nested-component.hbs'
2844 let targetTemplateFilePath = path . join ( this . options . projectRoot , 'app/components' , templatePath ) ; // '[APP_PATH]/app/components/nested1/nested-component.hbs'
2945 moveFile ( sourceTemplateFilePath , targetTemplateFilePath ) ;
3046 } ) ;
3147
32- await fse . remove ( sourceComponentTemplatesPath ) ;
48+ templatesWithLayoutName . sort ( ) . forEach ( template => {
49+ console . info ( `❌ Did not move '${ template } ' due to usage as "layoutName" in a component` ) ;
50+ } ) ;
51+ templatesInPartials . sort ( ) . forEach ( template => {
52+ console . info ( `❌ Did not move '${ template } ' due to usage as a "partial"` ) ;
53+ } ) ;
54+
55+ let onlyRemoveEmptyDirs = Boolean ( templatesWithLayoutName . length ) ;
56+ await removeDirs ( sourceComponentTemplatesPath , onlyRemoveEmptyDirs ) ;
3357 }
3458}
0 commit comments