Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

json schema convert #30

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

json schema convert #30

wants to merge 2 commits into from

Conversation

ychung2813
Copy link
Contributor

json-schema-to-openapi-schema의 converter의 대체

@ychung2813 ychung2813 self-assigned this Jun 28, 2023
};

return convertType(def, commonSchema);
}; No newline at end of file

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code patch appears to be a TypeScript module that contains functions for converting JSON schema definitions into OpenAPIv3 schemas. Here are some observations and suggestions for improvement:

  1. In the isDefinitionBoolean function, the return statement can be simplified to return defOrBool === true || defOrBool === false.
  2. The use of convertDefinition function within the createItem and convertProperties functions suggests that convertDefinition is a key function in this module. It would be helpful to comment or document its purpose and behavior.
  3. It's recommended to provide inline comments or documentation explaining the purpose and functionality of each function and block of code. This will make it easier for others (including your future self) to understand the code.
  4. Consider validating and handling possible edge cases and error scenarios. For example, in the covertToStringSchemaObject function, an error is thrown for an invalid regular expression pattern, but there's no error handling or message provided for the caller to understand the issue.
  5. Ensure that the imported modules (debug, typescript-json-schema, and openapi-types) are installed and compatible with the current project configuration.
  6. Check if there are any dependencies or required setup/initialization steps not included in this code patch.
  7. Run the code through a linter (such as ESLint) and fix any reported issues for consistent coding style and formatting.

Overall, a more detailed review would require a deeper understanding of the specific requirements and context in which this code is used.

@@ -141,6 +140,6 @@ export const convertToOpenapiSchemas = async (
jsonSchemas: TJS.Definition,
): Promise<SchemaMapping> => {
const convertedJsonSchemas = convertToOpenapiTypes(jsonSchemas);
const openapiSchemas = await convert(convertedJsonSchemas) as SchemaMapping;
const openapiSchemas = await convertDefinition(convertedJsonSchemas) as SchemaMapping;
return escapeSchemaNames(openapiSchemas);
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a couple of changes in the code patch:

  1. The import statement for convert has been commented out, and a new import statement for convertDefinition from './jsonSchemaConverter' has been added.

  2. The function convertToOpenapiSchemas has been modified to use convertDefinition instead of convert.

Assuming that the convertDefinition function is implemented correctly, there don't seem to be any bug risks in this code patch. However, without seeing the implementation of convertDefinition, it's difficult to provide improvement suggestions or identify potential bugs in that specific function.

properties: {
[name: string]: Schema,
},
} No newline at end of file

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code patch you provided seems to be adding new interfaces for schema objects in a TypeScript file. Here are some suggestions and improvements:

  1. It's generally good practice to include comments or documentation to describe the purpose and usage of each interface.
  2. Consider providing default values or additional properties for the schema interfaces, such as description, required, or enum if they are applicable to your use case.
  3. Ensure that the imported OpenAPIV3 is coming from a reliable source and matches your intended usage.

Overall, the provided code patch appears to define new schema interfaces for different types (number, string, integer, boolean, and object) based on the OpenAPI specification. However, without further context, it is challenging to identify any specific bug risks.

