Skip to content

fix(intellij): use transformed generator schema to match VSCode filte… #2539

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jun 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.util.ui.JBUI
import dev.nx.console.generate.run_generator.RunGeneratorManager
import dev.nx.console.generate.ui.GeneratorSchema
import dev.nx.console.generate.ui.NxGenerateUiRenderer
import dev.nx.console.generate.ui.NxGeneratorListCellRenderer
import dev.nx.console.generate.ui.file.NxGenerateUiFileRenderer
Expand Down Expand Up @@ -112,15 +113,26 @@ class NxGenerateService(val project: Project, private val cs: CoroutineScope) {
) {
val generatorOptions =
options
?: project
.service<NxlsService>()
.generatorOptions(
?: run {
val requestOptions =
NxGeneratorOptionsRequestOptions(
generator.data.collection,
generator.data.name,
generator.schemaPath,
collection = generator.data.collection,
name = generator.data.name,
path = generator.schemaPath,
)
)
val rawOptions = project.service<NxlsService>().generatorOptions(requestOptions)
val inputSchema =
GeneratorSchema(
collectionName = generator.data.collection,
generatorName = generator.data.name,
description = generator.data.description ?: "",
options = rawOptions,
context = null,
)
val transformedSchema =
project.service<NxlsService>().transformedGeneratorSchema(inputSchema)
transformedSchema.options
}

val generatorWithOptions = NxGenerator(generator, generatorOptions)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,13 @@ class NxlsService(private val project: Project, private val cs: CoroutineScope)
?: emptyList()
}

suspend fun transformedGeneratorSchema(generatorSchema: GeneratorSchema): GeneratorSchema {
return withMessageIssueCatch("nx/transformedGeneratorSchema") {
server()?.getNxService()?.transformedGeneratorSchema(generatorSchema)?.await()
}()
?: generatorSchema
}

suspend fun generatorContextFromPath(
generator: NxGenerator? = null,
path: String?,
Expand Down Expand Up @@ -165,13 +172,6 @@ class NxlsService(private val project: Project, private val cs: CoroutineScope)
}()
}

suspend fun transformedGeneratorSchema(schema: GeneratorSchema): GeneratorSchema {
return withMessageIssueCatch("nx/transformedGeneratorSchema") {
server()?.getNxService()?.transformedGeneratorSchema(schema)?.await()
}()
?: schema
}

