Skip to content

Commit

Permalink
Add the basics of a MinecraftVersion class
Browse files Browse the repository at this point in the history
  • Loading branch information
MMK21Hub committed Aug 21, 2023
1 parent 2b3a522 commit 93a1dae
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 7 deletions.
37 changes: 36 additions & 1 deletion src/classes/minecraftVersions.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import {
MinecraftVersionId,
MinecraftVersionTarget,
NumericMinecraftVersion,
SingleMinecraftVersionSpecifier,
getLatestVersion,
getVersionManifest,
resolveMinecraftVersionId,
resolveSingleMinecraftVersionSpecifier,
} from "../helpers/minecraftHelpers.js"
import { StartAndEnd } from "../helpers/util.js"
import { PromiseMaybe, StartAndEnd, fromPromiseMaybe } from "../helpers/util.js"

export type MinecraftVersionFancyRangeTemplate = {
start?: MinecraftVersionId
Expand Down Expand Up @@ -156,3 +160,34 @@ export class MinecraftVersionRange {
this.exclusiveEnd = template.exclusiveEnd
}
}

export type MinecraftVersionTemplate =
| MinecraftVersionId
| MinecraftVersionTarget
| NumericMinecraftVersion

abstract class MinecraftVersionResolvable {
abstract getPossiblyValidId: () => PromiseMaybe<string>

async getId() {
const possiblyValidId = await fromPromiseMaybe(this.getPossiblyValidId())

// We use resolveMinecraftVersionId() to throw if the version ID is invalid
return resolveMinecraftVersionId(possiblyValidId)
}
}

// This class is WIP. In the future it will replace raw version IDs.
class MinecraftVersion extends MinecraftVersionResolvable {
id

getPossiblyValidId() {
//
return resolveMinecraftVersionId(this.id)
}

constructor(id: MinecraftVersionId) {
super()
this.id = id
}
}
10 changes: 8 additions & 2 deletions src/helpers/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import { Response } from "node-fetch"
import { mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises"
import path from "node:path"

/** Might be the value itself, or a promise that resolves to that value */
export type PromiseMaybe<T> = T | Promise<T>
/** Makes the provided keys (K) of the object (T) optional */
export type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>
/** Specify a value, or provide a function that returns that value */
Expand Down Expand Up @@ -36,12 +38,12 @@ export type Range<T> = StartAndEnd<T> | FancyRange<T>
export type SearchValue = string | RegExp

export interface ResolvableAny<T, A extends any[] = []> {
resolve(...args: A): T | Promise<T>
resolve(...args: A): PromiseMaybe<T>
sync?: boolean
}
export interface ResolvableAsync<T, A extends any[] = []>
extends ResolvableAny<T, A> {
resolve(...args: A): T | Promise<T>
resolve(...args: A): PromiseMaybe<T>
sync?: false
}
export interface ResolvableSync<T, A extends any[] = []>
Expand All @@ -58,6 +60,10 @@ export function isSimpleRange<T>(
return typeof specifier[0] !== "object" || specifier[0] === null
}

export async function fromPromiseMaybe<T>(promiseMaybe: PromiseMaybe<T>) {
return promiseMaybe instanceof Promise ? await promiseMaybe : promiseMaybe
}

/* DATA MANIPULATION */

export type RecordLike<K extends string | number | symbol, T> =
Expand Down
4 changes: 0 additions & 4 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,6 @@ const targetVersions = new MinecraftVersionRange({
const targetLanguages = ["en_us", "en_gb"]

try {
// const range = new MinecraftVersionRange([null, null])
// const allVersions = await range.getVersionIds()
// debugger

commandLineArg === "--stats"
? await printStats(getStatsFilter())
: await buildPack()
Expand Down

0 comments on commit 93a1dae

Please sign in to comment.