From f17443a5780adb6dbce1b6a1b3446d583673854d Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Fri, 16 Jan 2026 11:45:06 -0400 Subject: [PATCH] Introduce a better symbol management mechanism Signed-off-by: Juan Cruz Viotti --- src/generator/CMakeLists.txt | 2 +- .../include/sourcemeta/codegen/generator.h | 13 +- .../sourcemeta/codegen/generator_typescript.h | 21 +- src/generator/mangle.cc | 90 +++ src/generator/typescript.cc | 69 +- src/ir/CMakeLists.txt | 2 +- src/ir/include/sourcemeta/codegen/ir.h | 8 + src/ir/ir_default_compiler.h | 140 +++- src/ir/ir_symbol.cc | 52 ++ .../additional_properties_false/expected.d.ts | 10 +- .../additional_properties_true/expected.d.ts | 40 +- .../2020-12/all_type_values/expected.d.ts | 72 +- .../2020-12/all_type_values/test.ts | 32 +- .../2020-12/anchor_refs/expected.d.ts | 34 +- .../typescript/2020-12/anchor_refs/test.ts | 18 +- .../complex_nested_object/expected.d.ts | 304 ++++---- .../2020-12/complex_nested_object/test.ts | 48 +- .../2020-12/const_keyword/expected.d.ts | 40 +- .../typescript/2020-12/const_keyword/test.ts | 12 +- .../2020-12/deeply_nested_refs/expected.d.ts | 270 +++---- .../2020-12/deeply_nested_refs/test.ts | 34 +- .../2020-12/defs_and_refs/expected.d.ts | 182 ++--- .../typescript/2020-12/defs_and_refs/test.ts | 40 +- .../2020-12/embedded_resources/expected.d.ts | 14 +- .../2020-12/embedded_resources/test.ts | 6 +- .../2020-12/enum_complex_types/expected.d.ts | 18 +- .../2020-12/enum_complex_types/test.ts | 32 +- .../expected.d.ts | 284 +++---- .../implicit_types_and_reused_refs/test.ts | 54 +- .../expected.d.ts | 16 +- .../expected.d.ts | 4 +- .../2020-12/oneof_union/expected.d.ts | 30 +- .../2020-12/tuples_and_arrays/expected.d.ts | 388 +++++----- .../2020-12/tuples_and_arrays/test.ts | 12 +- .../2020-12/vocabulary_ignored/expected.d.ts | 14 +- test/generator/generator_typescript_test.cc | 718 +++++++++++------- test/ir/CMakeLists.txt | 2 +- test/ir/ir_2020_12_test.cc | 143 ++++ test/ir/ir_symbol_test.cc | 121 +++ test/ir/ir_test_utils.h | 3 + 40 files changed, 2027 insertions(+), 1365 deletions(-) create mode 100644 src/generator/mangle.cc create mode 100644 src/ir/ir_symbol.cc create mode 100644 test/ir/ir_symbol_test.cc diff --git a/src/generator/CMakeLists.txt b/src/generator/CMakeLists.txt index 70b46e2..450ad04 100644 --- a/src/generator/CMakeLists.txt +++ b/src/generator/CMakeLists.txt @@ -1,7 +1,7 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT codegen NAME generator FOLDER "Codegen/Generator" PRIVATE_HEADERS typescript.h - SOURCES typescript.cc) + SOURCES typescript.cc mangle.cc) if(CODEGEN_INSTALL) sourcemeta_library_install(NAMESPACE sourcemeta PROJECT codegen NAME generator) diff --git a/src/generator/include/sourcemeta/codegen/generator.h b/src/generator/include/sourcemeta/codegen/generator.h index 8673ba6..c003dd6 100644 --- a/src/generator/include/sourcemeta/codegen/generator.h +++ b/src/generator/include/sourcemeta/codegen/generator.h @@ -13,20 +13,31 @@ #include +#include // std::map #include // std::ostream +#include // std::string #include // std::string_view #include // std::visit +#include // std::vector /// @defgroup generator Generator /// @brief The codegen JSON Schema code generation package namespace sourcemeta::codegen { +/// @ingroup generator +SOURCEMETA_CODEGEN_GENERATOR_EXPORT +auto mangle(const std::string_view prefix, + const sourcemeta::core::Pointer &pointer, + const std::vector &symbol, + std::map &cache) + -> const std::string &; + /// @ingroup generator template auto generate(std::ostream &output, const IRResult &result, const std::string_view prefix = "Schema") -> void { - const T visitor{output, prefix}; + T visitor{output, prefix}; const char *separator{""}; for (const auto &entity : result) { output << separator; diff --git a/src/generator/include/sourcemeta/codegen/generator_typescript.h b/src/generator/include/sourcemeta/codegen/generator_typescript.h index d359027..96435c0 100644 --- a/src/generator/include/sourcemeta/codegen/generator_typescript.h +++ b/src/generator/include/sourcemeta/codegen/generator_typescript.h @@ -7,7 +7,11 @@ #include +#include + +#include // std::map #include // std::ostream +#include // std::string #include // std::string_view namespace sourcemeta::codegen { @@ -16,14 +20,14 @@ namespace sourcemeta::codegen { class SOURCEMETA_CODEGEN_GENERATOR_EXPORT TypeScript { public: TypeScript(std::ostream &stream, std::string_view type_prefix); - auto operator()(const IRScalar &entry) const -> void; - auto operator()(const IREnumeration &entry) const -> void; - auto operator()(const IRObject &entry) const -> void; - auto operator()(const IRImpossible &entry) const -> void; - auto operator()(const IRArray &entry) const -> void; - auto operator()(const IRReference &entry) const -> void; - auto operator()(const IRTuple &entry) const -> void; - auto operator()(const IRUnion &entry) const -> void; + auto operator()(const IRScalar &entry) -> void; + auto operator()(const IREnumeration &entry) -> void; + auto operator()(const IRObject &entry) -> void; + auto operator()(const IRImpossible &entry) -> void; + auto operator()(const IRArray &entry) -> void; + auto operator()(const IRReference &entry) -> void; + auto operator()(const IRTuple &entry) -> void; + auto operator()(const IRUnion &entry) -> void; private: // Exporting symbols that depends on the standard C++ library is considered @@ -35,6 +39,7 @@ class SOURCEMETA_CODEGEN_GENERATOR_EXPORT TypeScript { // NOLINTNEXTLINE(cppcoreguidelines-avoid-const-or-ref-data-members) std::ostream &output; std::string_view prefix; + std::map cache; #if defined(_MSC_VER) #pragma warning(default : 4251) #endif diff --git a/src/generator/mangle.cc b/src/generator/mangle.cc new file mode 100644 index 0000000..661a148 --- /dev/null +++ b/src/generator/mangle.cc @@ -0,0 +1,90 @@ +#include + +namespace { + +auto is_alpha(char character) -> bool { + return (character >= 'a' && character <= 'z') || + (character >= 'A' && character <= 'Z'); +} + +auto is_digit(char character) -> bool { + return character >= '0' && character <= '9'; +} + +auto to_upper(char character) -> char { + if (character >= 'a' && character <= 'z') { + return static_cast(character - 'a' + 'A'); + } + return character; +} + +auto symbol_to_identifier(const std::string_view prefix, + const std::vector &symbol) + -> std::string { + std::string result{prefix}; + + for (const auto &segment : symbol) { + if (segment.empty()) { + continue; + } + + bool first_in_segment{true}; + for (const auto character : segment) { + if (is_alpha(character)) { + if (first_in_segment) { + result += to_upper(character); + first_in_segment = false; + } else { + result += character; + } + } else if (is_digit(character)) { + if (first_in_segment) { + result += '_'; + } + result += character; + first_in_segment = false; + } else if (character == '_' || character == '$') { + result += character; + first_in_segment = false; + } + } + } + + if (result.empty()) { + return "_"; + } + + if (is_digit(result[0])) { + result.insert(0, "_"); + } + + return result; +} + +} // namespace + +namespace sourcemeta::codegen { + +auto mangle(const std::string_view prefix, + const sourcemeta::core::Pointer &pointer, + const std::vector &symbol, + std::map &cache) + -> const std::string & { + auto name{symbol_to_identifier(prefix, symbol)}; + + while (true) { + auto iterator{cache.find(name)}; + if (iterator != cache.end()) { + if (iterator->second == pointer) { + return iterator->first; + } + + name.insert(0, "_"); + } else { + auto result{cache.insert({std::move(name), pointer})}; + return result.first->first; + } + } +} + +} // namespace sourcemeta::codegen diff --git a/src/generator/typescript.cc b/src/generator/typescript.cc index 7d4f79f..75e4d5f 100644 --- a/src/generator/typescript.cc +++ b/src/generator/typescript.cc @@ -40,9 +40,9 @@ namespace sourcemeta::codegen { TypeScript::TypeScript(std::ostream &stream, const std::string_view type_prefix) : output{stream}, prefix{type_prefix} {} -auto TypeScript::operator()(const IRScalar &entry) const -> void { +auto TypeScript::operator()(const IRScalar &entry) -> void { this->output << "export type " - << sourcemeta::core::mangle(entry.pointer, this->prefix) + << mangle(this->prefix, entry.pointer, entry.symbol, this->cache) << " = "; switch (entry.value) { @@ -64,9 +64,9 @@ auto TypeScript::operator()(const IRScalar &entry) const -> void { this->output << ";\n"; } -auto TypeScript::operator()(const IREnumeration &entry) const -> void { +auto TypeScript::operator()(const IREnumeration &entry) -> void { this->output << "export type " - << sourcemeta::core::mangle(entry.pointer, this->prefix) + << mangle(this->prefix, entry.pointer, entry.symbol, this->cache) << " = "; const char *separator{""}; @@ -79,8 +79,9 @@ auto TypeScript::operator()(const IREnumeration &entry) const -> void { this->output << ";\n"; } -auto TypeScript::operator()(const IRObject &entry) const -> void { - const auto type_name{sourcemeta::core::mangle(entry.pointer, this->prefix)}; +auto TypeScript::operator()(const IRObject &entry) -> void { + const auto type_name{ + mangle(this->prefix, entry.pointer, entry.symbol, this->cache)}; const auto has_typed_additional{ std::holds_alternative(entry.additional)}; const auto allows_any_additional{ @@ -88,10 +89,10 @@ auto TypeScript::operator()(const IRObject &entry) const -> void { std::get(entry.additional)}; if (has_typed_additional && entry.members.empty()) { + const auto &additional_type{std::get(entry.additional)}; this->output << "export type " << type_name << " = Record(entry.additional).pointer, - this->prefix) + << mangle(this->prefix, additional_type.pointer, + additional_type.symbol, this->cache) << ">;\n"; return; } @@ -117,7 +118,8 @@ auto TypeScript::operator()(const IRObject &entry) const -> void { this->output << " " << readonly_marker << "\"" << escape_string(member_name) << "\"" << optional_marker << ": " - << sourcemeta::core::mangle(member_value.pointer, this->prefix) + << mangle(this->prefix, member_value.pointer, + member_value.symbol, this->cache) << ";\n"; } @@ -135,15 +137,15 @@ auto TypeScript::operator()(const IRObject &entry) const -> void { this->output << " // match a superset of what JSON Schema allows\n"; for (const auto &[member_name, member_value] : entry.members) { this->output << " " - << sourcemeta::core::mangle(member_value.pointer, - this->prefix) + << mangle(this->prefix, member_value.pointer, + member_value.symbol, this->cache) << " |\n"; } + const auto &additional_type{std::get(entry.additional)}; this->output << " " - << sourcemeta::core::mangle( - std::get(entry.additional).pointer, - this->prefix) + << mangle(this->prefix, additional_type.pointer, + additional_type.symbol, this->cache) << " |\n"; this->output << " undefined;\n"; } @@ -151,19 +153,20 @@ auto TypeScript::operator()(const IRObject &entry) const -> void { this->output << "}\n"; } -auto TypeScript::operator()(const IRImpossible &entry) const -> void { +auto TypeScript::operator()(const IRImpossible &entry) -> void { this->output << "export type " - << sourcemeta::core::mangle(entry.pointer, this->prefix) + << mangle(this->prefix, entry.pointer, entry.symbol, this->cache) << " = never;\n"; } -auto TypeScript::operator()(const IRArray &entry) const -> void { +auto TypeScript::operator()(const IRArray &entry) -> void { this->output << "export type " - << sourcemeta::core::mangle(entry.pointer, this->prefix) + << mangle(this->prefix, entry.pointer, entry.symbol, this->cache) << " = "; if (entry.items.has_value()) { - this->output << sourcemeta::core::mangle(entry.items->pointer, this->prefix) + this->output << mangle(this->prefix, entry.items->pointer, + entry.items->symbol, this->cache) << "[]"; } else { this->output << "unknown[]"; @@ -172,44 +175,48 @@ auto TypeScript::operator()(const IRArray &entry) const -> void { this->output << ";\n"; } -auto TypeScript::operator()(const IRReference &entry) const -> void { +auto TypeScript::operator()(const IRReference &entry) -> void { this->output << "export type " - << sourcemeta::core::mangle(entry.pointer, this->prefix) << " = " - << sourcemeta::core::mangle(entry.target.pointer, this->prefix) + << mangle(this->prefix, entry.pointer, entry.symbol, this->cache) + << " = " + << mangle(this->prefix, entry.target.pointer, + entry.target.symbol, this->cache) << ";\n"; } -auto TypeScript::operator()(const IRTuple &entry) const -> void { +auto TypeScript::operator()(const IRTuple &entry) -> void { this->output << "export type " - << sourcemeta::core::mangle(entry.pointer, this->prefix) + << mangle(this->prefix, entry.pointer, entry.symbol, this->cache) << " = ["; const char *separator{""}; for (const auto &item : entry.items) { this->output << separator - << sourcemeta::core::mangle(item.pointer, this->prefix); + << mangle(this->prefix, item.pointer, item.symbol, + this->cache); separator = ", "; } if (entry.additional.has_value()) { this->output << separator << "..." - << sourcemeta::core::mangle(entry.additional->pointer, - this->prefix) + << mangle(this->prefix, entry.additional->pointer, + entry.additional->symbol, this->cache) << "[]"; } this->output << "];\n"; } -auto TypeScript::operator()(const IRUnion &entry) const -> void { +auto TypeScript::operator()(const IRUnion &entry) -> void { this->output << "export type " - << sourcemeta::core::mangle(entry.pointer, this->prefix) + << mangle(this->prefix, entry.pointer, entry.symbol, this->cache) << " =\n"; const char *separator{""}; for (const auto &value : entry.values) { this->output << separator << " " - << sourcemeta::core::mangle(value.pointer, this->prefix); + << mangle(this->prefix, value.pointer, value.symbol, + this->cache); separator = " |\n"; } diff --git a/src/ir/CMakeLists.txt b/src/ir/CMakeLists.txt index 74ff52f..63f0b18 100644 --- a/src/ir/CMakeLists.txt +++ b/src/ir/CMakeLists.txt @@ -1,7 +1,7 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT codegen NAME ir FOLDER "Codegen/IR" PRIVATE_HEADERS error.h - SOURCES ir.cc ir_default_compiler.h) + SOURCES ir.cc ir_symbol.cc ir_default_compiler.h) if(CODEGEN_INSTALL) sourcemeta_library_install(NAMESPACE sourcemeta PROJECT codegen NAME ir) diff --git a/src/ir/include/sourcemeta/codegen/ir.h b/src/ir/include/sourcemeta/codegen/ir.h index c137a31..ce56d67 100644 --- a/src/ir/include/sourcemeta/codegen/ir.h +++ b/src/ir/include/sourcemeta/codegen/ir.h @@ -16,6 +16,7 @@ #include // std::uint8_t #include // std::function #include // std::optional, std::nullopt +#include // std::string #include // std::pair #include // std::variant #include // std::vector @@ -37,6 +38,7 @@ enum class IRScalarType : std::uint8_t { /// @ingroup ir struct IRType { sourcemeta::core::Pointer pointer; + std::vector symbol; }; /// @ingroup ir @@ -116,6 +118,12 @@ auto compile(const sourcemeta::core::JSON &schema, const std::string_view default_dialect = "", const std::string_view default_id = "") -> IRResult; +/// @ingroup ir +SOURCEMETA_CODEGEN_IR_EXPORT +auto symbol(const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::core::SchemaFrame::Location &location) + -> std::vector; + } // namespace sourcemeta::codegen #endif diff --git a/src/ir/ir_default_compiler.h b/src/ir/ir_default_compiler.h index 0716384..c7edc38 100644 --- a/src/ir/ir_default_compiler.h +++ b/src/ir/ir_default_compiler.h @@ -27,17 +27,18 @@ namespace sourcemeta::codegen { auto handle_impossible(const sourcemeta::core::JSON &, - const sourcemeta::core::SchemaFrame &, + const sourcemeta::core::SchemaFrame &frame, const sourcemeta::core::SchemaFrame::Location &location, const sourcemeta::core::Vocabularies &, const sourcemeta::core::SchemaResolver &, const sourcemeta::core::JSON &) -> IRImpossible { return IRImpossible{ - {.pointer = sourcemeta::core::to_pointer(location.pointer)}}; + {.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}}; } auto handle_string(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &, + const sourcemeta::core::SchemaFrame &frame, const sourcemeta::core::SchemaFrame::Location &location, const sourcemeta::core::Vocabularies &, const sourcemeta::core::SchemaResolver &, @@ -46,12 +47,13 @@ auto handle_string(const sourcemeta::core::JSON &schema, {"$schema", "$id", "$anchor", "$defs", "$vocabulary", "type", "minLength", "maxLength", "pattern", "format"}); - return IRScalar{{.pointer = sourcemeta::core::to_pointer(location.pointer)}, + return IRScalar{{.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, IRScalarType::String}; } auto handle_object(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &, + const sourcemeta::core::SchemaFrame &frame, const sourcemeta::core::SchemaFrame::Location &location, const sourcemeta::core::Vocabularies &, const sourcemeta::core::SchemaResolver &, @@ -89,9 +91,15 @@ auto handle_object(const sourcemeta::core::JSON &schema, property_pointer.push_back("properties"); property_pointer.push_back(entry.first); - IRObjectValue member_value{{.pointer = std::move(property_pointer)}, - required_set.contains(entry.first), - false}; + const auto property_location{ + frame.traverse(sourcemeta::core::to_weak_pointer(property_pointer))}; + assert(property_location.has_value()); + + IRObjectValue member_value{ + {.pointer = std::move(property_pointer), + .symbol = symbol(frame, property_location.value().get())}, + required_set.contains(entry.first), + false}; members.emplace_back(entry.first, std::move(member_value)); } @@ -104,17 +112,25 @@ auto handle_object(const sourcemeta::core::JSON &schema, } else { auto additional_pointer{sourcemeta::core::to_pointer(location.pointer)}; additional_pointer.push_back("additionalProperties"); - additional = IRType{.pointer = std::move(additional_pointer)}; + + const auto additional_location{frame.traverse( + sourcemeta::core::to_weak_pointer(additional_pointer))}; + assert(additional_location.has_value()); + + additional = + IRType{.pointer = std::move(additional_pointer), + .symbol = symbol(frame, additional_location.value().get())}; } } - return IRObject{{.pointer = sourcemeta::core::to_pointer(location.pointer)}, + return IRObject{{.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, std::move(members), std::move(additional)}; } auto handle_integer(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &, + const sourcemeta::core::SchemaFrame &frame, const sourcemeta::core::SchemaFrame::Location &location, const sourcemeta::core::Vocabularies &, const sourcemeta::core::SchemaResolver &, @@ -123,12 +139,13 @@ auto handle_integer(const sourcemeta::core::JSON &schema, {"$schema", "$id", "$anchor", "$defs", "$vocabulary", "type", "minimum", "maximum", "exclusiveMinimum", "exclusiveMaximum", "multipleOf"}); - return IRScalar{{.pointer = sourcemeta::core::to_pointer(location.pointer)}, + return IRScalar{{.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, IRScalarType::Integer}; } auto handle_number(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &, + const sourcemeta::core::SchemaFrame &frame, const sourcemeta::core::SchemaFrame::Location &location, const sourcemeta::core::Vocabularies &, const sourcemeta::core::SchemaResolver &, @@ -137,12 +154,13 @@ auto handle_number(const sourcemeta::core::JSON &schema, {"$schema", "$id", "$anchor", "$defs", "$vocabulary", "type", "minimum", "maximum", "exclusiveMinimum", "exclusiveMaximum", "multipleOf"}); - return IRScalar{{.pointer = sourcemeta::core::to_pointer(location.pointer)}, + return IRScalar{{.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, IRScalarType::Number}; } auto handle_array(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &, + const sourcemeta::core::SchemaFrame &frame, const sourcemeta::core::SchemaFrame::Location &location, const sourcemeta::core::Vocabularies &vocabularies, const sourcemeta::core::SchemaResolver &, @@ -167,7 +185,13 @@ auto handle_array(const sourcemeta::core::JSON &schema, item_pointer.push_back("prefixItems"); item_pointer.push_back(index); - tuple_items.push_back({.pointer = std::move(item_pointer)}); + const auto item_location{ + frame.traverse(sourcemeta::core::to_weak_pointer(item_pointer))}; + assert(item_location.has_value()); + + tuple_items.push_back( + {.pointer = std::move(item_pointer), + .symbol = symbol(frame, item_location.value().get())}); } std::optional additional{std::nullopt}; @@ -175,10 +199,17 @@ auto handle_array(const sourcemeta::core::JSON &schema, auto additional_pointer{sourcemeta::core::to_pointer(location.pointer)}; additional_pointer.push_back("items"); - additional = IRType{.pointer = std::move(additional_pointer)}; + const auto additional_location{frame.traverse( + sourcemeta::core::to_weak_pointer(additional_pointer))}; + assert(additional_location.has_value()); + + additional = + IRType{.pointer = std::move(additional_pointer), + .symbol = symbol(frame, additional_location.value().get())}; } - return IRTuple{{.pointer = sourcemeta::core::to_pointer(location.pointer)}, + return IRTuple{{.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, std::move(tuple_items), std::move(additional)}; } @@ -198,7 +229,13 @@ auto handle_array(const sourcemeta::core::JSON &schema, item_pointer.push_back("items"); item_pointer.push_back(index); - tuple_items.push_back({.pointer = std::move(item_pointer)}); + const auto item_location{ + frame.traverse(sourcemeta::core::to_weak_pointer(item_pointer))}; + assert(item_location.has_value()); + + tuple_items.push_back( + {.pointer = std::move(item_pointer), + .symbol = symbol(frame, item_location.value().get())}); } std::optional additional{std::nullopt}; @@ -206,10 +243,17 @@ auto handle_array(const sourcemeta::core::JSON &schema, auto additional_pointer{sourcemeta::core::to_pointer(location.pointer)}; additional_pointer.push_back("additionalItems"); - additional = IRType{.pointer = std::move(additional_pointer)}; + const auto additional_location{frame.traverse( + sourcemeta::core::to_weak_pointer(additional_pointer))}; + assert(additional_location.has_value()); + + additional = + IRType{.pointer = std::move(additional_pointer), + .symbol = symbol(frame, additional_location.value().get())}; } - return IRTuple{{.pointer = sourcemeta::core::to_pointer(location.pointer)}, + return IRTuple{{.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, std::move(tuple_items), std::move(additional)}; } @@ -218,15 +262,22 @@ auto handle_array(const sourcemeta::core::JSON &schema, if (subschema.defines("items")) { auto items_pointer{sourcemeta::core::to_pointer(location.pointer)}; items_pointer.push_back("items"); - items_type = IRType{.pointer = std::move(items_pointer)}; + + const auto items_location{ + frame.traverse(sourcemeta::core::to_weak_pointer(items_pointer))}; + assert(items_location.has_value()); + + items_type = IRType{.pointer = std::move(items_pointer), + .symbol = symbol(frame, items_location.value().get())}; } - return IRArray{{.pointer = sourcemeta::core::to_pointer(location.pointer)}, + return IRArray{{.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, std::move(items_type)}; } auto handle_enum(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &, + const sourcemeta::core::SchemaFrame &frame, const sourcemeta::core::SchemaFrame::Location &location, const sourcemeta::core::Vocabularies &, const sourcemeta::core::SchemaResolver &, @@ -238,7 +289,8 @@ auto handle_enum(const sourcemeta::core::JSON &schema, // Boolean and null special cases if (enum_json.size() == 1 && enum_json.at(0).is_null()) { - return IRScalar{{.pointer = sourcemeta::core::to_pointer(location.pointer)}, + return IRScalar{{.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, IRScalarType::Null}; } else if (enum_json.size() == 2) { const auto &first{enum_json.at(0)}; @@ -246,7 +298,8 @@ auto handle_enum(const sourcemeta::core::JSON &schema, if ((first.is_boolean() && second.is_boolean()) && (first.to_boolean() != second.to_boolean())) { return IRScalar{ - {.pointer = sourcemeta::core::to_pointer(location.pointer)}, + {.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, IRScalarType::Boolean}; } } @@ -254,12 +307,13 @@ auto handle_enum(const sourcemeta::core::JSON &schema, std::vector values{enum_json.as_array().cbegin(), enum_json.as_array().cend()}; return IREnumeration{ - {.pointer = sourcemeta::core::to_pointer(location.pointer)}, + {.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, std::move(values)}; } auto handle_anyof(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &, + const sourcemeta::core::SchemaFrame &frame, const sourcemeta::core::SchemaFrame::Location &location, const sourcemeta::core::Vocabularies &, const sourcemeta::core::SchemaResolver &, @@ -278,15 +332,22 @@ auto handle_anyof(const sourcemeta::core::JSON &schema, branch_pointer.push_back("anyOf"); branch_pointer.push_back(index); - branches.push_back({.pointer = std::move(branch_pointer)}); + const auto branch_location{ + frame.traverse(sourcemeta::core::to_weak_pointer(branch_pointer))}; + assert(branch_location.has_value()); + + branches.push_back( + {.pointer = std::move(branch_pointer), + .symbol = symbol(frame, branch_location.value().get())}); } - return IRUnion{{.pointer = sourcemeta::core::to_pointer(location.pointer)}, + return IRUnion{{.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, std::move(branches)}; } auto handle_oneof(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &, + const sourcemeta::core::SchemaFrame &frame, const sourcemeta::core::SchemaFrame::Location &location, const sourcemeta::core::Vocabularies &, const sourcemeta::core::SchemaResolver &, @@ -305,10 +366,17 @@ auto handle_oneof(const sourcemeta::core::JSON &schema, branch_pointer.push_back("oneOf"); branch_pointer.push_back(index); - branches.push_back({.pointer = std::move(branch_pointer)}); + const auto branch_location{ + frame.traverse(sourcemeta::core::to_weak_pointer(branch_pointer))}; + assert(branch_location.has_value()); + + branches.push_back( + {.pointer = std::move(branch_pointer), + .symbol = symbol(frame, branch_location.value().get())}); } - return IRUnion{{.pointer = sourcemeta::core::to_pointer(location.pointer)}, + return IRUnion{{.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, std::move(branches)}; } @@ -341,8 +409,10 @@ auto handle_ref(const sourcemeta::core::JSON &schema, const auto &target_location{target.value().get()}; return IRReference{ - {.pointer = sourcemeta::core::to_pointer(location.pointer)}, - {.pointer = sourcemeta::core::to_pointer(target_location.pointer)}}; + {.pointer = sourcemeta::core::to_pointer(location.pointer), + .symbol = symbol(frame, location)}, + {.pointer = sourcemeta::core::to_pointer(target_location.pointer), + .symbol = symbol(frame, target_location)}}; } auto default_compiler(const sourcemeta::core::JSON &schema, diff --git a/src/ir/ir_symbol.cc b/src/ir/ir_symbol.cc new file mode 100644 index 0000000..6ee84c6 --- /dev/null +++ b/src/ir/ir_symbol.cc @@ -0,0 +1,52 @@ +#include + +#include // std::ranges::reverse +#include // assert +#include // std::string +#include // std::vector + +namespace sourcemeta::codegen { + +auto symbol(const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::core::SchemaFrame::Location &location) + -> std::vector { + std::vector result; + + auto current_pointer{location.pointer}; + + while (true) { + const auto current_location{frame.traverse(current_pointer)}; + assert(current_location.has_value()); + + if (!current_location->get().parent.has_value()) { + break; + } + + const auto &parent_pointer{current_location->get().parent.value()}; + const auto segments_skipped{current_pointer.size() - parent_pointer.size()}; + assert(segments_skipped >= 1); + + if (segments_skipped >= 2) { + const auto &last_token{current_pointer.back()}; + if (last_token.is_property()) { + result.emplace_back(last_token.to_property()); + } else { + result.emplace_back(std::to_string(last_token.to_index())); + } + } else { + const auto &token{current_pointer.back()}; + if (token.is_property()) { + result.emplace_back(token.to_property()); + } else { + result.emplace_back(std::to_string(token.to_index())); + } + } + + current_pointer = parent_pointer; + } + + std::ranges::reverse(result); + return result; +} + +} // namespace sourcemeta::codegen diff --git a/test/e2e/typescript/2020-12/additional_properties_false/expected.d.ts b/test/e2e/typescript/2020-12/additional_properties_false/expected.d.ts index ac96d30..0bf6b67 100644 --- a/test/e2e/typescript/2020-12/additional_properties_false/expected.d.ts +++ b/test/e2e/typescript/2020-12/additional_properties_false/expected.d.ts @@ -1,10 +1,10 @@ -export type StrictPerson_Properties_Name = string; +export type StrictPersonName = string; -export type StrictPerson_Properties_Age = number; +export type StrictPersonAge = number; -export type StrictPerson_AdditionalProperties = never; +export type StrictPersonAdditionalProperties = never; export interface StrictPerson { - "name": StrictPerson_Properties_Name; - "age"?: StrictPerson_Properties_Age; + "name": StrictPersonName; + "age"?: StrictPersonAge; } diff --git a/test/e2e/typescript/2020-12/additional_properties_true/expected.d.ts b/test/e2e/typescript/2020-12/additional_properties_true/expected.d.ts index d1ecf6e..7480b56 100644 --- a/test/e2e/typescript/2020-12/additional_properties_true/expected.d.ts +++ b/test/e2e/typescript/2020-12/additional_properties_true/expected.d.ts @@ -1,36 +1,36 @@ -export type FlexibleRecord_Properties_Name = string; +export type FlexibleRecordName = string; -export type FlexibleRecord_Properties_Count = number; +export type FlexibleRecordCount = number; -export type FlexibleRecord_AdditionalProperties_AnyOf_ZIndex5 = number; +export type FlexibleRecordAdditionalProperties_5 = number; -export type FlexibleRecord_AdditionalProperties_AnyOf_ZIndex4 = string; +export type FlexibleRecordAdditionalProperties_4 = string; -export type FlexibleRecord_AdditionalProperties_AnyOf_ZIndex3 = unknown[]; +export type FlexibleRecordAdditionalProperties_3 = unknown[]; -export type FlexibleRecord_AdditionalProperties_AnyOf_ZIndex2 = Record; +export type FlexibleRecordAdditionalProperties_2 = Record; -export type FlexibleRecord_AdditionalProperties_AnyOf_ZIndex1 = boolean; +export type FlexibleRecordAdditionalProperties_1 = boolean; -export type FlexibleRecord_AdditionalProperties_AnyOf_ZIndex0 = null; +export type FlexibleRecordAdditionalProperties_0 = null; -export type FlexibleRecord_AdditionalProperties = - FlexibleRecord_AdditionalProperties_AnyOf_ZIndex0 | - FlexibleRecord_AdditionalProperties_AnyOf_ZIndex1 | - FlexibleRecord_AdditionalProperties_AnyOf_ZIndex2 | - FlexibleRecord_AdditionalProperties_AnyOf_ZIndex3 | - FlexibleRecord_AdditionalProperties_AnyOf_ZIndex4 | - FlexibleRecord_AdditionalProperties_AnyOf_ZIndex5; +export type FlexibleRecordAdditionalProperties = + FlexibleRecordAdditionalProperties_0 | + FlexibleRecordAdditionalProperties_1 | + FlexibleRecordAdditionalProperties_2 | + FlexibleRecordAdditionalProperties_3 | + FlexibleRecordAdditionalProperties_4 | + FlexibleRecordAdditionalProperties_5; export interface FlexibleRecord { - "name": FlexibleRecord_Properties_Name; - "count"?: FlexibleRecord_Properties_Count; + "name": FlexibleRecordName; + "count"?: FlexibleRecordCount; [key: string]: // As a notable limitation, TypeScript requires index signatures // to also include the types of all of its properties, so we must // match a superset of what JSON Schema allows - FlexibleRecord_Properties_Name | - FlexibleRecord_Properties_Count | - FlexibleRecord_AdditionalProperties | + FlexibleRecordName | + FlexibleRecordCount | + FlexibleRecordAdditionalProperties | undefined; } diff --git a/test/e2e/typescript/2020-12/all_type_values/expected.d.ts b/test/e2e/typescript/2020-12/all_type_values/expected.d.ts index ab8a809..5f60d9e 100644 --- a/test/e2e/typescript/2020-12/all_type_values/expected.d.ts +++ b/test/e2e/typescript/2020-12/all_type_values/expected.d.ts @@ -1,60 +1,60 @@ -export type AllTypes_Properties_StringField = string; +export type AllTypesStringField = string; -export type AllTypes_Properties_ObjectField_Properties_Nested = string; +export type AllTypesObjectFieldNested = string; -export type AllTypes_Properties_ObjectField_AdditionalProperties = never; +export type AllTypesObjectFieldAdditionalProperties = never; -export interface AllTypes_Properties_ObjectField { - "nested"?: AllTypes_Properties_ObjectField_Properties_Nested; +export interface AllTypesObjectField { + "nested"?: AllTypesObjectFieldNested; } -export type AllTypes_Properties_NumberField = number; +export type AllTypesNumberField = number; -export type AllTypes_Properties_NullField = null; +export type AllTypesNullField = null; -export type AllTypes_Properties_NestedTypes_Properties_DeepNull = null; +export type AllTypesNestedTypesDeepNull = null; -export type AllTypes_Properties_NestedTypes_Properties_DeepInteger = number; +export type AllTypesNestedTypesDeepInteger = number; -export type AllTypes_Properties_NestedTypes_Properties_DeepBoolean = boolean; +export type AllTypesNestedTypesDeepBoolean = boolean; -export type AllTypes_Properties_NestedTypes_AdditionalProperties = never; +export type AllTypesNestedTypesAdditionalProperties = never; -export interface AllTypes_Properties_NestedTypes { - "deepBoolean"?: AllTypes_Properties_NestedTypes_Properties_DeepBoolean; - "deepNull"?: AllTypes_Properties_NestedTypes_Properties_DeepNull; - "deepInteger"?: AllTypes_Properties_NestedTypes_Properties_DeepInteger; +export interface AllTypesNestedTypes { + "deepBoolean"?: AllTypesNestedTypesDeepBoolean; + "deepNull"?: AllTypesNestedTypesDeepNull; + "deepInteger"?: AllTypesNestedTypesDeepInteger; } -export type AllTypes_Properties_MultiType_AnyOf_ZIndex2 = null; +export type AllTypesMultiType_2 = null; -export type AllTypes_Properties_MultiType_AnyOf_ZIndex1 = number; +export type AllTypesMultiType_1 = number; -export type AllTypes_Properties_MultiType_AnyOf_ZIndex0 = string; +export type AllTypesMultiType_0 = string; -export type AllTypes_Properties_MultiType = - AllTypes_Properties_MultiType_AnyOf_ZIndex0 | - AllTypes_Properties_MultiType_AnyOf_ZIndex1 | - AllTypes_Properties_MultiType_AnyOf_ZIndex2; +export type AllTypesMultiType = + AllTypesMultiType_0 | + AllTypesMultiType_1 | + AllTypesMultiType_2; -export type AllTypes_Properties_IntegerField = number; +export type AllTypesIntegerField = number; -export type AllTypes_Properties_BooleanField = boolean; +export type AllTypesBooleanField = boolean; -export type AllTypes_Properties_ArrayField_Items = string; +export type AllTypesArrayFieldItems = string; -export type AllTypes_Properties_ArrayField = AllTypes_Properties_ArrayField_Items[]; +export type AllTypesArrayField = AllTypesArrayFieldItems[]; -export type AllTypes_AdditionalProperties = never; +export type AllTypesAdditionalProperties = never; export interface AllTypes { - "stringField": AllTypes_Properties_StringField; - "numberField": AllTypes_Properties_NumberField; - "integerField": AllTypes_Properties_IntegerField; - "booleanField": AllTypes_Properties_BooleanField; - "nullField": AllTypes_Properties_NullField; - "arrayField": AllTypes_Properties_ArrayField; - "objectField": AllTypes_Properties_ObjectField; - "multiType"?: AllTypes_Properties_MultiType; - "nestedTypes"?: AllTypes_Properties_NestedTypes; + "stringField": AllTypesStringField; + "numberField": AllTypesNumberField; + "integerField": AllTypesIntegerField; + "booleanField": AllTypesBooleanField; + "nullField": AllTypesNullField; + "arrayField": AllTypesArrayField; + "objectField": AllTypesObjectField; + "multiType"?: AllTypesMultiType; + "nestedTypes"?: AllTypesNestedTypes; } diff --git a/test/e2e/typescript/2020-12/all_type_values/test.ts b/test/e2e/typescript/2020-12/all_type_values/test.ts index 48e1103..b3adca8 100644 --- a/test/e2e/typescript/2020-12/all_type_values/test.ts +++ b/test/e2e/typescript/2020-12/all_type_values/test.ts @@ -1,9 +1,9 @@ import { AllTypes, - AllTypes_Properties_ObjectField, - AllTypes_Properties_NestedTypes, - AllTypes_Properties_MultiType, - AllTypes_Properties_ArrayField + AllTypesObjectField, + AllTypesNestedTypes, + AllTypesMultiType, + AllTypesArrayField } from "./expected"; const minimal: AllTypes = { @@ -272,22 +272,22 @@ const invalidRootExtra: AllTypes = { unknownField: "not allowed" }; -const arrayField: AllTypes_Properties_ArrayField = [ "a", "b" ]; +const arrayField: AllTypesArrayField = [ "a", "b" ]; // @ts-expect-error -const invalidArrayFieldType: AllTypes_Properties_ArrayField = [ 1, 2 ]; +const invalidArrayFieldType: AllTypesArrayField = [ 1, 2 ]; -const multiType1: AllTypes_Properties_MultiType = "string"; -const multiType2: AllTypes_Properties_MultiType = 42; -const multiType3: AllTypes_Properties_MultiType = null; +const multiType1: AllTypesMultiType = "string"; +const multiType2: AllTypesMultiType = 42; +const multiType3: AllTypesMultiType = null; // @ts-expect-error -const invalidMultiTypeStandalone: AllTypes_Properties_MultiType = true; +const invalidMultiTypeStandalone: AllTypesMultiType = true; -const objectField: AllTypes_Properties_ObjectField = {}; -const objectField2: AllTypes_Properties_ObjectField = { nested: "value" }; +const objectField: AllTypesObjectField = {}; +const objectField2: AllTypesObjectField = { nested: "value" }; // @ts-expect-error -const invalidObjectFieldStandalone: AllTypes_Properties_ObjectField = { nested: 123 }; +const invalidObjectFieldStandalone: AllTypesObjectField = { nested: 123 }; -const nestedTypes: AllTypes_Properties_NestedTypes = {}; -const nestedTypes2: AllTypes_Properties_NestedTypes = { deepBoolean: false, deepNull: null, deepInteger: 50 }; +const nestedTypes: AllTypesNestedTypes = {}; +const nestedTypes2: AllTypesNestedTypes = { deepBoolean: false, deepNull: null, deepInteger: 50 }; // @ts-expect-error -const invalidNestedTypesStandalone: AllTypes_Properties_NestedTypes = { deepBoolean: "yes" }; +const invalidNestedTypesStandalone: AllTypesNestedTypes = { deepBoolean: "yes" }; diff --git a/test/e2e/typescript/2020-12/anchor_refs/expected.d.ts b/test/e2e/typescript/2020-12/anchor_refs/expected.d.ts index bdf041e..dacbdad 100644 --- a/test/e2e/typescript/2020-12/anchor_refs/expected.d.ts +++ b/test/e2e/typescript/2020-12/anchor_refs/expected.d.ts @@ -1,30 +1,30 @@ -export type ColorScheme_Properties_Secondary = ColorScheme_X24Defs_UColor; +export type ColorSchemeSecondary = ColorSchemeColor; -export type ColorScheme_Properties_Primary = ColorScheme_X24Defs_UColor; +export type ColorSchemePrimary = ColorSchemeColor; -export type ColorScheme_Properties_Background = ColorScheme_X24Defs_UColor; +export type ColorSchemeBackground = ColorSchemeColor; -export type ColorScheme_AdditionalProperties = never; +export type ColorSchemeAdditionalProperties = never; -export type ColorScheme_X24Defs_UColor_Properties_R = number; +export type ColorSchemeColorR = number; -export type ColorScheme_X24Defs_UColor_Properties_G = number; +export type ColorSchemeColorG = number; -export type ColorScheme_X24Defs_UColor_Properties_B = number; +export type ColorSchemeColorB = number; -export type ColorScheme_X24Defs_UColor_Properties_Alpha = number; +export type ColorSchemeColorAlpha = number; -export type ColorScheme_X24Defs_UColor_AdditionalProperties = never; +export type ColorSchemeColorAdditionalProperties = never; -export interface ColorScheme_X24Defs_UColor { - "r": ColorScheme_X24Defs_UColor_Properties_R; - "g": ColorScheme_X24Defs_UColor_Properties_G; - "b": ColorScheme_X24Defs_UColor_Properties_B; - "alpha"?: ColorScheme_X24Defs_UColor_Properties_Alpha; +export interface ColorSchemeColor { + "r": ColorSchemeColorR; + "g": ColorSchemeColorG; + "b": ColorSchemeColorB; + "alpha"?: ColorSchemeColorAlpha; } export interface ColorScheme { - "primary": ColorScheme_Properties_Primary; - "secondary": ColorScheme_Properties_Secondary; - "background"?: ColorScheme_Properties_Background; + "primary": ColorSchemePrimary; + "secondary": ColorSchemeSecondary; + "background"?: ColorSchemeBackground; } diff --git a/test/e2e/typescript/2020-12/anchor_refs/test.ts b/test/e2e/typescript/2020-12/anchor_refs/test.ts index 14a4c97..9facb8d 100644 --- a/test/e2e/typescript/2020-12/anchor_refs/test.ts +++ b/test/e2e/typescript/2020-12/anchor_refs/test.ts @@ -1,6 +1,6 @@ import { ColorScheme, - ColorScheme_X24Defs_UColor + ColorSchemeColor } from "./expected"; // Valid: minimal required fields @@ -17,7 +17,7 @@ const complete: ColorScheme = { }; // Valid: color with optional alpha -const colorWithAlpha: ColorScheme_X24Defs_UColor = { +const colorWithAlpha: ColorSchemeColor = { r: 128, g: 128, b: 128, @@ -25,7 +25,7 @@ const colorWithAlpha: ColorScheme_X24Defs_UColor = { }; // Valid: color without alpha -const colorWithoutAlpha: ColorScheme_X24Defs_UColor = { +const colorWithoutAlpha: ColorSchemeColor = { r: 0, g: 0, b: 0 @@ -33,27 +33,27 @@ const colorWithoutAlpha: ColorScheme_X24Defs_UColor = { // Invalid: missing required r // @ts-expect-error -const missingR: ColorScheme_X24Defs_UColor = { +const missingR: ColorSchemeColor = { g: 255, b: 255 }; // Invalid: missing required g // @ts-expect-error -const missingG: ColorScheme_X24Defs_UColor = { +const missingG: ColorSchemeColor = { r: 255, b: 255 }; // Invalid: missing required b // @ts-expect-error -const missingB: ColorScheme_X24Defs_UColor = { +const missingB: ColorSchemeColor = { r: 255, g: 255 }; // Invalid: r must be number -const invalidR: ColorScheme_X24Defs_UColor = { +const invalidR: ColorSchemeColor = { // @ts-expect-error r: "255", g: 0, @@ -61,7 +61,7 @@ const invalidR: ColorScheme_X24Defs_UColor = { }; // Invalid: alpha must be number -const invalidAlpha: ColorScheme_X24Defs_UColor = { +const invalidAlpha: ColorSchemeColor = { r: 255, g: 0, b: 0, @@ -70,7 +70,7 @@ const invalidAlpha: ColorScheme_X24Defs_UColor = { }; // Invalid: extra property on color (additionalProperties: false) -const invalidColorExtra: ColorScheme_X24Defs_UColor = { +const invalidColorExtra: ColorSchemeColor = { r: 255, g: 0, b: 0, diff --git a/test/e2e/typescript/2020-12/complex_nested_object/expected.d.ts b/test/e2e/typescript/2020-12/complex_nested_object/expected.d.ts index b99aedc..5ced10a 100644 --- a/test/e2e/typescript/2020-12/complex_nested_object/expected.d.ts +++ b/test/e2e/typescript/2020-12/complex_nested_object/expected.d.ts @@ -1,245 +1,245 @@ -export type Record_Properties_Region = string; +export type RecordRegion = string; -export type Record_Properties_ReferenceCode = string; +export type RecordReferenceCode = string; -export type Record_Properties_RecordId = string; +export type RecordRecordId = string; -export type Record_Properties_OrganizationName = string; +export type RecordOrganizationName = string; -export type Record_Properties_Notes = string; +export type RecordNotes = string; -export type Record_Properties_Meta_Properties_OriginId = string; +export type RecordMetaOriginId = string; -export type Record_Properties_Meta_Properties_Origin = string; +export type RecordMetaOrigin = string; -export type Record_Properties_Meta_AdditionalProperties = never; +export type RecordMetaAdditionalProperties = never; -export interface Record_Properties_Meta { - "origin"?: Record_Properties_Meta_Properties_Origin; - "originId"?: Record_Properties_Meta_Properties_OriginId; +export interface RecordMeta { + "origin"?: RecordMetaOrigin; + "originId"?: RecordMetaOriginId; } -export type Record_Properties_LocationInfo_Properties_StateCode = string; +export type RecordLocationInfoStateCode = string; -export type Record_Properties_LocationInfo_Properties_AreaCode = string; +export type RecordLocationInfoAreaCode = string; -export type Record_Properties_LocationInfo_AdditionalProperties = never; +export type RecordLocationInfoAdditionalProperties = never; -export interface Record_Properties_LocationInfo { - "stateCode"?: Record_Properties_LocationInfo_Properties_StateCode; - "areaCode"?: Record_Properties_LocationInfo_Properties_AreaCode; +export interface RecordLocationInfo { + "stateCode"?: RecordLocationInfoStateCode; + "areaCode"?: RecordLocationInfoAreaCode; } -export type Record_Properties_Items_Items_Properties_SubCategory = string; +export type RecordItemsItemsSubCategory = string; -export type Record_Properties_Items_Items_Properties_Severity = string; +export type RecordItemsItemsSeverity = string; -export type Record_Properties_Items_Items_Properties_SequenceNumber = string; +export type RecordItemsItemsSequenceNumber = string; -export type Record_Properties_Items_Items_Properties_ResolvedAt_AnyOf_ZIndex1 = null; +export type RecordItemsItemsResolvedAt_1 = null; -export type Record_Properties_Items_Items_Properties_ResolvedAt_AnyOf_ZIndex0 = Record_X24Defs_UTimestamp; +export type RecordItemsItemsResolvedAt_0 = RecordTimestamp; -export type Record_Properties_Items_Items_Properties_ResolvedAt = - Record_Properties_Items_Items_Properties_ResolvedAt_AnyOf_ZIndex0 | - Record_Properties_Items_Items_Properties_ResolvedAt_AnyOf_ZIndex1; +export type RecordItemsItemsResolvedAt = + RecordItemsItemsResolvedAt_0 | + RecordItemsItemsResolvedAt_1; -export type Record_Properties_Items_Items_Properties_Resolution_AnyOf_ZIndex1 = null; +export type RecordItemsItemsResolution_1 = null; -export type Record_Properties_Items_Items_Properties_Resolution_AnyOf_ZIndex0 = string; +export type RecordItemsItemsResolution_0 = string; -export type Record_Properties_Items_Items_Properties_Resolution = - Record_Properties_Items_Items_Properties_Resolution_AnyOf_ZIndex0 | - Record_Properties_Items_Items_Properties_Resolution_AnyOf_ZIndex1; +export type RecordItemsItemsResolution = + RecordItemsItemsResolution_0 | + RecordItemsItemsResolution_1; -export type Record_Properties_Items_Items_Properties_Remarks_AnyOf_ZIndex1 = null; +export type RecordItemsItemsRemarks_1 = null; -export type Record_Properties_Items_Items_Properties_Remarks_AnyOf_ZIndex0 = string; +export type RecordItemsItemsRemarks_0 = string; -export type Record_Properties_Items_Items_Properties_Remarks = - Record_Properties_Items_Items_Properties_Remarks_AnyOf_ZIndex0 | - Record_Properties_Items_Items_Properties_Remarks_AnyOf_ZIndex1; +export type RecordItemsItemsRemarks = + RecordItemsItemsRemarks_0 | + RecordItemsItemsRemarks_1; -export type Record_Properties_Items_Items_Properties_Outcome = string; +export type RecordItemsItemsOutcome = string; -export type Record_Properties_Items_Items_Properties_OccurredAt = Record_X24Defs_UTimestamp; +export type RecordItemsItemsOccurredAt = RecordTimestamp; -export type Record_Properties_Items_Items_Properties_Meta_Properties_OriginId = string; +export type RecordItemsItemsMetaOriginId = string; -export type Record_Properties_Items_Items_Properties_Meta_Properties_Origin = string; +export type RecordItemsItemsMetaOrigin = string; -export type Record_Properties_Items_Items_Properties_Meta_AdditionalProperties = never; +export type RecordItemsItemsMetaAdditionalProperties = never; -export interface Record_Properties_Items_Items_Properties_Meta { - "origin"?: Record_Properties_Items_Items_Properties_Meta_Properties_Origin; - "originId"?: Record_Properties_Items_Items_Properties_Meta_Properties_OriginId; +export interface RecordItemsItemsMeta { + "origin"?: RecordItemsItemsMetaOrigin; + "originId"?: RecordItemsItemsMetaOriginId; } -export type Record_Properties_Items_Items_Properties_ItemId = string; +export type RecordItemsItemsItemId = string; -export type Record_Properties_Items_Items_Properties_Description = string; +export type RecordItemsItemsDescription = string; -export type Record_Properties_Items_Items_Properties_Code_AnyOf_ZIndex1 = null; +export type RecordItemsItemsCode_1 = null; -export type Record_Properties_Items_Items_Properties_Code_AnyOf_ZIndex0 = string; +export type RecordItemsItemsCode_0 = string; -export type Record_Properties_Items_Items_Properties_Code = - Record_Properties_Items_Items_Properties_Code_AnyOf_ZIndex0 | - Record_Properties_Items_Items_Properties_Code_AnyOf_ZIndex1; +export type RecordItemsItemsCode = + RecordItemsItemsCode_0 | + RecordItemsItemsCode_1; -export type Record_Properties_Items_Items_Properties_Category = string; +export type RecordItemsItemsCategory = string; -export type Record_Properties_Items_Items_AdditionalProperties = never; +export type RecordItemsItemsAdditionalProperties = never; -export interface Record_Properties_Items_Items { - "itemId": Record_Properties_Items_Items_Properties_ItemId; - "sequenceNumber": Record_Properties_Items_Items_Properties_SequenceNumber; - "description": Record_Properties_Items_Items_Properties_Description; - "code"?: Record_Properties_Items_Items_Properties_Code; - "occurredAt": Record_Properties_Items_Items_Properties_OccurredAt; - "severity": Record_Properties_Items_Items_Properties_Severity; - "resolution"?: Record_Properties_Items_Items_Properties_Resolution; - "resolvedAt"?: Record_Properties_Items_Items_Properties_ResolvedAt; - "outcome"?: Record_Properties_Items_Items_Properties_Outcome; - "remarks"?: Record_Properties_Items_Items_Properties_Remarks; - "category"?: Record_Properties_Items_Items_Properties_Category; - "subCategory"?: Record_Properties_Items_Items_Properties_SubCategory; - "meta"?: Record_Properties_Items_Items_Properties_Meta; +export interface RecordItemsItems { + "itemId": RecordItemsItemsItemId; + "sequenceNumber": RecordItemsItemsSequenceNumber; + "description": RecordItemsItemsDescription; + "code"?: RecordItemsItemsCode; + "occurredAt": RecordItemsItemsOccurredAt; + "severity": RecordItemsItemsSeverity; + "resolution"?: RecordItemsItemsResolution; + "resolvedAt"?: RecordItemsItemsResolvedAt; + "outcome"?: RecordItemsItemsOutcome; + "remarks"?: RecordItemsItemsRemarks; + "category"?: RecordItemsItemsCategory; + "subCategory"?: RecordItemsItemsSubCategory; + "meta"?: RecordItemsItemsMeta; } -export type Record_Properties_Items = Record_Properties_Items_Items[]; +export type RecordItems = RecordItemsItems[]; -export type Record_Properties_Entity_Properties_Locations_Items = Record_X24Defs_ULocation; +export type RecordEntityLocationsItems = RecordLocation; -export type Record_Properties_Entity_Properties_Locations = Record_Properties_Entity_Properties_Locations_Items[]; +export type RecordEntityLocations = RecordEntityLocationsItems[]; -export type Record_Properties_Entity_Properties_FullName = Record_X24Defs_UFullName; +export type RecordEntityFullName = RecordFullName; -export type Record_Properties_Entity_Properties_Classification = string; +export type RecordEntityClassification = string; -export type Record_Properties_Entity_Properties_Category = string; +export type RecordEntityCategory = string; -export type Record_Properties_Entity_Properties_BirthDate = Record_X24Defs_UTimestamp; +export type RecordEntityBirthDate = RecordTimestamp; -export type Record_Properties_Entity_AdditionalProperties = never; +export type RecordEntityAdditionalProperties = never; -export interface Record_Properties_Entity { - "fullName": Record_Properties_Entity_Properties_FullName; - "birthDate": Record_Properties_Entity_Properties_BirthDate; - "category"?: Record_Properties_Entity_Properties_Category; - "classification"?: Record_Properties_Entity_Properties_Classification; - "locations": Record_Properties_Entity_Properties_Locations; +export interface RecordEntity { + "fullName": RecordEntityFullName; + "birthDate": RecordEntityBirthDate; + "category"?: RecordEntityCategory; + "classification"?: RecordEntityClassification; + "locations": RecordEntityLocations; } -export type Record_Properties_CreatedAt = Record_X24Defs_UTimestamp; +export type RecordCreatedAt = RecordTimestamp; -export type Record_AdditionalProperties = never; +export type RecordAdditionalProperties = never; -export type Record_X24Defs_UTimestamp_Properties_Year = number; +export type RecordTimestampYear = number; -export type Record_X24Defs_UTimestamp_Properties_RawValue = string; +export type RecordTimestampRawValue = string; -export type Record_X24Defs_UTimestamp_Properties_Month = number; +export type RecordTimestampMonth = number; -export type Record_X24Defs_UTimestamp_Properties_IsoFormat = string; +export type RecordTimestampIsoFormat = string; -export type Record_X24Defs_UTimestamp_Properties_Day = number; +export type RecordTimestampDay = number; -export type Record_X24Defs_UTimestamp_AdditionalProperties = never; +export type RecordTimestampAdditionalProperties = never; -export interface Record_X24Defs_UTimestamp { - "rawValue": Record_X24Defs_UTimestamp_Properties_RawValue; - "year": Record_X24Defs_UTimestamp_Properties_Year; - "month": Record_X24Defs_UTimestamp_Properties_Month; - "day": Record_X24Defs_UTimestamp_Properties_Day; - "isoFormat"?: Record_X24Defs_UTimestamp_Properties_IsoFormat; +export interface RecordTimestamp { + "rawValue": RecordTimestampRawValue; + "year": RecordTimestampYear; + "month": RecordTimestampMonth; + "day": RecordTimestampDay; + "isoFormat"?: RecordTimestampIsoFormat; } -export type Record_X24Defs_ULocation_Properties_Region = string; +export type RecordLocationRegion = string; -export type Record_X24Defs_ULocation_Properties_RawValue = string; +export type RecordLocationRawValue = string; -export type Record_X24Defs_ULocation_Properties_PostalCode = string; +export type RecordLocationPostalCode = string; -export type Record_X24Defs_ULocation_Properties_Line2_AnyOf_ZIndex1 = null; +export type RecordLocationLine2_1 = null; -export type Record_X24Defs_ULocation_Properties_Line2_AnyOf_ZIndex0 = string; +export type RecordLocationLine2_0 = string; -export type Record_X24Defs_ULocation_Properties_Line2 = - Record_X24Defs_ULocation_Properties_Line2_AnyOf_ZIndex0 | - Record_X24Defs_ULocation_Properties_Line2_AnyOf_ZIndex1; +export type RecordLocationLine2 = + RecordLocationLine2_0 | + RecordLocationLine2_1; -export type Record_X24Defs_ULocation_Properties_Line1 = string; +export type RecordLocationLine1 = string; -export type Record_X24Defs_ULocation_Properties_District = string; +export type RecordLocationDistrict = string; -export type Record_X24Defs_ULocation_Properties_Country = string; +export type RecordLocationCountry = string; -export type Record_X24Defs_ULocation_Properties_City = string; +export type RecordLocationCity = string; -export type Record_X24Defs_ULocation_AdditionalProperties = never; +export type RecordLocationAdditionalProperties = never; -export interface Record_X24Defs_ULocation { - "rawValue": Record_X24Defs_ULocation_Properties_RawValue; - "line1": Record_X24Defs_ULocation_Properties_Line1; - "line2"?: Record_X24Defs_ULocation_Properties_Line2; - "city": Record_X24Defs_ULocation_Properties_City; - "district"?: Record_X24Defs_ULocation_Properties_District; - "region": Record_X24Defs_ULocation_Properties_Region; - "postalCode": Record_X24Defs_ULocation_Properties_PostalCode; - "country": Record_X24Defs_ULocation_Properties_Country; +export interface RecordLocation { + "rawValue": RecordLocationRawValue; + "line1": RecordLocationLine1; + "line2"?: RecordLocationLine2; + "city": RecordLocationCity; + "district"?: RecordLocationDistrict; + "region": RecordLocationRegion; + "postalCode": RecordLocationPostalCode; + "country": RecordLocationCountry; } -export type Record_X24Defs_UFullName_Properties_Suffix_AnyOf_ZIndex1 = null; +export type RecordFullNameSuffix_1 = null; -export type Record_X24Defs_UFullName_Properties_Suffix_AnyOf_ZIndex0 = string; +export type RecordFullNameSuffix_0 = string; -export type Record_X24Defs_UFullName_Properties_Suffix = - Record_X24Defs_UFullName_Properties_Suffix_AnyOf_ZIndex0 | - Record_X24Defs_UFullName_Properties_Suffix_AnyOf_ZIndex1; +export type RecordFullNameSuffix = + RecordFullNameSuffix_0 | + RecordFullNameSuffix_1; -export type Record_X24Defs_UFullName_Properties_RawValue = string; +export type RecordFullNameRawValue = string; -export type Record_X24Defs_UFullName_Properties_Prefix_AnyOf_ZIndex1 = null; +export type RecordFullNamePrefix_1 = null; -export type Record_X24Defs_UFullName_Properties_Prefix_AnyOf_ZIndex0 = string; +export type RecordFullNamePrefix_0 = string; -export type Record_X24Defs_UFullName_Properties_Prefix = - Record_X24Defs_UFullName_Properties_Prefix_AnyOf_ZIndex0 | - Record_X24Defs_UFullName_Properties_Prefix_AnyOf_ZIndex1; +export type RecordFullNamePrefix = + RecordFullNamePrefix_0 | + RecordFullNamePrefix_1; -export type Record_X24Defs_UFullName_Properties_MiddleName_AnyOf_ZIndex1 = null; +export type RecordFullNameMiddleName_1 = null; -export type Record_X24Defs_UFullName_Properties_MiddleName_AnyOf_ZIndex0 = string; +export type RecordFullNameMiddleName_0 = string; -export type Record_X24Defs_UFullName_Properties_MiddleName = - Record_X24Defs_UFullName_Properties_MiddleName_AnyOf_ZIndex0 | - Record_X24Defs_UFullName_Properties_MiddleName_AnyOf_ZIndex1; +export type RecordFullNameMiddleName = + RecordFullNameMiddleName_0 | + RecordFullNameMiddleName_1; -export type Record_X24Defs_UFullName_Properties_GivenName = string; +export type RecordFullNameGivenName = string; -export type Record_X24Defs_UFullName_Properties_FamilyName = string; +export type RecordFullNameFamilyName = string; -export type Record_X24Defs_UFullName_AdditionalProperties = never; +export type RecordFullNameAdditionalProperties = never; -export interface Record_X24Defs_UFullName { - "rawValue"?: Record_X24Defs_UFullName_Properties_RawValue; - "givenName": Record_X24Defs_UFullName_Properties_GivenName; - "middleName"?: Record_X24Defs_UFullName_Properties_MiddleName; - "familyName": Record_X24Defs_UFullName_Properties_FamilyName; - "suffix"?: Record_X24Defs_UFullName_Properties_Suffix; - "prefix"?: Record_X24Defs_UFullName_Properties_Prefix; +export interface RecordFullName { + "rawValue"?: RecordFullNameRawValue; + "givenName": RecordFullNameGivenName; + "middleName"?: RecordFullNameMiddleName; + "familyName": RecordFullNameFamilyName; + "suffix"?: RecordFullNameSuffix; + "prefix"?: RecordFullNamePrefix; } export interface Record { - "recordId": Record_Properties_RecordId; - "referenceCode"?: Record_Properties_ReferenceCode; - "organizationName": Record_Properties_OrganizationName; - "createdAt"?: Record_Properties_CreatedAt; - "region": Record_Properties_Region; - "locationInfo"?: Record_Properties_LocationInfo; - "entity": Record_Properties_Entity; - "notes"?: Record_Properties_Notes; - "items": Record_Properties_Items; - "meta"?: Record_Properties_Meta; + "recordId": RecordRecordId; + "referenceCode"?: RecordReferenceCode; + "organizationName": RecordOrganizationName; + "createdAt"?: RecordCreatedAt; + "region": RecordRegion; + "locationInfo"?: RecordLocationInfo; + "entity": RecordEntity; + "notes"?: RecordNotes; + "items": RecordItems; + "meta"?: RecordMeta; } diff --git a/test/e2e/typescript/2020-12/complex_nested_object/test.ts b/test/e2e/typescript/2020-12/complex_nested_object/test.ts index 587b710..9c7d9f4 100644 --- a/test/e2e/typescript/2020-12/complex_nested_object/test.ts +++ b/test/e2e/typescript/2020-12/complex_nested_object/test.ts @@ -1,15 +1,15 @@ import { Record, - Record_X24Defs_UTimestamp, - Record_X24Defs_UFullName, - Record_X24Defs_ULocation, - Record_Properties_Items_Items, - Record_Properties_Entity + RecordTimestamp, + RecordFullName, + RecordLocation, + RecordItemsItems, + RecordEntity } from "./expected"; // Valid: Timestamp with all required fields -const timestamp: Record_X24Defs_UTimestamp = { +const timestamp: RecordTimestamp = { rawValue: "2024-01-15", year: 2024, month: 1, @@ -17,7 +17,7 @@ const timestamp: Record_X24Defs_UTimestamp = { }; // Valid: Timestamp with optional isoFormat -const timestampWithIso: Record_X24Defs_UTimestamp = { +const timestampWithIso: RecordTimestamp = { rawValue: "2024-01-15", year: 2024, month: 1, @@ -27,20 +27,20 @@ const timestampWithIso: Record_X24Defs_UTimestamp = { // Invalid: Timestamp missing required rawValue // @ts-expect-error - rawValue is required -const timestampMissingRaw: Record_X24Defs_UTimestamp = { +const timestampMissingRaw: RecordTimestamp = { year: 2024, month: 1, day: 15 }; // Valid: FullName with required fields only -const fullNameMinimal: Record_X24Defs_UFullName = { +const fullNameMinimal: RecordFullName = { givenName: "John", familyName: "Doe" }; // Valid: FullName with all fields -const fullNameComplete: Record_X24Defs_UFullName = { +const fullNameComplete: RecordFullName = { rawValue: "Dr. John Michael Doe Jr.", givenName: "John", middleName: "Michael", @@ -50,7 +50,7 @@ const fullNameComplete: Record_X24Defs_UFullName = { }; // Valid: FullName with null nullable fields (type: ["string", "null"]) -const fullNameNulls: Record_X24Defs_UFullName = { +const fullNameNulls: RecordFullName = { givenName: "Jane", familyName: "Smith", middleName: null, @@ -60,12 +60,12 @@ const fullNameNulls: Record_X24Defs_UFullName = { // Invalid: FullName missing required givenName // @ts-expect-error - givenName is required -const fullNameMissingGiven: Record_X24Defs_UFullName = { +const fullNameMissingGiven: RecordFullName = { familyName: "Doe" }; // Valid: Location with all required fields -const location: Record_X24Defs_ULocation = { +const location: RecordLocation = { rawValue: "123 Main St, City, Region 12345, Country", line1: "123 Main St", city: "City", @@ -75,7 +75,7 @@ const location: Record_X24Defs_ULocation = { }; // Valid: Location with all fields including nullable line2 -const locationComplete: Record_X24Defs_ULocation = { +const locationComplete: RecordLocation = { rawValue: "123 Main St, Apt 4, City, District, Region 12345, Country", line1: "123 Main St", line2: "Apt 4", @@ -87,7 +87,7 @@ const locationComplete: Record_X24Defs_ULocation = { }; // Valid: Location with null line2 -const locationNullLine2: Record_X24Defs_ULocation = { +const locationNullLine2: RecordLocation = { rawValue: "123 Main St, City, Region 12345, Country", line1: "123 Main St", line2: null, @@ -98,7 +98,7 @@ const locationNullLine2: Record_X24Defs_ULocation = { }; // Valid: Entity with required fields -const entity: Record_Properties_Entity = { +const entity: RecordEntity = { fullName: { givenName: "John", familyName: "Doe" }, birthDate: { rawValue: "1990-05-15", year: 1990, month: 5, day: 15 }, locations: [ @@ -114,7 +114,7 @@ const entity: Record_Properties_Entity = { }; // Valid: Entity with optional fields -const entityComplete: Record_Properties_Entity = { +const entityComplete: RecordEntity = { fullName: { givenName: "John", familyName: "Doe" }, birthDate: { rawValue: "1990-05-15", year: 1990, month: 5, day: 15 }, category: "individual", @@ -124,13 +124,13 @@ const entityComplete: Record_Properties_Entity = { // Invalid: Entity missing required fullName // @ts-expect-error - fullName is required -const entityMissingFullName: Record_Properties_Entity = { +const entityMissingFullName: RecordEntity = { birthDate: { rawValue: "1990-05-15", year: 1990, month: 5, day: 15 }, locations: [] }; // Valid: Item with required fields -const item: Record_Properties_Items_Items = { +const item: RecordItemsItems = { itemId: "item-001", sequenceNumber: "001", description: "Test item", @@ -139,7 +139,7 @@ const item: Record_Properties_Items_Items = { }; // Valid: Item with nullable fields as strings -const itemWithStrings: Record_Properties_Items_Items = { +const itemWithStrings: RecordItemsItems = { itemId: "item-002", sequenceNumber: "002", description: "Another item", @@ -151,7 +151,7 @@ const itemWithStrings: Record_Properties_Items_Items = { }; // Valid: Item with nullable fields as null -const itemWithNulls: Record_Properties_Items_Items = { +const itemWithNulls: RecordItemsItems = { itemId: "item-003", sequenceNumber: "003", description: "Item with nulls", @@ -163,7 +163,7 @@ const itemWithNulls: Record_Properties_Items_Items = { }; // Valid: Item with resolvedAt as Timestamp (anyOf [$ref, null]) -const itemResolved: Record_Properties_Items_Items = { +const itemResolved: RecordItemsItems = { itemId: "item-004", sequenceNumber: "004", description: "Resolved item", @@ -173,7 +173,7 @@ const itemResolved: Record_Properties_Items_Items = { }; // Valid: Item with resolvedAt as null -const itemUnresolved: Record_Properties_Items_Items = { +const itemUnresolved: RecordItemsItems = { itemId: "item-005", sequenceNumber: "005", description: "Unresolved item", @@ -184,7 +184,7 @@ const itemUnresolved: Record_Properties_Items_Items = { // Invalid: Item missing required fields // @ts-expect-error - itemId is required -const itemMissingId: Record_Properties_Items_Items = { +const itemMissingId: RecordItemsItems = { sequenceNumber: "001", description: "Missing ID", occurredAt: { rawValue: "2024-01-15", year: 2024, month: 1, day: 15 }, diff --git a/test/e2e/typescript/2020-12/const_keyword/expected.d.ts b/test/e2e/typescript/2020-12/const_keyword/expected.d.ts index 64ec0db..728463c 100644 --- a/test/e2e/typescript/2020-12/const_keyword/expected.d.ts +++ b/test/e2e/typescript/2020-12/const_keyword/expected.d.ts @@ -1,34 +1,34 @@ -export type ConstTest_Properties_Version = "1.0.0"; +export type ConstTestVersion = "1.0.0"; -export type ConstTest_Properties_OptionalFlag = false; +export type ConstTestOptionalFlag = false; -export type ConstTest_Properties_Nothing = null; +export type ConstTestNothing = null; -export type ConstTest_Properties_Nested_Properties_FixedValue = "fixed"; +export type ConstTestNestedFixedValue = "fixed"; -export type ConstTest_Properties_Nested_Properties_FixedNumber = 100; +export type ConstTestNestedFixedNumber = 100; -export type ConstTest_Properties_Nested_AdditionalProperties = never; +export type ConstTestNestedAdditionalProperties = never; -export interface ConstTest_Properties_Nested { - "fixedValue"?: ConstTest_Properties_Nested_Properties_FixedValue; - "fixedNumber"?: ConstTest_Properties_Nested_Properties_FixedNumber; +export interface ConstTestNested { + "fixedValue"?: ConstTestNestedFixedValue; + "fixedNumber"?: ConstTestNestedFixedNumber; } -export type ConstTest_Properties_Mode = "production"; +export type ConstTestMode = "production"; -export type ConstTest_Properties_Enabled = true; +export type ConstTestEnabled = true; -export type ConstTest_Properties_Count = 42; +export type ConstTestCount = 42; -export type ConstTest_AdditionalProperties = never; +export type ConstTestAdditionalProperties = never; export interface ConstTest { - "version": ConstTest_Properties_Version; - "enabled": ConstTest_Properties_Enabled; - "mode": ConstTest_Properties_Mode; - "count": ConstTest_Properties_Count; - "nothing": ConstTest_Properties_Nothing; - "optionalFlag"?: ConstTest_Properties_OptionalFlag; - "nested"?: ConstTest_Properties_Nested; + "version": ConstTestVersion; + "enabled": ConstTestEnabled; + "mode": ConstTestMode; + "count": ConstTestCount; + "nothing": ConstTestNothing; + "optionalFlag"?: ConstTestOptionalFlag; + "nested"?: ConstTestNested; } diff --git a/test/e2e/typescript/2020-12/const_keyword/test.ts b/test/e2e/typescript/2020-12/const_keyword/test.ts index b5e199c..8e3fab4 100644 --- a/test/e2e/typescript/2020-12/const_keyword/test.ts +++ b/test/e2e/typescript/2020-12/const_keyword/test.ts @@ -1,4 +1,4 @@ -import { ConstTest, ConstTest_Properties_Nested } from "./expected"; +import { ConstTest, ConstTestNested } from "./expected"; // Valid: all required fields with exact const values @@ -165,9 +165,9 @@ const nestedExtraProperty: ConstTest = { }; // Test standalone nested type -const nested1: ConstTest_Properties_Nested = {}; -const nested2: ConstTest_Properties_Nested = { fixedValue: "fixed" }; -const nested3: ConstTest_Properties_Nested = { fixedNumber: 100 }; -const nested4: ConstTest_Properties_Nested = { fixedValue: "fixed", fixedNumber: 100 }; +const nested1: ConstTestNested = {}; +const nested2: ConstTestNested = { fixedValue: "fixed" }; +const nested3: ConstTestNested = { fixedNumber: 100 }; +const nested4: ConstTestNested = { fixedValue: "fixed", fixedNumber: 100 }; // @ts-expect-error - fixedValue must be "fixed" -const invalidNested: ConstTest_Properties_Nested = { fixedValue: "wrong" }; +const invalidNested: ConstTestNested = { fixedValue: "wrong" }; diff --git a/test/e2e/typescript/2020-12/deeply_nested_refs/expected.d.ts b/test/e2e/typescript/2020-12/deeply_nested_refs/expected.d.ts index a00a88e..d12b8df 100644 --- a/test/e2e/typescript/2020-12/deeply_nested_refs/expected.d.ts +++ b/test/e2e/typescript/2020-12/deeply_nested_refs/expected.d.ts @@ -1,230 +1,230 @@ -export type ApiResponse_Properties_Status = "success" | "error" | "pending"; +export type ApiResponseStatus = "success" | "error" | "pending"; -export type ApiResponse_Properties_Meta = ApiResponse_X24Defs_UResponseMeta; +export type ApiResponseMeta = ApiResponseResponseMeta; -export type ApiResponse_Properties_ErrorCode_AnyOf_ZIndex1 = null; +export type ApiResponseErrorCode_1 = null; -export type ApiResponse_Properties_ErrorCode_AnyOf_ZIndex0 = string; +export type ApiResponseErrorCode_0 = string; -export type ApiResponse_Properties_ErrorCode = - ApiResponse_Properties_ErrorCode_AnyOf_ZIndex0 | - ApiResponse_Properties_ErrorCode_AnyOf_ZIndex1; +export type ApiResponseErrorCode = + ApiResponseErrorCode_0 | + ApiResponseErrorCode_1; -export type ApiResponse_Properties_Data = ApiResponse_X24Defs_UPaginatedResult; +export type ApiResponseData = ApiResponsePaginatedResult; -export type ApiResponse_AdditionalProperties = never; +export type ApiResponseAdditionalProperties = never; -export type ApiResponse_X24Defs_UResponseMeta_Properties_Version = string; +export type ApiResponseResponseMetaVersion = string; -export type ApiResponse_X24Defs_UResponseMeta_Properties_Timestamp = string; +export type ApiResponseResponseMetaTimestamp = string; -export type ApiResponse_X24Defs_UResponseMeta_Properties_RequestId = string; +export type ApiResponseResponseMetaRequestId = string; -export type ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items_Properties_SuggestedAlternative_AnyOf_ZIndex1 = null; +export type ApiResponseResponseMetaDeprecationWarningsItemsSuggestedAlternative_1 = null; -export type ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items_Properties_SuggestedAlternative_AnyOf_ZIndex0 = string; +export type ApiResponseResponseMetaDeprecationWarningsItemsSuggestedAlternative_0 = string; -export type ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items_Properties_SuggestedAlternative = - ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items_Properties_SuggestedAlternative_AnyOf_ZIndex0 | - ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items_Properties_SuggestedAlternative_AnyOf_ZIndex1; +export type ApiResponseResponseMetaDeprecationWarningsItemsSuggestedAlternative = + ApiResponseResponseMetaDeprecationWarningsItemsSuggestedAlternative_0 | + ApiResponseResponseMetaDeprecationWarningsItemsSuggestedAlternative_1; -export type ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items_Properties_Message = string; +export type ApiResponseResponseMetaDeprecationWarningsItemsMessage = string; -export type ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items_Properties_Field = string; +export type ApiResponseResponseMetaDeprecationWarningsItemsField = string; -export type ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items_AdditionalProperties = never; +export type ApiResponseResponseMetaDeprecationWarningsItemsAdditionalProperties = never; -export interface ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items { - "message": ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items_Properties_Message; - "field": ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items_Properties_Field; - "suggestedAlternative"?: ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items_Properties_SuggestedAlternative; +export interface ApiResponseResponseMetaDeprecationWarningsItems { + "message": ApiResponseResponseMetaDeprecationWarningsItemsMessage; + "field": ApiResponseResponseMetaDeprecationWarningsItemsField; + "suggestedAlternative"?: ApiResponseResponseMetaDeprecationWarningsItemsSuggestedAlternative; } -export type ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings = ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings_Items[]; +export type ApiResponseResponseMetaDeprecationWarnings = ApiResponseResponseMetaDeprecationWarningsItems[]; -export type ApiResponse_X24Defs_UResponseMeta_AdditionalProperties = never; +export type ApiResponseResponseMetaAdditionalProperties = never; -export interface ApiResponse_X24Defs_UResponseMeta { - "requestId": ApiResponse_X24Defs_UResponseMeta_Properties_RequestId; - "timestamp": ApiResponse_X24Defs_UResponseMeta_Properties_Timestamp; - "version"?: ApiResponse_X24Defs_UResponseMeta_Properties_Version; - "deprecationWarnings"?: ApiResponse_X24Defs_UResponseMeta_Properties_DeprecationWarnings; +export interface ApiResponseResponseMeta { + "requestId": ApiResponseResponseMetaRequestId; + "timestamp": ApiResponseResponseMetaTimestamp; + "version"?: ApiResponseResponseMetaVersion; + "deprecationWarnings"?: ApiResponseResponseMetaDeprecationWarnings; } -export type ApiResponse_X24Defs_UPaginationInfo_Properties_TotalPages = number; +export type ApiResponsePaginationInfoTotalPages = number; -export type ApiResponse_X24Defs_UPaginationInfo_Properties_TotalItems = number; +export type ApiResponsePaginationInfoTotalItems = number; -export type ApiResponse_X24Defs_UPaginationInfo_Properties_PageSize = number; +export type ApiResponsePaginationInfoPageSize = number; -export type ApiResponse_X24Defs_UPaginationInfo_Properties_Page = number; +export type ApiResponsePaginationInfoPage = number; -export type ApiResponse_X24Defs_UPaginationInfo_Properties_HasPreviousPage = boolean; +export type ApiResponsePaginationInfoHasPreviousPage = boolean; -export type ApiResponse_X24Defs_UPaginationInfo_Properties_HasNextPage = boolean; +export type ApiResponsePaginationInfoHasNextPage = boolean; -export type ApiResponse_X24Defs_UPaginationInfo_AdditionalProperties = never; +export type ApiResponsePaginationInfoAdditionalProperties = never; -export interface ApiResponse_X24Defs_UPaginationInfo { - "page": ApiResponse_X24Defs_UPaginationInfo_Properties_Page; - "pageSize": ApiResponse_X24Defs_UPaginationInfo_Properties_PageSize; - "totalItems": ApiResponse_X24Defs_UPaginationInfo_Properties_TotalItems; - "totalPages": ApiResponse_X24Defs_UPaginationInfo_Properties_TotalPages; - "hasNextPage"?: ApiResponse_X24Defs_UPaginationInfo_Properties_HasNextPage; - "hasPreviousPage"?: ApiResponse_X24Defs_UPaginationInfo_Properties_HasPreviousPage; +export interface ApiResponsePaginationInfo { + "page": ApiResponsePaginationInfoPage; + "pageSize": ApiResponsePaginationInfoPageSize; + "totalItems": ApiResponsePaginationInfoTotalItems; + "totalPages": ApiResponsePaginationInfoTotalPages; + "hasNextPage"?: ApiResponsePaginationInfoHasNextPage; + "hasPreviousPage"?: ApiResponsePaginationInfoHasPreviousPage; } -export type ApiResponse_X24Defs_UPaginatedResult_Properties_Pagination = ApiResponse_X24Defs_UPaginationInfo; +export type ApiResponsePaginatedResultPagination = ApiResponsePaginationInfo; -export type ApiResponse_X24Defs_UPaginatedResult_Properties_Items_Items = ApiResponse_X24Defs_UEntity; +export type ApiResponsePaginatedResultItemsItems = ApiResponseEntity; -export type ApiResponse_X24Defs_UPaginatedResult_Properties_Items = ApiResponse_X24Defs_UPaginatedResult_Properties_Items_Items[]; +export type ApiResponsePaginatedResultItems = ApiResponsePaginatedResultItemsItems[]; -export type ApiResponse_X24Defs_UPaginatedResult_Properties_Filters = ApiResponse_X24Defs_UAppliedFilters; +export type ApiResponsePaginatedResultFilters = ApiResponseAppliedFilters; -export type ApiResponse_X24Defs_UPaginatedResult_AdditionalProperties = never; +export type ApiResponsePaginatedResultAdditionalProperties = never; -export interface ApiResponse_X24Defs_UPaginatedResult { - "items": ApiResponse_X24Defs_UPaginatedResult_Properties_Items; - "pagination": ApiResponse_X24Defs_UPaginatedResult_Properties_Pagination; - "filters"?: ApiResponse_X24Defs_UPaginatedResult_Properties_Filters; +export interface ApiResponsePaginatedResult { + "items": ApiResponsePaginatedResultItems; + "pagination": ApiResponsePaginatedResultPagination; + "filters"?: ApiResponsePaginatedResultFilters; } -export type ApiResponse_X24Defs_UEntityReference_Properties_Type = string; +export type ApiResponseEntityReferenceType = string; -export type ApiResponse_X24Defs_UEntityReference_Properties_Id = string; +export type ApiResponseEntityReferenceId = string; -export type ApiResponse_X24Defs_UEntityReference_AdditionalProperties = never; +export type ApiResponseEntityReferenceAdditionalProperties = never; -export interface ApiResponse_X24Defs_UEntityReference { - "id": ApiResponse_X24Defs_UEntityReference_Properties_Id; - "type": ApiResponse_X24Defs_UEntityReference_Properties_Type; +export interface ApiResponseEntityReference { + "id": ApiResponseEntityReferenceId; + "type": ApiResponseEntityReferenceType; } -export type ApiResponse_X24Defs_UEntityAttributes_Properties_X75pdatedAt_AnyOf_ZIndex1 = null; +export type ApiResponseEntityAttributesUpdatedAt_1 = null; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_X75pdatedAt_AnyOf_ZIndex0 = string; +export type ApiResponseEntityAttributesUpdatedAt_0 = string; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_X75pdatedAt = - ApiResponse_X24Defs_UEntityAttributes_Properties_X75pdatedAt_AnyOf_ZIndex0 | - ApiResponse_X24Defs_UEntityAttributes_Properties_X75pdatedAt_AnyOf_ZIndex1; +export type ApiResponseEntityAttributesUpdatedAt = + ApiResponseEntityAttributesUpdatedAt_0 | + ApiResponseEntityAttributesUpdatedAt_1; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_Tags_Items = string; +export type ApiResponseEntityAttributesTagsItems = string; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_Tags = ApiResponse_X24Defs_UEntityAttributes_Properties_Tags_Items[]; +export type ApiResponseEntityAttributesTags = ApiResponseEntityAttributesTagsItems[]; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_Name = string; +export type ApiResponseEntityAttributesName = string; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_Metadata_AdditionalProperties_AnyOf_ZIndex2 = boolean; +export type ApiResponseEntityAttributesMetadataAdditionalProperties_2 = boolean; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_Metadata_AdditionalProperties_AnyOf_ZIndex1 = number; +export type ApiResponseEntityAttributesMetadataAdditionalProperties_1 = number; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_Metadata_AdditionalProperties_AnyOf_ZIndex0 = string; +export type ApiResponseEntityAttributesMetadataAdditionalProperties_0 = string; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_Metadata_AdditionalProperties = - ApiResponse_X24Defs_UEntityAttributes_Properties_Metadata_AdditionalProperties_AnyOf_ZIndex0 | - ApiResponse_X24Defs_UEntityAttributes_Properties_Metadata_AdditionalProperties_AnyOf_ZIndex1 | - ApiResponse_X24Defs_UEntityAttributes_Properties_Metadata_AdditionalProperties_AnyOf_ZIndex2; +export type ApiResponseEntityAttributesMetadataAdditionalProperties = + ApiResponseEntityAttributesMetadataAdditionalProperties_0 | + ApiResponseEntityAttributesMetadataAdditionalProperties_1 | + ApiResponseEntityAttributesMetadataAdditionalProperties_2; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_Metadata = Record; +export type ApiResponseEntityAttributesMetadata = Record; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_Description_AnyOf_ZIndex1 = null; +export type ApiResponseEntityAttributesDescription_1 = null; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_Description_AnyOf_ZIndex0 = string; +export type ApiResponseEntityAttributesDescription_0 = string; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_Description = - ApiResponse_X24Defs_UEntityAttributes_Properties_Description_AnyOf_ZIndex0 | - ApiResponse_X24Defs_UEntityAttributes_Properties_Description_AnyOf_ZIndex1; +export type ApiResponseEntityAttributesDescription = + ApiResponseEntityAttributesDescription_0 | + ApiResponseEntityAttributesDescription_1; -export type ApiResponse_X24Defs_UEntityAttributes_Properties_CreatedAt = string; +export type ApiResponseEntityAttributesCreatedAt = string; -export type ApiResponse_X24Defs_UEntityAttributes_AdditionalProperties = never; +export type ApiResponseEntityAttributesAdditionalProperties = never; -export interface ApiResponse_X24Defs_UEntityAttributes { - "name": ApiResponse_X24Defs_UEntityAttributes_Properties_Name; - "description"?: ApiResponse_X24Defs_UEntityAttributes_Properties_Description; - "createdAt": ApiResponse_X24Defs_UEntityAttributes_Properties_CreatedAt; - "updatedAt"?: ApiResponse_X24Defs_UEntityAttributes_Properties_X75pdatedAt; - "tags"?: ApiResponse_X24Defs_UEntityAttributes_Properties_Tags; - "metadata"?: ApiResponse_X24Defs_UEntityAttributes_Properties_Metadata; +export interface ApiResponseEntityAttributes { + "name": ApiResponseEntityAttributesName; + "description"?: ApiResponseEntityAttributesDescription; + "createdAt": ApiResponseEntityAttributesCreatedAt; + "updatedAt"?: ApiResponseEntityAttributesUpdatedAt; + "tags"?: ApiResponseEntityAttributesTags; + "metadata"?: ApiResponseEntityAttributesMetadata; } -export type ApiResponse_X24Defs_UEntity_Properties_Type = "user" | "organization" | "resource"; +export type ApiResponseEntityType = "user" | "organization" | "resource"; -export type ApiResponse_X24Defs_UEntity_Properties_Relationships_Properties_Parent = ApiResponse_X24Defs_UEntityReference; +export type ApiResponseEntityRelationshipsParent = ApiResponseEntityReference; -export type ApiResponse_X24Defs_UEntity_Properties_Relationships_Properties_Children_Items = ApiResponse_X24Defs_UEntityReference; +export type ApiResponseEntityRelationshipsChildrenItems = ApiResponseEntityReference; -export type ApiResponse_X24Defs_UEntity_Properties_Relationships_Properties_Children = ApiResponse_X24Defs_UEntity_Properties_Relationships_Properties_Children_Items[]; +export type ApiResponseEntityRelationshipsChildren = ApiResponseEntityRelationshipsChildrenItems[]; -export type ApiResponse_X24Defs_UEntity_Properties_Relationships_AdditionalProperties = ApiResponse_X24Defs_UEntityReference; +export type ApiResponseEntityRelationshipsAdditionalProperties = ApiResponseEntityReference; -export interface ApiResponse_X24Defs_UEntity_Properties_Relationships { - "parent"?: ApiResponse_X24Defs_UEntity_Properties_Relationships_Properties_Parent; - "children"?: ApiResponse_X24Defs_UEntity_Properties_Relationships_Properties_Children; +export interface ApiResponseEntityRelationships { + "parent"?: ApiResponseEntityRelationshipsParent; + "children"?: ApiResponseEntityRelationshipsChildren; [key: string]: // As a notable limitation, TypeScript requires index signatures // to also include the types of all of its properties, so we must // match a superset of what JSON Schema allows - ApiResponse_X24Defs_UEntity_Properties_Relationships_Properties_Parent | - ApiResponse_X24Defs_UEntity_Properties_Relationships_Properties_Children | - ApiResponse_X24Defs_UEntity_Properties_Relationships_AdditionalProperties | + ApiResponseEntityRelationshipsParent | + ApiResponseEntityRelationshipsChildren | + ApiResponseEntityRelationshipsAdditionalProperties | undefined; } -export type ApiResponse_X24Defs_UEntity_Properties_Id = string; +export type ApiResponseEntityId = string; -export type ApiResponse_X24Defs_UEntity_Properties_Attributes = ApiResponse_X24Defs_UEntityAttributes; +export type _ApiResponseEntityAttributes = ApiResponseEntityAttributes; -export type ApiResponse_X24Defs_UEntity_AdditionalProperties = never; +export type ApiResponseEntityAdditionalProperties = never; -export interface ApiResponse_X24Defs_UEntity { - "id": ApiResponse_X24Defs_UEntity_Properties_Id; - "type": ApiResponse_X24Defs_UEntity_Properties_Type; - "attributes": ApiResponse_X24Defs_UEntity_Properties_Attributes; - "relationships"?: ApiResponse_X24Defs_UEntity_Properties_Relationships; +export interface ApiResponseEntity { + "id": ApiResponseEntityId; + "type": ApiResponseEntityType; + "attributes": _ApiResponseEntityAttributes; + "relationships"?: ApiResponseEntityRelationships; } -export type ApiResponse_X24Defs_UAppliedFilters_Properties_Types_Items = "user" | "organization" | "resource"; +export type ApiResponseAppliedFiltersTypesItems = "user" | "organization" | "resource"; -export type ApiResponse_X24Defs_UAppliedFilters_Properties_Types = ApiResponse_X24Defs_UAppliedFilters_Properties_Types_Items[]; +export type ApiResponseAppliedFiltersTypes = ApiResponseAppliedFiltersTypesItems[]; -export type ApiResponse_X24Defs_UAppliedFilters_Properties_SortOrder = "asc" | "desc"; +export type ApiResponseAppliedFiltersSortOrder = "asc" | "desc"; -export type ApiResponse_X24Defs_UAppliedFilters_Properties_SortBy = "name" | "createdAt" | "updatedAt" | null; +export type ApiResponseAppliedFiltersSortBy = "name" | "createdAt" | "updatedAt" | null; -export type ApiResponse_X24Defs_UAppliedFilters_Properties_Search_AnyOf_ZIndex1 = null; +export type ApiResponseAppliedFiltersSearch_1 = null; -export type ApiResponse_X24Defs_UAppliedFilters_Properties_Search_AnyOf_ZIndex0 = string; +export type ApiResponseAppliedFiltersSearch_0 = string; -export type ApiResponse_X24Defs_UAppliedFilters_Properties_Search = - ApiResponse_X24Defs_UAppliedFilters_Properties_Search_AnyOf_ZIndex0 | - ApiResponse_X24Defs_UAppliedFilters_Properties_Search_AnyOf_ZIndex1; +export type ApiResponseAppliedFiltersSearch = + ApiResponseAppliedFiltersSearch_0 | + ApiResponseAppliedFiltersSearch_1; -export type ApiResponse_X24Defs_UAppliedFilters_Properties_DateRange_Properties_Start = string; +export type ApiResponseAppliedFiltersDateRangeStart = string; -export type ApiResponse_X24Defs_UAppliedFilters_Properties_DateRange_Properties_End = string; +export type ApiResponseAppliedFiltersDateRangeEnd = string; -export type ApiResponse_X24Defs_UAppliedFilters_Properties_DateRange_AdditionalProperties = never; +export type ApiResponseAppliedFiltersDateRangeAdditionalProperties = never; -export interface ApiResponse_X24Defs_UAppliedFilters_Properties_DateRange { - "start": ApiResponse_X24Defs_UAppliedFilters_Properties_DateRange_Properties_Start; - "end": ApiResponse_X24Defs_UAppliedFilters_Properties_DateRange_Properties_End; +export interface ApiResponseAppliedFiltersDateRange { + "start": ApiResponseAppliedFiltersDateRangeStart; + "end": ApiResponseAppliedFiltersDateRangeEnd; } -export type ApiResponse_X24Defs_UAppliedFilters_AdditionalProperties = never; +export type ApiResponseAppliedFiltersAdditionalProperties = never; -export interface ApiResponse_X24Defs_UAppliedFilters { - "search"?: ApiResponse_X24Defs_UAppliedFilters_Properties_Search; - "dateRange"?: ApiResponse_X24Defs_UAppliedFilters_Properties_DateRange; - "types"?: ApiResponse_X24Defs_UAppliedFilters_Properties_Types; - "sortBy"?: ApiResponse_X24Defs_UAppliedFilters_Properties_SortBy; - "sortOrder"?: ApiResponse_X24Defs_UAppliedFilters_Properties_SortOrder; +export interface ApiResponseAppliedFilters { + "search"?: ApiResponseAppliedFiltersSearch; + "dateRange"?: ApiResponseAppliedFiltersDateRange; + "types"?: ApiResponseAppliedFiltersTypes; + "sortBy"?: ApiResponseAppliedFiltersSortBy; + "sortOrder"?: ApiResponseAppliedFiltersSortOrder; } export interface ApiResponse { - "status": ApiResponse_Properties_Status; - "errorCode"?: ApiResponse_Properties_ErrorCode; - "data": ApiResponse_Properties_Data; - "meta": ApiResponse_Properties_Meta; + "status": ApiResponseStatus; + "errorCode"?: ApiResponseErrorCode; + "data": ApiResponseData; + "meta": ApiResponseMeta; } diff --git a/test/e2e/typescript/2020-12/deeply_nested_refs/test.ts b/test/e2e/typescript/2020-12/deeply_nested_refs/test.ts index c9fa8c6..65258b7 100644 --- a/test/e2e/typescript/2020-12/deeply_nested_refs/test.ts +++ b/test/e2e/typescript/2020-12/deeply_nested_refs/test.ts @@ -1,9 +1,9 @@ import { ApiResponse, - ApiResponse_X24Defs_UEntity, - ApiResponse_X24Defs_UEntityAttributes, - ApiResponse_X24Defs_UPaginationInfo, - ApiResponse_X24Defs_UAppliedFilters + ApiResponseEntity, + ApiResponseEntityAttributes, + ApiResponsePaginationInfo, + ApiResponseAppliedFilters } from "./expected"; @@ -59,7 +59,7 @@ const invalidStatus: ApiResponse = { }; // Valid: Entity with type enum -const validEntity: ApiResponse_X24Defs_UEntity = { +const validEntity: ApiResponseEntity = { id: "user-1", type: "user", attributes: { @@ -69,7 +69,7 @@ const validEntity: ApiResponse_X24Defs_UEntity = { }; // Invalid: Entity type must be from enum -const invalidEntityType: ApiResponse_X24Defs_UEntity = { +const invalidEntityType: ApiResponseEntity = { id: "e1", // @ts-expect-error - type must be user|organization|resource type: "admin", @@ -77,7 +77,7 @@ const invalidEntityType: ApiResponse_X24Defs_UEntity = { }; // Valid: Entity with relationships including additionalProperties -const entityWithRelationships: ApiResponse_X24Defs_UEntity = { +const entityWithRelationships: ApiResponseEntity = { id: "org-1", type: "organization", attributes: { name: "Acme Corp", createdAt: "2024-01-01" }, @@ -94,7 +94,7 @@ const entityWithRelationships: ApiResponse_X24Defs_UEntity = { }; // Valid: EntityAttributes with metadata (additionalProperties: string|number|boolean) -const attributesWithMetadata: ApiResponse_X24Defs_UEntityAttributes = { +const attributesWithMetadata: ApiResponseEntityAttributes = { name: "Test Entity", createdAt: "2024-01-01", description: "A test entity", @@ -108,7 +108,7 @@ const attributesWithMetadata: ApiResponse_X24Defs_UEntityAttributes = { }; // Invalid: metadata values must be string|number|boolean, not object -const invalidMetadata: ApiResponse_X24Defs_UEntityAttributes = { +const invalidMetadata: ApiResponseEntityAttributes = { name: "test", createdAt: "2024-01-01", metadata: { @@ -118,7 +118,7 @@ const invalidMetadata: ApiResponse_X24Defs_UEntityAttributes = { }; // Invalid: metadata values must be string|number|boolean, not array -const invalidMetadataArray: ApiResponse_X24Defs_UEntityAttributes = { +const invalidMetadataArray: ApiResponseEntityAttributes = { name: "test", createdAt: "2024-01-01", metadata: { @@ -128,7 +128,7 @@ const invalidMetadataArray: ApiResponse_X24Defs_UEntityAttributes = { }; // Valid: PaginationInfo with boolean enum fields -const pagination: ApiResponse_X24Defs_UPaginationInfo = { +const pagination: ApiResponsePaginationInfo = { page: 1, pageSize: 20, totalItems: 100, @@ -138,37 +138,37 @@ const pagination: ApiResponse_X24Defs_UPaginationInfo = { }; // Valid: AppliedFilters with sortBy enum including null -const filters: ApiResponse_X24Defs_UAppliedFilters = { +const filters: ApiResponseAppliedFilters = { search: "query", sortBy: "name", sortOrder: "asc" }; // Valid: sortBy can be null (it's in the enum) -const filtersWithNullSort: ApiResponse_X24Defs_UAppliedFilters = { +const filtersWithNullSort: ApiResponseAppliedFilters = { sortBy: null, sortOrder: "desc" }; // Invalid: sortBy must be from enum -const invalidSortBy: ApiResponse_X24Defs_UAppliedFilters = { +const invalidSortBy: ApiResponseAppliedFilters = { // @ts-expect-error - sortBy must be name|createdAt|updatedAt|null sortBy: "id" }; // Invalid: sortOrder must be asc or desc -const invalidSortOrder: ApiResponse_X24Defs_UAppliedFilters = { +const invalidSortOrder: ApiResponseAppliedFilters = { // @ts-expect-error - sortOrder must be asc|desc sortOrder: "random" }; // Valid: types array with enum items -const filtersWithTypes: ApiResponse_X24Defs_UAppliedFilters = { +const filtersWithTypes: ApiResponseAppliedFilters = { types: [ "user", "organization" ] }; // Invalid: types must be from enum -const invalidTypes: ApiResponse_X24Defs_UAppliedFilters = { +const invalidTypes: ApiResponseAppliedFilters = { // @ts-expect-error - type items must be user|organization|resource types: [ "user", "admin" ] }; diff --git a/test/e2e/typescript/2020-12/defs_and_refs/expected.d.ts b/test/e2e/typescript/2020-12/defs_and_refs/expected.d.ts index cd3b687..4149fc5 100644 --- a/test/e2e/typescript/2020-12/defs_and_refs/expected.d.ts +++ b/test/e2e/typescript/2020-12/defs_and_refs/expected.d.ts @@ -1,157 +1,157 @@ -export type SocialPlatform_Properties_X75ser = SocialPlatform_X24Defs_X55ser; +export type SocialPlatformUser = _SocialPlatformUser; -export type SocialPlatform_Properties_Settings = SocialPlatform_X24Defs_USettings; +export type SocialPlatformSettings = _SocialPlatformSettings; -export type SocialPlatform_Properties_Posts_Items = SocialPlatform_X24Defs_UPost; +export type SocialPlatformPostsItems = SocialPlatformPost; -export type SocialPlatform_Properties_Posts = SocialPlatform_Properties_Posts_Items[]; +export type SocialPlatformPosts = SocialPlatformPostsItems[]; -export type SocialPlatform_Properties_PinnedPost_AnyOf_ZIndex1 = null; +export type SocialPlatformPinnedPost_1 = null; -export type SocialPlatform_Properties_PinnedPost_AnyOf_ZIndex0 = SocialPlatform_X24Defs_UPost; +export type SocialPlatformPinnedPost_0 = SocialPlatformPost; -export type SocialPlatform_Properties_PinnedPost = - SocialPlatform_Properties_PinnedPost_AnyOf_ZIndex0 | - SocialPlatform_Properties_PinnedPost_AnyOf_ZIndex1; +export type SocialPlatformPinnedPost = + SocialPlatformPinnedPost_0 | + SocialPlatformPinnedPost_1; -export type SocialPlatform_Properties_Followers_Items = SocialPlatform_X24Defs_X55ser; +export type SocialPlatformFollowersItems = _SocialPlatformUser; -export type SocialPlatform_Properties_Followers = SocialPlatform_Properties_Followers_Items[]; +export type SocialPlatformFollowers = SocialPlatformFollowersItems[]; -export type SocialPlatform_AdditionalProperties = never; +export type SocialPlatformAdditionalProperties = never; -export type SocialPlatform_X24Defs_X55ser_Properties_X75sername = string; +export type SocialPlatformUserUsername = string; -export type SocialPlatform_X24Defs_X55ser_Properties_Profile = SocialPlatform_X24Defs_UProfile; +export type SocialPlatformUserProfile = SocialPlatformProfile; -export type SocialPlatform_X24Defs_X55ser_Properties_Id = SocialPlatform_X24Defs_X55X55ID; +export type SocialPlatformUserId = SocialPlatformUUID; -export type SocialPlatform_X24Defs_X55ser_Properties_Email = SocialPlatform_X24Defs_UEmail; +export type SocialPlatformUserEmail = SocialPlatformEmail; -export type SocialPlatform_X24Defs_X55ser_AdditionalProperties = never; +export type SocialPlatformUserAdditionalProperties = never; -export interface SocialPlatform_X24Defs_X55ser { - "id": SocialPlatform_X24Defs_X55ser_Properties_Id; - "username": SocialPlatform_X24Defs_X55ser_Properties_X75sername; - "email": SocialPlatform_X24Defs_X55ser_Properties_Email; - "profile"?: SocialPlatform_X24Defs_X55ser_Properties_Profile; +export interface _SocialPlatformUser { + "id": SocialPlatformUserId; + "username": SocialPlatformUserUsername; + "email": SocialPlatformUserEmail; + "profile"?: SocialPlatformUserProfile; } -export type SocialPlatform_X24Defs_X55X55ID = string; +export type SocialPlatformUUID = string; -export type SocialPlatform_X24Defs_X55RL = string; +export type SocialPlatformURL = string; -export type SocialPlatform_X24Defs_UTheme = "light" | "dark" | "system"; +export type SocialPlatformTheme = "light" | "dark" | "system"; -export type SocialPlatform_X24Defs_UTag_Properties_Slug = string; +export type SocialPlatformTagSlug = string; -export type SocialPlatform_X24Defs_UTag_Properties_Name = string; +export type SocialPlatformTagName = string; -export type SocialPlatform_X24Defs_UTag_AdditionalProperties = never; +export type SocialPlatformTagAdditionalProperties = never; -export interface SocialPlatform_X24Defs_UTag { - "name": SocialPlatform_X24Defs_UTag_Properties_Name; - "slug"?: SocialPlatform_X24Defs_UTag_Properties_Slug; +export interface SocialPlatformTag { + "name": SocialPlatformTagName; + "slug"?: SocialPlatformTagSlug; } -export type SocialPlatform_X24Defs_USettings_Properties_Theme = SocialPlatform_X24Defs_UTheme; +export type SocialPlatformSettingsTheme = SocialPlatformTheme; -export type SocialPlatform_X24Defs_USettings_Properties_Privacy = SocialPlatform_X24Defs_UPrivacySettings; +export type SocialPlatformSettingsPrivacy = SocialPlatformPrivacySettings; -export type SocialPlatform_X24Defs_USettings_Properties_Notifications = SocialPlatform_X24Defs_UNotificationSettings; +export type SocialPlatformSettingsNotifications = SocialPlatformNotificationSettings; -export type SocialPlatform_X24Defs_USettings_AdditionalProperties = never; +export type SocialPlatformSettingsAdditionalProperties = never; -export interface SocialPlatform_X24Defs_USettings { - "theme"?: SocialPlatform_X24Defs_USettings_Properties_Theme; - "notifications"?: SocialPlatform_X24Defs_USettings_Properties_Notifications; - "privacy"?: SocialPlatform_X24Defs_USettings_Properties_Privacy; +export interface _SocialPlatformSettings { + "theme"?: SocialPlatformSettingsTheme; + "notifications"?: SocialPlatformSettingsNotifications; + "privacy"?: SocialPlatformSettingsPrivacy; } -export type SocialPlatform_X24Defs_UProfile_Properties_Location_AnyOf_ZIndex1 = null; +export type SocialPlatformProfileLocation_1 = null; -export type SocialPlatform_X24Defs_UProfile_Properties_Location_AnyOf_ZIndex0 = string; +export type SocialPlatformProfileLocation_0 = string; -export type SocialPlatform_X24Defs_UProfile_Properties_Location = - SocialPlatform_X24Defs_UProfile_Properties_Location_AnyOf_ZIndex0 | - SocialPlatform_X24Defs_UProfile_Properties_Location_AnyOf_ZIndex1; +export type SocialPlatformProfileLocation = + SocialPlatformProfileLocation_0 | + SocialPlatformProfileLocation_1; -export type SocialPlatform_X24Defs_UProfile_Properties_Bio_AnyOf_ZIndex1 = null; +export type SocialPlatformProfileBio_1 = null; -export type SocialPlatform_X24Defs_UProfile_Properties_Bio_AnyOf_ZIndex0 = string; +export type SocialPlatformProfileBio_0 = string; -export type SocialPlatform_X24Defs_UProfile_Properties_Bio = - SocialPlatform_X24Defs_UProfile_Properties_Bio_AnyOf_ZIndex0 | - SocialPlatform_X24Defs_UProfile_Properties_Bio_AnyOf_ZIndex1; +export type SocialPlatformProfileBio = + SocialPlatformProfileBio_0 | + SocialPlatformProfileBio_1; -export type SocialPlatform_X24Defs_UProfile_Properties_Avatar = SocialPlatform_X24Defs_X55RL; +export type SocialPlatformProfileAvatar = SocialPlatformURL; -export type SocialPlatform_X24Defs_UProfile_AdditionalProperties = never; +export type SocialPlatformProfileAdditionalProperties = never; -export interface SocialPlatform_X24Defs_UProfile { - "bio"?: SocialPlatform_X24Defs_UProfile_Properties_Bio; - "avatar"?: SocialPlatform_X24Defs_UProfile_Properties_Avatar; - "location"?: SocialPlatform_X24Defs_UProfile_Properties_Location; +export interface SocialPlatformProfile { + "bio"?: SocialPlatformProfileBio; + "avatar"?: SocialPlatformProfileAvatar; + "location"?: SocialPlatformProfileLocation; } -export type SocialPlatform_X24Defs_UPrivacySettings_Properties_ShowEmail = boolean; +export type SocialPlatformPrivacySettingsShowEmail = boolean; -export type SocialPlatform_X24Defs_UPrivacySettings_Properties_ProfileVisible = boolean; +export type SocialPlatformPrivacySettingsProfileVisible = boolean; -export type SocialPlatform_X24Defs_UPrivacySettings_AdditionalProperties = never; +export type SocialPlatformPrivacySettingsAdditionalProperties = never; -export interface SocialPlatform_X24Defs_UPrivacySettings { - "profileVisible"?: SocialPlatform_X24Defs_UPrivacySettings_Properties_ProfileVisible; - "showEmail"?: SocialPlatform_X24Defs_UPrivacySettings_Properties_ShowEmail; +export interface SocialPlatformPrivacySettings { + "profileVisible"?: SocialPlatformPrivacySettingsProfileVisible; + "showEmail"?: SocialPlatformPrivacySettingsShowEmail; } -export type SocialPlatform_X24Defs_UPostStatus = "draft" | "published" | "archived"; +export type SocialPlatformPostStatus = "draft" | "published" | "archived"; -export type SocialPlatform_X24Defs_UPost_Properties_Title = string; +export type SocialPlatformPostTitle = string; -export type SocialPlatform_X24Defs_UPost_Properties_Tags_Items = SocialPlatform_X24Defs_UTag; +export type SocialPlatformPostTagsItems = SocialPlatformTag; -export type SocialPlatform_X24Defs_UPost_Properties_Tags = SocialPlatform_X24Defs_UPost_Properties_Tags_Items[]; +export type SocialPlatformPostTags = SocialPlatformPostTagsItems[]; -export type SocialPlatform_X24Defs_UPost_Properties_Status = SocialPlatform_X24Defs_UPostStatus; +export type _SocialPlatformPostStatus = SocialPlatformPostStatus; -export type SocialPlatform_X24Defs_UPost_Properties_Id = SocialPlatform_X24Defs_X55X55ID; +export type SocialPlatformPostId = SocialPlatformUUID; -export type SocialPlatform_X24Defs_UPost_Properties_Content = string; +export type SocialPlatformPostContent = string; -export type SocialPlatform_X24Defs_UPost_Properties_Author = SocialPlatform_X24Defs_X55ser; +export type SocialPlatformPostAuthor = _SocialPlatformUser; -export type SocialPlatform_X24Defs_UPost_AdditionalProperties = never; +export type SocialPlatformPostAdditionalProperties = never; -export interface SocialPlatform_X24Defs_UPost { - "id": SocialPlatform_X24Defs_UPost_Properties_Id; - "title": SocialPlatform_X24Defs_UPost_Properties_Title; - "content"?: SocialPlatform_X24Defs_UPost_Properties_Content; - "author": SocialPlatform_X24Defs_UPost_Properties_Author; - "tags"?: SocialPlatform_X24Defs_UPost_Properties_Tags; - "status"?: SocialPlatform_X24Defs_UPost_Properties_Status; +export interface SocialPlatformPost { + "id": SocialPlatformPostId; + "title": SocialPlatformPostTitle; + "content"?: SocialPlatformPostContent; + "author": SocialPlatformPostAuthor; + "tags"?: SocialPlatformPostTags; + "status"?: _SocialPlatformPostStatus; } -export type SocialPlatform_X24Defs_UNotificationSettings_Properties_Sms = boolean; +export type SocialPlatformNotificationSettingsSms = boolean; -export type SocialPlatform_X24Defs_UNotificationSettings_Properties_Push = boolean; +export type SocialPlatformNotificationSettingsPush = boolean; -export type SocialPlatform_X24Defs_UNotificationSettings_Properties_Email = boolean; +export type SocialPlatformNotificationSettingsEmail = boolean; -export type SocialPlatform_X24Defs_UNotificationSettings_AdditionalProperties = never; +export type SocialPlatformNotificationSettingsAdditionalProperties = never; -export interface SocialPlatform_X24Defs_UNotificationSettings { - "email"?: SocialPlatform_X24Defs_UNotificationSettings_Properties_Email; - "push"?: SocialPlatform_X24Defs_UNotificationSettings_Properties_Push; - "sms"?: SocialPlatform_X24Defs_UNotificationSettings_Properties_Sms; +export interface SocialPlatformNotificationSettings { + "email"?: SocialPlatformNotificationSettingsEmail; + "push"?: SocialPlatformNotificationSettingsPush; + "sms"?: SocialPlatformNotificationSettingsSms; } -export type SocialPlatform_X24Defs_UEmail = string; +export type SocialPlatformEmail = string; export interface SocialPlatform { - "user": SocialPlatform_Properties_X75ser; - "posts": SocialPlatform_Properties_Posts; - "settings": SocialPlatform_Properties_Settings; - "followers"?: SocialPlatform_Properties_Followers; - "pinnedPost"?: SocialPlatform_Properties_PinnedPost; + "user": SocialPlatformUser; + "posts": SocialPlatformPosts; + "settings": SocialPlatformSettings; + "followers"?: SocialPlatformFollowers; + "pinnedPost"?: SocialPlatformPinnedPost; } diff --git a/test/e2e/typescript/2020-12/defs_and_refs/test.ts b/test/e2e/typescript/2020-12/defs_and_refs/test.ts index b1f3ca8..271a822 100644 --- a/test/e2e/typescript/2020-12/defs_and_refs/test.ts +++ b/test/e2e/typescript/2020-12/defs_and_refs/test.ts @@ -1,10 +1,10 @@ import { SocialPlatform, - SocialPlatform_X24Defs_X55ser, - SocialPlatform_X24Defs_UPost, - SocialPlatform_X24Defs_USettings, - SocialPlatform_X24Defs_UTheme, - SocialPlatform_X24Defs_UPostStatus + _SocialPlatformUser, + SocialPlatformPost, + _SocialPlatformSettings, + SocialPlatformTheme, + SocialPlatformPostStatus } from "./expected"; @@ -20,7 +20,7 @@ const minimal: SocialPlatform = { }; // Valid: user with profile -const userWithProfile: SocialPlatform_X24Defs_X55ser = { +const userWithProfile: _SocialPlatformUser = { id: "550e8400-e29b-41d4-a716-446655440001", username: "jane_doe", email: "jane@example.com", @@ -32,7 +32,7 @@ const userWithProfile: SocialPlatform_X24Defs_X55ser = { }; // Valid: profile with null values (anyOf [string, null]) -const userWithNullProfile: SocialPlatform_X24Defs_X55ser = { +const userWithNullProfile: _SocialPlatformUser = { id: "550e8400-e29b-41d4-a716-446655440002", username: "bob", email: "bob@example.com", @@ -43,7 +43,7 @@ const userWithNullProfile: SocialPlatform_X24Defs_X55ser = { }; // Valid: post with all fields -const validPost: SocialPlatform_X24Defs_UPost = { +const validPost: SocialPlatformPost = { id: "550e8400-e29b-41d4-a716-446655440003", title: "Hello World", content: "This is my first post", @@ -60,25 +60,25 @@ const validPost: SocialPlatform_X24Defs_UPost = { }; // Valid: Theme enum values -const lightTheme: SocialPlatform_X24Defs_UTheme = "light"; -const darkTheme: SocialPlatform_X24Defs_UTheme = "dark"; -const systemTheme: SocialPlatform_X24Defs_UTheme = "system"; +const lightTheme: SocialPlatformTheme = "light"; +const darkTheme: SocialPlatformTheme = "dark"; +const systemTheme: SocialPlatformTheme = "system"; // Invalid: Theme must be from enum // @ts-expect-error - theme must be light|dark|system -const invalidTheme: SocialPlatform_X24Defs_UTheme = "blue"; +const invalidTheme: SocialPlatformTheme = "blue"; // Valid: PostStatus enum values -const draftStatus: SocialPlatform_X24Defs_UPostStatus = "draft"; -const publishedStatus: SocialPlatform_X24Defs_UPostStatus = "published"; -const archivedStatus: SocialPlatform_X24Defs_UPostStatus = "archived"; +const draftStatus: SocialPlatformPostStatus = "draft"; +const publishedStatus: SocialPlatformPostStatus = "published"; +const archivedStatus: SocialPlatformPostStatus = "archived"; // Invalid: PostStatus must be from enum // @ts-expect-error - status must be draft|published|archived -const invalidStatus: SocialPlatform_X24Defs_UPostStatus = "deleted"; +const invalidStatus: SocialPlatformPostStatus = "deleted"; // Valid: settings with all fields -const fullSettings: SocialPlatform_X24Defs_USettings = { +const fullSettings: _SocialPlatformSettings = { theme: "dark", notifications: { email: true, @@ -143,13 +143,13 @@ const invalidUserMissingEmail: SocialPlatform = { // Invalid: Post missing required title // @ts-expect-error - title is required -const invalidPost: SocialPlatform_X24Defs_UPost = { +const invalidPost: SocialPlatformPost = { id: "post-id", author: { id: "uuid", username: "test", email: "test@test.com" } }; // Invalid: Post with invalid status enum -const invalidPostStatus: SocialPlatform_X24Defs_UPost = { +const invalidPostStatus: SocialPlatformPost = { id: "post-id", title: "Test", author: { id: "uuid", username: "test", email: "test@test.com" }, @@ -158,7 +158,7 @@ const invalidPostStatus: SocialPlatform_X24Defs_UPost = { }; // Invalid: extra property on User (additionalProperties: false) -const userExtraProperty: SocialPlatform_X24Defs_X55ser = { +const userExtraProperty: _SocialPlatformUser = { id: "uuid", username: "test", email: "test@test.com", diff --git a/test/e2e/typescript/2020-12/embedded_resources/expected.d.ts b/test/e2e/typescript/2020-12/embedded_resources/expected.d.ts index 7f184ca..7c070e8 100644 --- a/test/e2e/typescript/2020-12/embedded_resources/expected.d.ts +++ b/test/e2e/typescript/2020-12/embedded_resources/expected.d.ts @@ -1,15 +1,15 @@ -export type DocumentSystem_Properties_Item = DocumentSystem_X24Defs_UItem; +export type DocumentSystemItem = _DocumentSystemItem; -export type DocumentSystem_AdditionalProperties = never; +export type DocumentSystemAdditionalProperties = never; -export type DocumentSystem_X24Defs_UItem_Properties_Name = string; +export type DocumentSystemItemName = string; -export type DocumentSystem_X24Defs_UItem_AdditionalProperties = never; +export type DocumentSystemItemAdditionalProperties = never; -export interface DocumentSystem_X24Defs_UItem { - "name": DocumentSystem_X24Defs_UItem_Properties_Name; +export interface _DocumentSystemItem { + "name": DocumentSystemItemName; } export interface DocumentSystem { - "item": DocumentSystem_Properties_Item; + "item": DocumentSystemItem; } diff --git a/test/e2e/typescript/2020-12/embedded_resources/test.ts b/test/e2e/typescript/2020-12/embedded_resources/test.ts index 6e3d4be..27ba8f5 100644 --- a/test/e2e/typescript/2020-12/embedded_resources/test.ts +++ b/test/e2e/typescript/2020-12/embedded_resources/test.ts @@ -1,4 +1,4 @@ -import { DocumentSystem, DocumentSystem_X24Defs_UItem } from "./expected"; +import { DocumentSystem, _DocumentSystemItem } from "./expected"; // Valid: minimal @@ -41,6 +41,6 @@ const invalidRootExtra: DocumentSystem = { }; // Test standalone Item type -const validItem: DocumentSystem_X24Defs_UItem = { name: "standalone" }; +const validItem: _DocumentSystemItem = { name: "standalone" }; // @ts-expect-error -const invalidItem: DocumentSystem_X24Defs_UItem = { name: 123 }; +const invalidItem: _DocumentSystemItem = { name: 123 }; diff --git a/test/e2e/typescript/2020-12/enum_complex_types/expected.d.ts b/test/e2e/typescript/2020-12/enum_complex_types/expected.d.ts index 6048b0e..e1e866e 100644 --- a/test/e2e/typescript/2020-12/enum_complex_types/expected.d.ts +++ b/test/e2e/typescript/2020-12/enum_complex_types/expected.d.ts @@ -1,4 +1,4 @@ -export type ComplexEnum_Properties_Status = { +export type ComplexEnumStatus = { "code": 200, "message": "OK" } | { @@ -9,20 +9,20 @@ export type ComplexEnum_Properties_Status = { "message": "Internal Server Error" }; -export type ComplexEnum_Properties_FixedList = [ "read", "write", "execute" ]; +export type ComplexEnumFixedList = [ "read", "write", "execute" ]; -export type ComplexEnum_Properties_FixedConfig = { +export type ComplexEnumFixedConfig = { "enabled": true, "maxRetries": 3 }; -export type ComplexEnum_Properties_Coordinates = [ 0, 0 ] | [ 1, 1 ] | [ -1, -1 ]; +export type ComplexEnumCoordinates = [ 0, 0 ] | [ 1, 1 ] | [ -1, -1 ]; -export type ComplexEnum_AdditionalProperties = never; +export type ComplexEnumAdditionalProperties = never; export interface ComplexEnum { - "status"?: ComplexEnum_Properties_Status; - "coordinates"?: ComplexEnum_Properties_Coordinates; - "fixedConfig"?: ComplexEnum_Properties_FixedConfig; - "fixedList"?: ComplexEnum_Properties_FixedList; + "status"?: ComplexEnumStatus; + "coordinates"?: ComplexEnumCoordinates; + "fixedConfig"?: ComplexEnumFixedConfig; + "fixedList"?: ComplexEnumFixedList; } diff --git a/test/e2e/typescript/2020-12/enum_complex_types/test.ts b/test/e2e/typescript/2020-12/enum_complex_types/test.ts index fc36510..a07de36 100644 --- a/test/e2e/typescript/2020-12/enum_complex_types/test.ts +++ b/test/e2e/typescript/2020-12/enum_complex_types/test.ts @@ -1,9 +1,9 @@ import { ComplexEnum, - ComplexEnum_Properties_Status, - ComplexEnum_Properties_Coordinates, - ComplexEnum_Properties_FixedConfig, - ComplexEnum_Properties_FixedList + ComplexEnumStatus, + ComplexEnumCoordinates, + ComplexEnumFixedConfig, + ComplexEnumFixedList } from "./expected"; @@ -116,22 +116,22 @@ const extraProperty: ComplexEnum = { }; // Test standalone types -const validStatus1: ComplexEnum_Properties_Status = { code: 200, message: "OK" }; -const validStatus2: ComplexEnum_Properties_Status = { code: 404, message: "Not Found" }; -const validStatus3: ComplexEnum_Properties_Status = { code: 500, message: "Internal Server Error" }; +const validStatus1: ComplexEnumStatus = { code: 200, message: "OK" }; +const validStatus2: ComplexEnumStatus = { code: 404, message: "Not Found" }; +const validStatus3: ComplexEnumStatus = { code: 500, message: "Internal Server Error" }; // @ts-expect-error - must be one of the enum values -const invalidStatusStandalone: ComplexEnum_Properties_Status = { code: 201, message: "Created" }; +const invalidStatusStandalone: ComplexEnumStatus = { code: 201, message: "Created" }; -const validCoords1: ComplexEnum_Properties_Coordinates = [ 0, 0 ]; -const validCoords2: ComplexEnum_Properties_Coordinates = [ 1, 1 ]; -const validCoords3: ComplexEnum_Properties_Coordinates = [ -1, -1 ]; +const validCoords1: ComplexEnumCoordinates = [ 0, 0 ]; +const validCoords2: ComplexEnumCoordinates = [ 1, 1 ]; +const validCoords3: ComplexEnumCoordinates = [ -1, -1 ]; // @ts-expect-error - must be one of the enum values -const invalidCoordsStandalone: ComplexEnum_Properties_Coordinates = [ 0, 1 ]; +const invalidCoordsStandalone: ComplexEnumCoordinates = [ 0, 1 ]; -const validConfig: ComplexEnum_Properties_FixedConfig = { enabled: true, maxRetries: 3 }; +const validConfig: ComplexEnumFixedConfig = { enabled: true, maxRetries: 3 }; // @ts-expect-error - must match const exactly -const invalidConfig: ComplexEnum_Properties_FixedConfig = { enabled: true, maxRetries: 10 }; +const invalidConfig: ComplexEnumFixedConfig = { enabled: true, maxRetries: 10 }; -const validList: ComplexEnum_Properties_FixedList = [ "read", "write", "execute" ]; +const validList: ComplexEnumFixedList = [ "read", "write", "execute" ]; // @ts-expect-error - must match const exactly -const invalidList: ComplexEnum_Properties_FixedList = [ "read", "write" ]; +const invalidList: ComplexEnumFixedList = [ "read", "write" ]; diff --git a/test/e2e/typescript/2020-12/implicit_types_and_reused_refs/expected.d.ts b/test/e2e/typescript/2020-12/implicit_types_and_reused_refs/expected.d.ts index 1e5fbdd..b5ffd6c 100644 --- a/test/e2e/typescript/2020-12/implicit_types_and_reused_refs/expected.d.ts +++ b/test/e2e/typescript/2020-12/implicit_types_and_reused_refs/expected.d.ts @@ -1,235 +1,235 @@ -export type DocSystem_Properties_RelatedDocuments_Items_Properties_Title_AnyOf_ZIndex1 = null; +export type DocSystemRelatedDocumentsItemsTitle_1 = null; -export type DocSystem_Properties_RelatedDocuments_Items_Properties_Title_AnyOf_ZIndex0 = string; +export type DocSystemRelatedDocumentsItemsTitle_0 = string; -export type DocSystem_Properties_RelatedDocuments_Items_Properties_Title = - DocSystem_Properties_RelatedDocuments_Items_Properties_Title_AnyOf_ZIndex0 | - DocSystem_Properties_RelatedDocuments_Items_Properties_Title_AnyOf_ZIndex1; +export type DocSystemRelatedDocumentsItemsTitle = + DocSystemRelatedDocumentsItemsTitle_0 | + DocSystemRelatedDocumentsItemsTitle_1; -export type DocSystem_Properties_RelatedDocuments_Items_Properties_Relationship = "parent" | "child" | "sibling" | "reference"; +export type DocSystemRelatedDocumentsItemsRelationship = "parent" | "child" | "sibling" | "reference"; -export type DocSystem_Properties_RelatedDocuments_Items_Properties_Id = DocSystem_X24Defs_X55X55ID; +export type DocSystemRelatedDocumentsItemsId = DocSystemUUID; -export type DocSystem_Properties_RelatedDocuments_Items_AdditionalProperties = never; +export type DocSystemRelatedDocumentsItemsAdditionalProperties = never; -export interface DocSystem_Properties_RelatedDocuments_Items { - "id": DocSystem_Properties_RelatedDocuments_Items_Properties_Id; - "relationship": DocSystem_Properties_RelatedDocuments_Items_Properties_Relationship; - "title"?: DocSystem_Properties_RelatedDocuments_Items_Properties_Title; +export interface DocSystemRelatedDocumentsItems { + "id": DocSystemRelatedDocumentsItemsId; + "relationship": DocSystemRelatedDocumentsItemsRelationship; + "title"?: DocSystemRelatedDocumentsItemsTitle; } -export type DocSystem_Properties_RelatedDocuments = DocSystem_Properties_RelatedDocuments_Items[]; +export type DocSystemRelatedDocuments = DocSystemRelatedDocumentsItems[]; -export type DocSystem_Properties_Permissions_Properties_Readers_Items = DocSystem_X24Defs_X55ser; +export type DocSystemPermissionsReadersItems = DocSystemUser; -export type DocSystem_Properties_Permissions_Properties_Readers = DocSystem_Properties_Permissions_Properties_Readers_Items[]; +export type DocSystemPermissionsReaders = DocSystemPermissionsReadersItems[]; -export type DocSystem_Properties_Permissions_Properties_Owner = DocSystem_X24Defs_X55ser; +export type DocSystemPermissionsOwner = DocSystemUser; -export type DocSystem_Properties_Permissions_Properties_IsPublic = boolean; +export type DocSystemPermissionsIsPublic = boolean; -export type DocSystem_Properties_Permissions_Properties_ExpiresAt_AnyOf_ZIndex1 = null; +export type DocSystemPermissionsExpiresAt_1 = null; -export type DocSystem_Properties_Permissions_Properties_ExpiresAt_AnyOf_ZIndex0 = DocSystem_X24Defs_UTimestamp; +export type DocSystemPermissionsExpiresAt_0 = DocSystemTimestamp; -export type DocSystem_Properties_Permissions_Properties_ExpiresAt = - DocSystem_Properties_Permissions_Properties_ExpiresAt_AnyOf_ZIndex0 | - DocSystem_Properties_Permissions_Properties_ExpiresAt_AnyOf_ZIndex1; +export type DocSystemPermissionsExpiresAt = + DocSystemPermissionsExpiresAt_0 | + DocSystemPermissionsExpiresAt_1; -export type DocSystem_Properties_Permissions_Properties_Editors_Items = DocSystem_X24Defs_X55ser; +export type DocSystemPermissionsEditorsItems = DocSystemUser; -export type DocSystem_Properties_Permissions_Properties_Editors = DocSystem_Properties_Permissions_Properties_Editors_Items[]; +export type DocSystemPermissionsEditors = DocSystemPermissionsEditorsItems[]; -export type DocSystem_Properties_Permissions_AdditionalProperties = never; +export type DocSystemPermissionsAdditionalProperties = never; -export interface DocSystem_Properties_Permissions { - "owner": DocSystem_Properties_Permissions_Properties_Owner; - "readers": DocSystem_Properties_Permissions_Properties_Readers; - "editors": DocSystem_Properties_Permissions_Properties_Editors; - "isPublic"?: DocSystem_Properties_Permissions_Properties_IsPublic; - "expiresAt"?: DocSystem_Properties_Permissions_Properties_ExpiresAt; +export interface DocSystemPermissions { + "owner": DocSystemPermissionsOwner; + "readers": DocSystemPermissionsReaders; + "editors": DocSystemPermissionsEditors; + "isPublic"?: DocSystemPermissionsIsPublic; + "expiresAt"?: DocSystemPermissionsExpiresAt; } -export type DocSystem_Properties_History_Items_Properties_Timestamp = DocSystem_X24Defs_UTimestamp; +export type DocSystemHistoryItemsTimestamp = DocSystemTimestamp; -export type DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex1 = null; +export type DocSystemHistoryItemsDetails_1 = null; -export type DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_OldValue_AnyOf_ZIndex2 = null; +export type DocSystemHistoryItemsDetails_0OldValue_2 = null; -export type DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_OldValue_AnyOf_ZIndex1 = number; +export type DocSystemHistoryItemsDetails_0OldValue_1 = number; -export type DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_OldValue_AnyOf_ZIndex0 = string; +export type DocSystemHistoryItemsDetails_0OldValue_0 = string; -export type DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_OldValue = - DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_OldValue_AnyOf_ZIndex0 | - DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_OldValue_AnyOf_ZIndex1 | - DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_OldValue_AnyOf_ZIndex2; +export type DocSystemHistoryItemsDetails_0OldValue = + DocSystemHistoryItemsDetails_0OldValue_0 | + DocSystemHistoryItemsDetails_0OldValue_1 | + DocSystemHistoryItemsDetails_0OldValue_2; -export type DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_NewValue_AnyOf_ZIndex2 = null; +export type DocSystemHistoryItemsDetails_0NewValue_2 = null; -export type DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_NewValue_AnyOf_ZIndex1 = number; +export type DocSystemHistoryItemsDetails_0NewValue_1 = number; -export type DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_NewValue_AnyOf_ZIndex0 = string; +export type DocSystemHistoryItemsDetails_0NewValue_0 = string; -export type DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_NewValue = - DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_NewValue_AnyOf_ZIndex0 | - DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_NewValue_AnyOf_ZIndex1 | - DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_NewValue_AnyOf_ZIndex2; +export type DocSystemHistoryItemsDetails_0NewValue = + DocSystemHistoryItemsDetails_0NewValue_0 | + DocSystemHistoryItemsDetails_0NewValue_1 | + DocSystemHistoryItemsDetails_0NewValue_2; -export type DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_Field = string; +export type DocSystemHistoryItemsDetails_0Field = string; -export type DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_AdditionalProperties = never; +export type DocSystemHistoryItemsDetails_0AdditionalProperties = never; -export interface DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0 { - "field"?: DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_Field; - "oldValue"?: DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_OldValue; - "newValue"?: DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0_Properties_NewValue; +export interface DocSystemHistoryItemsDetails_0 { + "field"?: DocSystemHistoryItemsDetails_0Field; + "oldValue"?: DocSystemHistoryItemsDetails_0OldValue; + "newValue"?: DocSystemHistoryItemsDetails_0NewValue; } -export type DocSystem_Properties_History_Items_Properties_Details = - DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex0 | - DocSystem_Properties_History_Items_Properties_Details_AnyOf_ZIndex1; +export type DocSystemHistoryItemsDetails = + DocSystemHistoryItemsDetails_0 | + DocSystemHistoryItemsDetails_1; -export type DocSystem_Properties_History_Items_Properties_Actor = DocSystem_X24Defs_X55ser; +export type DocSystemHistoryItemsActor = DocSystemUser; -export type DocSystem_Properties_History_Items_Properties_Action = "created" | "updated" | "deleted" | "restored" | "shared"; +export type DocSystemHistoryItemsAction = "created" | "updated" | "deleted" | "restored" | "shared"; -export type DocSystem_Properties_History_Items_AdditionalProperties = never; +export type DocSystemHistoryItemsAdditionalProperties = never; -export interface DocSystem_Properties_History_Items { - "action": DocSystem_Properties_History_Items_Properties_Action; - "actor": DocSystem_Properties_History_Items_Properties_Actor; - "timestamp": DocSystem_Properties_History_Items_Properties_Timestamp; - "details"?: DocSystem_Properties_History_Items_Properties_Details; +export interface DocSystemHistoryItems { + "action": DocSystemHistoryItemsAction; + "actor": DocSystemHistoryItemsActor; + "timestamp": DocSystemHistoryItemsTimestamp; + "details"?: DocSystemHistoryItemsDetails; } -export type DocSystem_Properties_History = DocSystem_Properties_History_Items[]; +export type DocSystemHistory = DocSystemHistoryItems[]; -export type DocSystem_Properties_Document_Properties_Title = string; +export type DocSystemDocumentTitle = string; -export type DocSystem_Properties_Document_Properties_Tags_Items_Properties_Name = string; +export type DocSystemDocumentTagsItemsName = string; -export type DocSystem_Properties_Document_Properties_Tags_Items_Properties_Color_AnyOf_ZIndex1 = null; +export type DocSystemDocumentTagsItemsColor_1 = null; -export type DocSystem_Properties_Document_Properties_Tags_Items_Properties_Color_AnyOf_ZIndex0 = string; +export type DocSystemDocumentTagsItemsColor_0 = string; -export type DocSystem_Properties_Document_Properties_Tags_Items_Properties_Color = - DocSystem_Properties_Document_Properties_Tags_Items_Properties_Color_AnyOf_ZIndex0 | - DocSystem_Properties_Document_Properties_Tags_Items_Properties_Color_AnyOf_ZIndex1; +export type DocSystemDocumentTagsItemsColor = + DocSystemDocumentTagsItemsColor_0 | + DocSystemDocumentTagsItemsColor_1; -export type DocSystem_Properties_Document_Properties_Tags_Items_AdditionalProperties = never; +export type DocSystemDocumentTagsItemsAdditionalProperties = never; -export interface DocSystem_Properties_Document_Properties_Tags_Items { - "name": DocSystem_Properties_Document_Properties_Tags_Items_Properties_Name; - "color"?: DocSystem_Properties_Document_Properties_Tags_Items_Properties_Color; +export interface DocSystemDocumentTagsItems { + "name": DocSystemDocumentTagsItemsName; + "color"?: DocSystemDocumentTagsItemsColor; } -export type DocSystem_Properties_Document_Properties_Tags = DocSystem_Properties_Document_Properties_Tags_Items[]; +export type DocSystemDocumentTags = DocSystemDocumentTagsItems[]; -export type DocSystem_Properties_Document_Properties_Reviewers_Items = DocSystem_X24Defs_X55ser; +export type DocSystemDocumentReviewersItems = DocSystemUser; -export type DocSystem_Properties_Document_Properties_Reviewers = DocSystem_Properties_Document_Properties_Reviewers_Items[]; +export type DocSystemDocumentReviewers = DocSystemDocumentReviewersItems[]; -export type DocSystem_Properties_Document_Properties_Metadata_Properties_Version = number; +export type DocSystemDocumentMetadataVersion = number; -export type DocSystem_Properties_Document_Properties_Metadata_Properties_X75pdatedAt = DocSystem_X24Defs_UTimestamp; +export type DocSystemDocumentMetadataUpdatedAt = DocSystemTimestamp; -export type DocSystem_Properties_Document_Properties_Metadata_Properties_CreatedAt = DocSystem_X24Defs_UTimestamp; +export type DocSystemDocumentMetadataCreatedAt = DocSystemTimestamp; -export type DocSystem_Properties_Document_Properties_Metadata_AdditionalProperties = never; +export type DocSystemDocumentMetadataAdditionalProperties = never; -export interface DocSystem_Properties_Document_Properties_Metadata { - "createdAt"?: DocSystem_Properties_Document_Properties_Metadata_Properties_CreatedAt; - "updatedAt"?: DocSystem_Properties_Document_Properties_Metadata_Properties_X75pdatedAt; - "version"?: DocSystem_Properties_Document_Properties_Metadata_Properties_Version; +export interface DocSystemDocumentMetadata { + "createdAt"?: DocSystemDocumentMetadataCreatedAt; + "updatedAt"?: DocSystemDocumentMetadataUpdatedAt; + "version"?: DocSystemDocumentMetadataVersion; } -export type DocSystem_Properties_Document_Properties_Id = DocSystem_X24Defs_X55X55ID; +export type DocSystemDocumentId = DocSystemUUID; -export type DocSystem_Properties_Document_Properties_Content_Properties_Summary_AnyOf_ZIndex1 = null; +export type DocSystemDocumentContentSummary_1 = null; -export type DocSystem_Properties_Document_Properties_Content_Properties_Summary_AnyOf_ZIndex0 = string; +export type DocSystemDocumentContentSummary_0 = string; -export type DocSystem_Properties_Document_Properties_Content_Properties_Summary = - DocSystem_Properties_Document_Properties_Content_Properties_Summary_AnyOf_ZIndex0 | - DocSystem_Properties_Document_Properties_Content_Properties_Summary_AnyOf_ZIndex1; +export type DocSystemDocumentContentSummary = + DocSystemDocumentContentSummary_0 | + DocSystemDocumentContentSummary_1; -export type DocSystem_Properties_Document_Properties_Content_Properties_Format = "markdown" | "html" | "plaintext"; +export type DocSystemDocumentContentFormat = "markdown" | "html" | "plaintext"; -export type DocSystem_Properties_Document_Properties_Content_Properties_Body = string; +export type DocSystemDocumentContentBody = string; -export type DocSystem_Properties_Document_Properties_Content_AdditionalProperties = never; +export type DocSystemDocumentContentAdditionalProperties = never; -export interface DocSystem_Properties_Document_Properties_Content { - "format": DocSystem_Properties_Document_Properties_Content_Properties_Format; - "body": DocSystem_Properties_Document_Properties_Content_Properties_Body; - "summary"?: DocSystem_Properties_Document_Properties_Content_Properties_Summary; +export interface DocSystemDocumentContent { + "format": DocSystemDocumentContentFormat; + "body": DocSystemDocumentContentBody; + "summary"?: DocSystemDocumentContentSummary; } -export type DocSystem_Properties_Document_Properties_Author = DocSystem_X24Defs_X55ser; +export type DocSystemDocumentAuthor = DocSystemUser; -export type DocSystem_Properties_Document_AdditionalProperties = never; +export type DocSystemDocumentAdditionalProperties = never; -export interface DocSystem_Properties_Document { - "id": DocSystem_Properties_Document_Properties_Id; - "title": DocSystem_Properties_Document_Properties_Title; - "content": DocSystem_Properties_Document_Properties_Content; - "author": DocSystem_Properties_Document_Properties_Author; - "reviewers"?: DocSystem_Properties_Document_Properties_Reviewers; - "tags"?: DocSystem_Properties_Document_Properties_Tags; - "metadata"?: DocSystem_Properties_Document_Properties_Metadata; +export interface DocSystemDocument { + "id": DocSystemDocumentId; + "title": DocSystemDocumentTitle; + "content": DocSystemDocumentContent; + "author": DocSystemDocumentAuthor; + "reviewers"?: DocSystemDocumentReviewers; + "tags"?: DocSystemDocumentTags; + "metadata"?: DocSystemDocumentMetadata; } -export type DocSystem_AdditionalProperties = never; +export type DocSystemAdditionalProperties = never; -export type DocSystem_X24Defs_X55ser_Properties_Role = "admin" | "editor" | "viewer" | "guest"; +export type DocSystemUserRole = "admin" | "editor" | "viewer" | "guest"; -export type DocSystem_X24Defs_X55ser_Properties_Id = DocSystem_X24Defs_X55X55ID; +export type DocSystemUserId = DocSystemUUID; -export type DocSystem_X24Defs_X55ser_Properties_Email = string; +export type DocSystemUserEmail = string; -export type DocSystem_X24Defs_X55ser_Properties_DisplayName_AnyOf_ZIndex1 = null; +export type DocSystemUserDisplayName_1 = null; -export type DocSystem_X24Defs_X55ser_Properties_DisplayName_AnyOf_ZIndex0 = string; +export type DocSystemUserDisplayName_0 = string; -export type DocSystem_X24Defs_X55ser_Properties_DisplayName = - DocSystem_X24Defs_X55ser_Properties_DisplayName_AnyOf_ZIndex0 | - DocSystem_X24Defs_X55ser_Properties_DisplayName_AnyOf_ZIndex1; +export type DocSystemUserDisplayName = + DocSystemUserDisplayName_0 | + DocSystemUserDisplayName_1; -export type DocSystem_X24Defs_X55ser_AdditionalProperties = never; +export type DocSystemUserAdditionalProperties = never; -export interface DocSystem_X24Defs_X55ser { - "id": DocSystem_X24Defs_X55ser_Properties_Id; - "email": DocSystem_X24Defs_X55ser_Properties_Email; - "displayName"?: DocSystem_X24Defs_X55ser_Properties_DisplayName; - "role"?: DocSystem_X24Defs_X55ser_Properties_Role; +export interface DocSystemUser { + "id": DocSystemUserId; + "email": DocSystemUserEmail; + "displayName"?: DocSystemUserDisplayName; + "role"?: DocSystemUserRole; } -export type DocSystem_X24Defs_X55X55ID = string; +export type DocSystemUUID = string; -export type DocSystem_X24Defs_UTimestamp_Properties_X75nix = number; +export type DocSystemTimestampUnix = number; -export type DocSystem_X24Defs_UTimestamp_Properties_Timezone_AnyOf_ZIndex1 = null; +export type DocSystemTimestampTimezone_1 = null; -export type DocSystem_X24Defs_UTimestamp_Properties_Timezone_AnyOf_ZIndex0 = string; +export type DocSystemTimestampTimezone_0 = string; -export type DocSystem_X24Defs_UTimestamp_Properties_Timezone = - DocSystem_X24Defs_UTimestamp_Properties_Timezone_AnyOf_ZIndex0 | - DocSystem_X24Defs_UTimestamp_Properties_Timezone_AnyOf_ZIndex1; +export type DocSystemTimestampTimezone = + DocSystemTimestampTimezone_0 | + DocSystemTimestampTimezone_1; -export type DocSystem_X24Defs_UTimestamp_Properties_Iso = string; +export type DocSystemTimestampIso = string; -export type DocSystem_X24Defs_UTimestamp_AdditionalProperties = never; +export type DocSystemTimestampAdditionalProperties = never; -export interface DocSystem_X24Defs_UTimestamp { - "unix": DocSystem_X24Defs_UTimestamp_Properties_X75nix; - "iso": DocSystem_X24Defs_UTimestamp_Properties_Iso; - "timezone"?: DocSystem_X24Defs_UTimestamp_Properties_Timezone; +export interface DocSystemTimestamp { + "unix": DocSystemTimestampUnix; + "iso": DocSystemTimestampIso; + "timezone"?: DocSystemTimestampTimezone; } export interface DocSystem { - "document": DocSystem_Properties_Document; - "permissions": DocSystem_Properties_Permissions; - "history": DocSystem_Properties_History; - "relatedDocuments"?: DocSystem_Properties_RelatedDocuments; + "document": DocSystemDocument; + "permissions": DocSystemPermissions; + "history": DocSystemHistory; + "relatedDocuments"?: DocSystemRelatedDocuments; } diff --git a/test/e2e/typescript/2020-12/implicit_types_and_reused_refs/test.ts b/test/e2e/typescript/2020-12/implicit_types_and_reused_refs/test.ts index 184a535..baa73e6 100644 --- a/test/e2e/typescript/2020-12/implicit_types_and_reused_refs/test.ts +++ b/test/e2e/typescript/2020-12/implicit_types_and_reused_refs/test.ts @@ -1,10 +1,10 @@ import { DocSystem, - DocSystem_X24Defs_X55ser, - DocSystem_X24Defs_UTimestamp, - DocSystem_Properties_Document, - DocSystem_Properties_Permissions, - DocSystem_Properties_History_Items + DocSystemUser, + DocSystemTimestamp, + DocSystemDocument, + DocSystemPermissions, + DocSystemHistoryItems } from "./expected"; @@ -31,7 +31,7 @@ const minimal: DocSystem = { }; // Valid: User with all fields including role enum -const userWithRole: DocSystem_X24Defs_X55ser = { +const userWithRole: DocSystemUser = { id: "user-123", email: "user@example.com", displayName: "John Doe", @@ -39,14 +39,14 @@ const userWithRole: DocSystem_X24Defs_X55ser = { }; // Valid: User with null displayName (anyOf [string, null]) -const userNullDisplay: DocSystem_X24Defs_X55ser = { +const userNullDisplay: DocSystemUser = { id: "user-123", email: "user@example.com", displayName: null }; // Invalid: User role must be from enum -const invalidRole: DocSystem_X24Defs_X55ser = { +const invalidRole: DocSystemUser = { id: "user-123", email: "user@example.com", // @ts-expect-error - role must be admin|editor|viewer|guest @@ -54,14 +54,14 @@ const invalidRole: DocSystem_X24Defs_X55ser = { }; // Valid: Timestamp with all fields -const timestamp: DocSystem_X24Defs_UTimestamp = { +const timestamp: DocSystemTimestamp = { unix: 1704067200, iso: "2024-01-01T00:00:00Z", timezone: "UTC" }; // Valid: Timestamp with null timezone -const timestampNullTz: DocSystem_X24Defs_UTimestamp = { +const timestampNullTz: DocSystemTimestamp = { unix: 1704067200, iso: "2024-01-01T00:00:00Z", timezone: null @@ -69,26 +69,26 @@ const timestampNullTz: DocSystem_X24Defs_UTimestamp = { // Invalid: Timestamp missing required unix // @ts-expect-error - unix is required -const timestampMissingUnix: DocSystem_X24Defs_UTimestamp = { +const timestampMissingUnix: DocSystemTimestamp = { iso: "2024-01-01T00:00:00Z" }; // Valid: Document with format enum values -const docMarkdown: DocSystem_Properties_Document = { +const docMarkdown: DocSystemDocument = { id: "doc-1", title: "Markdown Doc", content: { format: "markdown", body: "# Title" }, author: { id: "user-1", email: "a@b.com" } }; -const docHtml: DocSystem_Properties_Document = { +const docHtml: DocSystemDocument = { id: "doc-2", title: "HTML Doc", content: { format: "html", body: "