if(t!== undefined) return false;
}
return true;
} No newline at end of file

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The provided code patch consists of several functions related to validating and identifying schema objects in an OpenAPI context. Here's a brief code review:

  1. isDefinitionBoolean(defOrBool: DefinitionOrBoolean): defOrBool is boolean => {...}:

    • The function checks if the input parameter defOrBool is a boolean.
    • It returns true if defOrBool is either true or false, indicating that it's a boolean value.
  2. isReferenceObject(schema: Schema): schema is OpenAPIV3.ReferenceObject => {...}:

    • The function checks if the input schema object has a $ref property, indicating it's a reference object.
    • It returns true if the schema object has a $ref property, indicating it's a reference object.
  3. isIntegerSchemaObject(schema: Schema): schema is IntegerSchemaObject => {...}:

    • The function checks if the input schema object represents an integer.
    • It returns true if the schema object is not a reference object and has a type set to 'integer'.
  4. isNumberSchemaObject(schema: Schema): schema is NumberSchemaObject => {...}:

    • The function checks if the input schema object represents a number.
    • It returns true if the schema object is not a reference object and has a type set to 'number'.
  5. isBooleanSchemaObject(schema: Schema): schema is BooleanSchemaObject => {...}:

    • The function checks if the input schema object represents a boolean.
    • It returns true if the schema object is not a reference object and has a type set to 'boolean'.
  6. isStringSchemaObject(schema: Schema): schema is StringSchemaObject => {...}:

    • The function checks if the input schema object represents a string.
    • It returns true if the schema object is not a reference object and has a type set to 'string'.
  7. isObjectSchemaObject(schema: Schema): schema is ObjectSchemaObject => {...}:

    • The function checks if the input schema object represents an object with properties defined.
    • It returns true if the schema object is not a reference object, has a type set to 'object', and has defined properties.
  8. isArraySchemaObject(schema: OpenAPIV3.SchemaObject): schema is OpenAPIV3.ArraySchemaObject => {...}:

    • The function checks if the input schema object represents an array with items defined.
    • It returns true if the schema object is not a reference object, has a type set to 'array', and has defined items.
  9. isNullableObject(schema: Schema) => {...}:

    • The function checks if the input schema object is nullable (contains only a nullable property).
    • It returns true if the schema object is not a reference object and has only one property (nullable) set to true.
  10. isEmptyObject(obj: Object) => {...}:

    • The function checks if the input object is empty (has no own properties).
    • It returns true if the object has zero own properties, and false if it has at least one non-undefined own property.

In terms of improvements, here are a few suggestions:

  • Consistent formatting: Ensure consistent indentation, spacing, and placement of curly braces for better code readability.
  • Type annotations: Consider adding explicit type annotations to function parameters and return values to enhance code clarity and maintainability.
  • Unit tests: Create unit tests for these functions to verify their correctness and evaluate edge cases.

Overall, the code patch provides utility functions to check various conditions related to schema objects in an OpenAPI context. With the suggested improvements, the code can be more readable and maintainable.

};

return convertType(def, commonSchema);
}; No newline at end of file

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code patch appears to be a TypeScript module that contains functions for converting JSON schema definitions into OpenAPI (formerly known as Swagger) specifications. Here are some observations and suggestions:

  1. Consistent Naming: It's a good practice to use consistent naming conventions throughout your codebase. For example, the convertToArraySchemaObject function is misspelled as covertToArraySchemaObject.

  2. Code Formatting: The code seems to have inconsistent indentation and formatting. Consistent indentation makes the code more readable. Consider using a linter or formatter tool, such as ESLint, to automatically enforce consistent formatting.

  3. Type Annotations: TypeScript strongly recommends adding type annotations to improve code clarity and catch potential type-related bugs. Review the code and add appropriate type annotations to function parameters and return values.

  4. Error Handling: Some functions throw errors, but there is no error handling logic present. You may want to consider adding try-catch blocks or error handling mechanisms to handle exceptions and provide meaningful feedback to users.

  5. Function Names: Consider using more descriptive names for functions and variables. For example, createItem could be renamed to createItemsSchema, and commonProperty could be renamed to extractCommonProperties.

  6. Single Responsibility Principle: Some functions seem to be performing multiple tasks. It's often recommended to follow the Single Responsibility Principle and keep functions focused on one specific task or responsibility. Consider refactoring and breaking down larger functions into smaller, more focused ones.

  7. Unit Tests: Having comprehensive unit tests for the code will help ensure its correctness and maintainability. Consider writing unit tests for each function to cover different scenarios and edge cases.

  8. Linting Rules: The code includes an eslint-disable comment at the top. Instead of disabling all linting rules, it's usually better to selectively disable specific rules or address the underlying issues causing the linting errors or warnings.

  9. Code Documentation: Consider adding code comments to explain the purpose, usage, and behavior of functions, especially complex ones like convertSchemaObjectByType and convertCombinedProperty. Clear documentation will assist developers in understanding and maintaining the codebase.

  10. Avoid Unused Imports: Make sure all imported modules and dependencies are being used in the code. Unused imports can be removed to enhance code cleanliness.

