{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":54443780,"defaultBranch":"master","name":"json-schema-to-typescript","ownerLogin":"bcherny","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2016-03-22T03:56:58.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1761758?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1719321848.0","currentOid":""},"activityList":{"items":[{"before":"cb99ce49bc1184aa7dc09362ac9d1d13c78180ca","after":"23ce160d000e1b9240a2f454dc2bd47e0ca7c9de","ref":"refs/heads/master","pushedAt":"2024-08-21T03:13:43.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"15.0.1","shortMessageHtmlLink":"15.0.1"}},{"before":"17dc5ede8f417b4ab7d438a4bfdfb7f94778d1a7","after":"cb99ce49bc1184aa7dc09362ac9d1d13c78180ca","ref":"refs/heads/master","pushedAt":"2024-08-20T21:49:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"fix build (#621)","shortMessageHtmlLink":"fix build (#621)"}},{"before":"7c6bad43e91d1a2ad3467165686c6d2818806904","after":"17dc5ede8f417b4ab7d438a4bfdfb7f94778d1a7","ref":"refs/heads/master","pushedAt":"2024-08-17T18:54:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"Remove unused dependency (#617)","shortMessageHtmlLink":"Remove unused dependency (#617)"}},{"before":"402e18812208fa7489cd5f70924e51d1497befcb","after":"7c6bad43e91d1a2ad3467165686c6d2818806904","ref":"refs/heads/master","pushedAt":"2024-08-12T18:31:30.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"add test case for #613","shortMessageHtmlLink":"add test case for #613"}},{"before":"62cc052b31a997fff6fe13516a715091565985df","after":"402e18812208fa7489cd5f70924e51d1497befcb","ref":"refs/heads/master","pushedAt":"2024-07-22T10:35:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"v15.0.0","shortMessageHtmlLink":"v15.0.0"}},{"before":"e0a822f5bc171600ef2e828722129eba2fc632f4","after":"62cc052b31a997fff6fe13516a715091565985df","ref":"refs/heads/master","pushedAt":"2024-07-22T10:32:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"Intersection schema generation is order-dependent (#603)\n\n* Add new test cases.\r\n\r\n* Intersection schema generation is order-dependent\r\n\r\n- Given a schema that contains a named definition (`B`),\r\n- And that named definition is referenced in multiple locations,\r\n- And that named schema is also an intersection type (`allOf` in this\r\n example),\r\n\r\nThen when parsed, the generated TypeScript will contain the correct\r\nreference only for the _first_ location in which the named schema is\r\nencountered, during a depth-first traversal.\r\n\r\nSubsequent references to the same schema will be generated as though\r\nthey were only the intersection type, and not the named schema.\r\n\r\nExample\r\n\r\nGiven the following schema:\r\n\r\n```yaml\r\n$id: Intersection\r\ntype: object\r\noneOf:\r\n - $ref: '#/definitions/A'\r\n - $ref: '#/definitions/B'\r\n\r\ndefinitions:\r\n A:\r\n type: object\r\n additionalProperties: false\r\n allOf: [$ref: '#/definitions/Base']\r\n properties:\r\n b: {$ref: '#/definitions/B'}\r\n B:\r\n type: object\r\n additionalProperties: false,\r\n allOf: [$ref: '#/definitions/Base']\r\n properties:\r\n x: {type: string}\r\n Base:\r\n type: object\r\n additionalProperties: false,\r\n properties:\r\n y: {type: string}\r\n```\r\n\r\nThe current resulting TypeScript will be (comments adjusted\r\nfor clarity):\r\n\r\n```ts\r\n// Incorrect: should be `type Intersection = A | B`\r\n// Note that the B type at this location is the _second_ reference to\r\n// B during a depth-first traversal.\r\nexport type Intersection = A | B1;\r\nexport type A = A1 & {\r\n b?: B;\r\n};\r\nexport type A1 = Base;\r\nexport type B = B1 & {\r\n x?: string;\r\n};\r\nexport type B1 = Base;\r\n\r\nexport interface Base {\r\n y?: string;\r\n}\r\n```\r\n\r\nRoot Cause\r\n\r\nIn `parser.ts`, [lines 57 - 75][1], when schema that matches multiple\r\n\"types\" is encountered, the parser generates a new `ALL_OF` intersection\r\nschema to contain each sub-type, then adds each sub-type to the new\r\n`ALL_OF` schema.\r\n\r\nEach sub-type is then parsed sequentially. During this process,\r\n`maybeStripNameHints` is called, which mutates the schema by removing\r\nthe `$id`, `description`, and `name` properties.\r\n\r\nNotably, these properties are used by `typesOfSchema` to detect the\r\n`NAMED_SCHEMA` type. As a result, this schema object will never again be\r\ndetected as a `NAMED_SCHEMA` type.\r\n\r\nTherefore, the _first_ instance of the schema object is correctly\r\nhandled as an intersection schema **and** a named schema, but all\r\nsubsequent instances are treated as though they are **only** an\r\nintersection schema.\r\n\r\nProposed Solution\r\n\r\n- The call to `typesOfSchema` is moved from `parser.ts` to\r\n `normalizer.ts`, with the goal of avoiding confusion due to a mutated\r\n schema object. The resulting list of schema types is persisted on the\r\n schema using a newly-introduced `Types` symbol.\r\n\r\n- The generated intersection schema is _also_ moved from `parser.ts` to\r\n `normalizer.ts`. This is because it is advantageous to let the\r\n generated intersection schema participate in the caching mechanism\r\n (which it could not previously do, since it was generated dynamically\r\n during each encounter). Without this, multiple instances of the same\r\n schema are generated.\r\n\r\nRelated Issues\r\n\r\n- https://github.com/bcherny/json-schema-to-typescript/issues/597\r\n\r\n[1]: https://github.com/bcherny/json-schema-to-typescript/blob/31993def993b610ba238d3024260129e31ddc371/src/parser.ts#L57-L75 'parser.ts, lines 57 - 75'\r\n\r\n* Additionally hoist `allOf` behavior.\r\n\r\n* Traverse the generated intersection schema.","shortMessageHtmlLink":"Intersection schema generation is order-dependent (#603)"}},{"before":"8a4d9132eec337082ec76572972dcd67fdc6a9c1","after":"8b63de546b3092cd72b4a7de436904806f8e8c63","ref":"refs/heads/preserve-directory-structure","pushedAt":"2024-06-28T02:05:54.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"add normalizer rule to transform type arrays to oneOf","shortMessageHtmlLink":"add normalizer rule to transform type arrays to oneOf"}},{"before":"6908266da6023d9bc7f86472b8bdc23ed71933f6","after":"8a4d9132eec337082ec76572972dcd67fdc6a9c1","ref":"refs/heads/preserve-directory-structure","pushedAt":"2024-06-26T09:01:54.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"replace legacy mechanism for looking up key name from definitions","shortMessageHtmlLink":"replace legacy mechanism for looking up key name from definitions"}},{"before":"6fc74b3fc38cc13f0c2414c01de90e5221d3fefc","after":"e0a822f5bc171600ef2e828722129eba2fc632f4","ref":"refs/heads/master","pushedAt":"2024-06-26T09:00:26.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"clean up types for isSchemaLike","shortMessageHtmlLink":"clean up types for isSchemaLike"}},{"before":"e0a7c9ca554595ebe720a4c95697c8a925dd7b4e","after":"6908266da6023d9bc7f86472b8bdc23ed71933f6","ref":"refs/heads/preserve-directory-structure","pushedAt":"2024-06-26T08:52:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"replace legacy mechanism for looking up key name from definitions","shortMessageHtmlLink":"replace legacy mechanism for looking up key name from definitions"}},{"before":"44793a495672e186ee186f3bd0755934e740c69e","after":"e0a7c9ca554595ebe720a4c95697c8a925dd7b4e","ref":"refs/heads/preserve-directory-structure","pushedAt":"2024-06-25T14:56:39.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"replace legacy mechanism for looking up key name from definitions","shortMessageHtmlLink":"replace legacy mechanism for looking up key name from definitions"}},{"before":"ca283accf795f229423e7bbef0a74fbbb81fb575","after":"44793a495672e186ee186f3bd0755934e740c69e","ref":"refs/heads/preserve-directory-structure","pushedAt":"2024-06-25T13:56:12.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"[1/x] generalize linker to annotator","shortMessageHtmlLink":"[1/x] generalize linker to annotator"}},{"before":"3e2e1e93e565d63c378121b3d77ff1cb3075bc45","after":"6fc74b3fc38cc13f0c2414c01de90e5221d3fefc","ref":"refs/heads/master","pushedAt":"2024-06-25T13:30:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"v14.1.0","shortMessageHtmlLink":"v14.1.0"}},{"before":"74d61262715ba13279a32ab8cb45601bc89176fe","after":"3e2e1e93e565d63c378121b3d77ff1cb3075bc45","ref":"refs/heads/master","pushedAt":"2024-06-25T13:29:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"Add option to generate TS string enums (#578)\n\n* Add option to generate TS string enums\r\n\r\n* Added e2e test for --inferStringEnumKeysFromValues","shortMessageHtmlLink":"Add option to generate TS string enums (#578)"}},{"before":null,"after":"ca283accf795f229423e7bbef0a74fbbb81fb575","ref":"refs/heads/preserve-directory-structure","pushedAt":"2024-06-25T13:24:08.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"[1/x] generalize linker to annotator","shortMessageHtmlLink":"[1/x] generalize linker to annotator"}},{"before":null,"after":"18e279bd001698e5a51055cad344b77201ebeeb9","ref":"refs/heads/next","pushedAt":"2024-06-25T12:38:00.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"[Breaking] Remove declareExternallyReferenced option","shortMessageHtmlLink":"[Breaking] Remove declareExternallyReferenced option"}},{"before":"542eca0fd4cc7d4257424d93b245bee045345ead","after":"b724360efe66bc24483f8a2483ba9fba47464d28","ref":"refs/heads/fix-declare-externally-referenced","pushedAt":"2024-06-25T10:00:08.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"bugfix: make declareExternallyReferenced option work consistently","shortMessageHtmlLink":"bugfix: make declareExternallyReferenced option work consistently"}},{"before":"31993def993b610ba238d3024260129e31ddc371","after":"74d61262715ba13279a32ab8cb45601bc89176fe","ref":"refs/heads/master","pushedAt":"2024-06-25T09:53:11.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"[chore] Clean up types","shortMessageHtmlLink":"[chore] Clean up types"}},{"before":"4c1bd1f7a7f4639f3be869bf4270b5b8655ed00c","after":"542eca0fd4cc7d4257424d93b245bee045345ead","ref":"refs/heads/fix-declare-externally-referenced","pushedAt":"2024-06-25T09:45:48.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"bugfix: make declareExternallyReferenced option work consistently","shortMessageHtmlLink":"bugfix: make declareExternallyReferenced option work consistently"}},{"before":null,"after":"4c1bd1f7a7f4639f3be869bf4270b5b8655ed00c","ref":"refs/heads/fix-declare-externally-referenced","pushedAt":"2024-06-25T09:42:59.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"bugfix: make declareExternallyReferenced option work consistently","shortMessageHtmlLink":"bugfix: make declareExternallyReferenced option work consistently"}},{"before":"6c9692492f4e496fd067b0e266dd0ce8eae69419","after":"82124c13cd5a66694eb29c4dc673006ba4553d36","ref":"refs/heads/fix-named-refs-2","pushedAt":"2024-06-25T09:18:24.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"bugfix: always generate standalone types for refs","shortMessageHtmlLink":"bugfix: always generate standalone types for refs"}},{"before":null,"after":"6c9692492f4e496fd067b0e266dd0ce8eae69419","ref":"refs/heads/fix-named-refs-2","pushedAt":"2024-06-25T09:13:13.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"bugfix: always generate standalone types for refs","shortMessageHtmlLink":"bugfix: always generate standalone types for refs"}},{"before":"624205eda56ec56f60a26aae1077c473bf14a348","after":null,"ref":"refs/heads/fix-named-refs","pushedAt":"2024-06-25T09:06:48.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"}},{"before":null,"after":"624205eda56ec56f60a26aae1077c473bf14a348","ref":"refs/heads/fix-named-refs","pushedAt":"2024-06-25T09:04:40.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"bugfix: always generate standalone types for refs","shortMessageHtmlLink":"bugfix: always generate standalone types for refs"}},{"before":"db7188d68adf12a252173eca8aeaf84939b3c41f","after":null,"ref":"refs/heads/602","pushedAt":"2024-06-24T10:44:12.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"}},{"before":"4961a56a4d89639297a692e2f97c01f39f83824c","after":"db7188d68adf12a252173eca8aeaf84939b3c41f","ref":"refs/heads/602","pushedAt":"2024-06-24T10:16:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"add normalizer step to simplify intersection+schema types","shortMessageHtmlLink":"add normalizer step to simplify intersection+schema types"}},{"before":"bcbbbd19daa69368df7db3c1d05efb251191044d","after":"4961a56a4d89639297a692e2f97c01f39f83824c","ref":"refs/heads/602","pushedAt":"2024-06-24T10:06:57.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"add normalizer step to simplify intersection+schema types","shortMessageHtmlLink":"add normalizer step to simplify intersection+schema types"}},{"before":"77b23fac29190d2c99ede43881a1bfae446ab61b","after":"bcbbbd19daa69368df7db3c1d05efb251191044d","ref":"refs/heads/602","pushedAt":"2024-06-24T09:42:05.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"add normalizer step to simplify intersection+schema types","shortMessageHtmlLink":"add normalizer step to simplify intersection+schema types"}},{"before":"475e757320fb4902d0d259a26a1e202698e5ef43","after":"77b23fac29190d2c99ede43881a1bfae446ab61b","ref":"refs/heads/602","pushedAt":"2024-06-24T09:36:00.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"add normalizer step to simplify intersection+schema types","shortMessageHtmlLink":"add normalizer step to simplify intersection+schema types"}},{"before":null,"after":"475e757320fb4902d0d259a26a1e202698e5ef43","ref":"refs/heads/602","pushedAt":"2024-06-24T09:33:51.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"bcherny","name":"Boris Cherny","path":"/bcherny","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761758?s=80&v=4"},"commit":{"message":"add normalizer step to simplify intersection+schema types","shortMessageHtmlLink":"add normalizer step to simplify intersection+schema types"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEn7lcjAA","startCursor":null,"endCursor":null}},"title":"Activity ยท bcherny/json-schema-to-typescript"}