suspend fun startupMessage(schema: GeneratorSchema): GenerateUiStartupMessageDefinition? {
return withMessageIssueCatch("nx/startupMessage") {
server()?.getNxService()?.startupMessage(schema)?.await()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ interface NxService {
throw UnsupportedOperationException()
}

@JsonRequest
fun transformedGeneratorSchema(schema: GeneratorSchema): CompletableFuture<GeneratorSchema> {
throw UnsupportedOperationException()
}

@JsonRequest
fun generatorContextV2(
generatorContextFromPathRequest: NxGetGeneratorContextFromPathRequest
Expand Down Expand Up @@ -76,11 +81,6 @@ interface NxService {
throw UnsupportedOperationException()
}

@JsonRequest
fun transformedGeneratorSchema(schema: GeneratorSchema): CompletableFuture<GeneratorSchema> {
throw UnsupportedOperationException()
}

@JsonRequest
fun startupMessage(
schema: GeneratorSchema
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package dev.nx.console.nxls.server.requests

import dev.nx.console.generate.ui.GeneratorSchema
import kotlinx.serialization.Serializable

@Serializable data class NxTransformedGeneratorSchemaRequest(val options: GeneratorSchema)
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import kotlinx.serialization.Serializable
sealed interface NxGeneratorOption {
val name: String
val isRequired: Boolean?
val deprecated: Boolean?
val deprecated: String?
val description: String?
val type: String?
val enum: List<String>?
Expand All @@ -26,81 +26,81 @@ sealed interface NxGeneratorOption {
data class NxOptionWithNoDefault(
override val name: String,
override val isRequired: Boolean?,
override val deprecated: Boolean?,
override val description: String?,
override val type: String?,
override val enum: List<String>?,
override var items: List<String>?,
@SerializedName("x-deprecated") @SerialName("x-deprecated") override val deprecated: String?,
@SerializedName("x-priority") @SerialName("x-priority") override val priority: String?,
@SerializedName("x-dropdown") @SerialName("x-dropdown") override val dropdown: String?,
@SerializedName("x-hint") @SerialName("x-hint") override val hint: String?
@SerializedName("x-hint") @SerialName("x-hint") override val hint: String?,
) : NxGeneratorOption

@Serializable
data class NxOptionWithStringDefault(
val default: String,
override val name: String,
override val isRequired: Boolean?,
override val deprecated: Boolean?,
override val description: String?,
override val type: String?,
override val enum: List<String>?,
override var items: List<String>?,
@SerializedName("x-deprecated") @SerialName("x-deprecated") override val deprecated: String?,
@SerializedName("x-priority") @SerialName("x-priority") override val priority: String?,
@SerializedName("x-dropdown") @SerialName("x-dropdown") override val dropdown: String?,
@SerializedName("x-hint") @SerialName("x-hint") override val hint: String?
@SerializedName("x-hint") @SerialName("x-hint") override val hint: String?,
) : NxGeneratorOption

@Serializable
data class NxOptionWithBooleanDefault(
val default: Boolean,
override val name: String,
override val isRequired: Boolean?,
override val deprecated: Boolean?,
override val description: String?,
override val type: String?,
override val enum: List<String>?,
override var items: List<String>?,
@SerializedName("x-deprecated") @SerialName("x-deprecated") override val deprecated: String?,
@SerializedName("x-priority") @SerialName("x-priority") override val priority: String?,
@SerializedName("x-dropdown") @SerialName("x-dropdown") override val dropdown: String?,
@SerializedName("x-hint") @SerialName("x-hint") override val hint: String?
@SerializedName("x-hint") @SerialName("x-hint") override val hint: String?,
) : NxGeneratorOption

@Serializable
data class NxOptionWithArrayDefault(
val default: List<String>,
override val name: String,
override val isRequired: Boolean?,
override val deprecated: Boolean?,
override val description: String?,
override val type: String?,
override val enum: List<String>?,
override var items: List<String>?,
@SerializedName("x-deprecated") @SerialName("x-deprecated") override val deprecated: String?,
@SerializedName("x-priority") @SerialName("x-priority") override val priority: String?,
@SerializedName("x-dropdown") @SerialName("x-dropdown") override val dropdown: String?,
@SerializedName("x-hint") @SerialName("x-hint") override val hint: String?
@SerializedName("x-hint") @SerialName("x-hint") override val hint: String?,
) : NxGeneratorOption

@Serializable
data class NxOptionWithNumberDefault(
val default: Int,
override val name: String,
override val isRequired: Boolean?,
override val deprecated: Boolean?,
override val description: String?,
override val type: String?,
override val enum: List<String>?,
override var items: List<String>?,
@SerializedName("x-deprecated") @SerialName("x-deprecated") override val deprecated: String?,
@SerializedName("x-priority") @SerialName("x-priority") override val priority: String?,
@SerializedName("x-dropdown") @SerialName("x-dropdown") override val dropdown: String?,
@SerializedName("x-hint") @SerialName("x-hint") override val hint: String?
@SerializedName("x-hint") @SerialName("x-hint") override val hint: String?,
) : NxGeneratorOption

class NxGeneratorOptionDeserializer : JsonDeserializer<NxGeneratorOption> {
override fun deserialize(
element: JsonElement?,
type: Type?,
context: JsonDeserializationContext?
context: JsonDeserializationContext?,
): NxGeneratorOption? {
val defaultElement =
element?.asJsonObject?.get("default")
Expand All @@ -109,24 +109,24 @@ class NxGeneratorOptionDeserializer : JsonDeserializer<NxGeneratorOption> {
return if (defaultElement.isJsonArray) {
context?.deserialize<NxOptionWithArrayDefault>(
element,
NxOptionWithArrayDefault::class.java
NxOptionWithArrayDefault::class.java,
)
} else if (defaultElement.isJsonPrimitive) {
val defaultValueType = defaultElement.asJsonPrimitive!!
if (defaultValueType.isBoolean) {
context?.deserialize<NxOptionWithBooleanDefault>(
element,
NxOptionWithBooleanDefault::class.java
NxOptionWithBooleanDefault::class.java,
)
} else if (defaultValueType.isString) {
context?.deserialize<NxOptionWithStringDefault>(
element,
NxOptionWithStringDefault::class.java
NxOptionWithStringDefault::class.java,
)
} else if (defaultValueType.isNumber) {
context?.deserialize<NxOptionWithNumberDefault>(
element,
NxOptionWithNumberDefault::class.java
NxOptionWithNumberDefault::class.java,
)
} else {
null
Expand Down