These suggestions aim to improve code readability, maintainability, and minimize potential bugs. It's recommended to review and implement them as appropriate, considering the context and requirements of your project.

@@ -141,6 +140,6 @@ export const convertToOpenapiSchemas = async (
jsonSchemas: TJS.Definition,
): Promise<SchemaMapping> => {
const convertedJsonSchemas = convertToOpenapiTypes(jsonSchemas);
const openapiSchemas = await convert(convertedJsonSchemas) as SchemaMapping;
const openapiSchemas = await convertDefinition(convertedJsonSchemas) as SchemaMapping;
return escapeSchemaNames(openapiSchemas);
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review:

  1. Unused Import: The import statement for json-schema-to-openapi-schema is commented out with a TODO comment indicating that its necessity should be checked. To improve the code, you can remove this unused import statement.

  2. Import Modification: A new import statement for convertDefinition from './jsonSchemaConverter' has been added. It's important to review the implementation of convertDefinition and ensure it provides the required functionality. Verify that the file './jsonSchemaConverter' exists and contains the appropriate code.

  3. Function Improvement: The function isSchemaNullableOnly receives an argument s of type any, which may not provide sufficient type safety. Consider updating the function signature to specify a more specific type if possible.

  4. Function Renaming: The function convertToOpenapiSchemas accepts an argument named jsonSchemas, but the implementation actually converts the given jsonSchemas to OpenAPI types first using convertToOpenapiTypes. Consider renaming the function to reflect this behavior more accurately.

  5. Type Assertion: In the line const openapiSchemas = await convertDefinition(convertedJsonSchemas) as SchemaMapping;, there is an assertion (as SchemaMapping) to explicitly cast the result of convertDefinition as SchemaMapping. Ensure that this assertion is correct and valid based on the expected return type of convertDefinition.

Bug Risk Assessment:

Without access to the implementation details of convertDefinition and related functions, it's difficult to identify potential bug risks in your code patch. It's crucial to thoroughly test the modified code and review the implementation of the imported functions (convertDefinition, escapeSchemaNames, etc.) to ensure their correctness.

Improvement Suggestions:

  1. Remove unused imports and code to keep the codebase clean and avoid confusion.

  2. Consider providing more specific types for function arguments and variables to enhance type safety and maintainability.

  3. Ensure proper error handling and use appropriate error messages or logging mechanisms to improve debugging in case of failures.

  4. Conduct rigorous testing, including edge cases and different input scenarios, to ensure the modified code functions correctly.

  5. Consider using a linter or static code analysis tool to catch potential issues and adhere to coding best practices.

properties: {
[name: string]: Schema,
},
} No newline at end of file

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code patch appears to be adding a few new interface definitions for specific types of schema objects. Here's a brief review:

  1. The NumberSchemaObject interface specifies a schema object with a type of 'number'.
  2. The StringSchemaObject interface specifies a schema object with a type of 'string'.
  3. The IntegerSchemaObject interface specifies a schema object with a type of 'integer'.
  4. The BooleanSchemaObject interface specifies a schema object with a type of 'boolean'.
  5. The ObjectSchemaObject interface specifies a schema object with a type of 'object' and includes properties, which are defined as a map of property names to schemas.

Overall, the code additions seem straightforward and do not pose any bug risks based on the provided information. However, since it is just a code snippet, it's difficult to provide further improvement suggestions without understanding the context in which these interfaces are used.

