mirror of
https://github.com/VibedByKaKi/t3-code-android-nightly.git
synced 2026-10-09 11:51:15 +02:00
112 lines
3.6 KiB
JavaScript
112 lines
3.6 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import * as NodeRuntime from "@effect/platform-node/NodeRuntime";
|
|
import * as NodeServices from "@effect/platform-node/NodeServices";
|
|
import * as Effect from "effect/Effect";
|
|
import * as FileSystem from "effect/FileSystem";
|
|
import * as Option from "effect/Option";
|
|
import * as Path from "effect/Path";
|
|
import * as Schema from "effect/Schema";
|
|
import { Argument, Command, Flag } from "effect/cli";
|
|
|
|
import {
|
|
mergeUpdateManifests,
|
|
parseUpdateManifest,
|
|
serializeUpdateManifest,
|
|
type UpdateManifest,
|
|
} from "./lib/update-manifest.ts";
|
|
|
|
const UpdateManifestPlatform = Schema.Literals(["mac", "win"]);
|
|
export type UpdateManifestPlatform = typeof UpdateManifestPlatform.Type;
|
|
|
|
function getPlatformLabel(platform: UpdateManifestPlatform): string {
|
|
return platform === "mac" ? "macOS" : "Windows";
|
|
}
|
|
|
|
export function parsePlatformUpdateManifest(
|
|
platform: UpdateManifestPlatform,
|
|
raw: string,
|
|
sourcePath: string,
|
|
): UpdateManifest {
|
|
return parseUpdateManifest(raw, sourcePath, getPlatformLabel(platform));
|
|
}
|
|
|
|
export function mergePlatformUpdateManifests(
|
|
platform: UpdateManifestPlatform,
|
|
primary: UpdateManifest,
|
|
secondary: UpdateManifest,
|
|
): UpdateManifest {
|
|
return mergeUpdateManifests(primary, secondary, getPlatformLabel(platform));
|
|
}
|
|
|
|
export function serializePlatformUpdateManifest(
|
|
platform: UpdateManifestPlatform,
|
|
manifest: UpdateManifest,
|
|
): string {
|
|
return serializeUpdateManifest(manifest, {
|
|
platformLabel: getPlatformLabel(platform),
|
|
});
|
|
}
|
|
|
|
export const mergeUpdateManifestFiles = Effect.fn("mergeUpdateManifestFiles")(function* (
|
|
platform: UpdateManifestPlatform,
|
|
primaryPathArg: string,
|
|
secondaryPathArg: string,
|
|
outputPathArg: string | undefined,
|
|
) {
|
|
const fs = yield* FileSystem.FileSystem;
|
|
const path = yield* Path.Path;
|
|
|
|
const primaryPath = path.resolve(primaryPathArg);
|
|
const secondaryPath = path.resolve(secondaryPathArg);
|
|
const outputPath = path.resolve(outputPathArg ?? primaryPathArg);
|
|
|
|
const primaryManifest = parsePlatformUpdateManifest(
|
|
platform,
|
|
yield* fs.readFileString(primaryPath),
|
|
primaryPath,
|
|
);
|
|
const secondaryManifest = parsePlatformUpdateManifest(
|
|
platform,
|
|
yield* fs.readFileString(secondaryPath),
|
|
secondaryPath,
|
|
);
|
|
const merged = mergePlatformUpdateManifests(platform, primaryManifest, secondaryManifest);
|
|
|
|
yield* fs.writeFileString(outputPath, serializePlatformUpdateManifest(platform, merged));
|
|
});
|
|
|
|
export const mergeUpdateManifestsCommand = Command.make(
|
|
"merge-update-manifests",
|
|
{
|
|
platform: Flag.Literals("platform", UpdateManifestPlatform.literals).pipe(
|
|
Flag.withDescription("Update manifest platform."),
|
|
),
|
|
primaryPath: Argument.String("primary-path").pipe(
|
|
Argument.withDescription("Primary update manifest path. Defaults to the output path."),
|
|
),
|
|
secondaryPath: Argument.String("secondary-path").pipe(
|
|
Argument.withDescription(
|
|
"Secondary update manifest path to merge into the primary manifest.",
|
|
),
|
|
),
|
|
outputPath: Argument.String("output-path").pipe(
|
|
Argument.withDescription("Optional output path for the merged manifest."),
|
|
Argument.optional,
|
|
),
|
|
},
|
|
({ platform, primaryPath, secondaryPath, outputPath }) =>
|
|
mergeUpdateManifestFiles(
|
|
platform,
|
|
primaryPath,
|
|
secondaryPath,
|
|
Option.getOrUndefined(outputPath),
|
|
),
|
|
).pipe(Command.withDescription("Merge two Electron updater manifests into a multi-arch manifest."));
|
|
|
|
if (import.meta.main) {
|
|
Command.run(mergeUpdateManifestsCommand, { version: "0.0.0" }).pipe(
|
|
Effect.provide(NodeServices.layer),
|
|
NodeRuntime.runMain,
|
|
);
|
|
}
|