1
- import { TodoConfig } from '@ember-template-lint/todo-utils' ;
2
- import { execSync } from 'child_process' ;
1
+ import {
2
+ DaysToDecay ,
3
+ DaysToDecayByRule ,
4
+ LintTodoPackageJson ,
5
+ TodoConfigByEngine ,
6
+ } from '@ember-template-lint/todo-utils' ;
7
+ import { dirname , join } from 'path' ;
3
8
import fixturify from 'fixturify' ;
4
9
import Project from 'fixturify-project' ;
10
+ import { mkdirpSync , symlinkSync } from 'fs-extra' ;
5
11
6
12
const DEFAULT_ESLINT_CONFIG = `{
7
13
"env": {
@@ -67,7 +73,7 @@ export class FakeProject extends Project {
67
73
static getInstance ( ) : FakeProject {
68
74
const project = new this ( ) ;
69
75
70
- project . addDevDependency ( 'eslint' , '^7.10.0' ) ;
76
+ // project.addDevDependency('eslint', '^7.10.0');
71
77
72
78
project . files [ 'eslint-config.json' ] = DEFAULT_ESLINT_CONFIG ;
73
79
@@ -82,30 +88,83 @@ export class FakeProject extends Project {
82
88
description : 'Fake project' ,
83
89
repository : 'http://fakerepo.com' ,
84
90
} ) ;
91
+
92
+ // link binary
93
+ this . symlink (
94
+ join ( __dirname , '../..' , 'node_modules' , '.bin' , 'eslint' ) ,
95
+ join ( this . baseDir , 'node_modules' , '.bin' , 'eslint' )
96
+ ) ;
97
+
98
+ // link package
99
+ this . symlink (
100
+ join ( __dirname , '../..' , 'node_modules' , 'eslint' ) ,
101
+ join ( this . baseDir , 'node_modules' , 'eslint' )
102
+ ) ;
85
103
}
86
104
87
105
write ( dirJSON : fixturify . DirJSON ) : void {
88
106
Object . assign ( this . files , dirJSON ) ;
89
107
this . writeSync ( ) ;
90
108
}
91
109
92
- writeTodoConfig ( todoConfig : TodoConfig ) : void {
110
+ setShorthandPackageJsonTodoConfig ( daysToDecay : DaysToDecay ) : void {
93
111
this . pkg = Object . assign ( { } , this . pkg , {
94
112
lintTodo : {
95
- daysToDecay : todoConfig ,
113
+ daysToDecay,
96
114
} ,
97
115
} ) ;
98
116
99
117
this . writeSync ( ) ;
100
118
}
101
119
102
- install ( ) : void {
103
- const cmd = 'yarn install --silent' ;
120
+ setPackageJsonTodoConfig (
121
+ daysToDecay : DaysToDecay ,
122
+ daysToDecayByRule ?: DaysToDecayByRule
123
+ ) : void {
124
+ const todoConfig : LintTodoPackageJson = {
125
+ lintTodo : {
126
+ eslint : {
127
+ daysToDecay,
128
+ } ,
129
+ } ,
130
+ } ;
131
+
132
+ if ( daysToDecayByRule ) {
133
+ ( < TodoConfigByEngine > todoConfig . lintTodo ) ! [ 'eslint' ] . daysToDecayByRule =
134
+ daysToDecayByRule ;
135
+ }
136
+
137
+ this . pkg = Object . assign ( { } , this . pkg , todoConfig ) ;
138
+
139
+ this . writeSync ( ) ;
140
+ }
141
+
142
+ setLintTodorc (
143
+ daysToDecay : DaysToDecay ,
144
+ daysToDecayByRule ?: DaysToDecayByRule
145
+ ) : void {
146
+ const todoConfig : TodoConfigByEngine = {
147
+ eslint : {
148
+ daysToDecay,
149
+ } ,
150
+ } ;
104
151
105
- try {
106
- execSync ( cmd , { cwd : this . baseDir } ) ;
107
- } catch {
108
- throw new Error ( `Couldn't install dependencies using ${ cmd } ` ) ;
152
+ if ( daysToDecayByRule ) {
153
+ todoConfig [ 'eslint' ] . daysToDecayByRule = daysToDecayByRule ;
109
154
}
155
+
156
+ this . write ( {
157
+ '.lint-todorc.js' : `module.exports = ${ JSON . stringify (
158
+ todoConfig ,
159
+ // eslint-disable-next-line unicorn/no-null
160
+ null ,
161
+ 2
162
+ ) } `,
163
+ } ) ;
164
+ }
165
+
166
+ symlink ( source : string , target : string ) : void {
167
+ mkdirpSync ( dirname ( target ) ) ;
168
+ symlinkSync ( source , target ) ;
110
169
}
111
170
}
0 commit comments