refactor: make global environment a versioned entity (#4216)
Co-authored-by: jamesgeorge007 <25279263+jamesgeorge007@users.noreply.github.com>
This commit is contained in:
33
packages/hoppscotch-data/src/global-environment/index.ts
Normal file
33
packages/hoppscotch-data/src/global-environment/index.ts
Normal 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]
|
||||
25
packages/hoppscotch-data/src/global-environment/v/0.ts
Normal file
25
packages/hoppscotch-data/src/global-environment/v/0.ts
Normal 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,
|
||||
})
|
||||
46
packages/hoppscotch-data/src/global-environment/v/1.ts
Normal file
46
packages/hoppscotch-data/src/global-environment/v/1.ts
Normal 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,
|
||||
}
|
||||
},
|
||||
})
|
||||
@@ -3,3 +3,4 @@ export * from "./graphql"
|
||||
export * from "./collection"
|
||||
export * from "./rawKeyValue"
|
||||
export * from "./environment"
|
||||
export * from "./global-environment"
|
||||
|
||||
Reference in New Issue
Block a user