fix: desktop platform level env migration and codegen bug (#5110)

This commit is contained in:
Nivedin 2025-05-29 19:26:21 +05:30 committed by GitHub
parent a325f2945d
commit f8cd8bfce7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 58 additions and 10 deletions

View file

@ -131,7 +131,7 @@ import {
getEffectiveRESTRequest,
resolvesEnvsInBody,
} from "~/helpers/utils/EffectiveURL"
import { getAggregateEnvs } from "~/newstore/environments"
import { AggregateEnvironment, getAggregateEnvs } from "~/newstore/environments"
import { useService } from "dioc/vue"
import cloneDeep from "lodash-es/cloneDeep"
@ -144,10 +144,13 @@ import IconCheck from "~icons/lucide/check"
import IconWrapText from "~icons/lucide/wrap-text"
import { asyncComputed } from "@vueuse/core"
import { getDefaultRESTRequest } from "~/helpers/rest/default"
import { CurrentValueService } from "~/services/current-environment-value.service"
import { getCurrentEnvironment } from "../../newstore/environments"
const t = useI18n()
const tabs = useService(RESTTabService)
const currentEnvironmentValueService = useService(CurrentValueService)
// Get the current active request if the current active tab is a request else get the original request from the response tab
const currentActiveRequest = computed(() => {
@ -187,6 +190,18 @@ const emit = defineEmits<{
(e: "request-code", value: string): void
}>()
const getCurrentValue = (env: AggregateEnvironment) => {
const currentSelectedEnvironment = getCurrentEnvironment()
if (env && env.secret) {
return env.currentValue
}
return currentEnvironmentValueService.getEnvironmentByKey(
env?.sourceEnv !== "Global" ? currentSelectedEnvironment.id : "Global",
env?.key ?? ""
)?.currentValue
}
const requestCode = asyncComputed(async () => {
// Generate code snippet action only applies to request documents
if (currentActiveTabDocument.value.type !== "request") {
@ -200,19 +215,23 @@ const requestCode = asyncComputed(async () => {
if (requestVariable.active)
return {
key: requestVariable.key,
value: requestVariable.value,
currentValue: requestVariable.value,
initialValue: requestVariable.value,
secret: false,
}
return {}
}
)
const env: Environment = {
v: 1,
v: 2,
id: "env",
name: "Env",
variables: [
...(requestVariables as Environment["variables"]),
...aggregateEnvs,
...aggregateEnvs.map((env) => ({
...env,
currentValue: getCurrentValue(env) ?? env.currentValue,
})),
],
}

View file

@ -25,6 +25,12 @@ import {
runUserEnvironmentDeletedSubscription,
runUserEnvironmentUpdatedSubscription,
} from "@platform/environments/environments.api"
import { entityReference } from "verzod"
import {
Environment,
EnvironmentSchemaVersion,
GlobalEnvironment,
} from "@hoppscotch/data"
export function initEnvironmentsSync() {
const currentUser$ = platformAuth.getCurrentUserStream()
@ -79,12 +85,27 @@ async function loadUserEnvironments() {
if (environments.length > 0) {
runDispatchWithOutSyncing(() => {
const formatedEnvironments = environments.map(
(env) =>
<Environment>{
id: env.id,
name: env.name,
variables: JSON.parse(env.variables),
}
)
replaceEnvironments(
environments.map(({ id, variables, name }) => ({
id,
name,
variables: JSON.parse(variables),
}))
formatedEnvironments.map((environment) => {
const parsedEnv =
entityReference(Environment).safeParse(environment)
return parsedEnv.success
? parsedEnv.data
: {
...environment,
v: EnvironmentSchemaVersion,
}
})
)
})
}
@ -98,8 +119,16 @@ async function loadGlobalEnvironments() {
const globalEnv = res.right.me.globalEnvironments
if (globalEnv) {
const globalEnvVariableEntries = JSON.parse(globalEnv.variables)
const result = entityReference(GlobalEnvironment).safeParse(
globalEnvVariableEntries
)
runDispatchWithOutSyncing(() => {
setGlobalEnvVariables(JSON.parse(globalEnv.variables))
setGlobalEnvVariables(
result.success ? result.data : globalEnvVariableEntries
)
setGlobalEnvID(globalEnv.id)
})
}