@@ -5,6 +5,7 @@ var clangFormat = require('clang-format');
5
5
var gulpFormat = require ( 'gulp-clang-format' ) ;
6
6
var runSequence = require ( 'run-sequence' ) ;
7
7
var spawn = require ( 'child_process' ) . spawn ;
8
+ var spawnSync = require ( 'child_process' ) . spawnSync ;
8
9
var fs = require ( 'fs' ) ;
9
10
var path = require ( 'path' ) ;
10
11
var glob = require ( 'glob' ) ;
@@ -32,6 +33,30 @@ var runSpawn = function(done, task, opt_arg, opt_io) {
32
33
} ) ;
33
34
} ;
34
35
36
+ // prevent contributors from using the wrong version of node
37
+ gulp . task ( 'checkVersion' , function ( done ) {
38
+ var version = spawnSync ( 'node' , [ '--version' ] ) . stdout . toString ( ) ;
39
+ var versionArray = version . replace ( 'v' , '' ) . split ( '.' ) ;
40
+ var major = versionArray [ 0 ] ;
41
+ var minor = versionArray [ 1 ] ;
42
+
43
+ // read minimum node on package.json
44
+ var packageJson = JSON . parse ( fs . readFileSync ( path . resolve ( 'package.json' ) ) ) ;
45
+ var protractorVersion = packageJson . version ;
46
+ var nodeVersion = packageJson . engines . node . replace ( '>=' , '' ) ;
47
+ var nodeVersionArray = nodeVersion . split ( '.' ) ;
48
+ var requiredMajor = nodeVersionArray [ 0 ] ;
49
+ var requiredMinor = nodeVersionArray [ 1 ] ;
50
+
51
+ if ( major >= requiredMajor && minor >= requiredMinor ) {
52
+ done ( ) ;
53
+ } else {
54
+ console . error ( 'minimum node version for Protractor ' + protractorVersion +
55
+ ' is node >= ' + nodeVersion ) ;
56
+ return 1 ;
57
+ }
58
+ } ) ;
59
+
35
60
gulp . task ( 'built:copy' , function ( ) {
36
61
return gulp . src ( [ 'lib/**/*' , '!lib/**/*.ts' ] )
37
62
. pipe ( gulp . dest ( 'built/' ) ) ;
@@ -47,16 +72,16 @@ gulp.task('jshint', function(done) {
47
72
'spec/install/**/*.js' ] ) ;
48
73
} ) ;
49
74
50
- gulp . task ( 'format:enforce' , ( ) => {
51
- const format = require ( 'gulp-clang-format' ) ;
52
- const clangFormat = require ( 'clang-format' ) ;
75
+ gulp . task ( 'format:enforce' , function ( ) {
76
+ var format = require ( 'gulp-clang-format' ) ;
77
+ var clangFormat = require ( 'clang-format' ) ;
53
78
return gulp . src ( [ 'lib/**/*.ts' ] ) . pipe (
54
79
format . checkFormat ( 'file' , clangFormat , { verbose : true , fail : true } ) ) ;
55
80
} ) ;
56
81
57
- gulp . task ( 'format' , ( ) => {
58
- const format = require ( 'gulp-clang-format' ) ;
59
- const clangFormat = require ( 'clang-format' ) ;
82
+ gulp . task ( 'format' , function ( ) {
83
+ var format = require ( 'gulp-clang-format' ) ;
84
+ var clangFormat = require ( 'clang-format' ) ;
60
85
return gulp . src ( [ 'lib/**/*.ts' ] , { base : '.' } ) . pipe (
61
86
format . format ( 'file' , clangFormat ) ) . pipe ( gulp . dest ( '.' ) ) ;
62
87
} ) ;
@@ -71,12 +96,12 @@ gulp.task('tsc:globals', function(done) {
71
96
} ) ;
72
97
73
98
gulp . task ( 'prepublish' , function ( done ) {
74
- runSequence ( [ 'jshint' , 'format' ] , 'tsc' , 'tsc:globals' , 'types' ,
99
+ runSequence ( 'checkVersion' , [ 'jshint' , 'format' ] , 'tsc' , 'tsc:globals' , 'types' ,
75
100
'ambient' , 'built:copy' , done ) ;
76
101
} ) ;
77
102
78
103
gulp . task ( 'pretest' , function ( done ) {
79
- runSequence (
104
+ runSequence ( 'checkVersion' ,
80
105
[ 'webdriver:update' , 'jshint' , 'format' ] , 'tsc' , 'tsc:globals' ,
81
106
'types' , 'ambient' , 'built:copy' , done ) ;
82
107
} ) ;
@@ -93,12 +118,12 @@ gulp.task('types', function(done) {
93
118
contents += '/// <reference path="../../@types/jasmine/index.d.ts" />\n' ;
94
119
contents += '/// <reference path="../typings/index.d.ts" />\n' ;
95
120
contents += 'import {ActionSequence, By, WebDriver, WebElement, WebElementPromise, promise, promise as wdpromise, until} from \'selenium-webdriver\';\n' ;
96
- files . forEach ( file => {
121
+ files . forEach ( function ( file ) {
97
122
contents += parseTypingsFile ( folder , file ) ;
98
123
} ) ;
99
124
100
125
// remove files with d.ts
101
- glob . sync ( folder + '/**/*.d.ts' ) . forEach ( file => {
126
+ glob . sync ( folder + '/**/*.d.ts' ) . forEach ( function ( file ) {
102
127
fs . unlinkSync ( path . resolve ( file ) ) ;
103
128
} ) ;
104
129
@@ -111,7 +136,7 @@ var parseTypingsFile = function(folder, file) {
111
136
var fileContents = fs . readFileSync ( path . resolve ( folder , file + '.d.ts' ) ) . toString ( ) ;
112
137
// Remove new lines inside types
113
138
fileContents = fileContents . replace (
114
- / w e b d r i v e r .p r o m i s e .P r o m i s e < \{ [ a - z A - Z : , ; \n ] + \} > / g, ( type ) => {
139
+ / w e b d r i v e r .p r o m i s e .P r o m i s e < \{ [ a - z A - Z : , ; \n ] + \} > / g, function ( type ) {
115
140
return type . replace ( / \n / g, '' ) ;
116
141
}
117
142
) ;
0 commit comments