1
1
import * as express from 'express' ;
2
+ import * as fs from 'fs' ;
3
+ import * as path from 'path' ;
2
4
import { Request , Response , NextFunction } from 'express' ;
3
5
import httpResponse from '../utilities/http-response' ;
4
6
const router = express . Router ( ) ;
@@ -25,6 +27,45 @@ const filterNaN = (arr: number[]) => _.filter(arr, _.negate(_.isNaN));
25
27
26
28
const getNumberArrayFromQuery = ( value : string | string [ ] | undefined ) => filterNaN ( stringArrayToNumberArray ( getQueryParamArray ( value ) ) ) ;
27
29
30
+ const packageJSONPath = '../../package.json' ;
31
+
32
+ /**
33
+ * Get the version number at startup, however you'll have to await the result in the callback
34
+ * This should only be called once (same as if it was imported) and awaiting the promise will actually give you the result
35
+ * On error returns null so that the api is indicating that it wasn't just missed but couldn't be retrieved (undefined just doesn't return the key)
36
+ * Can't use import here because the rootDir is jailed to src (which makes sense)
37
+ */
38
+ const versionPromise = new Promise < string | null > ( ( resolve , reject ) => {
39
+ fs . readFile ( path . join ( __dirname , packageJSONPath ) , ( err : Error | null , data : Buffer ) => {
40
+ if ( err ) {
41
+ reject ( err ) ;
42
+ } else {
43
+ try {
44
+ // returns version string
45
+ resolve ( JSON . parse ( data . toString ( ) ) . version ) ;
46
+ } catch ( e ) {
47
+ reject ( e ) ;
48
+ }
49
+ }
50
+ } ) ;
51
+ } )
52
+ . catch ( ( err : Error ) => {
53
+ logger . error ( err ) ;
54
+ return null ;
55
+ } ) ;
56
+
57
+ router . use ( '/version' ,
58
+ async ( _req : Request , _res : Response , next : NextFunction ) => {
59
+ try {
60
+ const version = await versionPromise ;
61
+ next ( httpResponse . Ok ( null , {
62
+ packageJson : version
63
+ } ) ) ;
64
+ } catch ( e ) {
65
+ next ( e ) ;
66
+ }
67
+ } ) ;
68
+
28
69
router . get ( '/subjects' , async ( _req : Request , _res : Response , next : NextFunction ) => {
29
70
try {
30
71
const subjects = await prisma . opl_dbsubject . findMany ( ) ;
0 commit comments