From a083f25b6c9fe1a7bf16348ad29dc5ded829a00d Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Mon, 19 Aug 2024 13:44:57 -0600 Subject: [PATCH] better ergonomics for versions (#2717) --- sdk/lib/StartSdk.ts | 18 +-------------- sdk/lib/index.ts | 1 + sdk/lib/inits/setupInit.ts | 2 +- sdk/lib/manifest/setupManifest.ts | 4 ++-- sdk/lib/test/configBuilder.test.ts | 18 +++++++-------- sdk/lib/test/output.sdk.ts | 22 +++++++++---------- .../VersionGraph.ts} | 10 --------- .../{versionInfo => version}/VersionInfo.ts | 0 sdk/lib/version/index.ts | 2 ++ .../server-routes/sideload/sideload.page.ts | 2 +- 10 files changed, 28 insertions(+), 51 deletions(-) rename sdk/lib/{versionInfo/setupVersionGraph.ts => version/VersionGraph.ts} (95%) rename sdk/lib/{versionInfo => version}/VersionInfo.ts (100%) create mode 100644 sdk/lib/version/index.ts diff --git a/sdk/lib/StartSdk.ts b/sdk/lib/StartSdk.ts index 0b38d90af..569d83b16 100644 --- a/sdk/lib/StartSdk.ts +++ b/sdk/lib/StartSdk.ts @@ -30,17 +30,11 @@ import { healthCheck, HealthCheckParams } from "./health/HealthCheck" import { checkPortListening } from "./health/checkFns/checkPortListening" import { checkWebUrl, runHealthScript } from "./health/checkFns" import { List } from "./config/builder/list" -import { VersionInfo, VersionOptions } from "./versionInfo/VersionInfo" import { Install, InstallFn } from "./inits/setupInstall" import { setupActions } from "./actions/setupActions" import { setupDependencyConfig } from "./dependencies/setupDependencyConfig" import { SetupBackupsParams, setupBackups } from "./backup/setupBackups" import { setupInit } from "./inits/setupInit" -import { - EnsureUniqueId, - VersionGraph, - setupVersionGraph, -} from "./versionInfo/setupVersionGraph" import { Uninstall, UninstallFn, setupUninstall } from "./inits/setupUninstall" import { setupMain } from "./mainFn" import { defaultTrigger } from "./trigger/defaultTrigger" @@ -81,6 +75,7 @@ import { } from "./dependencies/dependencies" import { health } from "." import { GetSslCertificate } from "./util/GetSslCertificate" +import { VersionGraph } from "./version" export const SDKVersion = testTypeVersion("0.3.6") @@ -420,13 +415,6 @@ export class StartSdk { started(onTerm: () => PromiseLike): PromiseLike }) => Promise>, ) => setupMain(fn), - setupVersionGraph: < - CurrentVersion extends string, - OtherVersions extends Array>, - >( - current: VersionInfo, - ...other: EnsureUniqueId - ) => setupVersionGraph(current, ...other), setupProperties: ( fn: (options: { effects: Effects }) => Promise, @@ -547,10 +535,6 @@ export class StartSdk { >, ) => List.dynamicText(getA), }, - VersionInfo: { - of: (options: VersionOptions) => - VersionInfo.of(options), - }, StorePath: pathBuilder(), Value: { toggle: Value.toggle, diff --git a/sdk/lib/index.ts b/sdk/lib/index.ts index 935ffc023..a023c4e81 100644 --- a/sdk/lib/index.ts +++ b/sdk/lib/index.ts @@ -29,3 +29,4 @@ export * as utils from "./util" export * as matches from "ts-matches" export * as YAML from "yaml" export * as TOML from "@iarna/toml" +export * from "./version" diff --git a/sdk/lib/inits/setupInit.ts b/sdk/lib/inits/setupInit.ts index 35971d3d3..5fd1c481c 100644 --- a/sdk/lib/inits/setupInit.ts +++ b/sdk/lib/inits/setupInit.ts @@ -4,7 +4,7 @@ import { SetInterfaces } from "../interfaces/setupInterfaces" import { ExposedStorePaths } from "../store/setupExposeStore" import * as T from "../types" -import { VersionGraph } from "../versionInfo/setupVersionGraph" +import { VersionGraph } from "../version/VersionGraph" import { Install } from "./setupInstall" import { Uninstall } from "./setupUninstall" diff --git a/sdk/lib/manifest/setupManifest.ts b/sdk/lib/manifest/setupManifest.ts index 2f836d05e..10aaa03db 100644 --- a/sdk/lib/manifest/setupManifest.ts +++ b/sdk/lib/manifest/setupManifest.ts @@ -2,7 +2,7 @@ import * as T from "../types" import { ImageConfig, ImageId, VolumeId } from "../osBindings" import { SDKManifest, SDKImageConfig } from "./ManifestTypes" import { SDKVersion } from "../StartSdk" -import { VersionGraph } from "../versionInfo/setupVersionGraph" +import { VersionGraph } from "../version/VersionGraph" /** * This is an example of a function that takes a manifest and returns a new manifest with additional properties @@ -25,8 +25,8 @@ export function setupManifest< }, Satisfies extends string[] = [], >( - manifest: SDKManifest & Manifest, versions: VersionGraph, + manifest: SDKManifest & Manifest, ): Manifest & T.Manifest { const images = Object.entries(manifest.images).reduce( (images, [k, v]) => { diff --git a/sdk/lib/test/configBuilder.test.ts b/sdk/lib/test/configBuilder.test.ts index bd0ddeab1..5c65271a8 100644 --- a/sdk/lib/test/configBuilder.test.ts +++ b/sdk/lib/test/configBuilder.test.ts @@ -6,8 +6,8 @@ import { Variants } from "../config/builder/variants" import { ValueSpec } from "../config/configTypes" import { setupManifest } from "../manifest/setupManifest" import { StartSdk } from "../StartSdk" -import { VersionGraph } from "../versionInfo/setupVersionGraph" -import { VersionInfo } from "../versionInfo/VersionInfo" +import { VersionGraph } from "../version/VersionGraph" +import { VersionInfo } from "../version/VersionInfo" describe("builder tests", () => { test("text", async () => { @@ -369,6 +369,13 @@ describe("values", () => { const sdk = StartSdk.of() .withManifest( setupManifest( + VersionGraph.of( + VersionInfo.of({ + version: "1.0.0:0", + releaseNotes: "", + migrations: {}, + }), + ), { id: "testOutput", title: "", @@ -402,13 +409,6 @@ describe("values", () => { }, }, }, - VersionGraph.of( - VersionInfo.of({ - version: "1.0.0:0", - releaseNotes: "", - migrations: {}, - }), - ), ), ) .withStore<{ test: "a" }>() diff --git a/sdk/lib/test/output.sdk.ts b/sdk/lib/test/output.sdk.ts index 3d8058bfa..4cdf85111 100644 --- a/sdk/lib/test/output.sdk.ts +++ b/sdk/lib/test/output.sdk.ts @@ -1,12 +1,21 @@ import { StartSdk } from "../StartSdk" import { setupManifest } from "../manifest/setupManifest" -import { VersionInfo } from "../versionInfo/VersionInfo" -import { VersionGraph } from "../versionInfo/setupVersionGraph" +import { VersionInfo } from "../version/VersionInfo" +import { VersionGraph } from "../version/VersionGraph" export type Manifest = any export const sdk = StartSdk.of() .withManifest( setupManifest( + VersionGraph.of( + VersionInfo.of({ + version: "1.0.0:0", + releaseNotes: "", + migrations: {}, + }) + .satisfies("#other:1.0.0:0") + .satisfies("#other:2.0.0:0"), + ), { id: "testOutput", title: "", @@ -41,15 +50,6 @@ export const sdk = StartSdk.of() }, }, }, - VersionGraph.of( - VersionInfo.of({ - version: "1.0.0:0", - releaseNotes: "", - migrations: {}, - }) - .satisfies("#other:1.0.0:0") - .satisfies("#other:2.0.0:0"), - ), ), ) .withStore<{ storeRoot: { storeLeaf: "value" } }>() diff --git a/sdk/lib/versionInfo/setupVersionGraph.ts b/sdk/lib/version/VersionGraph.ts similarity index 95% rename from sdk/lib/versionInfo/setupVersionGraph.ts rename to sdk/lib/version/VersionGraph.ts index 5f89a7e35..1b6b49bb9 100644 --- a/sdk/lib/versionInfo/setupVersionGraph.ts +++ b/sdk/lib/version/VersionGraph.ts @@ -191,16 +191,6 @@ export class VersionGraph { ) } -export function setupVersionGraph< - CurrentVersion extends string, - OtherVersions extends Array>, ->( - current: VersionInfo, - ...other: EnsureUniqueId -) { - return VersionGraph.of(current, ...other) -} - // prettier-ignore export type EnsureUniqueId = B extends [] ? A : diff --git a/sdk/lib/versionInfo/VersionInfo.ts b/sdk/lib/version/VersionInfo.ts similarity index 100% rename from sdk/lib/versionInfo/VersionInfo.ts rename to sdk/lib/version/VersionInfo.ts diff --git a/sdk/lib/version/index.ts b/sdk/lib/version/index.ts new file mode 100644 index 000000000..c7a47fc38 --- /dev/null +++ b/sdk/lib/version/index.ts @@ -0,0 +1,2 @@ +export * from "./VersionGraph" +export * from "./VersionInfo" diff --git a/web/projects/ui/src/app/pages/server-routes/sideload/sideload.page.ts b/web/projects/ui/src/app/pages/server-routes/sideload/sideload.page.ts index 9e09aca62..b95c4599f 100644 --- a/web/projects/ui/src/app/pages/server-routes/sideload/sideload.page.ts +++ b/web/projects/ui/src/app/pages/server-routes/sideload/sideload.page.ts @@ -22,7 +22,7 @@ const VERSION_2 = new Uint8Array([2]) export class SideloadPage { isMobile = isPlatform(window, 'ios') || isPlatform(window, 'android') toUpload: { - manifest: T.Manifest | null + manifest: { title: string; version: string } | null icon: string | null file: File | null } = {