Title

" }, author: { id: "user-1", email: "a@b.com" } }; -const docPlaintext: DocSystem_Properties_Document = { +const docPlaintext: DocSystemDocument = { id: "doc-3", title: "Plain Doc", content: { format: "plaintext", body: "Title" }, @@ -96,7 +96,7 @@ const docPlaintext: DocSystem_Properties_Document = { }; // Invalid: format must be from enum -const invalidFormat: DocSystem_Properties_Document = { +const invalidFormat: DocSystemDocument = { id: "doc-1", title: "Doc", content: { @@ -108,14 +108,14 @@ const invalidFormat: DocSystem_Properties_Document = { }; // Valid: permissions with isPublic boolean enum -const permissionsPublic: DocSystem_Properties_Permissions = { +const permissionsPublic: DocSystemPermissions = { owner: { id: "user-1", email: "owner@a.com" }, readers: [], editors: [], isPublic: true }; -const permissionsPrivate: DocSystem_Properties_Permissions = { +const permissionsPrivate: DocSystemPermissions = { owner: { id: "user-1", email: "owner@a.com" }, readers: [], editors: [], @@ -123,7 +123,7 @@ const permissionsPrivate: DocSystem_Properties_Permissions = { }; // Valid: permissions with expiresAt as Timestamp -const permissionsWithExpiry: DocSystem_Properties_Permissions = { +const permissionsWithExpiry: DocSystemPermissions = { owner: { id: "user-1", email: "owner@a.com" }, readers: [], editors: [], @@ -131,7 +131,7 @@ const permissionsWithExpiry: DocSystem_Properties_Permissions = { }; // Valid: permissions with expiresAt as null -const permissionsNoExpiry: DocSystem_Properties_Permissions = { +const permissionsNoExpiry: DocSystemPermissions = { owner: { id: "user-1", email: "owner@a.com" }, readers: [], editors: [], @@ -139,39 +139,39 @@ const permissionsNoExpiry: DocSystem_Properties_Permissions = { }; // Valid: history item with all action enum values -const historyCreated: DocSystem_Properties_History_Items = { +const historyCreated: DocSystemHistoryItems = { action: "created", actor: { id: "user-1", email: "a@b.com" }, timestamp: { unix: 1704067200, iso: "2024-01-01T00:00:00Z" } }; -const historyUpdated: DocSystem_Properties_History_Items = { +const historyUpdated: DocSystemHistoryItems = { action: "updated", actor: { id: "user-1", email: "a@b.com" }, timestamp: { unix: 1704067200, iso: "2024-01-01T00:00:00Z" }, details: { field: "title", oldValue: "Old", newValue: "New" } }; -const historyDeleted: DocSystem_Properties_History_Items = { +const historyDeleted: DocSystemHistoryItems = { action: "deleted", actor: { id: "user-1", email: "a@b.com" }, timestamp: { unix: 1704067200, iso: "2024-01-01T00:00:00Z" } }; -const historyRestored: DocSystem_Properties_History_Items = { +const historyRestored: DocSystemHistoryItems = { action: "restored", actor: { id: "user-1", email: "a@b.com" }, timestamp: { unix: 1704067200, iso: "2024-01-01T00:00:00Z" } }; -const historyShared: DocSystem_Properties_History_Items = { +const historyShared: DocSystemHistoryItems = { action: "shared", actor: { id: "user-1", email: "a@b.com" }, timestamp: { unix: 1704067200, iso: "2024-01-01T00:00:00Z" } }; // Invalid: action must be from enum -const historyInvalidAction: DocSystem_Properties_History_Items = { +const historyInvalidAction: DocSystemHistoryItems = { // @ts-expect-error - action must be created|updated|deleted|restored|shared action: "archived", actor: { id: "user-1", email: "a@b.com" }, @@ -179,7 +179,7 @@ const historyInvalidAction: DocSystem_Properties_History_Items = { }; // Valid: history with details having number oldValue/newValue -const historyNumericChange: DocSystem_Properties_History_Items = { +const historyNumericChange: DocSystemHistoryItems = { action: "updated", actor: { id: "user-1", email: "a@b.com" }, timestamp: { unix: 1704067200, iso: "2024-01-01T00:00:00Z" }, @@ -187,7 +187,7 @@ const historyNumericChange: DocSystem_Properties_History_Items = { }; // Valid: history with details as null -const historyNullDetails: DocSystem_Properties_History_Items = { +const historyNullDetails: DocSystemHistoryItems = { action: "created", actor: { id: "user-1", email: "a@b.com" }, timestamp: { unix: 1704067200, iso: "2024-01-01T00:00:00Z" }, diff --git a/test/e2e/typescript/2020-12/object_with_additional_properties/expected.d.ts b/test/e2e/typescript/2020-12/object_with_additional_properties/expected.d.ts index 1646a0b..9adb4db 100644 --- a/test/e2e/typescript/2020-12/object_with_additional_properties/expected.d.ts +++ b/test/e2e/typescript/2020-12/object_with_additional_properties/expected.d.ts @@ -1,18 +1,18 @@ -export type Person_Properties_Name = string; +export type PersonName = string; -export type Person_Properties_Age = number; +export type PersonAge = number; -export type Person_AdditionalProperties = string; +export type PersonAdditionalProperties = string; export interface Person { - "name": Person_Properties_Name; - "age"?: Person_Properties_Age; + "name": PersonName; + "age"?: PersonAge; [key: string]: // As a notable limitation, TypeScript requires index signatures // to also include the types of all of its properties, so we must // match a superset of what JSON Schema allows - Person_Properties_Name | - Person_Properties_Age | - Person_AdditionalProperties | + PersonName | + PersonAge | + PersonAdditionalProperties | undefined; } diff --git a/test/e2e/typescript/2020-12/object_with_optional_string_property/expected.d.ts b/test/e2e/typescript/2020-12/object_with_optional_string_property/expected.d.ts index 58ff7cb..74e74c1 100644 --- a/test/e2e/typescript/2020-12/object_with_optional_string_property/expected.d.ts +++ b/test/e2e/typescript/2020-12/object_with_optional_string_property/expected.d.ts @@ -1,6 +1,6 @@ -export type MyObject_Properties_Foo = string; +export type MyObjectFoo = string; export interface MyObject { - "foo"?: MyObject_Properties_Foo; + "foo"?: MyObjectFoo; [key: string]: unknown | undefined; } diff --git a/test/e2e/typescript/2020-12/oneof_union/expected.d.ts b/test/e2e/typescript/2020-12/oneof_union/expected.d.ts index 5d0798c..d680537 100644 --- a/test/e2e/typescript/2020-12/oneof_union/expected.d.ts +++ b/test/e2e/typescript/2020-12/oneof_union/expected.d.ts @@ -1,25 +1,25 @@ -export type OneOfTest_Properties_Value_OneOf_ZIndex2 = boolean; +export type OneOfTestValue_2 = boolean; -export type OneOfTest_Properties_Value_OneOf_ZIndex1 = number; +export type OneOfTestValue_1 = number; -export type OneOfTest_Properties_Value_OneOf_ZIndex0 = string; +export type OneOfTestValue_0 = string; -export type OneOfTest_Properties_Value = - OneOfTest_Properties_Value_OneOf_ZIndex0 | - OneOfTest_Properties_Value_OneOf_ZIndex1 | - OneOfTest_Properties_Value_OneOf_ZIndex2; +export type OneOfTestValue = + OneOfTestValue_0 | + OneOfTestValue_1 | + OneOfTestValue_2; -export type OneOfTest_Properties_Status_OneOf_ZIndex1 = "completed" | "cancelled"; +export type OneOfTestStatus_1 = "completed" | "cancelled"; -export type OneOfTest_Properties_Status_OneOf_ZIndex0 = "pending" | "active"; +export type OneOfTestStatus_0 = "pending" | "active"; -export type OneOfTest_Properties_Status = - OneOfTest_Properties_Status_OneOf_ZIndex0 | - OneOfTest_Properties_Status_OneOf_ZIndex1; +export type OneOfTestStatus = + OneOfTestStatus_0 | + OneOfTestStatus_1; -export type OneOfTest_AdditionalProperties = never; +export type OneOfTestAdditionalProperties = never; export interface OneOfTest { - "value": OneOfTest_Properties_Value; - "status"?: OneOfTest_Properties_Status; + "value": OneOfTestValue; + "status"?: OneOfTestStatus; } diff --git a/test/e2e/typescript/2020-12/tuples_and_arrays/expected.d.ts b/test/e2e/typescript/2020-12/tuples_and_arrays/expected.d.ts index 6a8be54..f8e4efa 100644 --- a/test/e2e/typescript/2020-12/tuples_and_arrays/expected.d.ts +++ b/test/e2e/typescript/2020-12/tuples_and_arrays/expected.d.ts @@ -1,319 +1,319 @@ -export type DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex5 = number; +export type DataPipelineStagesItemsOutputType_5 = number; -export type DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex4 = string; +export type DataPipelineStagesItemsOutputType_4 = string; -export type DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex3_PrefixItems_ZIndex1 = "sync" | "async"; +export type DataPipelineStagesItemsOutputType_3_1 = "sync" | "async"; -export type DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex3_PrefixItems_ZIndex0 = string; +export type DataPipelineStagesItemsOutputType_3_0 = string; -export type DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex3_Items = never; +export type DataPipelineStagesItemsOutputType_3Items = never; -export type DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex3 = [DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex3_PrefixItems_ZIndex0, DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex3_PrefixItems_ZIndex1, ...DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex3_Items[]]; +export type DataPipelineStagesItemsOutputType_3 = [DataPipelineStagesItemsOutputType_3_0, DataPipelineStagesItemsOutputType_3_1, ...DataPipelineStagesItemsOutputType_3Items[]]; -export type DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex2 = Record; +export type DataPipelineStagesItemsOutputType_2 = Record; -export type DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex1 = boolean; +export type DataPipelineStagesItemsOutputType_1 = boolean; -export type DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex0 = null; +export type DataPipelineStagesItemsOutputType_0 = null; -export type DataPipeline_Properties_Stages_Items_Properties_OutputType = - DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex0 | - DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex1 | - DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex2 | - DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex3 | - DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex4 | - DataPipeline_Properties_Stages_Items_Properties_OutputType_AnyOf_ZIndex5; +export type DataPipelineStagesItemsOutputType = + DataPipelineStagesItemsOutputType_0 | + DataPipelineStagesItemsOutputType_1 | + DataPipelineStagesItemsOutputType_2 | + DataPipelineStagesItemsOutputType_3 | + DataPipelineStagesItemsOutputType_4 | + DataPipelineStagesItemsOutputType_5; -export type DataPipeline_Properties_Stages_Items_Properties_Name = string; +export type DataPipelineStagesItemsName = string; -export type DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex5 = number; +export type DataPipelineStagesItemsMetrics_5 = number; -export type DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex4 = string; +export type DataPipelineStagesItemsMetrics_4 = string; -export type DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex3_PrefixItems_ZIndex2 = number; +export type DataPipelineStagesItemsMetrics_3_2 = number; -export type DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex3_PrefixItems_ZIndex1 = number; +export type DataPipelineStagesItemsMetrics_3_1 = number; -export type DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex3_PrefixItems_ZIndex0 = number; +export type DataPipelineStagesItemsMetrics_3_0 = number; -export type DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex3_Items = never; +export type DataPipelineStagesItemsMetrics_3Items = never; -export type DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex3 = [DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex3_PrefixItems_ZIndex0, DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex3_PrefixItems_ZIndex1, DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex3_PrefixItems_ZIndex2, ...DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex3_Items[]]; +export type DataPipelineStagesItemsMetrics_3 = [DataPipelineStagesItemsMetrics_3_0, DataPipelineStagesItemsMetrics_3_1, DataPipelineStagesItemsMetrics_3_2, ...DataPipelineStagesItemsMetrics_3Items[]]; -export type DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex2 = Record; +export type DataPipelineStagesItemsMetrics_2 = Record; -export type DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex1 = boolean; +export type DataPipelineStagesItemsMetrics_1 = boolean; -export type DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex0 = null; +export type DataPipelineStagesItemsMetrics_0 = null; -export type DataPipeline_Properties_Stages_Items_Properties_Metrics = - DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex0 | - DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex1 | - DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex2 | - DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex3 | - DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex4 | - DataPipeline_Properties_Stages_Items_Properties_Metrics_AnyOf_ZIndex5; +export type DataPipelineStagesItemsMetrics = + DataPipelineStagesItemsMetrics_0 | + DataPipelineStagesItemsMetrics_1 | + DataPipelineStagesItemsMetrics_2 | + DataPipelineStagesItemsMetrics_3 | + DataPipelineStagesItemsMetrics_4 | + DataPipelineStagesItemsMetrics_5; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex5 = number; +export type DataPipelineStagesItemsInputTypes_5 = number; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex4 = string; +export type DataPipelineStagesItemsInputTypes_4 = string; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_PrefixItems_ZIndex1_AnyOf_ZIndex1 = null; +export type DataPipelineStagesItemsInputTypes_3_1_1 = null; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_PrefixItems_ZIndex1_AnyOf_ZIndex0 = "required" | "optional"; +export type DataPipelineStagesItemsInputTypes_3_1_0 = "required" | "optional"; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_PrefixItems_ZIndex1 = - DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_PrefixItems_ZIndex1_AnyOf_ZIndex0 | - DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_PrefixItems_ZIndex1_AnyOf_ZIndex1; +export type DataPipelineStagesItemsInputTypes_3_1 = + DataPipelineStagesItemsInputTypes_3_1_0 | + DataPipelineStagesItemsInputTypes_3_1_1; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_PrefixItems_ZIndex0 = "string" | "number" | "boolean" | "object" | "array"; +export type DataPipelineStagesItemsInputTypes_3_0 = "string" | "number" | "boolean" | "object" | "array"; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_Items_Properties_TypeName = string; +export type DataPipelineStagesItemsInputTypes_3ItemsTypeName = string; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_Items_Properties_Nullable = boolean; +export type DataPipelineStagesItemsInputTypes_3ItemsNullable = boolean; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_Items_AdditionalProperties = never; +export type DataPipelineStagesItemsInputTypes_3ItemsAdditionalProperties = never; -export interface DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_Items { - "typeName"?: DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_Items_Properties_TypeName; - "nullable"?: DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_Items_Properties_Nullable; +export interface DataPipelineStagesItemsInputTypes_3Items { + "typeName"?: DataPipelineStagesItemsInputTypes_3ItemsTypeName; + "nullable"?: DataPipelineStagesItemsInputTypes_3ItemsNullable; } -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3 = [DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_PrefixItems_ZIndex0, DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_PrefixItems_ZIndex1, ...DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3_Items[]]; +export type DataPipelineStagesItemsInputTypes_3 = [DataPipelineStagesItemsInputTypes_3_0, DataPipelineStagesItemsInputTypes_3_1, ...DataPipelineStagesItemsInputTypes_3Items[]]; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex2 = Record; +export type DataPipelineStagesItemsInputTypes_2 = Record; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex1 = boolean; +export type DataPipelineStagesItemsInputTypes_1 = boolean; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex0 = null; +export type DataPipelineStagesItemsInputTypes_0 = null; -export type DataPipeline_Properties_Stages_Items_Properties_InputTypes = - DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex0 | - DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex1 | - DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex2 | - DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex3 | - DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex4 | - DataPipeline_Properties_Stages_Items_Properties_InputTypes_AnyOf_ZIndex5; +export type DataPipelineStagesItemsInputTypes = + DataPipelineStagesItemsInputTypes_0 | + DataPipelineStagesItemsInputTypes_1 | + DataPipelineStagesItemsInputTypes_2 | + DataPipelineStagesItemsInputTypes_3 | + DataPipelineStagesItemsInputTypes_4 | + DataPipelineStagesItemsInputTypes_5; -export type DataPipeline_Properties_Stages_Items_Properties_Config_AnyOf_ZIndex1 = null; +export type DataPipelineStagesItemsConfig_1 = null; -export type DataPipeline_Properties_Stages_Items_Properties_Config_AnyOf_ZIndex0_Properties_Timeout = number; +export type DataPipelineStagesItemsConfig_0Timeout = number; -export type DataPipeline_Properties_Stages_Items_Properties_Config_AnyOf_ZIndex0_Properties_Retries = number; +export type DataPipelineStagesItemsConfig_0Retries = number; -export type DataPipeline_Properties_Stages_Items_Properties_Config_AnyOf_ZIndex0_AdditionalProperties = never; +export type DataPipelineStagesItemsConfig_0AdditionalProperties = never; -export interface DataPipeline_Properties_Stages_Items_Properties_Config_AnyOf_ZIndex0 { - "timeout"?: DataPipeline_Properties_Stages_Items_Properties_Config_AnyOf_ZIndex0_Properties_Timeout; - "retries"?: DataPipeline_Properties_Stages_Items_Properties_Config_AnyOf_ZIndex0_Properties_Retries; +export interface DataPipelineStagesItemsConfig_0 { + "timeout"?: DataPipelineStagesItemsConfig_0Timeout; + "retries"?: DataPipelineStagesItemsConfig_0Retries; } -export type DataPipeline_Properties_Stages_Items_Properties_Config = - DataPipeline_Properties_Stages_Items_Properties_Config_AnyOf_ZIndex0 | - DataPipeline_Properties_Stages_Items_Properties_Config_AnyOf_ZIndex1; +export type DataPipelineStagesItemsConfig = + DataPipelineStagesItemsConfig_0 | + DataPipelineStagesItemsConfig_1; -export type DataPipeline_Properties_Stages_Items_AdditionalProperties = never; +export type DataPipelineStagesItemsAdditionalProperties = never; -export interface DataPipeline_Properties_Stages_Items { - "name": DataPipeline_Properties_Stages_Items_Properties_Name; - "inputTypes": DataPipeline_Properties_Stages_Items_Properties_InputTypes; - "outputType": DataPipeline_Properties_Stages_Items_Properties_OutputType; - "config"?: DataPipeline_Properties_Stages_Items_Properties_Config; - "metrics"?: DataPipeline_Properties_Stages_Items_Properties_Metrics; +export interface DataPipelineStagesItems { + "name": DataPipelineStagesItemsName; + "inputTypes": DataPipelineStagesItemsInputTypes; + "outputType": DataPipelineStagesItemsOutputType; + "config"?: DataPipelineStagesItemsConfig; + "metrics"?: DataPipelineStagesItemsMetrics; } -export type DataPipeline_Properties_Stages = DataPipeline_Properties_Stages_Items[]; +export type DataPipelineStages = DataPipelineStagesItems[]; -export type DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex5 = number; +export type DataPipelinePipelineVersion_5 = number; -export type DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex4 = string; +export type DataPipelinePipelineVersion_4 = string; -export type DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex3_PrefixItems_ZIndex2 = number; +export type DataPipelinePipelineVersion_3_2 = number; -export type DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex3_PrefixItems_ZIndex1 = number; +export type DataPipelinePipelineVersion_3_1 = number; -export type DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex3_PrefixItems_ZIndex0 = number; +export type DataPipelinePipelineVersion_3_0 = number; -export type DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex3_Items = never; +export type DataPipelinePipelineVersion_3Items = never; -export type DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex3 = [DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex3_PrefixItems_ZIndex0, DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex3_PrefixItems_ZIndex1, DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex3_PrefixItems_ZIndex2, ...DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex3_Items[]]; +export type DataPipelinePipelineVersion_3 = [DataPipelinePipelineVersion_3_0, DataPipelinePipelineVersion_3_1, DataPipelinePipelineVersion_3_2, ...DataPipelinePipelineVersion_3Items[]]; -export type DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex2 = Record; +export type DataPipelinePipelineVersion_2 = Record; -export type DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex1 = boolean; +export type DataPipelinePipelineVersion_1 = boolean; -export type DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex0 = null; +export type DataPipelinePipelineVersion_0 = null; -export type DataPipeline_Properties_Pipeline_Properties_Version = - DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex0 | - DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex1 | - DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex2 | - DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex3 | - DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex4 | - DataPipeline_Properties_Pipeline_Properties_Version_AnyOf_ZIndex5; +export type DataPipelinePipelineVersion = + DataPipelinePipelineVersion_0 | + DataPipelinePipelineVersion_1 | + DataPipelinePipelineVersion_2 | + DataPipelinePipelineVersion_3 | + DataPipelinePipelineVersion_4 | + DataPipelinePipelineVersion_5; -export type DataPipeline_Properties_Pipeline_Properties_Tags_Items = string; +export type DataPipelinePipelineTagsItems = string; -export type DataPipeline_Properties_Pipeline_Properties_Tags = DataPipeline_Properties_Pipeline_Properties_Tags_Items[]; +export type DataPipelinePipelineTags = DataPipelinePipelineTagsItems[]; -export type DataPipeline_Properties_Pipeline_Properties_Id = string; +export type DataPipelinePipelineId = string; -export type DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex5 = number; +export type DataPipelinePipelineCoordinates_5 = number; -export type DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex4 = string; +export type DataPipelinePipelineCoordinates_4 = string; -export type DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex3_PrefixItems_ZIndex2 = number; +export type DataPipelinePipelineCoordinates_3_2 = number; -export type DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex3_PrefixItems_ZIndex1 = number; +export type DataPipelinePipelineCoordinates_3_1 = number; -export type DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex3_PrefixItems_ZIndex0 = number; +export type DataPipelinePipelineCoordinates_3_0 = number; -export type DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex3_Items = number; +export type DataPipelinePipelineCoordinates_3Items = number; -export type DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex3 = [DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex3_PrefixItems_ZIndex0, DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex3_PrefixItems_ZIndex1, DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex3_PrefixItems_ZIndex2, ...DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex3_Items[]]; +export type DataPipelinePipelineCoordinates_3 = [DataPipelinePipelineCoordinates_3_0, DataPipelinePipelineCoordinates_3_1, DataPipelinePipelineCoordinates_3_2, ...DataPipelinePipelineCoordinates_3Items[]]; -export type DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex2 = Record; +export type DataPipelinePipelineCoordinates_2 = Record; -export type DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex1 = boolean; +export type DataPipelinePipelineCoordinates_1 = boolean; -export type DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex0 = null; +export type DataPipelinePipelineCoordinates_0 = null; -export type DataPipeline_Properties_Pipeline_Properties_Coordinates = - DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex0 | - DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex1 | - DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex2 | - DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex3 | - DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex4 | - DataPipeline_Properties_Pipeline_Properties_Coordinates_AnyOf_ZIndex5; +export type DataPipelinePipelineCoordinates = + DataPipelinePipelineCoordinates_0 | + DataPipelinePipelineCoordinates_1 | + DataPipelinePipelineCoordinates_2 | + DataPipelinePipelineCoordinates_3 | + DataPipelinePipelineCoordinates_4 | + DataPipelinePipelineCoordinates_5; -export type DataPipeline_Properties_Pipeline_AdditionalProperties = never; +export type DataPipelinePipelineAdditionalProperties = never; -export interface DataPipeline_Properties_Pipeline { - "id": DataPipeline_Properties_Pipeline_Properties_Id; - "version": DataPipeline_Properties_Pipeline_Properties_Version; - "coordinates": DataPipeline_Properties_Pipeline_Properties_Coordinates; - "tags"?: DataPipeline_Properties_Pipeline_Properties_Tags; +export interface DataPipelinePipeline { + "id": DataPipelinePipelineId; + "version": DataPipelinePipelineVersion; + "coordinates": DataPipelinePipelineCoordinates; + "tags"?: DataPipelinePipelineTags; } -export type DataPipeline_Properties_Metadata_Properties_ModifiedAt_AnyOf_ZIndex1 = null; +export type DataPipelineMetadataModifiedAt_1 = null; -export type DataPipeline_Properties_Metadata_Properties_ModifiedAt_AnyOf_ZIndex0 = string; +export type DataPipelineMetadataModifiedAt_0 = string; -export type DataPipeline_Properties_Metadata_Properties_ModifiedAt = - DataPipeline_Properties_Metadata_Properties_ModifiedAt_AnyOf_ZIndex0 | - DataPipeline_Properties_Metadata_Properties_ModifiedAt_AnyOf_ZIndex1; +export type DataPipelineMetadataModifiedAt = + DataPipelineMetadataModifiedAt_0 | + DataPipelineMetadataModifiedAt_1; -export type DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex5 = number; +export type DataPipelineMetadataFlags_5 = number; -export type DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex4 = string; +export type DataPipelineMetadataFlags_4 = string; -export type DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex3_PrefixItems_ZIndex2 = boolean; +export type DataPipelineMetadataFlags_3_2 = boolean; -export type DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex3_PrefixItems_ZIndex1 = boolean; +export type DataPipelineMetadataFlags_3_1 = boolean; -export type DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex3_PrefixItems_ZIndex0 = boolean; +export type DataPipelineMetadataFlags_3_0 = boolean; -export type DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex3_Items = never; +export type DataPipelineMetadataFlags_3Items = never; -export type DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex3 = [DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex3_PrefixItems_ZIndex0, DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex3_PrefixItems_ZIndex1, DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex3_PrefixItems_ZIndex2, ...DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex3_Items[]]; +export type DataPipelineMetadataFlags_3 = [DataPipelineMetadataFlags_3_0, DataPipelineMetadataFlags_3_1, DataPipelineMetadataFlags_3_2, ...DataPipelineMetadataFlags_3Items[]]; -export type DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex2 = Record; +export type DataPipelineMetadataFlags_2 = Record; -export type DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex1 = boolean; +export type DataPipelineMetadataFlags_1 = boolean; -export type DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex0 = null; +export type DataPipelineMetadataFlags_0 = null; -export type DataPipeline_Properties_Metadata_Properties_Flags = - DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex0 | - DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex1 | - DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex2 | - DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex3 | - DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex4 | - DataPipeline_Properties_Metadata_Properties_Flags_AnyOf_ZIndex5; +export type DataPipelineMetadataFlags = + DataPipelineMetadataFlags_0 | + DataPipelineMetadataFlags_1 | + DataPipelineMetadataFlags_2 | + DataPipelineMetadataFlags_3 | + DataPipelineMetadataFlags_4 | + DataPipelineMetadataFlags_5; -export type DataPipeline_Properties_Metadata_Properties_CreatedAt = string; +export type DataPipelineMetadataCreatedAt = string; -export type DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex5 = number; +export type DataPipelineMetadataAuthorsItems_5 = number; -export type DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex4 = string; +export type DataPipelineMetadataAuthorsItems_4 = string; -export type DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex3_PrefixItems_ZIndex1 = string; +export type DataPipelineMetadataAuthorsItems_3_1 = string; -export type DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex3_PrefixItems_ZIndex0 = string; +export type DataPipelineMetadataAuthorsItems_3_0 = string; -export type DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex3_Items = string; +export type DataPipelineMetadataAuthorsItems_3Items = string; -export type DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex3 = [DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex3_PrefixItems_ZIndex0, DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex3_PrefixItems_ZIndex1, ...DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex3_Items[]]; +export type DataPipelineMetadataAuthorsItems_3 = [DataPipelineMetadataAuthorsItems_3_0, DataPipelineMetadataAuthorsItems_3_1, ...DataPipelineMetadataAuthorsItems_3Items[]]; -export type DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex2 = Record; +export type DataPipelineMetadataAuthorsItems_2 = Record; -export type DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex1 = boolean; +export type DataPipelineMetadataAuthorsItems_1 = boolean; -export type DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex0 = null; +export type DataPipelineMetadataAuthorsItems_0 = null; -export type DataPipeline_Properties_Metadata_Properties_Authors_Items = - DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex0 | - DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex1 | - DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex2 | - DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex3 | - DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex4 | - DataPipeline_Properties_Metadata_Properties_Authors_Items_AnyOf_ZIndex5; +export type DataPipelineMetadataAuthorsItems = + DataPipelineMetadataAuthorsItems_0 | + DataPipelineMetadataAuthorsItems_1 | + DataPipelineMetadataAuthorsItems_2 | + DataPipelineMetadataAuthorsItems_3 | + DataPipelineMetadataAuthorsItems_4 | + DataPipelineMetadataAuthorsItems_5; -export type DataPipeline_Properties_Metadata_Properties_Authors = DataPipeline_Properties_Metadata_Properties_Authors_Items[]; +export type DataPipelineMetadataAuthors = DataPipelineMetadataAuthorsItems[]; -export type DataPipeline_Properties_Metadata_AdditionalProperties = never; +export type DataPipelineMetadataAdditionalProperties = never; -export interface DataPipeline_Properties_Metadata { - "createdAt"?: DataPipeline_Properties_Metadata_Properties_CreatedAt; - "modifiedAt"?: DataPipeline_Properties_Metadata_Properties_ModifiedAt; - "authors"?: DataPipeline_Properties_Metadata_Properties_Authors; - "flags"?: DataPipeline_Properties_Metadata_Properties_Flags; +export interface DataPipelineMetadata { + "createdAt"?: DataPipelineMetadataCreatedAt; + "modifiedAt"?: DataPipelineMetadataModifiedAt; + "authors"?: DataPipelineMetadataAuthors; + "flags"?: DataPipelineMetadataFlags; } -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex5 = number; +export type DataPipelineConnectionsItems_5 = number; -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex4 = string; +export type DataPipelineConnectionsItems_4 = string; -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_PrefixItems_ZIndex2_Properties_Weight = number; +export type DataPipelineConnectionsItems_3_2Weight = number; -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_PrefixItems_ZIndex2_Properties_Bidirectional = boolean; +export type DataPipelineConnectionsItems_3_2Bidirectional = boolean; -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_PrefixItems_ZIndex2_AdditionalProperties = never; +export type DataPipelineConnectionsItems_3_2AdditionalProperties = never; -export interface DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_PrefixItems_ZIndex2 { - "weight": DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_PrefixItems_ZIndex2_Properties_Weight; - "bidirectional"?: DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_PrefixItems_ZIndex2_Properties_Bidirectional; +export interface DataPipelineConnectionsItems_3_2 { + "weight": DataPipelineConnectionsItems_3_2Weight; + "bidirectional"?: DataPipelineConnectionsItems_3_2Bidirectional; } -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_PrefixItems_ZIndex1 = string; +export type DataPipelineConnectionsItems_3_1 = string; -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_PrefixItems_ZIndex0 = string; +export type DataPipelineConnectionsItems_3_0 = string; -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_Items = never; +export type DataPipelineConnectionsItems_3Items = never; -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3 = [DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_PrefixItems_ZIndex0, DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_PrefixItems_ZIndex1, DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_PrefixItems_ZIndex2, ...DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3_Items[]]; +export type DataPipelineConnectionsItems_3 = [DataPipelineConnectionsItems_3_0, DataPipelineConnectionsItems_3_1, DataPipelineConnectionsItems_3_2, ...DataPipelineConnectionsItems_3Items[]]; -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex2 = Record; +export type DataPipelineConnectionsItems_2 = Record; -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex1 = boolean; +export type DataPipelineConnectionsItems_1 = boolean; -export type DataPipeline_Properties_Connections_Items_AnyOf_ZIndex0 = null; +export type DataPipelineConnectionsItems_0 = null; -export type DataPipeline_Properties_Connections_Items = - DataPipeline_Properties_Connections_Items_AnyOf_ZIndex0 | - DataPipeline_Properties_Connections_Items_AnyOf_ZIndex1 | - DataPipeline_Properties_Connections_Items_AnyOf_ZIndex2 | - DataPipeline_Properties_Connections_Items_AnyOf_ZIndex3 | - DataPipeline_Properties_Connections_Items_AnyOf_ZIndex4 | - DataPipeline_Properties_Connections_Items_AnyOf_ZIndex5; +export type DataPipelineConnectionsItems = + DataPipelineConnectionsItems_0 | + DataPipelineConnectionsItems_1 | + DataPipelineConnectionsItems_2 | + DataPipelineConnectionsItems_3 | + DataPipelineConnectionsItems_4 | + DataPipelineConnectionsItems_5; -export type DataPipeline_Properties_Connections = DataPipeline_Properties_Connections_Items[]; +export type DataPipelineConnections = DataPipelineConnectionsItems[]; -export type DataPipeline_AdditionalProperties = never; +export type DataPipelineAdditionalProperties = never; export interface DataPipeline { - "pipeline": DataPipeline_Properties_Pipeline; - "stages": DataPipeline_Properties_Stages; - "connections": DataPipeline_Properties_Connections; - "metadata"?: DataPipeline_Properties_Metadata; + "pipeline": DataPipelinePipeline; + "stages": DataPipelineStages; + "connections": DataPipelineConnections; + "metadata"?: DataPipelineMetadata; } diff --git a/test/e2e/typescript/2020-12/tuples_and_arrays/test.ts b/test/e2e/typescript/2020-12/tuples_and_arrays/test.ts index 5969279..785a98f 100644 --- a/test/e2e/typescript/2020-12/tuples_and_arrays/test.ts +++ b/test/e2e/typescript/2020-12/tuples_and_arrays/test.ts @@ -1,7 +1,7 @@ import { DataPipeline, - DataPipeline_Properties_Pipeline, - DataPipeline_Properties_Stages_Items + DataPipelinePipeline, + DataPipelineStagesItems } from "./expected"; @@ -39,14 +39,14 @@ const validCoordinatesExtended: DataPipeline = { }; // Valid: stage with inputTypes tuple -const validStage: DataPipeline_Properties_Stages_Items = { +const validStage: DataPipelineStagesItems = { name: "transform", inputTypes: [ "string", "required" ], outputType: [ "output", "sync" ] }; // Valid: stage inputTypes with additional items -const validStageExtended: DataPipeline_Properties_Stages_Items = { +const validStageExtended: DataPipelineStagesItems = { name: "transform", inputTypes: [ "number", "optional", { typeName: "custom" } ], outputType: [ "result", "async" ] @@ -106,13 +106,13 @@ const invalidPipelineExtra: DataPipeline = { // Invalid: stage missing required name // @ts-expect-error -const invalidStageMissingName: DataPipeline_Properties_Stages_Items = { +const invalidStageMissingName: DataPipelineStagesItems = { inputTypes: [ "string", "required" ], outputType: [ "out", "sync" ] }; // Invalid: extra property on stage (additionalProperties: false) -const invalidStageExtra: DataPipeline_Properties_Stages_Items = { +const invalidStageExtra: DataPipelineStagesItems = { name: "test", inputTypes: [ "string", "required" ], outputType: [ "out", "sync" ], diff --git a/test/e2e/typescript/2020-12/vocabulary_ignored/expected.d.ts b/test/e2e/typescript/2020-12/vocabulary_ignored/expected.d.ts index 5e1b5a6..391882d 100644 --- a/test/e2e/typescript/2020-12/vocabulary_ignored/expected.d.ts +++ b/test/e2e/typescript/2020-12/vocabulary_ignored/expected.d.ts @@ -1,13 +1,13 @@ -export type VocabTest_Properties_Value = number; +export type VocabTestValue = number; -export type VocabTest_Properties_Optional = boolean; +export type VocabTestOptional = boolean; -export type VocabTest_Properties_Name = string; +export type VocabTestName = string; -export type VocabTest_AdditionalProperties = never; +export type VocabTestAdditionalProperties = never; export interface VocabTest { - "name": VocabTest_Properties_Name; - "value": VocabTest_Properties_Value; - "optional"?: VocabTest_Properties_Optional; + "name": VocabTestName; + "value": VocabTestValue; + "optional"?: VocabTestOptional; } diff --git a/test/generator/generator_typescript_test.cc b/test/generator/generator_typescript_test.cc index 89ad0ae..333c5b4 100644 --- a/test/generator/generator_typescript_test.cc +++ b/test/generator/generator_typescript_test.cc @@ -8,7 +8,8 @@ TEST(Generator_typescript, scalar_string) { using namespace sourcemeta::codegen; IRResult result; - result.emplace_back(IRScalar{{}, IRScalarType::String}); + result.emplace_back( + IRScalar{{.pointer = {}, .symbol = {}}, IRScalarType::String}); std::ostringstream output; generate(output, result, "MyType"); @@ -20,7 +21,8 @@ TEST(Generator_typescript, scalar_number) { using namespace sourcemeta::codegen; IRResult result; - result.emplace_back(IRScalar{{}, IRScalarType::Number}); + result.emplace_back( + IRScalar{{.pointer = {}, .symbol = {}}, IRScalarType::Number}); std::ostringstream output; generate(output, result, "MyType"); @@ -32,7 +34,8 @@ TEST(Generator_typescript, scalar_integer) { using namespace sourcemeta::codegen; IRResult result; - result.emplace_back(IRScalar{{}, IRScalarType::Integer}); + result.emplace_back( + IRScalar{{.pointer = {}, .symbol = {}}, IRScalarType::Integer}); std::ostringstream output; generate(output, result, "MyType"); @@ -44,7 +47,8 @@ TEST(Generator_typescript, scalar_boolean) { using namespace sourcemeta::codegen; IRResult result; - result.emplace_back(IRScalar{{}, IRScalarType::Boolean}); + result.emplace_back( + IRScalar{{.pointer = {}, .symbol = {}}, IRScalarType::Boolean}); std::ostringstream output; generate(output, result, "MyType"); @@ -56,7 +60,8 @@ TEST(Generator_typescript, scalar_null) { using namespace sourcemeta::codegen; IRResult result; - result.emplace_back(IRScalar{{}, IRScalarType::Null}); + result.emplace_back( + IRScalar{{.pointer = {}, .symbol = {}}, IRScalarType::Null}); std::ostringstream output; generate(output, result, "MyType"); @@ -69,24 +74,28 @@ TEST(Generator_typescript, object_with_optional_string_property) { IRResult result; - result.emplace_back(IRScalar{{sourcemeta::core::Pointer{"properties", "foo"}}, - IRScalarType::String}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", "foo"}, + .symbol = {"foo"}}, + IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( - "foo", IRObjectValue{{sourcemeta::core::Pointer{"properties", "foo"}}, - false, - false}); + "foo", + IRObjectValue{{.pointer = sourcemeta::core::Pointer{"properties", "foo"}, + .symbol = {"foo"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); - const auto expected{R"TS(export type MyObject_Properties_Foo = string; + const auto expected{R"TS(export type MyObjectFoo = string; export interface MyObject { - "foo"?: MyObject_Properties_Foo; + "foo"?: MyObjectFoo; } )TS"}; @@ -98,27 +107,30 @@ TEST(Generator_typescript, object_property_with_quotes) { IRResult result; - result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "say \"hello\""}}, - IRScalarType::String}); + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"properties", "say \"hello\""}, + .symbol = {"say \"hello\""}}, + IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( "say \"hello\"", - IRObjectValue{{sourcemeta::core::Pointer{"properties", "say \"hello\""}}, - false, - false}); + IRObjectValue{ + {.pointer = sourcemeta::core::Pointer{"properties", "say \"hello\""}, + .symbol = {"say \"hello\""}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); const auto expected{ - R"TS(export type MyObject_Properties_SayX20X22HelloX22 = string; + R"TS(export type MyObjectSayhello = string; export interface MyObject { - "say \"hello\""?: MyObject_Properties_SayX20X22HelloX22; + "say \"hello\""?: MyObjectSayhello; } )TS"}; @@ -130,27 +142,30 @@ TEST(Generator_typescript, object_property_with_backslash) { IRResult result; - result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "path\\to\\file"}}, - IRScalarType::String}); + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"properties", "path\\to\\file"}, + .symbol = {"path\\to\\file"}}, + IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( "path\\to\\file", - IRObjectValue{{sourcemeta::core::Pointer{"properties", "path\\to\\file"}}, - false, - false}); + IRObjectValue{ + {.pointer = sourcemeta::core::Pointer{"properties", "path\\to\\file"}, + .symbol = {"path\\to\\file"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); const auto expected{ - R"TS(export type MyObject_Properties_PathX5CToX5CFile = string; + R"TS(export type MyObjectPathtofile = string; export interface MyObject { - "path\\to\\file"?: MyObject_Properties_PathX5CToX5CFile; + "path\\to\\file"?: MyObjectPathtofile; } )TS"}; @@ -162,27 +177,29 @@ TEST(Generator_typescript, object_property_with_newline) { IRResult result; - result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "line1\nline2"}}, - IRScalarType::String}); + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"properties", "line1\nline2"}, + .symbol = {"line1\nline2"}}, + IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( "line1\nline2", - IRObjectValue{{sourcemeta::core::Pointer{"properties", "line1\nline2"}}, - false, - false}); + IRObjectValue{ + {.pointer = sourcemeta::core::Pointer{"properties", "line1\nline2"}, + .symbol = {"line1\nline2"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); - EXPECT_EQ(output.str(), - "export type MyObject_Properties_Line1X0ALine2 = string;\n\n" - "export interface MyObject {\n" - " \"line1\\nline2\"?: MyObject_Properties_Line1X0ALine2;\n" - "}\n"); + EXPECT_EQ(output.str(), "export type MyObjectLine1line2 = string;\n\n" + "export interface MyObject {\n" + " \"line1\\nline2\"?: MyObjectLine1line2;\n" + "}\n"); } TEST(Generator_typescript, object_property_with_tab) { @@ -190,27 +207,29 @@ TEST(Generator_typescript, object_property_with_tab) { IRResult result; - result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "col1\tcol2"}}, - IRScalarType::String}); + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"properties", "col1\tcol2"}, + .symbol = {"col1\tcol2"}}, + IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( "col1\tcol2", - IRObjectValue{{sourcemeta::core::Pointer{"properties", "col1\tcol2"}}, - false, - false}); + IRObjectValue{ + {.pointer = sourcemeta::core::Pointer{"properties", "col1\tcol2"}, + .symbol = {"col1\tcol2"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); - EXPECT_EQ(output.str(), - "export type MyObject_Properties_Col1X09Col2 = string;\n\n" - "export interface MyObject {\n" - " \"col1\\tcol2\"?: MyObject_Properties_Col1X09Col2;\n" - "}\n"); + EXPECT_EQ(output.str(), "export type MyObjectCol1col2 = string;\n\n" + "export interface MyObject {\n" + " \"col1\\tcol2\"?: MyObjectCol1col2;\n" + "}\n"); } TEST(Generator_typescript, object_property_with_carriage_return) { @@ -218,27 +237,29 @@ TEST(Generator_typescript, object_property_with_carriage_return) { IRResult result; - result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "line1\rline2"}}, - IRScalarType::String}); + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"properties", "line1\rline2"}, + .symbol = {"line1\rline2"}}, + IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( "line1\rline2", - IRObjectValue{{sourcemeta::core::Pointer{"properties", "line1\rline2"}}, - false, - false}); + IRObjectValue{ + {.pointer = sourcemeta::core::Pointer{"properties", "line1\rline2"}, + .symbol = {"line1\rline2"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); - EXPECT_EQ(output.str(), - "export type MyObject_Properties_Line1X0DLine2 = string;\n\n" - "export interface MyObject {\n" - " \"line1\\rline2\"?: MyObject_Properties_Line1X0DLine2;\n" - "}\n"); + EXPECT_EQ(output.str(), "export type MyObjectLine1line2 = string;\n\n" + "export interface MyObject {\n" + " \"line1\\rline2\"?: MyObjectLine1line2;\n" + "}\n"); } TEST(Generator_typescript, object_property_with_special_characters) { @@ -247,7 +268,8 @@ TEST(Generator_typescript, object_property_with_special_characters) { IRResult result; result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "$foo@bar"}}, + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", "$foo@bar"}, + .symbol = {"$foo@bar"}}, IRScalarType::String}); IRObject object; @@ -255,17 +277,20 @@ TEST(Generator_typescript, object_property_with_special_characters) { object.members.emplace_back( "$foo@bar", IRObjectValue{ - {sourcemeta::core::Pointer{"properties", "$foo@bar"}}, false, false}); + {.pointer = sourcemeta::core::Pointer{"properties", "$foo@bar"}, + .symbol = {"$foo@bar"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); const auto expected{ - R"TS(export type MyObject_Properties_X24FooX40Bar = string; + R"TS(export type MyObject$foobar = string; export interface MyObject { - "$foo@bar"?: MyObject_Properties_X24FooX40Bar; + "$foo@bar"?: MyObject$foobar; } )TS"}; @@ -277,27 +302,30 @@ TEST(Generator_typescript, object_property_with_spaces) { IRResult result; - result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "my property name"}}, - IRScalarType::String}); + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"properties", "my property name"}, + .symbol = {"my property name"}}, + IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( - "my property name", IRObjectValue{{sourcemeta::core::Pointer{ - "properties", "my property name"}}, - false, - false}); + "my property name", + IRObjectValue{{.pointer = sourcemeta::core::Pointer{"properties", + "my property name"}, + .symbol = {"my property name"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); const auto expected{ - R"TS(export type MyObject_Properties_MyX20PropertyX20Name = string; + R"TS(export type MyObjectMypropertyname = string; export interface MyObject { - "my property name"?: MyObject_Properties_MyX20PropertyX20Name; + "my property name"?: MyObjectMypropertyname; } )TS"}; @@ -310,7 +338,8 @@ TEST(Generator_typescript, object_property_starting_with_number) { IRResult result; result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "123abc"}}, + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", "123abc"}, + .symbol = {"123abc"}}, IRScalarType::String}); IRObject object; @@ -318,16 +347,19 @@ TEST(Generator_typescript, object_property_starting_with_number) { object.members.emplace_back( "123abc", IRObjectValue{ - {sourcemeta::core::Pointer{"properties", "123abc"}}, false, false}); + {.pointer = sourcemeta::core::Pointer{"properties", "123abc"}, + .symbol = {"123abc"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); - const auto expected{R"TS(export type MyObject_Properties_123abc = string; + const auto expected{R"TS(export type MyObject_123abc = string; export interface MyObject { - "123abc"?: MyObject_Properties_123abc; + "123abc"?: MyObject_123abc; } )TS"}; @@ -340,24 +372,27 @@ TEST(Generator_typescript, object_property_reserved_word) { IRResult result; result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "class"}}, + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", "class"}, + .symbol = {"class"}}, IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( - "class", IRObjectValue{{sourcemeta::core::Pointer{"properties", "class"}}, - false, - false}); + "class", IRObjectValue{ + {.pointer = sourcemeta::core::Pointer{"properties", "class"}, + .symbol = {"class"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); - const auto expected{R"TS(export type MyObject_Properties_Class = string; + const auto expected{R"TS(export type MyObjectClass = string; export interface MyObject { - "class"?: MyObject_Properties_Class; + "class"?: MyObjectClass; } )TS"}; @@ -369,16 +404,20 @@ TEST(Generator_typescript, object_property_mixed_escapes) { IRResult result; - result.emplace_back(IRScalar{ - {sourcemeta::core::Pointer{"properties", "path\\to\\\"file\"\n"}}, - IRScalarType::String}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", + "path\\to\\\"file\"\n"}, + .symbol = {"path\\to\\\"file\"\n"}}, + IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( "path\\to\\\"file\"\n", IRObjectValue{ - {sourcemeta::core::Pointer{"properties", "path\\to\\\"file\"\n"}}, + {.pointer = + sourcemeta::core::Pointer{"properties", "path\\to\\\"file\"\n"}, + .symbol = {"path\\to\\\"file\"\n"}}, false, false}); result.emplace_back(std::move(object)); @@ -386,13 +425,11 @@ TEST(Generator_typescript, object_property_mixed_escapes) { std::ostringstream output; generate(output, result, "MyObject"); - EXPECT_EQ( - output.str(), - "export type MyObject_Properties_PathX5CToX5CX22FileX22X0A = string;\n\n" - "export interface MyObject {\n" - " \"path\\\\to\\\\\\\"file\\\"\\n\"?: " - "MyObject_Properties_PathX5CToX5CX22FileX22X0A;\n" - "}\n"); + EXPECT_EQ(output.str(), "export type MyObjectPathtofile = string;\n\n" + "export interface MyObject {\n" + " \"path\\\\to\\\\\\\"file\\\"\\n\"?: " + "MyObjectPathtofile;\n" + "}\n"); } TEST(Generator_typescript, object_property_empty_string) { @@ -400,23 +437,26 @@ TEST(Generator_typescript, object_property_empty_string) { IRResult result; - result.emplace_back(IRScalar{{sourcemeta::core::Pointer{"properties", ""}}, - IRScalarType::String}); + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"properties", ""}, .symbol = {""}}, + IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( - "", IRObjectValue{ - {sourcemeta::core::Pointer{"properties", ""}}, false, false}); + "", IRObjectValue{{.pointer = sourcemeta::core::Pointer{"properties", ""}, + .symbol = {""}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); - const auto expected{R"TS(export type MyObject_Properties_ZEmpty = string; + const auto expected{R"TS(export type MyObject = string; -export interface MyObject { - ""?: MyObject_Properties_ZEmpty; +export interface _MyObject { + ""?: MyObject; } )TS"}; @@ -427,7 +467,7 @@ TEST(Generator_typescript, impossible_at_root) { using namespace sourcemeta::codegen; IRResult result; - result.emplace_back(IRImpossible{{}}); + result.emplace_back(IRImpossible{{.pointer = {}, .symbol = {}}}); std::ostringstream output; generate(output, result, "MyType"); @@ -439,12 +479,13 @@ TEST(Generator_typescript, impossible_nested) { using namespace sourcemeta::codegen; IRResult result; - result.emplace_back(IRImpossible{{sourcemeta::core::Pointer{"foo"}}}); + result.emplace_back(IRImpossible{ + {.pointer = sourcemeta::core::Pointer{"foo"}, .symbol = {"foo"}}}); std::ostringstream output; generate(output, result, "MyType"); - EXPECT_EQ(output.str(), "export type MyType_Foo = never;\n"); + EXPECT_EQ(output.str(), "export type MyTypeFoo = never;\n"); } TEST(Generator_typescript, array_at_root) { @@ -452,20 +493,22 @@ TEST(Generator_typescript, array_at_root) { IRResult result; - result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"items"}}, IRScalarType::String}); + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"items"}, .symbol = {"items"}}, + IRScalarType::String}); IRArray array; array.pointer = {}; - array.items = IRType{.pointer = sourcemeta::core::Pointer{"items"}}; + array.items = IRType{.pointer = sourcemeta::core::Pointer{"items"}, + .symbol = {"items"}}; result.emplace_back(std::move(array)); std::ostringstream output; generate(output, result, "MyArray"); - const auto expected{R"TS(export type MyArray_Items = string; + const auto expected{R"TS(export type MyArrayItems = string; -export type MyArray = MyArray_Items[]; +export type MyArray = MyArrayItems[]; )TS"}; EXPECT_EQ(output.str(), expected); @@ -476,33 +519,38 @@ TEST(Generator_typescript, array_nested_in_object) { IRResult result; - result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "tags", "items"}}, - IRScalarType::String}); + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"properties", "tags", "items"}, + .symbol = {"tags", "items"}}, + IRScalarType::String}); IRArray array; array.pointer = sourcemeta::core::Pointer{"properties", "tags"}; + array.symbol = {"tags"}; array.items = IRType{ - .pointer = sourcemeta::core::Pointer{"properties", "tags", "items"}}; + .pointer = sourcemeta::core::Pointer{"properties", "tags", "items"}, + .symbol = {"tags", "items"}}; result.emplace_back(std::move(array)); IRObject object; object.pointer = {}; object.members.emplace_back( - "tags", IRObjectValue{{sourcemeta::core::Pointer{"properties", "tags"}}, - false, - false}); + "tags", + IRObjectValue{{.pointer = sourcemeta::core::Pointer{"properties", "tags"}, + .symbol = {"tags"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); - const auto expected{R"TS(export type MyObject_Properties_Tags_Items = string; + const auto expected{R"TS(export type MyObjectTagsItems = string; -export type MyObject_Properties_Tags = MyObject_Properties_Tags_Items[]; +export type MyObjectTags = MyObjectTagsItems[]; export interface MyObject { - "tags"?: MyObject_Properties_Tags; + "tags"?: MyObjectTags; } )TS"}; @@ -514,26 +562,34 @@ TEST(Generator_typescript, tuple_without_additional) { IRResult result; - result.emplace_back(IRScalar{{sourcemeta::core::Pointer{"prefixItems", "0"}}, - IRScalarType::String}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"prefixItems", "0"}, + .symbol = {"0"}}, + IRScalarType::String}); - result.emplace_back(IRScalar{{sourcemeta::core::Pointer{"prefixItems", "1"}}, - IRScalarType::String}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"prefixItems", "1"}, + .symbol = {"1"}}, + IRScalarType::String}); IRTuple tuple; tuple.pointer = {}; - tuple.items.push_back({sourcemeta::core::Pointer{"prefixItems", "0"}}); - tuple.items.push_back({sourcemeta::core::Pointer{"prefixItems", "1"}}); + tuple.items.push_back( + {.pointer = sourcemeta::core::Pointer{"prefixItems", "0"}, + .symbol = {"0"}}); + tuple.items.push_back( + {.pointer = sourcemeta::core::Pointer{"prefixItems", "1"}, + .symbol = {"1"}}); result.emplace_back(std::move(tuple)); std::ostringstream output; generate(output, result, "MyTuple"); - const auto expected{R"TS(export type MyTuple_PrefixItems_0 = string; + const auto expected{R"TS(export type MyTuple_0 = string; -export type MyTuple_PrefixItems_1 = string; +export type MyTuple_1 = string; -export type MyTuple = [MyTuple_PrefixItems_0, MyTuple_PrefixItems_1]; +export type MyTuple = [MyTuple_0, MyTuple_1]; )TS"}; EXPECT_EQ(output.str(), expected); @@ -544,26 +600,32 @@ TEST(Generator_typescript, tuple_with_additional) { IRResult result; - result.emplace_back(IRScalar{{sourcemeta::core::Pointer{"prefixItems", "0"}}, - IRScalarType::String}); - result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"items"}}, IRScalarType::String}); + IRScalar{{.pointer = sourcemeta::core::Pointer{"prefixItems", "0"}, + .symbol = {"0"}}, + IRScalarType::String}); + + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"items"}, .symbol = {"items"}}, + IRScalarType::String}); IRTuple tuple; tuple.pointer = {}; - tuple.items.push_back({sourcemeta::core::Pointer{"prefixItems", "0"}}); - tuple.additional = IRType{sourcemeta::core::Pointer{"items"}}; + tuple.items.push_back( + {.pointer = sourcemeta::core::Pointer{"prefixItems", "0"}, + .symbol = {"0"}}); + tuple.additional = IRType{.pointer = sourcemeta::core::Pointer{"items"}, + .symbol = {"items"}}; result.emplace_back(std::move(tuple)); std::ostringstream output; generate(output, result, "MyTuple"); - const auto expected{R"TS(export type MyTuple_PrefixItems_0 = string; + const auto expected{R"TS(export type MyTuple_0 = string; -export type MyTuple_Items = string; +export type MyTupleItems = string; -export type MyTuple = [MyTuple_PrefixItems_0, ...MyTuple_Items[]]; +export type MyTuple = [MyTuple_0, ...MyTupleItems[]]; )TS"}; EXPECT_EQ(output.str(), expected); @@ -575,23 +637,27 @@ TEST(Generator_typescript, reference_property_to_root) { IRResult result; result.emplace_back( - IRReference{{sourcemeta::core::Pointer{"properties", "child"}}, {{}}}); + IRReference{{.pointer = sourcemeta::core::Pointer{"properties", "child"}, + .symbol = {"child"}}, + {.pointer = {}, .symbol = {}}}); IRObject object; object.pointer = {}; object.members.emplace_back( - "child", IRObjectValue{{sourcemeta::core::Pointer{"properties", "child"}}, - false, - false}); + "child", IRObjectValue{ + {.pointer = sourcemeta::core::Pointer{"properties", "child"}, + .symbol = {"child"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "Node"); - const auto expected{R"TS(export type Node_Properties_Child = Node; + const auto expected{R"TS(export type NodeChild = Node; export interface Node { - "child"?: Node_Properties_Child; + "child"?: NodeChild; } )TS"}; @@ -682,28 +748,32 @@ TEST(Generator_typescript, union_at_root) { IRResult result; - result.emplace_back(IRScalar{{sourcemeta::core::Pointer{"anyOf", "0"}}, - IRScalarType::String}); + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"anyOf", "0"}, .symbol = {"0"}}, + IRScalarType::String}); - result.emplace_back(IRScalar{{sourcemeta::core::Pointer{"anyOf", "1"}}, - IRScalarType::String}); + result.emplace_back(IRScalar{ + {.pointer = sourcemeta::core::Pointer{"anyOf", "1"}, .symbol = {"1"}}, + IRScalarType::String}); IRUnion my_union; my_union.pointer = {}; - my_union.values.push_back({sourcemeta::core::Pointer{"anyOf", "0"}}); - my_union.values.push_back({sourcemeta::core::Pointer{"anyOf", "1"}}); + my_union.values.push_back( + {.pointer = sourcemeta::core::Pointer{"anyOf", "0"}, .symbol = {"0"}}); + my_union.values.push_back( + {.pointer = sourcemeta::core::Pointer{"anyOf", "1"}, .symbol = {"1"}}); result.emplace_back(std::move(my_union)); std::ostringstream output; generate(output, result, "MyUnion"); - const auto expected{R"TS(export type MyUnion_AnyOf_0 = string; + const auto expected{R"TS(export type MyUnion_0 = string; -export type MyUnion_AnyOf_1 = string; +export type MyUnion_1 = string; export type MyUnion = - MyUnion_AnyOf_0 | - MyUnion_AnyOf_1; + MyUnion_0 | + MyUnion_1; )TS"}; EXPECT_EQ(output.str(), expected); @@ -715,43 +785,54 @@ TEST(Generator_typescript, union_nested_in_object) { IRResult result; result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "value", "anyOf", "0"}}, + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", "value", + "anyOf", "0"}, + .symbol = {"value", "0"}}, IRScalarType::String}); result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"properties", "value", "anyOf", "1"}}, + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", "value", + "anyOf", "1"}, + .symbol = {"value", "1"}}, IRScalarType::String}); IRUnion my_union; my_union.pointer = sourcemeta::core::Pointer{"properties", "value"}; + my_union.symbol = {"value"}; my_union.values.push_back( - {sourcemeta::core::Pointer{"properties", "value", "anyOf", "0"}}); + {.pointer = + sourcemeta::core::Pointer{"properties", "value", "anyOf", "0"}, + .symbol = {"value", "0"}}); my_union.values.push_back( - {sourcemeta::core::Pointer{"properties", "value", "anyOf", "1"}}); + {.pointer = + sourcemeta::core::Pointer{"properties", "value", "anyOf", "1"}, + .symbol = {"value", "1"}}); result.emplace_back(std::move(my_union)); IRObject object; object.pointer = {}; object.members.emplace_back( - "value", IRObjectValue{{sourcemeta::core::Pointer{"properties", "value"}}, - false, - false}); + "value", IRObjectValue{ + {.pointer = sourcemeta::core::Pointer{"properties", "value"}, + .symbol = {"value"}}, + false, + false}); result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); const auto expected{ - R"TS(export type MyObject_Properties_Value_AnyOf_0 = string; + R"TS(export type MyObjectValue_0 = string; -export type MyObject_Properties_Value_AnyOf_1 = string; +export type MyObjectValue_1 = string; -export type MyObject_Properties_Value = - MyObject_Properties_Value_AnyOf_0 | - MyObject_Properties_Value_AnyOf_1; +export type MyObjectValue = + MyObjectValue_0 | + MyObjectValue_1; export interface MyObject { - "value"?: MyObject_Properties_Value; + "value"?: MyObjectValue; } )TS"}; @@ -763,49 +844,59 @@ TEST(Generator_typescript, object_with_additional_properties_typed) { IRResult result; - result.emplace_back(IRScalar{ - {sourcemeta::core::Pointer{"properties", "name"}}, IRScalarType::String}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", "name"}, + .symbol = {"name"}}, + IRScalarType::String}); - result.emplace_back(IRScalar{{sourcemeta::core::Pointer{"properties", "age"}}, - IRScalarType::Integer}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", "age"}, + .symbol = {"age"}}, + IRScalarType::Integer}); result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"additionalProperties"}}, + IRScalar{{.pointer = sourcemeta::core::Pointer{"additionalProperties"}, + .symbol = {"additionalProperties"}}, IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( - "name", IRObjectValue{{sourcemeta::core::Pointer{"properties", "name"}}, - true, - false}); + "name", + IRObjectValue{{.pointer = sourcemeta::core::Pointer{"properties", "name"}, + .symbol = {"name"}}, + true, + false}); object.members.emplace_back( - "age", IRObjectValue{{sourcemeta::core::Pointer{"properties", "age"}}, - false, - false}); + "age", + IRObjectValue{{.pointer = sourcemeta::core::Pointer{"properties", "age"}, + .symbol = {"age"}}, + false, + false}); object.additional = - IRType{{sourcemeta::core::Pointer{"additionalProperties"}}}; + IRType{.pointer = sourcemeta::core::Pointer{"additionalProperties"}, + .symbol = {"additionalProperties"}}; result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "Person"); - const auto expected{R"TS(export type Person_Properties_Name = string; + const auto expected{R"TS(export type PersonName = string; -export type Person_Properties_Age = number; +export type PersonAge = number; -export type Person_AdditionalProperties = string; +export type PersonAdditionalProperties = string; export interface Person { - "name": Person_Properties_Name; - "age"?: Person_Properties_Age; + "name": PersonName; + "age"?: PersonAge; [key: string]: // As a notable limitation, TypeScript requires index signatures // to also include the types of all of its properties, so we must // match a superset of what JSON Schema allows - Person_Properties_Name | - Person_Properties_Age | - Person_AdditionalProperties | + PersonName | + PersonAge | + PersonAdditionalProperties | undefined; } )TS"}; @@ -819,37 +910,44 @@ TEST(Generator_typescript, IRResult result; - result.emplace_back(IRScalar{{sourcemeta::core::Pointer{"properties", "id"}}, - IRScalarType::Integer}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", "id"}, + .symbol = {"id"}}, + IRScalarType::Integer}); result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"additionalProperties"}}, + IRScalar{{.pointer = sourcemeta::core::Pointer{"additionalProperties"}, + .symbol = {"additionalProperties"}}, IRScalarType::String}); IRObject object; object.pointer = {}; object.members.emplace_back( - "id", IRObjectValue{ - {sourcemeta::core::Pointer{"properties", "id"}}, true, false}); + "id", + IRObjectValue{{.pointer = sourcemeta::core::Pointer{"properties", "id"}, + .symbol = {"id"}}, + true, + false}); object.additional = - IRType{{sourcemeta::core::Pointer{"additionalProperties"}}}; + IRType{.pointer = sourcemeta::core::Pointer{"additionalProperties"}, + .symbol = {"additionalProperties"}}; result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "Item"); - const auto expected{R"TS(export type Item_Properties_Id = number; + const auto expected{R"TS(export type ItemId = number; -export type Item_AdditionalProperties = string; +export type ItemAdditionalProperties = string; export interface Item { - "id": Item_Properties_Id; + "id": ItemId; [key: string]: // As a notable limitation, TypeScript requires index signatures // to also include the types of all of its properties, so we must // match a superset of what JSON Schema allows - Item_Properties_Id | - Item_AdditionalProperties | + ItemId | + ItemAdditionalProperties | undefined; } )TS"}; @@ -881,37 +979,43 @@ TEST(Generator_typescript, object_with_additional_properties_false) { IRResult result; - result.emplace_back(IRScalar{{sourcemeta::core::Pointer{"properties", "foo"}}, - IRScalarType::String}); - result.emplace_back( - IRImpossible{{sourcemeta::core::Pointer{"additionalProperties"}}}); + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", "foo"}, + .symbol = {"foo"}}, + IRScalarType::String}); + + result.emplace_back(IRImpossible{ + {.pointer = sourcemeta::core::Pointer{"additionalProperties"}, + .symbol = {"additionalProperties"}}}); IRObject object; object.pointer = {}; object.members.emplace_back( - "foo", IRObjectValue{{sourcemeta::core::Pointer{"properties", "foo"}}, - false, - false}); + "foo", + IRObjectValue{{.pointer = sourcemeta::core::Pointer{"properties", "foo"}, + .symbol = {"foo"}}, + false, + false}); object.additional = - IRType{{sourcemeta::core::Pointer{"additionalProperties"}}}; + IRType{.pointer = sourcemeta::core::Pointer{"additionalProperties"}, + .symbol = {"additionalProperties"}}; result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "MyObject"); - const auto expected{R"TS(export type MyObject_Properties_Foo = string; + const auto expected{R"TS(export type MyObjectFoo = string; -export type MyObject_AdditionalProperties = never; +export type MyObjectAdditionalProperties = never; export interface MyObject { - "foo"?: MyObject_Properties_Foo; + "foo"?: MyObjectFoo; [key: string]: // As a notable limitation, TypeScript requires index signatures // to also include the types of all of its properties, so we must // match a superset of what JSON Schema allows - MyObject_Properties_Foo | - MyObject_AdditionalProperties | + MyObjectFoo | + MyObjectAdditionalProperties | undefined; } )TS"}; @@ -924,85 +1028,110 @@ TEST(Generator_typescript, object_with_additional_properties_any) { IRResult result; - result.emplace_back(IRScalar{ - {sourcemeta::core::Pointer{"properties", "name"}}, IRScalarType::String}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"properties", "name"}, + .symbol = {"name"}}, + IRScalarType::String}); - result.emplace_back(IRScalar{ - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "0"}}, - IRScalarType::Null}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"additionalProperties", + "anyOf", "0"}, + .symbol = {"additionalProperties", "0"}}, + IRScalarType::Null}); - result.emplace_back(IRScalar{ - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "1"}}, - IRScalarType::Boolean}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"additionalProperties", + "anyOf", "1"}, + .symbol = {"additionalProperties", "1"}}, + IRScalarType::Boolean}); IRArray any_array; any_array.pointer = sourcemeta::core::Pointer{"additionalProperties", "anyOf", "2"}; + any_array.symbol = {"additionalProperties", "2"}; any_array.items = std::nullopt; result.emplace_back(std::move(any_array)); - result.emplace_back(IRScalar{ - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "3"}}, - IRScalarType::String}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"additionalProperties", + "anyOf", "3"}, + .symbol = {"additionalProperties", "3"}}, + IRScalarType::String}); - result.emplace_back(IRScalar{ - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "4"}}, - IRScalarType::Number}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"additionalProperties", + "anyOf", "4"}, + .symbol = {"additionalProperties", "4"}}, + IRScalarType::Number}); IRUnion any_union; any_union.pointer = sourcemeta::core::Pointer{"additionalProperties"}; + any_union.symbol = {"additionalProperties"}; any_union.values.push_back( - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "0"}}); + {.pointer = + sourcemeta::core::Pointer{"additionalProperties", "anyOf", "0"}, + .symbol = {"additionalProperties", "0"}}); any_union.values.push_back( - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "1"}}); + {.pointer = + sourcemeta::core::Pointer{"additionalProperties", "anyOf", "1"}, + .symbol = {"additionalProperties", "1"}}); any_union.values.push_back( - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "2"}}); + {.pointer = + sourcemeta::core::Pointer{"additionalProperties", "anyOf", "2"}, + .symbol = {"additionalProperties", "2"}}); any_union.values.push_back( - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "3"}}); + {.pointer = + sourcemeta::core::Pointer{"additionalProperties", "anyOf", "3"}, + .symbol = {"additionalProperties", "3"}}); any_union.values.push_back( - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "4"}}); + {.pointer = + sourcemeta::core::Pointer{"additionalProperties", "anyOf", "4"}, + .symbol = {"additionalProperties", "4"}}); result.emplace_back(std::move(any_union)); IRObject object; object.pointer = {}; object.members.emplace_back( - "name", IRObjectValue{{sourcemeta::core::Pointer{"properties", "name"}}, - false, - false}); + "name", + IRObjectValue{{.pointer = sourcemeta::core::Pointer{"properties", "name"}, + .symbol = {"name"}}, + false, + false}); object.additional = - IRType{{sourcemeta::core::Pointer{"additionalProperties"}}}; + IRType{.pointer = sourcemeta::core::Pointer{"additionalProperties"}, + .symbol = {"additionalProperties"}}; result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "Test"); - const auto expected{R"TS(export type Test_Properties_Name = string; + const auto expected{R"TS(export type TestName = string; -export type Test_AdditionalProperties_AnyOf_0 = null; +export type TestAdditionalProperties_0 = null; -export type Test_AdditionalProperties_AnyOf_1 = boolean; +export type TestAdditionalProperties_1 = boolean; -export type Test_AdditionalProperties_AnyOf_2 = unknown[]; +export type TestAdditionalProperties_2 = unknown[]; -export type Test_AdditionalProperties_AnyOf_3 = string; +export type TestAdditionalProperties_3 = string; -export type Test_AdditionalProperties_AnyOf_4 = number; +export type TestAdditionalProperties_4 = number; -export type Test_AdditionalProperties = - Test_AdditionalProperties_AnyOf_0 | - Test_AdditionalProperties_AnyOf_1 | - Test_AdditionalProperties_AnyOf_2 | - Test_AdditionalProperties_AnyOf_3 | - Test_AdditionalProperties_AnyOf_4; +export type TestAdditionalProperties = + TestAdditionalProperties_0 | + TestAdditionalProperties_1 | + TestAdditionalProperties_2 | + TestAdditionalProperties_3 | + TestAdditionalProperties_4; export interface Test { - "name"?: Test_Properties_Name; + "name"?: TestName; [key: string]: // As a notable limitation, TypeScript requires index signatures // to also include the types of all of its properties, so we must // match a superset of what JSON Schema allows - Test_Properties_Name | - Test_AdditionalProperties | + TestName | + TestAdditionalProperties | undefined; } )TS"}; @@ -1016,21 +1145,23 @@ TEST(Generator_typescript, object_only_additional_properties) { IRResult result; result.emplace_back( - IRScalar{{sourcemeta::core::Pointer{"additionalProperties"}}, + IRScalar{{.pointer = sourcemeta::core::Pointer{"additionalProperties"}, + .symbol = {"additionalProperties"}}, IRScalarType::Boolean}); IRObject object; object.pointer = {}; object.additional = - IRType{{sourcemeta::core::Pointer{"additionalProperties"}}}; + IRType{.pointer = sourcemeta::core::Pointer{"additionalProperties"}, + .symbol = {"additionalProperties"}}; result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "Test"); - const auto expected{R"TS(export type Test_AdditionalProperties = boolean; + const auto expected{R"TS(export type TestAdditionalProperties = boolean; -export type Test = Record; +export type Test = Record; )TS"}; EXPECT_EQ(output.str(), expected); @@ -1060,69 +1191,90 @@ TEST(Generator_typescript, object_only_additional_properties_true) { IRResult result; - result.emplace_back(IRScalar{ - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "0"}}, - IRScalarType::Null}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"additionalProperties", + "anyOf", "0"}, + .symbol = {"additionalProperties", "0"}}, + IRScalarType::Null}); - result.emplace_back(IRScalar{ - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "1"}}, - IRScalarType::Boolean}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"additionalProperties", + "anyOf", "1"}, + .symbol = {"additionalProperties", "1"}}, + IRScalarType::Boolean}); IRArray any_array; any_array.pointer = sourcemeta::core::Pointer{"additionalProperties", "anyOf", "2"}; + any_array.symbol = {"additionalProperties", "2"}; any_array.items = std::nullopt; result.emplace_back(std::move(any_array)); - result.emplace_back(IRScalar{ - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "3"}}, - IRScalarType::String}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"additionalProperties", + "anyOf", "3"}, + .symbol = {"additionalProperties", "3"}}, + IRScalarType::String}); - result.emplace_back(IRScalar{ - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "4"}}, - IRScalarType::Number}); + result.emplace_back( + IRScalar{{.pointer = sourcemeta::core::Pointer{"additionalProperties", + "anyOf", "4"}, + .symbol = {"additionalProperties", "4"}}, + IRScalarType::Number}); IRUnion any_union; any_union.pointer = sourcemeta::core::Pointer{"additionalProperties"}; + any_union.symbol = {"additionalProperties"}; any_union.values.push_back( - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "0"}}); + {.pointer = + sourcemeta::core::Pointer{"additionalProperties", "anyOf", "0"}, + .symbol = {"additionalProperties", "0"}}); any_union.values.push_back( - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "1"}}); + {.pointer = + sourcemeta::core::Pointer{"additionalProperties", "anyOf", "1"}, + .symbol = {"additionalProperties", "1"}}); any_union.values.push_back( - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "2"}}); + {.pointer = + sourcemeta::core::Pointer{"additionalProperties", "anyOf", "2"}, + .symbol = {"additionalProperties", "2"}}); any_union.values.push_back( - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "3"}}); + {.pointer = + sourcemeta::core::Pointer{"additionalProperties", "anyOf", "3"}, + .symbol = {"additionalProperties", "3"}}); any_union.values.push_back( - {sourcemeta::core::Pointer{"additionalProperties", "anyOf", "4"}}); + {.pointer = + sourcemeta::core::Pointer{"additionalProperties", "anyOf", "4"}, + .symbol = {"additionalProperties", "4"}}); result.emplace_back(std::move(any_union)); IRObject object; object.pointer = {}; object.additional = - IRType{{sourcemeta::core::Pointer{"additionalProperties"}}}; + IRType{.pointer = sourcemeta::core::Pointer{"additionalProperties"}, + .symbol = {"additionalProperties"}}; result.emplace_back(std::move(object)); std::ostringstream output; generate(output, result, "Test"); - const auto expected{R"TS(export type Test_AdditionalProperties_AnyOf_0 = null; + const auto expected{R"TS(export type TestAdditionalProperties_0 = null; -export type Test_AdditionalProperties_AnyOf_1 = boolean; +export type TestAdditionalProperties_1 = boolean; -export type Test_AdditionalProperties_AnyOf_2 = unknown[]; +export type TestAdditionalProperties_2 = unknown[]; -export type Test_AdditionalProperties_AnyOf_3 = string; +export type TestAdditionalProperties_3 = string; -export type Test_AdditionalProperties_AnyOf_4 = number; +export type TestAdditionalProperties_4 = number; -export type Test_AdditionalProperties = - Test_AdditionalProperties_AnyOf_0 | - Test_AdditionalProperties_AnyOf_1 | - Test_AdditionalProperties_AnyOf_2 | - Test_AdditionalProperties_AnyOf_3 | - Test_AdditionalProperties_AnyOf_4; +export type TestAdditionalProperties = + TestAdditionalProperties_0 | + TestAdditionalProperties_1 | + TestAdditionalProperties_2 | + TestAdditionalProperties_3 | + TestAdditionalProperties_4; -export type Test = Record; +export type Test = Record; )TS"}; EXPECT_EQ(output.str(), expected); diff --git a/test/ir/CMakeLists.txt b/test/ir/CMakeLists.txt index cf2e718..71da014 100644 --- a/test/ir/CMakeLists.txt +++ b/test/ir/CMakeLists.txt @@ -1,6 +1,6 @@ sourcemeta_googletest(NAMESPACE sourcemeta PROJECT codegen NAME ir FOLDER "Codegen/IR" - SOURCES ir_2020_12_test.cc ir_test_utils.h) + SOURCES ir_2020_12_test.cc ir_symbol_test.cc ir_test_utils.h) target_link_libraries(sourcemeta_codegen_ir_unit PRIVATE sourcemeta::codegen::ir) diff --git a/test/ir/ir_2020_12_test.cc b/test/ir/ir_2020_12_test.cc index 435c24f..6454aaf 100644 --- a/test/ir/ir_2020_12_test.cc +++ b/test/ir/ir_2020_12_test.cc @@ -20,6 +20,7 @@ TEST(IR_2020_12, test_1) { EXPECT_EQ(result.size(), 1); EXPECT_IR_SCALAR(result, 0, String, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); } TEST(IR_2020_12, test_2) { @@ -43,9 +44,11 @@ TEST(IR_2020_12, test_2) { EXPECT_EQ(result.size(), 2); EXPECT_IR_SCALAR(result, 0, String, "/properties/foo"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "foo"); EXPECT_TRUE(std::holds_alternative(result.at(1))); EXPECT_AS_STRING(std::get(result.at(1)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(1)).symbol); EXPECT_EQ(std::get(result.at(1)).members.size(), 1); EXPECT_EQ(std::get(result.at(1)).members.at(0).first, "foo"); EXPECT_FALSE(std::get(result.at(1)).members.at(0).second.required); @@ -53,6 +56,8 @@ TEST(IR_2020_12, test_2) { EXPECT_AS_STRING( std::get(result.at(1)).members.at(0).second.pointer, "/properties/foo"); + EXPECT_SYMBOL(std::get(result.at(1)).members.at(0).second.symbol, + "foo"); EXPECT_TRUE(std::holds_alternative( std::get(result.at(1)).additional)); EXPECT_TRUE(std::get(std::get(result.at(1)).additional)); @@ -74,6 +79,7 @@ TEST(IR_2020_12, test_3) { EXPECT_EQ(result.size(), 1); EXPECT_IR_SCALAR(result, 0, Integer, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); } TEST(IR_2020_12, test_4) { @@ -92,6 +98,7 @@ TEST(IR_2020_12, test_4) { EXPECT_EQ(result.size(), 1); EXPECT_IR_SCALAR(result, 0, Number, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); } TEST(IR_2020_12, test_5) { @@ -113,6 +120,7 @@ TEST(IR_2020_12, test_5) { EXPECT_EQ(result.size(), 1); EXPECT_IR_SCALAR(result, 0, Integer, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); } TEST(IR_2020_12, test_6) { @@ -134,6 +142,7 @@ TEST(IR_2020_12, test_6) { EXPECT_EQ(result.size(), 1); EXPECT_IR_SCALAR(result, 0, Number, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); } TEST(IR_2020_12, enum_null) { @@ -152,6 +161,7 @@ TEST(IR_2020_12, enum_null) { EXPECT_EQ(result.size(), 1); EXPECT_IR_SCALAR(result, 0, Null, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); } TEST(IR_2020_12, enum_boolean_true_false) { @@ -170,6 +180,7 @@ TEST(IR_2020_12, enum_boolean_true_false) { EXPECT_EQ(result.size(), 1); EXPECT_IR_SCALAR(result, 0, Boolean, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); } TEST(IR_2020_12, enum_boolean_false_true) { @@ -188,6 +199,7 @@ TEST(IR_2020_12, enum_boolean_false_true) { EXPECT_EQ(result.size(), 1); EXPECT_IR_SCALAR(result, 0, Boolean, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); } TEST(IR_2020_12, enum_string_values) { @@ -207,6 +219,7 @@ TEST(IR_2020_12, enum_string_values) { EXPECT_TRUE(std::holds_alternative(result.at(0))); EXPECT_AS_STRING(std::get(result.at(0)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); EXPECT_EQ(std::get(result.at(0)).values.size(), 3); EXPECT_EQ(std::get(result.at(0)).values.at(0).to_string(), "foo"); @@ -232,6 +245,7 @@ TEST(IR_2020_12, const_null) { EXPECT_EQ(result.size(), 1); EXPECT_IR_SCALAR(result, 0, Null, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); } TEST(IR_2020_12, const_string) { @@ -251,6 +265,7 @@ TEST(IR_2020_12, const_string) { EXPECT_TRUE(std::holds_alternative(result.at(0))); EXPECT_AS_STRING(std::get(result.at(0)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); EXPECT_EQ(std::get(result.at(0)).values.size(), 1); EXPECT_EQ(std::get(result.at(0)).values.at(0).to_string(), "hello"); @@ -273,6 +288,7 @@ TEST(IR_2020_12, const_integer) { EXPECT_TRUE(std::holds_alternative(result.at(0))); EXPECT_AS_STRING(std::get(result.at(0)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); EXPECT_EQ(std::get(result.at(0)).values.size(), 1); EXPECT_EQ(std::get(result.at(0)).values.at(0).to_integer(), 42); @@ -295,6 +311,7 @@ TEST(IR_2020_12, const_boolean_true) { EXPECT_TRUE(std::holds_alternative(result.at(0))); EXPECT_AS_STRING(std::get(result.at(0)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); EXPECT_EQ(std::get(result.at(0)).values.size(), 1); EXPECT_TRUE(std::get(result.at(0)).values.at(0).to_boolean()); } @@ -316,6 +333,7 @@ TEST(IR_2020_12, object_type_only) { EXPECT_TRUE(std::holds_alternative(result.at(0))); EXPECT_AS_STRING(std::get(result.at(0)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); EXPECT_TRUE(std::get(result.at(0)).members.empty()); EXPECT_TRUE(std::holds_alternative( std::get(result.at(0)).additional)); @@ -340,6 +358,7 @@ TEST(IR_2020_12, object_empty_properties) { EXPECT_TRUE(std::holds_alternative(result.at(0))); EXPECT_AS_STRING(std::get(result.at(0)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); EXPECT_TRUE(std::get(result.at(0)).members.empty()); EXPECT_TRUE(std::holds_alternative( std::get(result.at(0)).additional)); @@ -366,10 +385,14 @@ TEST(IR_2020_12, object_with_additional_properties) { EXPECT_EQ(result.size(), 3); EXPECT_IR_SCALAR(result, 0, String, "/properties/foo"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "foo"); EXPECT_IR_SCALAR(result, 1, Integer, "/additionalProperties"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, + "additionalProperties"); EXPECT_TRUE(std::holds_alternative(result.at(2))); EXPECT_AS_STRING(std::get(result.at(2)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(2)).symbol); EXPECT_EQ(std::get(result.at(2)).members.size(), 1); EXPECT_TRUE(std::get(result.at(2)).members.at(0).first == "foo"); EXPECT_FALSE(std::get(result.at(2)).members.at(0).second.required); @@ -377,12 +400,17 @@ TEST(IR_2020_12, object_with_additional_properties) { EXPECT_AS_STRING( std::get(result.at(2)).members.at(0).second.pointer, "/properties/foo"); + EXPECT_SYMBOL(std::get(result.at(2)).members.at(0).second.symbol, + "foo"); EXPECT_TRUE(std::holds_alternative( std::get(result.at(2)).additional)); EXPECT_AS_STRING( std::get(std::get(result.at(2)).additional).pointer, "/additionalProperties"); + EXPECT_SYMBOL( + std::get(std::get(result.at(2)).additional).symbol, + "additionalProperties"); } TEST(IR_2020_12, object_with_impossible_property) { @@ -404,9 +432,11 @@ TEST(IR_2020_12, object_with_impossible_property) { EXPECT_EQ(result.size(), 2); EXPECT_IR_IMPOSSIBLE(result, 0, "/properties/foo"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "foo"); EXPECT_TRUE(std::holds_alternative(result.at(1))); EXPECT_AS_STRING(std::get(result.at(1)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(1)).symbol); EXPECT_EQ(std::get(result.at(1)).members.size(), 1); EXPECT_TRUE(std::get(result.at(1)).members.at(0).first == "foo"); EXPECT_FALSE(std::get(result.at(1)).members.at(0).second.required); @@ -414,6 +444,8 @@ TEST(IR_2020_12, object_with_impossible_property) { EXPECT_AS_STRING( std::get(result.at(1)).members.at(0).second.pointer, "/properties/foo"); + EXPECT_SYMBOL(std::get(result.at(1)).members.at(0).second.symbol, + "foo"); EXPECT_TRUE(std::holds_alternative( std::get(result.at(1)).additional)); EXPECT_TRUE(std::get(std::get(result.at(1)).additional)); @@ -439,11 +471,15 @@ TEST(IR_2020_12, object_with_impossible_additional_properties) { EXPECT_EQ(result.size(), 3); EXPECT_IR_SCALAR(result, 0, String, "/properties/foo"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "foo"); EXPECT_IR_IMPOSSIBLE(result, 1, "/additionalProperties"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, + "additionalProperties"); EXPECT_TRUE(std::holds_alternative(result.at(2))); EXPECT_AS_STRING(std::get(result.at(2)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(2)).symbol); EXPECT_EQ(std::get(result.at(2)).members.size(), 1); EXPECT_TRUE(std::get(result.at(2)).members.at(0).first == "foo"); EXPECT_FALSE(std::get(result.at(2)).members.at(0).second.required); @@ -451,6 +487,8 @@ TEST(IR_2020_12, object_with_impossible_additional_properties) { EXPECT_AS_STRING( std::get(result.at(2)).members.at(0).second.pointer, "/properties/foo"); + EXPECT_SYMBOL(std::get(result.at(2)).members.at(0).second.symbol, + "foo"); EXPECT_TRUE(std::holds_alternative( std::get(result.at(2)).additional)); @@ -474,8 +512,11 @@ TEST(IR_2020_12, array_with_items) { EXPECT_EQ(result.size(), 2); EXPECT_IR_SCALAR(result, 0, String, "/items"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "items"); EXPECT_IR_ARRAY(result, 1, "", "/items"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol); + EXPECT_SYMBOL(std::get(result.at(1)).items->symbol, "items"); } TEST(IR_2020_12, array_nested_in_object) { @@ -500,11 +541,15 @@ TEST(IR_2020_12, array_nested_in_object) { EXPECT_EQ(result.size(), 3); EXPECT_IR_SCALAR(result, 0, String, "/properties/tags/items"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "tags", "items"); EXPECT_IR_ARRAY(result, 1, "/properties/tags", "/properties/tags/items"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, "tags"); + EXPECT_SYMBOL(std::get(result.at(1)).items->symbol, "tags", "items"); EXPECT_TRUE(std::holds_alternative(result.at(2))); EXPECT_AS_STRING(std::get(result.at(2)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(2)).symbol); } TEST(IR_2020_12, tuple_with_prefix_items) { @@ -527,15 +572,20 @@ TEST(IR_2020_12, tuple_with_prefix_items) { EXPECT_EQ(result.size(), 3); EXPECT_IR_SCALAR(result, 0, Integer, "/prefixItems/1"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "1"); EXPECT_IR_SCALAR(result, 1, String, "/prefixItems/0"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, "0"); EXPECT_TRUE(std::holds_alternative(result.at(2))); EXPECT_AS_STRING(std::get(result.at(2)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(2)).symbol); EXPECT_EQ(std::get(result.at(2)).items.size(), 2); EXPECT_AS_STRING(std::get(result.at(2)).items.at(0).pointer, "/prefixItems/0"); + EXPECT_SYMBOL(std::get(result.at(2)).items.at(0).symbol, "0"); EXPECT_AS_STRING(std::get(result.at(2)).items.at(1).pointer, "/prefixItems/1"); + EXPECT_SYMBOL(std::get(result.at(2)).items.at(1).symbol, "1"); EXPECT_FALSE(std::get(result.at(2)).additional.has_value()); } @@ -559,16 +609,21 @@ TEST(IR_2020_12, tuple_with_prefix_items_and_items) { EXPECT_EQ(result.size(), 3); EXPECT_IR_SCALAR(result, 0, String, "/prefixItems/0"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "0"); EXPECT_IR_SCALAR(result, 1, Boolean, "/items"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, "items"); EXPECT_TRUE(std::holds_alternative(result.at(2))); EXPECT_AS_STRING(std::get(result.at(2)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(2)).symbol); EXPECT_EQ(std::get(result.at(2)).items.size(), 1); EXPECT_AS_STRING(std::get(result.at(2)).items.at(0).pointer, "/prefixItems/0"); + EXPECT_SYMBOL(std::get(result.at(2)).items.at(0).symbol, "0"); EXPECT_TRUE(std::get(result.at(2)).additional.has_value()); EXPECT_AS_STRING(std::get(result.at(2)).additional->pointer, "/items"); + EXPECT_SYMBOL(std::get(result.at(2)).additional->symbol, "items"); } TEST(IR_2020_12, anyof_two_branches) { @@ -590,15 +645,20 @@ TEST(IR_2020_12, anyof_two_branches) { EXPECT_EQ(result.size(), 3); EXPECT_IR_SCALAR(result, 0, Integer, "/anyOf/1"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "1"); EXPECT_IR_SCALAR(result, 1, String, "/anyOf/0"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, "0"); EXPECT_TRUE(std::holds_alternative(result.at(2))); EXPECT_AS_STRING(std::get(result.at(2)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(2)).symbol); EXPECT_EQ(std::get(result.at(2)).values.size(), 2); EXPECT_AS_STRING(std::get(result.at(2)).values.at(0).pointer, "/anyOf/0"); + EXPECT_SYMBOL(std::get(result.at(2)).values.at(0).symbol, "0"); EXPECT_AS_STRING(std::get(result.at(2)).values.at(1).pointer, "/anyOf/1"); + EXPECT_SYMBOL(std::get(result.at(2)).values.at(1).symbol, "1"); } TEST(IR_2020_12, anyof_three_branches) { @@ -621,18 +681,25 @@ TEST(IR_2020_12, anyof_three_branches) { EXPECT_EQ(result.size(), 4); EXPECT_IR_SCALAR(result, 0, Boolean, "/anyOf/2"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "2"); EXPECT_IR_SCALAR(result, 1, Integer, "/anyOf/1"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, "1"); EXPECT_IR_SCALAR(result, 2, String, "/anyOf/0"); + EXPECT_SYMBOL(std::get(result.at(2)).symbol, "0"); EXPECT_TRUE(std::holds_alternative(result.at(3))); EXPECT_AS_STRING(std::get(result.at(3)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(3)).symbol); EXPECT_EQ(std::get(result.at(3)).values.size(), 3); EXPECT_AS_STRING(std::get(result.at(3)).values.at(0).pointer, "/anyOf/0"); + EXPECT_SYMBOL(std::get(result.at(3)).values.at(0).symbol, "0"); EXPECT_AS_STRING(std::get(result.at(3)).values.at(1).pointer, "/anyOf/1"); + EXPECT_SYMBOL(std::get(result.at(3)).values.at(1).symbol, "1"); EXPECT_AS_STRING(std::get(result.at(3)).values.at(2).pointer, "/anyOf/2"); + EXPECT_SYMBOL(std::get(result.at(3)).values.at(2).symbol, "2"); } TEST(IR_2020_12, oneof_two_branches) { @@ -654,15 +721,20 @@ TEST(IR_2020_12, oneof_two_branches) { EXPECT_EQ(result.size(), 3); EXPECT_IR_SCALAR(result, 0, Integer, "/oneOf/1"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "1"); EXPECT_IR_SCALAR(result, 1, String, "/oneOf/0"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, "0"); EXPECT_TRUE(std::holds_alternative(result.at(2))); EXPECT_AS_STRING(std::get(result.at(2)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(2)).symbol); EXPECT_EQ(std::get(result.at(2)).values.size(), 2); EXPECT_AS_STRING(std::get(result.at(2)).values.at(0).pointer, "/oneOf/0"); + EXPECT_SYMBOL(std::get(result.at(2)).values.at(0).symbol, "0"); EXPECT_AS_STRING(std::get(result.at(2)).values.at(1).pointer, "/oneOf/1"); + EXPECT_SYMBOL(std::get(result.at(2)).values.at(1).symbol, "1"); } TEST(IR_2020_12, oneof_three_branches) { @@ -685,18 +757,25 @@ TEST(IR_2020_12, oneof_three_branches) { EXPECT_EQ(result.size(), 4); EXPECT_IR_SCALAR(result, 0, Boolean, "/oneOf/2"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "2"); EXPECT_IR_SCALAR(result, 1, Integer, "/oneOf/1"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, "1"); EXPECT_IR_SCALAR(result, 2, String, "/oneOf/0"); + EXPECT_SYMBOL(std::get(result.at(2)).symbol, "0"); EXPECT_TRUE(std::holds_alternative(result.at(3))); EXPECT_AS_STRING(std::get(result.at(3)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(3)).symbol); EXPECT_EQ(std::get(result.at(3)).values.size(), 3); EXPECT_AS_STRING(std::get(result.at(3)).values.at(0).pointer, "/oneOf/0"); + EXPECT_SYMBOL(std::get(result.at(3)).values.at(0).symbol, "0"); EXPECT_AS_STRING(std::get(result.at(3)).values.at(1).pointer, "/oneOf/1"); + EXPECT_SYMBOL(std::get(result.at(3)).values.at(1).symbol, "1"); EXPECT_AS_STRING(std::get(result.at(3)).values.at(2).pointer, "/oneOf/2"); + EXPECT_SYMBOL(std::get(result.at(3)).values.at(2).symbol, "2"); } TEST(IR_2020_12, ref_recursive_to_root) { @@ -718,9 +797,12 @@ TEST(IR_2020_12, ref_recursive_to_root) { EXPECT_EQ(result.size(), 2); EXPECT_IR_REFERENCE(result, 0, "/properties/child", ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "child"); + EXPECT_SYMBOL(std::get(result.at(0)).target.symbol); EXPECT_TRUE(std::holds_alternative(result.at(1))); EXPECT_AS_STRING(std::get(result.at(1)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(1)).symbol); EXPECT_EQ(std::get(result.at(1)).members.size(), 1); EXPECT_TRUE(std::get(result.at(1)).members.at(0).first == "child"); EXPECT_FALSE(std::get(result.at(1)).members.at(0).second.required); @@ -728,6 +810,8 @@ TEST(IR_2020_12, ref_recursive_to_root) { EXPECT_AS_STRING( std::get(result.at(1)).members.at(0).second.pointer, "/properties/child"); + EXPECT_SYMBOL(std::get(result.at(1)).members.at(0).second.symbol, + "child"); EXPECT_TRUE(std::holds_alternative( std::get(result.at(1)).additional)); EXPECT_TRUE(std::get(std::get(result.at(1)).additional)); @@ -758,10 +842,12 @@ TEST(IR_2020_12, nested_object_with_required_property) { EXPECT_EQ(result.size(), 3); EXPECT_IR_SCALAR(result, 0, String, "/properties/nested/properties/name"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "nested", "name"); EXPECT_TRUE(std::holds_alternative(result.at(1))); EXPECT_AS_STRING(std::get(result.at(1)).pointer, "/properties/nested"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, "nested"); EXPECT_EQ(std::get(result.at(1)).members.size(), 1); EXPECT_TRUE(std::get(result.at(1)).members.at(0).first == "name"); EXPECT_TRUE(std::get(result.at(1)).members.at(0).second.required); @@ -769,12 +855,15 @@ TEST(IR_2020_12, nested_object_with_required_property) { EXPECT_AS_STRING( std::get(result.at(1)).members.at(0).second.pointer, "/properties/nested/properties/name"); + EXPECT_SYMBOL(std::get(result.at(1)).members.at(0).second.symbol, + "nested", "name"); EXPECT_TRUE(std::holds_alternative( std::get(result.at(1)).additional)); EXPECT_TRUE(std::get(std::get(result.at(1)).additional)); EXPECT_TRUE(std::holds_alternative(result.at(2))); EXPECT_AS_STRING(std::get(result.at(2)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(2)).symbol); EXPECT_EQ(std::get(result.at(2)).members.size(), 1); EXPECT_TRUE(std::get(result.at(2)).members.at(0).first == "nested"); EXPECT_FALSE(std::get(result.at(2)).members.at(0).second.required); @@ -782,6 +871,8 @@ TEST(IR_2020_12, nested_object_with_required_property) { EXPECT_AS_STRING( std::get(result.at(2)).members.at(0).second.pointer, "/properties/nested"); + EXPECT_SYMBOL(std::get(result.at(2)).members.at(0).second.symbol, + "nested"); EXPECT_TRUE(std::holds_alternative( std::get(result.at(2)).additional)); EXPECT_TRUE(std::get(std::get(result.at(2)).additional)); @@ -805,6 +896,7 @@ TEST(IR_2020_12, array_without_items) { EXPECT_TRUE(std::holds_alternative(result.at(0))); EXPECT_AS_STRING(std::get(result.at(0)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(0)).symbol); EXPECT_FALSE(std::get(result.at(0)).items.has_value()); } @@ -828,44 +920,71 @@ TEST(IR_2020_12, object_with_additional_properties_true) { EXPECT_EQ(result.size(), 9); EXPECT_IR_SCALAR(result, 0, String, "/properties/name"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "name"); EXPECT_IR_SCALAR(result, 1, Number, "/additionalProperties/anyOf/5"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, "additionalProperties", + "5"); EXPECT_IR_SCALAR(result, 2, String, "/additionalProperties/anyOf/4"); + EXPECT_SYMBOL(std::get(result.at(2)).symbol, "additionalProperties", + "4"); EXPECT_TRUE(std::holds_alternative(result.at(3))); EXPECT_AS_STRING(std::get(result.at(3)).pointer, "/additionalProperties/anyOf/3"); + EXPECT_SYMBOL(std::get(result.at(3)).symbol, "additionalProperties", + "3"); EXPECT_FALSE(std::get(result.at(3)).items.has_value()); EXPECT_TRUE(std::holds_alternative(result.at(4))); EXPECT_AS_STRING(std::get(result.at(4)).pointer, "/additionalProperties/anyOf/2"); + EXPECT_SYMBOL(std::get(result.at(4)).symbol, "additionalProperties", + "2"); EXPECT_EQ(std::get(result.at(4)).members.size(), 0); EXPECT_TRUE(std::holds_alternative( std::get(result.at(4)).additional)); EXPECT_TRUE(std::get(std::get(result.at(4)).additional)); EXPECT_IR_SCALAR(result, 5, Boolean, "/additionalProperties/anyOf/1"); + EXPECT_SYMBOL(std::get(result.at(5)).symbol, "additionalProperties", + "1"); EXPECT_IR_SCALAR(result, 6, Null, "/additionalProperties/anyOf/0"); + EXPECT_SYMBOL(std::get(result.at(6)).symbol, "additionalProperties", + "0"); EXPECT_TRUE(std::holds_alternative(result.at(7))); EXPECT_AS_STRING(std::get(result.at(7)).pointer, "/additionalProperties"); + EXPECT_SYMBOL(std::get(result.at(7)).symbol, "additionalProperties"); EXPECT_EQ(std::get(result.at(7)).values.size(), 6); EXPECT_AS_STRING(std::get(result.at(7)).values.at(0).pointer, "/additionalProperties/anyOf/0"); + EXPECT_SYMBOL(std::get(result.at(7)).values.at(0).symbol, + "additionalProperties", "0"); EXPECT_AS_STRING(std::get(result.at(7)).values.at(1).pointer, "/additionalProperties/anyOf/1"); + EXPECT_SYMBOL(std::get(result.at(7)).values.at(1).symbol, + "additionalProperties", "1"); EXPECT_AS_STRING(std::get(result.at(7)).values.at(2).pointer, "/additionalProperties/anyOf/2"); + EXPECT_SYMBOL(std::get(result.at(7)).values.at(2).symbol, + "additionalProperties", "2"); EXPECT_AS_STRING(std::get(result.at(7)).values.at(3).pointer, "/additionalProperties/anyOf/3"); + EXPECT_SYMBOL(std::get(result.at(7)).values.at(3).symbol, + "additionalProperties", "3"); EXPECT_AS_STRING(std::get(result.at(7)).values.at(4).pointer, "/additionalProperties/anyOf/4"); + EXPECT_SYMBOL(std::get(result.at(7)).values.at(4).symbol, + "additionalProperties", "4"); EXPECT_AS_STRING(std::get(result.at(7)).values.at(5).pointer, "/additionalProperties/anyOf/5"); + EXPECT_SYMBOL(std::get(result.at(7)).values.at(5).symbol, + "additionalProperties", "5"); EXPECT_TRUE(std::holds_alternative(result.at(8))); EXPECT_AS_STRING(std::get(result.at(8)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(8)).symbol); EXPECT_EQ(std::get(result.at(8)).members.size(), 1); EXPECT_TRUE(std::get(result.at(8)).members.at(0).first == "name"); EXPECT_FALSE(std::get(result.at(8)).members.at(0).second.required); @@ -873,11 +992,16 @@ TEST(IR_2020_12, object_with_additional_properties_true) { EXPECT_AS_STRING( std::get(result.at(8)).members.at(0).second.pointer, "/properties/name"); + EXPECT_SYMBOL(std::get(result.at(8)).members.at(0).second.symbol, + "name"); EXPECT_TRUE(std::holds_alternative( std::get(result.at(8)).additional)); EXPECT_AS_STRING( std::get(std::get(result.at(8)).additional).pointer, "/additionalProperties"); + EXPECT_SYMBOL( + std::get(std::get(result.at(8)).additional).symbol, + "additionalProperties"); } TEST(IR_2020_12, object_only_additional_properties) { @@ -897,15 +1021,21 @@ TEST(IR_2020_12, object_only_additional_properties) { EXPECT_EQ(result.size(), 2); EXPECT_IR_SCALAR(result, 0, Boolean, "/additionalProperties"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, + "additionalProperties"); EXPECT_TRUE(std::holds_alternative(result.at(1))); EXPECT_AS_STRING(std::get(result.at(1)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(1)).symbol); EXPECT_EQ(std::get(result.at(1)).members.size(), 0); EXPECT_TRUE(std::holds_alternative( std::get(result.at(1)).additional)); EXPECT_AS_STRING( std::get(std::get(result.at(1)).additional).pointer, "/additionalProperties"); + EXPECT_SYMBOL( + std::get(std::get(result.at(1)).additional).symbol, + "additionalProperties"); } TEST(IR_2020_12, embedded_resource_with_nested_id_no_duplicates) { @@ -941,33 +1071,46 @@ TEST(IR_2020_12, embedded_resource_with_nested_id_no_duplicates) { EXPECT_EQ(result.size(), 6); EXPECT_IR_REFERENCE(result, 0, "/properties/item", "/$defs/Item"); + EXPECT_SYMBOL(std::get(result.at(0)).symbol, "item"); + EXPECT_SYMBOL(std::get(result.at(0)).target.symbol, "Item"); EXPECT_IR_IMPOSSIBLE(result, 1, "/additionalProperties"); + EXPECT_SYMBOL(std::get(result.at(1)).symbol, + "additionalProperties"); EXPECT_IR_SCALAR(result, 2, String, "/$defs/Item/properties/name"); + EXPECT_SYMBOL(std::get(result.at(2)).symbol, "Item", "name"); EXPECT_IR_IMPOSSIBLE(result, 3, "/$defs/Item/additionalProperties"); + EXPECT_SYMBOL(std::get(result.at(3)).symbol, "Item", + "additionalProperties"); EXPECT_TRUE(std::holds_alternative(result.at(4))); EXPECT_AS_STRING(std::get(result.at(4)).pointer, "/$defs/Item"); + EXPECT_SYMBOL(std::get(result.at(4)).symbol, "Item"); EXPECT_EQ(std::get(result.at(4)).members.size(), 1); EXPECT_EQ(std::get(result.at(4)).members.at(0).first, "name"); EXPECT_TRUE(std::get(result.at(4)).members.at(0).second.required); EXPECT_AS_STRING( std::get(result.at(4)).members.at(0).second.pointer, "/$defs/Item/properties/name"); + EXPECT_SYMBOL(std::get(result.at(4)).members.at(0).second.symbol, + "Item", "name"); EXPECT_TRUE(std::holds_alternative( std::get(result.at(4)).additional)); EXPECT_FALSE(std::get(std::get(result.at(4)).additional)); EXPECT_TRUE(std::holds_alternative(result.at(5))); EXPECT_AS_STRING(std::get(result.at(5)).pointer, ""); + EXPECT_SYMBOL(std::get(result.at(5)).symbol); EXPECT_EQ(std::get(result.at(5)).members.size(), 1); EXPECT_EQ(std::get(result.at(5)).members.at(0).first, "item"); EXPECT_TRUE(std::get(result.at(5)).members.at(0).second.required); EXPECT_AS_STRING( std::get(result.at(5)).members.at(0).second.pointer, "/properties/item"); + EXPECT_SYMBOL(std::get(result.at(5)).members.at(0).second.symbol, + "item"); EXPECT_TRUE(std::holds_alternative( std::get(result.at(5)).additional)); EXPECT_FALSE(std::get(std::get(result.at(5)).additional)); diff --git a/test/ir/ir_symbol_test.cc b/test/ir/ir_symbol_test.cc new file mode 100644 index 0000000..6441f17 --- /dev/null +++ b/test/ir/ir_symbol_test.cc @@ -0,0 +1,121 @@ +#include + +#include + +#include + +TEST(IR_Symbol, nested_additional_properties_items) { + const sourcemeta::core::JSON schema{sourcemeta::core::parse_json(R"JSON({ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + })JSON")}; + + sourcemeta::core::SchemaFrame frame{ + sourcemeta::core::SchemaFrame::Mode::References}; + frame.analyse(schema, sourcemeta::core::schema_walker, + sourcemeta::core::schema_resolver, + "https://json-schema.org/draft/2020-12/schema"); + + const auto location{ + frame.traverse("#/properties/data/additionalProperties/items")}; + EXPECT_TRUE(location.has_value()); + + const auto result{sourcemeta::codegen::symbol(frame, location.value().get())}; + + EXPECT_EQ(result.size(), 3); + EXPECT_EQ(result.at(0), "data"); + EXPECT_EQ(result.at(1), "additionalProperties"); + EXPECT_EQ(result.at(2), "items"); +} + +TEST(IR_Symbol, inside_defs) { + const sourcemeta::core::JSON schema{sourcemeta::core::parse_json(R"JSON({ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "MyType": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + })JSON")}; + + sourcemeta::core::SchemaFrame frame{ + sourcemeta::core::SchemaFrame::Mode::References}; + frame.analyse(schema, sourcemeta::core::schema_walker, + sourcemeta::core::schema_resolver, + "https://json-schema.org/draft/2020-12/schema"); + + const auto location{frame.traverse("#/$defs/MyType/properties/name")}; + EXPECT_TRUE(location.has_value()); + + const auto result{sourcemeta::codegen::symbol(frame, location.value().get())}; + + EXPECT_EQ(result.size(), 2); + EXPECT_EQ(result.at(0), "MyType"); + EXPECT_EQ(result.at(1), "name"); +} + +TEST(IR_Symbol, property_named_properties) { + const sourcemeta::core::JSON schema{sourcemeta::core::parse_json(R"JSON({ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "properties": { + "properties": { + "type": "string" + } + } + })JSON")}; + + sourcemeta::core::SchemaFrame frame{ + sourcemeta::core::SchemaFrame::Mode::References}; + frame.analyse(schema, sourcemeta::core::schema_walker, + sourcemeta::core::schema_resolver, + "https://json-schema.org/draft/2020-12/schema"); + + const auto location{frame.traverse("#/properties/properties")}; + EXPECT_TRUE(location.has_value()); + + const auto result{sourcemeta::codegen::symbol(frame, location.value().get())}; + + EXPECT_EQ(result.size(), 1); + EXPECT_EQ(result.at(0), "properties"); +} + +TEST(IR_Symbol, anyof_child) { + const sourcemeta::core::JSON schema{sourcemeta::core::parse_json(R"JSON({ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "anyOf": [ + { "type": "string" }, + { "type": "number" } + ] + })JSON")}; + + sourcemeta::core::SchemaFrame frame{ + sourcemeta::core::SchemaFrame::Mode::References}; + frame.analyse(schema, sourcemeta::core::schema_walker, + sourcemeta::core::schema_resolver, + "https://json-schema.org/draft/2020-12/schema"); + + const auto location{frame.traverse("#/anyOf/1")}; + EXPECT_TRUE(location.has_value()); + + const auto result{sourcemeta::codegen::symbol(frame, location.value().get())}; + + EXPECT_EQ(result.size(), 1); + EXPECT_EQ(result.at(0), "1"); +} diff --git a/test/ir/ir_test_utils.h b/test/ir/ir_test_utils.h index 73afe2e..0292fcf 100644 --- a/test/ir/ir_test_utils.h +++ b/test/ir/ir_test_utils.h @@ -6,6 +6,9 @@ #define EXPECT_AS_STRING(actual, expected) \ EXPECT_EQ(sourcemeta::core::to_string(actual), expected) +#define EXPECT_SYMBOL(actual, ...) \ + EXPECT_EQ(actual, (std::vector{__VA_ARGS__})) + #define EXPECT_IR_SCALAR(result, index, scalar_type, expected_pointer) \ EXPECT_TRUE( \ std::holds_alternative(result.at(index))) \