if(t!== undefined) return false;
}
return true;
} No newline at end of file

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This code patch appears to be a utility module that provides several functions for checking the type and properties of different schema objects. Here are some observations and suggestions for improvement:

  1. The import statements at the beginning are not directly related to the code in this module. It's advisable to only include necessary imports.

  2. The variable and parameter names could be more descriptive to improve code readability.

  3. The isDefinitionBoolean function can be simplified by returning the result of the comparison directly: return defOrBool === true || defOrBool === false;.

  4. In the isReferenceObject function, instead of using Object(schema).hasOwnProperty('$ref'), you can use 'ref' in schema to check if the $ref property exists.

  5. Consider using strict equality (===) instead of loose equality (==) in the type checks (e.g., schema.type === 'integer').

  6. Some of the functions (e.g., isIntegerSchemaObject) could benefit from early returns or simplification of the conditions. For example:

    • Instead of checking if isReferenceObject(schema) and returning false, you can negate the expression: !isReferenceObject(schema).
    • Instead of (schema.type !== undefined && schema.type === 'boolean'), you can simplify it to schema.type === 'boolean'.
  7. In the isArraySchemaObject function, the parameter type annotation should be corrected to OpenAPIV3.ArraySchemaObject.

  8. The isNullableObject function could benefit from early returns and simplified conditions. For example:

    • Instead of (Object.keys(schema).length === 1 && schema.nullable === true), you can simply return schema.nullable === true or schema.nullable.
  9. The isEmptyObject function implementation is correct, but it would be good to add a comment for better code understanding.

  10. It's recommended to include a newline at the end of the file for consistency and to comply with common conventions.

Overall, the code appears to be functional, but there are opportunities to simplify some conditions and improve code readability.

};

return convertType(def, commonSchema);
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall, the code appears to be a TypeScript module that converts TypeScript JSON schema definitions into OpenAPIv3 schema objects. Here's a brief review of the code:

  1. The code follows an object-oriented approach with functions and constants defined using const and export. It provides utility functions such as isNullableObject, isObjectSchemaObject, isReferenceObject, etc., for schema validation and conversion.

  2. There are several helper functions like createItem, convertItems, convertProperties, convertSchemaArray, etc., that handle specific conversion scenarios based on the given schema properties.

  3. The code uses type guards (defOrBool is boolean) and type checking to ensure proper handling of different cases.

  4. The convertType function determines the appropriate schema type based on the provided TypeScript JSON schema definition. It handles multiple types, nullable types, and reference objects.

  5. The convertDefinition function is the entry point for converting a schema definition. It invokes other helper functions to convert different parts of the schema and combines them into a final OpenAPIv3 schema object.

Possible bug risks or improvement suggestions:

  1. Some of the functions lack proper error handling. For example, in covertToArraySchemaObject, if convertedItems is not defined, it throws an error but doesn't provide any context for debugging. Consider adding more meaningful error messages or exception handling.

  2. The code relies on some external dependencies such as debug, openapi-types, and typescript-json-schema. Ensure that these dependencies are correctly installed and compatible with the code.

  3. Although the code looks well-structured, it would benefit from additional comments explaining the purpose and functionality of each major section or function.

  4. Since this is only a code snippet and doesn't include the usage context, it's hard to assess the overall correctness and completeness of the implementation. Make sure to test the code with various TypeScript JSON schema definitions to ensure it produces the expected OpenAPIv3 schema objects.

Note: It's recommended to follow best practices for error handling, testing, and maintaining dependencies in your specific use case.

