From 07fccebe088ba3e6ba034099948d441806ae1c5e Mon Sep 17 00:00:00 2001 From: Kir_Antipov Date: Mon, 6 Dec 2021 16:07:13 +0300 Subject: [PATCH] Moved `File` to `file.ts`, made `version-utils.ts` --- .../curseforge/curseforge-publisher.ts | 2 +- src/publishing/github/github-publisher.ts | 2 +- src/publishing/mod-publisher.ts | 5 +- src/publishing/modrinth/modrinth-publisher.ts | 2 +- src/publishing/publisher.ts | 2 +- src/utils/curseforge-utils.ts | 2 +- src/utils/file-utils.ts | 47 +------------------ src/utils/file.ts | 29 ++++++++++++ src/utils/modrinth-utils.ts | 2 +- src/utils/version-utils.ts | 14 ++++++ test/file-utils.test.ts | 31 +----------- test/version-utils.test.ts | 29 ++++++++++++ 12 files changed, 83 insertions(+), 84 deletions(-) create mode 100644 src/utils/file.ts create mode 100644 src/utils/version-utils.ts create mode 100644 test/version-utils.test.ts diff --git a/src/publishing/curseforge/curseforge-publisher.ts b/src/publishing/curseforge/curseforge-publisher.ts index 85d5bbc..93c74d7 100644 --- a/src/publishing/curseforge/curseforge-publisher.ts +++ b/src/publishing/curseforge/curseforge-publisher.ts @@ -1,4 +1,4 @@ -import { File } from "../../utils/file-utils"; +import { File } from "../../utils/file"; import ModPublisher from "../mod-publisher"; import PublisherTarget from "../publisher-target"; import { convertToCurseForgeVersions, uploadFile } from "../../utils/curseforge-utils"; diff --git a/src/publishing/github/github-publisher.ts b/src/publishing/github/github-publisher.ts index 18add7c..c732700 100644 --- a/src/publishing/github/github-publisher.ts +++ b/src/publishing/github/github-publisher.ts @@ -1,7 +1,7 @@ import Publisher from "../publisher"; import PublisherTarget from "../publisher-target"; import * as github from "@actions/github"; -import { File } from "../../utils/file-utils"; +import { File } from "../../utils/file"; interface GitHubPublisherOptions { tag?: string; diff --git a/src/publishing/mod-publisher.ts b/src/publishing/mod-publisher.ts index 14dcd0f..1369ab2 100644 --- a/src/publishing/mod-publisher.ts +++ b/src/publishing/mod-publisher.ts @@ -1,9 +1,10 @@ import { context } from "@actions/github"; -import { parseVersionNameFromFileVersion } from "../utils/minecraft-utils"; -import { File, getFiles, parseVersionFromFilename, parseVersionTypeFromFilename } from "../utils/file-utils"; +import { File } from "../utils/file"; +import { getFiles } from "../utils/file-utils"; import Publisher from "./publisher"; import PublisherTarget from "./publisher-target"; import MinecraftVersionResolver from "../utils/minecraft-version-resolver"; +import { parseVersionFromName, parseVersionTypeFromName } from "../utils/version-utils"; interface ModPublisherOptions { id: string; diff --git a/src/publishing/modrinth/modrinth-publisher.ts b/src/publishing/modrinth/modrinth-publisher.ts index 9f0be7c..7014020 100644 --- a/src/publishing/modrinth/modrinth-publisher.ts +++ b/src/publishing/modrinth/modrinth-publisher.ts @@ -1,5 +1,5 @@ import { createVersion } from "../../utils/modrinth-utils"; -import { File } from "../../utils/file-utils"; +import { File } from "../../utils/file"; import ModPublisher from "../mod-publisher"; import PublisherTarget from "../publisher-target"; diff --git a/src/publishing/publisher.ts b/src/publishing/publisher.ts index fb1b521..1f58aba 100644 --- a/src/publishing/publisher.ts +++ b/src/publishing/publisher.ts @@ -1,4 +1,4 @@ -import { File } from "utils/file-utils"; +import { File } from "../utils/file"; import Logger from "../utils/logger"; import { getEmptyLogger } from "../utils/logger-utils"; import PublisherTarget from "./publisher-target"; diff --git a/src/utils/curseforge-utils.ts b/src/utils/curseforge-utils.ts index 6e13bd6..1c7cabf 100644 --- a/src/utils/curseforge-utils.ts +++ b/src/utils/curseforge-utils.ts @@ -1,7 +1,7 @@ import fetch from "node-fetch"; import { FormData } from "formdata-node"; import { fileFromPath } from "formdata-node/file-from-path"; -import { File } from "../utils/file-utils"; +import { File } from "./file"; import { findVersionByName } from "./minecraft-utils"; const baseUrl = "https://minecraft.curseforge.com/api"; diff --git a/src/utils/file-utils.ts b/src/utils/file-utils.ts index c3a2db6..c8ddef9 100644 --- a/src/utils/file-utils.ts +++ b/src/utils/file-utils.ts @@ -1,33 +1,5 @@ -import fs from "fs"; -import path from "path"; import glob from "fast-glob"; - -export class File { - public name: string; - public path: string; - - public constructor(filePath: string) { - this.name = path.basename(filePath); - this.path = filePath; - Object.freeze(this); - } - - public async getBuffer(): Promise { - return new Promise((resolve, reject) => { - fs.readFile(this.path, (error, data) => { - if (error) { - reject(error); - } else { - resolve(data); - } - }) - }); - } - - public equals(file: unknown): boolean { - return file instanceof File && file.path === this.path; - } -} +import { File } from "./file"; export type FileSelector = string | { primary?: string, secondary?: string }; @@ -62,20 +34,3 @@ export async function getFiles(files: FileSelector): Promise { } return results.filter((x, i, self) => self.findIndex(y => x.equals(y)) === i); } - -export function parseVersionFromFilename(filename: string): string { - filename = path.parse(filename).name; - const match = filename.match(/[a-z]{0,2}\d+\.\d+.*/i); - return match ? match[0] : filename; -} - -export function parseVersionTypeFromFilename(filename: string): "alpha" | "beta" | "release" { - filename = path.parse(filename).name; - if (filename.match(/[+-_]alpha/i)) { - return "alpha"; - } else if (filename.match(/[+-_]beta/i)) { - return "beta"; - } else { - return "release"; - } -} diff --git a/src/utils/file.ts b/src/utils/file.ts new file mode 100644 index 0000000..19b712f --- /dev/null +++ b/src/utils/file.ts @@ -0,0 +1,29 @@ +import fs from "fs"; +import path from "path"; + +export class File { + public name: string; + public path: string; + + public constructor(filePath: string) { + this.name = path.basename(filePath); + this.path = filePath; + Object.freeze(this); + } + + public async getBuffer(): Promise { + return new Promise((resolve, reject) => { + fs.readFile(this.path, (error, data) => { + if (error) { + reject(error); + } else { + resolve(data); + } + }) + }); + } + + public equals(file: unknown): boolean { + return file instanceof File && file.path === this.path; + } +} diff --git a/src/utils/modrinth-utils.ts b/src/utils/modrinth-utils.ts index 101f69d..f2e9903 100644 --- a/src/utils/modrinth-utils.ts +++ b/src/utils/modrinth-utils.ts @@ -1,7 +1,7 @@ import { FormData } from "formdata-node"; import { fileFromPath } from "formdata-node/file-from-path"; import fetch from "node-fetch"; -import { File } from "./file-utils"; +import { File } from "./file"; export async function createVersion(id: string, data: Record, files: File[], token: string): Promise { data = { diff --git a/src/utils/version-utils.ts b/src/utils/version-utils.ts new file mode 100644 index 0000000..b8def7e --- /dev/null +++ b/src/utils/version-utils.ts @@ -0,0 +1,14 @@ +export function parseVersionFromName(name: string): string { + const match = name.match(/[a-z]{0,2}\d+\.\d+.*/i); + return match ? match[0] : name; +} + +export function parseVersionTypeFromName(name: string): "alpha" | "beta" | "release" { + if (name.match(/[+-_]alpha/i)) { + return "alpha"; + } else if (name.match(/[+-_]beta/i)) { + return "beta"; + } else { + return "release"; + } +} diff --git a/test/file-utils.test.ts b/test/file-utils.test.ts index 04ff47d..3223b26 100644 --- a/test/file-utils.test.ts +++ b/test/file-utils.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect } from "@jest/globals"; -import { getFiles, getRequiredFiles, parseVersionFromFilename, parseVersionTypeFromFilename } from "../src/utils/file-utils"; +import { getFiles, getRequiredFiles } from "../src/utils/file-utils"; describe("getFiles", () => { test("all files matching the given pattern are returned", async () => { @@ -26,32 +26,3 @@ describe("getRequiredFiles", () => { await expect(getRequiredFiles("FOO.md")).rejects.toBeInstanceOf(Error); }); }); - -describe("parseVersionFromFilename", () => { - test("file version is correctly extracted from the filename", () => { - expect(parseVersionFromFilename("sodium-fabric-mc1.17.1-0.3.2+build.7.jar")).toStrictEqual("mc1.17.1-0.3.2+build.7"); - expect(parseVersionFromFilename("build/libs/sodium-fabric-mc1.17.1-0.3.2+build.7.jar")).toStrictEqual("mc1.17.1-0.3.2+build.7"); - expect(parseVersionFromFilename("fabric-api-0.40.1+1.18_experimental.jar")).toStrictEqual("0.40.1+1.18_experimental"); - expect(parseVersionFromFilename("TechReborn-5.0.8-beta+build.111.jar")).toStrictEqual("5.0.8-beta+build.111"); - expect(parseVersionFromFilename("TechReborn-1.17-5.0.1-beta+build.29.jar")).toStrictEqual("1.17-5.0.1-beta+build.29"); - expect(parseVersionFromFilename("Terra-forge-5.3.3-BETA+ec3b0e5d.jar")).toStrictEqual("5.3.3-BETA+ec3b0e5d"); - expect(parseVersionFromFilename("modmenu-2.0.12.jar")).toStrictEqual("2.0.12"); - expect(parseVersionFromFilename("enhancedblockentities-0.5+1.17.jar")).toStrictEqual("0.5+1.17"); - expect(parseVersionFromFilename("sync-mc1.17.x-1.2.jar")).toStrictEqual("mc1.17.x-1.2"); - }); -}); - -describe("parseVersionTypeFromFilename", () => { - test("version type is correctly extracted from the filename", () => { - expect(parseVersionTypeFromFilename("sodium-fabric-mc1.17.1-0.3.2+build.7.jar")).toStrictEqual("release"); - expect(parseVersionTypeFromFilename("build/libs/sodium-fabric-mc1.17.1-0.3.2+build.7.jar")).toStrictEqual("release"); - expect(parseVersionTypeFromFilename("fabric-api-0.40.1+1.18_experimental.jar")).toStrictEqual("release"); - expect(parseVersionTypeFromFilename("TechReborn-5.0.8-beta+build.111.jar")).toStrictEqual("beta"); - expect(parseVersionTypeFromFilename("TechReborn-1.17-5.0.1-beta+build.29.jar")).toStrictEqual("beta"); - expect(parseVersionTypeFromFilename("Terra-forge-5.3.3-BETA+ec3b0e5d.jar")).toStrictEqual("beta"); - expect(parseVersionTypeFromFilename("Terra-forge-5.3.3-alpha+ec3b0e5d.jar")).toStrictEqual("alpha"); - expect(parseVersionTypeFromFilename("modmenu-2.0.12.jar")).toStrictEqual("release"); - expect(parseVersionTypeFromFilename("enhancedblockentities-0.5+1.17.jar")).toStrictEqual("release"); - expect(parseVersionTypeFromFilename("sync-mc1.17.x-1.2.jar")).toStrictEqual("release"); - }); -}); diff --git a/test/version-utils.test.ts b/test/version-utils.test.ts new file mode 100644 index 0000000..53881c6 --- /dev/null +++ b/test/version-utils.test.ts @@ -0,0 +1,29 @@ +import { describe, test, expect } from "@jest/globals"; +import { parseVersionFromName, parseVersionTypeFromName } from "../src/utils/version-utils"; + +describe("parseVersionFromName", () => { + test("file version is correctly extracted from the filename", () => { + expect(parseVersionFromName("sodium-fabric-mc1.17.1-0.3.2+build.7")).toStrictEqual("mc1.17.1-0.3.2+build.7"); + expect(parseVersionFromName("fabric-api-0.40.1+1.18_experimental")).toStrictEqual("0.40.1+1.18_experimental"); + expect(parseVersionFromName("TechReborn-5.0.8-beta+build.111")).toStrictEqual("5.0.8-beta+build.111"); + expect(parseVersionFromName("TechReborn-1.17-5.0.1-beta+build.29")).toStrictEqual("1.17-5.0.1-beta+build.29"); + expect(parseVersionFromName("Terra-forge-5.3.3-BETA+ec3b0e5d")).toStrictEqual("5.3.3-BETA+ec3b0e5d"); + expect(parseVersionFromName("modmenu-2.0.12")).toStrictEqual("2.0.12"); + expect(parseVersionFromName("enhancedblockentities-0.5+1.17")).toStrictEqual("0.5+1.17"); + expect(parseVersionFromName("sync-mc1.17.x-1.2")).toStrictEqual("mc1.17.x-1.2"); + }); +}); + +describe("parseVersionTypeFromName", () => { + test("version type is correctly extracted from the filename", () => { + expect(parseVersionTypeFromName("sodium-fabric-mc1.17.1-0.3.2+build.7")).toStrictEqual("release"); + expect(parseVersionTypeFromName("fabric-api-0.40.1+1.18_experimental")).toStrictEqual("release"); + expect(parseVersionTypeFromName("TechReborn-5.0.8-beta+build.111")).toStrictEqual("beta"); + expect(parseVersionTypeFromName("TechReborn-1.17-5.0.1-beta+build.29")).toStrictEqual("beta"); + expect(parseVersionTypeFromName("Terra-forge-5.3.3-BETA+ec3b0e5d")).toStrictEqual("beta"); + expect(parseVersionTypeFromName("Terra-forge-5.3.3-alpha+ec3b0e5d")).toStrictEqual("alpha"); + expect(parseVersionTypeFromName("modmenu-2.0.12")).toStrictEqual("release"); + expect(parseVersionTypeFromName("enhancedblockentities-0.5+1.17")).toStrictEqual("release"); + expect(parseVersionTypeFromName("sync-mc1.17.x-1.2")).toStrictEqual("release"); + }); +});