@@ -10,6 +10,8 @@ const parser = require("./parser");
10
10
const tokens = require ( "./tokens" ) ;
11
11
const AST = require ( "./ast" ) ;
12
12
13
+ const DEFAULT_PHP_VERSION = "8.4" ;
14
+
13
15
/**
14
16
* @private
15
17
*/
@@ -43,10 +45,10 @@ function combine(src, to) {
43
45
* @example
44
46
* var parser = require('php-parser');
45
47
* var instance = new parser({
48
+ * version: 704 // or '7.4'
46
49
* parser: {
47
50
* extractDoc: true,
48
51
* suppressErrors: true,
49
- * version: 704 // or '7.4'
50
52
* },
51
53
* ast: {
52
54
* withPositions: true
@@ -81,30 +83,40 @@ const Engine = function (options) {
81
83
if ( ! options . lexer ) {
82
84
options . lexer = { } ;
83
85
}
84
- if ( options . parser . version ) {
85
- if ( typeof options . parser . version === "string" ) {
86
- let version = options . parser . version . split ( "." ) ;
87
- version = parseInt ( version [ 0 ] ) * 100 + parseInt ( version [ 1 ] ) ;
88
- if ( isNaN ( version ) ) {
89
- throw new Error ( "Bad version number : " + options . parser . version ) ;
90
- } else {
91
- options . parser . version = version ;
92
- }
93
- } else if ( typeof options . parser . version !== "number" ) {
94
- throw new Error ( "Expecting a number for version" ) ;
95
- }
96
- if ( options . parser . version < 500 || options . parser . version > 900 ) {
97
- throw new Error ( "Can only handle versions between 5.x to 8.x" ) ;
98
- }
99
- }
100
86
}
101
87
combine ( options , this ) ;
102
-
103
- // same version flags based on parser options
104
- this . lexer . version = this . parser . version ;
105
88
}
89
+
90
+ // options.parser.version is deprecated, use options.version instead
91
+ const versionString = options ?. version ?? options ?. parser ?. version ;
92
+ this . version = normalizeVersion ( versionString ?? DEFAULT_PHP_VERSION ) ;
106
93
} ;
107
94
95
+ /**
96
+ * Validate and normalize a version (string or number) to a version number
97
+ * @private
98
+ * @param {String|Number } versionString - The version string or number to
99
+ * validate and normalize, e.g., "7.4", or 704
100
+ * @return {Number } - The normalized version number, e.g. 704
101
+ * @throws {Error } - If the version is not a valid number or out of range
102
+ */
103
+ function normalizeVersion ( versionString ) {
104
+ let version = versionString ;
105
+ if ( typeof version === "string" ) {
106
+ const versionParts = version . split ( "." ) ;
107
+ version = parseInt ( versionParts [ 0 ] ) * 100 + parseInt ( versionParts [ 1 ] ) ;
108
+ if ( isNaN ( version ) ) {
109
+ throw new Error ( "Bad version number : " + versionString ) ;
110
+ }
111
+ } else if ( typeof version !== "number" ) {
112
+ throw new Error ( "Expecting a string or number for version" ) ;
113
+ }
114
+ if ( version < 500 || version > 900 ) {
115
+ throw new Error ( "Can only handle versions between 5.x to 8.x" ) ;
116
+ }
117
+ return version ;
118
+ }
119
+
108
120
/**
109
121
* Check if the inpyt is a buffer or a string
110
122
* @private
0 commit comments