@@ -141,6 +140,6 @@ export const convertToOpenapiSchemas = async (
jsonSchemas: TJS.Definition,
): Promise<SchemaMapping> => {
const convertedJsonSchemas = convertToOpenapiTypes(jsonSchemas);
const openapiSchemas = await convert(convertedJsonSchemas) as SchemaMapping;
const openapiSchemas = convertDefinition(convertedJsonSchemas) as SchemaMapping;
return escapeSchemaNames(openapiSchemas);
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on the provided code patch, here is a brief code review:

  1. The import statement for convert from 'json-schema-to-openapi-schema' has been commented out. This suggests that the necessity of this import is being questioned and needs further investigation. Make sure to review whether this import is indeed necessary for the code to work correctly.

  2. There is a new import statement for convertDefinition from './jsonSchemaConverter'. Ensure that this import is valid and points to the correct module or file.

  3. The function isSchemaNullableOnly appears unchanged and doesn't raise any immediate concerns.

  4. The function convertToOpenapiSchemas receives a parameter named jsonSchemas. It's important to ensure that the input is of type TJS.Definition as expected.

  5. The array convertedJsonSchemas is created using the function convertToOpenapiTypes. Review this function and verify that it correctly converts the jsonSchemas into the desired format for further processing.

  6. The variable openapiSchemas is previously assigned the result of convert(convertedJsonSchemas). With the code patch, it is now assigned the result of convertDefinition(convertedJsonSchemas). Confirm that the replacement function convertDefinition exists and performs the desired conversion.

  7. Finally, the function escapeSchemaNames is applied to openapiSchemas before it's returned. Ensure that this function is properly implemented and handles schema name escaping correctly.

Overall, review the changes introduced by the code patch carefully to ensure the new imports, function calls, and conversions are correct and do not introduce any bugs.

properties: {
[name: string]: Schema,
},
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code patch you provided appears to be adding several interfaces (NumberSchemaObject, StringSchemaObject, IntegerSchemaObject, BooleanSchemaObject, and ObjectSchemaObject) that extend the OpenAPIV3.NonArraySchemaObject interface. These interfaces define additional properties for specific types of schema objects.

There are no obvious bug risks with this code patch. It seems to be adding more specific type definitions to enhance the codebase and provide better type checking.

However, without seeing the context in which these interfaces are used and the overall code structure, it is challenging to provide further improvement suggestions. It would be helpful for a more comprehensive review if you could provide more information about how these interfaces are used and any specific concerns or requirements you have.

}

return Object.values(obj).every((v) => v === undefined);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This code patch appears to define several utility functions for checking the schema type and properties. It seems to be part of a larger project that involves schema validation or processing.

Here are some observations regarding potential bug risks and improvements:

  1. In the isDefinitionBoolean function, the arrow function's return type should be explicitly stated as boolean instead of defOrBool is boolean.
  2. The isObjectSchemaObject function checks for the existence of schema.properties, assuming it's an object type. However, this doesn't cover cases where the properties are defined using the allOf, anyOf, or oneOf keywords.
  3. Consider providing more specific types for the schema parameter in each function signature. Currently, they all use the generic Schema type from 'generator/types', which could potentially allow schemas with incompatible properties.
  4. The function isEmptyObject accepts obj as a parameter, but its type is specified as Object. It would be better to use a more precise type, such as Record<string, unknown>, to avoid potential confusion.
  5. The code could benefit from additional comments explaining the rationale behind certain decisions or describing the expected behavior of each function.

Overall, the code appears to be well-structured and readable, but these suggestions aim to improve clarity, type safety, and potential edge case handling.

};

return convertType(def, commonSchema);
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall, the code appears to be a TypeScript module for converting TypeScript JSON schema objects into OpenAPIv3 schema objects. Here are some suggestions and potential areas of improvement:

  1. Code Formatting: Ensure consistent code formatting throughout the file to improve readability. Consider using an automatic code formatter or adhering to a style guide.

  2. Naming Conventions: Follow common naming conventions for variables, functions, and constants. For example, use camelCase for variable and function names, and use uppercase for constant names.

  3. Dependency Management: Make sure to manage dependencies properly, preferably using a dependency management tool like npm or yarn. Check if the required dependencies are already installed.

  4. Error Handling: Add appropriate error handling and validation checks in functions like covertToStringSchemaObject to handle invalid regular expressions.

  5. Documentation: Include inline comments explaining the purpose and functionality of complex functions, especially where code logic isn't immediately obvious.

  6. Consistency: Ensure consistent usage of brackets and indentation throughout the codebase to enhance readability and maintainability.

  7. Testing & Integration: Consider adding unit tests to verify the correctness of the conversion functions. Additionally, integrate the module into a larger project (if applicable) and perform end-to-end testing to validate its functionality.

  8. Review Origin: Consider reviewing the original source or context of this code patch to better understand its intended use case and any specific requirements it may have.

