1
- import { CompasSettings } from "../compas/CompasSettings.js" ;
2
- import { handleError , handleResponse , parseXml } from "./foundation.js" ;
1
+ import { CompasSettings } from "../compas/CompasSettings.js" ;
2
+ import {
3
+ createLogEvent ,
4
+ handleError ,
5
+ handleResponse ,
6
+ parseXml
7
+ } from "./foundation.js" ;
3
8
4
9
export const SVS_NAMESPACE = 'https://www.lfenergy.org/compas/SclValidatorService/v1' ;
5
10
@@ -8,23 +13,77 @@ export function CompasSclValidatorService() {
8
13
return CompasSettings ( ) . compasSettings ;
9
14
}
10
15
16
+ function getWebsocketPort ( ) : string {
17
+ if ( document . location . port === "" ) {
18
+ return ( document . location . protocol == "http:" ? "80" : "443" )
19
+ }
20
+ return document . location . port ;
21
+ }
22
+
23
+ function getWebsocketUri ( ) : string {
24
+ const sclValidatorServiceUrl = getCompasSettings ( ) . sclValidatorServiceUrl ;
25
+ if ( sclValidatorServiceUrl . startsWith ( "ws://" ) || sclValidatorServiceUrl . startsWith ( "wss://" ) ) {
26
+ return sclValidatorServiceUrl + ( sclValidatorServiceUrl . endsWith ( "/" ) ? "" : "/" ) ;
27
+ }
28
+
29
+ return ( document . location . protocol == "http:" ? "ws://" : "wss://" )
30
+ + document . location . hostname + ":" + getWebsocketPort ( )
31
+ + sclValidatorServiceUrl + ( sclValidatorServiceUrl . endsWith ( "/" ) ? "" : "/" ) ;
32
+ }
33
+
34
+ function createRequest ( doc : Document ) : string {
35
+ return `<?xml version="1.0" encoding="UTF-8"?>
36
+ <svs:SclValidateRequest xmlns:svs="${ SVS_NAMESPACE } ">
37
+ <svs:SclData><![CDATA[${ new XMLSerializer ( ) . serializeToString ( doc . documentElement ) } ]]></svs:SclData>
38
+ </svs:SclValidateRequest>` ;
39
+ }
40
+
11
41
return {
12
- validateSCL ( type : string , doc : Document ) : Promise < Document > {
42
+ useWebsocket ( ) : boolean {
43
+ const sclValidatorServiceUrl = getCompasSettings ( ) . sclValidatorServiceUrl ;
44
+ return ! sclValidatorServiceUrl . startsWith ( "http" ) ;
45
+ } ,
46
+
47
+ validateSCLUsingRest ( type : string , doc : Document ) : Promise < Document > {
13
48
const svsUrl = getCompasSettings ( ) . sclValidatorServiceUrl + '/validate/v1/' + type ;
14
49
return fetch ( svsUrl , {
15
50
method : 'POST' ,
16
51
headers : {
17
52
'Content-Type' : 'application/xml'
18
53
} ,
19
- body : `<?xml version="1.0" encoding="UTF-8"?>
20
- <svs:SclValidateRequest xmlns:svs="${ SVS_NAMESPACE } ">
21
- <svs:SclData><![CDATA[${ new XMLSerializer ( ) . serializeToString ( doc . documentElement ) } ]]></svs:SclData>
22
- </svs:SclValidateRequest>`
54
+ body : createRequest ( doc )
23
55
} ) . catch ( handleError )
24
56
. then ( handleResponse )
25
57
. then ( parseXml ) ;
26
58
} ,
27
59
60
+ validateSCLUsingWebsockets ( type : string , doc : Document , callback : ( doc : Document ) => void ) {
61
+ const websocket = new WebSocket ( getWebsocketUri ( ) + 'validate-ws/v1/' + type ) ;
62
+
63
+ websocket . onopen = ( ) => {
64
+ websocket . send ( createRequest ( doc ) ) ;
65
+ } ;
66
+
67
+ websocket . onmessage = ( evt ) => {
68
+ parseXml ( evt . data )
69
+ . then ( doc => {
70
+ callback ( doc ) ;
71
+ websocket . close ( ) ;
72
+ } )
73
+ . catch ( reason => {
74
+ createLogEvent ( reason ) ;
75
+ websocket . close ( ) ;
76
+ } ) ;
77
+ } ;
78
+
79
+ websocket . onerror = ( ) => {
80
+ createLogEvent (
81
+ { message : 'Websocket Error' ,
82
+ type : 'Error' } )
83
+ websocket . close ( ) ;
84
+ } ;
85
+ } ,
86
+
28
87
listNsdocFiles ( ) : Promise < Document > {
29
88
const svsUrl = getCompasSettings ( ) . sclValidatorServiceUrl + '/nsdoc/v1' ;
30
89
return fetch ( svsUrl ) . catch ( handleError )
0 commit comments