From 90798205e029c7855b82b1e3f445fa32f945ebeb Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sun, 30 Jul 2023 01:42:30 +0200 Subject: [PATCH] Set up TypeScript for lib Add a TypeScript build suitable for incremental migration to TypeScript to the lib package. --- packages/lib/browser.js | 28 ++++----- packages/lib/index.js | 63 ------------------- packages/lib/index.ts | 31 +++++++++ packages/lib/package.json | 7 ++- packages/lib/scripts/compile_validator.js | 2 +- packages/lib/src/config/index.js | 13 ---- packages/lib/src/config/index.ts | 7 +++ packages/lib/src/data/composites.js | 9 ++- packages/lib/src/data/index.js | 31 --------- packages/lib/src/data/index.ts | 16 +++++ packages/lib/src/data/message_validate.d.ts | 2 + .../lib/src/factorio/{index.js => index.ts} | 7 +-- packages/lib/src/link/index.js | 17 ----- packages/lib/src/link/index.ts | 11 ++++ packages/lib/src/logging_utils.js | 4 +- packages/lib/tsconfig.json | 18 ++++++ 16 files changed, 115 insertions(+), 151 deletions(-) delete mode 100644 packages/lib/index.js create mode 100644 packages/lib/index.ts delete mode 100644 packages/lib/src/config/index.js create mode 100644 packages/lib/src/config/index.ts delete mode 100644 packages/lib/src/data/index.js create mode 100644 packages/lib/src/data/index.ts create mode 100644 packages/lib/src/data/message_validate.d.ts rename packages/lib/src/factorio/{index.js => index.ts} (50%) delete mode 100644 packages/lib/src/link/index.js create mode 100644 packages/lib/src/link/index.ts create mode 100644 packages/lib/tsconfig.json diff --git a/packages/lib/browser.js b/packages/lib/browser.js index 29cce7f5..1f2d0428 100644 --- a/packages/lib/browser.js +++ b/packages/lib/browser.js @@ -1,15 +1,15 @@ -export * from "./src/config"; -export * from "./src/data"; -export * from "./src/errors"; -export * from "./src/factorio/exchange_string"; -export * from "./src/helpers"; -export * from "./src/ini"; -export * from "./src/link"; -export * from "./src/logging"; -export * from "./src/plugin"; -export * from "./src/schema"; -export * from "./src/users"; +export * from "./dist/src/config"; +export * from "./dist/src/data"; +export * from "./dist/src/errors"; +export * from "./dist/src/factorio/exchange_string"; +export * from "./dist/src/helpers"; +export * from "./dist/src/ini"; +export * from "./dist/src/link"; +export * from "./dist/src/logging"; +export * from "./dist/src/plugin"; +export * from "./dist/src/schema"; +export * from "./dist/src/users"; -export { default as ExponentialBackoff } from "./src/ExponentialBackoff"; -export { default as PlayerStats } from "./src/PlayerStats"; -export { default as RateLimiter } from "./src/RateLimiter"; +export { default as ExponentialBackoff } from "./dist/src/ExponentialBackoff"; +export { default as PlayerStats } from "./dist/src/PlayerStats"; +export { default as RateLimiter } from "./dist/src/RateLimiter"; diff --git a/packages/lib/index.js b/packages/lib/index.js deleted file mode 100644 index 2fce1f00..00000000 --- a/packages/lib/index.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Shared library for Clusterio - * @module lib - */ -"use strict"; -const libBuildMod = require("./build_mod"); -const libCommand = require("./src/command"); -const libConfig = require("./src/config"); -const libData = require("./src/data"); -const libDatabase = require("./src/database"); -const libErrors = require("./src/errors"); -const libFactorio = require("./src/factorio"); -const libFileOps = require("./src/file_ops"); -const libHash = require("./src/hash"); -const libHelpers = require("./src/helpers"); -const libIni = require("./src/ini"); -const libLink = require("./src/link"); -const libLogging = require("./src/logging"); -const libLoggingUtils = require("./src/logging_utils"); -const libLuaTools = require("./src/lua_tools"); -const libPlugin = require("./src/plugin"); -const libPluginLoader = require("./src/plugin_loader"); -const libPrometheus = require("./src/prometheus"); -const libSchema = require("./src/schema"); -const libSharedCommands = require("./src/shared_commands"); -const libStream = require("./src/stream"); -const libUsers = require("./src/users"); -const libZipOps = require("./src/zip_ops"); - -const ExponentialBackoff = require("./src/ExponentialBackoff"); -const PlayerStats = require("./src/PlayerStats"); -const RateLimiter = require("./src/RateLimiter"); - - -module.exports = { - ...libBuildMod, - ...libCommand, - ...libConfig, - ...libData, - ...libDatabase, - ...libErrors, - ...libFactorio, - ...libFileOps, - ...libHash, - ...libHelpers, - ...libIni, - ...libLink, - ...libLogging, - ...libLoggingUtils, - ...libLuaTools, - ...libPlugin, - ...libPluginLoader, - ...libPrometheus, - ...libSchema, - ...libSharedCommands, - ...libStream, - ...libUsers, - ...libZipOps, - - ExponentialBackoff, - PlayerStats, - RateLimiter, -}; diff --git a/packages/lib/index.ts b/packages/lib/index.ts new file mode 100644 index 00000000..14b567e0 --- /dev/null +++ b/packages/lib/index.ts @@ -0,0 +1,31 @@ +/** + * Shared library for Clusterio + * @module lib + */ +export * from "./build_mod"; +export * from "./src/command"; +export * from "./src/config"; +export * from "./src/data"; +export * from "./src/database"; +export * from "./src/errors"; +export * from "./src/factorio"; +export * from "./src/file_ops"; +export * from "./src/hash"; +export * from "./src/helpers"; +export * from "./src/ini"; +export * from "./src/link"; +export * from "./src/logging"; +export * from "./src/logging_utils"; +export * from "./src/lua_tools"; +export * from "./src/plugin"; +export * from "./src/plugin_loader"; +export * from "./src/prometheus"; +export * from "./src/schema"; +export * from "./src/shared_commands"; +export * from "./src/stream"; +export * from "./src/users"; +export * from "./src/zip_ops"; + +export { default as ExponentialBackoff } from "./src/ExponentialBackoff"; +export { default as PlayerStats } from "./src/PlayerStats"; +export { default as RateLimiter } from "./src/RateLimiter"; diff --git a/packages/lib/package.json b/packages/lib/package.json index ce052530..a8cdc5b7 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -5,9 +5,10 @@ "repository": "https://github.com/clusterio/clusterio", "license": "MIT", "scripts": { - "prepare": "pnpm run compile_validator", + "prepare": "pnpm run compile_validator && tsc || true", "compile_validator": "node scripts/compile_validator.js" }, + "main": "dist/index.js", "browser": "browser.js", "keywords": [ "factorio" @@ -31,5 +32,9 @@ }, "publishConfig": { "access": "public" + }, + "devDependencies": { + "@types/node": "^20.4.5", + "typescript": "^5.1.6" } } diff --git a/packages/lib/scripts/compile_validator.js b/packages/lib/scripts/compile_validator.js index bc90dcf4..41745df1 100644 --- a/packages/lib/scripts/compile_validator.js +++ b/packages/lib/scripts/compile_validator.js @@ -24,5 +24,5 @@ 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}` + `// generated by scripts/compile_validator.js\n// @ts-nocheck\n/* eslint-disable */\n${moduleCode}` ); diff --git a/packages/lib/src/config/index.js b/packages/lib/src/config/index.js deleted file mode 100644 index 858c7712..00000000 --- a/packages/lib/src/config/index.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Configuration System - * @author Hornwitser - * @module lib/config - */ -"use strict"; -const classes = require("./classes"); -const definitions = require("./definitions"); - -module.exports = { - ...classes, - ...definitions, -}; diff --git a/packages/lib/src/config/index.ts b/packages/lib/src/config/index.ts new file mode 100644 index 00000000..a111da14 --- /dev/null +++ b/packages/lib/src/config/index.ts @@ -0,0 +1,7 @@ +/** + * Configuration System + * @author Hornwitser + * @module lib/config + */ +export * from "./classes"; +export * from "./definitions"; diff --git a/packages/lib/src/data/composites.js b/packages/lib/src/data/composites.js index de62d1c6..cdd80943 100644 --- a/packages/lib/src/data/composites.js +++ b/packages/lib/src/data/composites.js @@ -21,11 +21,14 @@ function jsonPrimitive(type) { }, }; } +const JsonBoolean = jsonPrimitive("boolean"); +const JsonNumber = jsonPrimitive("number"); +const JsonString = jsonPrimitive("string"); module.exports = { - JsonBoolean: jsonPrimitive("boolean"), - JsonNumber: jsonPrimitive("number"), - JsonString: jsonPrimitive("string"), + JsonBoolean, + JsonNumber, + JsonString, jsonArray, jsonPrimitive, diff --git a/packages/lib/src/data/index.js b/packages/lib/src/data/index.js deleted file mode 100644 index 5522a49a..00000000 --- a/packages/lib/src/data/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Shared data types used in Clusterio - * @module lib/data - * @author Hornwitser - */ -"use strict"; -const ExportManifest = require("./ExportManifest"); -const ModInfo = require("./ModInfo"); -const ModPack = require("./ModPack"); -const composites = require("./composites"); -const messagesCore = require("./messages_core"); -const messagesController = require("./messages_controller"); -const messagesHost = require("./messages_host"); -const messagesInstance = require("./messages_instance"); -const messagesMod = require("./messages_mod"); -const messagesUser = require("./messages_user"); -const version = require("./version"); - -module.exports = { - ExportManifest, - ModInfo, - ModPack, - ...composites, - ...messagesCore, - ...messagesController, - ...messagesHost, - ...messagesInstance, - ...messagesMod, - ...messagesUser, - ...version, -}; diff --git a/packages/lib/src/data/index.ts b/packages/lib/src/data/index.ts new file mode 100644 index 00000000..46c1ed2a --- /dev/null +++ b/packages/lib/src/data/index.ts @@ -0,0 +1,16 @@ +/** + * Shared data types used in Clusterio + * @module lib/data + * @author Hornwitser + */ +export { default as ExportManifest } from "./ExportManifest"; +export { default as ModInfo } from "./ModInfo"; +export { default as ModPack } from "./ModPack"; +export * from "./composites"; +export * from "./messages_core"; +export * from "./messages_controller"; +export * from "./messages_host"; +export * from "./messages_instance"; +export * from "./messages_mod"; +export * from "./messages_user"; +export * from "./version"; diff --git a/packages/lib/src/data/message_validate.d.ts b/packages/lib/src/data/message_validate.d.ts new file mode 100644 index 00000000..177658ef --- /dev/null +++ b/packages/lib/src/data/message_validate.d.ts @@ -0,0 +1,2 @@ +import type { ValidateFunction } from "ajv" +export default ValidateFunction diff --git a/packages/lib/src/factorio/index.js b/packages/lib/src/factorio/index.ts similarity index 50% rename from packages/lib/src/factorio/index.js rename to packages/lib/src/factorio/index.ts index c7d1aab7..72335610 100644 --- a/packages/lib/src/factorio/index.js +++ b/packages/lib/src/factorio/index.ts @@ -3,9 +3,4 @@ * @module lib/factorio * @author Hornwitser */ -"use strict"; -const exchange_string = require("./exchange_string"); - -module.exports = { - ...exchange_string, -}; +export * from "./exchange_string"; diff --git a/packages/lib/src/link/index.js b/packages/lib/src/link/index.js deleted file mode 100644 index 132e6150..00000000 --- a/packages/lib/src/link/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Library for message based communication between nodes - * @module lib/link - * @author Hornwitser - */ -"use strict"; -const link = require("./link"); -const connectors = require("./connectors"); - -module.exports = { - ...link, - ...connectors, - - // migrate: Allow info for plugins from before link refactor to load. - Event: class Event {}, - Request: class Request {}, -}; diff --git a/packages/lib/src/link/index.ts b/packages/lib/src/link/index.ts new file mode 100644 index 00000000..5f873f85 --- /dev/null +++ b/packages/lib/src/link/index.ts @@ -0,0 +1,11 @@ +/** + * Library for message based communication between nodes + * @module lib/link + * @author Hornwitser + */ +export * from "./link" +export * from "./connectors" + +// migrate: Allow info for plugins from before link refactor to load. +export class Event {} +export class Request {} diff --git a/packages/lib/src/logging_utils.js b/packages/lib/src/logging_utils.js index c45a961d..23f86de3 100644 --- a/packages/lib/src/logging_utils.js +++ b/packages/lib/src/logging_utils.js @@ -416,7 +416,7 @@ function handleUnhandledErrors() { /* eslint-enable node/no-process-exit */ } - +const _formatServerOutput = formatServerOutput; module.exports = { TerminalFormat, LinkTransport, @@ -425,5 +425,5 @@ module.exports = { queryLog, // for testing only - _formatServerOutput: formatServerOutput, + _formatServerOutput, }; diff --git a/packages/lib/tsconfig.json b/packages/lib/tsconfig.json new file mode 100644 index 00000000..0f0b112f --- /dev/null +++ b/packages/lib/tsconfig.json @@ -0,0 +1,18 @@ +{ + "include": ["index.ts", "build_mod.js", "src/**/*.ts", "src/**/*.js"], + "compilerOptions": { + "lib": ["es2023"], + "module": "commonjs", + "target": "es2022", + "rootDir": ".", + "outDir": "dist", + "composite": false, + "strict": false, + "alwaysStrict": true, + "allowJs": true, + "checkJs": false, + "noEmitOnError": false, + "esModuleInterop": true, + "skipLibCheck": true + } +}