diff --git a/Cargo.lock b/Cargo.lock index 561153f..2e9e642 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -359,7 +359,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.1", ] [[package]] @@ -518,7 +518,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.1", ] [[package]] @@ -1768,7 +1768,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.1", ] [[package]] @@ -1825,7 +1825,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.52.0", + "windows-sys 0.61.1", ] [[package]] @@ -2102,7 +2102,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.1", ] [[package]] @@ -2415,9 +2415,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tucana" -version = "0.0.56" +version = "0.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33d3527f287b0f0f0a3784cb55c801dabc226bf79ebee28394dd31f3b9794ff" +checksum = "9730d10bc86e1b107aad9dafcd325895fc644ecf23333341b6df7dff3027572b" dependencies = [ "pbjson", "pbjson-build", @@ -2698,7 +2698,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.1", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 66cbd3a..9eb96df 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ edition = "2024" [workspace.dependencies] serde = "1.0.219" serde_json = "1.0.140" -tucana = "0.0.56" +tucana = "0.0.58" clap = "4.5.41" colored = "3.0" tabled = "0.20" diff --git a/crates/cli/src/analyser/data_type.rs b/crates/cli/src/analyser/data_type.rs index 351a239..fb6e5de 100644 --- a/crates/cli/src/analyser/data_type.rs +++ b/crates/cli/src/analyser/data_type.rs @@ -47,12 +47,12 @@ impl Analyser { )); } - if dt.signature == "" { + if dt.r#type == "" { self.reporter.add(Diagnose::new( dt.identifier.clone(), adt.original_definition.clone(), DiagnosticKind::NullField { - field_name: "signature".into(), + field_name: "type".into(), }, )); } diff --git a/crates/cli/src/analyser/flow_type.rs b/crates/cli/src/analyser/flow_type.rs index 01b49a4..4dc58ff 100644 --- a/crates/cli/src/analyser/flow_type.rs +++ b/crates/cli/src/analyser/flow_type.rs @@ -8,6 +8,18 @@ impl Analyser { let name = flow.identifier.clone(); let original = aft.original_definition.clone(); + for linked in flow.linked_data_type_identifiers.clone() { + if !self.data_type_identifier_exists(linked.as_str(), None) { + self.reporter.add(Diagnose::new( + name.clone(), + original.clone(), + DiagnosticKind::UndefinedDataTypeIdentifier { + identifier: linked.clone(), + }, + )); + } + } + if flow.display_icon.is_empty() { self.reporter.add(Diagnose::new( name.clone(), @@ -65,31 +77,43 @@ impl Analyser { )); } - if let Some(identifier) = &flow.input_type_identifier + if let Some(identifier) = &flow.input_type && identifier == "" { self.reporter.add(Diagnose::new( name.clone(), original.clone(), DiagnosticKind::NullField { - field_name: "input_type_identifier".into(), + field_name: "input_type".into(), }, )); } - if let Some(identifier) = &flow.return_type_identifier + if let Some(identifier) = &flow.return_type && identifier == "" { self.reporter.add(Diagnose::new( name.clone(), original.clone(), DiagnosticKind::NullField { - field_name: "return_type_identifier".into(), + field_name: "return_type".into(), }, )); } for setting in &flow.settings { + for linked in setting.linked_data_type_identifiers.clone() { + if !self.data_type_identifier_exists(linked.as_str(), None) { + self.reporter.add(Diagnose::new( + name.clone(), + original.clone(), + DiagnosticKind::UndefinedDataTypeIdentifier { + identifier: linked.clone(), + }, + )); + } + } + if setting.name.is_empty() { self.reporter.add(Diagnose::new( setting.identifier.clone(), @@ -108,12 +132,12 @@ impl Analyser { }, )); } - if !self.data_type_identifier_exists(&setting.data_type_identifier, None) { + if !self.data_type_identifier_exists(&setting.r#type, None) { self.reporter.add(Diagnose::new( name.clone(), original.clone(), DiagnosticKind::UndefinedDataTypeIdentifier { - identifier: setting.data_type_identifier.clone(), + identifier: setting.r#type.clone(), }, )); } diff --git a/definitions/cron/data_type/type/cron_day_of_month.proto.json b/definitions/cron/data_type/type/cron_day_of_month.proto.json index 05ede7c..11d08e6 100644 --- a/definitions/cron/data_type/type/cron_day_of_month.proto.json +++ b/definitions/cron/data_type/type/cron_day_of_month.proto.json @@ -25,6 +25,6 @@ "content": "Cron Day of Month" } ], - "linked_data_type_identifiers": [], - "signature": "string" + "linkedDataTypeIdentifiers": [], + "type": "string" } diff --git a/definitions/cron/data_type/type/cron_day_of_week.proto.json b/definitions/cron/data_type/type/cron_day_of_week.proto.json index e935c21..1d0a9f3 100644 --- a/definitions/cron/data_type/type/cron_day_of_week.proto.json +++ b/definitions/cron/data_type/type/cron_day_of_week.proto.json @@ -25,6 +25,6 @@ "content": "Cron Day of Week" } ], - "linked_data_type_identifiers": [], - "signature": "string | 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | 'SUN'" + "linkedDataTypeIdentifiers": [], + "type": "string | 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | 'SUN'" } diff --git a/definitions/cron/data_type/type/cron_hour.proto.json b/definitions/cron/data_type/type/cron_hour.proto.json index b0433cb..3aff9f4 100644 --- a/definitions/cron/data_type/type/cron_hour.proto.json +++ b/definitions/cron/data_type/type/cron_hour.proto.json @@ -25,6 +25,6 @@ "content": "Cron Hour" } ], - "linked_data_type_identifiers": [], - "signature": "string" + "linkedDataTypeIdentifiers": [], + "type": "string" } diff --git a/definitions/cron/data_type/type/cron_minute.proto.json b/definitions/cron/data_type/type/cron_minute.proto.json index d7fa03a..1f51bf4 100644 --- a/definitions/cron/data_type/type/cron_minute.proto.json +++ b/definitions/cron/data_type/type/cron_minute.proto.json @@ -25,6 +25,6 @@ "content": "Cron Minute" } ], - "linked_data_type_identifiers": [], - "signature": "string" + "linkedDataTypeIdentifiers": [], + "type": "string" } diff --git a/definitions/cron/data_type/type/cron_month.proto.json b/definitions/cron/data_type/type/cron_month.proto.json index bf2743a..d8d52d8 100644 --- a/definitions/cron/data_type/type/cron_month.proto.json +++ b/definitions/cron/data_type/type/cron_month.proto.json @@ -25,6 +25,6 @@ "content": "Cron Month" } ], - "linked_data_type_identifiers": [], - "signature": "string | 'JAN' | 'FEB' | 'MAR' | 'APR' | 'MAY' | 'JUN' | 'JUL' | 'AUG' | 'SEP' | 'OCT' | 'NOV' | 'DEC' " + "linkedDataTypeIdentifiers": [], + "type": "string | 'JAN' | 'FEB' | 'MAR' | 'APR' | 'MAY' | 'JUN' | 'JUL' | 'AUG' | 'SEP' | 'OCT' | 'NOV' | 'DEC' " } diff --git a/definitions/cron/flow_type/cron.proto.json b/definitions/cron/flow_type/cron.proto.json index 73a7547..619f076 100644 --- a/definitions/cron/flow_type/cron.proto.json +++ b/definitions/cron/flow_type/cron.proto.json @@ -4,7 +4,10 @@ { "identifier": "CRON_MINUTE", "unique": "NONE", - "dataTypeIdentifier": "CRON_MINUTE", + "type": "CRON_MINUTE", + "linkedDataTypeIdentifiers": [ + "CRON_MINUTE" + ], "defaultValue": null, "name": [ { @@ -22,7 +25,10 @@ { "identifier": "CRON_HOUR", "unique": "NONE", - "dataTypeIdentifier": "CRON_HOUR", + "type": "CRON_HOUR", + "linkedDataTypeIdentifiers": [ + "CRON_HOUR" + ], "defaultValue": null, "name": [ { @@ -40,7 +46,10 @@ { "identifier": "CRON_DAY_OF_MONTH", "unique": "NONE", - "dataTypeIdentifier": "CRON_DAY_OF_MONTH", + "type": "CRON_DAY_OF_MONTH", + "linkedDataTypeIdentifiers": [ + "CRON_DAY_OF_MONTH" + ], "defaultValue": null, "name": [ { @@ -58,7 +67,10 @@ { "identifier": "CRON_MONTH", "unique": "NONE", - "dataTypeIdentifier": "CRON_MONTH", + "type": "CRON_MONTH", + "linkedDataTypeIdentifiers": [ + "CRON_MONTH" + ], "defaultValue": null, "name": [ { @@ -76,7 +88,10 @@ { "identifier": "CRON_DAY_OF_WEEK", "unique": "NONE", - "dataTypeIdentifier": "CRON_DAY_OF_WEEK", + "type": "CRON_DAY_OF_WEEK", + "linkedDataTypeIdentifiers": [ + "CRON_DAY_OF_WEEK" + ], "defaultValue": null, "name": [ { diff --git a/definitions/rest/data_type/rest_adapter_input.proto.json b/definitions/rest/data_type/rest_adapter_input.proto.json index f80b69b..83c6665 100644 --- a/definitions/rest/data_type/rest_adapter_input.proto.json +++ b/definitions/rest/data_type/rest_adapter_input.proto.json @@ -22,8 +22,8 @@ "genericKeys": [ "T" ], - "linked_data_type_identifiers": [ + "linkedDataTypeIdentifiers": [ "OBJECT" ], - "signature": "{ body: T, headers: OBJECT<{}> }" + "type": "{ body: T, headers: OBJECT<{}> }" } diff --git a/definitions/rest/flow_type/rest.proto.json b/definitions/rest/flow_type/rest.proto.json index ef0331a..fdab372 100644 --- a/definitions/rest/flow_type/rest.proto.json +++ b/definitions/rest/flow_type/rest.proto.json @@ -4,7 +4,10 @@ { "identifier": "HTTP_URL", "unique": "PROJECT", - "dataTypeIdentifier": "HTTP_URL", + "type": "HTTP_URL", + "linkedDataTypeIdentifiers": [ + "HTTP_URL" + ], "name": [ { "code": "en-US", @@ -21,7 +24,10 @@ { "identifier": "HTTP_METHOD", "unique": "NONE", - "dataTypeIdentifier": "HTTP_METHOD", + "type": "HTTP_METHOD", + "linkedDataTypeIdentifiers": [ + "HTTP_METHOD" + ], "name": [ { "code": "en-US", @@ -36,8 +42,12 @@ ] } ], - "inputTypeIdentifier": "REST_ADAPTER_INPUT", - "returnTypeIdentifier": "HTTP_RESPONSE", + "inputType": "REST_ADAPTER_INPUT", + "returnType": "HTTP_RESPONSE", + "linkedDataTypeIdentifiers": [ + "REST_ADAPTER_INPUT", + "HTTP_RESPONSE" + ], "editable": false, "name": [ { diff --git a/definitions/standard/data_type/array/list.proto.json b/definitions/standard/data_type/array/list.proto.json index c0288c7..fc14c89 100644 --- a/definitions/standard/data_type/array/list.proto.json +++ b/definitions/standard/data_type/array/list.proto.json @@ -20,5 +20,5 @@ ], "genericKeys": ["T"], "rules": [], - "signature": "T[]" + "type": "T[]" } diff --git a/definitions/standard/data_type/node/comparator.proto.json b/definitions/standard/data_type/node/comparator.proto.json index ddddb43..5ad0efb 100644 --- a/definitions/standard/data_type/node/comparator.proto.json +++ b/definitions/standard/data_type/node/comparator.proto.json @@ -20,7 +20,7 @@ ], "rules": [], "genericKeys": ["I"], - "signature": "(left: I, right: I): NUMBER", + "type": "(left: I, right: I): NUMBER", "linkedDataTypeIdentifiers": [ "NUMBER" ] diff --git a/definitions/standard/data_type/node/consumer.proto.json b/definitions/standard/data_type/node/consumer.proto.json index e1bc2f3..1f41590 100644 --- a/definitions/standard/data_type/node/consumer.proto.json +++ b/definitions/standard/data_type/node/consumer.proto.json @@ -20,5 +20,5 @@ ], "rules": [], "genericKeys": ["T"], - "signature": "(item: T): void" + "type": "(item: T): void" } diff --git a/definitions/standard/data_type/node/predicate.proto.json b/definitions/standard/data_type/node/predicate.proto.json index 835dacd..fe93cd6 100644 --- a/definitions/standard/data_type/node/predicate.proto.json +++ b/definitions/standard/data_type/node/predicate.proto.json @@ -20,8 +20,8 @@ ], "rules": [], "genericKeys": ["T"], - "signature": "(item: T): BOOLEAN", - "linked_data_type_identifiers": [ + "type": "(item: T): BOOLEAN", + "linkedDataTypeIdentifiers": [ "BOOLEAN" ] } diff --git a/definitions/standard/data_type/node/runnable.proto.json b/definitions/standard/data_type/node/runnable.proto.json index 3113a5d..e512f7d 100644 --- a/definitions/standard/data_type/node/runnable.proto.json +++ b/definitions/standard/data_type/node/runnable.proto.json @@ -19,5 +19,5 @@ } ], "rules": [], - "signature": "(): void" + "type": "(): void" } diff --git a/definitions/standard/data_type/node/transform.proto.json b/definitions/standard/data_type/node/transform.proto.json index 98d751c..0ca5ef2 100644 --- a/definitions/standard/data_type/node/transform.proto.json +++ b/definitions/standard/data_type/node/transform.proto.json @@ -20,5 +20,5 @@ ], "rules": [], "genericKeys": ["I", "R"], - "signature": "(item: I): R" + "type": "(item: I): R" } diff --git a/definitions/standard/data_type/object/http_request.proto.json b/definitions/standard/data_type/object/http_request.proto.json index c908be0..bd1d1ac 100644 --- a/definitions/standard/data_type/object/http_request.proto.json +++ b/definitions/standard/data_type/object/http_request.proto.json @@ -18,10 +18,10 @@ "content": "HTTP Request" } ], - "signature": "{ method: HTTP_METHOD, url: HTTP_URL, body: T, headers: OBJECT<{}> }", + "type": "{ method: HTTP_METHOD, url: HTTP_URL, body: T, headers: OBJECT<{}> }", "genericKeys": ["T"], "rules": [], - "linked_data_type_identifiers": [ + "linkedDataTypeIdentifiers": [ "HTTP_METHOD", "HTTP_URL", "OBJECT" diff --git a/definitions/standard/data_type/object/http_response.proto.json b/definitions/standard/data_type/object/http_response.proto.json index 51ee553..606c0fb 100644 --- a/definitions/standard/data_type/object/http_response.proto.json +++ b/definitions/standard/data_type/object/http_response.proto.json @@ -19,8 +19,8 @@ } ], "genericKeys": ["T"], - "signature": "{ body: T, headers: OBJECT<{}>, status_code: HTTP_STATUS_CODE }", - "linked_data_type_identifiers": [ + "type": "{ body: T, headers: OBJECT<{}>, status_code: HTTP_STATUS_CODE }", + "linkedDataTypeIdentifiers": [ "HTTP_STATUS_CODE", "OBJECT" ], diff --git a/definitions/standard/data_type/object/object.proto.json b/definitions/standard/data_type/object/object.proto.json index 283c87b..4602c62 100644 --- a/definitions/standard/data_type/object/object.proto.json +++ b/definitions/standard/data_type/object/object.proto.json @@ -19,6 +19,6 @@ } ], "genericKeys": ["T"], - "signature": "T & {}", + "type": "T & {}", "rules": [] } diff --git a/definitions/standard/data_type/primitive/boolean.proto.json b/definitions/standard/data_type/primitive/boolean.proto.json index bffaba5..5350629 100644 --- a/definitions/standard/data_type/primitive/boolean.proto.json +++ b/definitions/standard/data_type/primitive/boolean.proto.json @@ -18,6 +18,6 @@ "content": "Boolean" } ], - "signature": "boolean", + "type": "boolean", "rules": [] } diff --git a/definitions/standard/data_type/primitive/number.proto.json b/definitions/standard/data_type/primitive/number.proto.json index c9425d7..356cd20 100644 --- a/definitions/standard/data_type/primitive/number.proto.json +++ b/definitions/standard/data_type/primitive/number.proto.json @@ -18,6 +18,6 @@ "content": "Number" } ], - "signature": "number", + "type": "number", "rules": [] } diff --git a/definitions/standard/data_type/primitive/text.proto.json b/definitions/standard/data_type/primitive/text.proto.json index ea428ca..2392698 100644 --- a/definitions/standard/data_type/primitive/text.proto.json +++ b/definitions/standard/data_type/primitive/text.proto.json @@ -18,6 +18,6 @@ "content": "Text" } ], - "signature": "string", + "type": "string", "rules": [] } diff --git a/definitions/standard/data_type/type/http_method.proto.json b/definitions/standard/data_type/type/http_method.proto.json index e5f903f..109efae 100644 --- a/definitions/standard/data_type/type/http_method.proto.json +++ b/definitions/standard/data_type/type/http_method.proto.json @@ -18,7 +18,7 @@ "content": "HTTP Method" } ], - "signature": "'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD'", - "linked_data_type_identifiers": [], + "type": "'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD'", + "linkedDataTypeIdentifiers": [], "rules": [] } diff --git a/definitions/standard/data_type/type/http_status_code.proto.json b/definitions/standard/data_type/type/http_status_code.proto.json index 8d137f6..b117d79 100644 --- a/definitions/standard/data_type/type/http_status_code.proto.json +++ b/definitions/standard/data_type/type/http_status_code.proto.json @@ -18,8 +18,8 @@ "content": "HTTP Status Code" } ], - "signature": "NUMBER", - "linked_data_type_identifiers": [ + "type": "NUMBER", + "linkedDataTypeIdentifiers": [ "NUMBER" ], "rules": [ diff --git a/definitions/standard/data_type/type/http_url.proto.json b/definitions/standard/data_type/type/http_url.proto.json index 2ddd092..59ab05b 100644 --- a/definitions/standard/data_type/type/http_url.proto.json +++ b/definitions/standard/data_type/type/http_url.proto.json @@ -18,8 +18,8 @@ "content": "HTTP Route" } ], - "signature": "TEXT", - "linked_data_type_identifiers": [ + "type": "TEXT", + "linkedDataTypeIdentifiers": [ "TEXT" ], "rules": [ diff --git a/definitions/standard/data_type/type/text_encoding.proto.json b/definitions/standard/data_type/type/text_encoding.proto.json index 5e8bbcd..08815cc 100644 --- a/definitions/standard/data_type/type/text_encoding.proto.json +++ b/definitions/standard/data_type/type/text_encoding.proto.json @@ -18,6 +18,6 @@ "content": "Text Encoding" } ], - "signature": "'BASE64'", + "type": "'BASE64'", "rules": [] }