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

[FEATURE]: On Dart with Freezed, be able to prevent conflicts with nested types on JSON Schema #2660

Open
polvallverdu opened this issue Oct 25, 2024 · 4 comments · May be fixed by #2664
Open

Comments

@polvallverdu
Copy link

Context (Input, Language)

Input Format: Json Schema
Output Language: Dart Freezed

Description

Currently generating Freezed classes for Dart defines nested objects with their literal name, which may cause conflicts if multiple objects are needed. Some stuff is being done if it conflicts with it's own schema, but not for other schemas.

Current Behaviour / Output

bunx quicktype --lang dart --src-lang schema -t Fasfasfsa --just-types --use-freezed
{
  "type": "object",
  "properties": {
    "hello": {
      "type": "string"
    },
    "works": {
      "type": "object",
      "properties": {
        "yes": {
          "type": "boolean"
        },
        "no": {
          "type": "boolean"
        }
      },
      "required": ["yes", "no"],
      "additionalProperties": false
    }
  },
  "required": ["hello", "works"],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
@freezed
class Fasfasfsa with _$Fasfasfsa {
    const factory Fasfasfsa({
        required String hello,
        required Works works,
    }) = _Fasfasfsa;
}

@freezed
class Works with _$Works {
    const factory Works({
        required bool no,
        required bool yes,
    }) = _Works;
}

Proposed Behaviour / Output

bunx quicktype --lang dart --src-lang schema -t Fasfasfsa --just-types --use-freezed
{
  "type": "object",
  "properties": {
    "hello": {
      "type": "string"
    },
    "works": {
      "type": "object",
      "properties": {
        "yes": {
          "type": "boolean"
        },
        "no": {
          "type": "boolean"
        }
      },
      "required": ["yes", "no"],
      "additionalProperties": false
    }
  },
  "required": ["hello", "works"],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
@freezed
class Fasfasfsa with _$Fasfasfsa {
    const factory Fasfasfsa({
        required String hello,
        required Fasfasfsa_Works works,
    }) = _Fasfasfsa;
}

@freezed
class Fasfasfsa_Works with _$Fasfasfsa_Works {
    const factory Fasfasfsa_Works({
        required bool no,
        required bool yes,
    }) = _Fasfasfsa_Works;
}

Solution

Somehow relate nested objects with their parents, to prevent conflicts.

Alternatives

Having the ability to control those names somehow, without needing interactivity. (kinda impossible)

@polvallverdu polvallverdu changed the title [FEATURE]: feature description here [FEATURE]: On Dart with Freezed, be able to prevent conflicts with nested types on JSON Schema Oct 25, 2024
polvallverdu added a commit to wosherco/quicktype that referenced this issue Nov 19, 2024
Fixes glideapps#2660

Modify the naming convention for nested objects in Dart Freezed class generation to include the parent object name.

* **DartRenderer.ts**
  - Update `dartType` method to include the parent object name for nested objects.
  - Adjust `emitFreezedClassDefinition` and `emitClassDefinition` methods to handle the new naming convention for nested objects.
  - Modify `_emitVariables` method to use the new naming convention for nested objects.

* **parser.dart**
  - Add tests for the new functionality to ensure nested objects include the parent object name.
  - Implement `testNestedObjectNaming` function to validate the new naming convention for nested objects.

TODO:

- [ ] Make sure tests work
- [ ] Make sure this offers backwards compatibility

---

For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/glideapps/quicktype/issues/2660?shareId=XXXX-XXXX-XXXX-XXXX).
@polvallverdu polvallverdu linked a pull request Nov 19, 2024 that will close this issue
@DmitryFrontDev
Copy link

I know the issue in your project and I will bring you good solutions if you can reach out me.

@himay123
Copy link

Hello @polvallverdu

I have fixed dart freezed issue in my local system
Can you please help me with do testing

@himay123
Copy link

himay123 commented Nov 19, 2024

Screenshot from 2024-11-20 01-38-16

check output

@polvallverdu
Copy link
Author

Screenshot from 2024-11-20 01-38-16

check output

I don't see what you fixed.

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

Successfully merging a pull request may close this issue.

3 participants