@@ -14,14 +14,20 @@ import {
14
14
filter ,
15
15
mergeWith ,
16
16
move ,
17
+ noop ,
17
18
strings ,
18
19
url ,
19
20
} from '@angular-devkit/schematics' ;
21
+ import { promises as fs } from 'node:fs' ;
20
22
import { posix as path } from 'node:path' ;
21
23
import { relativePathToWorkspaceRoot } from '../utility/paths' ;
22
24
import { getWorkspace as readWorkspace , updateWorkspace } from '../utility/workspace' ;
23
25
import { Builders as AngularBuilder } from '../utility/workspace-models' ;
24
26
import { Schema as ConfigOptions , Type as ConfigType } from './schema' ;
27
+ import { JSONFile } from '../utility/json-file' ;
28
+ import { addPackageJsonDependency , NodeDependencyType } from '../utility/dependencies' ;
29
+ import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks' ;
30
+ import { latestVersions } from '../utility/latest-versions' ;
25
31
26
32
export default function ( options : ConfigOptions ) : Rule {
27
33
switch ( options . type ) {
@@ -35,20 +41,42 @@ export default function (options: ConfigOptions): Rule {
35
41
}
36
42
37
43
function addBrowserslistConfig ( options : ConfigOptions ) : Rule {
38
- return async ( host ) => {
44
+ return async ( host , context ) => {
39
45
const workspace = await readWorkspace ( host ) ;
40
46
const project = workspace . projects . get ( options . project ) ;
41
47
if ( ! project ) {
42
48
throw new SchematicsException ( `Project name "${ options . project } " doesn't not exist.` ) ;
43
49
}
44
50
45
- return mergeWith (
46
- apply ( url ( './files' ) , [
47
- filter ( ( p ) => p . endsWith ( '.browserslistrc.template' ) ) ,
48
- applyTemplates ( { } ) ,
49
- move ( project . root ) ,
50
- ] ) ,
51
+ // Read Angular's default vendored `.browserslistrc` file.
52
+ const config = JSON . parse (
53
+ await fs . readFile ( path . join ( __dirname , 'baseline/package.json' ) , 'utf8' ) ,
54
+ ) ;
55
+ const widelyAvailableOnDate = config . bl2bl . baselineThreshold as string ;
56
+
57
+ const pkgJson = new JSONFile ( host , 'package.json' ) ;
58
+ pkgJson . modify (
59
+ [ 'browserslist' ] ,
60
+ [ 'extends browserslist-config-baseline' ] ,
61
+ /* insertInOrder */ false ,
62
+ ) ;
63
+ pkgJson . modify (
64
+ [ 'browserslist-config-baseline' ] ,
65
+ {
66
+ widelyAvailableOnDate,
67
+ } ,
68
+ /* insertInOrder */ false ,
51
69
) ;
70
+
71
+ addPackageJsonDependency ( host , {
72
+ type : NodeDependencyType . Dev ,
73
+ name : 'browserslist-config-baseline' ,
74
+ version : latestVersions [ 'browserslist-config-baseline' ] ,
75
+ } ) ;
76
+
77
+ context . addTask ( new NodePackageInstallTask ( ) ) ;
78
+
79
+ return noop ;
52
80
} ;
53
81
}
54
82
0 commit comments