diff --git a/packages/lib/.gitignore b/packages/lib/.gitignore new file mode 100644 index 00000000..922aef1f --- /dev/null +++ b/packages/lib/.gitignore @@ -0,0 +1 @@ +src/data/message_validate.js diff --git a/packages/lib/.npmignore b/packages/lib/.npmignore new file mode 100644 index 00000000..e69de29b diff --git a/packages/lib/package.json b/packages/lib/package.json index 635d1599..ce052530 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -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" diff --git a/packages/lib/scripts/compile_validator.js b/packages/lib/scripts/compile_validator.js new file mode 100644 index 00000000..bc90dcf4 --- /dev/null +++ b/packages/lib/scripts/compile_validator.js @@ -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}` +); diff --git a/packages/lib/src/data/messages_core.js b/packages/lib/src/data/messages_core.js index 14e090f9..beda4502 100644 --- a/packages/lib/src/data/messages_core.js +++ b/packages/lib/src/data/messages_core.js @@ -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 {