1+ 'use strict' ;
2+
3+ var fs = require ( 'fs' ) ;
4+ var path = require ( 'path' ) ;
5+ var encodeVersion = require ( './encodeVersion' ) ;
6+ var getSDKFeatureCode = require ( './getSDKFeatureCode' ) ;
7+ var SDKCode = 'M' ; // Constant per SDK
8+
9+
10+ /**
11+ * @description Removes patch version from the semver if it exists
12+ * Turns x.y.z OR x.y into x.y
13+ * @param {'x.y.z' || 'x.y' || string } semVerStr
14+ */
15+ function removePatchFromSemver ( semVerStr ) {
16+ var parts = semVerStr . split ( '.' ) ;
17+
18+ return `${ parts [ 0 ] } .${ parts [ 1 ] } ` ;
19+ }
20+
21+ /**
22+ * @description Gets the SDK signature by encoding the SDK version and node version
23+ * @param {{responsive:boolean} } features
24+ * @param {'default' | 'x.y.z' | 'x.y' | string } useSDKVersion Default uses package.json version
25+ * @param {'default' | 'x.y.z' | 'x.y' | string } useNodeVersion Default uses process.versions.node
26+ * @return {string } encodedSDK sdkVersionID
27+ */
28+ function getSDKVersionID ( ) {
29+ var features = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
30+ var useSDKVersion = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : 'default' ;
31+ var useNodeVersion = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : 'default' ;
32+
33+ try {
34+ // allow to pass a custom SDKVersion
35+ var pkgJSONFile = fs . readFileSync ( path . join ( __dirname , '../../../../package.json' ) , 'utf-8' ) ;
36+
37+ var sdkVersion = useSDKVersion === 'default' ? JSON . parse ( pkgJSONFile ) . version : useSDKVersion ;
38+
39+ // allow to pass a custom nodeVersion
40+ var nodeVersion = useNodeVersion === 'default' ? process . versions . node : useNodeVersion ;
41+
42+ // Node version should always be in x.y format
43+ var twoPartNodeVersion = removePatchFromSemver ( nodeVersion ) ;
44+ var encodedSDKVersion = encodeVersion ( sdkVersion ) ;
45+ var encodedNodeVersion = encodeVersion ( twoPartNodeVersion ) ;
46+ var featureCode = getSDKFeatureCode ( features ) ;
47+
48+ return `${ SDKCode } ${ encodedSDKVersion } ${ encodedNodeVersion } ${ featureCode } ` ;
49+ } catch ( e ) {
50+ // Either SDK or Node versions were unparsable
51+ return 'E' ;
52+ }
53+ }
54+
55+ module . exports = getSDKVersionID ;
0 commit comments