Skip to content
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
4 changes: 3 additions & 1 deletion src/main/kotlin/no/item/xp/plugin/GenerateCodeTask.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import no.item.xp.plugin.extensions.getFormNode
import no.item.xp.plugin.models.ObjectTypeModel
import no.item.xp.plugin.parser.parseObjectTypeModel
import no.item.xp.plugin.parser.resolveMixinGraph
import no.item.xp.plugin.parser.toMacroModel
import no.item.xp.plugin.renderers.renderGlobalComponentMap
import no.item.xp.plugin.renderers.renderGlobalContentTypeMap
import no.item.xp.plugin.renderers.renderGlobalXDataMap
Expand Down Expand Up @@ -138,7 +139,8 @@ open class GenerateCodeTask
val indexFilePath = Paths.get(targetFilePath.parent.toString(), "index.d.ts")
val targetFile = File(indexFilePath.toUri())

val fileContent = renderTypeModelAsTypeScript(right, resolveMixinsImportPath(targetFile, rootOutputDir))
val model = if (IS_MACRO.matches(fileInJar.entry.name)) toMacroModel(right) else right
val fileContent = renderTypeModelAsTypeScript(model, resolveMixinsImportPath(targetFile, rootOutputDir))

writeTargetFile(targetFile, fileContent, prependText, singleQuote)
logger.lifecycle("Updated file: ${Path.of(targetFile.toURI()).toUri()}")
Expand Down
14 changes: 10 additions & 4 deletions src/main/kotlin/no/item/xp/plugin/GenerateTypeScriptWorkAction.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@ import arrow.core.right
import no.item.xp.plugin.extensions.getFormNode
import no.item.xp.plugin.models.ObjectTypeModel
import no.item.xp.plugin.parser.parseObjectTypeModel
import no.item.xp.plugin.parser.toMacroModel
import no.item.xp.plugin.renderers.renderSiteConfig
import no.item.xp.plugin.renderers.ts.renderTypeModelAsTypeScript
import no.item.xp.plugin.util.IS_MACRO
import no.item.xp.plugin.util.concatFileName
import no.item.xp.plugin.util.normalizeFilePath
import no.item.xp.plugin.util.parseXml
import no.item.xp.plugin.util.simpleFilePath
import no.item.xp.plugin.util.writeTargetFile
Expand Down Expand Up @@ -60,10 +63,13 @@ abstract class GenerateTypeScriptWorkAction : WorkAction<CodegenWorkParameters>
},
{
val fileContent =
if (file.absolutePath.endsWith(concatFileName("resources", "site", "site.xml"))) {
renderSiteConfig(it, mixinsImportPath)
} else {
renderTypeModelAsTypeScript(it, mixinsImportPath)
when {
file.absolutePath.endsWith(concatFileName("resources", "site", "site.xml")) ->
renderSiteConfig(it, mixinsImportPath)
IS_MACRO.matches(normalizeFilePath(file)) ->
renderTypeModelAsTypeScript(toMacroModel(it), mixinsImportPath)
else ->
renderTypeModelAsTypeScript(it, mixinsImportPath)
}

writeTargetFile(targetFile, fileContent, parameters.getPrependText().get(), parameters.getSingleQuote().get())
Expand Down
26 changes: 26 additions & 0 deletions src/main/kotlin/no/item/xp/plugin/parser/ParseMacro.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package no.item.xp.plugin.parser

import no.item.xp.plugin.models.BooleanField
import no.item.xp.plugin.models.NumberField
import no.item.xp.plugin.models.NumberFieldWithValidation
import no.item.xp.plugin.models.ObjectTypeModel
import no.item.xp.plugin.models.StringField
import no.item.xp.plugin.models.UnknownField

/**
* The params of a macro are passed in from the HtmlArea, so they are always strings
*/
fun toMacroModel(model: ObjectTypeModel): ObjectTypeModel =
model.copy(
fields =
model.fields.map { field ->
when (field) {
is NumberField,
is NumberFieldWithValidation,
is BooleanField,
is UnknownField,
-> StringField(field)
else -> field
}
},
)
1 change: 1 addition & 0 deletions src/main/kotlin/no/item/xp/plugin/util/TargetFile.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ val IS_XDATA = "^.*site/x-data.*\$".toRegex(RegexOption.IGNORE_CASE)
val IS_MIXIN = "^.*site/mixins.*\$".toRegex(RegexOption.IGNORE_CASE)
val IS_PART = "^.*site/parts.*\$".toRegex(RegexOption.IGNORE_CASE)
val IS_PAGE = "^.*site/pages.*\$".toRegex(RegexOption.IGNORE_CASE)
val IS_MACRO = "^.*site/macros.*\$".toRegex(RegexOption.IGNORE_CASE)

fun writeTargetFile(
targetFile: File,
Expand Down
49 changes: 49 additions & 0 deletions src/test/kotlin/no/item/xp/plugin/parser/ToMacroModelTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package no.item.xp.plugin.parser

import no.item.xp.plugin.models.BooleanField
import no.item.xp.plugin.models.NumberField
import no.item.xp.plugin.models.NumberFieldWithValidation
import no.item.xp.plugin.models.ObjectTypeModel
import no.item.xp.plugin.models.StringField
import no.item.xp.plugin.models.StringFieldWithValidation
import no.item.xp.plugin.models.UnionOfStringLiteralField
import no.item.xp.plugin.models.UnknownField
import org.junit.jupiter.api.Test
import kotlin.test.assertEquals

class ToMacroModelTest {
@Test
fun `convert all fields to strings`() {
val result =
toMacroModel(
ObjectTypeModel(
"youtube",
listOf(
NumberField("width", "Width", true, false),
NumberFieldWithValidation("height", "Height", false, false, 1, 1000),
BooleanField("autoplay", "Autoplay", false, false),
UnknownField("other", "Other", true, true),
StringField("url", "Url", false, false),
StringFieldWithValidation("start", "Start", true, false, "^\\d+$", null),
UnionOfStringLiteralField("size", "Size", true, false, listOf("small", "large")),
),
),
)

assertEquals(
ObjectTypeModel(
"youtube",
listOf(
StringField("width", "Width", true, false),
StringField("height", "Height", false, false),
StringField("autoplay", "Autoplay", false, false),
StringField("other", "Other", true, true),
StringField("url", "Url", false, false),
StringFieldWithValidation("start", "Start", true, false, "^\\d+$", null),
UnionOfStringLiteralField("size", "Size", true, false, listOf("small", "large")),
),
),
result,
)
}
}
Loading