{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":381857226,"defaultBranch":"main","name":"typespec","ownerLogin":"microsoft","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2021-06-30T23:29:49.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/6154722?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1720062469.0","currentOid":""},"activityList":{"items":[{"before":"fe6d24aa8e80bd5028797cdcfed6194d90c298de","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-3710-81a2729efc60803830851bd00671b4293b4cd976","pushedAt":"2024-07-04T03:35:02.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"81a2729efc60803830851bd00671b4293b4cd976","after":"fe6d24aa8e80bd5028797cdcfed6194d90c298de","ref":"refs/heads/main","pushedAt":"2024-07-04T03:35:01.000Z","pushType":"merge_queue_merge","commitsCount":1,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"refactor(http-client-csharp): remove unused `Creatable` property (#3710)\n\nthis is a port of https://github.com/Azure/autorest.csharp/pull/4841\n\n---------\n\nCo-authored-by: Mingzhe Huang \nCo-authored-by: Dapeng Zhang ","shortMessageHtmlLink":"refactor(http-client-csharp): remove unused Creatable property (#3710)"}},{"before":null,"after":"fe6d24aa8e80bd5028797cdcfed6194d90c298de","ref":"refs/heads/gh-readonly-queue/main/pr-3710-81a2729efc60803830851bd00671b4293b4cd976","pushedAt":"2024-07-04T03:07:49.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"refactor(http-client-csharp): remove unused `Creatable` property (#3710)\n\nthis is a port of https://github.com/Azure/autorest.csharp/pull/4841\n\n---------\n\nCo-authored-by: Mingzhe Huang \nCo-authored-by: Dapeng Zhang ","shortMessageHtmlLink":"refactor(http-client-csharp): remove unused Creatable property (#3710)"}},{"before":"81a2729efc60803830851bd00671b4293b4cd976","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-3734-e54a7f8fd05bca408f98cd16a6c6036f7cb83cb3","pushedAt":"2024-07-03T21:13:18.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"e54a7f8fd05bca408f98cd16a6c6036f7cb83cb3","after":"81a2729efc60803830851bd00671b4293b4cd976","ref":"refs/heads/main","pushedAt":"2024-07-03T21:13:17.000Z","pushType":"merge_queue_merge","commitsCount":1,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Add JsonModel Create method implementation (#3734)\n\nThis PR adds support for generating the JsonModel Create serialization\nmethod.\n\nSupports https://github.com/microsoft/typespec/issues/3330.","shortMessageHtmlLink":"Add JsonModel Create method implementation (#3734)"}},{"before":null,"after":"81a2729efc60803830851bd00671b4293b4cd976","ref":"refs/heads/gh-readonly-queue/main/pr-3734-e54a7f8fd05bca408f98cd16a6c6036f7cb83cb3","pushedAt":"2024-07-03T20:56:03.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Add JsonModel Create method implementation (#3734)\n\nThis PR adds support for generating the JsonModel Create serialization\nmethod.\n\nSupports https://github.com/microsoft/typespec/issues/3330.","shortMessageHtmlLink":"Add JsonModel Create method implementation (#3734)"}},{"before":"e54a7f8fd05bca408f98cd16a6c6036f7cb83cb3","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-3713-1f8b85cf90c2d3634858b3dc7aef3e2023b65530","pushedAt":"2024-07-03T20:36:31.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"1f8b85cf90c2d3634858b3dc7aef3e2023b65530","after":"e54a7f8fd05bca408f98cd16a6c6036f7cb83cb3","ref":"refs/heads/main","pushedAt":"2024-07-03T20:36:31.000Z","pushType":"merge_queue_merge","commitsCount":1,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"TypeGraph Viewer V2 (#3713)\n\nhttps://cadlplayground.z22.web.core.windows.net/prs/3713/\n\"image\"\nsrc=\"https://github.com/microsoft/typespec/assets/1031227/6adfa086-fc97-4ab8-8557-a5e50a291a57\"","shortMessageHtmlLink":"TypeGraph Viewer V2 (#3713)"}},{"before":null,"after":"e54a7f8fd05bca408f98cd16a6c6036f7cb83cb3","ref":"refs/heads/gh-readonly-queue/main/pr-3713-1f8b85cf90c2d3634858b3dc7aef3e2023b65530","pushedAt":"2024-07-03T20:18:55.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"TypeGraph Viewer V2 (#3713)\n\nhttps://cadlplayground.z22.web.core.windows.net/prs/3713/\n\"image\"\nsrc=\"https://github.com/microsoft/typespec/assets/1031227/6adfa086-fc97-4ab8-8557-a5e50a291a57\"","shortMessageHtmlLink":"TypeGraph Viewer V2 (#3713)"}},{"before":"1f8b85cf90c2d3634858b3dc7aef3e2023b65530","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-3728-b9d935dcf452c4e0e9e3e00cfa7d76fe02e868ba","pushedAt":"2024-07-03T16:52:47.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"b9d935dcf452c4e0e9e3e00cfa7d76fe02e868ba","after":"1f8b85cf90c2d3634858b3dc7aef3e2023b65530","ref":"refs/heads/main","pushedAt":"2024-07-03T16:52:47.000Z","pushType":"merge_queue_merge","commitsCount":1,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Fix the protocol method link to make the test project build properly (#3728)\n\nFixes https://github.com/microsoft/typespec/issues/3726\n\nThis is a temporary solution until we find a better way to solve\nhttps://github.com/microsoft/typespec/issues/3727","shortMessageHtmlLink":"Fix the protocol method link to make the test project build properly (#…"}},{"before":"b9d935dcf452c4e0e9e3e00cfa7d76fe02e868ba","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-3720-e32c011bfb4d32b527a07b8115dadb2457af6654","pushedAt":"2024-07-03T16:46:16.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"e32c011bfb4d32b527a07b8115dadb2457af6654","after":"b9d935dcf452c4e0e9e3e00cfa7d76fe02e868ba","ref":"refs/heads/main","pushedAt":"2024-07-03T16:46:15.000Z","pushType":"merge_queue_merge","commitsCount":1,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Refactoring typed snippet APIs (#3720)\n\nThis pr tackles 3 refactorings.\n\n## Providers that aren't really providers\nA ModelProvider is a generic abstraction that allows a plugin to\nrepresent how a model should be shaped. Should it have auto properties\nwith `{get; set;}` should it have explicit backing fields to track\nwhether or not a property was every modified to more intelligently\nserialize JsonMergePatch? All of these are different strategies that\ndifferent ModelProviders can give.\n\nArgumentProvider on the other hand is an implementation of TypeProvider\nthat produces a helper class inside the library. It is more of a\ndefinition than a Provider as we would not expect customers to override\nthis and give a different style for the Argument class.\n\nBecause of this the PR changes all such provider classes to have a\nsuffix of Definition instead.\n\n## TypedSnippet\nIt is cumbersome to need to always construct a new BinaryDataSnippet\nevery time you want to access the helper snippets for an expression that\nevaluates to a BinaryData. It is also an odd name of a class to have an\ninstance off since snippets are helpers which are usually static methods\nor extension methods. I am adding a `ScopeApi` which we can hang\nextension methods off of to allow us to change code like this\n\n```c#\nnew BinaryDataSnippet(value).ToArray()\n```\n\nto this\n\n```c#\nvalue.As().ToArray()\n```\n\nNow any expression can be converted into a type expression and if there\nare any snippet extension methods that exist the will appear in\nintellisense.\n\n## Static snippet helper\nOne more area where we need to call expression constructors is in\nInvokeStaticMethodConstructor. I have added a helper `Static` which\nwill change code like this\n\n```c#\nnew InvokeStaticMethodExpression(typeof(XmlConvert), nameof(XmlConvert.ToString), [timeSpanNoFormat]))\n```\n\nto this\n\n```c#\nStatic().Invoke(nameof(XmlConvert.ToString), [timeSpanNoFormat]))\n```","shortMessageHtmlLink":"Refactoring typed snippet APIs (#3720)"}},{"before":null,"after":"1f8b85cf90c2d3634858b3dc7aef3e2023b65530","ref":"refs/heads/gh-readonly-queue/main/pr-3728-b9d935dcf452c4e0e9e3e00cfa7d76fe02e868ba","pushedAt":"2024-07-03T16:35:54.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Fix the protocol method link to make the test project build properly (#3728)\n\nFixes https://github.com/microsoft/typespec/issues/3726\n\nThis is a temporary solution until we find a better way to solve\nhttps://github.com/microsoft/typespec/issues/3727","shortMessageHtmlLink":"Fix the protocol method link to make the test project build properly (#…"}},{"before":null,"after":"b9d935dcf452c4e0e9e3e00cfa7d76fe02e868ba","ref":"refs/heads/gh-readonly-queue/main/pr-3720-e32c011bfb4d32b527a07b8115dadb2457af6654","pushedAt":"2024-07-03T16:29:11.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Refactoring typed snippet APIs (#3720)\n\nThis pr tackles 3 refactorings.\n\n## Providers that aren't really providers\nA ModelProvider is a generic abstraction that allows a plugin to\nrepresent how a model should be shaped. Should it have auto properties\nwith `{get; set;}` should it have explicit backing fields to track\nwhether or not a property was every modified to more intelligently\nserialize JsonMergePatch? All of these are different strategies that\ndifferent ModelProviders can give.\n\nArgumentProvider on the other hand is an implementation of TypeProvider\nthat produces a helper class inside the library. It is more of a\ndefinition than a Provider as we would not expect customers to override\nthis and give a different style for the Argument class.\n\nBecause of this the PR changes all such provider classes to have a\nsuffix of Definition instead.\n\n## TypedSnippet\nIt is cumbersome to need to always construct a new BinaryDataSnippet\nevery time you want to access the helper snippets for an expression that\nevaluates to a BinaryData. It is also an odd name of a class to have an\ninstance off since snippets are helpers which are usually static methods\nor extension methods. I am adding a `ScopeApi` which we can hang\nextension methods off of to allow us to change code like this\n\n```c#\nnew BinaryDataSnippet(value).ToArray()\n```\n\nto this\n\n```c#\nvalue.As().ToArray()\n```\n\nNow any expression can be converted into a type expression and if there\nare any snippet extension methods that exist the will appear in\nintellisense.\n\n## Static snippet helper\nOne more area where we need to call expression constructors is in\nInvokeStaticMethodConstructor. I have added a helper `Static` which\nwill change code like this\n\n```c#\nnew InvokeStaticMethodExpression(typeof(XmlConvert), nameof(XmlConvert.ToString), [timeSpanNoFormat]))\n```\n\nto this\n\n```c#\nStatic().Invoke(nameof(XmlConvert.ToString), [timeSpanNoFormat]))\n```","shortMessageHtmlLink":"Refactoring typed snippet APIs (#3720)"}},{"before":"e32c011bfb4d32b527a07b8115dadb2457af6654","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-3742-222fd806a018faff841837ac740c10c25222ef97","pushedAt":"2024-07-03T09:18:28.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"222fd806a018faff841837ac740c10c25222ef97","after":"e32c011bfb4d32b527a07b8115dadb2457af6654","ref":"refs/heads/main","pushedAt":"2024-07-03T09:18:26.000Z","pushType":"merge_queue_merge","commitsCount":1,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"sync up 4879 from autorest.csharp (#3742)\n\nSync up changes from https://github.com/Azure/autorest.csharp/pull/4879","shortMessageHtmlLink":"sync up 4879 from autorest.csharp (#3742)"}},{"before":null,"after":"e32c011bfb4d32b527a07b8115dadb2457af6654","ref":"refs/heads/gh-readonly-queue/main/pr-3742-222fd806a018faff841837ac740c10c25222ef97","pushedAt":"2024-07-03T09:00:14.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"sync up 4879 from autorest.csharp (#3742)\n\nSync up changes from https://github.com/Azure/autorest.csharp/pull/4879","shortMessageHtmlLink":"sync up 4879 from autorest.csharp (#3742)"}},{"before":"0a0314801f645e58382ff84bc97bc16826bb7d33","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-3742-c0d8ddfe8057cae58c9e217b12f77e277f115c17","pushedAt":"2024-07-03T09:00:14.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"c0d8ddfe8057cae58c9e217b12f77e277f115c17","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-3720-222fd806a018faff841837ac740c10c25222ef97","pushedAt":"2024-07-03T09:00:14.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":null,"after":"0a0314801f645e58382ff84bc97bc16826bb7d33","ref":"refs/heads/gh-readonly-queue/main/pr-3742-c0d8ddfe8057cae58c9e217b12f77e277f115c17","pushedAt":"2024-07-03T08:27:33.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"sync up 4879 from autorest.csharp (#3742)\n\nSync up changes from https://github.com/Azure/autorest.csharp/pull/4879","shortMessageHtmlLink":"sync up 4879 from autorest.csharp (#3742)"}},{"before":null,"after":"c0d8ddfe8057cae58c9e217b12f77e277f115c17","ref":"refs/heads/gh-readonly-queue/main/pr-3720-222fd806a018faff841837ac740c10c25222ef97","pushedAt":"2024-07-03T07:57:06.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Refactoring typed snippet APIs (#3720)\n\nThis pr tackles 3 refactorings.\n\n## Providers that aren't really providers\nA ModelProvider is a generic abstraction that allows a plugin to\nrepresent how a model should be shaped. Should it have auto properties\nwith `{get; set;}` should it have explicit backing fields to track\nwhether or not a property was every modified to more intelligently\nserialize JsonMergePatch? All of these are different strategies that\ndifferent ModelProviders can give.\n\nArgumentProvider on the other hand is an implementation of TypeProvider\nthat produces a helper class inside the library. It is more of a\ndefinition than a Provider as we would not expect customers to override\nthis and give a different style for the Argument class.\n\nBecause of this the PR changes all such provider classes to have a\nsuffix of Definition instead.\n\n## TypedSnippet\nIt is cumbersome to need to always construct a new BinaryDataSnippet\nevery time you want to access the helper snippets for an expression that\nevaluates to a BinaryData. It is also an odd name of a class to have an\ninstance off since snippets are helpers which are usually static methods\nor extension methods. I am adding a `ScopeApi` which we can hang\nextension methods off of to allow us to change code like this\n\n```c#\nnew BinaryDataSnippet(value).ToArray()\n```\n\nto this\n\n```c#\nvalue.As().ToArray()\n```\n\nNow any expression can be converted into a type expression and if there\nare any snippet extension methods that exist the will appear in\nintellisense.\n\n## Static snippet helper\nOne more area where we need to call expression constructors is in\nInvokeStaticMethodConstructor. I have added a helper `Static` which\nwill change code like this\n\n```c#\nnew InvokeStaticMethodExpression(typeof(XmlConvert), nameof(XmlConvert.ToString), [timeSpanNoFormat]))\n```\n\nto this\n\n```c#\nStatic().Invoke(nameof(XmlConvert.ToString), [timeSpanNoFormat]))\n```","shortMessageHtmlLink":"Refactoring typed snippet APIs (#3720)"}},{"before":"222fd806a018faff841837ac740c10c25222ef97","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-3716-8354a758b92eeae0cd05d4d3f4246e3d83557e08","pushedAt":"2024-07-02T23:19:45.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"8354a758b92eeae0cd05d4d3f4246e3d83557e08","after":"222fd806a018faff841837ac740c10c25222ef97","ref":"refs/heads/main","pushedAt":"2024-07-02T23:19:44.000Z","pushType":"merge_queue_merge","commitsCount":1,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Move the internal CreateRequest methods to a partial client class (#3716)\n\nFixes: https://github.com/microsoft/typespec/issues/3681\n\n---------\n\nCo-authored-by: ShivangiReja ","shortMessageHtmlLink":"Move the internal CreateRequest methods to a partial client class (#3716"}},{"before":null,"after":"222fd806a018faff841837ac740c10c25222ef97","ref":"refs/heads/gh-readonly-queue/main/pr-3716-8354a758b92eeae0cd05d4d3f4246e3d83557e08","pushedAt":"2024-07-02T23:04:51.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Move the internal CreateRequest methods to a partial client class (#3716)\n\nFixes: https://github.com/microsoft/typespec/issues/3681\n\n---------\n\nCo-authored-by: ShivangiReja ","shortMessageHtmlLink":"Move the internal CreateRequest methods to a partial client class (#3716"}},{"before":"8354a758b92eeae0cd05d4d3f4246e3d83557e08","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-3663-47c93c8d9a8e6b2eca5c4aa746b1bf836ddadb33","pushedAt":"2024-07-02T23:01:02.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"47c93c8d9a8e6b2eca5c4aa746b1bf836ddadb33","after":"8354a758b92eeae0cd05d4d3f4246e3d83557e08","ref":"refs/heads/main","pushedAt":"2024-07-02T23:01:01.000Z","pushType":"merge_queue_merge","commitsCount":1,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Add support for converting OpenAPI3 specs to TypeSpec (#3663)\n\nfix #3038\nThis PR updates the `@typespec/openapi3` package to support converting\nOpenAPI3 specs to TypeSpec.\n\n## Example usage:\n1. `npm install @typespec/openapi3`\n2. `npx openapi3-to-tsp compile --output-dir ./tsp-output\n/path/to/openapi-yaml-or-json`\n\n## What's supported\n- Parse OpenAPI3 specs in yml/json formats (via 3rd party package)\n- Generates file namespace based on OpenAPI3 service name\n- Populates `@info` decorator with OpenAPI3 service info\n- Converts `#/components/schemas` into TypeSpec models/scalars.\n- Converts `#/components/parameters` into TypeSpec models/model\nproperties as appropriate.\n- Generates a response model for every operation/statusCode/contentType\ncombination.\n- Operation tags\n- Generates TypeSpec operations with routes/Http Method decorators\n- Generates docs/extension decorators\n- Most schema decorators\n- Model inheritance via `allOf`\n- Discriminators\n\n## What's not supported (yet)\n- auth\n- deprecated directive\n- combining multiple versions of an OpenAPI3-defined service into a\nsingle TypeSpec project\n- converting `#/components/requestBodies` and `#/components/responses`\ninto models - TypeSpec doesn't seem to generate these and I didn't find\nexamples in the wild where they were defined _and_ actually used so\ndeprioritized.\n- emitting warnings/FIXMEs for unexpected/unsupported scenarios\n- Probably a lot more that I'm still discovering\n\n## Notes\n\nWhen going through the TypeSpec -> OpenAPI3 -> TypeSpec loop, the\ngenerated TypeSpec is going to be larger than the original. The biggest\ncontribution towards this is because I'm currently generating a model\nfor every possible response on every operation.\n\nI can definitely pare this down with some simple heuristics that take\ninto account what default statusCode/contentTypes are, and extract the\nreferenced body type directly in the operation's return signature. I can\nalso eliminate the `@get` decorators, `@route(\"/\")` routes, and likely\nuse some of the response models provided by TypeSpec.Http.\n\nHowever - if I'm using this tool to convert from OpenAPI3 to TypeSpec -\nI thought it might be preferable to be more explicit in the generated\noutput so there's no mystery on how things actually get defined. Will be\ninterested in feedback on this.\n\n\n## Testing\nFor tests, I generate TypeSpec files for a number of OpenAPI3 specs.\nMost of the OpenAPI3 specs I generated from our TypeSpec samples\npackages. Then I'm able to compare the generated TypeSpec to the\ncorresponding original TypeSpec file. I've also been diffing the\nOpenAPI3 specs generated from the original and generated TypeSpec files\n<- these are what typically show no changes outside of known unsupported\nconversions (e.g. auth).\n\n---------\n\nCo-authored-by: Christopher Radek ","shortMessageHtmlLink":"Add support for converting OpenAPI3 specs to TypeSpec (#3663)"}},{"before":null,"after":"8354a758b92eeae0cd05d4d3f4246e3d83557e08","ref":"refs/heads/gh-readonly-queue/main/pr-3663-47c93c8d9a8e6b2eca5c4aa746b1bf836ddadb33","pushedAt":"2024-07-02T22:44:05.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Add support for converting OpenAPI3 specs to TypeSpec (#3663)\n\nfix #3038\nThis PR updates the `@typespec/openapi3` package to support converting\nOpenAPI3 specs to TypeSpec.\n\n## Example usage:\n1. `npm install @typespec/openapi3`\n2. `npx openapi3-to-tsp compile --output-dir ./tsp-output\n/path/to/openapi-yaml-or-json`\n\n## What's supported\n- Parse OpenAPI3 specs in yml/json formats (via 3rd party package)\n- Generates file namespace based on OpenAPI3 service name\n- Populates `@info` decorator with OpenAPI3 service info\n- Converts `#/components/schemas` into TypeSpec models/scalars.\n- Converts `#/components/parameters` into TypeSpec models/model\nproperties as appropriate.\n- Generates a response model for every operation/statusCode/contentType\ncombination.\n- Operation tags\n- Generates TypeSpec operations with routes/Http Method decorators\n- Generates docs/extension decorators\n- Most schema decorators\n- Model inheritance via `allOf`\n- Discriminators\n\n## What's not supported (yet)\n- auth\n- deprecated directive\n- combining multiple versions of an OpenAPI3-defined service into a\nsingle TypeSpec project\n- converting `#/components/requestBodies` and `#/components/responses`\ninto models - TypeSpec doesn't seem to generate these and I didn't find\nexamples in the wild where they were defined _and_ actually used so\ndeprioritized.\n- emitting warnings/FIXMEs for unexpected/unsupported scenarios\n- Probably a lot more that I'm still discovering\n\n## Notes\n\nWhen going through the TypeSpec -> OpenAPI3 -> TypeSpec loop, the\ngenerated TypeSpec is going to be larger than the original. The biggest\ncontribution towards this is because I'm currently generating a model\nfor every possible response on every operation.\n\nI can definitely pare this down with some simple heuristics that take\ninto account what default statusCode/contentTypes are, and extract the\nreferenced body type directly in the operation's return signature. I can\nalso eliminate the `@get` decorators, `@route(\"/\")` routes, and likely\nuse some of the response models provided by TypeSpec.Http.\n\nHowever - if I'm using this tool to convert from OpenAPI3 to TypeSpec -\nI thought it might be preferable to be more explicit in the generated\noutput so there's no mystery on how things actually get defined. Will be\ninterested in feedback on this.\n\n\n## Testing\nFor tests, I generate TypeSpec files for a number of OpenAPI3 specs.\nMost of the OpenAPI3 specs I generated from our TypeSpec samples\npackages. Then I'm able to compare the generated TypeSpec to the\ncorresponding original TypeSpec file. I've also been diffing the\nOpenAPI3 specs generated from the original and generated TypeSpec files\n<- these are what typically show no changes outside of known unsupported\nconversions (e.g. auth).\n\n---------\n\nCo-authored-by: Christopher Radek ","shortMessageHtmlLink":"Add support for converting OpenAPI3 specs to TypeSpec (#3663)"}},{"before":"47c93c8d9a8e6b2eca5c4aa746b1bf836ddadb33","after":null,"ref":"refs/heads/gh-readonly-queue/main/pr-3722-97d426e373595156b6d35b7187b59d81110bc166","pushedAt":"2024-07-02T22:01:08.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"}},{"before":"97d426e373595156b6d35b7187b59d81110bc166","after":"47c93c8d9a8e6b2eca5c4aa746b1bf836ddadb33","ref":"refs/heads/main","pushedAt":"2024-07-02T22:01:07.000Z","pushType":"merge_queue_merge","commitsCount":1,"pusher":{"login":"github-merge-queue[bot]","name":null,"path":"/apps/github-merge-queue","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9919?s=80&v=4"},"commit":{"message":"Generate PersistableModel create method (#3722)\n\nThis PR decouples the changes from\nhttps://github.com/microsoft/typespec/pull/3603 to support generating\nthe PersistableModel Create serialization method.\n\nSupports https://github.com/microsoft/typespec/issues/3330.","shortMessageHtmlLink":"Generate PersistableModel create method (#3722)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEdnrjDwA","startCursor":null,"endCursor":null}},"title":"Activity · microsoft/typespec"}