Merge pull request #490 from Hornwitser/speedup-ctl

Speedup ctl
This commit is contained in:
Hornwitser authored and GitHub committed 2023-07-30 02:27:19 +02:00
commit a1ee147c46
7 files changed
+63 -9

No files matched your search

+2
View File
@@ -10,6 +10,8 @@ const yargs = require("yargs");
const version = require("./package").version;
const setBlocking = require("set-blocking");
// Reduce startup time by lazy compiling schemas.
global.lazySchemaCompilation = true;
const lib = require("@clusterio/lib");
const { ConsoleTransport, levels, logger } = lib;
+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 {
+25 -7
View File
@@ -5,18 +5,36 @@
"use strict";
const Ajv = require("ajv");
const ajv = new Ajv({
// These are duplicated in scripts/compile_validator
allowUnionTypes: true,
strict: "log",
strictTuples: false,
verbose: true,
});
/**
* Compile JSON schema into validator
* @function
* @param {Object} schema - JSON schema to create validator for.
* @returns {Function} Validator for the schema.
*/
function compile(schema) {
if (typeof global !== "object" || !global.lazySchemaCompilation) {
return ajv.compile(schema);
}
let doValidate;
function validate(data) {
if (!doValidate) {
doValidate = ajv.compile(schema);
}
let result = doValidate(data);
validate.errors = doValidate.errors;
return result;
}
return validate;
}
module.exports = {
/**
* Compile JSON schema into validator
* @function
* @param {Object} schema - JSON schema to create validator for.
* @returns {Function} Validator for the schema.
*/
compile: ajv.compile.bind(ajv),
compile,
};