repositories
/
e-mobility-charging-stations-simulator.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix: refine CS registration error message
[e-mobility-charging-stations-simulator.git]
/
src
/
charging-station
/
ocpp
/
OCPPIncomingRequestService.ts
diff --git
a/src/charging-station/ocpp/OCPPIncomingRequestService.ts
b/src/charging-station/ocpp/OCPPIncomingRequestService.ts
index b7ab8ef66382b1ac0e799294eccca7f676480855..28de507774a281aeeb0d32b4d17b1348b45d50c5 100644
(file)
--- a/
src/charging-station/ocpp/OCPPIncomingRequestService.ts
+++ b/
src/charging-station/ocpp/OCPPIncomingRequestService.ts
@@
-1,6
+1,6
@@
import { AsyncResource } from 'node:async_hooks';
import { AsyncResource } from 'node:async_hooks';
-import Ajv, { type JSONSchemaType } from 'ajv';
+import Ajv, { type JSONSchemaType
, type ValidateFunction
} from 'ajv';
import ajvFormats from 'ajv-formats';
import { OCPPConstants } from './OCPPConstants';
import ajvFormats from 'ajv-formats';
import { OCPPConstants } from './OCPPConstants';
@@
-11,7
+11,6
@@
import type {
ClearCacheResponse,
HandleErrorParams,
IncomingRequestCommand,
ClearCacheResponse,
HandleErrorParams,
IncomingRequestCommand,
- JsonObject,
JsonType,
OCPPVersion,
} from '../../types';
JsonType,
OCPPVersion,
} from '../../types';
@@
-23,7
+22,8
@@
export abstract class OCPPIncomingRequestService extends AsyncResource {
private static instance: OCPPIncomingRequestService | null = null;
private readonly version: OCPPVersion;
private readonly ajv: Ajv;
private static instance: OCPPIncomingRequestService | null = null;
private readonly version: OCPPVersion;
private readonly ajv: Ajv;
- protected abstract jsonSchemas: Map<IncomingRequestCommand, JSONSchemaType<JsonObject>>;
+ private jsonValidateFunctions: Map<IncomingRequestCommand, ValidateFunction<JsonType>>;
+ protected abstract jsonSchemas: Map<IncomingRequestCommand, JSONSchemaType<JsonType>>;
protected constructor(version: OCPPVersion) {
super(moduleName);
protected constructor(version: OCPPVersion) {
super(moduleName);
@@
-33,6
+33,7
@@
export abstract class OCPPIncomingRequestService extends AsyncResource {
multipleOfPrecision: 2,
});
ajvFormats(this.ajv);
multipleOfPrecision: 2,
});
ajvFormats(this.ajv);
+ this.jsonValidateFunctions = new Map<IncomingRequestCommand, ValidateFunction<JsonType>>();
this.incomingRequestHandler = this.incomingRequestHandler.bind(this) as <
ReqType extends JsonType,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
this.incomingRequestHandler = this.incomingRequestHandler.bind(this) as <
ReqType extends JsonType,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
@@
-88,10
+89,13
@@
export abstract class OCPPIncomingRequestService extends AsyncResource {
schema: JSONSchemaType<T>,
payload: T,
): boolean {
schema: JSONSchemaType<T>,
payload: T,
): boolean {
- if (chargingStation.
getOcppStrictCompliance()
=== false) {
+ if (chargingStation.
stationInfo?.ocppStrictCompliance
=== false) {
return true;
}
return true;
}
- const validate = this.ajv.compile(schema);
+ if (this.jsonValidateFunctions.has(commandName) === false) {
+ this.jsonValidateFunctions.set(commandName, this.ajv.compile<T>(schema).bind(this));
+ }
+ const validate = this.jsonValidateFunctions.get(commandName)!;
if (validate(payload)) {
return true;
}
if (validate(payload)) {
return true;
}
@@
-100,10
+104,10
@@
export abstract class OCPPIncomingRequestService extends AsyncResource {
validate.errors,
);
throw new OCPPError(
validate.errors,
);
throw new OCPPError(
- OCPPServiceUtils.ajvErrorsToErrorType(validate.errors
!
),
+ OCPPServiceUtils.ajvErrorsToErrorType(validate.errors),
'Incoming request PDU is invalid',
commandName,
'Incoming request PDU is invalid',
commandName,
- JSON.stringify(validate.errors,
null
, 2),
+ JSON.stringify(validate.errors,
undefined
, 2),
);
}
);
}