Pre-compile Message validator

Use a script to pre-compile the validator for the Message class to
reduce the loading time for ctl by about 40ms.
This commit is contained in:
Hornwitser committed 2023-07-30 01:54:59 +02:00
1 parent ae542e9501
commit 5eb91be6fb
5 files changed
+36 -2

No files matched your search

+1
View File
@@ -0,0 +1 @@
src/data/message_validate.js
View File
Whitespace-only changes.
+4
View File
@@ -4,6 +4,10 @@
"version": "2.0.0-alpha.13",
"repository": "https://github.com/clusterio/clusterio",
"license": "MIT",
"scripts": {
"prepare": "pnpm run compile_validator",
"compile_validator": "node scripts/compile_validator.js"
},
"browser": "browser.js",
"keywords": [
"factorio"
+28
View File
@@ -0,0 +1,28 @@
"use strict";
const fs = require("fs-extra");
const path = require("path");
const Ajv = require("ajv");
const standaloneCode = require("ajv/dist/standalone").default;
/* eslint-disable node/no-sync */
// Provide an empty file for message_core to load
fs.outputFileSync(path.join(__dirname, "../src/data/message_validate.js"), "");
const { Message } = require("../src/data/messages_core");
const ajv = new Ajv({
allowUnionTypes: true,
strict: "log",
strictTuples: false,
verbose: true,
code: {
source: true,
},
});
const validate = ajv.compile(Message.jsonSchema);
let moduleCode = standaloneCode(ajv, validate);
fs.outputFileSync(
path.join(__dirname, "../src/data/message_validate.js"),
`// generated by scripts/compile_validator.js\n/* eslint-disable */\n${moduleCode}`
);
+3 -2
View File
@@ -1,5 +1,6 @@
// Note: Run compile_validator script after making changes to this file.
"use strict";
const libSchema = require("../schema");
const message_validate = require("./message_validate.js");
/** @memberof module:lib */
@@ -851,7 +852,7 @@ Message.jsonSchema = {
MessageDisconnect.jsonSchema,
],
};
Message.validate = libSchema.compile(Message.jsonSchema);
Message.validate = message_validate;
/** @memberof module:lib */
class PingRequest {