Skip to content

Commit 4f06103

Browse files
feat(ui): introduce patched version of monaco-yaml & yaml-language-server to have better autocompletion
waiting for redhat-developer/yaml-language-server#1048
1 parent 2c1b6ff commit 4f06103

File tree

6 files changed

+419
-24
lines changed

6 files changed

+419
-24
lines changed

core/src/main/java/io/kestra/core/docs/JsonSchemaGenerator.java

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,7 @@ public <T> Map<String, Object> schemas(Class<? extends T> cls, boolean arrayOf)
8080
if (arrayOf) {
8181
objectNode.put("type", "array");
8282
}
83-
replaceAnyOfWithOneOf(objectNode);
84-
pullDocumentationAndDefaultFromOneOf(objectNode);
83+
pullDocumentationAndDefaultFromAnyOf(objectNode);
8584
removeRequiredOnPropsWithDefaults(objectNode);
8685

8786
return JacksonMapper.toMap(objectNode);
@@ -111,23 +110,15 @@ private void removeRequiredOnPropsWithDefaults(ObjectNode objectNode) {
111110
});
112111
}
113112

114-
private void replaceAnyOfWithOneOf(ObjectNode objectNode) {
115-
objectNode.findParents("anyOf").forEach(jsonNode -> {
116-
if (jsonNode instanceof ObjectNode oNode) {
117-
oNode.set("oneOf", oNode.remove("anyOf"));
118-
}
119-
});
120-
}
121-
122-
// This hack exists because for Property we generate a oneOf for properties that are not strings.
123-
// By default, the 'default' is in each oneOf which Monaco editor didn't take into account.
124-
// So, we pull off the 'default' from any of the oneOf to the parent.
113+
// This hack exists because for Property we generate a anyOf for properties that are not strings.
114+
// By default, the 'default' is in each anyOf which Monaco editor didn't take into account.
115+
// So, we pull off the 'default' from any of the anyOf to the parent.
125116
// same thing for documentation fields: 'title', 'description', '$deprecated'
126-
private void pullDocumentationAndDefaultFromOneOf(ObjectNode objectNode) {
127-
objectNode.findParents("oneOf").forEach(jsonNode -> {
117+
private void pullDocumentationAndDefaultFromAnyOf(ObjectNode objectNode) {
118+
objectNode.findParents("anyOf").forEach(jsonNode -> {
128119
if (jsonNode instanceof ObjectNode oNode) {
129-
JsonNode oneOf = oNode.get("oneOf");
130-
if (oneOf instanceof ArrayNode arrayNode) {
120+
JsonNode anyOf = oNode.get("anyOf");
121+
if (anyOf instanceof ArrayNode arrayNode) {
131122
Iterator<JsonNode> it = arrayNode.elements();
132123
var nodesToPullUp = new HashMap<String, Optional<JsonNode>>(Map.ofEntries(
133124
Map.entry("default", Optional.empty()),
@@ -641,8 +632,7 @@ protected <T> Map<String, Object> generate(Class<? extends T> cls, @Nullable Cla
641632
SchemaGenerator generator = new SchemaGenerator(schemaGeneratorConfig);
642633
try {
643634
ObjectNode objectNode = generator.generateSchema(cls);
644-
replaceAnyOfWithOneOf(objectNode);
645-
pullDocumentationAndDefaultFromOneOf(objectNode);
635+
pullDocumentationAndDefaultFromAnyOf(objectNode);
646636
removeRequiredOnPropsWithDefaults(objectNode);
647637

648638
return JacksonMapper.toMap(extractMainRef(objectNode));

core/src/test/java/io/kestra/core/docs/JsonSchemaGeneratorTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ void flow() throws URISyntaxException {
9393
.get("tasks")
9494
.get("items")
9595
);
96-
assertThat(items.containsKey("anyOf"), is(false));
97-
assertThat(items.containsKey("oneOf"), is(true));
96+
assertThat(items.containsKey("anyOf"), is(true));
97+
assertThat(items.containsKey("oneOf"), is(false));
9898

9999
var bash = definitions.get(Log.class.getName());
100100
assertThat((List<String>) bash.get("required"), not(contains("level")));
@@ -123,7 +123,7 @@ void task() throws URISyntaxException {
123123

124124
var definitions = (Map<String, Map<String, Object>>) generate.get("definitions");
125125
var task = definitions.get(Task.class.getName());
126-
Assertions.assertNotNull(task.get("oneOf"));
126+
Assertions.assertNotNull(task.get("anyOf"));
127127
});
128128
}
129129

ui/package-lock.json

Lines changed: 197 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ui/package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
"build-storybook": "storybook build",
1818
"test:storybook": "test-storybook",
1919
"prepare": "cd .. && husky ui/.husky && rm -f .git/hooks/*",
20-
"notes": "node ./scripts/ci/generateReleaseNotes"
20+
"notes": "node ./scripts/ci/generateReleaseNotes",
21+
"postinstall": "patch-package"
2122
},
2223
"dependencies": {
2324
"@js-joda/core": "^5.6.3",
@@ -117,7 +118,8 @@
117118
"typescript": "^5.7.2",
118119
"typescript-eslint": "^8.28.0",
119120
"vite": "^6.2.3",
120-
"vitest": "^3.0.5"
121+
"vitest": "^3.0.5",
122+
"patch-package": "^8.0.0"
121123
},
122124
"optionalDependencies": {
123125
"@esbuild/darwin-arm64": "^0.25.1",

0 commit comments

Comments
 (0)