Skip to content

Commit 2b6c3e8

Browse files
committed
Update dependencies
1 parent 81d3325 commit 2b6c3e8

File tree

11 files changed

+127
-107
lines changed

11 files changed

+127
-107
lines changed

cli.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ update_lock() {
2929
}
3030

3131
update_deps() {
32-
deno outdated --update "$@"
32+
deno run -A jsr:@wok/[email protected] update "$@"
3333
"$0" update_lock
3434
}
3535

deno.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"@std/fs": "jsr:@std/fs@^1.0.9",
3939
"@std/path": "jsr:@std/path@^1.0.8",
4040
"@std/yaml": "jsr:@std/yaml@^1.0.5",
41-
"@wok/typebox": "jsr:@wok/typebox@^0.33.22",
42-
"@wok/utils": "jsr:@wok/utils@^3.5.3"
41+
"@wok/schema": "jsr:@wok/schema@^2.0.1",
42+
"@wok/utils": "jsr:@wok/utils@^4.0.1"
4343
}
4444
}

deno.lock

+33-18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/actions/destroy.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { createCliAction, cyan, ExitCode, resolvePath, Type, yellow } from "../deps.ts";
1+
import { Bool, Opt } from "@wok/schema";
2+
import { createCliAction, cyan, ExitCode, resolvePath, yellow } from "../deps.ts";
23
import { multipass, multipassInfo, multipassK3sKillAll, multipassStop, multipassUnroute } from "../multipass.ts";
34
import type { InstanceConfig } from "../types.ts";
45
import { InstanceConfigPathSchema, InstanceState } from "../types.ts";
@@ -29,9 +30,7 @@ export async function destroyInstance(instance: InstanceConfig) {
2930
export default createCliAction(
3031
{
3132
config: InstanceConfigPathSchema,
32-
skipConfirm: Type.Optional(Type.Boolean({
33-
default: false,
34-
})),
33+
skipConfirm: Opt(Bool(), false),
3534
},
3635
async ({ config: configPath, skipConfirm }) => {
3736
const absoluteConfigPath = resolvePath(configPath);

src/actions/reset.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { createCliAction, ExitCode, resolvePath, Type, yellow } from "../deps.ts";
1+
import { Bool, Opt } from "@wok/schema";
2+
import { createCliAction, ExitCode, resolvePath, yellow } from "../deps.ts";
23
import { InstanceConfigPathSchema } from "../types.ts";
34
import { loadInstanceConfig } from "../utils.ts";
45
import { createInstance } from "./create.ts";
@@ -7,9 +8,7 @@ import { destroyInstance } from "./destroy.ts";
78
export default createCliAction(
89
{
910
config: InstanceConfigPathSchema,
10-
skipConfirm: Type.Optional(Type.Boolean({
11-
default: false,
12-
})),
11+
skipConfirm: Opt(Bool(), false),
1312
},
1413
async ({ config: configPath, skipConfirm }, signal) => {
1514
const absoluteConfigPath = resolvePath(configPath);

src/actions/ssh.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import { createCliAction, ExitCode, gray, NonEmptyString, resolvePath, Type } from "../deps.ts";
1+
import { Arr, NonEmpStr } from "@wok/schema/schema";
2+
import { createCliAction, ExitCode, gray, resolvePath } from "../deps.ts";
23
import { multipassInfo, multipassSshInteractive } from "../multipass.ts";
34
import { InstanceConfigPathSchema, InstanceState } from "../types.ts";
45
import { getExternalIp, loadInstanceConfig, log } from "../utils.ts";
56

67
export default createCliAction(
78
{
89
config: InstanceConfigPathSchema,
9-
"--": Type.Array(NonEmptyString()),
10+
"--": Arr(NonEmpStr()),
1011
},
1112
async ({ config, "--": cmd }) => {
1213
const absoluteConfigPath = resolvePath(config);

src/deps.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
export * from "@wok/utils/cli";
22
export * from "@wok/utils/exec";
33
export * from "@wok/utils/validation";
4-
export * from "./deps/typebox.ts";
54
export type { ValidationResult } from "@wok/utils/validation";
65
export * from "@std/fmt/colors";
76

@@ -13,3 +12,4 @@ export { ensureFile } from "@std/fs/ensure-file";
1312
export { assertExists } from "@std/assert/exists";
1413
export { memoize } from "@wok/utils/memoize";
1514
export { delay } from "@std/async/delay";
15+
export * from "@wok/schema";

src/deps/typebox.ts

-2
This file was deleted.

src/multipass.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
NonZeroExitError,
1313
printErrLines,
1414
printOutLines,
15-
validate,
15+
typedParse,
1616
} from "./deps.ts";
1717
import type { InstanceConfig, JoinMetadata, ServerInstanceConfig } from "./types.ts";
1818
import { InstanceState, MultipassInfo } from "./types.ts";
@@ -112,7 +112,7 @@ export async function multipassInfo(
112112
}
113113
})();
114114

115-
const result = validate(MultipassInfo, output);
115+
const result = typedParse(MultipassInfo, output);
116116

117117
if (!result.isSuccess) {
118118
throw new Error(

src/types.ts

+65-66
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,93 @@
1-
import type { Static } from "./deps/typebox.ts";
2-
import { FlexObject, NonEmptyString, PosInt, Type } from "./deps/typebox.ts";
1+
import { Arr, Bool, Enum, Lit, NonEmpStr, Obj, Opt, PartObj, PosInt, Rec, Str, Uni } from "@wok/schema/schema";
32

4-
export const Cidr = NonEmptyString({
3+
export const Cidr = NonEmpStr({
54
pattern: "^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))$",
65
});
7-
export const Ipv4 = NonEmptyString({
6+
export const Ipv4 = NonEmpStr({
87
format: "ipv4",
98
});
10-
export const Url = NonEmptyString({ format: "url" });
9+
export const Url = NonEmpStr({ format: "url" });
1110

12-
export const ServerInstanceConfigSchema = Type.Object({
13-
role: Type.Literal("server"),
14-
name: NonEmptyString(),
15-
contextName: Type.Optional(NonEmptyString()),
16-
image: Type.Optional(NonEmptyString()),
11+
export const ServerInstanceConfigSchema = Obj({
12+
role: Lit("server"),
13+
name: NonEmpStr(),
14+
contextName: Opt(NonEmpStr()),
15+
image: Opt(NonEmpStr()),
1716
cpus: PosInt(),
1817
memoryGiBs: PosInt(),
1918
diskGiBs: PosInt(),
20-
bridged: Type.Optional(Type.Boolean()),
21-
k3sVersion: NonEmptyString(),
22-
externalNetworkCidr: Type.Optional(Cidr),
23-
datastoreEndpoint: Type.Optional(NonEmptyString()),
19+
bridged: Opt(Bool()),
20+
k3sVersion: NonEmpStr(),
21+
externalNetworkCidr: Opt(Cidr),
22+
datastoreEndpoint: Opt(NonEmpStr()),
2423
clusterCidr: Cidr,
2524
serviceCidr: Cidr,
2625
clusterDnsIp: Ipv4,
27-
clusterDomain: NonEmptyString({ format: "hostname" }),
28-
kubelet: Type.Optional(Type.Object({
29-
maxPods: Type.Optional(PosInt()),
26+
clusterDomain: NonEmpStr({ format: "hostname" }),
27+
kubelet: Opt(Obj({
28+
maxPods: Opt(PosInt()),
3029
})),
31-
disableComponents: Type.Optional(Type.Object({
32-
coredns: Type.Optional(Type.Boolean()),
33-
servicelb: Type.Optional(Type.Boolean()),
34-
traefik: Type.Optional(Type.Boolean()),
35-
localStorage: Type.Optional(Type.Boolean()),
36-
metricsServer: Type.Optional(Type.Boolean()),
30+
disableComponents: Opt(Obj({
31+
coredns: Opt(Bool()),
32+
servicelb: Opt(Bool()),
33+
traefik: Opt(Bool()),
34+
localStorage: Opt(Bool()),
35+
metricsServer: Opt(Bool()),
3736
})),
38-
nodeLabels: Type.Optional(Type.Record(NonEmptyString(), NonEmptyString())),
39-
nodeTaints: Type.Optional(Type.Record(NonEmptyString(), NonEmptyString())),
40-
sshDirectoryPath: NonEmptyString(),
41-
joinMetadataPath: NonEmptyString(),
42-
userName: Type.Optional(NonEmptyString()),
43-
userPassword: Type.Optional(NonEmptyString()),
44-
clusterInit: Type.Optional(Type.Boolean()),
45-
keepalived: Type.Optional(Type.Object({
46-
state: Type.Union([Type.Literal("MASTER"), Type.Literal("BACKUP")]),
37+
nodeLabels: Opt(Rec(NonEmpStr(), NonEmpStr())),
38+
nodeTaints: Opt(Rec(NonEmpStr(), NonEmpStr())),
39+
sshDirectoryPath: NonEmpStr(),
40+
joinMetadataPath: NonEmpStr(),
41+
userName: Opt(NonEmpStr()),
42+
userPassword: Opt(NonEmpStr()),
43+
clusterInit: Opt(Bool()),
44+
keepalived: Opt(Obj({
45+
state: Uni([Lit("MASTER"), Lit("BACKUP")]),
4746
virtualRouterId: PosInt(),
4847
virtualIp: Ipv4,
4948
priority: PosInt(),
50-
password: NonEmptyString(),
49+
password: NonEmpStr(),
5150
})),
5251
});
5352

54-
export const AgentInstanceConfigSchema = Type.Object({
55-
role: Type.Literal("agent"),
56-
name: NonEmptyString(),
57-
image: Type.Optional(NonEmptyString()),
53+
export const AgentInstanceConfigSchema = Obj({
54+
role: Lit("agent"),
55+
name: NonEmpStr(),
56+
image: Opt(NonEmpStr()),
5857
cpus: PosInt(),
5958
memoryGiBs: PosInt(),
6059
diskGiBs: PosInt(),
61-
bridged: Type.Optional(Type.Boolean()),
62-
clusterDomain: NonEmptyString({ format: "hostname" }),
63-
kubelet: Type.Optional(Type.Object({
60+
bridged: Opt(Bool()),
61+
clusterDomain: NonEmpStr({ format: "hostname" }),
62+
kubelet: Opt(Obj({
6463
maxPods: PosInt(),
6564
})),
66-
externalNetworkCidr: Type.Optional(Cidr),
67-
k3sVersion: NonEmptyString(),
68-
nodeLabels: Type.Optional(Type.Record(NonEmptyString(), NonEmptyString())),
69-
nodeTaints: Type.Optional(Type.Record(NonEmptyString(), NonEmptyString())),
70-
sshDirectoryPath: NonEmptyString(),
71-
joinMetadataPath: NonEmptyString(),
72-
userName: Type.Optional(NonEmptyString()),
73-
userPassword: Type.Optional(NonEmptyString()),
65+
externalNetworkCidr: Opt(Cidr),
66+
k3sVersion: NonEmpStr(),
67+
nodeLabels: Opt(Rec(NonEmpStr(), NonEmpStr())),
68+
nodeTaints: Opt(Rec(NonEmpStr(), NonEmpStr())),
69+
sshDirectoryPath: NonEmpStr(),
70+
joinMetadataPath: NonEmpStr(),
71+
userName: Opt(NonEmpStr()),
72+
userPassword: Opt(NonEmpStr()),
7473
});
7574

76-
export const ClusterInstanceConfigSchema = Type.Object({
77-
servers: Type.Array(ServerInstanceConfigSchema),
78-
agents: Type.Array(AgentInstanceConfigSchema),
75+
export const ClusterInstanceConfigSchema = Obj({
76+
servers: Arr(ServerInstanceConfigSchema),
77+
agents: Arr(AgentInstanceConfigSchema),
7978
});
8079

81-
export const InstanceConfigSchema = Type.Union([
80+
export const InstanceConfigSchema = Uni([
8281
ServerInstanceConfigSchema,
8382
AgentInstanceConfigSchema,
8483
]);
8584

86-
export const JoinMetadataSchema = Type.Object({
87-
url: NonEmptyString({ format: "uri" }),
88-
token: NonEmptyString(),
85+
export const JoinMetadataSchema = Obj({
86+
url: NonEmpStr({ format: "uri" }),
87+
token: NonEmpStr(),
8988
});
9089

91-
export type JoinMetadata = Static<typeof JoinMetadataSchema>;
90+
export type JoinMetadata = typeof JoinMetadataSchema.infer;
9291

9392
export enum InstanceState {
9493
Starting = "Starting",
@@ -98,21 +97,21 @@ export enum InstanceState {
9897
Unknown = "Unknown",
9998
}
10099

101-
export const MultipassInfo = FlexObject({
102-
info: Type.Record(
103-
NonEmptyString(),
104-
FlexObject({
105-
ipv4: Type.Array(Ipv4),
106-
state: Type.Enum(InstanceState),
100+
export const MultipassInfo = PartObj({
101+
info: Rec(
102+
NonEmpStr(),
103+
PartObj({
104+
ipv4: Arr(Ipv4),
105+
state: Enum(Object.values(InstanceState)),
107106
}),
108107
),
109108
});
110109

111-
export type ServerInstanceConfig = Static<typeof ServerInstanceConfigSchema>;
112-
export type AgentInstanceConfig = Static<typeof AgentInstanceConfigSchema>;
113-
export type InstanceConfig = Static<typeof InstanceConfigSchema>;
110+
export type ServerInstanceConfig = typeof ServerInstanceConfigSchema.infer;
111+
export type AgentInstanceConfig = typeof AgentInstanceConfigSchema.infer;
112+
export type InstanceConfig = typeof InstanceConfigSchema.infer;
114113

115-
export const InstanceConfigPathSchema = Type.String({
114+
export const InstanceConfigPathSchema = Str({
116115
minLength: 1,
117116
description: "Path to the instance config file. It should be an ES module with a default export.",
118117
});

0 commit comments

Comments
 (0)