refactor: make global environment a versioned entity (#4216)

Co-authored-by: jamesgeorge007 <25279263+jamesgeorge007@users.noreply.github.com>
This commit is contained in:
Palak Chopra
2024-09-23 17:01:14 +05:30
committed by GitHub
parent 1701961335
commit bfe3b3a9c3
17 changed files with 337 additions and 138 deletions

View File

@@ -0,0 +1,33 @@
import { InferredEntity, createVersionedEntity } from "verzod"
import { z } from "zod"
import V0_VERSION from "./v/0"
import V1_VERSION from "./v/1"
const versionedObject = z.object({
v: z.number(),
})
export const GlobalEnvironment = createVersionedEntity({
latestVersion: 1,
versionMap: {
0: V0_VERSION,
1: V1_VERSION,
},
getVersion(data) {
const versionCheck = versionedObject.safeParse(data)
if (versionCheck.success) return versionCheck.data.v
// For V0 we have to check the schema
const result = V0_VERSION.schema.safeParse(data)
return result.success ? 0 : null
},
})
export type GlobalEnvironment = InferredEntity<typeof GlobalEnvironment>
export type GlobalEnvironmentVariable = InferredEntity<
typeof GlobalEnvironment
>["variables"][number]

View File

@@ -0,0 +1,25 @@
import { z } from "zod"
import { defineVersion } from "verzod"
export const V0_SCHEMA = z.array(
z.union([
z.object({
key: z.string(),
value: z.string(),
secret: z.literal(false),
}),
z.object({
key: z.string(),
secret: z.literal(true),
}),
z.object({
key: z.string(),
value: z.string(),
}),
])
)
export default defineVersion({
initial: true,
schema: V0_SCHEMA,
})

View File

@@ -0,0 +1,46 @@
import { z } from "zod"
import { defineVersion } from "verzod"
import { V0_SCHEMA } from "./0"
export const V1_SCHEMA = z.object({
v: z.literal(1),
variables: z.array(
z.union([
z.object({
key: z.string(),
secret: z.literal(true),
}),
z.object({
key: z.string(),
value: z.string(),
secret: z.literal(false),
}),
])
),
})
export default defineVersion({
initial: false,
schema: V1_SCHEMA,
up(old: z.infer<typeof V0_SCHEMA>) {
const variables = old.map((variable) => {
if ("value" in variable) {
return {
key: variable.key,
value: variable.value,
secret: false,
}
}
return {
key: variable.key,
secret: true,
}
})
return <z.infer<typeof V1_SCHEMA>>{
v: 1,
variables,
}
},
})

View File

@@ -3,3 +3,4 @@ export * from "./graphql"
export * from "./collection"
export * from "./rawKeyValue"
export * from "./environment"
export * from "./global-environment"