@@ -5,18 +5,19 @@ const path = require('path');
5
5
const assert = require ( 'assert' ) ;
6
6
7
7
const babel = require ( '@babel/core' ) ;
8
- const prettier = require ( 'prettier' ) ;
9
8
10
- const prettierConfig = JSON . parse (
11
- fs . readFileSync ( require . resolve ( '../.prettierrc' ) , 'utf-8' ) ,
12
- ) ;
13
-
14
- const { readdirRecursive , showDirStats } = require ( './utils' ) ;
9
+ const {
10
+ writeGeneratedFile ,
11
+ readdirRecursive ,
12
+ showDirStats ,
13
+ } = require ( './utils' ) ;
15
14
16
15
if ( require . main === module ) {
17
16
fs . rmSync ( './npmDist' , { recursive : true , force : true } ) ;
18
17
fs . mkdirSync ( './npmDist' ) ;
19
18
19
+ const packageJSON = buildPackageJSON ( ) ;
20
+
20
21
const srcFiles = readdirRecursive ( './src' , { ignoreDir : / ^ _ _ .* _ _ $ / } ) ;
21
22
for ( const filepath of srcFiles ) {
22
23
const srcPath = path . join ( './src' , filepath ) ;
@@ -38,11 +39,7 @@ if (require.main === module) {
38
39
fs . copyFileSync ( './README.md' , './npmDist/README.md' ) ;
39
40
40
41
// Should be done as the last step so only valid packages can be published
41
- const packageJSON = buildPackageJSON ( ) ;
42
- fs . writeFileSync (
43
- './npmDist/package.json' ,
44
- JSON . stringify ( packageJSON , null , 2 ) ,
45
- ) ;
42
+ writeGeneratedFile ( './npmDist/package.json' , JSON . stringify ( packageJSON ) ) ;
46
43
47
44
showDirStats ( './npmDist' ) ;
48
45
}
@@ -65,6 +62,10 @@ function buildPackageJSON() {
65
62
delete packageJSON . scripts ;
66
63
delete packageJSON . devDependencies ;
67
64
65
+ // TODO: move to integration tests
66
+ const publishTag = packageJSON . publishConfig ?. tag ;
67
+ assert ( publishTag != null , 'Should have packageJSON.publishConfig defined!' ) ;
68
+
68
69
const { version } = packageJSON ;
69
70
const versionMatch = / ^ \d + \. \d + \. \d + - ? (?< preReleaseTag > .* ) ? $ / . exec ( version ) ;
70
71
if ( ! versionMatch ) {
@@ -74,20 +75,20 @@ function buildPackageJSON() {
74
75
const { preReleaseTag } = versionMatch . groups ;
75
76
76
77
if ( preReleaseTag != null ) {
77
- const [ tag ] = preReleaseTag . split ( '.' ) ;
78
+ const splittedTag = preReleaseTag . split ( '.' ) ;
79
+ // Note: `experimental-*` take precedence over `alpha`, `beta` or `rc`.
80
+ const versionTag = splittedTag [ 2 ] ?? splittedTag [ 0 ] ;
78
81
assert (
79
- tag . startsWith ( 'experimental-' ) || [ 'alpha' , 'beta' , 'rc' ] . includes ( tag ) ,
80
- `"${ tag } " tag is supported.` ,
82
+ [ 'alpha' , 'beta' , 'rc' ] . includes ( versionTag ) ||
83
+ versionTag . startsWith ( 'experimental-' ) ,
84
+ `"${ versionTag } " tag is not supported.` ,
85
+ ) ;
86
+ assert . equal (
87
+ versionTag ,
88
+ publishTag ,
89
+ 'Publish tag and version tag should match!' ,
81
90
) ;
82
-
83
- assert ( ! packageJSON . publishConfig , 'Can not override "publishConfig".' ) ;
84
- packageJSON . publishConfig = { tag : tag || 'latest' } ;
85
91
}
86
92
87
93
return packageJSON ;
88
94
}
89
-
90
- function writeGeneratedFile ( filepath , body ) {
91
- const formatted = prettier . format ( body , { filepath, ...prettierConfig } ) ;
92
- fs . writeFileSync ( filepath , formatted ) ;
93
- }
0 commit comments