Remember to thoroughly test the code and adapt it to your specific needs before deploying it to a production environment.

@@ -141,6 +140,6 @@ export const convertToOpenapiSchemas = async (
jsonSchemas: TJS.Definition,
): Promise<SchemaMapping> => {
const convertedJsonSchemas = convertToOpenapiTypes(jsonSchemas);
const openapiSchemas = await convert(convertedJsonSchemas) as SchemaMapping;
const openapiSchemas = convertDefinition(convertedJsonSchemas) as SchemaMapping;
return escapeSchemaNames(openapiSchemas);
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code patch includes the following changes:

  1. The import statement for 'json-schema-to-openapi-schema' has been removed.
  2. An import statement for a function called 'convertDefinition' from './jsonSchemaConverter' has been added.

Suggestions and bug risks:

  1. It is mentioned in a comment that the need for the removed import ('json-schema-to-openapi-schema') should be checked if it is indeed necessary. This suggests that you should review the code and ensure that the removal of this import does not introduce any unintended consequences or break functionality.

Improvement suggestions:

  1. Since we don't have visibility into the implementation of the 'convertDefinition' function, it's challenging to provide specific improvement suggestions. However, here are some general suggestions to consider:
    • Review the implementation of the 'convertDefinition' function to ensure it performs the required conversion correctly and efficiently.
    • Consider adding comments or documentation explaining the purpose and usage of the 'convertDefinition' function.
    • If applicable, include appropriate error handling and validation within the 'convertDefinition' function.
    • Consider writing unit tests for the 'convertDefinition' function to verify its correctness.

Please keep in mind that without complete context and knowledge of the project, it's difficult to provide an extensive review. It is recommended to thoroughly test the modified code and evaluate its impact on the overall system.

properties: {
[name: string]: Schema,
},
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code patch introduces several new interfaces that extend the OpenAPIV3.NonArraySchemaObject interface with additional properties. Here's a brief review:

  1. The NumberSchemaObject interface represents a schema for numbers.
  2. The StringSchemaObject interface represents a schema for strings.
  3. The IntegerSchemaObject interface represents a schema for integer numbers.
  4. The BooleanSchemaObject interface represents a schema for boolean values.
  5. The ObjectSchemaObject interface represents a schema for objects and includes a properties field to define the object's properties using key-value pairs.

Overall, the code patch seems fine. It introduces specific schema interfaces for common data types, which can help in type checking and improving code readability. However, without further context or implementation details, it is difficult to identify any bug risks or provide further improvement suggestions.

}

return Object.values(obj).every((v) => v === undefined);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code patch provided appears to define several utility functions for validating and checking schema objects. Here are some observations and potential improvements:

  1. Imports: Ensure that the imported modules (generator/types, openapi-types, typescript-json-schema) are actually being used in the code. If not, remove the unused imports to maintain cleaner code.

  2. Type Declarations: Confirm that the type declarations (BooleanSchemaObject, IntegerSchemaObject, etc.) from the import statements align with the actual types within the project. Mismatched or outdated type declarations may cause issues.

  3. Error Handling: Consider adding error handling, such as throwing explicit errors or returning meaningful error messages when encountering unexpected data or situations.

  4. Naming Conventions: Follow consistent naming conventions throughout the codebase to enhance code readability and maintainability. For example, function names like isReferenceObject could be improved to be more descriptive and follow a consistent style ("is" prefix).

  5. Comments: Provide explanatory comments where necessary to guide future developers and clarify the purpose, assumptions, or functionality of specific sections of the code.

Overall, without additional context on how these functions are being used or the larger project structure, it is challenging to identify specific bug risks or potential areas for improvement. Carefully review the integration of these functions into your codebase and conduct thorough testing to ensure proper functionality.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants